From 6d74cfa38333e70e35f90a449fdcb4d338d448d9 Mon Sep 17 00:00:00 2001 From: marioalexis Date: Thu, 17 Nov 2022 12:32:13 -0300 Subject: [PATCH] Part: Fix endless-loop in TopoShapePy::proximity function --- src/Mod/Part/App/TopoShapePyImp.cpp | 48 ++--------------------------- 1 file changed, 3 insertions(+), 45 deletions(-) diff --git a/src/Mod/Part/App/TopoShapePyImp.cpp b/src/Mod/Part/App/TopoShapePyImp.cpp index 8c439b1934..1846159840 100644 --- a/src/Mod/Part/App/TopoShapePyImp.cpp +++ b/src/Mod/Part/App/TopoShapePyImp.cpp @@ -2494,54 +2494,12 @@ PyObject* TopoShapePy::proximity(PyObject *args) BRepExtrema_ShapeProximity proximity; proximity.LoadShape1 (s1); proximity.LoadShape2 (s2); - if (tol > 0.0) + if (tol > 0.0) { proximity.SetTolerance (tol); + } + proximity.Perform(); if (!proximity.IsDone()) { - // the proximity failed, maybe it's because the shapes are not yet mesh - TopLoc_Location aLoc; - TopExp_Explorer xp(s1, TopAbs_FACE); - while (xp.More()) { - const Handle(Poly_Triangulation)& aTriangulation = - BRep_Tool::Triangulation(TopoDS::Face(xp.Current()), aLoc); - if (aTriangulation.IsNull()) { - PyErr_SetString(PartExceptionOCCError, "BRepExtrema_ShapeProximity not done, call 'tessellate' beforehand"); - return nullptr; - } - } - - xp.Init(s2, TopAbs_FACE); - while (xp.More()) { - const Handle(Poly_Triangulation)& aTriangulation = - BRep_Tool::Triangulation(TopoDS::Face(xp.Current()), aLoc); - if (aTriangulation.IsNull()) { - PyErr_SetString(PartExceptionOCCError, "BRepExtrema_ShapeProximity not done, call 'tessellate' beforehand"); - return nullptr; - } - } - - // check also for free edges - xp.Init(s1, TopAbs_EDGE, TopAbs_FACE); - while (xp.More()) { - const Handle(Poly_Polygon3D)& aPoly3D = - BRep_Tool::Polygon3D(TopoDS::Edge(xp.Current()), aLoc); - if (aPoly3D.IsNull()) { - PyErr_SetString(PartExceptionOCCError, "BRepExtrema_ShapeProximity not done, call 'tessellate' beforehand"); - return nullptr; - } - } - - xp.Init(s2, TopAbs_EDGE, TopAbs_FACE); - while (xp.More()) { - const Handle(Poly_Polygon3D)& aPoly3D = - BRep_Tool::Polygon3D(TopoDS::Edge(xp.Current()), aLoc); - if (aPoly3D.IsNull()) { - PyErr_SetString(PartExceptionOCCError, "BRepExtrema_ShapeProximity not done, call 'tessellate' beforehand"); - return nullptr; - } - } - - // another problem must have occurred PyErr_SetString(PartExceptionOCCError, "BRepExtrema_ShapeProximity not done"); return nullptr; }