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