diff --git a/src/Geom2dAdaptor/Geom2dAdaptor_Curve.cxx b/src/Geom2dAdaptor/Geom2dAdaptor_Curve.cxx index e9e2013a53..1bae7542c6 100644 --- a/src/Geom2dAdaptor/Geom2dAdaptor_Curve.cxx +++ b/src/Geom2dAdaptor/Geom2dAdaptor_Curve.cxx @@ -500,10 +500,7 @@ Standard_Boolean Geom2dAdaptor_Curve::IsClosed() const Standard_Boolean Geom2dAdaptor_Curve::IsPeriodic() const { - if (myCurve->IsPeriodic()) - return IsClosed(); - else - return Standard_False; + return myCurve->IsPeriodic(); } //======================================================================= diff --git a/src/GeomAdaptor/GeomAdaptor_Curve.cxx b/src/GeomAdaptor/GeomAdaptor_Curve.cxx index b6cb7bd4ed..6d68a9dcaf 100644 --- a/src/GeomAdaptor/GeomAdaptor_Curve.cxx +++ b/src/GeomAdaptor/GeomAdaptor_Curve.cxx @@ -495,7 +495,7 @@ Standard_Boolean GeomAdaptor_Curve::IsClosed() const Standard_Boolean GeomAdaptor_Curve::IsPeriodic() const { - return (myCurve->IsPeriodic()? IsClosed() : Standard_False); + return myCurve->IsPeriodic(); } //======================================================================= diff --git a/src/GeomFill/GeomFill_NSections.cxx b/src/GeomFill/GeomFill_NSections.cxx index 1b02a345be..2940bfae30 100644 --- a/src/GeomFill/GeomFill_NSections.cxx +++ b/src/GeomFill/GeomFill_NSections.cxx @@ -968,9 +968,14 @@ void GeomFill_NSections::GetMinimalWeight(TColStd_Array1OfReal& Weights) const C1.SetRadius(radius); Handle(Geom_Curve) C = new (Geom_Circle) (C1); - if (! AC1.IsPeriodic()) { - Handle(Geom_Curve) Cbis = new (Geom_TrimmedCurve) - (C, AC1.FirstParameter(), AC1.LastParameter()); + + const Standard_Real aParF = AC1.FirstParameter(); + const Standard_Real aParL = AC1.LastParameter(); + const Standard_Real aPeriod = AC1.IsPeriodic() ? AC1.Period() : 0.0; + + if ((aPeriod == 0.0) || (Abs(aParL - aParF - aPeriod) > Precision::PConfusion())) + { + Handle(Geom_Curve) Cbis = new Geom_TrimmedCurve(C, aParF, aParL); C = Cbis; } return C; diff --git a/tests/bugs/modalg_6/bug28724 b/tests/bugs/modalg_6/bug28724 new file mode 100644 index 0000000000..3626c082ab --- /dev/null +++ b/tests/bugs/modalg_6/bug28724 @@ -0,0 +1,16 @@ +puts "========" +puts "OCC28724" +puts "========" +puts "" +############################################## +# Extrema between circle and plane cannot be found +############################################## + +restore [locate_data_file bug28724_cmpd.brep] co +explode co + +distmini d co_1 co_2 + +if {[dval d_val] > 1.0e-7} { + puts "Error: Extrema cannot find minimal distance" +} \ No newline at end of file