Revision: 74255
          http://sourceforge.net/p/brlcad/code/74255
Author:   starseeker
Date:     2019-10-28 16:25:47 +0000 (Mon, 28 Oct 2019)
Log Message:
-----------
more cleanup

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-28 16:19:02 UTC (rev 
74254)
+++ brlcad/trunk/src/libbrep/cdt_ovlps.cpp      2019-10-28 16:25:47 UTC (rev 
74255)
@@ -1833,6 +1833,15 @@
     }
 }
 
+// TODO - need a refinement here.  We also need to split edges when there is
+// an intersection on the face interior, to make sure we don't end up with
+// the polygon tessellation taking what should have been edge points and
+// creating "hanging" triangles that are entirely inside the opposite mesh.
+//
+// Perhaps rather than doing the up-front edge detection to try to clear
+// overlaps in advance, we should instead be using the triangle intersections
+// and using those to guide ALL brep face splitting - accept the higher initial
+// cnt of overlapping triangles to arrive at a general solution later.
 int
 split_brep_face_edges_near_verts(
        std::set<struct ON_Brep_CDT_State *> &a_cdt,
@@ -1907,15 +1916,6 @@
     return bedge_split_near_vert(edge_vert, f2omap);
 }
 
-#if 0
-static bool NearEdgesCallback(void *data, void *a_context) {
-    std::set<cdt_mesh::cpolyedge_t *> *edges = (std::set<cdt_mesh::cpolyedge_t 
*> *)a_context;
-    cdt_mesh::cpolyedge_t *pe  = (cdt_mesh::cpolyedge_t *)data;
-    edges->insert(pe);
-    return true;
-}
-#endif
-
 void
 check_faces_validity(std::set<std::pair<cdt_mesh::cdt_mesh_t *, 
cdt_mesh::cdt_mesh_t *>> &check_pairs, int UNUSED(id))
 {
@@ -1977,9 +1977,6 @@
            if (tri_isect_cnt > 1) {
                have_refinement_pnt = true;
 
-               // TODO - if this point doesn't project into any triangle pair, 
it's
-               // an edge-point-split-only point.  Need to either filter it 
here or
-               // in the eventual mesh processing...
                omesh1->refine_pnt_add(v);
 
                // If this point is also close to a brep face edge, list that 
edge/vert
@@ -2271,124 +2268,9 @@
        refine_edge_vert_sets(omesh, &edge_sets);
 
     }
-
-#if 0
-       std::set<>::iterator u_it;
-       for (u_it = omesh->split_edges.begin(); u_it != 
omesh->split_edges.end(); u_it++) {
-           cdt_mesh::uedge_t ue = *u_it;
-           ON_3dPoint p1 = *omesh->fmesh->pnts[ue.v[0]];
-           ON_3dPoint p2 = *omesh->fmesh->pnts[ue.v[1]];
-           double dist = p1.DistanceTo(p2);
-           ON_3dPoint pmid = (p1 + p2) * 0.5;
-           ON_3dPoint spnt;
-           ON_3dVector sn;
-           closest_surf_pnt(spnt, sn, *omesh->fmesh, &pmid, 2*dist);
-           long f3ind = omesh->fmesh->add_point(new ON_3dPoint(spnt));
-           long fnind = omesh->fmesh->add_normal(new ON_3dPoint(sn));
-           struct ON_Brep_CDT_State *s_cdt = (struct ON_Brep_CDT_State 
*)omesh->fmesh->p_cdt;
-           CDT_Add3DPnt(s_cdt, omesh->fmesh->pnts[f3ind], omesh->fmesh->f_id, 
-1, -1, -1, 0, 0);
-           CDT_Add3DNorm(s_cdt, omesh->fmesh->normals[fnind], 
omesh->fmesh->pnts[f3ind], omesh->fmesh->f_id, -1, -1, -1, 0, 0);
-           omesh->fmesh->nmap[f3ind] = fnind;
-           std::set<size_t> rtris = omesh->fmesh->uedges2tris[ue];
-           std::set<size_t>::iterator r_it;
-           for (r_it = rtris.begin(); r_it != rtris.end(); r_it++) {
-               replace_edge_split_tri(*omesh->fmesh, *r_it, f3ind, ue);
-           }
-           omesh->vert_add(f3ind);
-       }
-    }
-#endif
 }
 
-#if 0
-void
-tri_retessellate(cdt_mesh::cdt_mesh_t *fmesh, long t_ind, std::set<struct 
p_mvert_info *> &npnts)
-{
-    cdt_mesh::triangle_t t = fmesh->tris_vect[t_ind];
-    struct ON_Brep_CDT_State *s_cdt = (struct ON_Brep_CDT_State *)fmesh->p_cdt;
-    cdt_mesh::cpolygon_t *polygon = new cdt_mesh::cpolygon_t;
 
-    std::map<struct p_mvert_info *, long> pmv2f;
-
-    std::set<struct p_mvert_info *>::iterator pmv_it;
-    for (pmv_it = npnts.begin(); pmv_it != npnts.end(); pmv_it++) {
-       struct p_mvert_info *pmv = *pmv_it;
-       long f3ind = fmesh->add_point(new ON_3dPoint(pmv->p));
-       long fnind = fmesh->add_normal(new ON_3dPoint(pmv->n));
-
-        CDT_Add3DPnt(s_cdt, fmesh->pnts[fmesh->pnts.size()-1], fmesh->f_id, 
-1, -1, -1, 0, 0);
-        CDT_Add3DNorm(s_cdt, fmesh->normals[fmesh->normals.size()-1], 
fmesh->pnts[fmesh->pnts.size()-1], fmesh->f_id, -1, -1, -1, 0, 0);
-       //fmesh.p2d3d[f_ind2d] = f3ind;  for now, we're not putting in 2D 
versions of overlap points...
-       //fmesh.p3d2d[f3ind] = f_ind2d;
-       fmesh->nmap[f3ind] = fnind;
-       pmv2f[pmv] = f3ind;
-    }
-
-    // As we do in the repair, project all the mesh points to the plane and
-    // add them so the point indices are the same.  Eventually we can be
-    // more sophisticated about this, but for now it avoids potential
-    // bookkeeping problems.
-    ON_3dPoint sp = fmesh->tcenter(t);
-    ON_3dVector sn = fmesh->bnorm(t);
-    ON_Plane tri_plane(sp, sn);
-    std::map<long, long> t2p;
-    for (size_t i = 0; i < 3; i++) {
-       double u, v;
-       ON_3dPoint op3d = (*fmesh->pnts[t.v[i]]);
-       tri_plane.ClosestPointTo(op3d, &u, &v);
-       std::pair<double, double> proj_2d;
-       proj_2d.first = u;
-       proj_2d.second = v;
-       polygon->pnts_2d.push_back(proj_2d);
-       if (fmesh->brep_edge_pnt(t.v[i])) {
-           polygon->brep_edge_pnts.insert(i);
-       }
-       polygon->p2o[i] = t.v[i];
-       t2p[t.v[i]] = i;
-    }
-    struct cdt_mesh::edge_t e1(t2p[t.v[0]], t2p[t.v[1]]);
-    struct cdt_mesh::edge_t e2(t2p[t.v[1]], t2p[t.v[2]]);
-    struct cdt_mesh::edge_t e3(t2p[t.v[2]], t2p[t.v[0]]);
-    polygon->add_edge(e1);
-    polygon->add_edge(e2);
-    polygon->add_edge(e3);
-
-    // Let the polygon know we've got interior points
-    std::map<struct p_mvert_info *, long>::iterator f_it;
-    for (f_it = pmv2f.begin(); f_it != pmv2f.end(); f_it++) {
-       double u, v;
-       tri_plane.ClosestPointTo(f_it->first->p, &u, &v);
-       std::pair<double, double> proj_2d;
-       proj_2d.first = u;
-       proj_2d.second = v;
-       polygon->pnts_2d.push_back(proj_2d);
-       polygon->p2o[polygon->pnts_2d.size() - 1] = f_it->second;
-       polygon->interior_points.insert(polygon->pnts_2d.size() - 1);
-    }
-
-    polygon->polygon_plot("poly2d.plot3");
-    fmesh->polygon_plot_3d(polygon, "poly3d.plot3");
-
-    fmesh->tri_plot(t, "tremove.plot3");
-
-    polygon->cdt(TRI_DELAUNAY);
-
-    std::cout << "cdt tris cnt: " << polygon->tris.size() << "\n";
-
-    if (polygon->tris.size()) {
-       fmesh->tri_remove(t);
-
-       std::set<cdt_mesh::triangle_t>::iterator v_it;
-       for (v_it = polygon->tris.begin(); v_it != polygon->tris.end(); v_it++) 
{
-           cdt_mesh::triangle_t vt = *v_it;
-           orient_tri(*fmesh, vt);
-           fmesh->tri_add(vt);
-           fmesh->tri_plot(vt, "tadd.plot3");
-       }
-    }
-}
-#endif
-
 int
 ON_Brep_CDT_Ovlp_Resolve(struct ON_Brep_CDT_State **s_a, int s_cnt)
 {

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