Revision: 53675
          http://brlcad.svn.sourceforge.net/brlcad/?rev=53675&view=rev
Author:   n_reed
Date:     2012-11-14 16:38:34 +0000 (Wed, 14 Nov 2012)
Log Message:
-----------
use spacing parameters to choose number of points/curves to plot

Modified Paths:
--------------
    brlcad/trunk/src/librt/primitives/rhc/rhc.c

Modified: brlcad/trunk/src/librt/primitives/rhc/rhc.c
===================================================================
--- brlcad/trunk/src/librt/primitives/rhc/rhc.c 2012-11-14 15:57:33 UTC (rev 
53674)
+++ brlcad/trunk/src/librt/primitives/rhc/rhc.c 2012-11-14 16:38:34 UTC (rev 
53675)
@@ -774,6 +774,10 @@
     int count;
     struct rt_pt_node *curve;
 
+    if (num_points < 2) {
+       return NULL;
+    }
+
     curve = (struct rt_pt_node *)bu_malloc(sizeof(struct rt_pt_node), 
"rt_pt_node");
     curve->next = (struct rt_pt_node *)bu_malloc(sizeof(struct rt_pt_node), 
"rt_pt_node");
 
@@ -781,6 +785,10 @@
     VSET(curve->p,       0, 0, -mag_b);
     VSET(curve->next->p, 0, r, 0);
 
+    if (num_points < 3) {
+       return curve;
+    }
+
     count = approximate_hyperbolic_curve(curve, c, rhc_hyperbola_b(mag_b, c, 
r), num_points - 2);
 
     if (count != (num_points - 2)) {
@@ -892,12 +900,31 @@
     }
 }
 
+static int
+rhc_curve_points(
+       struct rt_rhc_internal *rhc,
+       const struct rt_view_info *info)
+{
+    fastf_t height, halfwidth, est_curve_length;
+    point_t p0, p1;
+
+    height = -MAGNITUDE(rhc->rhc_B);
+    halfwidth = rhc->rhc_r;
+
+    VSET(p0, 0, 0, height);
+    VSET(p1, 0, halfwidth, 0);
+
+    est_curve_length = 2.0 * DIST_PT_PT(p0, p1);
+
+    return est_curve_length / info->point_spacing;
+}
+
 int
 rt_rhc_adaptive_plot(struct rt_db_internal *ip, const struct rt_view_info 
*info)
 {
     point_t p;
     vect_t rhc_R;
-    int num_curve_points;
+    int num_curve_points, num_connections;
     struct rt_rhc_internal *rhc;
     struct rt_pt_node *pts, *node, *tmp;
 
@@ -909,7 +936,7 @@
        return -2;
     }
 
-    num_curve_points = sqrt(primitive_diagonal_samples(ip, info)) / 4.0;
+    num_curve_points = rhc_curve_points(rhc, info);
 
     if (num_curve_points < 3) {
        num_curve_points = 3;
@@ -920,13 +947,34 @@
     VSCALE(rhc_R, rhc_R, rhc->rhc_r);
 
     pts = rhc_hyperbolic_curve(MAGNITUDE(rhc->rhc_B), rhc->rhc_c, rhc->rhc_r, 
num_curve_points);
-
     rhc_plot_hyperbolas(info->vhead, rhc, pts);
 
+    node = pts;
+    while (node != NULL) {
+       tmp = node;
+       node = node->next;
+
+       bu_free(tmp, "rt_pt_node");
+    }
+
     /* connect both halves of the hyperbolic contours of the opposing faces */
+    num_connections = primitive_curve_count(ip, info);
+    if (num_connections < 2) {
+       num_connections = 2;
+    }
+
+    pts = rhc_hyperbolic_curve(MAGNITUDE(rhc->rhc_B), rhc->rhc_c, rhc->rhc_r, 
num_connections);
     rhc_plot_curve_connections(info->vhead, rhc, pts, 1.0);
     rhc_plot_curve_connections(info->vhead, rhc, pts, -1.0);
 
+    node = pts;
+    while (node != NULL) {
+       tmp = node;
+       node = node->next;
+
+       bu_free(tmp, "rt_pt_node");
+    }
+
     /* plot rectangular face */
     VADD2(p, rhc->rhc_V, rhc_R);
     RT_ADD_VLIST(info->vhead, p, BN_VLIST_LINE_MOVE);
@@ -943,14 +991,6 @@
     VJOIN1(p, p, 2.0, rhc_R);
     RT_ADD_VLIST(info->vhead, p, BN_VLIST_LINE_DRAW);
 
-    node = pts;
-    while (node != NULL) {
-       tmp = node;
-       node = node->next;
-
-       bu_free(tmp, "rt_pt_node");
-    }
-
     return 0;
 }
 

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
BRL-CAD Source Commits mailing list
brlcad-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to