void Model_AttributeReference::setValue(ObjectPtr theObject)
{
+ if(!theObject)
+ return;
if (!myIsInitialized || value() != theObject) {
boost::shared_ptr<Model_Data> aData = boost::dynamic_pointer_cast<Model_Data>(
theObject->data());
+
+ boost::shared_ptr<Model_Document> aDoc =
+ boost::dynamic_pointer_cast<Model_Document>(owner()->document());
+ if (aDoc) aDoc->objectIsNotReferenced(aDoc->object(myRef->Get()));
myRef->Set(aData->label().Father()); // references to the feature label
+ boost::shared_dynamic_cast<Model_Document>(owner()->document())->objectIsReferenced(theObject);
+
owner()->data()->sendAttributeUpdated(this);
}
}
Model_AttributeReference::Model_AttributeReference(TDF_Label& theLabel)
{
myIsInitialized = theLabel.FindAttribute(TDF_Reference::GetID(), myRef) == Standard_True;
- if (!myIsInitialized)
+ if (!myIsInitialized) {
myRef = TDF_Reference::Set(theLabel, theLabel); // not initialized references to itself
+ } else {
+ if (owner()) {
+ boost::shared_ptr<Model_Document> aDoc =
+ boost::dynamic_pointer_cast<Model_Document>(owner()->document());
+ if (aDoc) aDoc->objectIsReferenced(aDoc->object(myRef->Get()));
+ }
+ }
+}
+
+void Model_AttributeReference::setObject(const boost::shared_ptr<ModelAPI_Object>& theObject)
+{
+ if (owner() != theObject) {
+ ModelAPI_AttributeReference::setObject(theObject);
+ boost::shared_ptr<Model_Document> aDoc =
+ boost::dynamic_pointer_cast<Model_Document>(owner()->document());
+ if (aDoc) aDoc->objectIsReferenced(aDoc->object(myRef->Get()));
+ }
+}
+
+Model_AttributeReference::~Model_AttributeReference()
+{
+ boost::shared_ptr<Model_Document> aDoc =
+ boost::dynamic_pointer_cast<Model_Document>(owner()->document());
+ TDF_Label aLab = myRef->Get();
+ if (aDoc && !aLab.IsNull()) aDoc->objectIsNotReferenced(aDoc->object(myRef->Get()));
}