]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Stable search of start vertex in SketchBuilder
authorazv <azv@opencascade.com>
Wed, 8 Jun 2016 12:40:07 +0000 (15:40 +0300)
committerazv <azv@opencascade.com>
Wed, 8 Jun 2016 12:40:07 +0000 (15:40 +0300)
src/GeomAlgoAPI/GeomAlgoAPI_SketchBuilder.cpp

index 8096443c1b2b2f6ff7bf613b3a336cfa0b612f2c..7ee838ba2909892f3f7fdd6c610ec5b295558d70 100644 (file)
 #include <TopTools_ListIteratorOfListOfShape.hxx>
 
 #include <list>
+#include <cmath>
 
 
 static TopoDS_Vertex findStartVertex(const TopoDS_Shape& theShape)
 {
+  static const double aTol = Precision::PConfusion();
+
   TopExp_Explorer anExp(theShape, TopAbs_VERTEX);
   TopoDS_Vertex aStart = TopoDS::Vertex(anExp.Current());
   gp_Pnt aStartPnt(BRep_Tool::Pnt(aStart));
@@ -32,10 +35,10 @@ static TopoDS_Vertex findStartVertex(const TopoDS_Shape& theShape)
   for (anExp.Next(); anExp.More(); anExp.Next()) {
     aCurrent = TopoDS::Vertex(anExp.Current());
     aCurrentPnt = BRep_Tool::Pnt(aCurrent);
-    if ((aCurrentPnt.X() > aStartPnt.X()) ||
-        (aCurrentPnt.X() == aStartPnt.X() && aCurrentPnt.Y() > aStartPnt.Y()) ||
-        (aCurrentPnt.X() == aStartPnt.X() && aCurrentPnt.Y() == aStartPnt.Y() &&
-            aCurrentPnt.Z() > aStartPnt.Z())) {
+    if ((aCurrentPnt.X() > aStartPnt.X() + aTol) ||
+        (aCurrentPnt.X() > aStartPnt.X() - aTol && aCurrentPnt.Y() > aStartPnt.Y() + aTol) ||
+        (aCurrentPnt.X() > aStartPnt.X() - aTol && aCurrentPnt.Y() > aStartPnt.Y() - aTol &&
+            aCurrentPnt.Z() > aStartPnt.Z() + aTol)) {
       aStart = aCurrent;
       aStartPnt = aCurrentPnt;
     }