From d3dadd23926fdb077e6b948e1d4ca74ba94f6ce5 Mon Sep 17 00:00:00 2001 From: msv Date: Thu, 9 Feb 2017 15:44:06 +0300 Subject: [PATCH] 0027894: Crash when calling ShapeUpgrade_UnifySameDomain - Avoid getting pcurve of edge on not connected face. - Avoid building wire of empty set of edges. Small correction of test case for issue CR27894 --- src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx | 4 +++- tests/bugs/heal/bug27894 | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 tests/bugs/heal/bug27894 diff --git a/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx b/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx index d28f0aaa8d..adb252ff42 100644 --- a/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx +++ b/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx @@ -1374,7 +1374,7 @@ void ShapeUpgrade_UnifySameDomain::IntUnifyFaces(const TopoDS_Shape& theInpShape if (IsSameDomain(aFace,anCheckedFace, myLinTol, myAngTol)) { // hotfix for 27271: prevent merging along periodic direction. - if (IsLikeSeam(edge, aFace, aBaseSurface)) + if (IsLikeSeam(edge, anCheckedFace, aBaseSurface)) continue; // replacing pcurves @@ -1574,6 +1574,8 @@ void ShapeUpgrade_UnifySameDomain::IntUnifyFaces(const TopoDS_Shape& theInpShape } sawo.Add(c2d->Value(f).XY(),c2d->Value(l).XY()); } + if (sawo.NbEdges() == 0) + continue; sawo.Perform(); // constructind one degenerative edge diff --git a/tests/bugs/heal/bug27894 b/tests/bugs/heal/bug27894 new file mode 100644 index 0000000000..a2064ba7b7 --- /dev/null +++ b/tests/bugs/heal/bug27894 @@ -0,0 +1,15 @@ +puts "============" +puts "OCC27894" +puts "============" +puts "" +############################### +## Crash when calling ShapeUpgrade_UnifySameDomain +############################### + +stepread [locate_data_file bug27894_usd_raises_Standard_NullObject.stp] a * +renamevar a_1 a +unifysamedom result a + +checknbshapes result -m UnifySameDomain -face 18 -edge 45 + +checkview -display result -2d -path ${imagedir}/${test_image}.png