X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_AttributeReference.cpp;h=b17b72f87ba72c863cff12990e57451445a20838;hb=2f70266a7065a81d239198cf4ca0f507e46b96ff;hp=dc1a3994d22861431126c4f20be293de14731417;hpb=656b2b25f58ce91c661437af3b35cb7e8da09f6a;p=modules%2Fshaper.git diff --git a/src/Model/Model_AttributeReference.cpp b/src/Model/Model_AttributeReference.cpp index dc1a3994d..b17b72f87 100644 --- a/src/Model/Model_AttributeReference.cpp +++ b/src/Model/Model_AttributeReference.cpp @@ -79,12 +79,14 @@ ObjectPtr Model_AttributeReference::value() } } } else { // internal ref - std::shared_ptr aDoc = std::dynamic_pointer_cast( - owner()->document()); - if (aDoc) { - TDF_Label aRefLab = myRef->Get(); - if (!aRefLab.IsNull()) { // it may happen with old document, issue #285 - return aDoc->objects()->object(aRefLab); + if (owner().get()) { + std::shared_ptr aDoc = std::dynamic_pointer_cast( + owner()->document()); + if (aDoc) { + TDF_Label aRefLab = myRef->Get(); + if (!aRefLab.IsNull()) { // it may happen with old document, issue #285 + return aDoc->objects()->object(aRefLab); + } } } } @@ -102,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 = @@ -117,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()); } }