1 // Created on: 1996-09-09
2 // Created by: Herve LOUESSARD
3 // Copyright (c) 1996-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17
18 #include <Geom2d_Curve.hxx>
19 #include <Geom_Surface.hxx>
20 #include <GeomLProp_SLProps.hxx>
21 #include <gp.hxx>
22 #include <gp_Dir.hxx>
23 #include <gp_Pnt.hxx>
24 #include <gp_Pnt2d.hxx>
25 #include <gp_Vec.hxx>
26 #include <LocalAnalysis_SurfaceContinuity.hxx>
27 #include <StdFail_NotDone.hxx>
28
29 /*********************************************************************************/
30 /*********************************************************************************/
SurfC0(const GeomLProp_SLProps & Surf1,const GeomLProp_SLProps & Surf2)31 void LocalAnalysis_SurfaceContinuity::SurfC0 (const GeomLProp_SLProps& Surf1,
32 const GeomLProp_SLProps& Surf2
33 )
34 { myContC0=(Surf1.Value()).Distance(Surf2.Value());
35 }
36
37 /*********************************************************************************/
38
SurfC1(GeomLProp_SLProps & Surf1,GeomLProp_SLProps & Surf2)39 void LocalAnalysis_SurfaceContinuity::SurfC1( GeomLProp_SLProps& Surf1,
40 GeomLProp_SLProps & Surf2)
41 { gp_Vec V1u, V2u, V1v, V2v;
42 Standard_Real norm1u, norm2u, norm1v, norm2v,angu,angv;
43
44 V1u = Surf1.D1U();
45 V2u = Surf2.D1U();
46
47 V1v = Surf1.D1V();
48 V2v = Surf2.D1V();
49
50 norm1u = V1u.Magnitude();
51 norm2u = V2u.Magnitude();
52 norm1v = V1v.Magnitude();
53 norm2v = V2v.Magnitude();
54
55 if ((norm1u>myepsnul )&&(norm2u>myepsnul )&&(norm1v>myepsnul)
56 &&(norm2v>myepsnul))
57 { if (norm1u >= norm2u )
58 myLambda1U= norm2u / norm1u;
59 else myLambda1U = norm1u / norm2u;
60 if (norm1v >= norm2v )
61 myLambda1V= norm2v / norm1v;
62 else myLambda1V = norm1v / norm2v;
63 angu= V1u.Angle(V2u);
64 if (angu>M_PI/2) myContC1U=M_PI-angu;
65 else myContC1U=angu;
66 angv= V1v.Angle(V2v);
67 if (angv>M_PI/2) myContC1V=M_PI-angv;
68 else myContC1V=angv; }
69 else {myIsDone = Standard_False;
70 myErrorStatus=LocalAnalysis_NullFirstDerivative;}
71 }
72
73 /*********************************************************************************/
74
SurfC2(GeomLProp_SLProps & Surf1,GeomLProp_SLProps & Surf2)75 void LocalAnalysis_SurfaceContinuity::SurfC2( GeomLProp_SLProps& Surf1,
76 GeomLProp_SLProps& Surf2)
77
78 { gp_Vec V11u, V12u, V21u, V22u, V11v, V12v, V21v, V22v;
79 Standard_Real norm11u, norm12u, norm21u, norm22u, norm11v, norm12v, norm21v, norm22v;
80 Standard_Real ang;
81 V11u = Surf1.D1U();
82 V12u = Surf2.D1U();
83 V21u = Surf1.D2U();
84 V22u = Surf2.D2U();
85 norm11u = V11u.Magnitude();
86 norm12u = V12u.Magnitude();
87 norm21u = V21u.Magnitude();
88 norm22u = V22u.Magnitude();
89
90 if ((norm11u>myepsnul)&&(norm12u>myepsnul))
91 { if( (norm21u>myepsnul)&&(norm22u>myepsnul))
92 { if (norm11u >= norm12u )
93 {myLambda1U= norm12u / norm11u;
94 myLambda2U = norm22u /norm21u;}
95 else {myLambda1U = norm11u / norm12u;
96 myLambda2U = norm21u / norm22u;}
97 ang=V21u.Angle(V22u);
98 if(ang>M_PI/2) myContC2U=M_PI-ang;
99 else myContC2U=ang; }
100 else
101 { myIsDone=Standard_False;
102 myErrorStatus=LocalAnalysis_NullSecondDerivative;}
103 }
104
105 else { myIsDone=Standard_False;
106 myErrorStatus=LocalAnalysis_NullFirstDerivative;}
107
108 V11v = Surf1.D1V();
109 V12v = Surf2.D1V();
110 V21v = Surf1.D2V();
111 V22v = Surf2.D2V();
112 norm11v = V11v.Magnitude();
113 norm12v = V12v.Magnitude();
114 norm21v = V21v.Magnitude();
115 norm22v = V22v.Magnitude();
116
117 if ((norm11v>myepsnul)&&(norm12v>myepsnul))
118 {if ((norm21v>myepsnul)&&(norm22v>myepsnul))
119 {if ( norm11v >= norm12v )
120 {myLambda1V= norm12v / norm11v;
121 myLambda2V= norm22v / norm21v;}
122 else{ myLambda1V = norm11v / norm12v;
123 myLambda2V = norm21v / norm22v;}
124 ang= V21v.Angle(V22v);
125 if (ang>M_PI/2) myContC2V=M_PI-ang;
126 else myContC2V=ang;
127 }
128 else{ myIsDone= Standard_False;
129 myErrorStatus=LocalAnalysis_NullSecondDerivative; }
130 }
131 else{ myIsDone=Standard_False;
132 myErrorStatus=LocalAnalysis_NullFirstDerivative;}
133 }
134
135 /*********************************************************************************/
SurfG1(GeomLProp_SLProps & Surf1,GeomLProp_SLProps & Surf2)136 void LocalAnalysis_SurfaceContinuity::SurfG1( GeomLProp_SLProps& Surf1,
137 GeomLProp_SLProps& Surf2)
138 { if (Surf1.IsNormalDefined()&&Surf2.IsNormalDefined())
139 { gp_Dir D1 = Surf1.Normal();
140 gp_Dir D2 = Surf2.Normal();
141 Standard_Real ang=D1.Angle(D2);
142 if (ang>M_PI/2) myContG1= M_PI-ang;
143 else myContG1=ang;
144 }
145 else{ myIsDone=Standard_False;
146 myErrorStatus=LocalAnalysis_NormalNotDefined;}
147 }
148
149 /*********************************************************************************/
150
SurfG2(GeomLProp_SLProps & Surf1,GeomLProp_SLProps & Surf2)151 void LocalAnalysis_SurfaceContinuity::SurfG2 ( GeomLProp_SLProps& Surf1,
152 GeomLProp_SLProps & Surf2)
153 { gp_Dir DMIN1, DMIN2, DMAX1, DMAX2;
154 Standard_Real RMIN1,RMIN2,RMAX1,RMAX2;
155 Standard_Real x1, x2, y1, y2, z1, z2;
156
157 if ( Surf1.IsCurvatureDefined() && Surf2.IsCurvatureDefined())
158 {
159 Surf1.CurvatureDirections(DMIN1, DMAX1);
160 Surf2.CurvatureDirections(DMIN2, DMAX2);
161 DMIN1.Coord(x1, y1, z1);
162 DMAX1.Coord(x2, y2, z2);
163 gp_Dir MCD1( (Abs(x1)+Abs(x2))/2, (Abs(y1)+Abs(y2))/2, (Abs(z1)+Abs(z2))/2 );
164 DMIN2.Coord(x1, y1, z1);
165 DMAX2.Coord(x2, y2, z2);
166 gp_Dir MCD2( (Abs(x1)+Abs(x2))/2, (Abs(y1)+Abs(y2))/2, (Abs(z1)+Abs(z2))/2 );
167
168 myAlpha = MCD1.Angle( MCD2 );
169 RMIN1 = Surf1.MinCurvature();
170 RMAX1 = Surf1.MaxCurvature();
171 RMIN2 = Surf2.MinCurvature();
172 RMAX2 = Surf2.MaxCurvature();
173 myETA1 = (RMIN1+RMAX1)/2;
174 myETA2 = (RMIN2+RMAX2)/2;
175 myETA = (myETA1+myETA2)/2;
176 myZETA1 = (RMAX1-RMIN1)/2;
177 myZETA2 = (RMAX2-RMIN2)/2;
178 myZETA = (myZETA1+myZETA2)/2;
179 Standard_Real DETA,DZETA;
180 DETA = ( myETA1- myETA2)/2;
181 DZETA =( myZETA1- myZETA2)/2;
182 myGap= Abs(DETA) + sqrt( DZETA*DZETA*Cos(myAlpha)*Cos(myAlpha)
183 + myZETA*myZETA*Sin(myAlpha)*Sin(myAlpha));
184 }
185 else {myIsDone = Standard_False;
186 myErrorStatus=LocalAnalysis_CurvatureNotDefined;}
187
188 }
LocalAnalysis_SurfaceContinuity(const Standard_Real EpsNul,const Standard_Real EpsC0,const Standard_Real EpsC1,const Standard_Real EpsC2,const Standard_Real EpsG1,const Standard_Real Percent,const Standard_Real Maxlen)189 LocalAnalysis_SurfaceContinuity::LocalAnalysis_SurfaceContinuity(const Standard_Real EpsNul,
190 const Standard_Real EpsC0,
191 const Standard_Real EpsC1,
192 const Standard_Real EpsC2,
193 const Standard_Real EpsG1,
194 const Standard_Real Percent,
195 const Standard_Real Maxlen)
196 : myContC0(0.0),
197 myContC1U(0.0),
198 myContC1V(0.0),
199 myContC2U(0.0),
200 myContC2V(0.0),
201 myContG1(0.0),
202 myLambda1U(0.0),
203 myLambda2U(0.0),
204 myLambda1V(0.0),
205 myLambda2V(0.0),
206 myETA1(0.0),
207 myETA2(0.0),
208 myETA(0.0),
209 myZETA1(0.0),
210 myZETA2(0.0),
211 myZETA(0.0),
212 myAlpha(0.0),
213 myGap(0.0)
214 { myepsnul=EpsNul;
215 myepsC0= EpsC0;
216 myepsC1= EpsC1;
217 myepsC2= EpsC2;
218 myepsG1= EpsG1;
219 myperce= Percent;
220 mymaxlen= Maxlen;
221 myIsDone = Standard_True;
222 }
ComputeAnalysis(GeomLProp_SLProps & Surf1,GeomLProp_SLProps & Surf2,const GeomAbs_Shape Order)223 void LocalAnalysis_SurfaceContinuity::ComputeAnalysis(GeomLProp_SLProps& Surf1,
224 GeomLProp_SLProps& Surf2,
225 const GeomAbs_Shape Order)
226 { myTypeCont = Order;
227 switch ( Order )
228 { case GeomAbs_C0 : {
229 SurfC0(Surf1, Surf2);
230 }
231 break;
232 case GeomAbs_C1 : {
233 SurfC0(Surf1, Surf2);
234 SurfC1(Surf1, Surf2);}
235 break;
236 case GeomAbs_C2 : {
237 SurfC0(Surf1, Surf2);
238 SurfC1(Surf1, Surf2);
239 SurfC2(Surf1, Surf2);}
240 break;
241 case GeomAbs_G1 : {
242 SurfC0(Surf1, Surf2);
243 SurfG1(Surf1, Surf2);}
244 break;
245 case GeomAbs_G2 : {
246 SurfC0(Surf1, Surf2);
247 SurfG1(Surf1, Surf2);
248 SurfG2(Surf1, Surf2);}
249 break;
250 default : {}
251 }
252
253 }
254
255 /*********************************************************************************/
256
LocalAnalysis_SurfaceContinuity(const Handle (Geom_Surface)& Surf1,const Standard_Real u1,const Standard_Real v1,const Handle (Geom_Surface)& Surf2,const Standard_Real u2,const Standard_Real v2,const GeomAbs_Shape Ordre,const Standard_Real EpsNul,const Standard_Real EpsC0,const Standard_Real EpsC1,const Standard_Real EpsC2,const Standard_Real EpsG1,const Standard_Real Percent,const Standard_Real Maxlen)257 LocalAnalysis_SurfaceContinuity::LocalAnalysis_SurfaceContinuity( const Handle(Geom_Surface)& Surf1,
258 const Standard_Real u1, const Standard_Real v1,
259 const Handle(Geom_Surface)& Surf2, const Standard_Real u2,
260 const Standard_Real v2, const GeomAbs_Shape Ordre,
261 const Standard_Real EpsNul,
262 const Standard_Real EpsC0 ,
263 const Standard_Real EpsC1 ,
264 const Standard_Real EpsC2,
265 const Standard_Real EpsG1,
266 const Standard_Real Percent,
267 const Standard_Real Maxlen )
268 : myContC0(0.0),
269 myContC1U(0.0),
270 myContC1V(0.0),
271 myContC2U(0.0),
272 myContC2V(0.0),
273 myContG1(0.0),
274 myLambda1U(0.0),
275 myLambda2U(0.0),
276 myLambda1V(0.0),
277 myLambda2V(0.0),
278 myETA1(0.0),
279 myETA2(0.0),
280 myETA(0.0),
281 myZETA1(0.0),
282 myZETA2(0.0),
283 myZETA(0.0),
284 myAlpha(0.0),
285 myGap(0.0)
286 { myTypeCont = Ordre;
287 myepsnul=EpsNul;
288 myepsC0= EpsC0;
289 myepsC1= EpsC1;
290 myepsC2= EpsC2;
291 myepsG1= EpsG1;
292 myperce= Percent;
293 mymaxlen= Maxlen;
294 myIsDone = Standard_True;
295 switch ( Ordre )
296 { case GeomAbs_C0 : {
297 GeomLProp_SLProps Surfa1 ( Surf1, u1, v1, 0, myepsnul);
298 GeomLProp_SLProps Surfa2 ( Surf2, u2, v2, 0, myepsnul);
299 SurfC0(Surfa1, Surfa2);
300 }
301 break;
302 case GeomAbs_C1 : {
303 GeomLProp_SLProps Surfa1 ( Surf1, u1, v1, 1, myepsnul);
304 GeomLProp_SLProps Surfa2 ( Surf2, u2, v2, 1, myepsnul);
305 SurfC0(Surfa1, Surfa2);
306 SurfC1(Surfa1, Surfa2);}
307 break;
308 case GeomAbs_C2 : {
309 GeomLProp_SLProps Surfa1 ( Surf1, u1, v1, 2, myepsnul);
310 GeomLProp_SLProps Surfa2 ( Surf2, u2, v2, 2, myepsnul);
311 SurfC0(Surfa1, Surfa2);
312 SurfC1(Surfa1, Surfa2);
313 SurfC2(Surfa1, Surfa2);}
314 break;
315 case GeomAbs_G1 : {
316 GeomLProp_SLProps Surfa1 ( Surf1, u1, v1, 1, myepsnul);
317 GeomLProp_SLProps Surfa2 ( Surf2, u2, v2, 1, myepsnul);
318 SurfC0(Surfa1, Surfa2);
319 SurfG1(Surfa1, Surfa2);}
320 break;
321 case GeomAbs_G2 : {
322 GeomLProp_SLProps Surfa1 ( Surf1, u1, v1, 2, myepsnul);
323 GeomLProp_SLProps Surfa2 ( Surf2, u2, v2, 2, myepsnul);
324 SurfC0(Surfa1, Surfa2);
325 SurfG1(Surfa1, Surfa2);
326 SurfG2(Surfa1, Surfa2);}
327 break;
328 default : {}
329 }
330 }
331
332 /*********************************************************************************/
333
LocalAnalysis_SurfaceContinuity(const Handle (Geom2d_Curve)& curv1,const Handle (Geom2d_Curve)& curv2,const Standard_Real U,const Handle (Geom_Surface)& Surf1,const Handle (Geom_Surface)& Surf2,const GeomAbs_Shape Ordre,const Standard_Real EpsNul,const Standard_Real EpsC0,const Standard_Real EpsC1,const Standard_Real EpsC2,const Standard_Real EpsG1,const Standard_Real Percent,const Standard_Real Maxlen)334 LocalAnalysis_SurfaceContinuity::LocalAnalysis_SurfaceContinuity(const Handle(Geom2d_Curve)& curv1,
335 const Handle(Geom2d_Curve)& curv2, const Standard_Real U,
336 const Handle(Geom_Surface)& Surf1 ,
337 const Handle(Geom_Surface)& Surf2,
338 const GeomAbs_Shape Ordre,
339 const Standard_Real EpsNul,
340 const Standard_Real EpsC0 ,
341 const Standard_Real EpsC1 ,
342 const Standard_Real EpsC2,
343 const Standard_Real EpsG1,
344 const Standard_Real Percent,
345 const Standard_Real Maxlen )
346 : myContC0(0.0),
347 myContC1U(0.0),
348 myContC1V(0.0),
349 myContC2U(0.0),
350 myContC2V(0.0),
351 myContG1(0.0),
352 myLambda1U(0.0),
353 myLambda2U(0.0),
354 myLambda1V(0.0),
355 myLambda2V(0.0),
356 myETA1(0.0),
357 myETA2(0.0),
358 myETA(0.0),
359 myZETA1(0.0),
360 myZETA2(0.0),
361 myZETA(0.0),
362 myAlpha(0.0),
363 myGap(0.0)
364 { Standard_Real pard1, parf1, pard2, parf2, u1, v1, u2, v2;
365
366 myTypeCont = Ordre;
367 myepsnul=EpsNul;
368 myepsC0= EpsC0;
369 myepsC1= EpsC1;
370 myepsC2= EpsC2;
371 myepsG1= EpsG1;
372 myperce= Percent;
373 mymaxlen= Maxlen;
374 myIsDone = Standard_True;
375
376 pard1 = curv1->FirstParameter();
377 pard2 = curv2->FirstParameter();
378 parf1 = curv1->LastParameter();
379 parf2 = curv2->LastParameter();
380
381
382 if (!(((U <= parf1) && (U >= pard1)) &&((U <= parf2) && (U >= pard2))) ) myIsDone = Standard_False;
383 else
384 { gp_Pnt2d pt1 = curv1->Value(U);
385 gp_Pnt2d pt2 = curv2->Value(U);
386
387 pt1.Coord(u1, v1);
388 pt2.Coord(u2, v2);
389 switch ( Ordre )
390 { case GeomAbs_C0 : {
391 GeomLProp_SLProps Surfa1 ( Surf1, u1, v1, 0, myepsnul);
392 GeomLProp_SLProps Surfa2 ( Surf2, u2, v2, 0, myepsnul);
393 SurfC0(Surfa1, Surfa2);
394 }
395 break;
396 case GeomAbs_C1 : {
397 GeomLProp_SLProps Surfa1 ( Surf1, u1, v1, 1, myepsnul);
398 GeomLProp_SLProps Surfa2 ( Surf2, u2, v2, 1, myepsnul);
399 SurfC0(Surfa1, Surfa2);
400 SurfC1(Surfa1, Surfa2);}
401 break;
402 case GeomAbs_C2 : {
403 GeomLProp_SLProps Surfa1 ( Surf1, u1, v1, 2, myepsnul);
404 GeomLProp_SLProps Surfa2 ( Surf2, u2, v2, 2, myepsnul);
405 SurfC0(Surfa1, Surfa2);
406 SurfC1(Surfa1, Surfa2);
407 SurfC2(Surfa1, Surfa2);}
408 break;
409 case GeomAbs_G1 : {
410 GeomLProp_SLProps Surfa1 ( Surf1, u1, v1, 1, myepsnul);
411 GeomLProp_SLProps Surfa2 ( Surf2, u2, v2, 1, myepsnul);
412 SurfC0(Surfa1, Surfa2);
413 SurfG1(Surfa1, Surfa2);}
414 break;
415 case GeomAbs_G2 : {
416 GeomLProp_SLProps Surfa1 ( Surf1, u1, v1, 2, myepsnul);
417 GeomLProp_SLProps Surfa2 ( Surf2, u2, v2, 2, myepsnul);
418 SurfC0(Surfa1, Surfa2);
419 SurfG1(Surfa1, Surfa2);
420 SurfG2(Surfa1, Surfa2);}
421 break;
422 default : {}
423 }
424 }
425 }
426
427 /*********************************************************************************/
428
IsC0() const429 Standard_Boolean LocalAnalysis_SurfaceContinuity::IsC0() const
430 { if (!myIsDone) { throw StdFail_NotDone();}
431 if ( myContC0 <= myepsC0 )
432 return Standard_True;
433 else return Standard_False;
434 }
435
436 /*********************************************************************************/
437
IsC1() const438 Standard_Boolean LocalAnalysis_SurfaceContinuity::IsC1() const
439 { if (!myIsDone) { throw StdFail_NotDone();}
440 if ( IsC0 () && (myContC1U <= myepsC1) && (myContC1V <= myepsC1))
441 return Standard_True;
442 else return Standard_False;
443 }
444
445 /*********************************************************************************/
446
IsC2() const447 Standard_Boolean LocalAnalysis_SurfaceContinuity::IsC2() const
448 { Standard_Real eps1u, eps1v, eps2u, eps2v;
449
450 if (!myIsDone) { throw StdFail_NotDone();}
451 if ( IsC1())
452 { eps1u = 0.5*myepsC1*myepsC1*myLambda1U;
453 eps1v = 0.5*myepsC1*myepsC1*myLambda1V;
454 eps2u = 0.5*myepsC2*myepsC2*myLambda2U;
455 eps2v = 0.5*myepsC2*myepsC2*myLambda2V;
456 if ((myContC2U < myepsC2) && (myContC2V < myepsC2))
457 { if (Abs(myLambda1U*myLambda1U-myLambda2U) <= (eps1u*eps1u+eps2u))
458 if (Abs(myLambda1V*myLambda1V-myLambda2V) <= (eps1v*eps1v+eps2v))
459 return Standard_True;
460 else return Standard_False;
461 else return Standard_False;
462 }
463 else return Standard_False;
464 }
465 else return Standard_False;
466
467 }
468
469 /*********************************************************************************/
470
IsG1() const471 Standard_Boolean LocalAnalysis_SurfaceContinuity::IsG1() const
472 {
473 if (!myIsDone) { throw StdFail_NotDone();}
474 if ( IsC0 () &&( myContG1 <= myepsG1))
475 return Standard_True;
476 else return Standard_False;
477 }
478
479 /*********************************************************************************/
480
IsG2() const481 Standard_Boolean LocalAnalysis_SurfaceContinuity::IsG2()const
482 { Standard_Real EPSNL;
483 Standard_Integer itype;
484
485 if (!myIsDone) { throw StdFail_NotDone();}
486 itype =0;
487 EPSNL= 8*myepsC0/(mymaxlen*mymaxlen);
488 if ( IsG1())
489 { if ( ( Abs(myETA)< EPSNL) && ( Abs(myZETA)< EPSNL))
490 return Standard_True;
491 if ( ( Abs(myZETA1)< EPSNL) && ( Abs(myZETA2)< EPSNL))
492 itype =1;
493 else if ( ( Abs(myETA1)< EPSNL) && ( Abs(myETA2)< EPSNL))
494 itype =1;
495 else if ((Abs(Abs(myZETA)-Abs(myETA))) < EPSNL)
496 itype =1;
497 else if ((myETA1<myZETA1)&&(myETA2<myZETA2))
498 itype =1;
499 else if ((myETA1>myZETA1)&&(myETA2>myZETA2))
500 itype =1;
501 if (itype == 1)
502 {
503
504 if (( myETA >= (2*myZETA))&&(myGap<=(myperce*(myETA-myZETA)))) return Standard_True;
505 if (( myZETA>= myETA) && ( myGap<= (myperce*myZETA))) return Standard_True;
506 if (( myZETA<= myETA) && ( myETA <= (2*myZETA)) && (myGap <= (myperce * myETA)))
507 return Standard_True;
508 else return Standard_False;
509
510 }
511 else return Standard_False;
512 }
513 else return Standard_False;
514
515 }
516
517
518 /*********************************************************************************/
519
ContinuityStatus() const520 GeomAbs_Shape LocalAnalysis_SurfaceContinuity::ContinuityStatus() const
521 {
522 if (!myIsDone) { throw StdFail_NotDone();}
523 return (myTypeCont);
524 }
525
526 /*********************************************************************************/
527
C0Value() const528 Standard_Real LocalAnalysis_SurfaceContinuity::C0Value() const
529 {
530 if (!myIsDone) { throw StdFail_NotDone();}
531 return ( myContC0 );
532 }
533
534 /*********************************************************************************/
535
C1UAngle() const536 Standard_Real LocalAnalysis_SurfaceContinuity::C1UAngle() const
537 {
538 if (!myIsDone) { throw StdFail_NotDone();}
539 return ( myContC1U );
540 }
541
542 /*********************************************************************************/
543
C1VAngle() const544 Standard_Real LocalAnalysis_SurfaceContinuity::C1VAngle() const
545 {
546 if (!myIsDone) { throw StdFail_NotDone();}
547 return ( myContC1V );
548 }
549
550 /*********************************************************************************/
551
C2UAngle() const552 Standard_Real LocalAnalysis_SurfaceContinuity::C2UAngle() const
553 {
554 if (!myIsDone) { throw StdFail_NotDone();}
555 return ( myContC2U );
556 }
557
558 /*********************************************************************************/
559
C2VAngle() const560 Standard_Real LocalAnalysis_SurfaceContinuity::C2VAngle() const
561 {
562 if (!myIsDone) { throw StdFail_NotDone();}
563 return ( myContC2V );
564 }
565
566 /*********************************************************************************/
567
G1Angle() const568 Standard_Real LocalAnalysis_SurfaceContinuity::G1Angle() const
569 {
570 if (!myIsDone) { throw StdFail_NotDone();}
571 return ( myContG1 );
572 }
573
574 /*********************************************************************************/
575
C1URatio() const576 Standard_Real LocalAnalysis_SurfaceContinuity::C1URatio() const
577 {
578 if (!myIsDone) { throw StdFail_NotDone();}
579 return ( myLambda1U );
580 }
581
582 /*********************************************************************************/
583
C2URatio() const584 Standard_Real LocalAnalysis_SurfaceContinuity::C2URatio() const
585 {
586 if (!myIsDone) { throw StdFail_NotDone();}
587 return ( myLambda2U );
588 }
589
590 /*********************************************************************************/
591
C1VRatio() const592 Standard_Real LocalAnalysis_SurfaceContinuity::C1VRatio() const
593 {
594 if (!myIsDone) { throw StdFail_NotDone();}
595 return ( myLambda1V );
596 }
597
598 /*********************************************************************************/
599
C2VRatio() const600 Standard_Real LocalAnalysis_SurfaceContinuity::C2VRatio() const
601 {
602 if (!myIsDone) { throw StdFail_NotDone();}
603 return ( myLambda2V );
604 }
605
606 /*********************************************************************************/
607
G2CurvatureGap() const608 Standard_Real LocalAnalysis_SurfaceContinuity::G2CurvatureGap() const
609 {
610 if (!myIsDone) { throw StdFail_NotDone();}
611 return ( myGap );
612 }
613
614 /*********************************************************************************/
615
IsDone() const616 Standard_Boolean LocalAnalysis_SurfaceContinuity::IsDone() const
617 { return ( myIsDone );
618 }
619
620 /*********************************************************************************/
StatusError() const621 LocalAnalysis_StatusErrorType LocalAnalysis_SurfaceContinuity::StatusError() const
622 {
623 return myErrorStatus;
624 }
625