Revision: 53706
          http://brlcad.svn.sourceforge.net/brlcad/?rev=53706&view=rev
Author:   n_reed
Date:     2012-11-15 18:15:00 +0000 (Thu, 15 Nov 2012)
Log Message:
-----------
implement stub

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

Modified: brlcad/trunk/src/librt/primitives/arb8/arb8.c
===================================================================
--- brlcad/trunk/src/librt/primitives/arb8/arb8.c       2012-11-15 16:11:14 UTC 
(rev 53705)
+++ brlcad/trunk/src/librt/primitives/arb8/arb8.c       2012-11-15 18:15:00 UTC 
(rev 53706)
@@ -1097,29 +1097,112 @@
     bu_free((char *)arbp, "arb_specific");
 }
 
+#define ARB_FACE(vlist_head, arb_pts, a, b, c, d) \
+    RT_ADD_VLIST(vlist_head, arb_pts[a], BN_VLIST_LINE_MOVE); \
+    RT_ADD_VLIST(vlist_head, arb_pts[b], BN_VLIST_LINE_DRAW); \
+    RT_ADD_VLIST(vlist_head, arb_pts[c], BN_VLIST_LINE_DRAW); \
+    RT_ADD_VLIST(vlist_head, arb_pts[d], BN_VLIST_LINE_DRAW);
+
+#define ARB_RECTANGLE(vlist_head, arb_pts, a, b, c, d) \
+    ARB_FACE(vlist_head, arb_pts, a, b, c, d); \
+    RT_ADD_VLIST(vlist_head, arb_pts[a], BN_VLIST_LINE_DRAW);
+
+/* Plot some number of cross sections (determined by info) between a start and
+ * end face.
+ */
+static void
+arb_plot_cross_sections(
+       point_t start[4],
+       point_t end[4],
+       const struct rt_view_info *info)
+{
+    int i, num_steps;
+    vect_t t[4];
+    point_t rec[4];
+    fastf_t width, step;
+
+    VMOVE(rec[0], start[0]);
+    VMOVE(rec[1], start[1]);
+    VMOVE(rec[2], start[2]);
+    VMOVE(rec[3], start[3]);
+
+    /* choose number of steps based on average distance between faces */
+    width = DIST_PT_PT(start[0], end[0]);
+    width += DIST_PT_PT(start[1], end[1]);
+    width += DIST_PT_PT(start[2], end[2]);
+    width += DIST_PT_PT(start[3], end[3]);
+    width /= 4.0;
+    num_steps = (width / info->curve_spacing) - 1.0;
+
+    if (num_steps < 1) {
+       return;
+    }
+
+    /* calculate actual step vectors for each pair of points between faces */
+#define CALCULATE_TRAVEL_VECTOR(i) \
+    width = DIST_PT_PT(start[i], end[i]); \
+    step = width / num_steps; \
+    VSUB2(t[i], end[i], start[i]); \
+    VUNITIZE(t[i]); \
+    VSCALE(t[i], t[i], step); \
+
+    CALCULATE_TRAVEL_VECTOR(0);
+    CALCULATE_TRAVEL_VECTOR(1);
+    CALCULATE_TRAVEL_VECTOR(2);
+    CALCULATE_TRAVEL_VECTOR(3);
+
+    /* step and plot rectangles */
+    for (i = 1; i < num_steps; ++i) {
+       VADD2(rec[0], rec[0], t[0]);
+       VADD2(rec[1], rec[1], t[1]);
+       VADD2(rec[2], rec[2], t[2]);
+       VADD2(rec[3], rec[3], t[3]);
+       ARB_RECTANGLE(info->vhead, rec, 0, 1, 2, 3);
+    }
+}
+
 int
 rt_arb_adaptive_plot(
        struct rt_db_internal *ip,
        const struct rt_view_info *info)
 {
     struct rt_arb_internal *arb;
+    point_t *pts;
+    point_t start[4], end[4];
 
     BU_CK_LIST_HEAD(info->vhead);
     RT_CK_DB_INTERNAL(ip);
     arb = (struct rt_arb_internal *)ip->idb_ptr;
     RT_ARB_CK_MAGIC(arb);
 
-    return 0;
-}
+    pts = arb->pt;
 
+    ARB_FACE(info->vhead, pts, 0, 1, 2, 3);
+    ARB_FACE(info->vhead, pts, 4, 0, 3, 7);
+    ARB_FACE(info->vhead, pts, 5, 4, 7, 6);
+    ARB_FACE(info->vhead, pts, 1, 5, 6, 2);
 
-#define ARB_FACE(valp, a, b, c, d) \
-       RT_ADD_VLIST(vhead, valp[a], BN_VLIST_LINE_MOVE); \
-       RT_ADD_VLIST(vhead, valp[b], BN_VLIST_LINE_DRAW); \
-       RT_ADD_VLIST(vhead, valp[c], BN_VLIST_LINE_DRAW); \
-       RT_ADD_VLIST(vhead, valp[d], BN_VLIST_LINE_DRAW);
+#define ARB_REC_SET(rec, pts, a, b, c, d) \
+    VMOVE(rec[0], pts[a]); \
+    VMOVE(rec[1], pts[b]); \
+    VMOVE(rec[2], pts[c]); \
+    VMOVE(rec[3], pts[d]);
 
+    ARB_REC_SET(start, pts, 1, 5, 6, 2);
+    ARB_REC_SET(end, pts, 0, 4, 7, 3);
+    arb_plot_cross_sections(start, end, info);
 
+    ARB_REC_SET(start, pts, 0, 1, 2, 3);
+    ARB_REC_SET(end, pts, 4, 5, 6, 7);
+    arb_plot_cross_sections(start, end, info);
+
+    ARB_REC_SET(start, pts, 0, 4, 5, 1);
+    ARB_REC_SET(end, pts, 3, 7, 6, 2);
+    arb_plot_cross_sections(start, end, info);
+
+    return 0;
+}
+
 /**
  * R T _ A R B _ P L O T
  *
@@ -1132,6 +1215,7 @@
 int
 rt_arb_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))
 {
+    point_t *pts;
     struct rt_arb_internal *aip;
 
     BU_CK_LIST_HEAD(vhead);
@@ -1139,10 +1223,12 @@
     aip = (struct rt_arb_internal *)ip->idb_ptr;
     RT_ARB_CK_MAGIC(aip);
 
-    ARB_FACE(aip->pt, 0, 1, 2, 3);
-    ARB_FACE(aip->pt, 4, 0, 3, 7);
-    ARB_FACE(aip->pt, 5, 4, 7, 6);
-    ARB_FACE(aip->pt, 1, 5, 6, 2);
+    pts = aip->pt;
+    ARB_FACE(vhead, pts, 0, 1, 2, 3);
+    ARB_FACE(vhead, pts, 4, 0, 3, 7);
+    ARB_FACE(vhead, pts, 5, 4, 7, 6);
+    ARB_FACE(vhead, pts, 1, 5, 6, 2);
+
     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
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to