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.
14 #include <Adaptor3d_IsoCurve.hxx>
16 #include <Adaptor3d_Curve.hxx>
17 #include <Adaptor3d_Surface.hxx>
20 #include <Geom_BezierCurve.hxx>
21 #include <Geom_BezierSurface.hxx>
22 #include <Geom_BSplineCurve.hxx>
23 #include <Geom_BSplineSurface.hxx>
24 #include <GeomAbs_SurfaceType.hxx>
26 #include <gp_Circ.hxx>
27 #include <gp_Elips.hxx>
28 #include <gp_Hypr.hxx>
30 #include <gp_Parab.hxx>
33 #include <Precision.hxx>
34 #include <Standard_NoSuchObject.hxx>
35 #include <Standard_NotImplemented.hxx>
37 IMPLEMENT_STANDARD_RTTIEXT(Adaptor3d_IsoCurve, Adaptor3d_Curve)
39 //=======================================================================
40 //function : Adaptor3d_IsoCurve
42 //=======================================================================
43 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve()
44 : myIso (GeomAbs_NoneIso),
51 //=======================================================================
52 //function : Adaptor3d_IsoCurve
54 //=======================================================================
56 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve(const Handle(Adaptor3d_Surface)& S)
58 myIso (GeomAbs_NoneIso),
65 //=======================================================================
66 //function : Adaptor3d_IsoCurve
68 //=======================================================================
70 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve(const Handle(Adaptor3d_Surface)& S,
71 const GeomAbs_IsoType theIso,
72 const Standard_Real theParam)
74 myIso (GeomAbs_NoneIso),
79 Load(theIso, theParam);
82 //=======================================================================
83 //function : Adaptor3d_IsoCurve
85 //=======================================================================
87 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve(const Handle(Adaptor3d_Surface)& theS,
88 const GeomAbs_IsoType theIso,
89 const Standard_Real theParam,
90 const Standard_Real theWFirst,
91 const Standard_Real theWLast)
98 Load(theIso, theParam, theWFirst, theWLast);
101 //=======================================================================
102 //function : ShallowCopy
104 //=======================================================================
106 Handle(Adaptor3d_Curve) Adaptor3d_IsoCurve::ShallowCopy() const
108 Handle(Adaptor3d_IsoCurve) aCopy = new Adaptor3d_IsoCurve();
110 if (!mySurface.IsNull())
112 aCopy->mySurface = mySurface->ShallowCopy();
114 aCopy->myIso = myIso;
115 aCopy->myFirst = myFirst;
116 aCopy->myLast = myLast;
117 aCopy->myParameter = myParameter;
122 //=======================================================================
125 //=======================================================================
127 void Adaptor3d_IsoCurve::Load(const Handle(Adaptor3d_Surface)& S )
130 myIso = GeomAbs_NoneIso;
133 //=======================================================================
136 //=======================================================================
138 void Adaptor3d_IsoCurve::Load(const GeomAbs_IsoType Iso,
139 const Standard_Real Param)
145 mySurface->FirstVParameter(),
146 mySurface->LastVParameter());
151 mySurface->FirstUParameter(),
152 mySurface->LastUParameter());
155 case GeomAbs_NoneIso:
156 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
161 //=======================================================================
164 //=======================================================================
166 void Adaptor3d_IsoCurve::Load(const GeomAbs_IsoType Iso,
167 const Standard_Real Param,
168 const Standard_Real WFirst,
169 const Standard_Real WLast)
177 if (myIso == GeomAbs_IsoU) {
178 myFirst = Max(myFirst, mySurface->FirstVParameter());
179 myLast = Min(myLast, mySurface->LastVParameter());
182 myFirst = Max(myFirst, mySurface->FirstUParameter());
183 myLast = Min(myLast, mySurface->LastUParameter());
186 // Adjust the parameters on periodic surfaces
188 Standard_Real dummy = myParameter;
190 if (mySurface->IsUPeriodic()) {
192 if (myIso == GeomAbs_IsoU) {
193 ElCLib::AdjustPeriodic
194 (mySurface->FirstUParameter(),
195 mySurface->FirstUParameter()+
196 mySurface->UPeriod(),
197 mySurface->UResolution(Precision::Confusion()),
201 ElCLib::AdjustPeriodic
202 (mySurface->FirstUParameter(),
203 mySurface->FirstUParameter()+
204 mySurface->UPeriod(),
205 mySurface->UResolution(Precision::Confusion()),
210 if (mySurface->IsVPeriodic()) {
212 if (myIso == GeomAbs_IsoV) {
213 ElCLib::AdjustPeriodic
214 (mySurface->FirstVParameter(),
215 mySurface->FirstVParameter() +
216 mySurface->VPeriod(),
217 mySurface->VResolution(Precision::Confusion()),
221 ElCLib::AdjustPeriodic
222 (mySurface->FirstVParameter(),
223 mySurface->FirstVParameter() +
224 mySurface->VPeriod(),
225 mySurface->VResolution(Precision::Confusion()),
232 //=======================================================================
233 //function : Continuity
235 //=======================================================================
237 GeomAbs_Shape Adaptor3d_IsoCurve::Continuity() const
241 return mySurface->VContinuity();
243 return mySurface->UContinuity();
244 case GeomAbs_NoneIso:
249 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
252 //=======================================================================
253 //function : NbIntervals
255 //=======================================================================
257 Standard_Integer Adaptor3d_IsoCurve::NbIntervals(const GeomAbs_Shape S) const
259 if (myIso == GeomAbs_NoneIso) throw Standard_NoSuchObject();
260 Standard_Boolean UIso = (myIso == GeomAbs_IsoU);
262 Standard_Integer nbInter = UIso ?
263 mySurface->NbVIntervals(S) :
264 mySurface->NbUIntervals(S);
266 TColStd_Array1OfReal T(1,nbInter+1);
269 mySurface->VIntervals(T,S);
271 mySurface->UIntervals(T,S);
273 if(nbInter == 1) return nbInter;
275 Standard_Integer first = 1;
276 while (T(first) <= myFirst) first++;
277 Standard_Integer last = nbInter+1;
278 while (T(last) >= myLast) last--;
279 return (last - first + 2);
282 //=======================================================================
283 //function : Intervals
285 //=======================================================================
287 void Adaptor3d_IsoCurve::Intervals(TColStd_Array1OfReal& TI,
288 const GeomAbs_Shape S) const
290 if (myIso == GeomAbs_NoneIso) throw Standard_NoSuchObject();
291 Standard_Boolean UIso = (myIso == GeomAbs_IsoU);
293 Standard_Integer nbInter = UIso ?
294 mySurface->NbVIntervals(S) :
295 mySurface->NbUIntervals(S);
297 TColStd_Array1OfReal T(1,nbInter+1);
300 mySurface->VIntervals(T,S);
302 mySurface->UIntervals(T,S);
305 TI(TI.Lower()) = myFirst ;
306 TI(TI.Lower() + 1) = myLast ;
310 Standard_Integer first = 1;
311 while (T(first) <= myFirst) first++;
312 Standard_Integer last = nbInter+1;
313 while (T(last) >= myLast) last--;
315 Standard_Integer i = TI.Lower(), j;
316 for (j = first-1; j <= last+1; j++) {
320 TI(TI.Lower()) = myFirst ;
321 TI(TI.Lower() + last-first + 2) = myLast ;
324 //=======================================================================
327 //=======================================================================
329 Handle(Adaptor3d_Curve) Adaptor3d_IsoCurve::Trim
330 (const Standard_Real First,
331 const Standard_Real Last,
332 const Standard_Real) const
334 Handle(Adaptor3d_IsoCurve) HI = new Adaptor3d_IsoCurve(*this);
335 HI->Load(myIso,myParameter,First,Last);
339 //=======================================================================
340 //function : IsClosed
342 //=======================================================================
344 Standard_Boolean Adaptor3d_IsoCurve::IsClosed() const
348 return mySurface->IsVClosed();
350 return mySurface->IsUClosed();
351 case GeomAbs_NoneIso:
356 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
359 //=======================================================================
360 //function : IsPeriodic
362 //=======================================================================
364 Standard_Boolean Adaptor3d_IsoCurve::IsPeriodic() const
368 return mySurface->IsVPeriodic();
370 return mySurface->IsUPeriodic();
371 case GeomAbs_NoneIso:
376 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
379 //=======================================================================
382 //=======================================================================
384 Standard_Real Adaptor3d_IsoCurve::Period() const
388 return mySurface->VPeriod();
390 return mySurface->UPeriod();
391 case GeomAbs_NoneIso:
396 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
399 //=======================================================================
402 //=======================================================================
404 gp_Pnt Adaptor3d_IsoCurve::Value(const Standard_Real T) const
409 return mySurface->Value(myParameter,T);
412 return mySurface->Value(T,myParameter);
414 case GeomAbs_NoneIso:
416 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
425 //=======================================================================
428 //=======================================================================
430 void Adaptor3d_IsoCurve::D0(const Standard_Real T, gp_Pnt& P) const
435 mySurface->D0(myParameter,T,P);
439 mySurface->D0(T,myParameter,P);
442 case GeomAbs_NoneIso:
443 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
448 //=======================================================================
451 //=======================================================================
453 void Adaptor3d_IsoCurve::D1(const Standard_Real T, gp_Pnt& P, gp_Vec& V) const
459 mySurface->D1(myParameter,T,P,dummy,V);
463 mySurface->D1(T,myParameter,P,V,dummy);
466 case GeomAbs_NoneIso:
467 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
472 //=======================================================================
475 //=======================================================================
477 void Adaptor3d_IsoCurve::D2(const Standard_Real T, gp_Pnt& P,
478 gp_Vec& V1, gp_Vec& V2) const
480 gp_Vec dummy1,dummy2,dummy3;
484 mySurface->D2(myParameter,T,P,
485 dummy1,V1,dummy2,V2,dummy3);
488 mySurface->D2(T,myParameter,
489 P,V1,dummy1,V2,dummy2,dummy3);
491 case GeomAbs_NoneIso:
492 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
497 //=======================================================================
500 //=======================================================================
502 void Adaptor3d_IsoCurve::D3(const Standard_Real T, gp_Pnt& P,
503 gp_Vec& V1, gp_Vec& V2, gp_Vec& V3) const
509 mySurface->D3(myParameter,T,P,dummy[0],V1,dummy[1],
510 V2,dummy[2],dummy[3],V3,dummy[4],dummy[5]);
514 mySurface->D3(T,myParameter,P,V1,dummy[0],V2,dummy[1],
515 dummy[2],V3,dummy[3],dummy[4],dummy[5]);
518 case GeomAbs_NoneIso:
519 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
524 //=======================================================================
527 //=======================================================================
529 gp_Vec Adaptor3d_IsoCurve::DN(const Standard_Real T,
530 const Standard_Integer N) const
535 return mySurface->DN(myParameter,T,0,N);
537 return mySurface->DN(T,myParameter,N,0);
538 case GeomAbs_NoneIso:
540 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
550 //=======================================================================
551 //function : Resolution
553 //=======================================================================
555 Standard_Real Adaptor3d_IsoCurve::Resolution(const Standard_Real R3D) const
557 // Peut-on faire mieux ??
558 return Precision::Parametric(R3D);
563 //=======================================================================
566 //=======================================================================
568 GeomAbs_CurveType Adaptor3d_IsoCurve::GetType() const {
570 switch (mySurface->GetType()) {
575 case GeomAbs_Cylinder:
583 return GeomAbs_Circle;
585 case GeomAbs_NoneIso:
587 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
595 return GeomAbs_Circle;
597 case GeomAbs_BezierSurface:
598 return GeomAbs_BezierCurve;
600 case GeomAbs_BSplineSurface:
601 return GeomAbs_BSplineCurve;
603 case GeomAbs_SurfaceOfRevolution:
607 return mySurface->BasisCurve()->GetType();
610 return GeomAbs_Circle;
612 case GeomAbs_NoneIso:
613 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
619 case GeomAbs_SurfaceOfExtrusion:
626 return mySurface->BasisCurve()->GetType();
628 case GeomAbs_NoneIso:
629 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
635 return GeomAbs_OtherCurve;
639 return GeomAbs_OtherCurve;
642 //=======================================================================
645 //=======================================================================
647 gp_Lin Adaptor3d_IsoCurve::Line() const
655 //=======================================================================
656 //function : computeHR
658 //=======================================================================
660 static void computeHR(const gp_Ax3& axes,
663 Standard_Real& radius)
665 gp_Vec V(axes.Location(),P);
666 h = V * axes.Direction();
667 radius = V * axes.XDirection();
670 //=======================================================================
673 //=======================================================================
675 gp_Circ Adaptor3d_IsoCurve::Circle() const
678 Standard_Real radius,h = 0.;
680 switch (mySurface->GetType()) {
682 case GeomAbs_Cylinder:
684 gp_Cylinder cyl = mySurface->Cylinder();
690 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:UIso");
694 return ElSLib::CylinderVIso(cyl.Position(),cyl.Radius(),myParameter);
696 case GeomAbs_NoneIso:
698 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
706 gp_Cone cone = mySurface->Cone();
712 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:UIso");
716 return ElSLib::ConeVIso(cone.Position(),cone.RefRadius(),
717 cone.SemiAngle(),myParameter);
719 case GeomAbs_NoneIso:
721 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
729 gp_Sphere sph = mySurface->Sphere();
735 return ElSLib::SphereUIso(sph.Position(),sph.Radius(),myParameter);
740 return ElSLib::SphereVIso(sph.Position(),sph.Radius(),myParameter);
743 case GeomAbs_NoneIso:
745 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
751 case GeomAbs_Torus: {
752 gp_Torus tor = mySurface->Torus();
758 return ElSLib::TorusUIso(tor.Position(),tor.MajorRadius(),
759 tor.MinorRadius(),myParameter);
764 return ElSLib::TorusVIso(tor.Position(),tor.MajorRadius(),
765 tor.MinorRadius(),myParameter);
768 case GeomAbs_NoneIso:
770 throw Standard_NoSuchObject("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 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:Circle");
813 //=======================================================================
816 //=======================================================================
818 gp_Elips Adaptor3d_IsoCurve::Ellipse() const
820 switch (mySurface->GetType()) {
822 case GeomAbs_SurfaceOfExtrusion: {
823 return mySurface->BasisCurve()->Ellipse().Translated
824 (myParameter * gp_Vec(mySurface->Direction()));
828 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:Ellipse");
833 //=======================================================================
834 //function : Hyperbola
836 //=======================================================================
838 gp_Hypr Adaptor3d_IsoCurve::Hyperbola() const
840 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:Hyperbola");
843 //=======================================================================
844 //function : Parabola
846 //=======================================================================
848 gp_Parab Adaptor3d_IsoCurve::Parabola() const
850 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:Parabola");
853 //=======================================================================
856 //=======================================================================
858 Standard_Integer Adaptor3d_IsoCurve::Degree() const
860 Standard_Integer degree = 0 ;
861 GeomAbs_SurfaceType type = mySurface->GetType() ;
863 case GeomAbs_BezierSurface:
864 case GeomAbs_BSplineSurface:
868 degree = mySurface->VDegree() ;
871 degree = mySurface->UDegree() ;
874 case GeomAbs_NoneIso:
876 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
880 case GeomAbs_SurfaceOfRevolution:
884 degree = mySurface->BasisCurve()->Degree();
887 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
891 case GeomAbs_SurfaceOfExtrusion:
895 degree = mySurface->BasisCurve()->Degree();
898 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
903 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
909 //=======================================================================
910 //function : IsRational
912 //=======================================================================
914 Standard_Boolean Adaptor3d_IsoCurve::IsRational() const
916 Standard_Boolean is_rational = Standard_False;
917 GeomAbs_SurfaceType type = mySurface->GetType() ;
919 case GeomAbs_BezierSurface:
920 case GeomAbs_BSplineSurface:
924 is_rational = mySurface->IsVRational() ;
927 is_rational = mySurface->IsURational() ;
930 case GeomAbs_NoneIso:
932 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
936 case GeomAbs_SurfaceOfRevolution:
940 is_rational = mySurface->BasisCurve()->IsRational();
943 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
947 case GeomAbs_SurfaceOfExtrusion:
951 is_rational = mySurface->BasisCurve()->IsRational();
954 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
959 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
965 //=======================================================================
968 //=======================================================================
970 Standard_Integer Adaptor3d_IsoCurve::NbPoles() const
972 Standard_Integer nb_poles = 0 ;
973 GeomAbs_SurfaceType type = mySurface->GetType() ;
975 case GeomAbs_BezierSurface:
976 case GeomAbs_BSplineSurface:
979 nb_poles = mySurface->NbVPoles() ;
982 nb_poles = mySurface->NbUPoles() ;
985 case GeomAbs_NoneIso:
987 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
990 case GeomAbs_SurfaceOfRevolution:
995 nb_poles = mySurface->BasisCurve()->NbPoles();
999 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
1003 case GeomAbs_SurfaceOfExtrusion:
1008 nb_poles = mySurface->BasisCurve()->NbPoles();
1012 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
1018 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
1024 //=======================================================================
1025 //function : NbKnots
1027 //=======================================================================
1029 Standard_Integer Adaptor3d_IsoCurve::NbKnots() const
1031 Standard_Integer nb_knots = 0 ;
1032 GeomAbs_SurfaceType type = mySurface->GetType() ;
1034 case GeomAbs_BSplineSurface:
1038 nb_knots = mySurface->NbVKnots() ;
1041 nb_knots = mySurface->NbUKnots() ;
1044 case GeomAbs_NoneIso:
1046 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
1050 case GeomAbs_SurfaceOfRevolution:
1055 nb_knots = mySurface->BasisCurve()->NbKnots() ;
1059 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
1063 case GeomAbs_SurfaceOfExtrusion:
1068 nb_knots = mySurface->BasisCurve()->NbKnots() ;
1072 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
1077 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
1083 //=======================================================================
1086 //=======================================================================
1088 Handle(Geom_BezierCurve) Adaptor3d_IsoCurve::Bezier() const
1090 Handle(Geom_BezierCurve) C;
1091 if (mySurface->GetType() == GeomAbs_SurfaceOfRevolution) {
1092 C = mySurface->BasisCurve()->Bezier();
1093 C = Handle(Geom_BezierCurve)::DownCast(C->Copy());
1094 C->Rotate(mySurface->AxeOfRevolution(),myParameter);
1096 else if (mySurface->GetType() == GeomAbs_SurfaceOfExtrusion) {
1097 C = mySurface->BasisCurve()->Bezier();
1098 C = Handle(Geom_BezierCurve)::DownCast(C->Copy());
1099 C->Translate(myParameter * gp_Vec(mySurface->Direction()));
1101 else if (myIso == GeomAbs_IsoU) {
1102 C = Handle(Geom_BezierCurve)::DownCast
1103 (mySurface->Bezier()->UIso(myParameter)) ;
1106 C = Handle(Geom_BezierCurve)::DownCast
1107 (mySurface->Bezier()->VIso(myParameter));
1109 // C->Segment(myFirst,myLast);
1113 //=======================================================================
1114 //function : BSpline
1116 //=======================================================================
1118 Handle(Geom_BSplineCurve) Adaptor3d_IsoCurve::BSpline() const
1120 Handle(Geom_BSplineCurve) C;
1121 if (mySurface->GetType() == GeomAbs_SurfaceOfRevolution) {
1122 C = mySurface->BasisCurve()->BSpline();
1123 C = Handle(Geom_BSplineCurve)::DownCast(C->Copy());
1124 C->Rotate(mySurface->AxeOfRevolution(),myParameter);
1126 else if (mySurface->GetType() == GeomAbs_SurfaceOfExtrusion) {
1127 C = mySurface->BasisCurve()->BSpline();
1128 C = Handle(Geom_BSplineCurve)::DownCast(C->Copy());
1129 C->Translate(myParameter * gp_Vec(mySurface->Direction()));
1131 else if (myIso == GeomAbs_IsoU) {
1132 C = Handle(Geom_BSplineCurve)::DownCast
1133 (mySurface->BSpline()->UIso(myParameter)) ;
1136 C = Handle(Geom_BSplineCurve)::DownCast
1137 (mySurface->BSpline()->VIso(myParameter));
1139 // C->Segment(myFirst,myLast);