Revision: 69099
          http://sourceforge.net/p/brlcad/code/69099
Author:   starseeker
Date:     2016-10-17 14:16:49 +0000 (Mon, 17 Oct 2016)
Log Message:
-----------
the zero thickness bbox test is common to multiple code bits in librt - 
refactor into a macro

Modified Paths:
--------------
    brlcad/trunk/src/librt/librt_private.h
    brlcad/trunk/src/librt/primitives/bot/bot.c
    brlcad/trunk/src/librt/primitives/bot/btg.c
    brlcad/trunk/src/librt/primitives/bot/g_bot_include.c
    brlcad/trunk/src/librt/primitives/bspline/bspline.cpp

Modified: brlcad/trunk/src/librt/librt_private.h
===================================================================
--- brlcad/trunk/src/librt/librt_private.h      2016-10-17 14:03:16 UTC (rev 
69098)
+++ brlcad/trunk/src/librt/librt_private.h      2016-10-17 14:16:49 UTC (rev 
69099)
@@ -33,6 +33,7 @@
 
 #include "common.h"
 
+#include "vmath.h"
 #include "rt/db4.h"
 #include "raytrace.h"
 
@@ -41,6 +42,23 @@
     (1.0 + (3.0 * ((((a) - b))/((a) + (b))) * ((((a) - b))/((a) + (b))))) \
     / (10.0 + sqrt(4.0 - 3.0 * ((((a) - b))/((a) + (b))) * ((((a) - b))/((a) + 
(b)))))
 
+/* logic to ensure bboxes are not degenerate in any dimension - zero thickness
+ * bounding boxes will get missed by the raytracer */
+#define BBOX_NONDEGEN(min, max, dist) \
+    if (NEAR_EQUAL(min[X], max[X], dist)) { \
+       min[X] -= dist; \
+       max[X] += dist; \
+        } \
+    if (NEAR_EQUAL(min[Y], max[Y], dist)) { \
+       min[Y] -= dist; \
+       max[Y] += dist; \
+    } \
+    if (NEAR_EQUAL(min[Z], max[Z], dist)) { \
+       min[Z] -= dist; \
+       max[Z] += dist; \
+    }
+
+
 __BEGIN_DECLS
 
 /* db_flip.c */

Modified: brlcad/trunk/src/librt/primitives/bot/bot.c
===================================================================
--- brlcad/trunk/src/librt/primitives/bot/bot.c 2016-10-17 14:03:16 UTC (rev 
69098)
+++ brlcad/trunk/src/librt/primitives/bot/bot.c 2016-10-17 14:16:49 UTC (rev 
69099)
@@ -50,6 +50,7 @@
 /* private implementation headers */
 #include "./btg.h"     /* for the bottie_ functions */
 #include "./bot_edge.h"
+#include "../../librt_private.h"
 
 
 #define MAXHITS 128

Modified: brlcad/trunk/src/librt/primitives/bot/btg.c
===================================================================
--- brlcad/trunk/src/librt/primitives/bot/btg.c 2016-10-17 14:03:16 UTC (rev 
69098)
+++ brlcad/trunk/src/librt/primitives/bot/btg.c 2016-10-17 14:16:49 UTC (rev 
69099)
@@ -36,6 +36,7 @@
 #include "rt/tie.h"
 
 #include "btg.h"
+#include "../../librt_private.h"
 
 #include "tie.c"
 #include "tie_kdtree.c"
@@ -131,18 +132,7 @@
     VMOVE(stp->st_max, tie->amax);
 
     /* zero thickness will get missed by the raytracer */
-    if (NEAR_EQUAL(stp->st_min[X], stp->st_max[X], rtip->rti_tol.dist)) {
-       stp->st_min[X] -= rtip->rti_tol.dist;
-       stp->st_max[X] += rtip->rti_tol.dist;
-    }
-    if (NEAR_EQUAL(stp->st_min[Y], stp->st_max[Y], rtip->rti_tol.dist)) {
-       stp->st_min[Y] -= rtip->rti_tol.dist;
-       stp->st_max[Y] += rtip->rti_tol.dist;
-    }
-    if (NEAR_EQUAL(stp->st_min[Z], stp->st_max[Z], rtip->rti_tol.dist)) {
-       stp->st_min[Z] -= rtip->rti_tol.dist;
-       stp->st_max[Z] += rtip->rti_tol.dist;
-    }
+    BBOX_NONDEGEN(stp->st_min, stp->st_max, rtip->rti_tol.dist)
 
     VMOVE(stp->st_center, tie->mid);
     stp->st_aradius = tie->radius;

Modified: brlcad/trunk/src/librt/primitives/bot/g_bot_include.c
===================================================================
--- brlcad/trunk/src/librt/primitives/bot/g_bot_include.c       2016-10-17 
14:03:16 UTC (rev 69098)
+++ brlcad/trunk/src/librt/primitives/bot/g_bot_include.c       2016-10-17 
14:16:49 UTC (rev 69099)
@@ -328,18 +328,7 @@
     }
 
     /* zero thickness will get missed by the raytracer */
-    if (NEAR_EQUAL(stp->st_min[X], stp->st_max[X], los)) {
-       stp->st_min[X] -= los;
-       stp->st_max[X] += los;
-    }
-    if (NEAR_EQUAL(stp->st_min[Y], stp->st_max[Y], los)) {
-       stp->st_min[Y] -= los;
-       stp->st_max[Y] += los;
-    }
-    if (NEAR_EQUAL(stp->st_min[Z], stp->st_max[Z], los)) {
-       stp->st_min[Z] -= los;
-       stp->st_max[Z] += los;
-    }
+    BBOX_NONDEGEN(stp->st_min, stp->st_max, los)
 
     VADD2SCALE(stp->st_center, stp->st_max, stp->st_min, 0.5);
 

Modified: brlcad/trunk/src/librt/primitives/bspline/bspline.cpp
===================================================================
--- brlcad/trunk/src/librt/primitives/bspline/bspline.cpp       2016-10-17 
14:03:16 UTC (rev 69098)
+++ brlcad/trunk/src/librt/primitives/bspline/bspline.cpp       2016-10-17 
14:16:49 UTC (rev 69099)
@@ -260,18 +260,7 @@
     stp->st_specific = (void *)nurbs;
 
     /* zero thickness will get missed by the raytracer */
-    if (NEAR_EQUAL(stp->st_min[X], stp->st_max[X], los)) {
-       stp->st_min[X] -= los;
-       stp->st_max[X] += los;
-    }
-    if (NEAR_EQUAL(stp->st_min[Y], stp->st_max[Y], los)) {
-       stp->st_min[Y] -= los;
-       stp->st_max[Y] += los;
-    }
-    if (NEAR_EQUAL(stp->st_min[Z], stp->st_max[Z], los)) {
-       stp->st_min[Z] -= los;
-       stp->st_max[Z] += los;
-    }
+    BBOX_NONDEGEN(stp->st_min, stp->st_max, los)
 
     VADD2SCALE(stp->st_center, stp->st_max, stp->st_min, 0.5);
     {

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


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
BRL-CAD Source Commits mailing list
brlcad-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to