X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_MacroEllipticArc.cpp;h=192884dbfb0a7c37d1abe43c22a77eb0f4220ac8;hb=cdbbde4803e9c320204d537d22af4ac7ef024962;hp=bd8290c0c5db33c4d749befe5146c0bfb09049a9;hpb=77d6e03555d0d46232e09ace4178f66f8c9b40ee;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_MacroEllipticArc.cpp b/src/SketchPlugin/SketchPlugin_MacroEllipticArc.cpp index bd8290c0c..192884dbf 100644 --- a/src/SketchPlugin/SketchPlugin_MacroEllipticArc.cpp +++ b/src/SketchPlugin/SketchPlugin_MacroEllipticArc.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2017-2019 CEA/DEN, EDF R&D +// Copyright (C) 2017-2021 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -42,6 +42,7 @@ #include +const double TOLERANCE = 1.e-7; const double paramTolerance = 1.e-4; const double PI = 3.141592653589793238463; @@ -93,7 +94,7 @@ void SketchPlugin_MacroEllipticArc::execute() Events_Loop::loop()->send(aMessage); } -void SketchPlugin_MacroEllipticArc::attributeChanged(const std::string& theID) +void SketchPlugin_MacroEllipticArc::attributeChanged(const std::string& /*theID*/) { static const int NB_POINTS = 4; std::string aPointAttrName[NB_POINTS] = { CENTER_ID(), @@ -132,6 +133,9 @@ void SketchPlugin_MacroEllipticArc::attributeChanged(const std::string& theID) myStartPnt = anEllipsePoints[2]; myEndPnt = anEllipsePoints[3]; + if (myCenter->distance(myMajorAxis) < TOLERANCE) + return; // ellipse is not valid + std::shared_ptr anEllipse; if (aNbInitialized == 2) { GeomDir2dPtr aXDir(new GeomAPI_Dir2d(anEllipsePoints[1]->x() - anEllipsePoints[0]->x(), @@ -360,7 +364,7 @@ GeomShapePtr SketchPlugin_MacroEllipticArc::getArcShape() return GeomShapePtr(); SketchPlugin_Sketch* aSketch = sketch(); - if (!aSketch) + if (!aSketch || myCenter->distance(myMajorAxis) < 1.e-7) return GeomShapePtr(); GeomPointPtr aCenter(aSketch->to3D(myCenter->x(), myCenter->y()));