b311480e |
1 | // Created on: 1993-03-10 |
2 | // Created by: JCV |
3 | // Copyright (c) 1993-1999 Matra Datavision |
973c2be1 |
4 | // Copyright (c) 1999-2014 OPEN CASCADE SAS |
b311480e |
5 | // |
973c2be1 |
6 | // This file is part of Open CASCADE Technology software library. |
b311480e |
7 | // |
d5f74e42 |
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 |
973c2be1 |
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. |
b311480e |
13 | // |
973c2be1 |
14 | // Alternatively, this file may be used under the terms of Open CASCADE |
15 | // commercial license or contractual agreement. |
b311480e |
16 | |
7fd59977 |
17 | // ******************************************************************* |
7fd59977 |
18 | // ******************************************************************* |
19 | |
42cf5bc1 |
20 | #include <ElCLib.hxx> |
21 | #include <Geom_BezierSurface.hxx> |
22 | #include <Geom_BSplineSurface.hxx> |
23 | #include <Geom_ConicalSurface.hxx> |
24 | #include <Geom_Curve.hxx> |
25 | #include <Geom_CylindricalSurface.hxx> |
7fd59977 |
26 | #include <Geom_Geometry.hxx> |
42cf5bc1 |
27 | #include <Geom_OffsetSurface.hxx> |
7fd59977 |
28 | #include <Geom_Plane.hxx> |
42cf5bc1 |
29 | #include <Geom_RectangularTrimmedSurface.hxx> |
7fd59977 |
30 | #include <Geom_SphericalSurface.hxx> |
42cf5bc1 |
31 | #include <Geom_Surface.hxx> |
7fd59977 |
32 | #include <Geom_SurfaceOfLinearExtrusion.hxx> |
42cf5bc1 |
33 | #include <Geom_SurfaceOfRevolution.hxx> |
34 | #include <Geom_ToroidalSurface.hxx> |
35 | #include <Geom_TrimmedCurve.hxx> |
36 | #include <Geom_UndefinedDerivative.hxx> |
37 | #include <Geom_UndefinedValue.hxx> |
38 | #include <gp_GTrsf2d.hxx> |
39 | #include <gp_Pnt.hxx> |
40 | #include <gp_Trsf.hxx> |
41 | #include <gp_Vec.hxx> |
7fd59977 |
42 | #include <Precision.hxx> |
42cf5bc1 |
43 | #include <Standard_ConstructionError.hxx> |
44 | #include <Standard_NoSuchObject.hxx> |
45 | #include <Standard_RangeError.hxx> |
46 | #include <Standard_Type.hxx> |
7fd59977 |
47 | |
7fd59977 |
48 | typedef Geom_RectangularTrimmedSurface RectangularTrimmedSurface; |
7fd59977 |
49 | typedef gp_Ax1 Ax1; |
50 | typedef gp_Ax2 Ax2; |
51 | typedef gp_Pnt Pnt; |
52 | typedef gp_Trsf Trsf; |
53 | typedef gp_Vec Vec; |
54 | |
7fd59977 |
55 | //======================================================================= |
56 | //function : Copy |
57 | //purpose : |
58 | //======================================================================= |
59 | |
60 | Handle(Geom_Geometry) Geom_RectangularTrimmedSurface::Copy () const { |
61 | |
c04c30b3 |
62 | Handle(Geom_RectangularTrimmedSurface) S; |
7fd59977 |
63 | |
64 | if ( isutrimmed && isvtrimmed ) |
65 | S = new RectangularTrimmedSurface (basisSurf, |
66 | utrim1 , utrim2, |
67 | vtrim1 , vtrim2, |
68 | Standard_True , Standard_True ); |
69 | else if ( isutrimmed) |
70 | S = new RectangularTrimmedSurface (basisSurf, |
71 | utrim1 , utrim2, |
72 | Standard_True, Standard_True ); |
73 | else if (isvtrimmed) |
74 | S = new RectangularTrimmedSurface (basisSurf, |
75 | vtrim1 , vtrim2, |
76 | Standard_False , Standard_True ); |
77 | |
78 | return S; |
79 | } |
80 | |
81 | |
82 | //======================================================================= |
83 | //function : Geom_RectangularTrimmedSurface |
84 | //purpose : |
85 | //======================================================================= |
86 | |
87 | Geom_RectangularTrimmedSurface::Geom_RectangularTrimmedSurface ( |
88 | |
c04c30b3 |
89 | const Handle(Geom_Surface)& S, |
7fd59977 |
90 | const Standard_Real U1, |
91 | const Standard_Real U2, |
92 | const Standard_Real V1, |
93 | const Standard_Real V2, |
94 | const Standard_Boolean USense, |
95 | const Standard_Boolean VSense) |
96 | |
97 | : utrim1 (U1), |
98 | vtrim1(V1), |
99 | utrim2 (U2), |
100 | vtrim2 (V2), |
101 | isutrimmed (Standard_True), |
102 | isvtrimmed (Standard_True) |
103 | { |
104 | |
105 | // kill trimmed basis surfaces |
106 | Handle(Geom_RectangularTrimmedSurface) T = |
107 | Handle(Geom_RectangularTrimmedSurface)::DownCast(S); |
108 | if (!T.IsNull()) |
c04c30b3 |
109 | basisSurf = Handle(Geom_Surface)::DownCast(T->BasisSurface()->Copy()); |
7fd59977 |
110 | else |
c04c30b3 |
111 | basisSurf = Handle(Geom_Surface)::DownCast(S->Copy()); |
7fd59977 |
112 | |
113 | Handle(Geom_OffsetSurface) O = |
114 | Handle(Geom_OffsetSurface)::DownCast(basisSurf); |
115 | if (!O.IsNull()) |
116 | { |
117 | Handle(Geom_RectangularTrimmedSurface) S2 = |
118 | new Geom_RectangularTrimmedSurface( O->BasisSurface(),U1,U2, V1, V2, USense, VSense); |
119 | Handle(Geom_OffsetSurface) OS = new Geom_OffsetSurface(S2, O->Offset()); |
c04c30b3 |
120 | basisSurf = Handle(Geom_Surface)::DownCast(OS); |
7fd59977 |
121 | } |
122 | |
123 | SetTrim( U1, U2, V1, V2, USense, VSense); |
124 | } |
125 | |
126 | |
127 | //======================================================================= |
128 | //function : Geom_RectangularTrimmedSurface |
129 | //purpose : |
130 | //======================================================================= |
131 | |
132 | Geom_RectangularTrimmedSurface::Geom_RectangularTrimmedSurface ( |
133 | |
134 | const Handle(Geom_Surface)& S, |
135 | const Standard_Real Param1, |
136 | const Standard_Real Param2, |
137 | const Standard_Boolean UTrim, |
138 | const Standard_Boolean Sense |
139 | ) { |
140 | |
141 | // kill trimmed basis surfaces |
142 | Handle(Geom_RectangularTrimmedSurface) T = |
143 | Handle(Geom_RectangularTrimmedSurface)::DownCast(S); |
144 | if (!T.IsNull()) |
c04c30b3 |
145 | basisSurf = Handle(Geom_Surface)::DownCast(T->BasisSurface()->Copy()); |
7fd59977 |
146 | else |
c04c30b3 |
147 | basisSurf = Handle(Geom_Surface)::DownCast(S->Copy()); |
7fd59977 |
148 | |
149 | Handle(Geom_OffsetSurface) O = |
150 | Handle(Geom_OffsetSurface)::DownCast(basisSurf); |
151 | if (!O.IsNull()) |
152 | { |
153 | Handle(Geom_RectangularTrimmedSurface) S2 = |
154 | new Geom_RectangularTrimmedSurface( O->BasisSurface(),Param1,Param2, UTrim, Sense); |
155 | Handle(Geom_OffsetSurface) OS = new Geom_OffsetSurface(S2, O->Offset()); |
c04c30b3 |
156 | basisSurf = Handle(Geom_Surface)::DownCast(OS); |
7fd59977 |
157 | } |
158 | |
159 | SetTrim(Param1, Param2, UTrim, Sense); |
160 | } |
161 | |
162 | |
163 | //======================================================================= |
164 | //function : SetTrim |
165 | //purpose : |
166 | //======================================================================= |
167 | |
168 | void Geom_RectangularTrimmedSurface::SetTrim (const Standard_Real U1, |
169 | const Standard_Real U2, |
170 | const Standard_Real V1, |
171 | const Standard_Real V2, |
172 | const Standard_Boolean USense, |
173 | const Standard_Boolean VSense ) { |
174 | |
175 | SetTrim( U1, U2, V1, V2, Standard_True, Standard_True, USense, VSense); |
176 | } |
177 | |
178 | |
179 | |
180 | //======================================================================= |
181 | //function : SetTrim |
182 | //purpose : |
183 | //======================================================================= |
184 | |
185 | void Geom_RectangularTrimmedSurface::SetTrim (const Standard_Real Param1, |
186 | const Standard_Real Param2, |
187 | const Standard_Boolean UTrim, |
188 | const Standard_Boolean Sense ) { |
189 | |
190 | // dummy arguments to call general SetTrim |
191 | Standard_Real dummy_a = 0.; |
192 | Standard_Real dummy_b = 0.; |
193 | Standard_Boolean dummy_Sense = Standard_True; |
194 | |
195 | if ( UTrim) { |
196 | SetTrim( Param1 , Param2 , |
197 | dummy_a , dummy_b , |
198 | Standard_True , Standard_False, |
199 | Sense , dummy_Sense ); |
200 | } |
201 | else { |
202 | SetTrim( dummy_a , dummy_b , |
203 | Param1 , Param2 , |
204 | Standard_False, Standard_True, |
205 | dummy_Sense , Sense ); |
206 | } |
207 | } |
208 | |
209 | |
210 | //======================================================================= |
211 | //function : SetTrim |
212 | //purpose : |
213 | //======================================================================= |
214 | |
215 | void Geom_RectangularTrimmedSurface::SetTrim(const Standard_Real U1, |
216 | const Standard_Real U2, |
217 | const Standard_Real V1, |
218 | const Standard_Real V2, |
219 | const Standard_Boolean UTrim, |
220 | const Standard_Boolean VTrim, |
221 | const Standard_Boolean USense, |
222 | const Standard_Boolean VSense) { |
223 | |
224 | Standard_Boolean UsameSense = Standard_True; |
225 | Standard_Boolean VsameSense = Standard_True; |
226 | Standard_Real Udeb, Ufin, Vdeb, Vfin; |
227 | |
228 | basisSurf->Bounds(Udeb, Ufin, Vdeb, Vfin); |
229 | |
230 | // Trimming the U-Direction |
231 | isutrimmed = UTrim; |
232 | if (!UTrim) { |
233 | utrim1 = Udeb; |
234 | utrim2 = Ufin; |
235 | } |
236 | else { |
237 | if ( U1 == U2) |
238 | Standard_ConstructionError::Raise |
239 | ("Geom_RectangularTrimmedSurface::U1==U2"); |
240 | |
241 | if (basisSurf->IsUPeriodic()) { |
242 | UsameSense = USense; |
243 | |
244 | // set uTrim1 in the range Udeb , Ufin |
245 | // set uTrim2 in the range uTrim1 , uTrim1 + Period() |
246 | utrim1 = U1; |
247 | utrim2 = U2; |
248 | ElCLib::AdjustPeriodic(Udeb, Ufin, |
249 | Min(Abs(utrim2-utrim1)/2,Precision::PConfusion()), |
250 | utrim1, utrim2); |
251 | } |
252 | else { |
253 | if (U1 < U2) { |
254 | UsameSense = USense; |
255 | utrim1 = U1; |
256 | utrim2 = U2; |
257 | } |
258 | else { |
259 | UsameSense = !USense; |
260 | utrim1 = U2; |
261 | utrim2 = U1; |
262 | } |
263 | |
264 | if ((Udeb-utrim1 > Precision::PConfusion()) || |
265 | (utrim2-Ufin > Precision::PConfusion())) |
266 | Standard_ConstructionError::Raise |
267 | ("Geom_RectangularTrimmedSurface::U parameters out of range"); |
268 | |
269 | } |
270 | } |
271 | |
272 | // Trimming the V-Direction |
273 | isvtrimmed = VTrim; |
274 | if (!VTrim) { |
275 | vtrim1 = Vdeb; |
276 | vtrim2 = Vfin; |
277 | } |
278 | else { |
279 | if ( V1 == V2) |
280 | Standard_ConstructionError::Raise |
281 | ("Geom_RectangularTrimmedSurface::V1==V2"); |
282 | |
283 | if (basisSurf->IsVPeriodic()) { |
284 | VsameSense = VSense; |
285 | |
286 | // set vTrim1 in the range Vdeb , Vfin |
287 | // set vTrim2 in the range vTrim1 , vTrim1 + Period() |
288 | vtrim1 = V1; |
289 | vtrim2 = V2; |
290 | ElCLib::AdjustPeriodic(Vdeb, Vfin, |
291 | Min(Abs(vtrim2-vtrim1)/2,Precision::PConfusion()), |
292 | vtrim1, vtrim2); |
293 | } |
294 | else { |
295 | if (V1 < V2) { |
296 | VsameSense = VSense; |
297 | vtrim1 = V1; |
298 | vtrim2 = V2; |
299 | } |
300 | else { |
301 | VsameSense = !VSense; |
302 | vtrim1 = V2; |
303 | vtrim2 = V1; |
304 | } |
305 | |
306 | if ((Vdeb-vtrim1 > Precision::PConfusion()) || |
307 | (vtrim2-Vfin > Precision::PConfusion())) |
308 | Standard_ConstructionError::Raise |
309 | ("Geom_RectangularTrimmedSurface::V parameters out of range"); |
310 | |
311 | } |
312 | } |
313 | |
314 | if (!UsameSense) UReverse(); |
315 | if (!VsameSense) VReverse(); |
316 | } |
317 | |
318 | |
319 | //======================================================================= |
320 | //function : UReverse |
321 | //purpose : |
322 | //======================================================================= |
323 | |
324 | void Geom_RectangularTrimmedSurface::UReverse () |
325 | { |
326 | Standard_Real U1 = basisSurf->UReversedParameter(utrim2); |
327 | Standard_Real U2 = basisSurf->UReversedParameter(utrim1); |
328 | basisSurf->UReverse(); |
329 | SetTrim(U1,U2,vtrim1,vtrim2, |
330 | isutrimmed,isvtrimmed, |
331 | Standard_True,Standard_True); |
332 | } |
333 | |
334 | |
335 | //======================================================================= |
336 | //function : UReversedParameter |
337 | //purpose : |
338 | //======================================================================= |
339 | |
340 | Standard_Real Geom_RectangularTrimmedSurface::UReversedParameter( const Standard_Real U) const { |
341 | |
342 | return basisSurf->UReversedParameter(U); |
343 | } |
344 | |
345 | |
346 | //======================================================================= |
347 | //function : VReverse |
348 | //purpose : |
349 | //======================================================================= |
350 | |
351 | void Geom_RectangularTrimmedSurface::VReverse () |
352 | { |
353 | Standard_Real V1 = basisSurf->VReversedParameter(vtrim2); |
354 | Standard_Real V2 = basisSurf->VReversedParameter(vtrim1); |
355 | basisSurf->VReverse(); |
356 | SetTrim(utrim1,utrim2,V1,V2, |
357 | isutrimmed,isvtrimmed, |
358 | Standard_True,Standard_True); |
359 | } |
360 | |
361 | |
362 | //======================================================================= |
363 | //function : VReversedParameter |
364 | //purpose : |
365 | //======================================================================= |
366 | |
367 | Standard_Real Geom_RectangularTrimmedSurface::VReversedParameter( const Standard_Real V) const { |
368 | |
369 | return basisSurf->VReversedParameter( V); |
370 | } |
371 | |
372 | |
373 | //======================================================================= |
374 | //function : BasisSurface |
375 | //purpose : |
376 | //======================================================================= |
377 | |
c04c30b3 |
378 | Handle(Geom_Surface) Geom_RectangularTrimmedSurface::BasisSurface () const |
7fd59977 |
379 | { |
380 | return basisSurf; |
381 | } |
382 | |
383 | |
384 | //======================================================================= |
385 | //function : Continuity |
386 | //purpose : |
387 | //======================================================================= |
388 | |
389 | GeomAbs_Shape Geom_RectangularTrimmedSurface::Continuity () const { |
390 | |
391 | return basisSurf->Continuity(); |
392 | } |
393 | |
394 | |
395 | //======================================================================= |
396 | //function : D0 |
397 | //purpose : |
398 | //======================================================================= |
399 | |
400 | void Geom_RectangularTrimmedSurface::D0 |
401 | (const Standard_Real U, const Standard_Real V, |
402 | Pnt& P ) const { |
403 | |
404 | basisSurf->D0 (U, V, P); |
405 | } |
406 | |
407 | |
408 | //======================================================================= |
409 | //function : D1 |
410 | //purpose : |
411 | //======================================================================= |
412 | |
413 | void Geom_RectangularTrimmedSurface::D1 |
414 | (const Standard_Real U, const Standard_Real V, |
415 | Pnt& P, |
416 | Vec& D1U, Vec& D1V) const { |
417 | |
418 | basisSurf->D1 (U, V, P, D1U, D1V); |
419 | } |
420 | |
421 | |
422 | //======================================================================= |
423 | //function : D2 |
424 | //purpose : |
425 | //======================================================================= |
426 | |
427 | void Geom_RectangularTrimmedSurface::D2 |
428 | (const Standard_Real U, const Standard_Real V, |
429 | Pnt& P, |
430 | Vec& D1U, Vec& D1V, |
431 | Vec& D2U, Vec& D2V, Vec& D2UV) const { |
432 | |
433 | basisSurf->D2 (U, V, P, D1U, D1V, D2U, D2V, D2UV); |
434 | } |
435 | |
436 | |
437 | //======================================================================= |
438 | //function : D3 |
439 | //purpose : |
440 | //======================================================================= |
441 | |
442 | void Geom_RectangularTrimmedSurface::D3 |
443 | (const Standard_Real U, const Standard_Real V, |
444 | Pnt& P, |
445 | Vec& D1U, Vec& D1V, |
446 | Vec& D2U, Vec& D2V, Vec& D2UV, |
447 | Vec& D3U, Vec& D3V, Vec& D3UUV, Vec& D3UVV) const { |
448 | |
449 | basisSurf->D3 (U, V, P, D1U, D1V, D2U, D2V, D2UV, D3U, D3V, D3UUV, D3UVV); |
450 | } |
451 | |
452 | |
453 | //======================================================================= |
454 | //function : DN |
455 | //purpose : |
456 | //======================================================================= |
457 | |
458 | Vec Geom_RectangularTrimmedSurface::DN |
459 | (const Standard_Real U , const Standard_Real V, |
460 | const Standard_Integer Nu, const Standard_Integer Nv) const { |
461 | |
462 | return basisSurf->DN (U, V, Nu, Nv); |
463 | } |
464 | |
465 | |
466 | //======================================================================= |
467 | //function : Bounds |
468 | //purpose : |
469 | //======================================================================= |
470 | |
471 | void Geom_RectangularTrimmedSurface::Bounds (Standard_Real& U1, |
472 | Standard_Real& U2, |
473 | Standard_Real& V1, |
474 | Standard_Real& V2) const { |
475 | |
476 | U1 = utrim1; |
477 | U2 = utrim2; |
478 | V1 = vtrim1; |
479 | V2 = vtrim2; |
480 | } |
481 | |
482 | |
483 | //======================================================================= |
484 | //function : UIso |
485 | //purpose : |
486 | //======================================================================= |
487 | |
488 | Handle(Geom_Curve) Geom_RectangularTrimmedSurface::UIso (const Standard_Real U) const { |
489 | |
490 | Handle(Geom_Curve) C = basisSurf->UIso (U); |
491 | |
492 | if ( isvtrimmed) { |
493 | Handle(Geom_TrimmedCurve) Ct; |
494 | Ct = new Geom_TrimmedCurve (C, vtrim1, vtrim2, Standard_True); |
495 | return Ct; |
496 | } |
497 | else { |
498 | return C; |
499 | } |
500 | } |
501 | |
502 | |
503 | //======================================================================= |
504 | //function : VIso |
505 | //purpose : |
506 | //======================================================================= |
507 | |
508 | Handle(Geom_Curve) Geom_RectangularTrimmedSurface::VIso (const Standard_Real V) const { |
509 | |
510 | Handle(Geom_Curve) C = basisSurf->VIso (V); |
511 | |
512 | if ( isutrimmed) { |
513 | Handle(Geom_TrimmedCurve) Ct; |
514 | Ct = new Geom_TrimmedCurve (C, utrim1, utrim2, Standard_True); |
515 | return Ct; |
516 | } |
517 | else { |
518 | return C; |
519 | } |
520 | } |
521 | |
522 | |
523 | //======================================================================= |
524 | //function : IsCNu |
525 | //purpose : |
526 | //======================================================================= |
527 | |
528 | Standard_Boolean Geom_RectangularTrimmedSurface::IsCNu (const Standard_Integer N) const { |
529 | |
530 | Standard_RangeError_Raise_if (N < 0," "); |
531 | return basisSurf->IsCNu (N); |
532 | } |
533 | |
534 | |
535 | //======================================================================= |
536 | //function : IsCNv |
537 | //purpose : |
538 | //======================================================================= |
539 | |
540 | Standard_Boolean Geom_RectangularTrimmedSurface::IsCNv (const Standard_Integer N) const { |
541 | |
542 | Standard_RangeError_Raise_if (N < 0," "); |
543 | return basisSurf->IsCNv (N); |
544 | } |
545 | |
546 | |
547 | //======================================================================= |
548 | //function : Transform |
549 | //purpose : |
550 | //======================================================================= |
551 | |
552 | void Geom_RectangularTrimmedSurface::Transform (const Trsf& T) |
553 | { |
554 | basisSurf->Transform (T); |
555 | basisSurf->TransformParameters(utrim1,vtrim1,T); |
556 | basisSurf->TransformParameters(utrim2,vtrim2,T); |
557 | } |
558 | |
559 | |
560 | //======================================================================= |
561 | //function : IsUPeriodic |
562 | //purpose : |
563 | // 24/11/98: pmn : Compare la periode a la longeur de l'intervalle |
564 | //======================================================================= |
565 | |
566 | Standard_Boolean Geom_RectangularTrimmedSurface::IsUPeriodic () const |
567 | { |
568 | if (basisSurf->IsUPeriodic() && !isutrimmed) |
569 | return Standard_True; |
570 | return Standard_False; |
571 | } |
572 | |
573 | |
574 | //======================================================================= |
575 | //function : UPeriod |
576 | //purpose : |
577 | //======================================================================= |
578 | |
579 | Standard_Real Geom_RectangularTrimmedSurface::UPeriod() const |
580 | { |
581 | return basisSurf->UPeriod(); |
582 | } |
583 | |
584 | |
585 | //======================================================================= |
586 | //function : IsVPeriodic |
587 | //purpose : |
588 | //======================================================================= |
589 | |
590 | Standard_Boolean Geom_RectangularTrimmedSurface::IsVPeriodic () const |
591 | { |
592 | if (basisSurf->IsVPeriodic() && !isvtrimmed) |
593 | return Standard_True; |
594 | return Standard_False; |
595 | } |
596 | |
597 | |
598 | //======================================================================= |
599 | //function : VPeriod |
600 | //purpose : |
601 | //======================================================================= |
602 | |
603 | Standard_Real Geom_RectangularTrimmedSurface::VPeriod() const |
604 | { |
605 | return basisSurf->VPeriod(); |
606 | } |
607 | |
608 | |
609 | //======================================================================= |
610 | //function : IsUClosed |
611 | //purpose : |
612 | //======================================================================= |
613 | |
614 | Standard_Boolean Geom_RectangularTrimmedSurface::IsUClosed () const { |
615 | |
616 | if (isutrimmed) |
617 | return Standard_False; |
618 | else |
619 | return basisSurf->IsUClosed(); |
620 | } |
621 | |
622 | |
623 | //======================================================================= |
624 | //function : IsVClosed |
625 | //purpose : |
626 | //======================================================================= |
627 | |
628 | Standard_Boolean Geom_RectangularTrimmedSurface::IsVClosed () const { |
629 | |
630 | if (isvtrimmed) |
631 | return Standard_False; |
632 | else |
633 | return basisSurf->IsVClosed(); |
634 | } |
635 | |
636 | //======================================================================= |
637 | //function : TransformParameters |
638 | //purpose : |
639 | //======================================================================= |
640 | |
641 | void Geom_RectangularTrimmedSurface::TransformParameters(Standard_Real& U, |
642 | Standard_Real& V, |
643 | const gp_Trsf& T) |
644 | const |
645 | { |
646 | basisSurf->TransformParameters(U,V,T); |
647 | } |
648 | |
649 | //======================================================================= |
650 | //function : ParametricTransformation |
651 | //purpose : |
652 | //======================================================================= |
653 | |
654 | gp_GTrsf2d Geom_RectangularTrimmedSurface::ParametricTransformation |
655 | (const gp_Trsf& T) const |
656 | { |
657 | return basisSurf->ParametricTransformation(T); |
658 | } |
659 | |