1 // Copyright (c) 1999-2012 OPEN CASCADE SAS
3 // The content of this file is subject to the Open CASCADE Technology Public
4 // License Version 6.5 (the "License"). You may not use the content of this file
5 // except in compliance with the License. Please obtain a copy of the License
6 // at http://www.opencascade.org and read it completely before using this file.
8 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
9 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
11 // The Original Code and all software distributed under the License is
12 // distributed on an "AS IS" basis, without warranty of any kind, and the
13 // Initial Developer hereby disclaims all such warranties, including without
14 // limitation, any warranties of merchantability, fitness for a particular
15 // purpose or non-infringement. Please see the License for the specific terms
16 // and conditions governing the rights and limitations under the License.
18 #include <Adaptor3d_IsoCurve.ixx>
20 #include <Adaptor3d_HIsoCurve.hxx>
21 #include <Adaptor3d_HSurfaceOfRevolution.hxx>
22 #include <Geom_BezierSurface.hxx>
23 #include <Geom_BSplineSurface.hxx>
24 #include <GeomAbs_SurfaceType.hxx>
25 #include <Standard_NoSuchObject.hxx>
26 #include <Standard_NotImplemented.hxx>
30 #include <BSplCLib.hxx>
31 #include <BSplSLib.hxx>
32 #include <Precision.hxx>
33 #include <TColgp_Array1OfPnt.hxx>
34 #include <TColgp_Array2OfPnt.hxx>
37 //=======================================================================
38 //function : Adaptor3d_IsoCurve
40 //=======================================================================
42 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve() :
43 myIso(GeomAbs_NoneIso)
46 //=======================================================================
47 //function : Adaptor3d_IsoCurve
49 //=======================================================================
51 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve(const Handle(Adaptor3d_HSurface)& S)
56 //=======================================================================
57 //function : Adaptor3d_IsoCurve
59 //=======================================================================
61 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve(const Handle(Adaptor3d_HSurface)& S,
62 const GeomAbs_IsoType Iso,
63 const Standard_Real Param)
69 //=======================================================================
70 //function : Adaptor3d_IsoCurve
72 //=======================================================================
74 Adaptor3d_IsoCurve::Adaptor3d_IsoCurve(const Handle(Adaptor3d_HSurface)& S,
75 const GeomAbs_IsoType Iso,
76 const Standard_Real Param,
77 const Standard_Real WFirst,
78 const Standard_Real WLast)
81 Load(Iso,Param,WFirst,WLast);
84 //=======================================================================
87 //=======================================================================
89 void Adaptor3d_IsoCurve::Load(const Handle(Adaptor3d_HSurface)& S )
92 myIso = GeomAbs_NoneIso;
95 //=======================================================================
98 //=======================================================================
100 void Adaptor3d_IsoCurve::Load(const GeomAbs_IsoType Iso,
101 const Standard_Real Param)
107 mySurface->FirstVParameter(),
108 mySurface->LastVParameter());
113 mySurface->FirstUParameter(),
114 mySurface->LastUParameter());
117 case GeomAbs_NoneIso:
118 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
123 //=======================================================================
126 //=======================================================================
128 void Adaptor3d_IsoCurve::Load(const GeomAbs_IsoType Iso,
129 const Standard_Real Param,
130 const Standard_Real WFirst,
131 const Standard_Real WLast)
139 if (myIso == GeomAbs_IsoU) {
140 myFirst = Max(myFirst, mySurface->FirstVParameter());
141 myLast = Min(myLast, mySurface->LastVParameter());
144 myFirst = Max(myFirst, mySurface->FirstUParameter());
145 myLast = Min(myLast, mySurface->LastUParameter());
148 // Adjust the parameters on periodic surfaces
150 Standard_Real dummy = myParameter;
152 if (mySurface->IsUPeriodic()) {
154 if (myIso == GeomAbs_IsoU) {
155 ElCLib::AdjustPeriodic
156 (mySurface->FirstUParameter(),
157 mySurface->FirstUParameter()+
158 mySurface->UPeriod(),
159 mySurface->UResolution(Precision::Confusion()),
163 ElCLib::AdjustPeriodic
164 (mySurface->FirstUParameter(),
165 mySurface->FirstUParameter()+
166 mySurface->UPeriod(),
167 mySurface->UResolution(Precision::Confusion()),
172 if (mySurface->IsVPeriodic()) {
174 if (myIso == GeomAbs_IsoV) {
175 ElCLib::AdjustPeriodic
176 (mySurface->FirstVParameter(),
177 mySurface->FirstVParameter() +
178 mySurface->VPeriod(),
179 mySurface->VResolution(Precision::Confusion()),
183 ElCLib::AdjustPeriodic
184 (mySurface->FirstVParameter(),
185 mySurface->FirstVParameter() +
186 mySurface->VPeriod(),
187 mySurface->VResolution(Precision::Confusion()),
194 //=======================================================================
195 //function : Continuity
197 //=======================================================================
199 GeomAbs_Shape Adaptor3d_IsoCurve::Continuity() const
203 return mySurface->VContinuity();
205 return mySurface->UContinuity();
206 case GeomAbs_NoneIso:
211 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
215 //=======================================================================
216 //function : NbIntervals
218 //=======================================================================
220 Standard_Integer Adaptor3d_IsoCurve::NbIntervals(const GeomAbs_Shape S)
222 if (myIso == GeomAbs_NoneIso) Standard_NoSuchObject::Raise();
223 Standard_Boolean UIso = (myIso == GeomAbs_IsoU);
225 Standard_Integer nbInter = UIso ?
226 mySurface->NbVIntervals(S) :
227 mySurface->NbUIntervals(S);
229 TColStd_Array1OfReal T(1,nbInter+1);
232 mySurface->VIntervals(T,S);
234 mySurface->UIntervals(T,S);
236 if(nbInter == 1) return nbInter;
238 Standard_Integer first = 1;
239 while (T(first) <= myFirst) first++;
240 Standard_Integer last = nbInter+1;
241 while (T(last) >= myLast) last--;
242 return (last - first + 2);
245 //=======================================================================
246 //function : Intervals
248 //=======================================================================
250 void Adaptor3d_IsoCurve::Intervals(TColStd_Array1OfReal& TI,
251 const GeomAbs_Shape S)
253 if (myIso == GeomAbs_NoneIso) Standard_NoSuchObject::Raise();
254 Standard_Boolean UIso = (myIso == GeomAbs_IsoU);
256 Standard_Integer nbInter = UIso ?
257 mySurface->NbVIntervals(S) :
258 mySurface->NbUIntervals(S);
260 TColStd_Array1OfReal T(1,nbInter+1);
263 mySurface->VIntervals(T,S);
265 mySurface->UIntervals(T,S);
268 TI(TI.Lower()) = myFirst ;
269 TI(TI.Lower() + 1) = myLast ;
273 Standard_Integer first = 1;
274 while (T(first) <= myFirst) first++;
275 Standard_Integer last = nbInter+1;
276 while (T(last) >= myLast) last--;
278 Standard_Integer i = TI.Lower(), j;
279 for (j = first-1; j <= last+1; j++) {
283 TI(TI.Lower()) = myFirst ;
284 TI(TI.Lower() + last-first + 2) = myLast ;
287 //=======================================================================
290 //=======================================================================
292 Handle(Adaptor3d_HCurve) Adaptor3d_IsoCurve::Trim
293 (const Standard_Real First,
294 const Standard_Real Last,
295 const Standard_Real) const
297 Handle(Adaptor3d_HIsoCurve) HI = new Adaptor3d_HIsoCurve(*this);
298 ((Adaptor3d_IsoCurve *)&(HI->Curve()))->Load(myIso,myParameter,First,Last);
302 //=======================================================================
303 //function : IsClosed
305 //=======================================================================
307 Standard_Boolean Adaptor3d_IsoCurve::IsClosed() const
311 return mySurface->IsVClosed();
313 return mySurface->IsUClosed();
314 case GeomAbs_NoneIso:
319 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
320 return Standard_False;
323 //=======================================================================
324 //function : IsPeriodic
326 //=======================================================================
328 Standard_Boolean Adaptor3d_IsoCurve::IsPeriodic() const
332 return mySurface->IsVPeriodic();
334 return mySurface->IsUPeriodic();
335 case GeomAbs_NoneIso:
340 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
341 return Standard_False;
344 //=======================================================================
347 //=======================================================================
349 Standard_Real Adaptor3d_IsoCurve::Period() const
353 return mySurface->VPeriod();
355 return mySurface->UPeriod();
356 case GeomAbs_NoneIso:
361 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
365 //=======================================================================
368 //=======================================================================
370 gp_Pnt Adaptor3d_IsoCurve::Value(const Standard_Real T) const
375 return mySurface->Value(myParameter,T);
378 return mySurface->Value(T,myParameter);
380 case GeomAbs_NoneIso:
382 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
391 //=======================================================================
394 //=======================================================================
396 void Adaptor3d_IsoCurve::D0(const Standard_Real T, gp_Pnt& P) const
401 mySurface->D0(myParameter,T,P);
405 mySurface->D0(T,myParameter,P);
408 case GeomAbs_NoneIso:
409 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
414 //=======================================================================
417 //=======================================================================
419 void Adaptor3d_IsoCurve::D1(const Standard_Real T, gp_Pnt& P, gp_Vec& V) const
425 mySurface->D1(myParameter,T,P,dummy,V);
429 mySurface->D1(T,myParameter,P,V,dummy);
432 case GeomAbs_NoneIso:
433 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
438 //=======================================================================
441 //=======================================================================
443 void Adaptor3d_IsoCurve::D2(const Standard_Real T, gp_Pnt& P,
444 gp_Vec& V1, gp_Vec& V2) const
446 gp_Vec dummy1,dummy2,dummy3;
450 mySurface->D2(myParameter,T,P,
451 dummy1,V1,dummy2,V2,dummy3);
454 mySurface->D2(T,myParameter,
455 P,V1,dummy1,V2,dummy2,dummy3);
457 case GeomAbs_NoneIso:
458 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
463 //=======================================================================
466 //=======================================================================
468 void Adaptor3d_IsoCurve::D3(const Standard_Real T, gp_Pnt& P,
469 gp_Vec& V1, gp_Vec& V2, gp_Vec& V3) const
475 mySurface->D3(myParameter,T,P,dummy[0],V1,dummy[1],
476 V2,dummy[2],dummy[3],V3,dummy[4],dummy[5]);
480 mySurface->D3(T,myParameter,P,V1,dummy[0],V2,dummy[1],
481 dummy[2],V3,dummy[3],dummy[4],dummy[5]);
484 case GeomAbs_NoneIso:
485 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
490 //=======================================================================
493 //=======================================================================
495 gp_Vec Adaptor3d_IsoCurve::DN(const Standard_Real T,
496 const Standard_Integer N) const
501 return mySurface->DN(myParameter,T,0,N);
503 return mySurface->DN(T,myParameter,N,0);
504 case GeomAbs_NoneIso:
506 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
516 //=======================================================================
517 //function : Resolution
519 //=======================================================================
521 Standard_Real Adaptor3d_IsoCurve::Resolution(const Standard_Real R3D) const
523 // Peut-on faire mieux ??
524 return Precision::Parametric(R3D);
529 //=======================================================================
532 //=======================================================================
534 GeomAbs_CurveType Adaptor3d_IsoCurve::GetType() const {
536 switch (mySurface->GetType()) {
541 case GeomAbs_Cylinder:
549 return GeomAbs_Circle;
551 case GeomAbs_NoneIso:
553 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
555 return GeomAbs_OtherCurve;
563 return GeomAbs_Circle;
565 case GeomAbs_BezierSurface:
566 return GeomAbs_BezierCurve;
568 case GeomAbs_BSplineSurface:
569 return GeomAbs_BSplineCurve;
571 case GeomAbs_SurfaceOfRevolution:
575 return mySurface->BasisCurve()->GetType();
578 return GeomAbs_Circle;
580 case GeomAbs_NoneIso:
581 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
583 return GeomAbs_OtherCurve;
589 case GeomAbs_SurfaceOfExtrusion:
596 return mySurface->BasisCurve()->GetType();
598 case GeomAbs_NoneIso:
599 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
601 return GeomAbs_OtherCurve;
607 return GeomAbs_OtherCurve;
611 return GeomAbs_OtherCurve;
614 //=======================================================================
617 //=======================================================================
619 gp_Lin Adaptor3d_IsoCurve::Line() const
627 //=======================================================================
628 //function : computeHR
630 //=======================================================================
632 static void computeHR(const gp_Ax3& axes,
635 Standard_Real& radius)
637 gp_Vec V(axes.Location(),P);
638 h = V * axes.Direction();
639 radius = V * axes.XDirection();
642 //=======================================================================
645 //=======================================================================
647 gp_Circ Adaptor3d_IsoCurve::Circle() const
650 Standard_Real radius,h = 0.;
652 switch (mySurface->GetType()) {
654 case GeomAbs_Cylinder:
656 gp_Cylinder cyl = mySurface->Cylinder();
662 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:UIso");
667 return ElSLib::CylinderVIso(cyl.Position(),cyl.Radius(),myParameter);
669 case GeomAbs_NoneIso:
671 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
680 gp_Cone cone = mySurface->Cone();
686 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:UIso");
691 return ElSLib::ConeVIso(cone.Position(),cone.RefRadius(),
692 cone.SemiAngle(),myParameter);
694 case GeomAbs_NoneIso:
696 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
705 gp_Sphere sph = mySurface->Sphere();
711 return ElSLib::SphereUIso(sph.Position(),sph.Radius(),myParameter);
716 return ElSLib::SphereVIso(sph.Position(),sph.Radius(),myParameter);
719 case GeomAbs_NoneIso:
721 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
728 case GeomAbs_Torus: {
729 gp_Torus tor = mySurface->Torus();
735 return ElSLib::TorusUIso(tor.Position(),tor.MajorRadius(),
736 tor.MinorRadius(),myParameter);
741 return ElSLib::TorusVIso(tor.Position(),tor.MajorRadius(),
742 tor.MinorRadius(),myParameter);
745 case GeomAbs_NoneIso:
747 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
754 case GeomAbs_SurfaceOfRevolution:
756 if (myIso == GeomAbs_IsoV) {
757 gp_Ax1 Ax1 = mySurface->AxeOfRevolution();
758 gp_Vec DX(Ax1.Location(), Value(0));
759 if(DX.IsParallel(Ax1.Direction(),Precision::Angular())) {
760 return gp_Circ(gp_Ax2(Value(0), Ax1.Direction()),0);
763 axes = gp_Ax3(Ax1.Location(), Ax1.Direction(), DX);
764 computeHR(axes,Value(0),h,radius);
765 gp_Vec VT = axes.Direction();
766 axes.Translate(VT * h);
767 return gp_Circ(axes.Ax2(),radius);
771 return mySurface->BasisCurve()->Circle().Rotated
772 (mySurface->AxeOfRevolution(),myParameter);
776 case GeomAbs_SurfaceOfExtrusion: {
777 return mySurface->BasisCurve()->Circle().Translated
778 (myParameter * gp_Vec(mySurface->Direction()));
782 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:Circle");
791 //=======================================================================
794 //=======================================================================
796 gp_Elips Adaptor3d_IsoCurve::Ellipse() const
798 switch (mySurface->GetType()) {
800 case GeomAbs_SurfaceOfExtrusion: {
801 return mySurface->BasisCurve()->Ellipse().Translated
802 (myParameter * gp_Vec(mySurface->Direction()));
806 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:Ellipse");
812 //=======================================================================
813 //function : Hyperbola
815 //=======================================================================
817 gp_Hypr Adaptor3d_IsoCurve::Hyperbola() const
819 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:Hyperbola");
823 //=======================================================================
824 //function : Parabola
826 //=======================================================================
828 gp_Parab Adaptor3d_IsoCurve::Parabola() const
830 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:Parabola");
834 //=======================================================================
837 //=======================================================================
839 Standard_Integer Adaptor3d_IsoCurve::Degree() const
841 Standard_Integer degree = 0 ;
842 GeomAbs_SurfaceType type = mySurface->GetType() ;
844 case GeomAbs_BezierSurface:
845 case GeomAbs_BSplineSurface:
849 degree = mySurface->VDegree() ;
852 degree = mySurface->UDegree() ;
855 case GeomAbs_NoneIso:
857 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
861 case GeomAbs_SurfaceOfRevolution:
865 degree = mySurface->BasisCurve()->Degree();
868 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
872 case GeomAbs_SurfaceOfExtrusion:
876 degree = mySurface->BasisCurve()->Degree();
879 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
884 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
890 //=======================================================================
891 //function : IsRational
893 //=======================================================================
895 Standard_Boolean Adaptor3d_IsoCurve::IsRational() const
897 Standard_Integer is_rational = Standard_False ;
898 GeomAbs_SurfaceType type = mySurface->GetType() ;
900 case GeomAbs_BezierSurface:
901 case GeomAbs_BSplineSurface:
905 is_rational = mySurface->IsVRational() ;
908 is_rational = mySurface->IsURational() ;
911 case GeomAbs_NoneIso:
913 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
917 case GeomAbs_SurfaceOfRevolution:
921 is_rational = mySurface->BasisCurve()->IsRational();
924 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
928 case GeomAbs_SurfaceOfExtrusion:
932 is_rational = mySurface->BasisCurve()->IsRational();
935 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
940 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
946 //=======================================================================
949 //=======================================================================
951 Standard_Integer Adaptor3d_IsoCurve::NbPoles() const
953 Standard_Integer nb_poles = 0 ;
954 GeomAbs_SurfaceType type = mySurface->GetType() ;
956 case GeomAbs_BezierSurface:
957 case GeomAbs_BSplineSurface:
960 nb_poles = mySurface->NbVPoles() ;
963 nb_poles = mySurface->NbUPoles() ;
966 case GeomAbs_NoneIso:
968 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
971 case GeomAbs_SurfaceOfRevolution:
976 nb_poles = mySurface->BasisCurve()->NbPoles();
980 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
984 case GeomAbs_SurfaceOfExtrusion:
989 nb_poles = mySurface->BasisCurve()->NbPoles();
993 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
999 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
1005 //=======================================================================
1006 //function : NbKnots
1008 //=======================================================================
1010 Standard_Integer Adaptor3d_IsoCurve::NbKnots() const
1012 Standard_Integer nb_knots = 0 ;
1013 GeomAbs_SurfaceType type = mySurface->GetType() ;
1015 case GeomAbs_BSplineSurface:
1019 nb_knots = mySurface->NbVKnots() ;
1022 nb_knots = mySurface->NbUKnots() ;
1025 case GeomAbs_NoneIso:
1027 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
1031 case GeomAbs_SurfaceOfRevolution:
1036 nb_knots = mySurface->BasisCurve()->NbKnots() ;
1040 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
1044 case GeomAbs_SurfaceOfExtrusion:
1049 nb_knots = mySurface->BasisCurve()->NbKnots() ;
1053 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
1058 Standard_NoSuchObject::Raise("Adaptor3d_IsoCurve:NoneIso");
1064 //=======================================================================
1067 //=======================================================================
1069 Handle(Geom_BezierCurve) Adaptor3d_IsoCurve::Bezier() const
1071 Handle(Geom_BezierCurve) C;
1072 if (mySurface->GetType() == GeomAbs_SurfaceOfRevolution) {
1073 C = mySurface->BasisCurve()->Bezier();
1074 C = Handle(Geom_BezierCurve)::DownCast(C->Copy());
1075 C->Rotate(mySurface->AxeOfRevolution(),myParameter);
1077 else if (mySurface->GetType() == GeomAbs_SurfaceOfExtrusion) {
1078 C = mySurface->BasisCurve()->Bezier();
1079 C = Handle(Geom_BezierCurve)::DownCast(C->Copy());
1080 C->Translate(myParameter * gp_Vec(mySurface->Direction()));
1082 else if (myIso == GeomAbs_IsoU) {
1083 C = Handle(Geom_BezierCurve)::DownCast
1084 (mySurface->Bezier()->UIso(myParameter)) ;
1087 C = Handle(Geom_BezierCurve)::DownCast
1088 (mySurface->Bezier()->VIso(myParameter));
1090 // C->Segment(myFirst,myLast);
1094 //=======================================================================
1095 //function : BSpline
1097 //=======================================================================
1099 Handle(Geom_BSplineCurve) Adaptor3d_IsoCurve::BSpline() const
1101 Handle(Geom_BSplineCurve) C;
1102 if (mySurface->GetType() == GeomAbs_SurfaceOfRevolution) {
1103 C = mySurface->BasisCurve()->BSpline();
1104 C = Handle(Geom_BSplineCurve)::DownCast(C->Copy());
1105 C->Rotate(mySurface->AxeOfRevolution(),myParameter);
1107 else if (mySurface->GetType() == GeomAbs_SurfaceOfExtrusion) {
1108 C = mySurface->BasisCurve()->BSpline();
1109 C = Handle(Geom_BSplineCurve)::DownCast(C->Copy());
1110 C->Translate(myParameter * gp_Vec(mySurface->Direction()));
1112 else if (myIso == GeomAbs_IsoU) {
1113 C = Handle(Geom_BSplineCurve)::DownCast
1114 (mySurface->BSpline()->UIso(myParameter)) ;
1117 C = Handle(Geom_BSplineCurve)::DownCast
1118 (mySurface->BSpline()->VIso(myParameter));
1120 // C->Segment(myFirst,myLast);