]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #2956: Use removeTemporaryValues method instead of reset.
authorvsv <vsv@opencascade.com>
Mon, 29 Jul 2019 10:43:30 +0000 (13:43 +0300)
committervsv <vsv@opencascade.com>
Mon, 29 Jul 2019 10:44:10 +0000 (13:44 +0300)
src/Model/Model_AttributeSelection.cpp
src/Model/Model_AttributeSelection.h
src/ModuleBase/ModuleBase_WidgetValidated.cpp

index 88a1610d5cb0844ae14fbb9c998705e6ee34a818..e9c92ad53de831ba8267f4c58d38c73214489675 100644 (file)
@@ -103,10 +103,9 @@ const static std::string kWHOLE_FEATURE = "all-in-";
 bool Model_AttributeSelection::setValue(const ObjectPtr& theContext,
   const std::shared_ptr<GeomAPI_Shape>& theSubShape, const bool theTemporarily)
 {
-  if (theTemporarily &&
-      (!theContext.get() || theContext->groupName() != ModelAPI_Feature::group())) {
+  if (theTemporarily) {
     // just keep the stored without DF update
-    myTmpContext = std::dynamic_pointer_cast<ModelAPI_Result>(theContext);
+    myTmpContext = theContext;
     myTmpSubShape = theSubShape;
     owner()->data()->sendAttributeUpdated(this);
     return true;
@@ -313,7 +312,14 @@ std::shared_ptr<GeomAPI_Shape> Model_AttributeSelection::internalValue(CenterTyp
       // it is just reference to construction.
       return myTmpSubShape;
     }
-    return myTmpSubShape.get() ? myTmpSubShape : myTmpContext->shape();
+    FeaturePtr aFeature =
+      std::dynamic_pointer_cast<ModelAPI_Feature>(myTmpContext);
+    if (aFeature.get()) {
+      // it is just reference to construction.
+      return myTmpSubShape;
+    }
+    return myTmpSubShape.get() ? myTmpSubShape :
+      std::dynamic_pointer_cast<ModelAPI_Result>(myTmpContext)->shape();
   }
 
   TDF_Label aSelLab = selectionLabel();
@@ -465,7 +471,7 @@ ResultPtr Model_AttributeSelection::context()
     return ResultPtr();
 
   if (myTmpContext.get() || myTmpSubShape.get()) {
-    return myTmpContext;
+    return std::dynamic_pointer_cast<ModelAPI_Result>(myTmpContext);
   }
 
   ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(myRef.value());
@@ -495,8 +501,8 @@ ResultPtr Model_AttributeSelection::context()
 }
 
 FeaturePtr Model_AttributeSelection::contextFeature() {
-  if (myTmpContext.get() || myTmpSubShape.get()) {
-    return FeaturePtr(); // feature can not be selected temporarily
+  if (myTmpContext.get()) {
+    return std::dynamic_pointer_cast<ModelAPI_Feature>(myTmpContext);
   }
   return std::dynamic_pointer_cast<ModelAPI_Feature>(myRef.value());
 }
index 1896caa017f435687409907b388f0ac42a6c2d06..c3721e9940e28c9c32e7539881b27809a9b19eb3 100644 (file)
@@ -40,7 +40,7 @@ class Model_AttributeSelection : public ModelAPI_AttributeSelection,
 {
   Model_AttributeReference myRef;  ///< The reference functionality re-usage
   /// temporarily storages to avoid keeping in the data structure if not needed
-  ResultPtr myTmpContext;
+  ObjectPtr myTmpContext;
   /// temporarily storages to avoid keeping in the data structure if not needed
   std::shared_ptr<GeomAPI_Shape> myTmpSubShape;
   /// temporarily storages to avoid keeping in the data structure if not needed
index 7740f17f5625341aa5e72150a47fac7d6582d8af..3664c25c1d9bd4900ba01180c995eec107fcf874 100644 (file)
@@ -141,7 +141,7 @@ bool ModuleBase_WidgetValidated::isValidInFilters(const ModuleBase_ViewerPrsPtr&
           }
           else
             aValid = false;
-          aSelectAttr->setValue(ObjectPtr(), GeomShapePtr(), true);
+          //aSelectAttr->setValue(ObjectPtr(), GeomShapePtr(), true);
         }
         else {
           ResultPtr aResult = aFeature->firstResult();
@@ -200,7 +200,12 @@ bool ModuleBase_WidgetValidated::isValidInFilters(const ModuleBase_ViewerPrsPtr&
   if (!aValid) {
     // Clear attribute if it still has selection
     AttributePtr anAttr = attribute();
-    anAttr->reset();
+    std::string aType = anAttr->attributeType();
+    if (aType == ModelAPI_AttributeSelection::typeId()) {
+      AttributeSelectionPtr aSelectAttr =
+        std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(anAttr);
+      aSelectAttr->removeTemporaryValues();
+    }
   }
   return aValid;
 }