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