Salome HOME
Correct processing of the fixed arc in PlaneGCS (issue #1280)
[modules/shaper.git] / src / SketchPlugin / SketchPlugin_Arc.cpp
index aacdeca1fece7cdbb21a9ef30173b4dd9200d77c..2725d87904146bf25a72cdd2f73457a47c6bebea 100644 (file)
@@ -399,8 +399,6 @@ static inline void calculatePassedPoint(
 
 void SketchPlugin_Arc::updateDependentAttributes()
 {
-  data()->blockSendAttributeUpdated(true);
-
   std::shared_ptr<GeomDataAPI_Point2D> aCenterAttr = std::dynamic_pointer_cast<
       GeomDataAPI_Point2D>(data()->attribute(CENTER_ID()));
   std::shared_ptr<GeomDataAPI_Point2D> aStartAttr = std::dynamic_pointer_cast<
@@ -414,12 +412,19 @@ void SketchPlugin_Arc::updateDependentAttributes()
   AttributeDoublePtr anAngleAttr = std::dynamic_pointer_cast<ModelAPI_AttributeDouble>(
       data()->attribute(ANGLE_ID()));
 
+  if (!aPassedPoint)
+    return;
+
+  data()->blockSendAttributeUpdated(true);
+
   calculatePassedPoint(aCenterAttr->pnt(), aStartAttr->pnt(), anEndAttr->pnt(),
                        isReversed(), aPassedPoint);
-  std::shared_ptr<GeomAPI_Circ2d> aCircle(
-      new GeomAPI_Circ2d(aStartAttr->pnt(), anEndAttr->pnt(), aPassedPoint->pnt()));
-  calculateArcAngleRadius(aCircle, aStartAttr->pnt(), anEndAttr->pnt(), aPassedPoint->pnt(),
-                          anAngleAttr, aRadiusAttr);
+  if (aRadiusAttr && anAngleAttr) {
+    std::shared_ptr<GeomAPI_Circ2d> aCircle(
+        new GeomAPI_Circ2d(aStartAttr->pnt(), anEndAttr->pnt(), aPassedPoint->pnt()));
+    calculateArcAngleRadius(aCircle, aStartAttr->pnt(), anEndAttr->pnt(), aPassedPoint->pnt(),
+                            anAngleAttr, aRadiusAttr);
+  }
   data()->blockSendAttributeUpdated(false);
 }