Revision: 74205
          http://sourceforge.net/p/brlcad/code/74205
Author:   starseeker
Date:     2019-10-21 19:06:04 +0000 (Mon, 21 Oct 2019)
Log Message:
-----------
Move tree build inside function

Modified Paths:
--------------
    brlcad/trunk/src/libbrep/cdt_ovlps.cpp

Modified: brlcad/trunk/src/libbrep/cdt_ovlps.cpp
===================================================================
--- brlcad/trunk/src/libbrep/cdt_ovlps.cpp      2019-10-21 17:41:35 UTC (rev 
74204)
+++ brlcad/trunk/src/libbrep/cdt_ovlps.cpp      2019-10-21 19:06:04 UTC (rev 
74205)
@@ -1779,11 +1779,39 @@
 
 int
 split_brep_face_edges_near_verts(
-       std::set<std::pair<omesh_t *, omesh_t *>> &check_pairs,
-       std::map<long, cdt_mesh::bedge_seg_t *> &b_edges,
-       RTree<long, double, 3> &bedge_tree
+       std::set<struct ON_Brep_CDT_State *> &a_cdt,
+       std::set<std::pair<omesh_t *, omesh_t *>> &check_pairs
        )
 {
+    std::map<long, cdt_mesh::bedge_seg_t *> b_edges;
+    RTree<long, double, 3> bedge_tree;
+    long ecnt = 0;
+    {
+       std::set<struct ON_Brep_CDT_State *>::iterator a_it;
+       for (a_it = a_cdt.begin(); a_it != a_cdt.end(); a_it++) {
+           struct ON_Brep_CDT_State *s_cdt = *a_it;
+           std::map<int, std::set<cdt_mesh::bedge_seg_t *>>::iterator ep_it;
+           for (ep_it = s_cdt->e2polysegs.begin(); ep_it != 
s_cdt->e2polysegs.end(); ep_it++) {
+               std::set<cdt_mesh::bedge_seg_t *>::iterator bs_it;
+               for (bs_it = ep_it->second.begin(); bs_it != 
ep_it->second.end(); bs_it++) {
+                   cdt_mesh::bedge_seg_t *bseg = *bs_it;
+                   b_edges[ecnt] = bseg;
+                   ON_BoundingBox bb = edge_bbox(bseg);
+                   double fMin[3];
+                   fMin[0] = bb.Min().x;
+                   fMin[1] = bb.Min().y;
+                   fMin[2] = bb.Min().z;
+                   double fMax[3];
+                   fMax[0] = bb.Max().x;
+                   fMax[1] = bb.Max().y;
+                   fMax[2] = bb.Max().z;
+                   bedge_tree.Insert(fMin, fMax, ecnt);
+                   ecnt++;
+               }
+           }
+       }
+    }
+
     std::set<std::pair<omesh_t *, omesh_t *>>::iterator cp_it;
     int replaced_tris = 0;
 
@@ -1818,7 +1846,7 @@
                double d2 = p3d2->DistanceTo(p);
                double dline = 2*p.DistanceTo(line.ClosestPointTo(p));
                if (d1 > dline && d2 > dline) {
-                   std::cout << "ACCEPT: d1: " << d1 << ", d2: " << d2 << ", 
dline: " << dline << "\n";
+                   //std::cout << "ACCEPT: d1: " << d1 << ", d2: " << d2 << ", 
dline: " << dline << "\n";
                    if (edge_vert.find(eseg) != edge_vert.end()) {
                        ON_3dPoint pv = edge_vert[eseg]->vpnt();
                        double dv = pv.DistanceTo(line.ClosestPointTo(pv));
@@ -1835,7 +1863,7 @@
                    ON_BoundingBox edge_bb = edge_bbox(eseg);
                    BBOX_PLOT(plot_file, edge_bb);
                } else {
-                   std::cout << "REJECT: d1: " << d1 << ", d2: " << d2 << ", 
dline: " << dline << "\n";
+                   //std::cout << "REJECT: d1: " << d1 << ", d2: " << d2 << ", 
dline: " << dline << "\n";
                }
            }
            //std::cout << "used_verts: " << used_verts << "\n";
@@ -1860,7 +1888,7 @@
        ON_3dPoint cep = nc->PointAt(t);
        //ON_3dPoint concern(2.599,7.821, 23.563);
        //if (cep.DistanceTo(concern) < 0.01) {
-           std::cout << "cep: " << cep.x << "," << cep.y << "," << cep.z << 
"\n";
+           //std::cout << "cep: " << cep.x << "," << cep.y << "," << cep.z << 
"\n";
        //    std::cout << "Distance: " << cep.DistanceTo(p) << "\n";
        //}
        double epdist1 = eseg->e_start->DistanceTo(cep);
@@ -2431,45 +2459,15 @@
 
     // Boundary edges are handled at a brep object level, not a face level - 
handle
     // them as an independent process
-    {
-       std::map<long, cdt_mesh::bedge_seg_t *> b_edges;
-       RTree<long, double, 3> bedge_tree;
-       std::set<struct ON_Brep_CDT_State *> a_cdt;
-       for (p_it = check_pairs.begin(); p_it != check_pairs.end(); p_it++) {
-           a_cdt.insert((struct ON_Brep_CDT_State *)p_it->first->p_cdt);
-           a_cdt.insert((struct ON_Brep_CDT_State *)p_it->second->p_cdt);
-       }
-       long ecnt = 0;
-       std::set<struct ON_Brep_CDT_State *>::iterator a_it;
-       for (a_it = a_cdt.begin(); a_it != a_cdt.end(); a_it++) {
-           struct ON_Brep_CDT_State *s_cdt = *a_it;
-           std::map<int, std::set<cdt_mesh::bedge_seg_t *>>::iterator ep_it;
-           for (ep_it = s_cdt->e2polysegs.begin(); ep_it != 
s_cdt->e2polysegs.end(); ep_it++) {
-               std::set<cdt_mesh::bedge_seg_t *>::iterator bs_it;
-               for (bs_it = ep_it->second.begin(); bs_it != 
ep_it->second.end(); bs_it++) {
-                   cdt_mesh::bedge_seg_t *bseg = *bs_it;
-                   b_edges[ecnt] = bseg;
-                   ON_BoundingBox bb = edge_bbox(bseg);
-                   double fMin[3];
-                   fMin[0] = bb.Min().x;
-                   fMin[1] = bb.Min().y;
-                   fMin[2] = bb.Min().z;
-                   double fMax[3];
-                   fMax[0] = bb.Max().x;
-                   fMax[1] = bb.Max().y;
-                   fMax[2] = bb.Max().z;
-                   bedge_tree.Insert(fMin, fMax, ecnt);
-                   ecnt++;
-               }
-           }
-       }
-
-       int sbfvtri_cnt = split_brep_face_edges_near_verts(ocheck_pairs, 
b_edges, bedge_tree);
-       if (sbfvtri_cnt) {
-           std::cout << "Replaced " << sbfvtri_cnt << " triangles by splitting 
edges near vertices\n";
-           check_faces_validity(check_pairs, 2);
-       }
-
+    std::set<struct ON_Brep_CDT_State *> a_cdt;
+    for (p_it = check_pairs.begin(); p_it != check_pairs.end(); p_it++) {
+       a_cdt.insert((struct ON_Brep_CDT_State *)p_it->first->p_cdt);
+       a_cdt.insert((struct ON_Brep_CDT_State *)p_it->second->p_cdt);
+    }
+    int sbfvtri_cnt = split_brep_face_edges_near_verts(a_cdt, ocheck_pairs);
+    if (sbfvtri_cnt) {
+       std::cout << "Replaced " << sbfvtri_cnt << " triangles by splitting 
edges near vertices\n";
+       check_faces_validity(check_pairs, 2);
        std::cout << "Post edges-near-verts split overlap cnt: " << 
face_ovlps_cnt(s_a, s_cnt) << "\n";
     }
 

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



_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to