Revision: 74703
          http://sourceforge.net/p/brlcad/code/74703
Author:   starseeker
Date:     2020-01-15 21:02:55 +0000 (Wed, 15 Jan 2020)
Log Message:
-----------
Rework closest_pt paramaters slightly.

Modified Paths:
--------------
    brlcad/trunk/src/libbrep/cdt/mesh.h
    brlcad/trunk/src/libbrep/cdt/omesh.cpp

Modified: brlcad/trunk/src/libbrep/cdt/mesh.h
===================================================================
--- brlcad/trunk/src/libbrep/cdt/mesh.h 2020-01-15 20:19:28 UTC (rev 74702)
+++ brlcad/trunk/src/libbrep/cdt/mesh.h 2020-01-15 21:02:55 UTC (rev 74703)
@@ -928,7 +928,7 @@
         overt_t * vert_closest(double *vdist, ON_3dPoint &opnt);
 
        // Find closest point on mesh
-        ON_3dPoint closest_pt(double *pdist, ON_3dPoint &op);
+        double closest_pt(ON_3dPoint &p, const ON_3dPoint &op);
 
        // Find closest point on any nearby mesh face in the
        // specified brep.  This isn't guaranteed to return

Modified: brlcad/trunk/src/libbrep/cdt/omesh.cpp
===================================================================
--- brlcad/trunk/src/libbrep/cdt/omesh.cpp      2020-01-15 20:19:28 UTC (rev 
74702)
+++ brlcad/trunk/src/libbrep/cdt/omesh.cpp      2020-01-15 21:02:55 UTC (rev 
74703)
@@ -297,12 +297,12 @@
     return nv;
 }
 
-ON_3dPoint
-omesh_t::closest_pt(double *pdist, ON_3dPoint &op)
+double
+omesh_t::closest_pt(ON_3dPoint &cp, const ON_3dPoint &op)
 {
     ON_BoundingBox fbbox = fmesh->bbox();
     if (!fmesh->tris_vect.size()) {
-       return ON_3dPoint::UnsetPoint;
+       return DBL_MAX;
     }
 
     double lguess = fbbox.Diagonal().Length()/(double)fmesh->tris_vect.size();
@@ -359,10 +359,9 @@
 
     ON_3dPoint on_cp(closest_pt[X], closest_pt[Y], closest_pt[Z]);
 
-    if (pdist) {
-       (*pdist) = tdist;
-    }
-    return on_cp;
+    cp = on_cp;
+
+    return tdist;
 }
 
 uedge_t
@@ -516,8 +515,8 @@
     return nv;
 }
 
-bool
-omesh_t::closest_nearby_mesh_point(ON_3dPoint &s_p, ON_3dPoint *p, struct 
ON_Brep_CDT_State *s_cdt)
+std::set<omesh_t *>
+scdt_meshes(std::set<std::pair<cdt_mesh_t *, cdt_mesh_t *>> *check_pairs, 
struct ON_Brep_CDT_State *s_cdt)
 {
     std::set<omesh_t *> check_meshes;
     std::set<std::pair<cdt_mesh_t *, cdt_mesh_t *>>::iterator o_it;
@@ -530,17 +529,27 @@
        }
     }
 
+    return check_meshes;
+}
+
+
+bool
+omesh_t::closest_nearby_mesh_point(ON_3dPoint &s_p, ON_3dPoint *p, struct 
ON_Brep_CDT_State *s_cdt)
+{
+    std::set<omesh_t *> check_meshes = scdt_meshes(check_pairs, s_cdt);
+
     ON_BoundingBox pbb(*p, *p);
 
     bool have_dist = false;
     double cdist = DBL_MAX;
     ON_3dPoint cp;
+    ON_3dVector cn;
     std::set<omesh_t *>::iterator om_it;
     for (om_it = check_meshes.begin(); om_it != check_meshes.end(); om_it++) {
        omesh_t *om = *om_it;
        if (om->fmesh->bbox().IsDisjoint(pbb)) continue;
-       double ldist;
-       ON_3dPoint om_cp = om->closest_pt(&ldist, *p);
+       ON_3dPoint om_cp;
+       double ldist = om->closest_pt(om_cp, *p);
        if (ldist < DBL_MAX && cdist > ldist) {
            cdist = ldist;
            cp = om_cp;
@@ -548,7 +557,7 @@
        }
     }
     if (!have_dist) {
-       cp = closest_pt(&cdist, *p);
+       cdist = closest_pt(cp, *p);
     }
 
     s_p = cp;

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
BRL-CAD Source Commits mailing list
brlcad-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to