Salome HOME
Add dumping named of copied entities in the sketch (issue #1924)
[modules/shaper.git] / src / Model / Model_Data.cpp
index ce5ab2f908c02104274998c03cbd34023df1cbb2..750b9103b7de3de0bbb1dcbd0c40e50b79b913b8 100644 (file)
 #include <Model_AttributeRefAttrList.h>
 #include <Model_AttributeBoolean.h>
 #include <Model_AttributeString.h>
+#include <Model_AttributeStringArray.h>
 #include <Model_AttributeSelection.h>
 #include <Model_AttributeSelectionList.h>
 #include <Model_AttributeIntArray.h>
+#include <Model_AttributeTables.h>
 #include <Model_Events.h>
 #include <Model_Expression.h>
 #include <ModelAPI_Feature.h>
@@ -133,6 +135,8 @@ AttributePtr Model_Data::addAttribute(const std::string& theID, const std::strin
     anAttr = new Model_AttributeBoolean(anAttrLab);
   } else if (theAttrType == Model_AttributeString::typeId()) {
     anAttr = new Model_AttributeString(anAttrLab);
+  } else if (theAttrType == Model_AttributeStringArray::typeId()) {
+    anAttr = new Model_AttributeStringArray(anAttrLab);
   } else if (theAttrType == ModelAPI_AttributeReference::typeId()) {
     anAttr = new Model_AttributeReference(anAttrLab);
   } else if (theAttrType == ModelAPI_AttributeSelection::typeId()) {
@@ -149,6 +153,8 @@ AttributePtr Model_Data::addAttribute(const std::string& theID, const std::strin
     anAttr = new Model_AttributeIntArray(anAttrLab);
   } else if (theAttrType == ModelAPI_AttributeDoubleArray::typeId()) {
     anAttr = new Model_AttributeDoubleArray(anAttrLab);
+  } else if (theAttrType == ModelAPI_AttributeTables::typeId()) {
+    anAttr = new Model_AttributeTables(anAttrLab);
   }
   // create also GeomData attributes here because only here the OCAF structure is known
   else if (theAttrType == GeomData_Point::typeId()) {
@@ -203,6 +209,7 @@ GET_ATTRIBUTE_BY_ID(ModelAPI_AttributeDouble, real);
 GET_ATTRIBUTE_BY_ID(ModelAPI_AttributeInteger, integer);
 GET_ATTRIBUTE_BY_ID(ModelAPI_AttributeBoolean, boolean);
 GET_ATTRIBUTE_BY_ID(ModelAPI_AttributeString, string);
+GET_ATTRIBUTE_BY_ID(ModelAPI_AttributeStringArray, stringArray);
 GET_ATTRIBUTE_BY_ID(ModelAPI_AttributeReference, reference);
 GET_ATTRIBUTE_BY_ID(ModelAPI_AttributeSelection, selection);
 GET_ATTRIBUTE_BY_ID(ModelAPI_AttributeSelectionList, selectionList);
@@ -211,6 +218,7 @@ GET_ATTRIBUTE_BY_ID(ModelAPI_AttributeRefList, reflist);
 GET_ATTRIBUTE_BY_ID(ModelAPI_AttributeRefAttrList, refattrlist);
 GET_ATTRIBUTE_BY_ID(ModelAPI_AttributeIntArray, intArray);
 GET_ATTRIBUTE_BY_ID(ModelAPI_AttributeDoubleArray, realArray);
+GET_ATTRIBUTE_BY_ID(ModelAPI_AttributeTables, tables);
 
 std::shared_ptr<ModelAPI_Attribute> Model_Data::attribute(const std::string& theID)
 {
@@ -454,8 +462,7 @@ void Model_Data::addBackReference(FeaturePtr theFeature, std::string theAttrID,
     // the second condition is for history upper than concealment causer, so the feature result may
     // be displayed and previewed; also for avoiding of quick show/hide on history
     // moving deep down
-    if (aRes && !theFeature->isDisabled() &&
-        !ModelAPI_Session::get()->validators()->isUnconcealed(aRes, theFeature)) {
+    if (aRes && !theFeature->isDisabled()) {
       aRes->setIsConcealed(true);
     }
   }
@@ -473,10 +480,8 @@ void Model_Data::updateConcealmentFlag()
           std::shared_ptr<ModelAPI_Result> aRes =
             std::dynamic_pointer_cast<ModelAPI_Result>(myObject);
           if (aRes.get()) {
-            if (!ModelAPI_Session::get()->validators()->isUnconcealed(aRes, aFeature)) {
-              aRes->setIsConcealed(true); // set concealed
-              return;
-            }
+            aRes->setIsConcealed(true); // set concealed
+            return;
           }
         }
       }
@@ -624,7 +629,8 @@ static void copyAttrs(TDF_Label theSource, TDF_Label theDestination) {
            aTargetAttr = anAttrIter.Value()->NewEmpty();
       theDestination.AddAttribute(aTargetAttr);
     }
-    Handle(TDF_RelocationTable) aRelocTable = new TDF_RelocationTable(); // no relocation, empty map
+    // no special relocation, empty map, but self-relocation is on: copy references w/o changes
+    Handle(TDF_RelocationTable) aRelocTable = new TDF_RelocationTable(Standard_True);
     anAttrIter.Value()->Paste(aTargetAttr, aRelocTable);
   }
   // copy the sub-labels content