X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_BodyBuilder.cpp;h=f84c169b2ca90b6e44937d9dee24920f7a01cbf1;hb=5315361b0c34c6e603474413024db5485c850d80;hp=1d3b8a4d506d48ef85e711e995ad7c75e8568f93;hpb=03b823cbbe43236117bc50c34398f3ce273f729b;p=modules%2Fshaper.git diff --git a/src/Model/Model_BodyBuilder.cpp b/src/Model/Model_BodyBuilder.cpp index 1d3b8a4d5..f84c169b2 100755 --- a/src/Model/Model_BodyBuilder.cpp +++ b/src/Model/Model_BodyBuilder.cpp @@ -307,6 +307,22 @@ void Model_BodyBuilder::generated(const std::shared_ptr& theOldSh 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 aDoc = std::dynamic_pointer_cast(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++; + } + } } @@ -406,7 +422,7 @@ void Model_BodyBuilder::loadAndOrientGeneratedShapes ( { TopoDS_Shape aShapeIn = theShapeIn->impl(); 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 (); @@ -417,15 +433,31 @@ void Model_BodyBuilder::loadAndOrientGeneratedShapes ( theMS->generated(aRShape, aList); std::list >::const_iterator anIt = aList.begin(), aLast = aList.end(); for (; anIt != aLast; anIt++) { - TopoDS_Shape aNewShape = (*anIt)->impl(); + TopoDS_Shape aNewShape = (*anIt)->impl(); if (theSubShapes.isBound(*anIt)) { std::shared_ptr aMapShape(theSubShapes.find(*anIt)); aNewShape.Orientation(aMapShape->impl().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 aDoc = std::dynamic_pointer_cast(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++; + } } } }