From 66190a47bbeaf78941bea03c4e5b385fbe43acbd Mon Sep 17 00:00:00 2001 From: oan Date: Thu, 4 Sep 2014 14:21:41 +0400 Subject: [PATCH] 0025179: BRepMesh cannot build a mesh on specific geometry Check for zero division in GCPnts_TangentialDeflection Check that mid point does not coincide with end points Test case for issue CR25179 --- src/GCPnts/GCPnts_TangentialDeflection.gxx | 10 ++++-- tests/bugs/moddata_3/bug25179 | 37 ++++++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) create mode 100755 tests/bugs/moddata_3/bug25179 diff --git a/src/GCPnts/GCPnts_TangentialDeflection.gxx b/src/GCPnts/GCPnts_TangentialDeflection.gxx index ac00191d2f..5cf77e3713 100644 --- a/src/GCPnts/GCPnts_TangentialDeflection.gxx +++ b/src/GCPnts/GCPnts_TangentialDeflection.gxx @@ -382,9 +382,13 @@ void GCPnts_TangentialDeflection::PerformCurve (const TheCurve& C) V1.Subtract (MiddlePoint.XYZ ()); L1 = V1.Modulus (); L2 = V2.Modulus (); - Standard_Real angg = V1.CrossMagnitude(V2)/(L1*L2); - if (L1 > LTol && L2 > LTol) ACoef = angg/AngleMax; - else ACoef = 0.0; + if (L1 > LTol && L2 > LTol) + { + Standard_Real angg = V1.CrossMagnitude(V2) / (L1 * L2); + ACoef = angg / AngleMax; + } + else + ACoef = 0.0; if (ACoef >= FCoef) Coef = ACoef; //On retient le plus penalisant else Coef = FCoef; diff --git a/tests/bugs/moddata_3/bug25179 b/tests/bugs/moddata_3/bug25179 new file mode 100755 index 0000000000..cbc9611b6e --- /dev/null +++ b/tests/bugs/moddata_3/bug25179 @@ -0,0 +1,37 @@ +puts "============" +puts "CR25179" +puts "============" +puts "" +################################################################################### +# BRepMesh cannot build a mesh on specific geometry +################################################################################### + +restore [locate_data_file bug25179_nurbs-with-partial-seam.brep] result + +tclean result +incmesh result 0.1 + +set trinfo_s [trinfo result] +regexp {([0-9]+) triangles} ${trinfo_s} str nbtri_s +regexp {([0-9]+) nodes} ${trinfo_s} str nbnod_s +regexp {deflection ([0-9.+e-]+)} ${trinfo_s} str defl_s + +if { ${nbtri_s} == 0 } { + puts "Error: shape contains 0 triangles" +} + +if { ${nbnod_s} == 0 } { + puts "Error: shape contains 0 nodes" +} + +if { ${defl_s} == 0 } { + puts "Error: deflection is 0" +} + +if [catch { tricheck result } ] { + puts "Error : Problem of build a mesh on specific geometry" +} else { + puts "OK : Building a mesh on specific geometry is good" +} + +set 3dviewer 1 -- 2.39.5