1 // Copyright (c) 1999-2014 OPEN CASCADE SAS
3 // This file is part of Open CASCADE Technology software library.
5 // This library is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU Lesser General Public License version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
15 #include <Adaptor3d_HCurve.hxx>
16 #include <Adaptor3d_HIsoCurve.hxx>
17 #include <Adaptor3d_HSurface.hxx>
18 #include <Adaptor3d_IsoCurve.hxx>
19 #include <BSplCLib.hxx>
20 #include <BSplSLib.hxx>
23 #include <Geom_BezierCurve.hxx>
24 #include <Geom_BezierSurface.hxx>
25 #include <Geom_BSplineCurve.hxx>
26 #include <Geom_BSplineSurface.hxx>
27 #include <GeomAbs_SurfaceType.hxx>
29 #include <gp_Circ.hxx>
30 #include <gp_Elips.hxx>
31 #include <gp_Hypr.hxx>
33 #include <gp_Parab.hxx>
36 #include <Precision.hxx>
37 #include <Standard_DomainError.hxx>
38 #include <Standard_NoSuchObject.hxx>
39 #include <Standard_NotImplemented.hxx>
40 #include <Standard_OutOfRange.hxx>
41 #include <TColgp_Array1OfPnt.hxx>
42 #include <TColgp_Array2OfPnt.hxx>
44 //=======================================================================
45 //function : Adaptor3d_IsoCurve
47 //=======================================================================
48 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve()
49 : myIso (GeomAbs_NoneIso),
56 //=======================================================================
57 //function : Adaptor3d_IsoCurve
59 //=======================================================================
61 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve(const Handle(Adaptor3d_HSurface)& S)
63 myIso (GeomAbs_NoneIso),
70 //=======================================================================
71 //function : Adaptor3d_IsoCurve
73 //=======================================================================
75 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve(const Handle(Adaptor3d_HSurface)& S,
76 const GeomAbs_IsoType theIso,
77 const Standard_Real theParam)
79 myIso (GeomAbs_NoneIso),
84 Load(theIso, theParam);
87 //=======================================================================
88 //function : Adaptor3d_IsoCurve
90 //=======================================================================
92 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve(const Handle(Adaptor3d_HSurface)& theS,
93 const GeomAbs_IsoType theIso,
94 const Standard_Real theParam,
95 const Standard_Real theWFirst,
96 const Standard_Real theWLast)
101 myParameter(theParam)
103 Load(theIso, theParam, theWFirst, theWLast);
106 //=======================================================================
109 //=======================================================================
111 void Adaptor3d_IsoCurve::Load(const Handle(Adaptor3d_HSurface)& S )
114 myIso = GeomAbs_NoneIso;
117 //=======================================================================
120 //=======================================================================
122 void Adaptor3d_IsoCurve::Load(const GeomAbs_IsoType Iso,
123 const Standard_Real Param)
129 mySurface->FirstVParameter(),
130 mySurface->LastVParameter());
135 mySurface->FirstUParameter(),
136 mySurface->LastUParameter());
139 case GeomAbs_NoneIso:
140 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
145 //=======================================================================
148 //=======================================================================
150 void Adaptor3d_IsoCurve::Load(const GeomAbs_IsoType Iso,
151 const Standard_Real Param,
152 const Standard_Real WFirst,
153 const Standard_Real WLast)
161 if (myIso == GeomAbs_IsoU) {
162 myFirst = Max(myFirst, mySurface->FirstVParameter());
163 myLast = Min(myLast, mySurface->LastVParameter());
166 myFirst = Max(myFirst, mySurface->FirstUParameter());
167 myLast = Min(myLast, mySurface->LastUParameter());
170 // Adjust the parameters on periodic surfaces
172 Standard_Real dummy = myParameter;
174 if (mySurface->IsUPeriodic()) {
176 if (myIso == GeomAbs_IsoU) {
177 ElCLib::AdjustPeriodic
178 (mySurface->FirstUParameter(),
179 mySurface->FirstUParameter()+
180 mySurface->UPeriod(),
181 mySurface->UResolution(Precision::Confusion()),
185 ElCLib::AdjustPeriodic
186 (mySurface->FirstUParameter(),
187 mySurface->FirstUParameter()+
188 mySurface->UPeriod(),
189 mySurface->UResolution(Precision::Confusion()),
194 if (mySurface->IsVPeriodic()) {
196 if (myIso == GeomAbs_IsoV) {
197 ElCLib::AdjustPeriodic
198 (mySurface->FirstVParameter(),
199 mySurface->FirstVParameter() +
200 mySurface->VPeriod(),
201 mySurface->VResolution(Precision::Confusion()),
205 ElCLib::AdjustPeriodic
206 (mySurface->FirstVParameter(),
207 mySurface->FirstVParameter() +
208 mySurface->VPeriod(),
209 mySurface->VResolution(Precision::Confusion()),
216 //=======================================================================
217 //function : Continuity
219 //=======================================================================
221 GeomAbs_Shape Adaptor3d_IsoCurve::Continuity() const
225 return mySurface->VContinuity();
227 return mySurface->UContinuity();
228 case GeomAbs_NoneIso:
233 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
237 //=======================================================================
238 //function : NbIntervals
240 //=======================================================================
242 Standard_Integer Adaptor3d_IsoCurve::NbIntervals(const GeomAbs_Shape S) const
244 if (myIso == GeomAbs_NoneIso) Standard_NoSuchObject::Raise();
245 Standard_Boolean UIso = (myIso == GeomAbs_IsoU);
247 Standard_Integer nbInter = UIso ?
248 mySurface->NbVIntervals(S) :
249 mySurface->NbUIntervals(S);
251 TColStd_Array1OfReal T(1,nbInter+1);
254 mySurface->VIntervals(T,S);
256 mySurface->UIntervals(T,S);
258 if(nbInter == 1) return nbInter;
260 Standard_Integer first = 1;
261 while (T(first) <= myFirst) first++;
262 Standard_Integer last = nbInter+1;
263 while (T(last) >= myLast) last--;
264 return (last - first + 2);
267 //=======================================================================
268 //function : Intervals
270 //=======================================================================
272 void Adaptor3d_IsoCurve::Intervals(TColStd_Array1OfReal& TI,
273 const GeomAbs_Shape S) const
275 if (myIso == GeomAbs_NoneIso) Standard_NoSuchObject::Raise();
276 Standard_Boolean UIso = (myIso == GeomAbs_IsoU);
278 Standard_Integer nbInter = UIso ?
279 mySurface->NbVIntervals(S) :
280 mySurface->NbUIntervals(S);
282 TColStd_Array1OfReal T(1,nbInter+1);
285 mySurface->VIntervals(T,S);
287 mySurface->UIntervals(T,S);
290 TI(TI.Lower()) = myFirst ;
291 TI(TI.Lower() + 1) = myLast ;
295 Standard_Integer first = 1;
296 while (T(first) <= myFirst) first++;
297 Standard_Integer last = nbInter+1;
298 while (T(last) >= myLast) last--;
300 Standard_Integer i = TI.Lower(), j;
301 for (j = first-1; j <= last+1; j++) {
305 TI(TI.Lower()) = myFirst ;
306 TI(TI.Lower() + last-first + 2) = myLast ;
309 //=======================================================================
312 //=======================================================================
314 Handle(Adaptor3d_HCurve) Adaptor3d_IsoCurve::Trim
315 (const Standard_Real First,
316 const Standard_Real Last,
317 const Standard_Real) const
319 Handle(Adaptor3d_HIsoCurve) HI = new Adaptor3d_HIsoCurve(*this);
320 ((Adaptor3d_IsoCurve *)&(HI->Curve()))->Load(myIso,myParameter,First,Last);
324 //=======================================================================
325 //function : IsClosed
327 //=======================================================================
329 Standard_Boolean Adaptor3d_IsoCurve::IsClosed() const
333 return mySurface->IsVClosed();
335 return mySurface->IsUClosed();
336 case GeomAbs_NoneIso:
341 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
342 return Standard_False;
345 //=======================================================================
346 //function : IsPeriodic
348 //=======================================================================
350 Standard_Boolean Adaptor3d_IsoCurve::IsPeriodic() const
354 return mySurface->IsVPeriodic();
356 return mySurface->IsUPeriodic();
357 case GeomAbs_NoneIso:
362 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
363 return Standard_False;
366 //=======================================================================
369 //=======================================================================
371 Standard_Real Adaptor3d_IsoCurve::Period() const
375 return mySurface->VPeriod();
377 return mySurface->UPeriod();
378 case GeomAbs_NoneIso:
383 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
387 //=======================================================================
390 //=======================================================================
392 gp_Pnt Adaptor3d_IsoCurve::Value(const Standard_Real T) const
397 return mySurface->Value(myParameter,T);
400 return mySurface->Value(T,myParameter);
402 case GeomAbs_NoneIso:
404 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
413 //=======================================================================
416 //=======================================================================
418 void Adaptor3d_IsoCurve::D0(const Standard_Real T, gp_Pnt& P) const
423 mySurface->D0(myParameter,T,P);
427 mySurface->D0(T,myParameter,P);
430 case GeomAbs_NoneIso:
431 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
436 //=======================================================================
439 //=======================================================================
441 void Adaptor3d_IsoCurve::D1(const Standard_Real T, gp_Pnt& P, gp_Vec& V) const
447 mySurface->D1(myParameter,T,P,dummy,V);
451 mySurface->D1(T,myParameter,P,V,dummy);
454 case GeomAbs_NoneIso:
455 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
460 //=======================================================================
463 //=======================================================================
465 void Adaptor3d_IsoCurve::D2(const Standard_Real T, gp_Pnt& P,
466 gp_Vec& V1, gp_Vec& V2) const
468 gp_Vec dummy1,dummy2,dummy3;
472 mySurface->D2(myParameter,T,P,
473 dummy1,V1,dummy2,V2,dummy3);
476 mySurface->D2(T,myParameter,
477 P,V1,dummy1,V2,dummy2,dummy3);
479 case GeomAbs_NoneIso:
480 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
485 //=======================================================================
488 //=======================================================================
490 void Adaptor3d_IsoCurve::D3(const Standard_Real T, gp_Pnt& P,
491 gp_Vec& V1, gp_Vec& V2, gp_Vec& V3) const
497 mySurface->D3(myParameter,T,P,dummy[0],V1,dummy[1],
498 V2,dummy[2],dummy[3],V3,dummy[4],dummy[5]);
502 mySurface->D3(T,myParameter,P,V1,dummy[0],V2,dummy[1],
503 dummy[2],V3,dummy[3],dummy[4],dummy[5]);
506 case GeomAbs_NoneIso:
507 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
512 //=======================================================================
515 //=======================================================================
517 gp_Vec Adaptor3d_IsoCurve::DN(const Standard_Real T,
518 const Standard_Integer N) const
523 return mySurface->DN(myParameter,T,0,N);
525 return mySurface->DN(T,myParameter,N,0);
526 case GeomAbs_NoneIso:
528 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
538 //=======================================================================
539 //function : Resolution
541 //=======================================================================
543 Standard_Real Adaptor3d_IsoCurve::Resolution(const Standard_Real R3D) const
545 // Peut-on faire mieux ??
546 return Precision::Parametric(R3D);
551 //=======================================================================
554 //=======================================================================
556 GeomAbs_CurveType Adaptor3d_IsoCurve::GetType() const {
558 switch (mySurface->GetType()) {
563 case GeomAbs_Cylinder:
571 return GeomAbs_Circle;
573 case GeomAbs_NoneIso:
575 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
577 return GeomAbs_OtherCurve;
585 return GeomAbs_Circle;
587 case GeomAbs_BezierSurface:
588 return GeomAbs_BezierCurve;
590 case GeomAbs_BSplineSurface:
591 return GeomAbs_BSplineCurve;
593 case GeomAbs_SurfaceOfRevolution:
597 return mySurface->BasisCurve()->GetType();
600 return GeomAbs_Circle;
602 case GeomAbs_NoneIso:
603 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
605 return GeomAbs_OtherCurve;
611 case GeomAbs_SurfaceOfExtrusion:
618 return mySurface->BasisCurve()->GetType();
620 case GeomAbs_NoneIso:
621 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
623 return GeomAbs_OtherCurve;
629 return GeomAbs_OtherCurve;
633 return GeomAbs_OtherCurve;
636 //=======================================================================
639 //=======================================================================
641 gp_Lin Adaptor3d_IsoCurve::Line() const
649 //=======================================================================
650 //function : computeHR
652 //=======================================================================
654 static void computeHR(const gp_Ax3& axes,
657 Standard_Real& radius)
659 gp_Vec V(axes.Location(),P);
660 h = V * axes.Direction();
661 radius = V * axes.XDirection();
664 //=======================================================================
667 //=======================================================================
669 gp_Circ Adaptor3d_IsoCurve::Circle() const
672 Standard_Real radius,h = 0.;
674 switch (mySurface->GetType()) {
676 case GeomAbs_Cylinder:
678 gp_Cylinder cyl = mySurface->Cylinder();
684 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:UIso");
689 return ElSLib::CylinderVIso(cyl.Position(),cyl.Radius(),myParameter);
691 case GeomAbs_NoneIso:
693 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
702 gp_Cone cone = mySurface->Cone();
708 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:UIso");
713 return ElSLib::ConeVIso(cone.Position(),cone.RefRadius(),
714 cone.SemiAngle(),myParameter);
716 case GeomAbs_NoneIso:
718 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
727 gp_Sphere sph = mySurface->Sphere();
733 return ElSLib::SphereUIso(sph.Position(),sph.Radius(),myParameter);
738 return ElSLib::SphereVIso(sph.Position(),sph.Radius(),myParameter);
741 case GeomAbs_NoneIso:
743 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
750 case GeomAbs_Torus: {
751 gp_Torus tor = mySurface->Torus();
757 return ElSLib::TorusUIso(tor.Position(),tor.MajorRadius(),
758 tor.MinorRadius(),myParameter);
763 return ElSLib::TorusVIso(tor.Position(),tor.MajorRadius(),
764 tor.MinorRadius(),myParameter);
767 case GeomAbs_NoneIso:
769 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
776 case GeomAbs_SurfaceOfRevolution:
778 if (myIso == GeomAbs_IsoV) {
779 const gp_Pnt aVal0 = Value (0.0);
780 gp_Ax1 Ax1 = mySurface->AxeOfRevolution();
781 if (gp_Lin (Ax1).Contains (aVal0, Precision::Confusion())) {
782 return gp_Circ(gp_Ax2(aVal0, Ax1.Direction()),0);
785 gp_Vec DX(Ax1.Location(), aVal0);
786 axes = gp_Ax3(Ax1.Location(), Ax1.Direction(), DX);
787 computeHR(axes,aVal0,h,radius);
788 gp_Vec VT = axes.Direction();
789 axes.Translate(VT * h);
790 return gp_Circ(axes.Ax2(),radius);
794 return mySurface->BasisCurve()->Circle().Rotated
795 (mySurface->AxeOfRevolution(),myParameter);
799 case GeomAbs_SurfaceOfExtrusion: {
800 return mySurface->BasisCurve()->Circle().Translated
801 (myParameter * gp_Vec(mySurface->Direction()));
805 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:Circle");
814 //=======================================================================
817 //=======================================================================
819 gp_Elips Adaptor3d_IsoCurve::Ellipse() const
821 switch (mySurface->GetType()) {
823 case GeomAbs_SurfaceOfExtrusion: {
824 return mySurface->BasisCurve()->Ellipse().Translated
825 (myParameter * gp_Vec(mySurface->Direction()));
829 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:Ellipse");
835 //=======================================================================
836 //function : Hyperbola
838 //=======================================================================
840 gp_Hypr Adaptor3d_IsoCurve::Hyperbola() const
842 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:Hyperbola");
846 //=======================================================================
847 //function : Parabola
849 //=======================================================================
851 gp_Parab Adaptor3d_IsoCurve::Parabola() const
853 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:Parabola");
857 //=======================================================================
860 //=======================================================================
862 Standard_Integer Adaptor3d_IsoCurve::Degree() const
864 Standard_Integer degree = 0 ;
865 GeomAbs_SurfaceType type = mySurface->GetType() ;
867 case GeomAbs_BezierSurface:
868 case GeomAbs_BSplineSurface:
872 degree = mySurface->VDegree() ;
875 degree = mySurface->UDegree() ;
878 case GeomAbs_NoneIso:
880 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
884 case GeomAbs_SurfaceOfRevolution:
888 degree = mySurface->BasisCurve()->Degree();
891 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
895 case GeomAbs_SurfaceOfExtrusion:
899 degree = mySurface->BasisCurve()->Degree();
902 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
907 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
913 //=======================================================================
914 //function : IsRational
916 //=======================================================================
918 Standard_Boolean Adaptor3d_IsoCurve::IsRational() const
920 Standard_Integer is_rational = Standard_False ;
921 GeomAbs_SurfaceType type = mySurface->GetType() ;
923 case GeomAbs_BezierSurface:
924 case GeomAbs_BSplineSurface:
928 is_rational = mySurface->IsVRational() ;
931 is_rational = mySurface->IsURational() ;
934 case GeomAbs_NoneIso:
936 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
940 case GeomAbs_SurfaceOfRevolution:
944 is_rational = mySurface->BasisCurve()->IsRational();
947 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
951 case GeomAbs_SurfaceOfExtrusion:
955 is_rational = mySurface->BasisCurve()->IsRational();
958 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
963 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
969 //=======================================================================
972 //=======================================================================
974 Standard_Integer Adaptor3d_IsoCurve::NbPoles() const
976 Standard_Integer nb_poles = 0 ;
977 GeomAbs_SurfaceType type = mySurface->GetType() ;
979 case GeomAbs_BezierSurface:
980 case GeomAbs_BSplineSurface:
983 nb_poles = mySurface->NbVPoles() ;
986 nb_poles = mySurface->NbUPoles() ;
989 case GeomAbs_NoneIso:
991 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
994 case GeomAbs_SurfaceOfRevolution:
999 nb_poles = mySurface->BasisCurve()->NbPoles();
1003 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
1007 case GeomAbs_SurfaceOfExtrusion:
1012 nb_poles = mySurface->BasisCurve()->NbPoles();
1016 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
1022 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
1028 //=======================================================================
1029 //function : NbKnots
1031 //=======================================================================
1033 Standard_Integer Adaptor3d_IsoCurve::NbKnots() const
1035 Standard_Integer nb_knots = 0 ;
1036 GeomAbs_SurfaceType type = mySurface->GetType() ;
1038 case GeomAbs_BSplineSurface:
1042 nb_knots = mySurface->NbVKnots() ;
1045 nb_knots = mySurface->NbUKnots() ;
1048 case GeomAbs_NoneIso:
1050 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
1054 case GeomAbs_SurfaceOfRevolution:
1059 nb_knots = mySurface->BasisCurve()->NbKnots() ;
1063 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
1067 case GeomAbs_SurfaceOfExtrusion:
1072 nb_knots = mySurface->BasisCurve()->NbKnots() ;
1076 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
1081 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
1087 //=======================================================================
1090 //=======================================================================
1092 Handle(Geom_BezierCurve) Adaptor3d_IsoCurve::Bezier() const
1094 Handle(Geom_BezierCurve) C;
1095 if (mySurface->GetType() == GeomAbs_SurfaceOfRevolution) {
1096 C = mySurface->BasisCurve()->Bezier();
1097 C = Handle(Geom_BezierCurve)::DownCast(C->Copy());
1098 C->Rotate(mySurface->AxeOfRevolution(),myParameter);
1100 else if (mySurface->GetType() == GeomAbs_SurfaceOfExtrusion) {
1101 C = mySurface->BasisCurve()->Bezier();
1102 C = Handle(Geom_BezierCurve)::DownCast(C->Copy());
1103 C->Translate(myParameter * gp_Vec(mySurface->Direction()));
1105 else if (myIso == GeomAbs_IsoU) {
1106 C = Handle(Geom_BezierCurve)::DownCast
1107 (mySurface->Bezier()->UIso(myParameter)) ;
1110 C = Handle(Geom_BezierCurve)::DownCast
1111 (mySurface->Bezier()->VIso(myParameter));
1113 // C->Segment(myFirst,myLast);
1117 //=======================================================================
1118 //function : BSpline
1120 //=======================================================================
1122 Handle(Geom_BSplineCurve) Adaptor3d_IsoCurve::BSpline() const
1124 Handle(Geom_BSplineCurve) C;
1125 if (mySurface->GetType() == GeomAbs_SurfaceOfRevolution) {
1126 C = mySurface->BasisCurve()->BSpline();
1127 C = Handle(Geom_BSplineCurve)::DownCast(C->Copy());
1128 C->Rotate(mySurface->AxeOfRevolution(),myParameter);
1130 else if (mySurface->GetType() == GeomAbs_SurfaceOfExtrusion) {
1131 C = mySurface->BasisCurve()->BSpline();
1132 C = Handle(Geom_BSplineCurve)::DownCast(C->Copy());
1133 C->Translate(myParameter * gp_Vec(mySurface->Direction()));
1135 else if (myIso == GeomAbs_IsoU) {
1136 C = Handle(Geom_BSplineCurve)::DownCast
1137 (mySurface->BSpline()->UIso(myParameter)) ;
1140 C = Handle(Geom_BSplineCurve)::DownCast
1141 (mySurface->BSpline()->VIso(myParameter));
1143 // C->Segment(myFirst,myLast);