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