Salome HOME
Added unit-test that checks the issue #1379 is fixed
[modules/shaper.git] / src / Model / Model_AttributeSelection.cpp
index 93a9b24bbe28e64cb0cf8a0588e01b4b9d0562e7..d2456c85e199fa4bb5f7838cf14d78549250d2a8 100644 (file)
@@ -111,9 +111,11 @@ bool Model_AttributeSelection::setValue(const ResultPtr& theContext,
   bool isOldShape = isOldContext &&
     (theSubShape == anOldShape || (theSubShape && anOldShape && theSubShape->isEqual(anOldShape)));
   if (isOldShape) return false; // shape is the same, so context is also unchanged
+  bool aToUnblock = false;
   // update the referenced object if needed
   if (!isOldContext) {
-      myRef.setValue(theContext);
+    aToUnblock = !owner()->data()->blockSendAttributeUpdated(true);
+    myRef.setValue(theContext);
   }
 
   // do noth use naming if selected shape is result shape itself, but not sub-shape
@@ -136,6 +138,8 @@ bool Model_AttributeSelection::setValue(const ResultPtr& theContext,
     TDF_Label aRefLab = myRef.myRef->Label();
     aSelLab.ForgetAllAttributes(true);
     myRef.myRef = TDF_Reference::Set(aSelLab.Father(), aSelLab.Father());
+    if (aToUnblock)
+      owner()->data()->blockSendAttributeUpdated(false);
     return false;
   }
   if (theContext->groupName() == ModelAPI_ResultBody::group()) {
@@ -170,6 +174,10 @@ bool Model_AttributeSelection::setValue(const ResultPtr& theContext,
   }
 
   owner()->data()->sendAttributeUpdated(this);
+
+  if (aToUnblock)
+    owner()->data()->blockSendAttributeUpdated(false);
+
   return true;
 }
 
@@ -265,6 +273,8 @@ GeomShapePtr centerByEdge(GeomShapePtr theEdge, ModelAPI_AttributeSelection::Cen
 
 std::shared_ptr<GeomAPI_Shape> Model_AttributeSelection::value()
 {
+  if (!ModelAPI_AttributeSelection::isInitialized() && !myTmpContext.get() && !myTmpSubShape.get())
+    return std::shared_ptr<GeomAPI_Shape>();
   CenterType aType = NOT_CENTER;
   std::shared_ptr<GeomAPI_Shape> aResult = internalValue(aType);
   return centerByEdge(aResult, aType);
@@ -399,6 +409,11 @@ void Model_AttributeSelection::setID(const std::string theID)
 }
 
 ResultPtr Model_AttributeSelection::context() {
+  /*
+  if (!ModelAPI_AttributeSelection::isInitialized() && !myTmpContext.get() && !myTmpSubShape.get())
+    return ResultPtr();
+  */
+
   if (myTmpContext.get() || myTmpSubShape.get()) {
     return myTmpContext;
   }