Revision: 53734
          http://brlcad.svn.sourceforge.net/brlcad/?rev=53734&view=rev
Author:   n_reed
Date:     2012-11-16 19:55:25 +0000 (Fri, 16 Nov 2012)
Log Message:
-----------
turn one function that does two things into two functions that do one thing

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

Modified: brlcad/trunk/src/librt/primitives/pipe/pipe.c
===================================================================
--- brlcad/trunk/src/librt/primitives/pipe/pipe.c       2012-11-16 19:38:38 UTC 
(rev 53733)
+++ brlcad/trunk/src/librt/primitives/pipe/pipe.c       2012-11-16 19:55:25 UTC 
(rev 53734)
@@ -47,6 +47,7 @@
 #include "rtgeom.h"
 #include "raytrace.h"
 #include "wdb.h"
+#include "../../librt_private.h"
 
 
 struct id_pipe {
@@ -1656,20 +1657,45 @@
     return 0;
 }
 
+/**
+ * Draw a circle that has the given center and radius using the specified
+ * number of line segments. au and bu are expected to be orthogonal unit
+ * vectors in the plane of the circle.
+ */
+static void
+draw_pipe_circle(
+    struct bu_list *vhead,
+    fastf_t radius,
+    vect_t center,
+    vect_t au,
+    vect_t bu,
+    int seg_count)
+{
+    vect_t axis_a, axis_b;
 
+    VSCALE(axis_a, au, radius);
+    VSCALE(axis_b, bu, radius);
+
+    plot_ellipse(vhead, center, axis_a, axis_b, seg_count);
+}
+
 /**
  * D R A W _ P I P E _ A R C
  *
- * v1 and v2 must be unit vectors normal to each other in plane of
- * circle.  v1 must be in direction from center to start point (unless
- * a full circle is requested). "End" is the endpoint of
- * arc. "Seg_count" is how many straight line segments to use to draw
- * the arc. "Full_circle" is a flag to indicate that a complete circle
- * is desired.
+ * Using the specified number of segments, draw the shortest arc on the circle
+ * with the given center and radius that ends at (end) and starts at
+ * (center + radius * v1). v1 and v2 are expected to be orthogonal unit vectors
+ * in the plane of the circle.
  */
-
 HIDDEN void
-draw_pipe_arc(struct bu_list *vhead, fastf_t radius, fastf_t *center, const 
fastf_t *v1, const fastf_t *v2, fastf_t *end, int seg_count, int full_circle)
+draw_pipe_arc(
+    struct bu_list *vhead,
+    fastf_t radius,
+    fastf_t *center,
+    const fastf_t *v1,
+    const fastf_t *v2,
+    fastf_t *end,
+    int seg_count)
 {
     fastf_t arc_angle;
     fastf_t delta_ang;
@@ -1681,13 +1707,9 @@
 
     BU_CK_LIST_HEAD(vhead);
 
-    if (!full_circle) {
-       VSUB2(to_end, end, center);
-       arc_angle = atan2(VDOT(to_end, v2), VDOT(to_end, v1));
-       delta_ang = arc_angle / seg_count;
-    } else {
-       delta_ang = 2.0 * bn_pi / seg_count;
-    }
+    VSUB2(to_end, end, center);
+    arc_angle = atan2(VDOT(to_end, v2), VDOT(to_end, v1));
+    delta_ang = arc_angle / seg_count;
 
     cos_del = cos(delta_ang);
     sin_del = sin(delta_ang);
@@ -1788,26 +1810,26 @@
     VJOIN1(tmp_end, end, or , end_f1);
     VSUB2(tmp_vec, tmp_start, tmp_center);
     tmp_radius = MAGNITUDE(tmp_vec);
-    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count, 
0);
+    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count);
     VJOIN2(tmp_start, center, radius, v1, - or , f1);
     VJOIN1(tmp_center, center, -move_dist, norm);
     VJOIN1(tmp_end, end, - or , end_f1);
     VSUB2(tmp_vec, tmp_start, tmp_center);
     tmp_radius = MAGNITUDE(tmp_vec);
-    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count, 
0);
+    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count);
     move_dist = or * VDOT(f2, norm);
     VJOIN2(tmp_start, center, radius, v1, or , f2);
     VJOIN1(tmp_center, center, move_dist, norm);
     VJOIN1(tmp_end, end, or , end_f2);
     VSUB2(tmp_vec, tmp_start, tmp_center);
     tmp_radius = MAGNITUDE(tmp_vec);
-    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count, 
0);
+    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count);
     VJOIN2(tmp_start, center, radius, v1, - or , f2);
     VJOIN1(tmp_center, center, -move_dist, norm);
     VJOIN1(tmp_end, end, - or , end_f2);
     VSUB2(tmp_vec, tmp_start, tmp_center);
     tmp_radius = MAGNITUDE(tmp_vec);
-    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count, 
0);
+    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count);
 
     if (ir <= 0.0) {
        VMOVE(f1, end_f1);
@@ -1821,26 +1843,26 @@
     VJOIN1(tmp_end, end, ir, end_f1);
     VSUB2(tmp_vec, tmp_start, tmp_center);
     tmp_radius = MAGNITUDE(tmp_vec);
-    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count, 
0);
+    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count);
     VJOIN2(tmp_start, center, radius, v1, -ir, f1);
     VJOIN1(tmp_center, center, -move_dist, norm);
     VJOIN1(tmp_end, end, -ir, end_f1);
     VSUB2(tmp_vec, tmp_start, tmp_center);
     tmp_radius = MAGNITUDE(tmp_vec);
-    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count, 
0);
+    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count);
     move_dist = ir * VDOT(f2, norm);
     VJOIN2(tmp_start, center, radius, v1, ir, f2);
     VJOIN1(tmp_center, center, move_dist, norm);
     VJOIN1(tmp_end, end, ir, end_f2);
     VSUB2(tmp_vec, tmp_start, tmp_center);
     tmp_radius = MAGNITUDE(tmp_vec);
-    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count, 
0);
+    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count);
     VJOIN2(tmp_start, center, radius, v1, -ir, f2);
     VJOIN1(tmp_center, center, -move_dist, norm);
     VJOIN1(tmp_end, end, -ir, end_f2);
     VSUB2(tmp_vec, tmp_start, tmp_center);
     tmp_radius = MAGNITUDE(tmp_vec);
-    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count, 
0);
+    draw_pipe_arc(vhead, tmp_radius, tmp_center, v1, v2, tmp_end, seg_count);
 
     VMOVE(f1, end_f1);
     VMOVE(f2, end_f2);
@@ -1885,9 +1907,10 @@
     VCROSS(f2, f3, f1);
     VUNITIZE(f2);
 
-    draw_pipe_arc(vhead, prevp->pp_od / 2.0, prevp->pp_coord, f1, f2, f2, 
ARC_SEGS, 1);
+    draw_pipe_circle(vhead, prevp->pp_od / 2.0, prevp->pp_coord, f1, f2, 
ARC_SEGS);
+
     if (prevp->pp_id > 0.0) {
-       draw_pipe_arc(vhead, prevp->pp_id / 2.0, prevp->pp_coord, f1, f2, f2, 
ARC_SEGS, 1);
+       draw_pipe_circle(vhead, prevp->pp_id / 2.0, prevp->pp_coord, f1, f2, 
ARC_SEGS);
     }
 
     while (1) {
@@ -1948,9 +1971,10 @@
        nextp = BU_LIST_NEXT(wdb_pipept, &curp->l);
     }
 
-    draw_pipe_arc(vhead, curp->pp_od / 2.0, curp->pp_coord, f1, f2, f2, 
ARC_SEGS, 1);
+    draw_pipe_circle(vhead, curp->pp_od / 2.0, curp->pp_coord, f1, f2, 
ARC_SEGS);
+
     if (curp->pp_id > 0.0) {
-       draw_pipe_arc(vhead, curp->pp_id / 2.0, curp->pp_coord, f1, f2, f2, 
ARC_SEGS, 1);
+       draw_pipe_circle(vhead, curp->pp_id / 2.0, curp->pp_coord, f1, f2, 
ARC_SEGS);
     }
 
     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