Revision: 56192
          http://sourceforge.net/p/brlcad/code/56192
Author:   indianlarry
Date:     2013-07-23 16:21:40 +0000 (Tue, 23 Jul 2013)
Log Message:
-----------
Added new grazing tolerance definition "BREP_GRAZING_TOL" currently set to 
0.000017453(or 0.001 degrees) was using RT_DOT_TOL at 0.001 (0.05 degrees) but 
causing to many grazing differences with CSG comparison test. Also tighted up 
the utah_pushBack() so keeps UV with domain of interest(I think this was 
loosened for some of the STEP pullbacks).  Added utah_pushBack() to previous 
halfstep loop in newton iterater which tries to fix over stepping. I the IN/OUT 
BREP stiching logic removed a loop that removed NEAR_HITs on ODD hit counts 
because it was being done before the remove duplicate points logic. Fixed sign 
problem on final SBV check of BREP root solver where I added VUNITIZE_TOL.

Modified Paths:
--------------
    brlcad/trunk/include/brep.h
    brlcad/trunk/src/librt/primitives/brep/brep.cpp

Modified: brlcad/trunk/include/brep.h
===================================================================
--- brlcad/trunk/include/brep.h 2013-07-23 14:06:42 UTC (rev 56191)
+++ brlcad/trunk/include/brep.h 2013-07-23 16:21:40 UTC (rev 56192)
@@ -77,6 +77,9 @@
 #define BREP_INTERSECTION_ROOT_SETTLE 1e-2
 /** Jungle Gym epsilon */
 
+/** tighten BREP grazing tolerance to 0.000017453(0.001 degrees) was using 
RT_DOT_TOL at 0.001 (0.05 degrees) **/
+#define BREP_GRAZING_DOT_TOL 0.000017453
+
 /* Use vector operations? For debugging */
 #define DO_VECTOR 1
 

Modified: brlcad/trunk/src/librt/primitives/brep/brep.cpp
===================================================================
--- brlcad/trunk/src/librt/primitives/brep/brep.cpp     2013-07-23 14:06:42 UTC 
(rev 56191)
+++ brlcad/trunk/src/librt/primitives/brep/brep.cpp     2013-07-23 16:21:40 UTC 
(rev 56192)
@@ -622,17 +622,28 @@
     double t0, t1;
 
     surf->GetDomain(0, &t0, &t1);
+    if (t1 < t0) {
+       double tmp = t0;
+       t0 = t1;
+       t1 = tmp;
+    }
+
     if (uv.x < t0) {
        uv.x = t0;
-    } else if (uv.x >= t1) {
-       uv.x = t1 - ROOT_TOL;
+    } else if (uv.x > t1) {
+       uv.x = t1;
     }
 
     surf->GetDomain(1, &t0, &t1);
+    if (t1 < t0) {
+       double tmp = t0;
+       t0 = t1;
+       t1 = tmp;
+    }
     if (uv.y < t0) {
        uv.y = t0;
-    } else if (uv.y >= t1) {
-       uv.y = t1 - ROOT_TOL;
+    } else if (uv.y > t1) {
+       uv.y = t1;
     }
 }
 
@@ -641,21 +652,22 @@
 utah_pushBack(const BBNode* sbv, ON_2dPoint &uv)
 {
     double t0, t1;
+    int i = sbv->m_u.m_t[0] < sbv->m_u.m_t[1] ? 0 : 1;
 
-    t0 = sbv->m_u.m_t[0];
-    t1 = sbv->m_u.m_t[1];
-    if (uv.x < t0 - BREP_EDGE_MISS_TOLERANCE) {
-       uv.x = t0 + ROOT_TOL;;
-    } else if (uv.x >= t1 + BREP_EDGE_MISS_TOLERANCE) {
-       uv.x = t1 - ROOT_TOL;
+    t0 = sbv->m_u.m_t[i];
+    t1 = sbv->m_u.m_t[1-i];
+    if (uv.x < t0) {
+       uv.x = t0;
+    } else if (uv.x > t1) {
+       uv.x = t1;
     }
-
-    t0 = sbv->m_v.m_t[0];
-    t1 = sbv->m_v.m_t[1];
-    if (uv.y < t0 - BREP_EDGE_MISS_TOLERANCE) {
-       uv.y = t0 + ROOT_TOL;;
-    } else if (uv.y >= t1 + BREP_EDGE_MISS_TOLERANCE) {
-       uv.y = t1 - ROOT_TOL;
+    i = sbv->m_v.m_t[0] < sbv->m_v.m_t[1] ? 0 : 1;
+    t0 = sbv->m_v.m_t[i];
+    t1 = sbv->m_v.m_t[1-i];
+    if (uv.y < t0 ) {
+       uv.y = t0;
+    } else if (uv.y > t1) {
+       uv.y = t1;
     }
 }
 
@@ -769,6 +781,8 @@
            uv.x = (puv.x + uv.x)/2.0;
            uv.y = (puv.y + uv.y)/2.0;
 
+           utah_pushBack(sbv, uv);
+
            surf->Ev1Der(uv.x, uv.y, S, Su, Sv);
            utah_F(S, p1, p1d, p2, p2d, f, g);
            rootdist = fabs(f) + fabs(g);
@@ -791,7 +805,7 @@
            int ulow = (sbv->m_u.m_t[0] <= sbv->m_u.m_t[1]) ? 0 : 1;
            int vlow = (sbv->m_v.m_t[0] <= sbv->m_v.m_t[1]) ? 0 : 1;
            if ((sbv->m_u.m_t[ulow]-VUNITIZE_TOL < uv.x && uv.x < 
sbv->m_u.m_t[1-ulow]+VUNITIZE_TOL) &&
-                   (sbv->m_v.m_t[vlow]-VUNITIZE_TOL < uv.y && uv.y < 
sbv->m_v.m_t[1-vlow]-VUNITIZE_TOL)) {
+                   (sbv->m_v.m_t[vlow]-VUNITIZE_TOL < uv.y && uv.y < 
sbv->m_v.m_t[1-vlow]+VUNITIZE_TOL)) {
                bool new_point = true;
                for (int j=0;j<count;j++) {
                    if (NEAR_EQUAL(uv.x, ouv[j].x, VUNITIZE_TOL) && 
NEAR_EQUAL(uv.y, ouv[j].y, VUNITIZE_TOL)) {
@@ -1382,87 +1396,93 @@
            curr++;
        }
        //    bu_log("**** After Pass2 Hits: %d\n", hits.size());
-
+#if 0
+// haven't checked for duplicate points so let's not do this yet
        if ((hits.size() > 0) && ((hits.size() % 2) != 0)) {
            brep_hit &curr_hit = hits.back();
            if (curr_hit.hit == brep_hit::NEAR_HIT) {
                hits.pop_back();
            }
        }
+#endif
     }
-    ///////////// near hit end
-    if (false) { //((hits.size() % 2) != 0) {
-       bu_log("**** After Pass3 Hits: %zu\n", hits.size());
 
-       for (HitList::iterator i = hits.begin(); i != hits.end(); ++i) {
-           point_t prev;
+#if 0
+    bu_log("**** After Pass3 Hits: %zu\n", hits.size());
 
-           brep_hit &out = *i;
+    for (HitList::iterator i = hits.begin(); i != hits.end(); ++i) {
+       point_t prev;
 
-           if (i != hits.begin()) {
-               bu_log("<%g>", DIST_PT_PT(out.point, prev));
-           }
-           bu_log("(");
-           if (out.hit == brep_hit::CRACK_HIT) bu_log("_CRACK_(%d)", 
out.face.m_face_index);
-           if (out.hit == brep_hit::CLEAN_HIT) bu_log("_CH_(%d)", 
out.face.m_face_index);
-           if (out.hit == brep_hit::NEAR_HIT) bu_log("_NH_(%d)", 
out.face.m_face_index);
-           if (out.hit == brep_hit::NEAR_MISS) bu_log("_NM_(%d)", 
out.face.m_face_index);
-           if (out.direction == brep_hit::ENTERING) bu_log("+");
-           if (out.direction == brep_hit::LEAVING) bu_log("-");
-           VMOVE(prev, out.point);
-           bu_log(")");
+       brep_hit &out = *i;
+
+       if (i != hits.begin()) {
+           bu_log("<%g>", DIST_PT_PT(out.point, prev));
        }
-       bu_log("\n**** Orig Hits: %zu\n", orig.size());
+       bu_log("(");
+       if (out.hit == brep_hit::CRACK_HIT) bu_log("_CRACK_(%d)", 
out.face.m_face_index);
+       if (out.hit == brep_hit::CLEAN_HIT) bu_log("_CH_(%d)", 
out.face.m_face_index);
+       if (out.hit == brep_hit::NEAR_HIT) bu_log("_NH_(%d)", 
out.face.m_face_index);
+       if (out.hit == brep_hit::NEAR_MISS) bu_log("_NM_(%d)", 
out.face.m_face_index);
+       if (out.direction == brep_hit::ENTERING) bu_log("+");
+       if (out.direction == brep_hit::LEAVING) bu_log("-");
+       VMOVE(prev, out.point);
+       bu_log(")");
+    }
+    bu_log("\n**** Orig Hits: %zu\n", orig.size());
 
-       for (HitList::iterator i = orig.begin(); i != orig.end(); ++i) {
-           point_t prev;
+    for (HitList::iterator i = orig.begin(); i != orig.end(); ++i) {
+       point_t prev;
 
-           brep_hit &out = *i;
+       brep_hit &out = *i;
 
-           if (i != orig.begin()) {
-               bu_log("<%g>", DIST_PT_PT(out.point, prev));
-           }
-           bu_log("(");
-           if (out.hit == brep_hit::CRACK_HIT) bu_log("_CRACK_(%d)", 
out.face.m_face_index);
-           if (out.hit == brep_hit::CLEAN_HIT) bu_log("_CH_(%d)", 
out.face.m_face_index);
-           if (out.hit == brep_hit::NEAR_HIT) bu_log("_NH_(%d)", 
out.face.m_face_index);
-           if (out.hit == brep_hit::NEAR_MISS) bu_log("_NM_(%d)", 
out.face.m_face_index);
-           if (out.direction == brep_hit::ENTERING) bu_log("+");
-           if (out.direction == brep_hit::LEAVING) bu_log("-");
-           VMOVE(prev, out.point);
-           bu_log(")");
+       if (i != orig.begin()) {
+           bu_log("<%g>", DIST_PT_PT(out.point, prev));
        }
+       bu_log("(");
+       if (out.hit == brep_hit::CRACK_HIT) bu_log("_CRACK_(%d)", 
out.face.m_face_index);
+       if (out.hit == brep_hit::CLEAN_HIT) bu_log("_CH_(%d)", 
out.face.m_face_index);
+       if (out.hit == brep_hit::NEAR_HIT) bu_log("_NH_(%d)", 
out.face.m_face_index);
+       if (out.hit == brep_hit::NEAR_MISS) bu_log("_NM_(%d)", 
out.face.m_face_index);
+       if (out.direction == brep_hit::ENTERING) bu_log("+");
+       if (out.direction == brep_hit::LEAVING) bu_log("-");
+       VMOVE(prev, out.point);
+       bu_log(")");
+    }
 
-       bu_log("\n**********************\n");
+    bu_log("\n**********************\n");
+#endif
 
-    }
-
     all_hits.clear();
     all_hits = hits;
 
-    ////////////////////////
-    TRACE("---");
-    int num = 0;
-    for (HitList::iterator i = hits.begin(); i != hits.end(); ++i) {
-       if ((i->trimmed && !i->closeToEdge) || i->oob || 
NEAR_ZERO(VDOT(i->normal, rp->r_dir), RT_DOT_TOL)) {
-           // remove what we were removing earlier
-           if (i->oob) {
-               TRACE("\toob u: " << i->uv[0] << ", " << IVAL(i->sbv->m_u));
-               TRACE("\toob v: " << i->uv[1] << ", " << IVAL(i->sbv->m_v));
-           }
-           i = hits.erase(i);
 
-           if (i != hits.begin())
-               --i;
+    if (hits.size() > 0) {
+       // remove grazing hits with with normal to ray dot less than 
BREP_GRAZING_DOT_TOL (>= 89.999 degrees obliq)
+       TRACE("-- Remove grazing hits --");
+       int num = 0;
+       for (HitList::iterator i = hits.begin(); i != hits.end(); ++i) {
+           brep_hit &curr_hit = *i;
+           if ((curr_hit.trimmed && !curr_hit.closeToEdge) || curr_hit.oob || 
NEAR_ZERO(VDOT(curr_hit.normal, rp->r_dir), BREP_GRAZING_DOT_TOL)) {
+               // remove what we were removing earlier
+               if (curr_hit.oob) {
+                   TRACE("\toob u: " << i->uv[0] << ", " << IVAL(i->sbv->m_u));
+                   TRACE("\toob v: " << i->uv[1] << ", " << IVAL(i->sbv->m_v));
+               }
+               i = hits.erase(i);
 
-           continue;
+               if (i != hits.begin())
+                   --i;
+
+               continue;
+           }
+           TRACE("hit " << num << ": " << PT(i->point) << " [" << 
VDOT(i->normal, rp->r_dir) << "]");
+           ++num;
        }
-       TRACE("hit " << num << ": " << PT(i->point) << " [" << VDOT(i->normal, 
rp->r_dir) << "]");
-       ++num;
     }
 
+
     if (hits.size() > 0) {
-       // we should have "valid" points now, remove duplicates or grazes
+       // we should have "valid" points now, remove duplicates or grazes(same 
point with in/out sign change)
        HitList::iterator last = hits.begin();
        HitList::iterator i = hits.begin();
        ++i;
@@ -1489,6 +1509,7 @@
            }
        }
     }
+
     // remove multiple "INs" in a row assume last "IN" is the actual entering 
hit, for
     // multiple "OUTs" in a row assume first "OUT" is the actual exiting hit, 
remove unused
     // "INs/OUTs" from hit list.
@@ -1537,148 +1558,131 @@
     }
 
 #if 0
-    if (false) {
-       if (hits.size() > 1 && (hits.size() % 2) != 0) {
-           bu_log("**** ERROR odd number of hits: %d\n", hits.size());
+    if (hits.size() > 1 && (hits.size() % 2) != 0) {
+       bu_log("**** ERROR odd number of hits: %d\n", hits.size());
+       for (HitList::iterator i = hits.begin(); i != hits.end(); ++i) {
+           brep_hit&out = *i;
+           bu_log("(");
+           if (out.hit == brep_hit::CLEAN_HIT) bu_log("H");
+           if ((out.hit == brep_hit::NEAR_HIT) || (out.hit == 
brep_hit::NEAR_MISS)) bu_log("c");
+           if (out.direction == brep_hit::ENTERING) bu_log("+");
+           if (out.direction == brep_hit::LEAVING) bu_log("-");
+           bu_log(")");
+       }
+       bu_log("\n");
+
+       bu_log("xyz %g %g %g \n", rp->r_pt[0], rp->r_pt[1], rp->r_pt[2]);
+       bu_log("dir %g %g %g \n", rp->r_dir[0], rp->r_dir[1], rp->r_dir[2]);
+       if ((hits.size() % 2) != 0) {
+           bu_log("**** Current Hits: %d\n", hits.size());
+
            for (HitList::iterator i = hits.begin(); i != hits.end(); ++i) {
-               brep_hit&out = *i;
+               point_t prev;
+
+               brep_hit &out = *i;
+
+               if (i != hits.begin()) {
+                   bu_log("<%g>", DIST_PT_PT(out.point, prev));
+               }
                bu_log("(");
-               if (out.hit == brep_hit::CLEAN_HIT) bu_log("H");
-               if ((out.hit == brep_hit::NEAR_HIT) || (out.hit == 
brep_hit::NEAR_MISS)) bu_log("c");
+               if (out.hit == brep_hit::CRACK_HIT) bu_log("_CRACK_(%d)", 
out.face.m_face_index);
+               if (out.hit == brep_hit::CLEAN_HIT) bu_log("_CH_(%d)", 
out.face.m_face_index);
+               if (out.hit == brep_hit::NEAR_HIT) bu_log("_NH_(%d)", 
out.face.m_face_index);
+               if (out.hit == brep_hit::NEAR_MISS) bu_log("_NM_(%d)", 
out.face.m_face_index);
                if (out.direction == brep_hit::ENTERING) bu_log("+");
                if (out.direction == brep_hit::LEAVING) bu_log("-");
+               VMOVE(prev, out.point);
                bu_log(")");
            }
-           bu_log("\n");
+           bu_log("\n**** Orig Hits: %d\n", orig.size());
 
-           bu_log("xyz %g %g %g \n", rp->r_pt[0], rp->r_pt[1], rp->r_pt[2]);
-           bu_log("dir %g %g %g \n", rp->r_dir[0], rp->r_dir[1], rp->r_dir[2]);
-           if ((hits.size() % 2) != 0) {
-               bu_log("**** Current Hits: %d\n", hits.size());
+           for (HitList::iterator i = orig.begin(); i != orig.end(); ++i) {
+               point_t prev;
 
-               for (HitList::iterator i = hits.begin(); i != hits.end(); ++i) {
-                   point_t prev;
+               brep_hit &out = *i;
 
-                   brep_hit &out = *i;
-
-                   if (i != hits.begin()) {
-                       bu_log("<%g>", DIST_PT_PT(out.point, prev));
-                   }
-                   bu_log("(");
-                   if (out.hit == brep_hit::CRACK_HIT) bu_log("_CRACK_(%d)", 
out.face.m_face_index);
-                   if (out.hit == brep_hit::CLEAN_HIT) bu_log("_CH_(%d)", 
out.face.m_face_index);
-                   if (out.hit == brep_hit::NEAR_HIT) bu_log("_NH_(%d)", 
out.face.m_face_index);
-                   if (out.hit == brep_hit::NEAR_MISS) bu_log("_NM_(%d)", 
out.face.m_face_index);
-                   if (out.direction == brep_hit::ENTERING) bu_log("+");
-                   if (out.direction == brep_hit::LEAVING) bu_log("-");
-                   VMOVE(prev, out.point);
-                   bu_log(")");
+               if (i != orig.begin()) {
+                   bu_log("<%g>", DIST_PT_PT(out.point, prev));
                }
-               bu_log("\n**** Orig Hits: %d\n", orig.size());
+               bu_log("(");
+               if (out.hit == brep_hit::CRACK_HIT) bu_log("_CRACK_(%d)", 
out.face.m_face_index);
+               if (out.hit == brep_hit::CLEAN_HIT) bu_log("_CH_(%d)", 
out.face.m_face_index);
+               if (out.hit == brep_hit::NEAR_HIT) bu_log("_NH_(%d)", 
out.face.m_face_index);
+               if (out.hit == brep_hit::NEAR_MISS) bu_log("_NM_(%d)", 
out.face.m_face_index);
+               if (out.direction == brep_hit::ENTERING) bu_log("+");
+               if (out.direction == brep_hit::LEAVING) bu_log("-");
+               //bu_log("<%d>", out.sbv->m_face->m_bRev);
+               VMOVE(prev, out.point);
+               bu_log(")");
+           }
 
-               for (HitList::iterator i = orig.begin(); i != orig.end(); ++i) {
-                   point_t prev;
+           bu_log("\n**********************\n");
 
-                   brep_hit &out = *i;
-
-                   if (i != orig.begin()) {
-                       bu_log("<%g>", DIST_PT_PT(out.point, prev));
-                   }
-                   bu_log("(");
-                   if (out.hit == brep_hit::CRACK_HIT) bu_log("_CRACK_(%d)", 
out.face.m_face_index);
-                   if (out.hit == brep_hit::CLEAN_HIT) bu_log("_CH_(%d)", 
out.face.m_face_index);
-                   if (out.hit == brep_hit::NEAR_HIT) bu_log("_NH_(%d)", 
out.face.m_face_index);
-                   if (out.hit == brep_hit::NEAR_MISS) bu_log("_NM_(%d)", 
out.face.m_face_index);
-                   if (out.direction == brep_hit::ENTERING) bu_log("+");
-                   if (out.direction == brep_hit::LEAVING) bu_log("-");
-                   //bu_log("<%d>", out.sbv->m_face->m_bRev);
-                   VMOVE(prev, out.point);
-                   bu_log(")");
-               }
-
-               bu_log("\n**********************\n");
-
-           }
        }
-       point_t last_point;
-       int hitCount = 0;
-       for (HitList::iterator i = hits.begin(); i != hits.end(); ++i) {
-           if (hitCount == 0) {
-               TRACE2("point: " << i->point[0] << ", " << i->point[1] << ", " 
<< i->point[2] << " dist_to_ray: " << DIST_PT_PT(i->point, rp->r_pt));
-           } else {
-               TRACE2("point: " << i->point[0] << ", " << i->point[1] << ", " 
<< i->point[2] << " dist_to_ray: " << DIST_PT_PT(i->point, rp->r_pt) << " 
dist_to_last_point: " << DIST_PT_PT(i->point, last_point));
-           }
-           VMOVE(last_point, i->point);
-           hitCount += 1;
+    }
+    point_t last_point;
+    int hitCount = 0;
+    for (HitList::iterator i = hits.begin(); i != hits.end(); ++i) {
+       if (hitCount == 0) {
+           TRACE2("point: " << i->point[0] << ", " << i->point[1] << ", " << 
i->point[2] << " dist_to_ray: " << DIST_PT_PT(i->point, rp->r_pt));
+       } else {
+           TRACE2("point: " << i->point[0] << ", " << i->point[1] << ", " << 
i->point[2] << " dist_to_ray: " << DIST_PT_PT(i->point, rp->r_pt) << " 
dist_to_last_point: " << DIST_PT_PT(i->point, last_point));
        }
+       VMOVE(last_point, i->point);
+       hitCount += 1;
+    }
 #ifdef PLOTTING
-       pcount++;
-       if (pcount > -1) {
-           point_t ray;
-           point_t vscaled;
-           VSCALE(vscaled, rp->r_dir, 100);
-           VADD2(ray, rp->r_pt, vscaled);
-           COLOR_PLOT(200, 200, 200);
-           LINE_PLOT(rp->r_pt, ray);
-       }
+    pcount++;
+    if (pcount > -1) {
+       point_t ray;
+       point_t vscaled;
+       VSCALE(vscaled, rp->r_dir, 100);
+       VADD2(ray, rp->r_pt, vscaled);
+       COLOR_PLOT(200, 200, 200);
+       LINE_PLOT(rp->r_pt, ray);
+    }
 #endif
-       all_hits.clear();
-       all_hits = hits;
+    all_hits.clear();
+    all_hits = hits;
 
-       num = 0;
-       MissList::iterator m = misses.begin();
-       for (HitList::iterator i = all_hits.begin(); i != all_hits.end(); ++i) {
+    num = 0;
+    MissList::iterator m = misses.begin();
+    for (HitList::iterator i = all_hits.begin(); i != all_hits.end(); ++i) {
 
 #ifdef PLOTTING
-           if (pcount > -1) {
-               // set the color of point and normal
-               if (i->trimmed && i->closeToEdge) {
-                   COLOR_PLOT(0, 0, 255); // blue is trimmed but close to edge
-               } else if (i->trimmed) {
-                   COLOR_PLOT(255, 255, 0); // yellow trimmed
-               } else if (i->oob) {
-                   COLOR_PLOT(255, 0, 0); // red is oob
-               } else if (NEAR_ZERO(VDOT(i->normal, rp->r_dir), RT_DOT_TOL)) {
-                   COLOR_PLOT(0, 255, 255); // purple is grazing
-               } else {
-                   COLOR_PLOT(0, 255, 0); // green is regular surface
-               }
+       if (pcount > -1) {
+           // set the color of point and normal
+           if (i->trimmed && i->closeToEdge) {
+               COLOR_PLOT(0, 0, 255); // blue is trimmed but close to edge
+           } else if (i->trimmed) {
+               COLOR_PLOT(255, 255, 0); // yellow trimmed
+           } else if (i->oob) {
+               COLOR_PLOT(255, 0, 0); // red is oob
+           } else if (NEAR_ZERO(VDOT(i->normal, rp->r_dir), RT_DOT_TOL)) {
+               COLOR_PLOT(0, 255, 255); // purple is grazing
+           } else {
+               COLOR_PLOT(0, 255, 0); // green is regular surface
+           }
 
-               // draw normal
-               point_t v;
-               VADD2(v, i->point, i->normal);
-               LINE_PLOT(i->point, v);
+           // draw normal
+           point_t v;
+           VADD2(v, i->point, i->normal);
+           LINE_PLOT(i->point, v);
 
-               // draw intersection
-               PT_PLOT(i->point);
+           // draw intersection
+           PT_PLOT(i->point);
 
-               // draw bounding box
-               BB_PLOT(i->sbv->m_node.m_min, i->sbv->m_node.m_max);
-           }
+           // draw bounding box
+           BB_PLOT(i->sbv->m_node.m_min, i->sbv->m_node.m_max);
+       }
 #endif
 
-           TRACE("hit " << num << ": " << ON_PRINT3(i->point) << " [" << dot 
<< "]");
-           while ((m != misses.end()) && (m->first == num)) {
-               static int reasons = 0;
-               if (reasons < 100) {
-                   reasons++;
-                   TRACE("miss " << num << ": " << 
BREP_INTERSECT_REASON(m->second));
-               } else {
-                   static int quelled = 0;
-                   if (!quelled) {
-                       TRACE("Too many reasons.  Suppressing further output." 
<< std::endl);
-                       quelled = 1;
-                   }
-               }
-               ++m;
-           }
-           num++;
-       }
-       while (m != misses.end()) {
+       TRACE("hit " << num << ": " << ON_PRINT3(i->point) << " [" << dot << 
"]");
+       while ((m != misses.end()) && (m->first == num)) {
            static int reasons = 0;
            if (reasons < 100) {
                reasons++;
-               TRACE("miss " << BREP_INTERSECT_REASON(m->second));
+               TRACE("miss " << num << ": " << 
BREP_INTERSECT_REASON(m->second));
            } else {
                static int quelled = 0;
                if (!quelled) {
@@ -1688,7 +1692,22 @@
            }
            ++m;
        }
+       num++;
     }
+    while (m != misses.end()) {
+       static int reasons = 0;
+       if (reasons < 100) {
+           reasons++;
+           TRACE("miss " << BREP_INTERSECT_REASON(m->second));
+       } else {
+           static int quelled = 0;
+           if (!quelled) {
+               TRACE("Too many reasons.  Suppressing further output." << 
std::endl);
+               quelled = 1;
+           }
+       }
+       ++m;
+    }
 #endif
 
     bool hit = false;

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


------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to