de2d331942380687f83f5a44443085a778cbdc9a
[occt.git] / src / gp / gp_Parab2d.hxx
1 // Copyright (c) 1991-1999 Matra Datavision
2 // Copyright (c) 1999-2014 OPEN CASCADE SAS
3 //
4 // This file is part of Open CASCADE Technology software library.
5 //
6 // This library is free software; you can redistribute it and/or modify it under
7 // the terms of the GNU Lesser General Public License version 2.1 as published
8 // by the Free Software Foundation, with special exception defined in the file
9 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10 // distribution for complete text of the license and disclaimer of any warranty.
11 //
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
14
15 #ifndef _gp_Parab2d_HeaderFile
16 #define _gp_Parab2d_HeaderFile
17
18 #include <Standard.hxx>
19 #include <Standard_DefineAlloc.hxx>
20 #include <Standard_Handle.hxx>
21
22 #include <gp_Ax22d.hxx>
23 #include <Standard_Real.hxx>
24 #include <Standard_Boolean.hxx>
25 #include <gp_Ax2d.hxx>
26 #include <gp_Pnt2d.hxx>
27 class Standard_ConstructionError;
28 class gp_Ax2d;
29 class gp_Ax22d;
30 class gp_Pnt2d;
31 class gp_Trsf2d;
32 class gp_Vec2d;
33
34
35 //! Describes a parabola in the plane (2D space).
36 //! A parabola is defined by its focal length (that is, the
37 //! distance between its focus and apex) and positioned in
38 //! the plane with a coordinate system (a gp_Ax22d object) where:
39 //! -   the origin of the coordinate system is on the apex of
40 //! the parabola, and
41 //! -   the "X Axis" of the coordinate system is the axis of
42 //! symmetry; the parabola is on the positive side of this axis.
43 //! This coordinate system is the "local coordinate system"
44 //! of the parabola. Its orientation (direct or indirect sense)
45 //! gives an implicit orientation to the parabola.
46 //! In this coordinate system, the equation for the parabola is:
47 //! Y**2 = (2*P) * X.
48 //! where P, referred to as the parameter of the parabola, is
49 //! the distance between the focus and the directrix (P is
50 //! twice the focal length).
51 //! See Also
52 //! GCE2d_MakeParab2d which provides functions for
53 //! more complex parabola constructions
54 //! Geom2d_Parabola which provides additional functions
55 //! for constructing parabolas and works, in particular, with
56 //! the parametric equations of parabolas
57 class gp_Parab2d 
58 {
59 public:
60
61   DEFINE_STANDARD_ALLOC
62
63   
64   //! Creates an indefinite parabola.
65     gp_Parab2d();
66   
67
68   //! Creates a parabola with its vertex point, its axis of symmetry
69   //! ("XAxis") and its focal length.
70   //! The sense of parametrization is given by Sense.
71   //! Warnings : It is possible to have Focal = 0.
72   //! Raises ConstructionError if Focal < 0.0
73     gp_Parab2d(const gp_Ax2d& MirrorAxis, const Standard_Real Focal, const Standard_Boolean Sense = Standard_True);
74   
75
76   //! Creates a parabola with its vertex point, its axis of symmetry
77   //! ("XAxis") and its focal length.
78   //! The sense of parametrization is given by A.
79   //! Warnings : It is possible to have Focal = 0.
80   //! Raises ConstructionError if Focal < 0.0
81     gp_Parab2d(const gp_Ax22d& A, const Standard_Real Focal);
82   
83
84   //! Creates a parabola with the directrix and the focus point.
85   //! The sense of parametrization is given by Sense.
86   Standard_EXPORT gp_Parab2d(const gp_Ax2d& D, const gp_Pnt2d& F, const Standard_Boolean Sense = Standard_True);
87   
88
89   //! Creates a parabola with the directrix and the focus point.
90   //! The Sense of parametrization is given by D.
91   Standard_EXPORT gp_Parab2d(const gp_Ax22d& D, const gp_Pnt2d& F);
92   
93
94   //! Changes the focal distance of the parabola
95   //! Warnings : It is possible to have Focal = 0.
96   //! Raises ConstructionError if Focal < 0.0
97     void SetFocal (const Standard_Real Focal);
98   
99
100   //! Changes the "Location" point of the parabola. It is the
101   //! vertex of the parabola.
102     void SetLocation (const gp_Pnt2d& P);
103   
104   //! Modifies this parabola, by redefining its local coordinate system so that
105   //! its origin and "X Direction" become those of the axis
106   //! MA. The "Y Direction" of the local coordinate system is
107   //! then recomputed. The orientation of the local
108   //! coordinate system is not modified.
109     void SetMirrorAxis (const gp_Ax2d& A);
110   
111
112   //! Changes the local coordinate system of the parabola.
113   //! The "Location" point of A becomes the vertex of the parabola.
114     void SetAxis (const gp_Ax22d& A);
115   
116
117   //! Computes the coefficients of the implicit equation of the parabola.
118   //! A * (X**2) + B * (Y**2) + 2*C*(X*Y) + 2*D*X + 2*E*Y + F = 0.
119   Standard_EXPORT void Coefficients (Standard_Real& A, Standard_Real& B, Standard_Real& C, Standard_Real& D, Standard_Real& E, Standard_Real& F) const;
120   
121
122   //! Computes the directrix of the parabola.
123   //! The directrix is:
124   //! -   a line parallel to the "Y Direction" of the local
125   //! coordinate system of this parabola, and
126   //! -   located on the negative side of the axis of symmetry,
127   //! at a distance from the apex which is equal to the focal  length of this parabola.
128   //! The directrix is returned as an axis (a gp_Ax2d object),
129   //! the origin of which is situated on the "X Axis" of this parabola.
130     gp_Ax2d Directrix() const;
131   
132
133   //! Returns the distance between the vertex and the focus
134   //! of the parabola.
135     Standard_Real Focal() const;
136   
137   //! Returns the focus of the parabola.
138     gp_Pnt2d Focus() const;
139   
140   //! Returns the vertex of the parabola.
141     gp_Pnt2d Location() const;
142   
143
144   //! Returns the symmetry axis of the parabola.
145   //! The "Location" point of this axis is the vertex of the parabola.
146     gp_Ax2d MirrorAxis() const;
147   
148
149   //! Returns the local coordinate system of the parabola.
150   //! The "Location" point of this axis is the vertex of the parabola.
151     gp_Ax22d Axis() const;
152   
153
154   //! Returns the distance between the focus and the
155   //! directrix of the parabola.
156     Standard_Real Parameter() const;
157   
158     void Reverse();
159   
160
161   //! Reverses the orientation of the local coordinate system
162   //! of this parabola (the "Y Direction" is reversed).
163   //! Therefore, the implicit orientation of this parabola is reversed.
164   //! Note:
165   //! -   Reverse assigns the result to this parabola, while
166   //! -   Reversed creates a new one.
167     gp_Parab2d Reversed() const;
168   
169   //! Returns true if the local coordinate system is direct
170   //! and false in the other case.
171     Standard_Boolean IsDirect() const;
172   
173   Standard_EXPORT void Mirror (const gp_Pnt2d& P);
174   
175
176   //! Performs the symmetrical transformation of a parabola with respect
177   //! to the point P which is the center of the symmetry
178   Standard_EXPORT gp_Parab2d Mirrored (const gp_Pnt2d& P) const;
179   
180   Standard_EXPORT void Mirror (const gp_Ax2d& A);
181   
182
183   //! Performs the symmetrical transformation of a parabola with respect
184   //! to an axis placement which is the axis of the symmetry.
185   Standard_EXPORT gp_Parab2d Mirrored (const gp_Ax2d& A) const;
186   
187     void Rotate (const gp_Pnt2d& P, const Standard_Real Ang);
188   
189
190   //! Rotates a parabola. P is the center of the rotation.
191   //! Ang is the angular value of the rotation in radians.
192     gp_Parab2d Rotated (const gp_Pnt2d& P, const Standard_Real Ang) const;
193   
194     void Scale (const gp_Pnt2d& P, const Standard_Real S);
195   
196
197   //! Scales a parabola. S is the scaling value.
198   //! If S is negative the direction of the symmetry axis
199   //! "XAxis" is reversed and the direction of the "YAxis" too.
200     gp_Parab2d Scaled (const gp_Pnt2d& P, const Standard_Real S) const;
201   
202     void Transform (const gp_Trsf2d& T);
203   
204
205   //! Transforms an parabola with the transformation T from class Trsf2d.
206     gp_Parab2d Transformed (const gp_Trsf2d& T) const;
207   
208     void Translate (const gp_Vec2d& V);
209   
210
211   //! Translates a parabola in the direction of the vector V.
212   //! The magnitude of the translation is the vector's magnitude.
213     gp_Parab2d Translated (const gp_Vec2d& V) const;
214   
215     void Translate (const gp_Pnt2d& P1, const gp_Pnt2d& P2);
216   
217
218   //! Translates a parabola from the point P1 to the point P2.
219     gp_Parab2d Translated (const gp_Pnt2d& P1, const gp_Pnt2d& P2) const;
220
221
222
223
224 protected:
225
226
227
228
229
230 private:
231
232
233
234   gp_Ax22d pos;
235   Standard_Real focalLength;
236
237
238 };
239
240
241 #include <gp_Parab2d.lxx>
242
243
244
245
246
247 #endif // _gp_Parab2d_HeaderFile