]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #394 Undo-ing a Sketch element
authornds <natalia.donis@opencascade.com>
Mon, 16 Feb 2015 14:21:27 +0000 (17:21 +0300)
committernds <natalia.donis@opencascade.com>
Mon, 16 Feb 2015 14:21:27 +0000 (17:21 +0300)
the flyout value should to be computed here, not in the getAISObject in order to change the model value
inside the object transaction. This is important for creating a constraint by preselection.
The display of the presentation in this case happens after the transaction commit

src/SketchPlugin/SketchPlugin_ConstraintDistance.cpp
src/SketchPlugin/SketchPlugin_ConstraintLength.cpp
src/SketchPlugin/SketchPlugin_ConstraintRadius.cpp

index b8ce8c1820afa1122ea1c5b62589217dda888087..db309bae3b9fb51ff85e20311f3508236029ed28 100644 (file)
@@ -45,6 +45,14 @@ void SketchPlugin_ConstraintDistance::execute()
   if(aDistance >= 0) {
     anAttrValue->setValue(aDistance);
   }
+
+  // the value should to be computed here, not in the getAISObject in order to change the model value
+  // inside the object transaction. This is important for creating a constraint by preselection.
+  // The display of the presentation in this case happens after the transaction commit
+  std::shared_ptr<GeomDataAPI_Point2D> aFlyOutAttr = std::dynamic_pointer_cast<
+      GeomDataAPI_Point2D>(aData->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT()));
+  if(!aFlyOutAttr->isInitialized())
+    compute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT());
 }
 
 bool SketchPlugin_ConstraintDistance::compute(const std::string& theAttributeId)
@@ -142,7 +150,7 @@ AISObjectPtr SketchPlugin_ConstraintDistance::getAISObject(AISObjectPtr thePrevi
   std::shared_ptr<GeomAPI_Pnt> aPoint1 = sketch()->to3D(aPnt_A->x(), aPnt_A->y());
   std::shared_ptr<GeomAPI_Pnt> aPoint2 = sketch()->to3D(aPnt_B->x(), aPnt_B->y());
   if(!aFlyOutAttr->isInitialized())
-    compute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT());
+    return AISObjectPtr();
   std::shared_ptr<GeomAPI_Pnt> aFlyoutPnt = sketch()->to3D(aFlyOutAttr->x(), aFlyOutAttr->y()/*aFPnt->x(), aFPnt->y()*/);
 
   // value calculation
index ea50c3850d38a66e61b00f7a074a6b3416ea1b20..f0ac2e41d7b908cc4bf09ec044dc1befeed91ea1 100644 (file)
@@ -50,6 +50,14 @@ void SketchPlugin_ConstraintLength::execute()
     //if(!aValueAttr->isInitialized()) {
     //  aValueAttr->setValue(aLenght);
     //}
+
+    // the value should to be computed here, not in the getAISObject in order to change the model value
+    // inside the object transaction. This is important for creating a constraint by preselection.
+    // The display of the presentation in this case happens after the transaction commit
+    AttributePtr aFlyOutAttribute = data()->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT());
+    if (!aFlyOutAttribute->isInitialized()) {
+      compute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT());
+    }
   }
 }
 
@@ -109,8 +117,7 @@ AISObjectPtr SketchPlugin_ConstraintLength::getAISObject(AISObjectPtr thePreviou
 
   AttributePtr aFlyOutAttribute = data()->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT());
   if (!aFlyOutAttribute->isInitialized()) {
-    if (!compute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT()))
-      return thePrevious; // not possible to show length because points are not defined
+    return thePrevious; // not possible to show length because points are not defined
   }
   std::shared_ptr<GeomDataAPI_Point2D> aFlyOutAttr = std::dynamic_pointer_cast<
                                                           GeomDataAPI_Point2D>(aFlyOutAttribute);
index 0a2115dbccc475ed660878cc3306e2b94332c6c8..17e16655aa13419a405c4b74a986ee08be346284 100644 (file)
@@ -60,6 +60,14 @@ void SketchPlugin_ConstraintRadius::execute()
     //if(!aValueAttr->isInitialized()) {
     //  aValueAttr->setValue(aRadius);
     //}
+
+    // the value should to be computed here, not in the getAISObject in order to change the model value
+    // inside the object transaction. This is important for creating a constraint by preselection.
+    // The display of the presentation in this case happens after the transaction commit
+    std::shared_ptr<GeomDataAPI_Point2D> aFlyoutAttr = std::dynamic_pointer_cast<
+        GeomDataAPI_Point2D>(data()->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT()));
+    if (!aFlyoutAttr->isInitialized())
+      compute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT());
   }
 }
 
@@ -135,7 +143,7 @@ AISObjectPtr SketchPlugin_ConstraintRadius::getAISObject(AISObjectPtr thePreviou
   // Flyout point
   std::shared_ptr<GeomDataAPI_Point2D> aFlyoutAttr = std::dynamic_pointer_cast<
       GeomDataAPI_Point2D>(data()->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT()));
-  if (!aFlyoutAttr->isInitialized() && !compute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT()))
+  if (!aFlyoutAttr->isInitialized())
     return thePrevious; // can not create a good presentation
   std::shared_ptr<GeomAPI_Pnt> aFlyoutPnt = sketch()->to3D(aFlyoutAttr->x(), aFlyoutAttr->y());