#include "Model_Events.h"
#include "Model_Data.h"
+#include <GeomAPI_Shape.h>
+
#include <TDF_AttributeIterator.hxx>
#include <TDF_ChildIterator.hxx>
#include <TDF_RelocationTable.hxx>
+#include <TDF_DeltaOnAddition.hxx>
#include <TopAbs_ShapeEnum.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Shape.hxx>
#include <BRep_Tool.hxx>
#include <TNaming_Builder.hxx>
#include <TNaming_Iterator.hxx>
+#include <TNaming_NamedShape.hxx>
#include <NCollection_List.hxx>
void Model_AttributeSelectionList::append(
std::shared_ptr<Model_AttributeSelection>(new Model_AttributeSelection(aNewLab));
if (owner()) {
aNewAttr->setObject(owner());
+ aNewAttr->setParent(this);
}
aNewAttr->setID(id());
mySize->Set(aNewTag);
std::shared_ptr<Model_AttributeSelection>(new Model_AttributeSelection(aNewLab));
if (owner()) {
aNewAttr->setObject(owner());
+ aNewAttr->setParent(this);
}
aNewAttr->setID(id());
mySize->Set(aNewTag);
// for named shape copy exact shapes (in NamedShape Paste method the CopyTool is used)
Handle(TNaming_NamedShape) aNS = Handle(TNaming_NamedShape)::DownCast(anAttrIter.Value());
if (aNS.IsNull()) {
- // no relocation, empty map
- Handle(TDF_RelocationTable) aRelocTable = new TDF_RelocationTable();
+ // no special relocation, empty map, but self-relocation is on: copy references w/o changes
+ Handle(TDF_RelocationTable) aRelocTable = new TDF_RelocationTable(Standard_True);
anAttrIter.Value()->Paste(aTargetAttr, aRelocTable);
} else {
CopyNS(aNS, aTargetAttr);
std::map<ResultPtr, std::list<std::shared_ptr<GeomAPI_Shape> > >::iterator aContext =
myCash.find(theContext);
if (aContext != myCash.end()) {
- // iterate shapes because "isEqual" method must be called for each shape
+ // iterate shapes because "isSame" method must be called for each shape
std::list<std::shared_ptr<GeomAPI_Shape> >::iterator aShapes = aContext->second.begin();
for(; aShapes != aContext->second.end(); aShapes++) {
if (!theSubShape.get()) {
if (!aShapes->get())
return true;
} else {
- if (theSubShape->isEqual(*aShapes))
+ // we need to call here isSame instead of isEqual to do not check shapes orientation
+ if (theSubShape->isSame(*aShapes))
return true;
}
}
return true;
}
} else {
- if (aValue->isEqual(theSubShape)) // shapes are equal
+ // we need to call here isSame instead of isEqual to do not check shapes orientation
+ if (aValue->isSame(theSubShape)) // shapes are equal
return true;
}
}
aNewAttr->setID(id());
if (owner()) {
aNewAttr->setObject(owner());
+ aNewAttr->setParent(this);
}
return aNewAttr;
}
std::shared_ptr<Model_AttributeSelection>(new Model_AttributeSelection(aLab));
if (owner()) {
aNewAttr->setObject(owner());
+ aNewAttr->setParent(this);
}
REMOVE_BACK_REF(aNewAttr->context());