diff --git a/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx b/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx index f48c390f0f..73adb6eb41 100644 --- a/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx +++ b/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx @@ -2070,8 +2070,22 @@ Standard_Boolean ShapeUpgrade_UnifySameDomain::MergeSubSeq(const TopTools_Sequen TopoDS_Vertex V[2]; V[0] = sae.FirstVertex(FE); V[1] = sae.LastVertex(TopoDS::Edge(theChain.Last())); + Standard_Boolean isClosed = V[0].IsSame(V[1]); + if (!isClosed) + { + // additionally check the points for equality to make a final decision about closedness of the result curve + gp_Pnt aP0 = BRep_Tool::Pnt(V[0]); + gp_Pnt aP1 = BRep_Tool::Pnt(V[1]); + Standard_Real aTol = Max(BRep_Tool::Tolerance(V[0]), BRep_Tool::Tolerance(V[1])); + if (aP0.SquareDistance(aP1) < aTol * aTol) + { + isClosed = Standard_True; + V[1] = V[0]; + V[1].Reverse(); + } + } TopoDS_Edge E; - if (V[0].IsSame(V[1])) { + if (isClosed) { // closed chain BRepAdaptor_Curve adef(FE); Handle(Geom_Circle) Cir1; diff --git a/tests/bugs/heal/bug33028 b/tests/bugs/heal/bug33028 new file mode 100644 index 0000000000..4650b331ae --- /dev/null +++ b/tests/bugs/heal/bug33028 @@ -0,0 +1,36 @@ +puts "========================" +puts " OCC33028: Standard_ConstructionError while using ShapeUpgrade_UnifySameDomain" +puts "========================" +puts "" + +stepread [locate_data_file bug33028_kalip.stp] s * + +set nbsBefore " +Number of shapes in shape + VERTEX : 543 + EDGE : 819 + WIRE : 359 + FACE : 289 + SHELL : 2 + SOLID : 2 + COMPSOLID : 0 + COMPOUND : 1 + SHAPE : 2015 +" +checknbshapes s_1 -ref ${nbsBefore} -t -m "result before attempt to simplify the model" + +unifysamedom result s_1 + +set nbsAfter " +Number of shapes in shape + VERTEX : 515 + EDGE : 805 + WIRE : 359 + FACE : 289 + SHELL : 2 + SOLID : 2 + COMPSOLID : 0 + COMPOUND : 1 + SHAPE : 1973 +" +checknbshapes result -ref ${nbsAfter} -t -m "result after attempt to simplify the model"