Salome HOME
Add tutorial help page.
[modules/shaper.git] / src / Model / Model_ResultConstruction.cpp
index 737a63d25df6cfeab3d39769e870f5ad5be33e4f..ad9c9a3070e2f9c060b0a9affef787a4e46d243f 100644 (file)
@@ -68,12 +68,12 @@ void Model_ResultConstruction::setShape(std::shared_ptr<GeomAPI_Shape> theShape)
     if (!theShape.get() || !theShape->isEqual(myShape)) {
         static const Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_UPDATED);
         ModelAPI_EventCreator::get()->sendUpdated(data()->owner(), anEvent);
+        if (theShape.get()) {
+          myFacesUpToDate = false;
+          myFaces.clear();
+        }
     }
     myShape = theShape;
-    if (theShape.get()) {
-      myFacesUpToDate = false;
-      myFaces.clear();
-    }
   }
 }
 
@@ -94,7 +94,7 @@ void Model_ResultConstruction::setIsInHistory(const bool isInHistory)
   myIsInHistory = isInHistory;
 }
 
-int Model_ResultConstruction::facesNum()
+int Model_ResultConstruction::facesNum(const bool theUpdateNaming)
 {
   if (!myFacesUpToDate) {
     std::shared_ptr<GeomAPI_PlanarEdges> aWirePtr =
@@ -111,6 +111,23 @@ int Model_ResultConstruction::facesNum()
       }
     }
     myFacesUpToDate = true;
+
+    // update all the faces and sub-elements in the naming structure
+    if (theUpdateNaming) {
+      DocumentPtr anEmptyExt;
+      bool aNotExt = false;
+      TDF_Label aDataLab = startLabel(anEmptyExt, aNotExt);
+      TDF_ChildIterator aSubsIter(aDataLab, Standard_False);
+      for(; aSubsIter.More(); aSubsIter.Next()) {
+        const TDF_Label aLab = aSubsIter.Value();
+        if (aLab.Tag() == 1) // skip the root shape label
+          continue;
+        Handle(TNaming_NamedShape) aNS;
+        if (aLab.FindAttribute(TNaming_NamedShape::GetID(), aNS)) {
+          update(aLab.Tag() - 1, anEmptyExt, aNotExt);
+        }
+      }
+    }
   }
   return int(myFaces.size());
 }
@@ -132,7 +149,7 @@ void Model_ResultConstruction::setInfinite(const bool theInfinite)
 
 void Model_ResultConstruction::setIsConcealed(const bool theValue)
 {
-  // do nothing: the construction element is never consealed
+  // do nothing: the construction element is never concealed
 }
 
 static const int kSTART_VERTEX_DELTA = 1000000;
@@ -650,7 +667,7 @@ bool Model_ResultConstruction::update(const int theIndex,
     Handle(TDF_Reference) aRef;
     if (aLab.FindAttribute(TDF_Reference::GetID(), aRef)) {
       int aFaceIndex = aRef->Get().Tag();
-      // don't check selection ,since face may disappear, but the shape stays correct
+      // don't check selection since face may disappear, but the shape stays correct
       Model_ResultConstruction::update(aFaceIndex, theExtDoc, theModified);
     }
     // getting a type of selected shape