From cb120537bf404a678648e039c3c013e1d26ab68b Mon Sep 17 00:00:00 2001 From: msv Date: Fri, 25 Mar 2016 19:19:35 +0300 Subject: [PATCH] 0027309: Result of UnifySameDomain has InvalidMultiConnexity error The update of the set of boundary edges has been added for the case when faces containing milti-connected edges are excluded from merging. Update test cases for unifysamedom to generate snapshots. --- .../ShapeUpgrade_UnifySameDomain.cxx | 19 ++++++++++++++++++- tests/bugs/modalg_6/bug27082_1 | 2 ++ tests/bugs/modalg_6/bug27082_1i | 2 ++ tests/bugs/modalg_6/bug27082_2 | 2 ++ tests/bugs/modalg_6/bug27082_2i | 2 ++ tests/bugs/modalg_6/bug27082_3 | 2 ++ tests/bugs/modalg_6/bug27082_3i | 2 ++ tests/bugs/modalg_6/bug27309 | 17 +++++++++++++++++ 8 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 tests/bugs/modalg_6/bug27309 diff --git a/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx b/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx index 718189492a..6189e4c9db 100644 --- a/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx +++ b/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx @@ -1208,8 +1208,25 @@ void ShapeUpgrade_UnifySameDomain::UnifyFaces() anAvoidFaces.Add(aLF.Last()); } for (i = 1; i <= faces.Length(); ) { - if (anAvoidFaces.Contains(faces(i))) + if (anAvoidFaces.Contains(faces(i))) { + // update the boundaries of merged area, for that + // remove from 'edges' the edges of this face and add to 'edges' + // the edges of this face that were not present in 'edges' before + TopExp_Explorer ex(faces(i), TopAbs_EDGE); + for (; ex.More(); ex.Next()) { + TopoDS_Shape aE = ex.Current(); + Standard_Integer j; + for (j = 1; j <= edges.Length(); j++) { + if (edges(j).IsSame(aE)) + break; + } + if (j <= edges.Length()) + edges.Remove(j); + else + edges.Append(aE); + } faces.Remove(i); + } else i++; } diff --git a/tests/bugs/modalg_6/bug27082_1 b/tests/bugs/modalg_6/bug27082_1 index a58a1a23ac..6181fcffc4 100644 --- a/tests/bugs/modalg_6/bug27082_1 +++ b/tests/bugs/modalg_6/bug27082_1 @@ -16,3 +16,5 @@ don result smallview; l; fit bopcheck result checknbshapes result -m UnifySameDomain -face 22 -edge 40 + +checkview -screenshot -2d -path ${imagedir}/${test_image}.png diff --git a/tests/bugs/modalg_6/bug27082_1i b/tests/bugs/modalg_6/bug27082_1i index 0a0ff3b888..1633beb636 100644 --- a/tests/bugs/modalg_6/bug27082_1i +++ b/tests/bugs/modalg_6/bug27082_1i @@ -16,3 +16,5 @@ don result smallview; l; fit bopcheck result checknbshapes result -m UnifySameDomain -face 14 -edge 28 + +checkview -screenshot -2d -path ${imagedir}/${test_image}.png diff --git a/tests/bugs/modalg_6/bug27082_2 b/tests/bugs/modalg_6/bug27082_2 index cbe7bc5d5a..359282c885 100644 --- a/tests/bugs/modalg_6/bug27082_2 +++ b/tests/bugs/modalg_6/bug27082_2 @@ -15,3 +15,5 @@ don result smallview; l; fit bopcheck result checknbshapes result -m UnifySameDomain -face 37 -edge 94 + +checkview -screenshot -2d -path ${imagedir}/${test_image}.png diff --git a/tests/bugs/modalg_6/bug27082_2i b/tests/bugs/modalg_6/bug27082_2i index 82ee825b22..0ded3c135d 100644 --- a/tests/bugs/modalg_6/bug27082_2i +++ b/tests/bugs/modalg_6/bug27082_2i @@ -15,3 +15,5 @@ don result smallview; l; fit bopcheck result checknbshapes result -m UnifySameDomain -face 33 -edge 86 + +checkview -screenshot -2d -path ${imagedir}/${test_image}.png diff --git a/tests/bugs/modalg_6/bug27082_3 b/tests/bugs/modalg_6/bug27082_3 index 4728c05a2e..dcdf7653b0 100644 --- a/tests/bugs/modalg_6/bug27082_3 +++ b/tests/bugs/modalg_6/bug27082_3 @@ -13,3 +13,5 @@ don result smallview; l; fit bopcheck result checknbshapes result -m UnifySameDomain -face 249 -edge 600 + +checkview -screenshot -2d -path ${imagedir}/${test_image}.png diff --git a/tests/bugs/modalg_6/bug27082_3i b/tests/bugs/modalg_6/bug27082_3i index 49d91b0e32..a48b0bb422 100644 --- a/tests/bugs/modalg_6/bug27082_3i +++ b/tests/bugs/modalg_6/bug27082_3i @@ -13,3 +13,5 @@ don result smallview; l; fit bopcheck result checknbshapes result -m UnifySameDomain -face 225 -edge 576 + +checkview -screenshot -2d -path ${imagedir}/${test_image}.png diff --git a/tests/bugs/modalg_6/bug27309 b/tests/bugs/modalg_6/bug27309 new file mode 100644 index 0000000000..aa3a0abc28 --- /dev/null +++ b/tests/bugs/modalg_6/bug27309 @@ -0,0 +1,17 @@ +puts "============" +puts "OCC27309" +puts "============" +puts "" +############################### +## Result of UnifySameDomain has InvalidMultiConnexity error +############################### + +restore [locate_data_file bug27309_shape.brep] a +unifysamedom result a + +don result +smallview; l; fit +checkshape result +checknbshapes result -m UnifySameDomain -face 28 -edge 66 + +checkview -screenshot -2d -path ${imagedir}/${test_image}.png -- 2.20.1