X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FModel%2FModel_AttributeReference.cpp;h=b17b72f87ba72c863cff12990e57451445a20838;hb=2f70266a7065a81d239198cf4ca0f507e46b96ff;hp=b1707c006857736f8bfb9f5bcc6fd88e028141a4;hpb=59d8f084644a30cab1ce8aa90cf4555d59a64c0a;p=modules%2Fshaper.git diff --git a/src/Model/Model_AttributeReference.cpp b/src/Model/Model_AttributeReference.cpp index b1707c006..b17b72f87 100644 --- a/src/Model/Model_AttributeReference.cpp +++ b/src/Model/Model_AttributeReference.cpp @@ -25,7 +25,6 @@ void Model_AttributeReference::setValue(ObjectPtr theObject) // return; ObjectPtr aValue = value(); if (!myIsInitialized || aValue != theObject) { - myIsInitialized = true; REMOVE_BACK_REF(aValue); TDF_Label anObjLab; @@ -64,23 +63,23 @@ void Model_AttributeReference::setValue(ObjectPtr theObject) ObjectPtr Model_AttributeReference::value() { - if (isInitialized()) { - Handle(TDataStd_Comment) aDocID; - if (myRef->Label().FindAttribute(TDataStd_Comment::GetID(), aDocID)) { // external ref - int anID = atoi(TCollection_AsciiString(aDocID->Get()).ToCString()); - DocumentPtr aRefDoc = Model_Application::getApplication()->document(anID); - if (aRefDoc.get()) { - Handle(TDataStd_AsciiString) anEntry; - if (myRef->Label().FindAttribute(TDataStd_AsciiString::GetID(), anEntry)) { - std::shared_ptr aDR = std::dynamic_pointer_cast(aRefDoc); - TDF_Label aRefLab; - TDF_Tool::Label(aDR->objects()->featuresLabel().Data(), anEntry->Get().ToCString(), aRefLab); - if (!aRefLab.IsNull()) { - return aDR->objects()->object(aRefLab); - } + Handle(TDataStd_Comment) aDocID; + if (myRef->Label().FindAttribute(TDataStd_Comment::GetID(), aDocID)) { // external ref + int anID = atoi(TCollection_AsciiString(aDocID->Get()).ToCString()); + DocumentPtr aRefDoc = Model_Application::getApplication()->document(anID); + if (aRefDoc.get()) { + Handle(TDataStd_AsciiString) anEntry; + if (myRef->Label().FindAttribute(TDataStd_AsciiString::GetID(), anEntry)) { + std::shared_ptr aDR = std::dynamic_pointer_cast(aRefDoc); + TDF_Label aRefLab; + TDF_Tool::Label(aDR->objects()->featuresLabel().Data(), anEntry->Get().ToCString(), aRefLab); + if (!aRefLab.IsNull()) { + return aDR->objects()->object(aRefLab); } } - } else { // internal ref + } + } else { // internal ref + if (owner().get()) { std::shared_ptr aDoc = std::dynamic_pointer_cast( owner()->document()); if (aDoc) { @@ -91,7 +90,6 @@ ObjectPtr Model_AttributeReference::value() } } } - // not initialized return FeaturePtr(); } @@ -106,9 +104,15 @@ bool Model_AttributeReference::isInitialized() Model_AttributeReference::Model_AttributeReference(TDF_Label& theLabel) { - myIsInitialized = theLabel.FindAttribute(TDF_Reference::GetID(), myRef) == Standard_True; + myLab = theLabel; + reinit(); +} + +void Model_AttributeReference::reinit() +{ + myIsInitialized = myLab.FindAttribute(TDF_Reference::GetID(), myRef) == Standard_True; if (!myIsInitialized) { - myRef = TDF_Reference::Set(theLabel, theLabel); // not initialized references to itself + myRef = TDF_Reference::Set(myLab, myLab); // not initialized references to itself } else { if (owner()) { std::shared_ptr aDoc = @@ -121,8 +125,8 @@ void Model_AttributeReference::setObject(const std::shared_ptr& { if (owner() != theObject) { ModelAPI_AttributeReference::setObject(theObject); - std::shared_ptr aDoc = - std::dynamic_pointer_cast(owner()->document()); + //std::shared_ptr aDoc = + // std::dynamic_pointer_cast(owner()->document()); } }