1 // File: GeomAdaptor.cxx
2 // Created: Wed May 3 17:48:12 1995
3 // Author: Bruno DUMORTIER
4 // Copyright: OPEN CASCADE 1995
6 #include <GeomAdaptor.ixx>
8 #include <Geom_Line.hxx>
9 #include <Geom_Circle.hxx>
10 #include <Geom_Ellipse.hxx>
11 #include <Geom_Parabola.hxx>
12 #include <Geom_Hyperbola.hxx>
13 #include <Geom_BezierCurve.hxx>
14 #include <Geom_BSplineCurve.hxx>
15 #include <Geom_TrimmedCurve.hxx>
17 #include <Geom_Plane.hxx>
18 #include <Geom_CylindricalSurface.hxx>
19 #include <Geom_ConicalSurface.hxx>
20 #include <Geom_SphericalSurface.hxx>
21 #include <Geom_ToroidalSurface.hxx>
22 #include <Geom_BezierSurface.hxx>
23 #include <Geom_BSplineSurface.hxx>
24 #include <Geom_SurfaceOfRevolution.hxx>
25 #include <Geom_SurfaceOfLinearExtrusion.hxx>
26 #include <Geom_RectangularTrimmedSurface.hxx>
27 #include <Geom_OffsetSurface.hxx>
29 #include <Adaptor3d_HCurve.hxx>
30 #include <Adaptor3d_HSurface.hxx>
32 //=======================================================================
33 //function : MakeCurve
35 //=======================================================================
37 Handle(Geom_Curve) GeomAdaptor::MakeCurve (const Adaptor3d_Curve& HC)
44 C = new Geom_Line(HC.Line());
48 C = new Geom_Circle(HC.Circle());
52 C = new Geom_Ellipse(HC.Ellipse());
55 case GeomAbs_Parabola:
56 C = new Geom_Parabola(HC.Parabola());
59 case GeomAbs_Hyperbola:
60 C = new Geom_Hyperbola(HC.Hyperbola());
63 case GeomAbs_BezierCurve:
64 C = Handle(Geom_BezierCurve)::DownCast(HC.Bezier()->Copy());
67 case GeomAbs_BSplineCurve:
68 C = Handle(Geom_BSplineCurve)::DownCast(HC.BSpline()->Copy());
71 case GeomAbs_OtherCurve:
72 Standard_DomainError::Raise("GeomAdaptor::MakeCurve : OtherCurve");
76 // trim the curve if necassary.
78 (HC.FirstParameter() != C->FirstParameter()) ||
79 (HC.LastParameter() != C->LastParameter())) {
81 C = new Geom_TrimmedCurve(C,HC.FirstParameter(),HC.LastParameter());
88 //=======================================================================
89 //function : MakeSurface
91 //=======================================================================
93 Handle(Geom_Surface) GeomAdaptor::MakeSurface(const Adaptor3d_Surface& HS)
95 Handle(Geom_Surface) S;
97 switch ( HS.GetType())
100 S = new Geom_Plane(HS.Plane());
103 case GeomAbs_Cylinder:
104 S = new Geom_CylindricalSurface(HS.Cylinder());
108 S = new Geom_ConicalSurface(HS.Cone());
112 S = new Geom_SphericalSurface(HS.Sphere());
116 S = new Geom_ToroidalSurface(HS.Torus());
119 case GeomAbs_BezierSurface:
120 S = Handle(Geom_BezierSurface)::DownCast(HS.Bezier()->Copy());
123 case GeomAbs_BSplineSurface:
124 S = Handle(Geom_BSplineSurface)::DownCast(HS.BSpline()->Copy());
127 case GeomAbs_SurfaceOfRevolution:
128 S = new Geom_SurfaceOfRevolution
129 (GeomAdaptor::MakeCurve(HS.BasisCurve()->Curve()),HS.AxeOfRevolution());
132 case GeomAbs_SurfaceOfExtrusion:
133 S = new Geom_SurfaceOfLinearExtrusion
134 (GeomAdaptor::MakeCurve(HS.BasisCurve()->Curve()),HS.Direction());
137 case GeomAbs_OffsetSurface:
138 S = new Geom_OffsetSurface(GeomAdaptor::MakeSurface(HS.BasisSurface()->Surface()),
142 case GeomAbs_OtherSurface:
143 Standard_DomainError::Raise("GeomAdaptor::MakeSurface : OtherSurface");
150 // trim the surface if necassary.
151 Standard_Real U1, U2, V1, V2;
152 S->Bounds(U1, U2, V1, V2);
153 if ((HS.FirstUParameter() != U1 ) ||
154 (HS.LastUParameter () != U2 ) ||
155 (HS.FirstVParameter() != V1 ) ||
156 (HS.LastVParameter () != V2 ) ) {
158 S = new Geom_RectangularTrimmedSurface
159 (S,HS.FirstUParameter(),HS.LastUParameter(),
160 HS.FirstVParameter(),HS.LastVParameter());