Revision: 74227
http://sourceforge.net/p/brlcad/code/74227
Author: starseeker
Date: 2019-10-23 20:30:59 +0000 (Wed, 23 Oct 2019)
Log Message:
-----------
Not working yet, but start on logic for recognizing when we have refinement
vertices near brep face edges.
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-23 18:54:21 UTC (rev
74226)
+++ brlcad/trunk/src/libbrep/cdt_ovlps.cpp 2019-10-23 20:30:59 UTC (rev
74227)
@@ -1262,11 +1262,15 @@
(*v2->omesh->fmesh->pnts[v2->p_id]) = s2_p;
(*v2->omesh->fmesh->normals[v2->omesh->fmesh->nmap[v2->p_id]]) = s2_n;
- // We just changed the vertex point values - need to update all the
mvert_info
- // edge lengths which might be impacted...
+ // We just changed the vertex point values - need to update all the
+ // edge edges which might be impacted...
v1->omesh->verts_one_ring_update(v1->p_id);
v2->omesh->verts_one_ring_update(v2->p_id);
+ // If we're refining, adjustment is all we're going to do with these
verts
+ v1->omesh->refine_pnt_remove(v1);
+ v2->omesh->refine_pnt_remove(v2);
+
#if 0
std::cout << "p_wavg: " << p_wavg.x << "," << p_wavg.y << "," <<
p_wavg.z << "\n";
std::cout << s_cdt1->name << " face " << fmesh1.f_id << " pnt " <<
v1->p_id << " (elen: " << e1 << "->" << v1->e_minlen << ") moved " <<
p1.DistanceTo(s1_p) << ": " << p1.x << "," << p1.y << "," << p1.z << " -> " <<
s1_p.x << "," << s1_p.y << "," << s1_p.z << "\n";
@@ -1748,52 +1752,68 @@
// Iterate over verts, checking for nearby edges.
std::map<cdt_mesh::bedge_seg_t *, overt_t *> edge_vert;
-#if 0
std::set<omesh_t *>::iterator a_it;
for (a_it = ameshes.begin(); a_it != ameshes.end(); a_it++) {
omesh_t *omesh = *a_it;
+ std::set<overt_t *> used_overts;
std::set<std::pair<long, long>> vert_edge_pairs;
- size_t ovlp_cnt = omesh->vtree.Overlaps(bedge_tree, &vert_edge_pairs);
+ size_t ovlp_cnt = omesh->refine_tree.Overlaps(bedge_tree,
&vert_edge_pairs);
int used_verts = 0;
if (ovlp_cnt && vert_edge_pairs.size()) {
std::set<std::pair<long, long>>::iterator v_it;
for (v_it = vert_edge_pairs.begin(); v_it != vert_edge_pairs.end();
v_it++) {
- overt_t *v = omesh->overts[v_it->first];
+ overt_t *v = omesh->refinement_overts[v_it->first];
+ if (!v) {
+ std::cout << "invalid overt??\n";
+ continue;
+ }
ON_3dPoint p = v->vpnt();
+ ON_3dPoint s1_p;
+ ON_3dVector s1_n;
+ closest_surf_pnt(s1_p, s1_n, *omesh->fmesh, &p,
v->bb.Diagonal().Length());
cdt_mesh::bedge_seg_t *eseg = b_edges[v_it->second];
ON_3dPoint *p3d1 = eseg->e_start;
ON_3dPoint *p3d2 = eseg->e_end;
ON_Line line(*p3d1, *p3d2);
- double d1 = p3d1->DistanceTo(p);
- double d2 = p3d2->DistanceTo(p);
- double dline = 2*p.DistanceTo(line.ClosestPointTo(p));
+ double d1 = p3d1->DistanceTo(s1_p);
+ double d2 = p3d2->DistanceTo(s1_p);
+ double dline = 2*p.DistanceTo(line.ClosestPointTo(s1_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));
+ closest_surf_pnt(s1_p, s1_n, *omesh->fmesh, &pv,
edge_vert[eseg]->bb.Diagonal().Length());
+ double dv = s1_p.DistanceTo(line.ClosestPointTo(s1_p));
if (dv > dline) {
+ used_overts.erase(edge_vert[eseg]);
edge_vert[eseg] = v;
+ used_overts.insert(v);
}
} else {
edge_vert[eseg] = v;
+ used_overts.insert(v);
used_verts++;
}
+#if 0
pl_color(plot_file, 255, 0, 0);
BBOX_PLOT(plot_file, v->bb);
pl_color(plot_file, 0, 0, 255);
ON_BoundingBox edge_bb = edge_bbox(eseg);
BBOX_PLOT(plot_file, edge_bb);
+#endif
} 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";
}
+
+ std::set<overt_t *>::iterator v_it;
+ for (v_it = used_overts.begin(); v_it != used_overts.end(); v_it++) {
+ omesh->refine_pnt_remove(*v_it);
+ }
}
- fclose(plot_file);
-#endif
return bedge_split_near_vert(edge_vert, f2omap);
}
@@ -2293,6 +2313,7 @@
close_vert_checks++;
}
+ refine_edges_near_verts(a_cdt, ocheck_pairs, f2omap);
// Calculate omesh refinement point closest surf points
//
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