diff --git a/src/BOPAlgo/BOPAlgo_BuilderFace.cxx b/src/BOPAlgo/BOPAlgo_BuilderFace.cxx index 19885937d7..0f3492ed00 100644 --- a/src/BOPAlgo/BOPAlgo_BuilderFace.cxx +++ b/src/BOPAlgo/BOPAlgo_BuilderFace.cxx @@ -434,6 +434,7 @@ void BOPAlgo_BuilderFace::PerformLoops() }//for (; aIt.More(); aIt.Next()) { }//for (; aItE.More(); aItE.Next()) { }//for (; aItW.More(); aItW.Next()) { + aW.Closed(BRep_Tool::IsClosed(aW)); myLoopsInternal.Append(aW); }//for (i = 1; (i <= aNbEA) && bFlag; ++i) { } @@ -804,6 +805,7 @@ void MakeInternalWires(const BOPCol_IndexedMapOfShape& theME, } } } + aW.Closed(BRep_Tool::IsClosed(aW)); theWires.Append(aW); } } diff --git a/src/BOPAlgo/BOPAlgo_Builder_1.cxx b/src/BOPAlgo/BOPAlgo_Builder_1.cxx index bc7716ed81..0801e1a7e9 100644 --- a/src/BOPAlgo/BOPAlgo_Builder_1.cxx +++ b/src/BOPAlgo/BOPAlgo_Builder_1.cxx @@ -28,6 +28,7 @@ #include <BOPDS_VectorOfListOfPaveBlock.hxx> #include <BOPTools_AlgoTools.hxx> #include <BRep_Builder.hxx> +#include <BRep_Tool.hxx> #include <IntTools_Context.hxx> #include <TopAbs_ShapeEnum.hxx> #include <TopoDS_Iterator.hxx> @@ -239,6 +240,8 @@ } } // + aCIm.Closed(BRep_Tool::IsClosed(aCIm)); + // BOPCol_ListOfShape aLSIm(myAllocator); aLSIm.Append(aCIm); myImages.Bind(theS, aLSIm); diff --git a/src/BOPAlgo/BOPAlgo_WireSplitter.lxx b/src/BOPAlgo/BOPAlgo_WireSplitter.lxx index 01fa726fb8..d3481e7619 100644 --- a/src/BOPAlgo/BOPAlgo_WireSplitter.lxx +++ b/src/BOPAlgo/BOPAlgo_WireSplitter.lxx @@ -13,6 +13,7 @@ // commercial license or contractual agreement. #include <BRep_Builder.hxx> +#include <BRep_Tool.hxx> #include <TopoDS_Edge.hxx> @@ -85,7 +86,7 @@ typedef NCollection_IndexedDataMap<TopoDS_Shape, \ //purpose : //======================================================================= inline void BOPAlgo_WireSplitter::MakeWire(BOPCol_ListOfShape& aLE, - TopoDS_Wire& aWire) + TopoDS_Wire& aWire) { BRep_Builder aBB; aBB.MakeWire(aWire); @@ -94,4 +95,5 @@ typedef NCollection_IndexedDataMap<TopoDS_Shape, \ for (; aIt.More(); aIt.Next()){ aBB.Add(aWire, aIt.Value()); } + aWire.Closed(BRep_Tool::IsClosed(aWire)); } diff --git a/tests/bugs/modalg_6/bug26420_1 b/tests/bugs/modalg_6/bug26420_1 new file mode 100644 index 0000000000..07c44da656 --- /dev/null +++ b/tests/bugs/modalg_6/bug26420_1 @@ -0,0 +1,21 @@ +puts "========" +puts "OCC26420" +puts "========" +puts "" +###################################################### +# BOPAlgo_Builder resets "Closed" flag in the result +###################################################### + +polyline pp 0 4 0 7 4 0 7 6 0 0 6 0 0 4 0 +vertex v0 5 4 0 +vertex v1 4 6 0 +bclearobjects +bcleartools +baddobjects v0 v1 pp +bfillds +bbuild r +explode r w +set bug_info [whatis r_1] +if {[lindex $bug_info 8] != "Closed"} { + puts "ERROR: OCC26420 is reproduced. Flag CLOSED is not set." +} diff --git a/tests/bugs/modalg_6/bug26420_2 b/tests/bugs/modalg_6/bug26420_2 new file mode 100644 index 0000000000..dda0d805ad --- /dev/null +++ b/tests/bugs/modalg_6/bug26420_2 @@ -0,0 +1,22 @@ +puts "========" +puts "OCC26420" +puts "========" +puts "" +###################################################### +# BOPAlgo_Builder resets "Closed" flag in the result +###################################################### + +polyline pp 0 4 0 7 4 0 7 6 0 0 6 0 0 4 0 +mkplane ff pp +vertex v0 5 4 0 +vertex v1 4 6 0 +bclearobjects +bcleartools +baddobjects v0 v1 ff +bfillds +bbuild r +explode r w +set bug_info [whatis r_1] +if {[lindex $bug_info 8] != "Closed"} { + puts "ERROR: OCC26420 is reproduced. Flag CLOSED is not set." +} diff --git a/tests/bugs/modalg_6/bug26420_3 b/tests/bugs/modalg_6/bug26420_3 new file mode 100644 index 0000000000..5c06f269e7 --- /dev/null +++ b/tests/bugs/modalg_6/bug26420_3 @@ -0,0 +1,20 @@ +puts "========" +puts "OCC26420" +puts "========" +puts "" +###################################################### +# BOPAlgo_Builder resets "Closed" flag in the result +###################################################### + +box bb 0 0 0 5 5 5 +explode bb sh +polyline pp -1 -1 2 -1 6 2 6 6 2 6 -1 2 -1 -1 2 +mkplane pl pp +baddobjects pl bb_1 +bfillds +bbuild r +explode r sh +set bug_info [whatis r_1] +if {[lindex $bug_info 8] != "Closed"} { + puts "ERROR: OCC26420 is reproduced. Flag CLOSED is not set." +}