X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_ResultConstruction.cpp;h=ad9c9a3070e2f9c060b0a9affef787a4e46d243f;hb=b73fb7468bea81901dbeed8e229d742f788ec282;hp=737a63d25df6cfeab3d39769e870f5ad5be33e4f;hpb=1c3738ae81b02ba62136ac03a53a81a532b95141;p=modules%2Fshaper.git diff --git a/src/Model/Model_ResultConstruction.cpp b/src/Model/Model_ResultConstruction.cpp index 737a63d25..ad9c9a307 100644 --- a/src/Model/Model_ResultConstruction.cpp +++ b/src/Model/Model_ResultConstruction.cpp @@ -68,12 +68,12 @@ void Model_ResultConstruction::setShape(std::shared_ptr 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 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