From 2d97f27d48c1aa46bf95f9c39f71848eeccec3e4 Mon Sep 17 00:00:00 2001 From: szy Date: Thu, 25 Dec 2014 12:08:53 +0300 Subject: [PATCH] Topological names management. Patch to correct OCCT bugs. --- src/Model/Model_ResultBody.cpp | 41 +++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/src/Model/Model_ResultBody.cpp b/src/Model/Model_ResultBody.cpp index c958e6239..9f1afcdee 100644 --- a/src/Model/Model_ResultBody.cpp +++ b/src/Model/Model_ResultBody.cpp @@ -321,11 +321,13 @@ void Model_ResultBody::loadNextLevels(std::shared_ptr theShape, std::string aName; if (aShape.ShapeType() == TopAbs_SOLID) { TopExp_Explorer expl(aShape, TopAbs_FACE); - for (; expl.More(); expl.Next()) - builder(++theTag)->Generated(expl.Current()); + for (; expl.More(); expl.Next()) { + builder(theTag)->Generated(expl.Current()); TCollection_AsciiString aStr(theTag); aName = theName + aStr.ToCString(); buildName(theTag, aName); + theTag++; + } } else if (aShape.ShapeType() == TopAbs_SHELL || aShape.ShapeType() == TopAbs_FACE) { // load faces and all the free edges @@ -334,10 +336,11 @@ void Model_ResultBody::loadNextLevels(std::shared_ptr 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()); + builder(theTag)->Generated(expl.Current()); TCollection_AsciiString aStr(theTag); aName = theName + aStr.ToCString(); buildName(theTag, aName); + theTag++; } } TopTools_IndexedDataMapOfShapeListOfShape anEdgeAndNeighbourFaces; @@ -346,19 +349,21 @@ void Model_ResultBody::loadNextLevels(std::shared_ptr theShape, { const TopTools_ListOfShape& aLL = anEdgeAndNeighbourFaces.FindFromIndex(i); if (aLL.Extent() < 2) { - builder(++theTag)->Generated(anEdgeAndNeighbourFaces.FindKey(i)); + builder(theTag)->Generated(anEdgeAndNeighbourFaces.FindKey(i)); TCollection_AsciiString aStr(theTag); aName = theName + aStr.ToCString(); buildName(theTag, aName); + theTag++; } 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)); + builder(theTag)->Generated(anEdgeAndNeighbourFaces.FindKey(i)); TCollection_AsciiString aStr(theTag); aName = theName + aStr.ToCString(); buildName(theTag, aName); + theTag++; } } } @@ -369,34 +374,37 @@ void Model_ResultBody::loadNextLevels(std::shared_ptr theShape, builder(++theTag)->Generated(Edges.FindKey(1)); TopExp_Explorer expl(aShape, TopAbs_VERTEX); for (; expl.More(); expl.Next()) { - builder(++theTag)->Generated(expl.Current()); + builder(theTag)->Generated(expl.Current()); TCollection_AsciiString aStr(theTag); aName = theName + aStr.ToCString(); buildName(theTag, aName); + theTag++; } } else { TopExp_Explorer expl(aShape, TopAbs_EDGE); for (; expl.More(); expl.Next()) { - builder(++theTag)->Generated(expl.Current()); + builder(theTag)->Generated(expl.Current()); TCollection_AsciiString aStr(theTag); aName = theName + aStr.ToCString(); buildName(theTag, aName); + theTag++; } // and load generated vertices. TopTools_DataMapOfShapeShape generated; if (getDangleShapes(aShape, TopAbs_EDGE, generated)) { - TNaming_Builder* pBuilder = builder(++theTag); + TNaming_Builder* pBuilder = builder(theTag++); 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()); + builder(theTag)->Generated(expl.Current()); TCollection_AsciiString aStr(theTag); aName = theName + aStr.ToCString(); buildName(theTag, aName); + theTag++; } } } @@ -409,8 +417,8 @@ void Model_ResultBody::loadFirstLevel( std::string aName; if (aShape.ShapeType() == TopAbs_COMPOUND || aShape.ShapeType() == TopAbs_COMPSOLID) { TopoDS_Iterator itr(aShape); - for (; itr.More(); itr.Next()) { - builder(++theTag)->Generated(itr.Value()); + for (; itr.More(); itr.Next(),theTag++) { + builder(theTag)->Generated(itr.Value()); TCollection_AsciiString aStr(theTag); aName = theName + aStr.ToCString(); buildName(theTag, aName); @@ -485,11 +493,12 @@ void Model_ResultBody::loadDisconnectedEdges( if (aLIter1.Value().IsSame(aLIter2.Value())) aMatches++; if (aMatches == aList1.Extent()) { aC0=Standard_True; - builder(++theTag)->Generated(anEdge2); + builder(theTag)->Generated(anEdge2); anEdgesToDelete.Add(anEdge2); TCollection_AsciiString aStr(theTag); aName = theName + aStr.ToCString(); buildName(theTag, aName); + theTag++; } } } @@ -499,10 +508,11 @@ void Model_ResultBody::loadDisconnectedEdges( edgeNaborFaces.UnBind(anEdge1); } if (aC0) { - builder(++theTag)->Generated(anEdge1); + builder(theTag)->Generated(anEdge1); TCollection_AsciiString aStr(theTag); aName = theName + aStr.ToCString(); buildName(theTag, aName); + theTag++; } } } @@ -537,11 +547,12 @@ void Model_ResultBody::loadDisconnectedVertexes(std::shared_ptr t TopTools_DataMapIteratorOfDataMapOfShapeListOfShape itr(vertexNaborFaces); for (; itr.More(); itr.Next()) { const TopTools_ListOfShape& naborFaces = itr.Value(); - if (naborFaces.Extent() < 3) { - builder(++theTag)->Generated(itr.Key()); + if (naborFaces.Extent() < 1) { + builder(theTag)->Generated(itr.Key()); TCollection_AsciiString aStr(theTag); aName = theName + aStr.ToCString(); buildName(theTag, aName); + theTag++; } } } \ No newline at end of file -- 2.39.2