Salome HOME
Fix for the issue #2753 : error when dump/load script
[modules/shaper.git] / src / SketchPlugin / SketchPlugin_MacroCircle.cpp
index 7c87681327cbb1a8398b22d461b4de1b1a293c07..3b8049b5777f16462b2aff6f7c81c063a8ff8ae9 100644 (file)
@@ -168,13 +168,11 @@ std::string SketchPlugin_MacroCircle::processEvent(
           aRefAttr->setAttr(anAttribute);
         }
         else if (anObject.get()) {
-          // if presentation of previous reentrant macro arc is used, the object is invalid,
-          // we should use result of previous feature of the message(Arc)
-          if (!anObject->data()->isValid()) {
-            FeaturePtr aCreatedFeature = aReentrantMessage->createdFeature();
-            anObject = aCreatedFeature->lastResult();
-          }
-          aRefAttr->setObject(anObject);
+          // if attribute is NULL, only object is defined, it should be processed outside
+          // the feature because it might be an external feature, that will be
+          // removed/created again after restart operation
+          // #2468 - Crash when sketching circles successively on a repetition
+          aFilledAttributeName = CIRCLE_TYPE();
         }
       }
     }
@@ -186,11 +184,11 @@ std::string SketchPlugin_MacroCircle::processEvent(
 void SketchPlugin_MacroCircle::constraintsForCircleByCenterAndPassed(FeaturePtr theCircleFeature)
 {
   // Create constraints.
-  SketchPlugin_Tools::createConstraint(
+  SketchPlugin_Tools::createCoincidenceOrTangency(
       this, CENTER_POINT_REF_ID(),
       theCircleFeature->attribute(SketchPlugin_Circle::CENTER_ID()),
       ObjectPtr(), false);
-  SketchPlugin_Tools::createConstraint(
+  SketchPlugin_Tools::createCoincidenceOrTangency(
       this, PASSED_POINT_REF_ID(), AttributePtr(),
       theCircleFeature->lastResult(), true);
 }
@@ -203,8 +201,10 @@ void SketchPlugin_MacroCircle::constraintsForCircleByThreePoints(FeaturePtr theC
 
   // Create constraints.
   ResultPtr aCircleResult = theCircleFeature->lastResult();
-  for (int i = 0; i < 3; ++i)
-    SketchPlugin_Tools::createConstraint(this, aPointRef[i], AttributePtr(), aCircleResult, true);
+  for (int i = 0; i < 3; ++i) {
+    SketchPlugin_Tools::createCoincidenceOrTangency(
+        this, aPointRef[i], AttributePtr(), aCircleResult, true);
+  }
 }
 
 FeaturePtr SketchPlugin_MacroCircle::createCircleFeature()
@@ -392,6 +392,7 @@ AISObjectPtr SketchPlugin_MacroCircle::getAISObject(AISObjectPtr thePrevious)
 }
 
 void SketchPlugin_MacroCircle::attributeChanged(const std::string& theID) {
+  double aRadius = 0.0;
   // If circle type switched reset all attributes.
   if(theID == CIRCLE_TYPE()) {
     SketchPlugin_Tools::resetAttribute(this, CENTER_POINT_ID());