Revision: 53779
          http://brlcad.svn.sourceforge.net/brlcad/?rev=53779&view=rev
Author:   n_reed
Date:     2012-11-20 16:07:27 +0000 (Tue, 20 Nov 2012)
Log Message:
-----------
clean up draw loop to remove goto

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-20 02:54:37 UTC 
(rev 53778)
+++ brlcad/trunk/src/librt/primitives/pipe/pipe.c       2012-11-20 16:07:27 UTC 
(rev 53779)
@@ -1886,14 +1886,18 @@
  * R T _ P I P E _ P L O T
  */
 int
-rt_pipe_plot(struct bu_list *vhead, struct rt_db_internal *ip, const struct 
rt_tess_tol *UNUSED(ttol), const struct bn_tol *UNUSED(tol), const struct 
rt_view_info *UNUSED(info))
+rt_pipe_plot(
+    struct bu_list *vhead,
+    struct rt_db_internal *ip,
+    const struct rt_tess_tol *UNUSED(ttol),
+    const struct bn_tol *UNUSED(tol),
+    const struct rt_view_info *UNUSED(info))
 {
-    struct wdb_pipept *prevp;
-    struct wdb_pipept *curp;
-    struct wdb_pipept *nextp;
+    fastf_t angle, dist_to_bend;
     struct rt_pipe_internal *pip;
-    point_t current_point;
-    vect_t f1, f2, f3;
+    struct wdb_pipept *prevp, *curp, *nextp;
+    vect_t f1, f2, f3, n1, n2, v1, v2, norm;
+    point_t current_point, bend_center, bend_start, bend_end;
 
     BU_CK_LIST_HEAD(vhead);
     RT_CK_DB_INTERNAL(ip);
@@ -1926,33 +1930,29 @@
        draw_pipe_circle(vhead, prevp->pp_id / 2.0, prevp->pp_coord, f1, f2, 
ARC_SEGS);
     }
 
-    while (1) {
-       vect_t n1, n2;
-       vect_t norm;
-       fastf_t angle;
-       fastf_t dist_to_bend;
+#define ALL_BUT_LAST_SEGMENT ; \
+    !BU_LIST_IS_HEAD(&nextp->l, &pip->pipe_segs_head); \
+    prevp = curp, curp = nextp, nextp = BU_LIST_NEXT(wdb_pipept, &curp->l)
 
-       if (BU_LIST_IS_HEAD(&nextp->l, &pip->pipe_segs_head)) {
-           /* last segment */
-           draw_linear_seg(vhead,
-                   current_point, prevp->pp_od / 2.0, prevp->pp_id / 2.0,
-                   curp->pp_coord, curp->pp_od / 2.0, curp->pp_id / 2.0,
-                   f1, f2);
-           break;
-       }
-
+    for (ALL_BUT_LAST_SEGMENT) {
        VSUB2(n1, prevp->pp_coord, curp->pp_coord);
-       if (VNEAR_ZERO(n1, RT_LEN_TOL)) {
-           /* duplicate point, nothing to plot */
-           goto next_pt;
-       }
        VSUB2(n2, nextp->pp_coord, curp->pp_coord);
        VCROSS(norm, n1, n2);
        VUNITIZE(n1);
        VUNITIZE(n2);
+
+       if (VNEAR_ZERO(n1, RT_LEN_TOL)) {
+           /* duplicate point, nothing to plot */
+           continue;
+       }
+
        angle = bn_pi - acos(VDOT(n1, n2));
        dist_to_bend = curp->pp_bendradius * tan(angle / 2.0);
-       if (isnan(dist_to_bend) || VNEAR_ZERO(norm, SQRT_SMALL_FASTF) || 
NEAR_ZERO(dist_to_bend, SQRT_SMALL_FASTF)) {
+
+       if (isnan(dist_to_bend)
+           || VNEAR_ZERO(norm, SQRT_SMALL_FASTF)
+           || NEAR_ZERO(dist_to_bend, SQRT_SMALL_FASTF))
+       {
            /* points are colinear, draw linear segment */
            draw_linear_seg(vhead,
                    current_point, prevp->pp_od / 2.0, prevp->pp_id / 2.0,
@@ -1960,11 +1960,6 @@
                    f1, f2);
            VMOVE(current_point, curp->pp_coord);
        } else {
-           point_t bend_center;
-           point_t bend_start;
-           point_t bend_end;
-           vect_t v1, v2;
-
            VUNITIZE(norm);
 
            /* draw linear segment to start of bend */
@@ -1984,12 +1979,14 @@
 
            VMOVE(current_point, bend_end);
        }
-next_pt:
-       prevp = curp;
-       curp = nextp;
-       nextp = BU_LIST_NEXT(wdb_pipept, &curp->l);
     }
 
+    /* draw last segment */
+    draw_linear_seg(vhead,
+           current_point, prevp->pp_od / 2.0, prevp->pp_id / 2.0,
+           curp->pp_coord, curp->pp_od / 2.0, curp->pp_id / 2.0,
+           f1, f2);
+
     /* draw pipe end */
     draw_pipe_circle(vhead, curp->pp_od / 2.0, curp->pp_coord, f1, f2, 
ARC_SEGS);
 

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
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to