- if (theObj->document() == owner()->document()) { // this document object
- std::shared_ptr<Model_Document> aDoc = std::dynamic_pointer_cast<Model_Document>(
- owner()->document());
- if (aDoc) {
- std::shared_ptr<Model_Data> aData = std::dynamic_pointer_cast<Model_Data>(theObj->data());
- if (aData.get() && aData->isValid()) {
- TDF_Label anObjLab = aData->label().Father();
- const TDF_LabelList& aList = myRef->List();
- for (TDF_ListIteratorOfLabelList aLIter(aList); aLIter.More(); aLIter.Next()) {
- if (aLIter.Value().IsEqual(anObjLab)) {
- return true;
- }
- }
- }
- }
- } else { // external document object
- // create new lists because for the current moment remove one of the duplicated elements
- // from the list is buggy
- std::ostringstream anIdString; // string with document Id
- anIdString<<theObj->document()->id();
- std::shared_ptr<Model_Data> aData = std::dynamic_pointer_cast<Model_Data>(theObj->data());
- TCollection_AsciiString anEntry;
- TDF_Tool::Entry(aData->label().Father(), anEntry);
- bool aFound = false;
- TDataStd_ListIteratorOfListOfExtendedString anExtIter(myExtDocRef->List());
- for (; anExtIter.More(); anExtIter.Next()) {
- if (anExtIter.Value() == anIdString.str().c_str()) {
- anExtIter.Next();
- if (anExtIter.Value() == anEntry) { // fully maches
- return true;
- }
- } else {
- anExtIter.Next();
- }
- }
- }
- return false;