summaryrefslogtreecommitdiff
path: root/inc/gp_Trsf2d.hxx
blob: 85747fbd1f5584b1eb92d56cad476b5a753cac00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to 
// this header file considered to be the "object code" form of the original source.

#ifndef _gp_Trsf2d_HeaderFile
#define _gp_Trsf2d_HeaderFile

#ifndef _Standard_HeaderFile
#include <Standard.hxx>
#endif
#ifndef _Standard_Macro_HeaderFile
#include <Standard_Macro.hxx>
#endif

#ifndef _Standard_Real_HeaderFile
#include <Standard_Real.hxx>
#endif
#ifndef _gp_TrsfForm_HeaderFile
#include <gp_TrsfForm.hxx>
#endif
#ifndef _gp_Mat2d_HeaderFile
#include <gp_Mat2d.hxx>
#endif
#ifndef _gp_XY_HeaderFile
#include <gp_XY.hxx>
#endif
#ifndef _Standard_Storable_HeaderFile
#include <Standard_Storable.hxx>
#endif
#ifndef _Standard_Boolean_HeaderFile
#include <Standard_Boolean.hxx>
#endif
#ifndef _Standard_Integer_HeaderFile
#include <Standard_Integer.hxx>
#endif
#ifndef _Standard_PrimitiveTypes_HeaderFile
#include <Standard_PrimitiveTypes.hxx>
#endif
class Standard_ConstructionError;
class Standard_OutOfRange;
class gp_GTrsf2d;
class gp_Trsf;
class gp_Pnt2d;
class gp_Ax2d;
class gp_Vec2d;
class gp_XY;
class gp_Mat2d;


Standard_EXPORT const Handle(Standard_Type)& STANDARD_TYPE(gp_Trsf2d);


//!  Defines a non-persistent transformation in 2D space. <br>
//!  The following transformations are implemented : <br>
//!  . Translation, Rotation, Scale <br>
//!  . Symmetry with respect to a point and a line. <br>
//!  Complex transformations can be obtained by combining the <br>
//!  previous elementary transformations using the method Multiply. <br>
//!  The transformations can be represented as follow : <br>
//! <br>
//!       V1   V2   T       XY        XY <br>
//!    | a11  a12  a13 |   | x |     | x'| <br>
//!    | a21  a22  a23 |   | y |     | y'| <br>
//!    |  0    0    1  |   | 1 |     | 1 | <br>
class gp_Trsf2d  {

public:
  void* operator new(size_t,void* anAddress) 
  {
    return anAddress;
  }
  void* operator new(size_t size) 
  {
    return Standard::Allocate(size); 
  }
  void  operator delete(void *anAddress) 
  {
    if (anAddress) Standard::Free((Standard_Address&)anAddress); 
  }

  //! Returns identity transformation. <br>
      gp_Trsf2d();
  //! Creates a 2d transformation in the XY plane from a <br>
//!          3d transformation . <br>
      gp_Trsf2d(const gp_Trsf& T);
  
//!  Changes the transformation into a symmetrical transformation. <br>
//!  P is the center of the symmetry. <br>
        void SetMirror(const gp_Pnt2d& P) ;
  
//!  Changes the transformation into a symmetrical transformation. <br>
//!  A is the center of the axial symmetry. <br>
  Standard_EXPORT     void SetMirror(const gp_Ax2d& A) ;
  
//!  Changes the transformation into a rotation. <br>
//!  P is the rotation's center and Ang is the angular value of the <br>
//!  rotation in radian. <br>
        void SetRotation(const gp_Pnt2d& P,const Standard_Real Ang) ;
  
//!  Changes the transformation into a scale. <br>
//!  P is the center of the scale and S is the scaling value. <br>
        void SetScale(const gp_Pnt2d& P,const Standard_Real S) ;
  
//!  Changes a transformation allowing passage from the coordinate <br>
//!  system "FromSystem1" to the coordinate system "ToSystem2". <br>
  Standard_EXPORT     void SetTransformation(const gp_Ax2d& FromSystem1,const gp_Ax2d& ToSystem2) ;
  
//!  Changes the transformation allowing passage from the basic <br>
//!  coordinate system <br>
//!  {P(0.,0.,0.), VX (1.,0.,0.), VY (0.,1.,0.)} <br>
//!  to the local coordinate system defined with the Ax2d ToSystem. <br>
  Standard_EXPORT     void SetTransformation(const gp_Ax2d& ToSystem) ;
  
//!  Changes the transformation into a translation. <br>
//!  V is the vector of the translation. <br>
        void SetTranslation(const gp_Vec2d& V) ;
  
//!  Makes the transformation into a translation from <br>
//!  the point P1 to the point P2. <br>
        void SetTranslation(const gp_Pnt2d& P1,const gp_Pnt2d& P2) ;
  //!  Replaces the translation vector with V. <br>
  Standard_EXPORT     void SetTranslationPart(const gp_Vec2d& V) ;
  //!  Modifies the scale factor. <br>
  Standard_EXPORT     void SetScaleFactor(const Standard_Real S) ;
  //! Returns true if the determinant of the vectorial part of <br>
//! this transformation is negative.. <br>
        Standard_Boolean IsNegative() const;
  
//!  Returns the nature of the transformation. It can be  an <br>
//! identity transformation, a rotation, a translation, a mirror <br>
//! (relative to a point or an axis), a scaling transformation, <br>
//! or a compound transformation. <br>
        gp_TrsfForm Form() const;
  //! Returns the scale factor. <br>
        Standard_Real ScaleFactor() const;
  
//!  Returns the translation part of the transformation's matrix <br>
       const gp_XY& TranslationPart() const;
  
//!  Returns the vectorial part of the transformation. It is a <br>
//!  2*2 matrix which includes the scale factor. <br>
  Standard_EXPORT     gp_Mat2d VectorialPart() const;
  
//!  Returns the homogeneous vectorial part of the transformation. <br>
//!  It is a 2*2 matrix which doesn't include the scale factor. <br>
//!  The coefficients of this matrix must be multiplied by the <br>
//!  scale factor to obtain the coefficients of the transformation. <br>
       const gp_Mat2d& HVectorialPart() const;
  
//!  Returns the angle corresponding to the rotational component <br>
//!  of the transformation matrix (operation opposite to SetRotation()). <br>
  Standard_EXPORT     Standard_Real RotationPart() const;
  
//!  Returns the coefficients of the transformation's matrix. <br>
//!  It is a 2 rows * 3 columns matrix. <br>
//! Raises OutOfRange if Row < 1 or Row > 2 or Col < 1 or Col > 3 <br>
        Standard_Real Value(const Standard_Integer Row,const Standard_Integer Col) const;
  
  Standard_EXPORT     void Invert() ;
  
//!  Computes the reverse transformation. <br>
//!  Raises an exception if the matrix of the transformation <br>
//!  is not inversible, it means that the scale factor is lower <br>
//!  or equal to Resolution from package gp. <br>
        gp_Trsf2d Inverted() const;
  
        gp_Trsf2d Multiplied(const gp_Trsf2d& T) const;
      gp_Trsf2d operator *(const gp_Trsf2d& T) const
{
  return Multiplied(T);
}
  
//!  Computes the transformation composed from <T> and  <me>. <br>
//!  In a C++ implementation you can also write Tcomposed = <me> * T. <br>
//!  Example : <br>
//!      Trsf2d T1, T2, Tcomp; ............... <br>
//!      //composition : <br>
//!        Tcomp = T2.Multiplied(T1);         // or   (Tcomp = T2 * T1) <br>
//!      // transformation of a point <br>
//!        Pnt2d P1(10.,3.,4.); <br>
//!        Pnt2d P2 = P1.Transformed(Tcomp);  //using Tcomp <br>
//!        Pnt2d P3 = P1.Transformed(T1);     //using T1 then T2 <br>
//!        P3.Transform(T2);                  // P3 = P2 !!! <br>
  Standard_EXPORT     void Multiply(const gp_Trsf2d& T) ;
    void operator *=(const gp_Trsf2d& T) 
{
  Multiply(T);
}
  
//!  Computes the transformation composed from <me> and T. <br>
//!  <me> = T * <me> <br>
  Standard_EXPORT     void PreMultiply(const gp_Trsf2d& T) ;
  
  Standard_EXPORT     void Power(const Standard_Integer N) ;
  
//!  Computes the following composition of transformations <br>
//!  <me> * <me> * .......* <me>,  N time. <br>
//!  if N = 0 <me> = Identity <br>
//!  if N < 0 <me> = <me>.Inverse() *...........* <me>.Inverse(). <br>
        gp_Trsf2d Powered(const Standard_Integer N) ;
  
        void Transforms(Standard_Real& X,Standard_Real& Y) const;
  //! Transforms  a doublet XY with a Trsf2d <br>
        void Transforms(gp_XY& Coord) const;
    Standard_Real _CSFDB_Getgp_Trsf2dscale() const { return scale; }
    void _CSFDB_Setgp_Trsf2dscale(const Standard_Real p) { scale = p; }
    gp_TrsfForm _CSFDB_Getgp_Trsf2dshape() const { return shape; }
    void _CSFDB_Setgp_Trsf2dshape(const gp_TrsfForm p) { shape = p; }
    const gp_Mat2d& _CSFDB_Getgp_Trsf2dmatrix() const { return matrix; }
    const gp_XY& _CSFDB_Getgp_Trsf2dloc() const { return loc; }

friend class gp_GTrsf2d;


protected:




private: 


Standard_Real scale;
gp_TrsfForm shape;
gp_Mat2d matrix;
gp_XY loc;


};


#include <gp_Trsf2d.lxx>



// other Inline functions and methods (like "C++: function call" methods)


#endif