std::list<std::pair<TopoDS_Shape, TopoDS_Shape> >::iterator aPairsIter = aShapePairs.begin();
for(; aPairsIter != aShapePairs.end(); aPairsIter++) {
if (theFlag) { // disabled => make selection
- aBuilder.Select(aPairsIter->first, aPairsIter->second);
+ aBuilder.Select(aPairsIter->second, aPairsIter->first);
} else if (anEvol == TNaming_GENERATED) {
aBuilder.Generated(aPairsIter->first, aPairsIter->second);
} else if (anEvol == TNaming_MODIFY) {
} else if (anEvol == TNaming_PRIMITIVE) {
aBuilder.Generated(aPairsIter->second);
} else if (anEvol == TNaming_SELECTED) {
- aBuilder.Select(aPairsIter->first, aPairsIter->second);
+ aBuilder.Select(aPairsIter->second, aPairsIter->first);
}
}
// recursive call for all sub-labels
// This shape is already in document, store reference instead of shape;
const TDF_Label aFoundLabel = aNS->Label();
TDF_Reference::Set(aShapeLab, aFoundLabel);
+ aShapeLab.ForgetAttribute(TNaming_NamedShape::GetID());
return;
}
}
aBuilder.Generated(aShape);
// register name
+ aShapeLab.ForgetAttribute(TDF_Reference::GetID());
if(!aBuilder.NamedShape()->IsEmpty()) {
Handle(TDataStd_Name) anAttr;
if(aBuilder.NamedShape()->Label().FindAttribute(TDataStd_Name::GetID(),anAttr)) {
TNaming_Builder aSubBuilder(aShapeLab.FindChild(aTag++));
aSubBuilder.Generated(aSubIter.Value());
if(!aName.IsEmpty()) {
+ TCollection_AsciiString aShapeType = aShape.ShapeType() == TopAbs_EDGE ? "_Edge_" :
+ aShape.ShapeType() == TopAbs_FACE ? "_Face_" :
+ aShape.ShapeType() == TopAbs_SOLID ? "_Solid_" : "_Shape_";
std::string aSolidName =
- (aName + "_Solid_" + TCollection_AsciiString(aTag - theDecomposeSolidsTag)).ToCString();
+ (aName + aShapeType + TCollection_AsciiString(aTag - theDecomposeSolidsTag)).ToCString();
std::shared_ptr<Model_Document> aDoc =
std::dynamic_pointer_cast<Model_Document>(document());
aDoc->addNamingName(aSubBuilder.NamedShape()->Label(), aSolidName);
builder(theTag)->Generated(anOldShape, aNewShape);
if(!theName.empty())
buildName(theTag, theName);
+ TopAbs_ShapeEnum aGenShapeType = aNewShape.ShapeType();
+ if(aGenShapeType == TopAbs_WIRE || aGenShapeType == TopAbs_SHELL) {
+ TopAbs_ShapeEnum anExplodeShapeType = aGenShapeType == TopAbs_WIRE ? TopAbs_EDGE : TopAbs_FACE;
+ const TDF_Label aLabel = builder(theTag)->NamedShape()->Label();
+ int aTag = 1;
+ std::shared_ptr<Model_Document> aDoc = std::dynamic_pointer_cast<Model_Document>(document());
+ for(TopExp_Explorer anExp(aNewShape, anExplodeShapeType); anExp.More(); anExp.Next()) {
+ TDF_Label aChildLabel = aLabel.FindChild(aTag);
+ TNaming_Builder aBuilder(aChildLabel);
+ aBuilder.Generated(anOldShape, anExp.Current());
+ TCollection_AsciiString aChildName = TCollection_AsciiString((data()->name() + "/" + theName + "_").c_str()) + aTag;
+ aDoc->addNamingName(aChildLabel, aChildName.ToCString());
+ TDataStd_Name::Set(aChildLabel, aChildName.ToCString());
+ aTag++;
+ }
+ }
}
{
TopoDS_Shape aShapeIn = theShapeIn->impl<TopoDS_Shape>();
TopTools_MapOfShape aView;
- bool isBuilt = theName.empty();
+ bool isBuilt = !theName.empty();
TopExp_Explorer aShapeExplorer (aShapeIn, (TopAbs_ShapeEnum)theKindOfShape);
for (; aShapeExplorer.More(); aShapeExplorer.Next ()) {
const TopoDS_Shape& aRoot = aShapeExplorer.Current ();
theMS->generated(aRShape, aList);
std::list<std::shared_ptr<GeomAPI_Shape> >::const_iterator anIt = aList.begin(), aLast = aList.end();
for (; anIt != aLast; anIt++) {
- TopoDS_Shape aNewShape = (*anIt)->impl<TopoDS_Shape>();
+ TopoDS_Shape aNewShape = (*anIt)->impl<TopoDS_Shape>();
if (theSubShapes.isBound(*anIt)) {
std::shared_ptr<GeomAPI_Shape> aMapShape(theSubShapes.find(*anIt));
aNewShape.Orientation(aMapShape->impl<TopoDS_Shape>().Orientation());
}
if (!aRoot.IsSame (aNewShape)) {
builder(theTag)->Generated(aRoot,aNewShape);
- if(!isBuilt)
- buildName(theTag, theName);
+ if(isBuilt)
+ buildName(theTag, theName);
+ }
+ TopAbs_ShapeEnum aGenShapeType = aNewShape.ShapeType();
+ if(aGenShapeType == TopAbs_WIRE || aGenShapeType == TopAbs_SHELL) {
+ TopAbs_ShapeEnum anExplodeShapeType = aGenShapeType == TopAbs_WIRE ? TopAbs_EDGE : TopAbs_FACE;
+ const TDF_Label aLabel = builder(theTag)->NamedShape()->Label();
+ int aTag = 1;
+ std::shared_ptr<Model_Document> aDoc = std::dynamic_pointer_cast<Model_Document>(document());
+ for(TopExp_Explorer anExp(aNewShape, anExplodeShapeType); anExp.More(); anExp.Next()) {
+ TDF_Label aChildLabel = aLabel.FindChild(aTag);
+ TNaming_Builder aBuilder(aChildLabel);
+ aBuilder.Generated(aRoot, anExp.Current());
+ TCollection_AsciiString aChildName = TCollection_AsciiString((data()->name() + "/" + theName + "_").c_str()) + aTag;
+ aDoc->addNamingName(aChildLabel, aChildName.ToCString());
+ TDataStd_Name::Set(aChildLabel, aChildName.ToCString());
+ aTag++;
+ }
}
}
}