00995643107bad0307af847613e447b546eaa7dd
[occt.git] / src / gp / gp_Pln.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_Pln_HeaderFile
16 #define _gp_Pln_HeaderFile
17
18 #include <Standard.hxx>
19 #include <Standard_DefineAlloc.hxx>
20 #include <Standard_Handle.hxx>
21
22 #include <gp_Ax3.hxx>
23 #include <Standard_Real.hxx>
24 #include <Standard_Boolean.hxx>
25 #include <gp_Ax1.hxx>
26 class Standard_ConstructionError;
27 class gp_Ax3;
28 class gp_Pnt;
29 class gp_Dir;
30 class gp_Ax1;
31 class gp_Lin;
32 class gp_Ax2;
33 class gp_Trsf;
34 class gp_Vec;
35
36
37 //! Describes a plane.
38 //! A plane is positioned in space with a coordinate system
39 //! (a gp_Ax3 object), such that the plane is defined by the
40 //! origin, "X Direction" and "Y Direction" of this coordinate
41 //! system, which is the "local coordinate system" of the
42 //! plane. The "main Direction" of the coordinate system is a
43 //! vector normal to the plane. It gives the plane an implicit
44 //! orientation such that the plane is said to be "direct", if the
45 //! coordinate system is right-handed, or "indirect" in the other case.
46 //! Note: when a gp_Pln plane is converted into a
47 //! Geom_Plane plane, some implicit properties of its local
48 //! coordinate system are used explicitly:
49 //! -   its origin defines the origin of the two parameters of
50 //! the planar surface,
51 //! -   its implicit orientation is also that of the Geom_Plane.
52 //! See Also
53 //! gce_MakePln which provides functions for more complex
54 //! plane constructions
55 //! Geom_Plane which provides additional functions for
56 //! constructing planes and works, in particular, with the
57 //! parametric equations of planes
58 class gp_Pln 
59 {
60 public:
61
62   DEFINE_STANDARD_ALLOC
63
64   
65   //! Creates a plane coincident with OXY plane of the
66   //! reference coordinate system.
67     gp_Pln();
68   
69
70   //! The coordinate system of the plane is defined with the axis
71   //! placement A3.
72   //! The "Direction" of A3 defines the normal to the plane.
73   //! The "Location" of A3 defines the location (origin) of the plane.
74   //! The "XDirection" and "YDirection" of A3 define the "XAxis" and
75   //! the "YAxis" of the plane used to parametrize the plane.
76     gp_Pln(const gp_Ax3& A3);
77   
78
79   //! Creates a plane with the  "Location" point <P>
80   //! and the normal direction <V>.
81   Standard_EXPORT gp_Pln(const gp_Pnt& P, const gp_Dir& V);
82   
83
84   //! Creates a plane from its cartesian equation :
85   //! @code
86   //! A * X + B * Y + C * Z + D = 0.0
87   //! @endcode
88   //! Raises ConstructionError if Sqrt (A*A + B*B + C*C) <= Resolution from gp.
89   Standard_EXPORT gp_Pln(const Standard_Real A, const Standard_Real B, const Standard_Real C, const Standard_Real D);
90   
91
92   //! Returns the coefficients of the plane's cartesian equation :
93   //! @code
94   //! A * X + B * Y + C * Z + D = 0.
95   //! @endcode
96     void Coefficients (Standard_Real& A, Standard_Real& B, Standard_Real& C, Standard_Real& D) const;
97   
98   //! Modifies this plane, by redefining its local coordinate system so that
99   //! -   its origin and "main Direction" become those of the
100   //! axis A1 (the "X Direction" and "Y Direction" are then recomputed).
101   //! Raises ConstructionError if the A1 is parallel to the "XAxis" of the plane.
102     void SetAxis (const gp_Ax1& A1);
103   
104   //! Changes the origin of the plane.
105     void SetLocation (const gp_Pnt& Loc);
106   
107   //! Changes the local coordinate system of the plane.
108     void SetPosition (const gp_Ax3& A3);
109   
110   //! Reverses the   U   parametrization of   the  plane
111   //! reversing the XAxis.
112     void UReverse();
113   
114   //! Reverses the   V   parametrization of   the  plane
115   //! reversing the YAxis.
116     void VReverse();
117   
118   //! returns true if the Ax3 is right handed.
119     Standard_Boolean Direct() const;
120   
121   //! Returns the plane's normal Axis.
122     const gp_Ax1& Axis() const;
123   
124   //! Returns the plane's location (origin).
125     const gp_Pnt& Location() const;
126   
127   //! Returns the local coordinate system of the plane .
128     const gp_Ax3& Position() const;
129   
130   //! Computes the distance between <me> and the point <P>.
131     Standard_Real Distance (const gp_Pnt& P) const;
132   
133   //! Computes the distance between <me> and the line <L>.
134     Standard_Real Distance (const gp_Lin& L) const;
135   
136   //! Computes the distance between two planes.
137     Standard_Real Distance (const gp_Pln& Other) const;
138   
139
140   //! Computes the square distance between <me> and the point <P>.
141     Standard_Real SquareDistance (const gp_Pnt& P) const;
142   
143
144   //! Computes the square distance between <me> and the line <L>.
145     Standard_Real SquareDistance (const gp_Lin& L) const;
146   
147
148   //! Computes the square distance between two planes.
149     Standard_Real SquareDistance (const gp_Pln& Other) const;
150   
151   //! Returns the X axis of the plane.
152     gp_Ax1 XAxis() const;
153   
154   //! Returns the Y axis  of the plane.
155     gp_Ax1 YAxis() const;
156   
157   //! Returns true if this plane contains the point P. This means that
158   //! -   the distance between point P and this plane is less
159   //! than or equal to LinearTolerance, or
160   //! -   line L is normal to the "main Axis" of the local
161   //! coordinate system of this plane, within the tolerance
162   //! AngularTolerance, and the distance between the origin
163   //! of line L and this plane is less than or equal to
164   //! LinearTolerance.
165     Standard_Boolean Contains (const gp_Pnt& P, const Standard_Real LinearTolerance) const;
166   
167   //! Returns true if this plane contains the line L. This means that
168   //! -   the distance between point P and this plane is less
169   //! than or equal to LinearTolerance, or
170   //! -   line L is normal to the "main Axis" of the local
171   //! coordinate system of this plane, within the tolerance
172   //! AngularTolerance, and the distance between the origin
173   //! of line L and this plane is less than or equal to
174   //! LinearTolerance.
175     Standard_Boolean Contains (const gp_Lin& L, const Standard_Real LinearTolerance, const Standard_Real AngularTolerance) const;
176   
177   Standard_EXPORT void Mirror (const gp_Pnt& P);
178   
179
180   //! Performs the symmetrical transformation of a plane with respect
181   //! to the point <P> which is the center of the symmetry
182   //! Warnings :
183   //! The normal direction to the plane is not changed.
184   //! The "XAxis" and the "YAxis" are reversed.
185   Standard_NODISCARD Standard_EXPORT gp_Pln Mirrored (const gp_Pnt& P) const;
186   
187   Standard_EXPORT void Mirror (const gp_Ax1& A1);
188   
189   //! Performs   the symmetrical transformation  of a
190   //! plane with respect to an axis placement  which is the axis
191   //! of  the symmetry.  The  transformation is performed on the
192   //! "Location" point, on  the "XAxis"  and the "YAxis".    The
193   //! resulting normal  direction  is  the cross product between
194   //! the "XDirection" and the "YDirection" after transformation
195   //! if  the  initial plane was right  handed,  else  it is the
196   //! opposite.
197   Standard_NODISCARD Standard_EXPORT gp_Pln Mirrored (const gp_Ax1& A1) const;
198   
199   Standard_EXPORT void Mirror (const gp_Ax2& A2);
200   
201   //! Performs the  symmetrical transformation  of  a
202   //! plane    with respect to    an axis  placement.   The axis
203   //! placement  <A2> locates the plane  of  the symmetry.   The
204   //! transformation is performed  on  the  "Location" point, on
205   //! the  "XAxis" and  the    "YAxis".  The resulting    normal
206   //! direction is the cross  product between   the "XDirection"
207   //! and the "YDirection"  after  transformation if the initial
208   //! plane was right handed, else it is the opposite.
209   Standard_NODISCARD Standard_EXPORT gp_Pln Mirrored (const gp_Ax2& A2) const;
210   
211     void Rotate (const gp_Ax1& A1, const Standard_Real Ang);
212   
213
214   //! rotates a plane. A1 is the axis of the rotation.
215   //! Ang is the angular value of the rotation in radians.
216     Standard_NODISCARD gp_Pln Rotated (const gp_Ax1& A1, const Standard_Real Ang) const;
217   
218     void Scale (const gp_Pnt& P, const Standard_Real S);
219   
220
221   //! Scales a plane. S is the scaling value.
222     Standard_NODISCARD gp_Pln Scaled (const gp_Pnt& P, const Standard_Real S) const;
223   
224     void Transform (const gp_Trsf& T);
225   
226
227   //! Transforms a plane with the transformation T from class Trsf.
228   //! The transformation is performed on the "Location"
229   //! point, on the "XAxis" and the "YAxis".
230   //! The resulting normal direction is the cross product between
231   //! the "XDirection" and the "YDirection" after transformation.
232     Standard_NODISCARD gp_Pln Transformed (const gp_Trsf& T) const;
233   
234     void Translate (const gp_Vec& V);
235   
236
237   //! Translates a plane in the direction of the vector V.
238   //! The magnitude of the translation is the vector's magnitude.
239     Standard_NODISCARD gp_Pln Translated (const gp_Vec& V) const;
240   
241     void Translate (const gp_Pnt& P1, const gp_Pnt& P2);
242   
243
244   //! Translates a plane from the point P1 to the point P2.
245     Standard_NODISCARD gp_Pln Translated (const gp_Pnt& P1, const gp_Pnt& P2) const;
246
247
248   //! Dumps the content of me into the stream
249   Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
250
251
252
253 protected:
254
255
256
257
258
259 private:
260
261
262
263   gp_Ax3 pos;
264
265
266 };
267
268
269 #include <gp_Pln.lxx>
270
271
272
273
274
275 #endif // _gp_Pln_HeaderFile