]> OCCT Git - occt.git/commitdiff
0031865: Mesh - triangulation fails with large deflection values due to unhandled...
authoroan <oan@opencascade.com>
Mon, 21 Nov 2022 17:04:09 +0000 (20:04 +0300)
committervglukhik <vglukhik@opencascade.com>
Fri, 17 Mar 2023 23:04:05 +0000 (23:04 +0000)
Define minimum number of points for specific types of curves like it was done for circular edges.

18 files changed:
src/BRepMesh/BRepMesh_CurveTessellator.cxx
tests/bugs/mesh/bug27845
tests/bugs/mesh/bug31449_1
tests/bugs/mesh/bug31449_3
tests/bugs/mesh/bug31865 [new file with mode: 0644]
tests/bugs/modalg_2/bug264_6
tests/bugs/modalg_2/bug264_7
tests/de_mesh/shape_write_stl/A8
tests/hlr/poly_hlr/A3
tests/hlr/poly_hlr/C13
tests/hlr/poly_hlr/C15
tests/hlr/poly_hlr/C20
tests/hlr/poly_hlr/C23
tests/hlr/poly_hlr/C24
tests/hlr/poly_hlr/C3
tests/hlr/poly_hlr/C6
tests/hlr/poly_hlr/C8
tests/hlr/poly_hlr/bug27979_2

index 3779a5242569d903a4a379d4714fcdb8d1fe40e0..c8e942ec3a686f217139febcdfd93c40d0c5fa88 100644 (file)
@@ -101,9 +101,21 @@ void BRepMesh_CurveTessellator::init()
   myEdgeSqTol  = BRep_Tool::Tolerance (myEdge);
   myEdgeSqTol *= myEdgeSqTol;
 
-  const Standard_Integer aMinPntNb = Max(myMinPointsNb,
-    (myCurve.GetType() == GeomAbs_Circle) ? 4 : 2); //OCC287
+  Standard_Integer aMinPntThreshold = 2;
+  switch (myCurve.GetType())
+  {
+    case GeomAbs_Circle:
+    case GeomAbs_Ellipse:
+    case GeomAbs_Parabola:
+    case GeomAbs_Hyperbola:
+      aMinPntThreshold = 4;
+      break;
+
+    default:
+      break;
+  }
 
+  const Standard_Integer aMinPntNb = Max (myMinPointsNb, aMinPntThreshold); //OCC287
   myDiscretTool.Initialize (myCurve,
                             myCurve.FirstParameter(), myCurve.LastParameter(),
                             aPreciseAngDef, aPreciseLinDef, aMinPntNb,
index 62877019238bab4171e426918902ef3a5f31748f..c9a337f75bfcdec4d50310afd121533d993e1fca 100644 (file)
@@ -14,7 +14,7 @@ vdisplay result
 vfit 
 checkview -screenshot -3d -path ${imagedir}/${test_image}.png
 
-checktrinfo result -tri 3828 -nod 4771 -defl 3.0544822246414993 -tol_abs_defl 1e-6
+checktrinfo result -tri 3834 -nod 4777 -defl 3.0544822246414993 -tol_abs_defl 1e-6
 
 set log [tricheck result]
 if { [llength $log] != 0 } {
index f117e4a33c3ed5814f9983cb74d09e05aeafe583..05032627a6526e628974d9677047703e91e3373c 100644 (file)
@@ -15,6 +15,6 @@ vfit
 vsetdispmode 1
 
 XGetOneShape result Q
-checktrinfo result -tri 9025 -nod 6562
+checktrinfo result -tri 9097 -nod 6634
 
 checkview -screenshot -3d -path ${imagedir}/${test_image}.png
index f77c0646c0ff23290abc8856cf17a0391acdda31..b7dc0cdc229f12edd18570cc8b43bbfd1ac1e9d1 100644 (file)
@@ -14,6 +14,6 @@ XGetOneShape result Q
 
 incmesh result 0.00039624 -a 20 -min 0.0001 -parallel
 
-checktrinfo result -tri 7661 -nod 5810
+checktrinfo result -tri 7733 -nod 5882
 
 checkview -display result -3d -path ${imagedir}/${test_image}.png
diff --git a/tests/bugs/mesh/bug31865 b/tests/bugs/mesh/bug31865
new file mode 100644 (file)
index 0000000..e9477fd
--- /dev/null
@@ -0,0 +1,20 @@
+puts "========"
+puts "0031865: Mesh - triangulation fails with large deflection values due to unhandled Standard_OutOfRange, BRepMesh_PairOfIndex::Append()"
+puts "========"
+puts ""
+
+restore [locate_data_file bug31865.brep] result
+
+tclean result
+incmesh result 0.2
+
+vinit
+vdefaults -autoTriang 0
+checkview -display result -3d -path ${imagedir}/${test_image}.png
+
+set log [tricheck result]
+if { [llength $log] != 0 } {
+  puts "Error : Invalid mesh"
+} else {
+  puts "Mesh is OK"
+}
index 5285e22da3d42c56ee3eab8c424065786e9413db..08f75e8aa39fef3497f91923a0fec63dfea7e4b0 100755 (executable)
@@ -15,6 +15,6 @@ vclear
 isos result 0
 triangles result
 
-checktrinfo result -tri 18 -nod 20
+checktrinfo result -tri 20 -nod 22
 checkprops result -s 19.2399 
 checkview -display result -3d -path ${imagedir}/${test_image}.png
index 9197a0b3dae621961fd083348bb286b3cf072d8a..1a03acd2e18bd86ca4beb4df7d229e8281d2e13a 100755 (executable)
@@ -15,6 +15,6 @@ vclear
 isos result 0
 triangles result
 
-checktrinfo result -tri 91 -nod 93
+checktrinfo result -tri 103 -nod 105
 checkprops result -s 150.283 
 checkview -display result -3d -path ${imagedir}/${test_image}.png
index b7880923c9494a9355de1c0885223439dc0bcc41..16bf1a766150c6c4271d5f7ce9c313a54db3fec7 100644 (file)
@@ -9,7 +9,7 @@ writestl m $imagedir/${casename}
 readstl res $imagedir/${casename}
 file delete $imagedir/${casename}
 
-checktrinfo res -tri 34 -nod 19
+checktrinfo res -tri 36 -nod 20
 
 # Visual check
 checkview -display res -2d -path ${imagedir}/${test_image}.png
index 804241eb9083efa29740b33ba6d2dd366cca3094..df6a3bf9247daffa671c1f55913f7a79fa3cc117 100644 (file)
@@ -4,7 +4,7 @@ puts "====================================="
 puts ""
 
 set viewname "vbottom"
-set length 8.40196
+set length 8.40188
 
 restore [locate_data_file bug27341_hlrsave.brep] a
 COMPUTE_HLR $viewname $algotype
index 6a502fbb748ba7fc99044b054a06422762c28dcb..69067419fdb47c92cdf4a8cf5f7e25a88699c120 100644 (file)
@@ -1,5 +1,5 @@
 set viewname "vright"
-set length 9547.12
+set length 9546.37
 
 testreadstep [locate_data_file bug27341_Assembly_ABS_1_CAD.stp] a
 COMPUTE_HLR $viewname $algotype
index 804df0c48f7204c08e01bf4450f04c925962ca60..a90bd9554c1c9a8b6d0848499be6964680a73b36 100644 (file)
@@ -1,5 +1,5 @@
 set viewname "vright"
-set length 5101.26
+set length 5101.97
 
 testreadstep [locate_data_file bug27341_Assembly_GMS_Kurz_CAD.stp] a
 COMPUTE_HLR $viewname $algotype
index ae4a9db26216875954b36e2eb98b04a2c393f560..14bf820c30bb007eec22a0d6a69e83fc5803e185 100644 (file)
@@ -1,5 +1,5 @@
 set viewname "vright"
-set length 1704.86
+set length 1705.48
 
 testreadstep [locate_data_file bug27341_Drehkopf_HSK_Gewinde_R_CAD.stp] a
 COMPUTE_HLR $viewname $algotype
index c1c2ed6118b8ec482963c78cb3da68c88c19d6ad..7651d0d8fa7747417b068ff1adb3c8a339df3716 100644 (file)
@@ -1,5 +1,5 @@
 set viewname "vright"
-set length 826.794
+set length 829.419
 
 testreadstep [locate_data_file bug27341_KMM_Adapter_CAD.stp] a
 COMPUTE_HLR $viewname $algotype
index 46a0173c344d71106ada325b3ad442b2ccf0045a..0ea41a1855f392605af178d7271be2328f6cc4c1 100644 (file)
@@ -1,5 +1,5 @@
 set viewname "vright"
-set length 217.803
+set length 239.091
 
 testreadstep [locate_data_file bug27341_MZX_01_1_CAD.stp] a
 COMPUTE_HLR $viewname $algotype
index b6806e82567edea0ffefe56a5098d6e5d9386e1e..33f2568bd77f400f60998b3a9c71258f02841313 100644 (file)
@@ -1,5 +1,5 @@
 set viewname "vright"
-set length 3057.35
+set length 3057.09
 
 testreadstep [locate_data_file bug27341_570-DWLNL-40-08-L_131LANG_16VERSATZ_DIN.stp] a
 COMPUTE_HLR $viewname $algotype
index e0ad37efcc6f70ce9acf9d8435ac6c9ec8d344e7..e3077f9d8e10722b4b62bdd1560569cf1c200cda 100644 (file)
@@ -1,5 +1,5 @@
 set viewname "vright"
-set length 2832.09
+set length 2832.15
 
 testreadstep [locate_data_file bug27341_ABS_Grundhalter_CAD.stp] a
 COMPUTE_HLR $viewname $algotype
index 0a1185bbfd5bcb2f778bf6d719a6c5290103db1e..986c7614fe687c8140b3e30750045d0797d17c9a 100644 (file)
@@ -1,5 +1,5 @@
 set viewname "vright"
-set length 1154.09
+set length 1154.43
 
 testreadstep [locate_data_file bug27341_AWN_Adapter_CAD.stp] a
 COMPUTE_HLR $viewname $algotype
index a5df15c581324948eee563e29d6472bd9124ed7e..48132c53eae2e6f990bc4152c02f55e738b702cb 100644 (file)
@@ -4,7 +4,7 @@ puts "========================================================================"
 puts ""
 
 set viewname "vtop"
-set length 13.0106
+set length 13.0091
 
 restore [locate_data_file bug27979_parsed.brep] a
 COMPUTE_HLR $viewname $algotype