From 061cd2d84141b86c05cadd6a4195a65b6ec69e12 Mon Sep 17 00:00:00 2001 From: nbv Date: Thu, 15 Nov 2018 12:00:58 +0300 Subject: [PATCH] 0029149: BRepMesh produces invalid mesh on the bound of adjacent faces 1. Test case for the issue has been created. The issue is fixed by the patch #26106. 2. Since now, "tricheck" command uses edge tolerance instead of edge deflection to check cross-face-errors (set of nodes of the edge on 1st face must be equal to set of nodes of the same edge on 2nd face). --- src/MeshTest/MeshTest_CheckTopology.cxx | 2 +- tests/bugs/mesh/bug29149 | 36 +++++++++++++++++++++++++ tests/mesh/data/advanced/B2 | 2 ++ tests/mesh/data/advanced/B3 | 2 ++ tests/mesh/data/advanced/B7 | 2 ++ tests/mesh/data/standard/C9 | 2 ++ tests/mesh/data/standard/H5 | 4 +-- tests/mesh/data/standard/V9 | 2 ++ tests/mesh/data/standard/W2 | 4 +-- tests/mesh/data/standard/X1 | 2 ++ 10 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 tests/bugs/mesh/bug29149 diff --git a/src/MeshTest/MeshTest_CheckTopology.cxx b/src/MeshTest/MeshTest_CheckTopology.cxx index 22979af620..732f7b4f4d 100644 --- a/src/MeshTest/MeshTest_CheckTopology.cxx +++ b/src/MeshTest/MeshTest_CheckTopology.cxx @@ -110,7 +110,7 @@ void MeshTest_CheckTopology::Perform (Draw_Interpretor& di) } // check distances between corresponding points - Standard_Real aSqDefle = Max(aT1->Deflection(), aT2->Deflection()); + Standard_Real aSqDefle = BRep_Tool::Tolerance(aEdge); aSqDefle *= aSqDefle; const TColgp_Array1OfPnt& aPoints1 = aT1->Nodes(); const TColgp_Array1OfPnt& aPoints2 = aT2->Nodes(); diff --git a/tests/bugs/mesh/bug29149 b/tests/bugs/mesh/bug29149 new file mode 100644 index 0000000000..9ceba0b443 --- /dev/null +++ b/tests/bugs/mesh/bug29149 @@ -0,0 +1,36 @@ +puts "=======" +puts "0029149: BRepMesh produces invalid mesh on the bound of adjacent faces" +puts "=======" +puts "" + +restore [locate_data_file bug29149.brep] result +tclean result +incmesh result 0.1 + +checktrinfo result -tri 7998 -nod 4931 -defl 1.2277233425620309 + +# Reduce shape tolerance in order to hard check of mesh quality +settolerance result 1.0e-7 + +if { [llength [tricheck result] ] != 0 } { + puts "Error : Invalid mesh" +} else { + puts "Mesh is OK" +} + +smallview +isos result 0 +triangles result + +point p1 288.65908971200806 148.1268376105981 -99.370459908186973 +point p2 288.66203942568802 148.1262245331892 -99.373827710063281 +point p3 288.66358529587593 148.129348718649 -99.365721723137995 +don p1 p2 p3 +fit + +don result +checkview -screenshot -2d -path ${imagedir}/${test_image}_zoom.png + +fit +checkview -screenshot -2d -path ${imagedir}/${test_image}_nozoom.png + diff --git a/tests/mesh/data/advanced/B2 b/tests/mesh/data/advanced/B2 index be2bc44f76..492172e731 100755 --- a/tests/mesh/data/advanced/B2 +++ b/tests/mesh/data/advanced/B2 @@ -1,5 +1,7 @@ set TheFileName OCC22145.stp set bug_freenodes "OCC22687" +set bug_cross "OCC22687" +set nbcross(ALL) 8 if { [string compare $command "shading"] == 0 } { set nbfreenodes(ALL) 4 } else { diff --git a/tests/mesh/data/advanced/B3 b/tests/mesh/data/advanced/B3 index be2bc44f76..492172e731 100755 --- a/tests/mesh/data/advanced/B3 +++ b/tests/mesh/data/advanced/B3 @@ -1,5 +1,7 @@ set TheFileName OCC22145.stp set bug_freenodes "OCC22687" +set bug_cross "OCC22687" +set nbcross(ALL) 8 if { [string compare $command "shading"] == 0 } { set nbfreenodes(ALL) 4 } else { diff --git a/tests/mesh/data/advanced/B7 b/tests/mesh/data/advanced/B7 index 1761394b49..6d821b3e3f 100755 --- a/tests/mesh/data/advanced/B7 +++ b/tests/mesh/data/advanced/B7 @@ -1,6 +1,8 @@ set TheFileName OCC22302.brep set bug_freenodes "OCC22687" set bug_area "OCC22687" +set bug_cross "OCC22687" +set nbcross(ALL) 8 if { [string compare $command "shading"] == 0 } { set nbfreenodes(ALL) 4 } else { diff --git a/tests/mesh/data/standard/C9 b/tests/mesh/data/standard/C9 index f3143fd445..d2f8a2800d 100755 --- a/tests/mesh/data/standard/C9 +++ b/tests/mesh/data/standard/C9 @@ -6,4 +6,6 @@ set TheFileName shading_027.brep ###set bug_withouttri "OCC23106" ###set nbwithouttri(All) 1 set bug_freenodes "OCC23105" +set bug_cross "OCC23105" set nbfreenodes(All) 2 +set nbcross(ALL) 1 \ No newline at end of file diff --git a/tests/mesh/data/standard/H5 b/tests/mesh/data/standard/H5 index c5efa8042a..9cf10d0060 100755 --- a/tests/mesh/data/standard/H5 +++ b/tests/mesh/data/standard/H5 @@ -1,3 +1,3 @@ set TheFileName shading_068.brep -###set bug_cross "OCC22687" -###set nbcross(ALL) 1 +set bug_cross "OCC22687" +set nbcross(ALL) 2 diff --git a/tests/mesh/data/standard/V9 b/tests/mesh/data/standard/V9 index b01ab65c69..3969ab681b 100755 --- a/tests/mesh/data/standard/V9 +++ b/tests/mesh/data/standard/V9 @@ -1 +1,3 @@ set TheFileName shading_wrongshape_020.brep +set bug_cross "OCC22687" +set nbcross(ALL) 2 diff --git a/tests/mesh/data/standard/W2 b/tests/mesh/data/standard/W2 index cd22753840..55c15486af 100755 --- a/tests/mesh/data/standard/W2 +++ b/tests/mesh/data/standard/W2 @@ -1,6 +1,6 @@ set TheFileName shading_wrongshape_022.brep +set bug_cross "OCC22687" +set nbcross(All) 2 if { [string compare $command "shading"] != 0 } { -#set bug_cross "OCC22687" -#set nbcross(All) 2 } \ No newline at end of file diff --git a/tests/mesh/data/standard/X1 b/tests/mesh/data/standard/X1 index 3529a83cd3..2c66fdf882 100755 --- a/tests/mesh/data/standard/X1 +++ b/tests/mesh/data/standard/X1 @@ -3,6 +3,8 @@ set TheFileName shading_wrongshape_030.brep ###set rel_tol 6 ###set bug_withouttri "OCC22687" ###set nbwithouttri(All) 4 +set bug_cross "OCC22687" +set nbcross(All) 4 if { [string compare $command "shading"] == 0 } { set rel_tol 0.5456843734442471 } else { -- 2.20.1