Revision: 73800
          http://sourceforge.net/p/brlcad/code/73800
Author:   starseeker
Date:     2019-08-30 18:50:55 +0000 (Fri, 30 Aug 2019)
Log Message:
-----------
Accumulate the cpolyedge pointers associated with singularities.

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

Modified: brlcad/trunk/src/libbrep/cdt2.cpp
===================================================================
--- brlcad/trunk/src/libbrep/cdt2.cpp   2019-08-30 18:37:44 UTC (rev 73799)
+++ brlcad/trunk/src/libbrep/cdt2.cpp   2019-08-30 18:50:55 UTC (rev 73800)
@@ -1033,6 +1033,7 @@
     }
 
     // TODO - split singularity trims in 2D
+    std::set<cdt_mesh::cpolyedge_t *> singular_edges;
     for (int face_index = 0; face_index < brep->m_F.Count(); face_index++) {
        ON_BrepFace &face = s_cdt->brep->m_F[face_index];
        int loop_cnt = face.LoopCount();
@@ -1039,38 +1040,24 @@
        cdt_mesh::cdt_mesh_t *fmesh = &s_cdt->fmeshes[face_index];
        cdt_mesh::cpolygon_t *cpoly = NULL;
 
+
        for (int li = 0; li < loop_cnt; li++) {
            const ON_BrepLoop *loop = face.Loop(li);
            bool is_outer = (face.OuterLoop()->m_loop_index == 
loop->m_loop_index) ? true : false;
-           if (is_outer) {
-               cpoly = &fmesh->outer_loop;
-           } else {
-               cpoly = fmesh->inner_loops[li];
-           }
-
-           size_t ecnt = 1;
+           cpoly =  (is_outer) ? &fmesh->outer_loop :fmesh->inner_loops[li];
            if (!cpoly->poly.size()) continue;  // Shouldn't be possible?...
            cdt_mesh::cpolyedge_t *pe = (*cpoly->poly.begin());
            cdt_mesh::cpolyedge_t *first = pe;
            cdt_mesh::cpolyedge_t *next = pe->next;
 
-           std::set<cdt_mesh::cpolyedge_t *> visited;
-           visited.insert(first);
+           if (!first->eseg) singular_edges.insert(first);
 
-           if (!first->eseg) {
-               //std::cout << face_index << "," << li << ": have 
singularity\n";
-           }
-
            // Walk the loop - an infinite loop is not closed
+           size_t ecnt = 1;
            while (first != next) {
                ecnt++;
-               if (!next) {
-                   break;
-               }
-               if (!next->eseg) {
-                   //std::cout << face_index << "," << li << ": have 
singularity\n";
-               }
-               visited.insert(next);
+               if (!next) break;
+               if (!next->eseg) singular_edges.insert(next);
                next = next->next;
                if (ecnt > cpoly->poly.size()) {
                    std::cout << "\nERROR infinite loop\n";
@@ -1078,10 +1065,11 @@
                }
            }
        }
-
     }
+    if (singular_edges.size()) {
+       std::cout << "Have " << singular_edges.size() << " singular edges\n";
+    }
 
-
     // Build RTrees of 2D and 3D edge segments for edge aware processing
     for (int index = 0; index < brep->m_E.Count(); index++) {
        std::set<cdt_mesh::bedge_seg_t *> &epsegs = s_cdt->e2polysegs[index];

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