X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FModel%2FModel_BodyBuilder.cpp;h=6d7fe12db8016ad869beb2216720a694ffcfac4a;hb=86bc0800fb01a81cebe88ec6c0be1854e612207e;hp=c17c9b8d56c3ea2cf4870d67825bb84db2679001;hpb=a276c3f6288ffcd67f1dab8323d7e4666a1aded7;p=modules%2Fshaper.git diff --git a/src/Model/Model_BodyBuilder.cpp b/src/Model/Model_BodyBuilder.cpp index c17c9b8d5..6d7fe12db 100755 --- a/src/Model/Model_BodyBuilder.cpp +++ b/src/Model/Model_BodyBuilder.cpp @@ -125,83 +125,10 @@ static bool isAlreadyStored(const TNaming_Builder* theBuilder, Model_BodyBuilder::Model_BodyBuilder(ModelAPI_Object* theOwner) : ModelAPI_BodyBuilder(theOwner), - myPrimitiveTag(PRIMITIVES_START_TAG), - myDividedIndex(1), - myVIndex(1), - myEIndex(1), - myFIndex(1) + myFreePrimitiveTag(PRIMITIVES_START_TAG) { } -// Converts evolution of naming shape to selection evelution and back to avoid -// naming support on the disabled results. Deeply in the labels tree, recursively. -static void evolutionToSelectionRec(TDF_Label theLab, const bool theFlag) { - std::list > aShapePairs; // to store old and new shapes - Handle(TNaming_NamedShape) aName; - int anEvolution = -1; - if (theLab.FindAttribute(TNaming_NamedShape::GetID(), aName)) { - TNaming_Evolution aNSEvol = aName->Evolution(); - if ((aNSEvol == TNaming_SELECTED && theFlag) || - (aNSEvol != TNaming_SELECTED && !theFlag)) { // nothing to do, it is already correct - return; - } - anEvolution = (int)(aNSEvol); - if (!theFlag) { - Handle(TDataStd_Integer) anAttrEvol; - if (theLab.FindAttribute(TDataStd_Integer::GetID(), anAttrEvol)) { - anEvolution = anAttrEvol->Get(); - } - } else { - TDataStd_Integer::Set(theLab, anEvolution); - } - - for(TNaming_Iterator anIter(aName); anIter.More(); anIter.Next()) { - // iterator goes in reversed order relatively to the Builder, to, make the list reversed - aShapePairs.push_front(std::pair - (anIter.OldShape(), anIter.NewShape())); - } - - // create new - TNaming_Builder aBuilder(theLab); - TNaming_Evolution anEvol = (TNaming_Evolution)(anEvolution); - std::list >::iterator aPairsIter = aShapePairs.begin(); - for(; aPairsIter != aShapePairs.end(); aPairsIter++) { - if (theFlag) { // disabled => make selection - if (anEvolution == TNaming_DELETE) // issue 2274 : don't put too many same null shapes - aBuilder.Select(aPairsIter->first, aPairsIter->first); - else if (anEvolution == TNaming_PRIMITIVE) - aBuilder.Select(aPairsIter->second, aPairsIter->second); - else - aBuilder.Select(aPairsIter->second, aPairsIter->first); - } else if (anEvol == TNaming_GENERATED) { - aBuilder.Generated(aPairsIter->first, aPairsIter->second); - } else if (anEvol == TNaming_MODIFY) { - aBuilder.Modify(aPairsIter->first, aPairsIter->second); - } else if (anEvol == TNaming_DELETE) { - aBuilder.Delete(aPairsIter->first); - } else if (anEvol == TNaming_PRIMITIVE) { - aBuilder.Generated(aPairsIter->second); - } else if (anEvol == TNaming_SELECTED) { - aBuilder.Select(aPairsIter->second, aPairsIter->first); - } - } - } - // recursive call for all sub-labels - TDF_ChildIterator anIter(theLab, Standard_False); - for(; anIter.More(); anIter.Next()) { - evolutionToSelectionRec(anIter.Value(), theFlag); - } -} - -void Model_BodyBuilder::evolutionToSelection(const bool theFlag) -{ - std::shared_ptr aData = std::dynamic_pointer_cast(data()); - if (!aData || !aData->isValid()) // unknown case - return; - TDF_Label& aShapeLab = aData->shapeLab(); - evolutionToSelectionRec(aShapeLab, theFlag); -} - void Model_BodyBuilder::store(const GeomShapePtr& theShape, const bool theIsStoreSameShapes) { @@ -358,11 +285,7 @@ void Model_BodyBuilder::clean() myBuilders.clear(); // remove the old reference (if any) aLab.ForgetAttribute(TDF_Reference::GetID()); - myPrimitiveTag = PRIMITIVES_START_TAG; - myDividedIndex = 1; - myVIndex = 1; - myEIndex = 1; - myFIndex = 1; + myFreePrimitiveTag = PRIMITIVES_START_TAG; } Model_BodyBuilder::~Model_BodyBuilder() @@ -374,14 +297,16 @@ void Model_BodyBuilder::buildName(const int theTag, const std::string& theName) { std::shared_ptr aDoc = std::dynamic_pointer_cast(document()); std::string aName = theName; + std::string aPrefix = ""; switch (theTag) { - case GENERATED_VERTICES_TAG: aName += aName.empty() ? "Generated_Vertex" : "_GV"; break; - case GENERATED_EDGES_TAG: aName += aName.empty() ? "Generated_Edge" : "_GE"; break; - case GENERATED_FACES_TAG: aName += aName.empty() ? "Generated_Face" : "_GF"; break; - case MODIFIED_VERTICES_TAG: aName += aName.empty() ? "Modified_Vertex" : "_MV"; break; - case MODIFIED_EDGES_TAG: aName += aName.empty() ? "Modified_Edge" : "_ME"; break; - case MODIFIED_FACES_TAG: aName += aName.empty() ? "Modified_Face" : "_MF"; break; + case GENERATED_VERTICES_TAG: aPrefix = aName.empty() ? "Generated_Vertex" : "GV:"; break; + case GENERATED_EDGES_TAG: aPrefix = aName.empty() ? "Generated_Edge" : "GE:"; break; + case GENERATED_FACES_TAG: aPrefix = aName.empty() ? "Generated_Face" : "GF:"; break; + case MODIFIED_VERTICES_TAG: aPrefix = aName.empty() ? "Modified_Vertex" : "MV:"; break; + case MODIFIED_EDGES_TAG: aPrefix = aName.empty() ? "Modified_Edge" : "ME:"; break; + case MODIFIED_FACES_TAG: aPrefix = aName.empty() ? "Modified_Face" : "MF:"; break; } + aName.insert(0, aPrefix); TDataStd_Name::Set(builder(theTag)->NamedShape()->Label(), aName.c_str()); } @@ -389,12 +314,12 @@ void Model_BodyBuilder::generated(const GeomShapePtr& theNewShape, const std::string& theName) { TopoDS_Shape aShape = theNewShape->impl(); - builder(myPrimitiveTag)->Generated(aShape); + builder(myFreePrimitiveTag)->Generated(aShape); if (!theName.empty()) { - buildName(myPrimitiveTag, theName); + buildName(myFreePrimitiveTag, theName); } - ++myPrimitiveTag; + ++myFreePrimitiveTag; } void Model_BodyBuilder::generated(const GeomShapePtr& theOldShape, @@ -407,12 +332,12 @@ void Model_BodyBuilder::generated(const GeomShapePtr& theOldShape, int aTag; if (aNewShapeType == TopAbs_WIRE || aNewShapeType == TopAbs_SHELL) { // TODO: This is a workaround. New shape should be only vertex, edge or face. - TopAbs_ShapeEnum anExplodeShapeType = aNewShapeType == TopAbs_WIRE ? TopAbs_EDGE : TopAbs_FACE; + TopAbs_ShapeEnum aShapeTypeToExplore = aNewShapeType == TopAbs_WIRE ? TopAbs_EDGE : TopAbs_FACE; aTag = TopAbs_WIRE ? GENERATED_EDGES_TAG : GENERATED_FACES_TAG; - for (TopExp_Explorer anExp(aNewShape, anExplodeShapeType); anExp.More(); anExp.Next()) { + for (TopExp_Explorer anExp(aNewShape, aShapeTypeToExplore); anExp.More(); anExp.Next()) { builder(aTag)->Generated(anOldShape, anExp.Current()); - buildName(aTag, theName); } + buildName(aTag, theName); } else { aTag = getGenerationTag(aNewShape); if (aTag == INVALID_TAG) return; @@ -489,8 +414,9 @@ static void removeBadShapes(ListOfShape& theShapes) } // Keep only the shapes with minimal shape type -static void keepTopLevelShapes(ListOfShape& theShapes, const TopoDS_Shape& theRoot, - const GeomShapePtr& theResultShape = GeomShapePtr()) +static void keepTopLevelShapes(ListOfShape& theShapes, + const TopoDS_Shape& theRoot, + const GeomShapePtr& theResultShape = GeomShapePtr()) { GeomAPI_Shape::ShapeType aKeepShapeType = GeomAPI_Shape::SHAPE; ListOfShape::iterator anIt = theShapes.begin(); @@ -621,58 +547,51 @@ void Model_BodyBuilder::loadModifiedShapes(const GeomMakeShapePtr& theAlgo, } } -void Model_BodyBuilder::loadAndOrientGeneratedShapes ( - GeomAlgoAPI_MakeShape* theMS, - GeomShapePtr theShapeIn, - const int theKindOfShape, - const int theTag, - const std::string& theName, - GeomAPI_DataMapOfShapeShape& theSubShapes) +void Model_BodyBuilder::loadGeneratedShapes(const GeomMakeShapePtr& theAlgo, + const GeomShapePtr& theOldShape, + const GeomAPI_Shape::ShapeType theShapeTypeToExplore, + const std::string& theName) { - TopoDS_Shape aShapeIn = theShapeIn->impl(); - TopTools_MapOfShape aView; - bool isBuilt = !theName.empty(); - TopExp_Explorer aShapeExplorer (aShapeIn, (TopAbs_ShapeEnum)theKindOfShape); - for (; aShapeExplorer.More(); aShapeExplorer.Next ()) { - const TopoDS_Shape& aRoot = aShapeExplorer.Current (); - if (!aView.Add(aRoot)) continue; - //if (TNaming_Tool::NamedShape(aRoot, builder(theTag)->NamedShape()->Label()).IsNull()) - // continue; // there is no sense to write history if old shape does not exist in the document - ListOfShape aList; - GeomShapePtr aRShape(new GeomAPI_Shape()); - aRShape->setImpl((new TopoDS_Shape(aRoot))); - theMS->generated(aRShape, aList); - keepTopLevelShapes(aList, aRoot); - std::list::const_iterator - anIt = aList.begin(), aLast = aList.end(); - for (; anIt != aLast; anIt++) { - TopoDS_Shape aNewShape = (*anIt)->impl(); - if (theSubShapes.isBound(*anIt)) { - GeomShapePtr aMapShape(theSubShapes.find(*anIt)); - aNewShape.Orientation(aMapShape->impl().Orientation()); - } - if (!aRoot.IsSame (aNewShape)) { - builder(theTag)->Generated(aRoot,aNewShape); - 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((theName + "_").c_str()) + aTag; - TDataStd_Name::Set(aChildLabel, aChildName.ToCString()); - aTag++; + TopTools_MapOfShape anAlreadyProcessedShapes; + for (GeomAPI_ShapeExplorer anOldShapeExp(theOldShape, theShapeTypeToExplore); + anOldShapeExp.more(); + anOldShapeExp.next()) + { + GeomShapePtr anOldSubShape = anOldShapeExp.current(); + const TopoDS_Shape& anOldSubShape_ = anOldSubShape->impl(); + + // There is no sense to write history if shape already processed. + if (!anAlreadyProcessedShapes.Add(anOldSubShape_)) continue; + + // Get new shapes. + ListOfShape aNewShapes; + theAlgo->generated(anOldSubShape, aNewShapes); + + keepTopLevelShapes(aNewShapes, anOldSubShape_); + + for (ListOfShape::const_iterator aNewShapesIt = aNewShapes.cbegin(); + aNewShapesIt != aNewShapes.cend(); + ++aNewShapesIt) + { + GeomShapePtr aNewShape = *aNewShapesIt; + const TopoDS_Shape& aNewShape_ = aNewShape->impl(); + + TopAbs_ShapeEnum aNewShapeType = aNewShape_.ShapeType(); + if (aNewShapeType == TopAbs_WIRE || aNewShapeType == TopAbs_SHELL) { + // TODO: This is a workaround. New shape should be only edge or face. + TopAbs_ShapeEnum aShapeTypeToExplore = aNewShapeType == TopAbs_WIRE ? TopAbs_EDGE + : TopAbs_FACE; + int aTag = TopAbs_WIRE ? GENERATED_EDGES_TAG : GENERATED_FACES_TAG; + for (TopExp_Explorer anExp(aNewShape_, aShapeTypeToExplore); anExp.More(); anExp.Next()) { + builder(aTag)->Generated(anOldSubShape_, anExp.Current()); } + buildName(aTag, theName); + } + else { + int aTag = getGenerationTag(aNewShape_); + if (aTag == INVALID_TAG) return; + builder(aTag)->Generated(anOldSubShape_, aNewShape_); + buildName(aTag, theName); } } } @@ -713,7 +632,7 @@ void loadGeneratedDangleShapes( //======================================================================= void Model_BodyBuilder::loadNextLevels(GeomShapePtr theShape, - const std::string& theName, int& theTag) + const std::string& theName) { if(theShape->isNull()) return; TopoDS_Shape aShape = theShape->impl(); @@ -721,11 +640,11 @@ void Model_BodyBuilder::loadNextLevels(GeomShapePtr theShape, if (aShape.ShapeType() == TopAbs_SOLID) { TopExp_Explorer expl(aShape, TopAbs_FACE); for (; expl.More(); expl.Next()) { - builder(theTag)->Generated(expl.Current()); - TCollection_AsciiString aStr(theTag); - aName = theName + aStr.ToCString(); - buildName(theTag, aName); - theTag++; + builder(myFreePrimitiveTag)->Generated(expl.Current()); + TCollection_AsciiString aStr(myFreePrimitiveTag - PRIMITIVES_START_TAG + 1); + aName = theName + "_" + aStr.ToCString(); + buildName(myFreePrimitiveTag, aName); + ++myFreePrimitiveTag; } } else if (aShape.ShapeType() == TopAbs_SHELL || aShape.ShapeType() == TopAbs_FACE) { @@ -735,11 +654,11 @@ void Model_BodyBuilder::loadNextLevels(GeomShapePtr theShape, if (Faces.Extent() > 1 || (aShape.ShapeType() == TopAbs_SHELL && Faces.Extent() == 1)) { TopExp_Explorer expl(aShape, TopAbs_FACE); for (; expl.More(); expl.Next()) { - builder(theTag)->Generated(expl.Current()); - TCollection_AsciiString aStr(theTag); - aName = theName + aStr.ToCString(); - buildName(theTag, aName); - theTag++; + builder(myFreePrimitiveTag)->Generated(expl.Current()); + TCollection_AsciiString aStr(myFreePrimitiveTag - PRIMITIVES_START_TAG + 1); + aName = theName + "_" + aStr.ToCString(); + buildName(myFreePrimitiveTag, aName); + ++myFreePrimitiveTag; } } TopTools_IndexedDataMapOfShapeListOfShape anEdgeAndNeighbourFaces; @@ -750,21 +669,21 @@ void Model_BodyBuilder::loadNextLevels(GeomShapePtr theShape, if (aLL.Extent() < 2) { if (BRep_Tool::Degenerated(TopoDS::Edge(anEdgeAndNeighbourFaces.FindKey(i)))) continue; - builder(theTag)->Generated(anEdgeAndNeighbourFaces.FindKey(i)); - TCollection_AsciiString aStr(theTag); - aName = theName + aStr.ToCString(); - buildName(theTag, aName); - theTag++; + builder(myFreePrimitiveTag)->Generated(anEdgeAndNeighbourFaces.FindKey(i)); + TCollection_AsciiString aStr(myFreePrimitiveTag - PRIMITIVES_START_TAG + 1); + aName = theName + "_" + aStr.ToCString(); + buildName(myFreePrimitiveTag, aName); + ++myFreePrimitiveTag; } else { TopTools_ListIteratorOfListOfShape anIter(aLL); const TopoDS_Face& aFace = TopoDS::Face(anIter.Value()); anIter.Next(); if(aFace.IsEqual(anIter.Value())) { - builder(theTag)->Generated(anEdgeAndNeighbourFaces.FindKey(i)); - TCollection_AsciiString aStr(theTag); - aName = theName + aStr.ToCString(); - buildName(theTag, aName); - theTag++; + builder(myFreePrimitiveTag)->Generated(anEdgeAndNeighbourFaces.FindKey(i)); + TCollection_AsciiString aStr(myFreePrimitiveTag - PRIMITIVES_START_TAG + 1); + aName = theName + "_" + aStr.ToCString(); + buildName(myFreePrimitiveTag, aName); + ++myFreePrimitiveTag; } } } @@ -772,40 +691,40 @@ void Model_BodyBuilder::loadNextLevels(GeomShapePtr theShape, TopTools_IndexedMapOfShape Edges; BRepTools::Map3DEdges(aShape, Edges); if (Edges.Extent() == 1) { - builder(theTag++)->Generated(Edges.FindKey(1)); + builder(myFreePrimitiveTag++)->Generated(Edges.FindKey(1)); TopExp_Explorer expl(aShape, TopAbs_VERTEX); for (; expl.More(); expl.Next()) { - builder(theTag)->Generated(expl.Current()); - TCollection_AsciiString aStr(theTag); - aName = theName + aStr.ToCString(); - buildName(theTag, aName); - theTag++; + builder(myFreePrimitiveTag)->Generated(expl.Current()); + TCollection_AsciiString aStr(myFreePrimitiveTag - PRIMITIVES_START_TAG + 1); + aName = theName + "_" + aStr.ToCString(); + buildName(myFreePrimitiveTag, aName); + ++myFreePrimitiveTag; } } else { TopExp_Explorer expl(aShape, TopAbs_EDGE); for (; expl.More(); expl.Next()) { - builder(theTag)->Generated(expl.Current()); - TCollection_AsciiString aStr(theTag); - aName = theName + aStr.ToCString(); - buildName(theTag, aName); - theTag++; + builder(myFreePrimitiveTag)->Generated(expl.Current()); + TCollection_AsciiString aStr(myFreePrimitiveTag - PRIMITIVES_START_TAG + 1); + aName = theName + "_" + aStr.ToCString(); + buildName(myFreePrimitiveTag, aName); + ++myFreePrimitiveTag; } // and load generated vertices. TopTools_DataMapOfShapeShape generated; if (getDangleShapes(aShape, TopAbs_EDGE, generated)) { - TNaming_Builder* pBuilder = builder(theTag++); + TNaming_Builder* pBuilder = builder(myFreePrimitiveTag++); loadGeneratedDangleShapes(aShape, TopAbs_EDGE, pBuilder); } } } else if (aShape.ShapeType() == TopAbs_EDGE) { TopExp_Explorer expl(aShape, TopAbs_VERTEX); for (; expl.More(); expl.Next()) { - builder(theTag)->Generated(expl.Current()); - TCollection_AsciiString aStr(theTag); - aName = theName + aStr.ToCString(); - buildName(theTag, aName); - theTag++; + builder(myFreePrimitiveTag)->Generated(expl.Current()); + TCollection_AsciiString aStr(myFreePrimitiveTag - PRIMITIVES_START_TAG + 1); + aName = theName + "_" + aStr.ToCString(); + buildName(myFreePrimitiveTag, aName); + ++myFreePrimitiveTag; } } } @@ -868,8 +787,7 @@ int findAmbiguities(const TopoDS_Shape& theShapeIn, } //======================================================================= -void Model_BodyBuilder::loadFirstLevel( - GeomShapePtr theShape, const std::string& theName, int& theTag) +void Model_BodyBuilder::loadFirstLevel(GeomShapePtr theShape, const std::string& theName) { if(theShape->isNull()) return; TopoDS_Shape aShape = theShape->impl(); @@ -877,44 +795,42 @@ void Model_BodyBuilder::loadFirstLevel( if (aShape.ShapeType() == TopAbs_COMPOUND || aShape.ShapeType() == TopAbs_COMPSOLID) { TopoDS_Iterator itr(aShape); for (; itr.More(); itr.Next()) { - builder(theTag)->Generated(itr.Value()); - TCollection_AsciiString aStr(theTag); - aName = theName + aStr.ToCString(); - buildName(theTag, aName); - if(!theName.empty()) buildName(theTag, aName); - theTag++; + builder(myFreePrimitiveTag)->Generated(itr.Value()); + TCollection_AsciiString aStr(myFreePrimitiveTag - PRIMITIVES_START_TAG + 1); + aName = theName + "_" + aStr.ToCString(); + buildName(myFreePrimitiveTag, aName); + ++myFreePrimitiveTag; if (itr.Value().ShapeType() == TopAbs_COMPOUND || itr.Value().ShapeType() == TopAbs_COMPSOLID) { GeomShapePtr itrShape(new GeomAPI_Shape()); itrShape->setImpl(new TopoDS_Shape(itr.Value())); - loadFirstLevel(itrShape, theName, theTag); + loadFirstLevel(itrShape, theName); } else { GeomShapePtr itrShape(new GeomAPI_Shape()); itrShape->setImpl(new TopoDS_Shape(itr.Value())); - loadNextLevels(itrShape, theName, theTag); + loadNextLevels(itrShape, theName); } } } else { GeomShapePtr itrShape(new GeomAPI_Shape()); itrShape->setImpl(new TopoDS_Shape(aShape)); - loadNextLevels(itrShape, theName, theTag); + loadNextLevels(itrShape, theName); } TopTools_ListOfShape aList; if(findAmbiguities(aShape, aList)) { TopTools_ListIteratorOfListOfShape it(aList); - for (; it.More(); it.Next(),theTag++) { - builder(theTag)->Generated(it.Value()); - TCollection_AsciiString aStr(theTag); - aName = theName + aStr.ToCString(); - buildName(theTag, aName); + for (; it.More(); it.Next(), ++myFreePrimitiveTag) { + builder(myFreePrimitiveTag)->Generated(it.Value()); + TCollection_AsciiString aStr(myFreePrimitiveTag - PRIMITIVES_START_TAG + 1); + aName = theName + "_" + aStr.ToCString(); + buildName(myFreePrimitiveTag, aName); } } } //======================================================================= -void Model_BodyBuilder::loadDisconnectedEdges( - GeomShapePtr theShape, const std::string& theName, int& theTag) +void Model_BodyBuilder::loadDisconnectedEdges(GeomShapePtr theShape, const std::string& theName) { if(theShape->isNull()) return; TopoDS_Shape aShape = theShape->impl(); @@ -963,12 +879,12 @@ void Model_BodyBuilder::loadDisconnectedEdges( if (aLIter1.Value().IsSame(aLIter2.Value())) aMatches++; if (aMatches == aList1.Extent()) { aC0=Standard_True; - builder(theTag)->Generated(anEdge2); + builder(myFreePrimitiveTag)->Generated(anEdge2); anEdgesToDelete.Add(anEdge2); - TCollection_AsciiString aStr(theTag); - aName = theName + aStr.ToCString(); - buildName(theTag, aName); - theTag++; + TCollection_AsciiString aStr(myFreePrimitiveTag - PRIMITIVES_START_TAG + 1); + aName = theName + "_" + aStr.ToCString(); + buildName(myFreePrimitiveTag, aName); + ++myFreePrimitiveTag; } } } @@ -978,17 +894,17 @@ void Model_BodyBuilder::loadDisconnectedEdges( edgeNaborFaces.UnBind(anEdge1); } if (aC0) { - builder(theTag)->Generated(anEdge1); - TCollection_AsciiString aStr(theTag); - aName = theName + aStr.ToCString(); - buildName(theTag, aName); - theTag++; + builder(myFreePrimitiveTag)->Generated(anEdge1); + TCollection_AsciiString aStr(myFreePrimitiveTag - PRIMITIVES_START_TAG + 1); + aName = theName + "_" + aStr.ToCString(); + buildName(myFreePrimitiveTag, aName); + ++myFreePrimitiveTag; } } } void Model_BodyBuilder::loadDisconnectedVertexes(GeomShapePtr theShape, - const std::string& theName, int& theTag) + const std::string& theName) { if(theShape->isNull()) return; TopoDS_Shape aShape = theShape->impl(); @@ -1019,11 +935,11 @@ void Model_BodyBuilder::loadDisconnectedVertexes(GeomShapePtr theShape, for (; itr.More(); itr.Next()) { const TopTools_ListOfShape& naborEdges = itr.Value(); if (naborEdges.Extent() < 2) { - builder(theTag)->Generated(itr.Key()); - TCollection_AsciiString aStr(theTag); - aName = theName + aStr.ToCString(); - buildName(theTag, aName); - theTag++; + builder(myFreePrimitiveTag)->Generated(itr.Key()); + TCollection_AsciiString aStr(myFreePrimitiveTag - PRIMITIVES_START_TAG + 1); + aName = theName + "_" + aStr.ToCString(); + buildName(myFreePrimitiveTag, aName); + ++myFreePrimitiveTag; } } }