Salome HOME
Fix for #19754: EDF 21721 - Problems with a study
[modules/shaper.git] / src / Model / Model_BodyBuilder.cpp
index cf817b65137bb2d67b5edcfdf0af9214801b0e5e..21e27c86918fb91874aa629c03b39a8fa2a517bf 100644 (file)
@@ -303,8 +303,8 @@ TNaming_Builder* Model_BodyBuilder::builder(const int theTag)
   std::map<int, TNaming_Builder*>::iterator aFind = myBuilders.find(theTag);
   if (aFind == myBuilders.end()) {
     std::shared_ptr<Model_Data> aData = std::dynamic_pointer_cast<Model_Data>(data());
-    myBuilders[theTag] = new TNaming_Builder(
-      theTag == 0 ? aData->shapeLab() : aData->shapeLab().FindChild(theTag));
+    TDF_Label aLab = theTag == 0 ? aData->shapeLab() : aData->shapeLab().FindChild(theTag);
+    myBuilders[theTag] = new TNaming_Builder(aLab);
     aFind = myBuilders.find(theTag);
   }
   return aFind->second;
@@ -431,6 +431,11 @@ void Model_BodyBuilder::clean()
   for(; anEntriesIter.More(); anEntriesIter.Next()) {
     anEntriesIter.Value()->Label().ForgetAttribute(kEXTERNAL_SHAPE_REF);
   }
+  // to clear old shapes in all sub-labels (they may be left without builders on Open)
+  TDF_ChildIDIterator aNSIter(aLab, TNaming_NamedShape::GetID(), true);
+  for(; aNSIter.More(); aNSIter.Next()) {
+    aNSIter.Value()->Label().ForgetAttribute(aNSIter.Value());
+  }
 }
 
 void Model_BodyBuilder::cleanCash()