@@ -43,7 +43,10 @@ NCollection_Array1<gp_Pnt2d> Geom2dGridEval_OffsetCurve::EvaluateGrid(
4343 {
4444 const Geom2dGridEval::CurveD1& aBasis = aBasisD1.Value (i);
4545 gp_Pnt2d aP = aBasis.Point ;
46- Geom2d_OffsetCurveUtils::CalculateD0 (aP, aBasis.D1 , myOffset);
46+ if (!Geom2d_OffsetCurveUtils::CalculateD0 (aP, aBasis.D1 , myOffset))
47+ {
48+ return NCollection_Array1<gp_Pnt2d>();
49+ }
4750 aResult.SetValue (i, aP);
4851 }
4952
@@ -78,7 +81,10 @@ NCollection_Array1<Geom2dGridEval::CurveD1> Geom2dGridEval_OffsetCurve::Evaluate
7881 const Geom2dGridEval::CurveD2& aBasis = aBasisD2.Value (i);
7982 gp_Pnt2d aP = aBasis.Point ;
8083 gp_Vec2d aD1 = aBasis.D1 ;
81- Geom2d_OffsetCurveUtils::CalculateD1 (aP, aD1, aBasis.D2 , myOffset);
84+ if (!Geom2d_OffsetCurveUtils::CalculateD1 (aP, aD1, aBasis.D2 , myOffset))
85+ {
86+ return NCollection_Array1<Geom2dGridEval::CurveD1>();
87+ }
8288 aResult.ChangeValue (i) = {aP, aD1};
8389 }
8490
@@ -121,17 +127,23 @@ NCollection_Array1<Geom2dGridEval::CurveD2> Geom2dGridEval_OffsetCurve::Evaluate
121127 if (aD1.SquareMagnitude () <= gp::Resolution ())
122128 {
123129 gp_Vec2d aDummyD4;
124- isDirectionChange =
125- Geom2d_OffsetCurveUtils::AdjustDerivative (*myBasis,
126- 3 ,
127- theParams.Value (theParams.Lower () + i - 1 ),
128- aD1,
129- aD2,
130- aD3,
131- aDummyD4);
130+ if (!Geom2d_OffsetCurveUtils::AdjustDerivative (*myBasis,
131+ 3 ,
132+ theParams.Value (theParams.Lower () + i - 1 ),
133+ aD1,
134+ aD2,
135+ aD3,
136+ aDummyD4,
137+ isDirectionChange))
138+ {
139+ return NCollection_Array1<Geom2dGridEval::CurveD2>();
140+ }
132141 }
133142
134- Geom2d_OffsetCurveUtils::CalculateD2 (aP, aD1, aD2, aD3, isDirectionChange, myOffset);
143+ if (!Geom2d_OffsetCurveUtils::CalculateD2 (aP, aD1, aD2, aD3, isDirectionChange, myOffset))
144+ {
145+ return NCollection_Array1<Geom2dGridEval::CurveD2>();
146+ }
135147 aResult.ChangeValue (i) = {aP, aD1, aD2};
136148 }
137149
@@ -170,17 +182,34 @@ NCollection_Array1<Geom2dGridEval::CurveD3> Geom2dGridEval_OffsetCurve::Evaluate
170182 gp_Vec2d aD1 = aBasis.D1 ;
171183 gp_Vec2d aD2 = aBasis.D2 ;
172184 gp_Vec2d aD3 = aBasis.D3 ;
173- gp_Vec2d aD4 = myBasis->DN (aParam, 4 );
185+ std::optional<gp_Vec2d> aD4Opt = myBasis->EvalDN (aParam, 4 );
186+ if (!aD4Opt)
187+ {
188+ return NCollection_Array1<Geom2dGridEval::CurveD3>();
189+ }
190+ gp_Vec2d aD4 = *aD4Opt;
174191
175192 // Check for direction change at singular points
176193 bool isDirectionChange = false ;
177194 if (aD1.SquareMagnitude () <= gp::Resolution ())
178195 {
179- isDirectionChange =
180- Geom2d_OffsetCurveUtils::AdjustDerivative (*myBasis, 4 , aParam, aD1, aD2, aD3, aD4);
196+ if (!Geom2d_OffsetCurveUtils::AdjustDerivative (*myBasis,
197+ 4 ,
198+ aParam,
199+ aD1,
200+ aD2,
201+ aD3,
202+ aD4,
203+ isDirectionChange))
204+ {
205+ return NCollection_Array1<Geom2dGridEval::CurveD3>();
206+ }
181207 }
182208
183- Geom2d_OffsetCurveUtils::CalculateD3 (aP, aD1, aD2, aD3, aD4, isDirectionChange, myOffset);
209+ if (!Geom2d_OffsetCurveUtils::CalculateD3 (aP, aD1, aD2, aD3, aD4, isDirectionChange, myOffset))
210+ {
211+ return NCollection_Array1<Geom2dGridEval::CurveD3>();
212+ }
184213 aResult.ChangeValue (i) = {aP, aD1, aD2, aD3};
185214 }
186215
@@ -204,7 +233,11 @@ NCollection_Array1<gp_Vec2d> Geom2dGridEval_OffsetCurve::EvaluateGridDN(
204233 if (theN == 1 )
205234 {
206235 NCollection_Array1<Geom2dGridEval::CurveD1> aD1Grid = EvaluateGridD1 (theParams);
207- NCollection_Array1<gp_Vec2d> aResult (1 , aNbParams);
236+ if (aD1Grid.IsEmpty ())
237+ {
238+ return NCollection_Array1<gp_Vec2d>();
239+ }
240+ NCollection_Array1<gp_Vec2d> aResult (1 , aNbParams);
208241 for (int i = 1 ; i <= aNbParams; ++i)
209242 {
210243 aResult.SetValue (i, aD1Grid.Value (i).D1 );
@@ -214,7 +247,11 @@ NCollection_Array1<gp_Vec2d> Geom2dGridEval_OffsetCurve::EvaluateGridDN(
214247 else if (theN == 2 )
215248 {
216249 NCollection_Array1<Geom2dGridEval::CurveD2> aD2Grid = EvaluateGridD2 (theParams);
217- NCollection_Array1<gp_Vec2d> aResult (1 , aNbParams);
250+ if (aD2Grid.IsEmpty ())
251+ {
252+ return NCollection_Array1<gp_Vec2d>();
253+ }
254+ NCollection_Array1<gp_Vec2d> aResult (1 , aNbParams);
218255 for (int i = 1 ; i <= aNbParams; ++i)
219256 {
220257 aResult.SetValue (i, aD2Grid.Value (i).D2 );
@@ -224,7 +261,11 @@ NCollection_Array1<gp_Vec2d> Geom2dGridEval_OffsetCurve::EvaluateGridDN(
224261 else if (theN == 3 )
225262 {
226263 NCollection_Array1<Geom2dGridEval::CurveD3> aD3Grid = EvaluateGridD3 (theParams);
227- NCollection_Array1<gp_Vec2d> aResult (1 , aNbParams);
264+ if (aD3Grid.IsEmpty ())
265+ {
266+ return NCollection_Array1<gp_Vec2d>();
267+ }
268+ NCollection_Array1<gp_Vec2d> aResult (1 , aNbParams);
228269 for (int i = 1 ; i <= aNbParams; ++i)
229270 {
230271 aResult.SetValue (i, aD3Grid.Value (i).D3 );
0 commit comments