From 2ca96161eda8ed4f3f33f2968de7d91f6ac2cd6b Mon Sep 17 00:00:00 2001 From: Ajinkya Dahale Date: Wed, 2 Mar 2022 03:32:58 -0500 Subject: [PATCH] [Part] Fix periodic b-spline trim When `v == u` we want to "break" the b-spline at `u` (also OCC will raise an exception if same parameter is provided). The range of parameter can in general be different than 1.0, so use a general term. --- src/Mod/Part/App/Geometry.cpp | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/Mod/Part/App/Geometry.cpp b/src/Mod/Part/App/Geometry.cpp index 8a9d8d61ac..38ce95fdbd 100644 --- a/src/Mod/Part/App/Geometry.cpp +++ b/src/Mod/Part/App/Geometry.cpp @@ -1602,19 +1602,9 @@ void GeomBSplineCurve::Trim(double u, double v) }; try { - if(!isPeriodic()) { - splitUnwrappedBSpline(u, v); - } - else { // periodic - if( v < u ) { // wraps over origin - v = v + 1.0; // v needs one extra lap (1.0) - - splitUnwrappedBSpline(u, v); - } - else { - splitUnwrappedBSpline(u, v); - } - } + if (isPeriodic() && (v - u <= Precision::PConfusion())) + v = v + myCurve->LastParameter() - myCurve->FirstParameter(); // v needs one extra lap + splitUnwrappedBSpline(u, v); } catch (Standard_Failure& e) { THROWM(Base::CADKernelError,e.GetMessageString())