1 -- Copyright (c) 1991-1999 Matra Datavision
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.
15 class Trsf2d   from gp
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.
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
43 raises ConstructionError from Standard,
44        OutOfRange        from Standard
47 is
49   Create   returns Trsf2d from gp;
50         ---C++: inline
51         --- Purpose : Returns identity transformation.
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 .
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.
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.
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
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.
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".
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.
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.
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.
117   SetTranslationPart (me : in out; V : Vec2d)   is static;
118         --- Purpose :  Replaces the translation vector with V.
121   SetScaleFactor (me : in out; S : Real)        is static;
122         --- Purpose :  Modifies the scale factor.
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
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
139   ScaleFactor (me)  returns Real   is static;
140         --- Purpose : Returns the scale factor.
141         ---C++: inline
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&
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.
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&
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()).
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
179      is static;
184   Invert (me : in out)   raises ConstructionError         is static;
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
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 !!!
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
219   PreMultiply (me : in out; T : Trsf2d)   is static;
221         --- Purpose :
222         --  Computes the transformation composed from <me> and T.
223         --  <me> = T * <me>
225   Power (me : in out; N : Integer)  raises ConstructionError   is static;
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
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
246   SetValues(me : in out;
247             a11, a12, a13, a21, a22, a23 : Real)
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.
260     raises
261         ConstructionError from Standard
263     is static;
265   Orthogonalize(me: in out)
266     is protected;
267         --- Purpose : Makes orthogonalization of "matrix"
270 fields
272   scale  : Real;
273   shape  : TrsfForm;
274   matrix : Mat2d;
275   loc    : XY;
278 friends
280   class GTrsf2d
282 end;