From 389f5b59dddab40a48d970d8d3fd917a0b29f528 Mon Sep 17 00:00:00 2001 From: ifv Date: Thu, 16 Jan 2020 12:07:33 +0300 Subject: [PATCH] 0031260: Geom2dGcc_Circ2d2TanRad fails in this case (720) Adaptor2d/Adaptor2d_OffsetCurve.cxx: Function nbPoints(...) is modified Test case added --- src/Adaptor2d/Adaptor2d_OffsetCurve.cxx | 13 +++++------- tests/bugs/modalg_7/bug31260 | 27 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 tests/bugs/modalg_7/bug31260 diff --git a/src/Adaptor2d/Adaptor2d_OffsetCurve.cxx b/src/Adaptor2d/Adaptor2d_OffsetCurve.cxx index f5251eea7f..3f45876032 100644 --- a/src/Adaptor2d/Adaptor2d_OffsetCurve.cxx +++ b/src/Adaptor2d/Adaptor2d_OffsetCurve.cxx @@ -656,19 +656,16 @@ static Standard_Integer nbPoints(const Handle(Adaptor2d_HCurve2d)& theCurve) Standard_Integer nbs = 20; - if (theCurve->GetType() == GeomAbs_Line) - nbs = 2; - else if (theCurve->GetType() == GeomAbs_BezierCurve) + if (theCurve->GetType() == GeomAbs_BezierCurve) { - nbs = 3 + theCurve->NbPoles(); + nbs = Max(nbs, 3 + theCurve->NbPoles()); } else if (theCurve->GetType() == GeomAbs_BSplineCurve) { - nbs = theCurve->NbKnots(); - nbs *= theCurve->Degree(); + nbs = Max(nbs, theCurve->NbKnots() * theCurve->Degree()); } - if (nbs > 200) - nbs = 200; + if (nbs > 300) + nbs = 300; return nbs; } diff --git a/tests/bugs/modalg_7/bug31260 b/tests/bugs/modalg_7/bug31260 new file mode 100644 index 0000000000..2c71e8d634 --- /dev/null +++ b/tests/bugs/modalg_7/bug31260 @@ -0,0 +1,27 @@ +puts "========" +puts "0031260: Geom2dGcc_Circ2d2TanRad fails in this case (720)" +puts "========" +puts "" + +restore [locate_data_file bug31260.brep] t + +mkcurve c t +plane p 0.0 0.0 12.649999618530273 0.0 0.0 1.0 +to2d c2d c p +point pnt 11.9850 12.0585 + +cirtang r -c c2d -p pnt -r 0.5 + +smallview -2D- + +2dfit + +xwd ${imagedir}/${test_image}.png + +set NbCurv [llength [directory r_*]] + +if { $NbCurv == 2 } { + puts "OK: Number of circles is good" +} else { + puts "Error: Not all solutions" +}