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>
18 #include <BSplCLib.hxx>
19 #include <BSplSLib.hxx>
22 #include <Geom_BezierCurve.hxx>
23 #include <Geom_BezierSurface.hxx>
24 #include <Geom_BSplineCurve.hxx>
25 #include <Geom_BSplineSurface.hxx>
26 #include <GeomAbs_SurfaceType.hxx>
28 #include <gp_Circ.hxx>
29 #include <gp_Elips.hxx>
30 #include <gp_Hypr.hxx>
32 #include <gp_Parab.hxx>
35 #include <Precision.hxx>
36 #include <Standard_DomainError.hxx>
37 #include <Standard_NoSuchObject.hxx>
38 #include <Standard_NotImplemented.hxx>
39 #include <Standard_OutOfRange.hxx>
40 #include <TColgp_Array1OfPnt.hxx>
41 #include <TColgp_Array2OfPnt.hxx>
43 IMPLEMENT_STANDARD_RTTIEXT(Adaptor3d_IsoCurve, Adaptor3d_Curve)
45 //=======================================================================
46 //function : Adaptor3d_IsoCurve
48 //=======================================================================
49 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve()
50 : myIso (GeomAbs_NoneIso),
57 //=======================================================================
58 //function : Adaptor3d_IsoCurve
60 //=======================================================================
62 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve(const Handle(Adaptor3d_Surface)& S)
64 myIso (GeomAbs_NoneIso),
71 //=======================================================================
72 //function : Adaptor3d_IsoCurve
74 //=======================================================================
76 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve(const Handle(Adaptor3d_Surface)& S,
77 const GeomAbs_IsoType theIso,
78 const Standard_Real theParam)
80 myIso (GeomAbs_NoneIso),
85 Load(theIso, theParam);
88 //=======================================================================
89 //function : Adaptor3d_IsoCurve
91 //=======================================================================
93 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve(const Handle(Adaptor3d_Surface)& theS,
94 const GeomAbs_IsoType theIso,
95 const Standard_Real theParam,
96 const Standard_Real theWFirst,
97 const Standard_Real theWLast)
102 myParameter(theParam)
104 Load(theIso, theParam, theWFirst, theWLast);
107 //=======================================================================
110 //=======================================================================
112 void Adaptor3d_IsoCurve::Load(const Handle(Adaptor3d_Surface)& S )
115 myIso = GeomAbs_NoneIso;
118 //=======================================================================
121 //=======================================================================
123 void Adaptor3d_IsoCurve::Load(const GeomAbs_IsoType Iso,
124 const Standard_Real Param)
130 mySurface->FirstVParameter(),
131 mySurface->LastVParameter());
136 mySurface->FirstUParameter(),
137 mySurface->LastUParameter());
140 case GeomAbs_NoneIso:
141 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
146 //=======================================================================
149 //=======================================================================
151 void Adaptor3d_IsoCurve::Load(const GeomAbs_IsoType Iso,
152 const Standard_Real Param,
153 const Standard_Real WFirst,
154 const Standard_Real WLast)
162 if (myIso == GeomAbs_IsoU) {
163 myFirst = Max(myFirst, mySurface->FirstVParameter());
164 myLast = Min(myLast, mySurface->LastVParameter());
167 myFirst = Max(myFirst, mySurface->FirstUParameter());
168 myLast = Min(myLast, mySurface->LastUParameter());
171 // Adjust the parameters on periodic surfaces
173 Standard_Real dummy = myParameter;
175 if (mySurface->IsUPeriodic()) {
177 if (myIso == GeomAbs_IsoU) {
178 ElCLib::AdjustPeriodic
179 (mySurface->FirstUParameter(),
180 mySurface->FirstUParameter()+
181 mySurface->UPeriod(),
182 mySurface->UResolution(Precision::Confusion()),
186 ElCLib::AdjustPeriodic
187 (mySurface->FirstUParameter(),
188 mySurface->FirstUParameter()+
189 mySurface->UPeriod(),
190 mySurface->UResolution(Precision::Confusion()),
195 if (mySurface->IsVPeriodic()) {
197 if (myIso == GeomAbs_IsoV) {
198 ElCLib::AdjustPeriodic
199 (mySurface->FirstVParameter(),
200 mySurface->FirstVParameter() +
201 mySurface->VPeriod(),
202 mySurface->VResolution(Precision::Confusion()),
206 ElCLib::AdjustPeriodic
207 (mySurface->FirstVParameter(),
208 mySurface->FirstVParameter() +
209 mySurface->VPeriod(),
210 mySurface->VResolution(Precision::Confusion()),
217 //=======================================================================
218 //function : Continuity
220 //=======================================================================
222 GeomAbs_Shape Adaptor3d_IsoCurve::Continuity() const
226 return mySurface->VContinuity();
228 return mySurface->UContinuity();
229 case GeomAbs_NoneIso:
234 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
237 //=======================================================================
238 //function : NbIntervals
240 //=======================================================================
242 Standard_Integer Adaptor3d_IsoCurve::NbIntervals(const GeomAbs_Shape S) const
244 if (myIso == GeomAbs_NoneIso) throw Standard_NoSuchObject();
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) throw Standard_NoSuchObject();
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_Curve) Adaptor3d_IsoCurve::Trim
315 (const Standard_Real First,
316 const Standard_Real Last,
317 const Standard_Real) const
319 Handle(Adaptor3d_IsoCurve) HI = new Adaptor3d_IsoCurve(*this);
320 HI->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 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
344 //=======================================================================
345 //function : IsPeriodic
347 //=======================================================================
349 Standard_Boolean Adaptor3d_IsoCurve::IsPeriodic() const
353 return mySurface->IsVPeriodic();
355 return mySurface->IsUPeriodic();
356 case GeomAbs_NoneIso:
361 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
364 //=======================================================================
367 //=======================================================================
369 Standard_Real Adaptor3d_IsoCurve::Period() const
373 return mySurface->VPeriod();
375 return mySurface->UPeriod();
376 case GeomAbs_NoneIso:
381 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
384 //=======================================================================
387 //=======================================================================
389 gp_Pnt Adaptor3d_IsoCurve::Value(const Standard_Real T) const
394 return mySurface->Value(myParameter,T);
397 return mySurface->Value(T,myParameter);
399 case GeomAbs_NoneIso:
401 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
410 //=======================================================================
413 //=======================================================================
415 void Adaptor3d_IsoCurve::D0(const Standard_Real T, gp_Pnt& P) const
420 mySurface->D0(myParameter,T,P);
424 mySurface->D0(T,myParameter,P);
427 case GeomAbs_NoneIso:
428 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
433 //=======================================================================
436 //=======================================================================
438 void Adaptor3d_IsoCurve::D1(const Standard_Real T, gp_Pnt& P, gp_Vec& V) const
444 mySurface->D1(myParameter,T,P,dummy,V);
448 mySurface->D1(T,myParameter,P,V,dummy);
451 case GeomAbs_NoneIso:
452 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
457 //=======================================================================
460 //=======================================================================
462 void Adaptor3d_IsoCurve::D2(const Standard_Real T, gp_Pnt& P,
463 gp_Vec& V1, gp_Vec& V2) const
465 gp_Vec dummy1,dummy2,dummy3;
469 mySurface->D2(myParameter,T,P,
470 dummy1,V1,dummy2,V2,dummy3);
473 mySurface->D2(T,myParameter,
474 P,V1,dummy1,V2,dummy2,dummy3);
476 case GeomAbs_NoneIso:
477 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
482 //=======================================================================
485 //=======================================================================
487 void Adaptor3d_IsoCurve::D3(const Standard_Real T, gp_Pnt& P,
488 gp_Vec& V1, gp_Vec& V2, gp_Vec& V3) const
494 mySurface->D3(myParameter,T,P,dummy[0],V1,dummy[1],
495 V2,dummy[2],dummy[3],V3,dummy[4],dummy[5]);
499 mySurface->D3(T,myParameter,P,V1,dummy[0],V2,dummy[1],
500 dummy[2],V3,dummy[3],dummy[4],dummy[5]);
503 case GeomAbs_NoneIso:
504 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
509 //=======================================================================
512 //=======================================================================
514 gp_Vec Adaptor3d_IsoCurve::DN(const Standard_Real T,
515 const Standard_Integer N) const
520 return mySurface->DN(myParameter,T,0,N);
522 return mySurface->DN(T,myParameter,N,0);
523 case GeomAbs_NoneIso:
525 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
535 //=======================================================================
536 //function : Resolution
538 //=======================================================================
540 Standard_Real Adaptor3d_IsoCurve::Resolution(const Standard_Real R3D) const
542 // Peut-on faire mieux ??
543 return Precision::Parametric(R3D);
548 //=======================================================================
551 //=======================================================================
553 GeomAbs_CurveType Adaptor3d_IsoCurve::GetType() const {
555 switch (mySurface->GetType()) {
560 case GeomAbs_Cylinder:
568 return GeomAbs_Circle;
570 case GeomAbs_NoneIso:
572 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
580 return GeomAbs_Circle;
582 case GeomAbs_BezierSurface:
583 return GeomAbs_BezierCurve;
585 case GeomAbs_BSplineSurface:
586 return GeomAbs_BSplineCurve;
588 case GeomAbs_SurfaceOfRevolution:
592 return mySurface->BasisCurve()->GetType();
595 return GeomAbs_Circle;
597 case GeomAbs_NoneIso:
598 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
604 case GeomAbs_SurfaceOfExtrusion:
611 return mySurface->BasisCurve()->GetType();
613 case GeomAbs_NoneIso:
614 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
620 return GeomAbs_OtherCurve;
624 return GeomAbs_OtherCurve;
627 //=======================================================================
630 //=======================================================================
632 gp_Lin Adaptor3d_IsoCurve::Line() const
640 //=======================================================================
641 //function : computeHR
643 //=======================================================================
645 static void computeHR(const gp_Ax3& axes,
648 Standard_Real& radius)
650 gp_Vec V(axes.Location(),P);
651 h = V * axes.Direction();
652 radius = V * axes.XDirection();
655 //=======================================================================
658 //=======================================================================
660 gp_Circ Adaptor3d_IsoCurve::Circle() const
663 Standard_Real radius,h = 0.;
665 switch (mySurface->GetType()) {
667 case GeomAbs_Cylinder:
669 gp_Cylinder cyl = mySurface->Cylinder();
675 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:UIso");
679 return ElSLib::CylinderVIso(cyl.Position(),cyl.Radius(),myParameter);
681 case GeomAbs_NoneIso:
683 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
691 gp_Cone cone = mySurface->Cone();
697 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:UIso");
701 return ElSLib::ConeVIso(cone.Position(),cone.RefRadius(),
702 cone.SemiAngle(),myParameter);
704 case GeomAbs_NoneIso:
706 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
714 gp_Sphere sph = mySurface->Sphere();
720 return ElSLib::SphereUIso(sph.Position(),sph.Radius(),myParameter);
725 return ElSLib::SphereVIso(sph.Position(),sph.Radius(),myParameter);
728 case GeomAbs_NoneIso:
730 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
736 case GeomAbs_Torus: {
737 gp_Torus tor = mySurface->Torus();
743 return ElSLib::TorusUIso(tor.Position(),tor.MajorRadius(),
744 tor.MinorRadius(),myParameter);
749 return ElSLib::TorusVIso(tor.Position(),tor.MajorRadius(),
750 tor.MinorRadius(),myParameter);
753 case GeomAbs_NoneIso:
755 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
761 case GeomAbs_SurfaceOfRevolution:
763 if (myIso == GeomAbs_IsoV) {
764 const gp_Pnt aVal0 = Value (0.0);
765 gp_Ax1 Ax1 = mySurface->AxeOfRevolution();
766 if (gp_Lin (Ax1).Contains (aVal0, Precision::Confusion())) {
767 return gp_Circ(gp_Ax2(aVal0, Ax1.Direction()),0);
770 gp_Vec DX(Ax1.Location(), aVal0);
771 axes = gp_Ax3(Ax1.Location(), Ax1.Direction(), DX);
772 computeHR(axes,aVal0,h,radius);
773 gp_Vec VT = axes.Direction();
774 axes.Translate(VT * h);
775 return gp_Circ(axes.Ax2(),radius);
779 return mySurface->BasisCurve()->Circle().Rotated
780 (mySurface->AxeOfRevolution(),myParameter);
784 case GeomAbs_SurfaceOfExtrusion: {
785 return mySurface->BasisCurve()->Circle().Translated
786 (myParameter * gp_Vec(mySurface->Direction()));
790 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:Circle");
798 //=======================================================================
801 //=======================================================================
803 gp_Elips Adaptor3d_IsoCurve::Ellipse() const
805 switch (mySurface->GetType()) {
807 case GeomAbs_SurfaceOfExtrusion: {
808 return mySurface->BasisCurve()->Ellipse().Translated
809 (myParameter * gp_Vec(mySurface->Direction()));
813 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:Ellipse");
818 //=======================================================================
819 //function : Hyperbola
821 //=======================================================================
823 gp_Hypr Adaptor3d_IsoCurve::Hyperbola() const
825 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:Hyperbola");
828 //=======================================================================
829 //function : Parabola
831 //=======================================================================
833 gp_Parab Adaptor3d_IsoCurve::Parabola() const
835 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:Parabola");
838 //=======================================================================
841 //=======================================================================
843 Standard_Integer Adaptor3d_IsoCurve::Degree() const
845 Standard_Integer degree = 0 ;
846 GeomAbs_SurfaceType type = mySurface->GetType() ;
848 case GeomAbs_BezierSurface:
849 case GeomAbs_BSplineSurface:
853 degree = mySurface->VDegree() ;
856 degree = mySurface->UDegree() ;
859 case GeomAbs_NoneIso:
861 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
865 case GeomAbs_SurfaceOfRevolution:
869 degree = mySurface->BasisCurve()->Degree();
872 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
876 case GeomAbs_SurfaceOfExtrusion:
880 degree = mySurface->BasisCurve()->Degree();
883 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
888 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
894 //=======================================================================
895 //function : IsRational
897 //=======================================================================
899 Standard_Boolean Adaptor3d_IsoCurve::IsRational() const
901 Standard_Boolean is_rational = Standard_False;
902 GeomAbs_SurfaceType type = mySurface->GetType() ;
904 case GeomAbs_BezierSurface:
905 case GeomAbs_BSplineSurface:
909 is_rational = mySurface->IsVRational() ;
912 is_rational = mySurface->IsURational() ;
915 case GeomAbs_NoneIso:
917 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
921 case GeomAbs_SurfaceOfRevolution:
925 is_rational = mySurface->BasisCurve()->IsRational();
928 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
932 case GeomAbs_SurfaceOfExtrusion:
936 is_rational = mySurface->BasisCurve()->IsRational();
939 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
944 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
950 //=======================================================================
953 //=======================================================================
955 Standard_Integer Adaptor3d_IsoCurve::NbPoles() const
957 Standard_Integer nb_poles = 0 ;
958 GeomAbs_SurfaceType type = mySurface->GetType() ;
960 case GeomAbs_BezierSurface:
961 case GeomAbs_BSplineSurface:
964 nb_poles = mySurface->NbVPoles() ;
967 nb_poles = mySurface->NbUPoles() ;
970 case GeomAbs_NoneIso:
972 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
975 case GeomAbs_SurfaceOfRevolution:
980 nb_poles = mySurface->BasisCurve()->NbPoles();
984 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
988 case GeomAbs_SurfaceOfExtrusion:
993 nb_poles = mySurface->BasisCurve()->NbPoles();
997 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
1003 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
1009 //=======================================================================
1010 //function : NbKnots
1012 //=======================================================================
1014 Standard_Integer Adaptor3d_IsoCurve::NbKnots() const
1016 Standard_Integer nb_knots = 0 ;
1017 GeomAbs_SurfaceType type = mySurface->GetType() ;
1019 case GeomAbs_BSplineSurface:
1023 nb_knots = mySurface->NbVKnots() ;
1026 nb_knots = mySurface->NbUKnots() ;
1029 case GeomAbs_NoneIso:
1031 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
1035 case GeomAbs_SurfaceOfRevolution:
1040 nb_knots = mySurface->BasisCurve()->NbKnots() ;
1044 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
1048 case GeomAbs_SurfaceOfExtrusion:
1053 nb_knots = mySurface->BasisCurve()->NbKnots() ;
1057 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
1062 throw Standard_NoSuchObject("Adaptor3d_IsoCurve:NoneIso");
1068 //=======================================================================
1071 //=======================================================================
1073 Handle(Geom_BezierCurve) Adaptor3d_IsoCurve::Bezier() const
1075 Handle(Geom_BezierCurve) C;
1076 if (mySurface->GetType() == GeomAbs_SurfaceOfRevolution) {
1077 C = mySurface->BasisCurve()->Bezier();
1078 C = Handle(Geom_BezierCurve)::DownCast(C->Copy());
1079 C->Rotate(mySurface->AxeOfRevolution(),myParameter);
1081 else if (mySurface->GetType() == GeomAbs_SurfaceOfExtrusion) {
1082 C = mySurface->BasisCurve()->Bezier();
1083 C = Handle(Geom_BezierCurve)::DownCast(C->Copy());
1084 C->Translate(myParameter * gp_Vec(mySurface->Direction()));
1086 else if (myIso == GeomAbs_IsoU) {
1087 C = Handle(Geom_BezierCurve)::DownCast
1088 (mySurface->Bezier()->UIso(myParameter)) ;
1091 C = Handle(Geom_BezierCurve)::DownCast
1092 (mySurface->Bezier()->VIso(myParameter));
1094 // C->Segment(myFirst,myLast);
1098 //=======================================================================
1099 //function : BSpline
1101 //=======================================================================
1103 Handle(Geom_BSplineCurve) Adaptor3d_IsoCurve::BSpline() const
1105 Handle(Geom_BSplineCurve) C;
1106 if (mySurface->GetType() == GeomAbs_SurfaceOfRevolution) {
1107 C = mySurface->BasisCurve()->BSpline();
1108 C = Handle(Geom_BSplineCurve)::DownCast(C->Copy());
1109 C->Rotate(mySurface->AxeOfRevolution(),myParameter);
1111 else if (mySurface->GetType() == GeomAbs_SurfaceOfExtrusion) {
1112 C = mySurface->BasisCurve()->BSpline();
1113 C = Handle(Geom_BSplineCurve)::DownCast(C->Copy());
1114 C->Translate(myParameter * gp_Vec(mySurface->Direction()));
1116 else if (myIso == GeomAbs_IsoU) {
1117 C = Handle(Geom_BSplineCurve)::DownCast
1118 (mySurface->BSpline()->UIso(myParameter)) ;
1121 C = Handle(Geom_BSplineCurve)::DownCast
1122 (mySurface->BSpline()->VIso(myParameter));
1124 // C->Segment(myFirst,myLast);