0024927: Getting rid of "Persistent" functionality -- Storable
[occt.git] / src / gp / gp_Trsf2d.cdl
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 class Trsf2d   from gp
16
17         --- Purpose :
18         --  Defines a non-persistent transformation in 2D space.
19         --  The following transformations are implemented :  
20         --  . Translation, Rotation, Scale
21         --  . Symmetry with respect to a point and a line.
22         --  Complex transformations can be obtained by combining the
23         --  previous elementary transformations using the method Multiply.
24         --  The transformations can be represented as follow :
25         --  
26         --       V1   V2   T       XY        XY
27         --    | a11  a12  a13 |   | x |     | x'|
28         --    | a21  a22  a23 |   | y |     | y'|
29         --    |  0    0    1  |   | 1 |     | 1 |
30         --
31         --   where {V1, V2} defines the vectorial part of the transformation
32         --   and T defines the translation part of the transformation.
33         --  This transformation never change the nature of the objects.
34  
35 uses Ax2d     from gp,
36      Mat2d    from gp,
37      Pnt2d    from gp,
38      TrsfForm from gp,
39      Trsf     from gp,
40      Vec2d    from gp,
41      XY       from gp
42
43 raises ConstructionError from Standard,
44        OutOfRange        from Standard
45
46
47 is
48
49   Create   returns Trsf2d from gp;
50         ---C++: inline
51         --- Purpose : Returns identity transformation.
52
53
54   Create(T : Trsf from gp) 
55   returns Trsf2d from gp
56   raises ConstructionError;
57         ---C++: inline
58         ---Purpose: Creates a 2d transformation in the XY plane from a
59         --          3d transformation .
60
61   SetMirror (me : in out; P : Pnt2d)    is static;
62         ---C++: inline
63         --- Purpose :
64         --  Changes the transformation into a symmetrical transformation.
65         --  P is the center of the symmetry.
66
67
68   SetMirror (me : in out; A : Ax2d)    is static;
69         --- Purpose :
70         --  Changes the transformation into a symmetrical transformation.
71         --  A is the center of the axial symmetry.
72
73
74   SetRotation (me : in out; P : Pnt2d; Ang : Real)    is static;
75         ---C++: inline
76         --- Purpose :
77         --  Changes the transformation into a rotation.
78         --  P is the rotation's center and Ang is the angular value of the 
79         --  rotation in radian.
80
81   
82   SetScale (me : in out; P : Pnt2d; S : Real)    is static;
83         ---C++: inline
84         --- Purpose :
85         --  Changes the transformation into a scale.
86         --  P is the center of the scale and S is the scaling value.
87
88
89   SetTransformation (me : in out; FromSystem1, ToSystem2 : Ax2d)  is static;
90         --- Purpose :
91         --  Changes a transformation allowing passage from the coordinate
92         --  system "FromSystem1" to the coordinate system "ToSystem2".
93
94
95   SetTransformation (me : in out; ToSystem : Ax2d)    is static;
96         --- Purpose :
97         --  Changes the transformation allowing passage from the basic
98         --  coordinate system
99         --  {P(0.,0.,0.), VX (1.,0.,0.), VY (0.,1.,0.)}
100         --  to the local coordinate system defined with the Ax2d ToSystem.
101
102
103   SetTranslation (me : in out; V : Vec2d)       is static;
104         ---C++: inline
105         --- Purpose :
106         --  Changes the transformation into a translation.
107         --  V is the vector of the translation.
108
109
110   SetTranslation (me: in out; P1, P2 : Pnt2d)   is static;
111         ---C++: inline
112         --- Purpose :
113         --  Makes the transformation into a translation from
114         --  the point P1 to the point P2.
115
116
117   SetTranslationPart (me : in out; V : Vec2d)   is static;
118         --- Purpose :  Replaces the translation vector with V.
119
120
121   SetScaleFactor (me : in out; S : Real)        is static;
122         --- Purpose :  Modifies the scale factor.
123      
124
125
126   IsNegative (me)  returns Boolean    is static;
127         --- Purpose : Returns true if the determinant of the vectorial part of
128         -- this transformation is negative..
129         ---C++: inline
130
131   Form (me)  returns TrsfForm   is static;
132         --- Purpose :
133         --  Returns the nature of the transformation. It can be  an
134         -- identity transformation, a rotation, a translation, a mirror
135         -- (relative to a point or an axis), a scaling transformation,
136         -- or a compound transformation.
137         ---C++: inline
138         
139   ScaleFactor (me)  returns Real   is static;
140         --- Purpose : Returns the scale factor.
141         ---C++: inline
142
143
144   TranslationPart (me)   returns XY    is static;
145         --- Purpose :
146         --  Returns the translation part of the transformation's matrix
147         ---C++: inline
148         ---C++: return const&
149
150
151   VectorialPart (me)   returns Mat2d    is static;
152         --- Purpose : 
153         --  Returns the vectorial part of the transformation. It is a 
154         --  2*2 matrix which includes the scale factor.
155
156
157   HVectorialPart (me)   returns Mat2d   is static;
158         --- Purpose : 
159         --  Returns the homogeneous vectorial part of the transformation.
160         --  It is a 2*2 matrix which doesn't include the scale factor.
161         --  The coefficients of this matrix must be multiplied by the
162         --  scale factor to obtain the coefficients of the transformation.
163         ---C++: inline
164         ---C++: return const&
165
166   RotationPart (me) returns Real is static;
167         --- Purpose : 
168         --  Returns the angle corresponding to the rotational component
169         --  of the transformation matrix (operation opposite to SetRotation()).
170
171   Value (me; Row, Col : Integer)   returns Real
172         ---C++: inline
173         --- Purpose :
174         --  Returns the coefficients of the transformation's matrix.
175         --  It is a 2 rows * 3 columns matrix.
176         -- Raises OutOfRange if Row < 1 or Row > 2 or Col < 1 or Col > 3
177      raises OutOfRange
178        
179      is static;
180
181
182
183
184   Invert (me : in out)   raises ConstructionError         is static;
185
186   Inverted (me) returns Trsf2d   raises ConstructionError is static;
187         --- Purpose :
188         --  Computes the reverse transformation.
189         --  Raises an exception if the matrix of the transformation
190         --  is not inversible, it means that the scale factor is lower
191         --  or equal to Resolution from package gp.
192         ---C++: inline
193
194
195
196     
197
198   Multiplied (me; T : Trsf2d)   returns Trsf2d   is static;
199         ---C++: inline
200         ---C++: alias operator *
201         --  Computes the transformation composed from <T> and  <me>.
202         --  In a C++ implementation you can also write Tcomposed = <me> * T.
203         --  Example :
204         --      Trsf2d T1, T2, Tcomp; ...............
205         --      //composition :
206         --        Tcomp = T2.Multiplied(T1);         // or   (Tcomp = T2 * T1)
207         --      // transformation of a point
208         --        Pnt2d P1(10.,3.,4.);
209         --        Pnt2d P2 = P1.Transformed(Tcomp);  //using Tcomp
210         --        Pnt2d P3 = P1.Transformed(T1);     //using T1 then T2
211         --        P3.Transform(T2);                  // P3 = P2 !!!
212
213   Multiply (me : in out; T : Trsf2d)             is static;
214         ---C++: alias operator *=
215         --- Purpose :
216         --  Computes the transformation composed from <me> and T.
217         --  <me> = <me> * T
218
219   PreMultiply (me : in out; T : Trsf2d)   is static;
220
221         --- Purpose :
222         --  Computes the transformation composed from <me> and T.
223         --  <me> = T * <me>
224
225   Power (me : in out; N : Integer)  raises ConstructionError   is static;
226
227   Powered (me : in out; N : Integer)  returns Trsf2d
228      raises ConstructionError
229      is static;
230         --- Purpose :
231         --  Computes the following composition of transformations
232         --  <me> * <me> * .......* <me>,  N time.
233         --  if N = 0 <me> = Identity
234         --  if N < 0 <me> = <me>.Inverse() *...........* <me>.Inverse().
235         --
236         --  Raises if N < 0 and if the matrix of the transformation not
237         --  inversible.
238         ---C++: inline
239         
240   Transforms (me; X, Y : out Real)  is static;
241         ---C++: inline
242   Transforms (me; Coord : out XY)   is static;
243         ---C++: inline    
244         --- Purpose : Transforms  a doublet XY with a Trsf2d
245
246   SetValues(me : in out;
247             a11, a12, a13, a21, a22, a23 : Real)
248
249         ---Purpose: Sets the coefficients  of the transformation. The 
250          --         transformation  of the  point  x,y is  the point
251          --         x',y' with :
252          --
253          --         x' = a11 x + a12 y + a13
254          --         y' = a21 x + a22 y + a23
255          --
256          --         The method Value(i,j) will return aij.
257          --         Raises ConstructionError if the determinant of the aij is null.
258          --         If the matrix as not a uniform scale it will be orthogonalized before future using.
259
260     raises
261         ConstructionError from Standard
262
263     is static;
264         
265   Orthogonalize(me: in out)
266     is protected;
267         --- Purpose : Makes orthogonalization of "matrix"
268   
269
270 fields
271
272   scale  : Real;
273   shape  : TrsfForm;
274   matrix : Mat2d;
275   loc    : XY; 
276
277
278 friends 
279
280   class GTrsf2d
281
282 end;
283