Revision: 73810
http://sourceforge.net/p/brlcad/code/73810
Author: starseeker
Date: 2019-08-31 20:58:11 +0000 (Sat, 31 Aug 2019)
Log Message:
-----------
Continue splitting edges until tolerances are met.
Modified Paths:
--------------
brlcad/trunk/src/libbrep/cdt2.cpp
brlcad/trunk/src/libbrep/cdt_util.cpp
Modified: brlcad/trunk/src/libbrep/cdt2.cpp
===================================================================
--- brlcad/trunk/src/libbrep/cdt2.cpp 2019-08-31 19:29:27 UTC (rev 73809)
+++ brlcad/trunk/src/libbrep/cdt2.cpp 2019-08-31 20:58:11 UTC (rev 73810)
@@ -696,7 +696,6 @@
// 1. Any edges with at least 1 closed trim are split.
if (trim1->IsClosed() || trim2->IsClosed()) {
- std::cout << "ec split : \n";
esegs_closed = split_edge_seg(s_cdt, e, 1);
if (!esegs_closed.size()) {
// split failed??
@@ -1006,15 +1005,27 @@
std::set<cdt_mesh::bedge_seg_t *> &epsegs =
s_cdt->e2polysegs[edge.m_edge_index];
std::set<cdt_mesh::bedge_seg_t *>::iterator e_it;
std::set<cdt_mesh::bedge_seg_t *> new_segs;
+ std::set<cdt_mesh::bedge_seg_t *> ws1, ws2;
+ std::set<cdt_mesh::bedge_seg_t *> *ws = &ws1;
+ std::set<cdt_mesh::bedge_seg_t *> *ns = &ws2;
for (e_it = epsegs.begin(); e_it != epsegs.end(); e_it++) {
cdt_mesh::bedge_seg_t *b = *e_it;
- std::set<cdt_mesh::bedge_seg_t *> esegs_split;
- esegs_split = split_edge_seg(s_cdt, b, 0);
+ ws->insert(b);
+ }
+ while (ws->size()) {
+ cdt_mesh::bedge_seg_t *b = *ws->begin();
+ ws->erase(ws->begin());
+ std::set<cdt_mesh::bedge_seg_t *> esegs_split =
split_edge_seg(s_cdt, b, 0);
if (esegs_split.size()) {
- new_segs.insert(esegs_split.begin(), esegs_split.end());
+ ns->insert(esegs_split.begin(), esegs_split.end());
} else {
new_segs.insert(b);
}
+ if (!ws->size() && ns->size()) {
+ std::set<cdt_mesh::bedge_seg_t *> *tmp = ws;
+ ws = ns;
+ ns = tmp;
+ }
}
s_cdt->e2polysegs[edge.m_edge_index].clear();
s_cdt->e2polysegs[edge.m_edge_index].insert(new_segs.begin(),
new_segs.end());
@@ -1086,19 +1097,31 @@
for (int index = 0; index < brep->m_E.Count(); index++) {
ON_BrepEdge& edge = brep->m_E[index];
const ON_Curve* crv = edge.EdgeCurveOf();
- if (crv->IsLinear(BN_TOL_DIST)) {
+ if (crv && crv->IsLinear(BN_TOL_DIST)) {
std::set<cdt_mesh::bedge_seg_t *> &epsegs =
s_cdt->e2polysegs[edge.m_edge_index];
std::set<cdt_mesh::bedge_seg_t *>::iterator e_it;
std::set<cdt_mesh::bedge_seg_t *> new_segs;
+ std::set<cdt_mesh::bedge_seg_t *> ws1, ws2;
+ std::set<cdt_mesh::bedge_seg_t *> *ws = &ws1;
+ std::set<cdt_mesh::bedge_seg_t *> *ns = &ws2;
for (e_it = epsegs.begin(); e_it != epsegs.end(); e_it++) {
cdt_mesh::bedge_seg_t *b = *e_it;
- std::set<cdt_mesh::bedge_seg_t *> esegs_split;
- esegs_split = split_edge_seg(s_cdt, b, 0);
+ ws->insert(b);
+ }
+ while (ws->size()) {
+ cdt_mesh::bedge_seg_t *b = *ws->begin();
+ ws->erase(ws->begin());
+ std::set<cdt_mesh::bedge_seg_t *> esegs_split =
split_edge_seg(s_cdt, b, 0);
if (esegs_split.size()) {
- new_segs.insert(esegs_split.begin(), esegs_split.end());
+ ns->insert(esegs_split.begin(), esegs_split.end());
} else {
new_segs.insert(b);
}
+ if (!ws->size() && ns->size()) {
+ std::set<cdt_mesh::bedge_seg_t *> *tmp = ws;
+ ws = ns;
+ ns = tmp;
+ }
}
s_cdt->e2polysegs[edge.m_edge_index].clear();
s_cdt->e2polysegs[edge.m_edge_index].insert(new_segs.begin(),
new_segs.end());
Modified: brlcad/trunk/src/libbrep/cdt_util.cpp
===================================================================
--- brlcad/trunk/src/libbrep/cdt_util.cpp 2019-08-31 19:29:27 UTC (rev
73809)
+++ brlcad/trunk/src/libbrep/cdt_util.cpp 2019-08-31 20:58:11 UTC (rev
73810)
@@ -710,7 +710,7 @@
s->absmin = (s->absmax < s->absmin) ? s->absmax : s->absmin;
// Get the normal based parameter as well
- s->tol.norm = 2*ON_PI/180;
+ s->tol.norm = 40*ON_PI/180;
if (s->tol.norm > ON_ZERO_TOLERANCE) {
s->cos_within_ang = cos(s->tol.norm);
} else {
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