X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_BodyBuilder.cpp;h=1d3b8a4d506d48ef85e711e995ad7c75e8568f93;hb=03b823cbbe43236117bc50c34398f3ce273f729b;hp=9d560ba23e14b9e22eb86ccd8afc8b9ebff8b071;hpb=40672f21eb5ca70b63506b30eff31716516d532a;p=modules%2Fshaper.git diff --git a/src/Model/Model_BodyBuilder.cpp b/src/Model/Model_BodyBuilder.cpp index 9d560ba23..1d3b8a4d5 100755 --- a/src/Model/Model_BodyBuilder.cpp +++ b/src/Model/Model_BodyBuilder.cpp @@ -79,7 +79,7 @@ static void evolutionToSelectionRec(TDF_Label theLab, const bool theFlag) { std::list >::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) { @@ -89,7 +89,7 @@ static void evolutionToSelectionRec(TDF_Label theLab, const bool theFlag) { } 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 @@ -124,18 +124,20 @@ void Model_BodyBuilder::store(const std::shared_ptr& theShape, if (aShape.IsNull()) return; // null shape inside - /*if(!theIsStoreSameShapes) { + if(!theIsStoreSameShapes) { Handle(TNaming_NamedShape) aNS = TNaming_Tool::NamedShape(aShape, aShapeLab); if(!aNS.IsNull() && !aNS->IsEmpty()) { // 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)) { @@ -214,17 +216,20 @@ void Model_BodyBuilder::storeModified(const std::shared_ptr& theO TopoDS_Iterator aSubIter(aShapeNew); for(int aTag = theDecomposeSolidsTag; aSubIter.More(); aSubIter.Next()) { - /*const TopoDS_Shape& aShape = aSubIter.Value(); + const TopoDS_Shape& aShape = aSubIter.Value(); Handle(TNaming_NamedShape) aNS = TNaming_Tool::NamedShape(aShape, aShapeLab); if(!aNS.IsNull() && !aNS->IsEmpty()) { // This shape is already in document, don't add it. continue; - }*/ + } 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 aDoc = std::dynamic_pointer_cast(document()); aDoc->addNamingName(aSubBuilder.NamedShape()->Label(), aSolidName); @@ -781,10 +786,10 @@ std::shared_ptr Model_BodyBuilder::shape() std::shared_ptr aData = std::dynamic_pointer_cast(data()); if (aData) { TDF_Label aShapeLab = aData->shapeLab(); - /*Handle(TDF_Reference) aRef; + Handle(TDF_Reference) aRef; if (aShapeLab.FindAttribute(TDF_Reference::GetID(), aRef)) { aShapeLab = aRef->Get(); - }*/ + } Handle(TNaming_NamedShape) aName; if (aShapeLab.FindAttribute(TNaming_NamedShape::GetID(), aName)) { TopoDS_Shape aShape = aName->Get();