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