0024927: Getting rid of "Persistent" functionality -- Storable
[occt.git] / src / gp / gp_XYZ.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 XYZ   from gp
16
17         --- Purpose :
18         --  This class describes a cartesian coordinate entity in 
19         --  3D space {X,Y,Z}. This entity is used for algebraic
20         --  calculation. This entity can be transformed
21         --  with a "Trsf" or a  "GTrsf" from package "gp".
22         -- It is used in vectorial computations or for holding this type
23         -- of information in data structures.
24 uses  Mat from gp
25
26 raises ConstructionError from Standard,
27        OutOfRange        from Standard
28
29 is
30
31
32   Create   returns XYZ;
33         ---C++: inline
34         --- Purpose : Creates an XYZ object with zero co-ordinates (0,0,0)
35
36   Create (X, Y, Z : Real)  returns XYZ;
37         ---C++:inline
38         --- Purpose : creates an XYZ with given coordinates
39
40   SetCoord (me : in out; X, Y, Z : Real)
41         ---C++: inline
42         ---Purpose: For this XYZ object, assigns
43         --   the values X, Y and Z to its three coordinates
44      is static;
45
46   SetCoord (me : in out; Index : Integer; Xi : Real)
47         ---C++:inline
48         --- Purpose :
49         --  modifies the coordinate of range Index 
50         --  Index = 1 => X is modified
51         --  Index = 2 => Y is modified
52         --  Index = 3 => Z is modified 
53         --  Raises OutOfRange if Index != {1, 2, 3}.
54      raises OutOfRange
55      is static;
56
57   SetX (me: in out; X : Real)    is static;
58         ---C++: inline
59         ---Purpose: Assigns the given value to the X coordinate
60
61   SetY (me: in out; Y : Real)    is static;
62         ---C++: inline
63         ---Purpose: Assigns the given value to the Y coordinate
64
65   SetZ (me: in out; Z : Real)    is static;
66         ---C++: inline
67         ---Purpose: Assigns the given value to the Z coordinate
68
69    Coord (me; Index : Integer)  returns Real
70         ---C++: inline
71         --- Purpose :
72         --  returns the coordinate of range Index :
73         --  Index = 1 => X is returned
74         --  Index = 2 => Y is returned
75         --  Index = 3 => Z is returned
76         --  
77         -- Raises OutOfRange if Index != {1, 2, 3}.
78       raises OutOfRange
79       is static;
80
81    ChangeCoord (me: in out; theIndex : Integer) returns Real
82       ---C++: inline
83       ---C++: return &
84       raises OutOfRange;
85
86
87   Coord (me; X, Y, Z : out Real)  is static;
88         ---C++: inline
89         --Purpose: For this XYZ object, returns:
90         -- -   its coordinates X, Y, and Z 
91     
92   X (me)  returns Real            is static;
93         ---C++: inline
94         ---Purpose: Returns the X coordinate
95
96   Y (me)  returns Real            is static;
97         ---C++: inline
98         ---Purpose: Returns the Y coordinate
99
100   Z (me)  returns Real            is static;
101         ---C++: inline
102         ---Purpose: Returns the Z coordinate
103
104   Modulus (me)         returns Real    is static;
105         --- Purpose : computes Sqrt (X*X + Y*Y + Z*Z) where X, Y and Z are the three coordinates of this XYZ object.
106         ---C++: inline
107
108   SquareModulus (me)  returns Real     is static;
109         --- Purpose : Computes X*X + Y*Y + Z*Z where X, Y and Z are the three coordinates of this XYZ object.
110         ---C++: inline
111
112   IsEqual (me; Other : XYZ; Tolerance : Real)   returns Boolean
113         --- Purpose :
114         --  Returns True if he coordinates of this XYZ object are
115         -- equal to the respective coordinates Other,
116         -- within the specified tolerance Tolerance. I.e.:
117         --  abs(<me>.X() - Other.X()) <= Tolerance and
118         --  abs(<me>.Y() - Other.Y()) <= Tolerance and 
119         --  abs(<me>.Z() - Other.Z()) <= Tolerance.
120      is static;
121
122
123   Add (me : in out; Other : XYZ)         is static;
124         --- Purposes :
125         -- <me>.X() = <me>.X() + Other.X()
126         -- <me>.Y() = <me>.Y() + Other.Y()
127         -- <me>.Z() = <me>.Z() + Other.Z()
128         ---C++: inline
129         ---C++: alias operator +=
130
131   Added (me; Other : XYZ)  returns XYZ   is static;
132         ---C++:inline
133         --- Purposes :
134         -- new.X() = <me>.X() + Other.X()
135         -- new.Y() = <me>.Y() + Other.Y()
136         -- new.Z() = <me>.Z() + Other.Z()
137         ---C++: alias operator +
138
139   Cross (me : in out; Right : XYZ)       is static;
140         ---C++:inline
141         ---C++: alias operator ^=
142         --- Purposes :
143         -- <me>.X() = <me>.Y() * Other.Z() - <me>.Z() * Other.Y()
144         -- <me>.Y() = <me>.Z() * Other.X() - <me>.X() * Other.Z()
145         -- <me>.Z() = <me>.X() * Other.Y() - <me>.Y() * Other.X()
146
147   Crossed (me; Right : XYZ)   returns XYZ   is static;
148         ---C++:inline
149         ---C++: alias operator ^
150         --- Purposes :
151         -- new.X() = <me>.Y() * Other.Z() - <me>.Z() * Other.Y()
152         -- new.Y() = <me>.Z() * Other.X() - <me>.X() * Other.Z()
153         -- new.Z() = <me>.X() * Other.Y() - <me>.Y() * Other.X()
154
155   CrossMagnitude (me; Right : XYZ)  returns Real   is static;
156         ---C++:inline
157         --- Purpose :
158         --  Computes the magnitude of the cross product between <me> and
159         --  Right. Returns || <me> ^ Right ||
160
161   CrossSquareMagnitude (me; Right : XYZ)  returns Real   is static;
162         ---C++:inline
163         --- Purpose :
164         --  Computes the square magnitude of the cross product between <me> and
165         --  Right. Returns || <me> ^ Right ||**2
166
167   CrossCross (me : in out; Coord1, Coord2 : XYZ)   is static;
168         ---C++:inline
169         --- Purposes : Triple vector product
170         --  Computes <me> = <me>.Cross(Coord1.Cross(Coord2))
171
172   CrossCrossed (me; Coord1, Coord2 : XYZ)   returns XYZ   is static;
173         ---C++:inline
174         --- Purposes : Triple vector product
175         --  computes New = <me>.Cross(Coord1.Cross(Coord2))
176
177   Divide (me : in out; Scalar : Real)    is static;
178         --- Purpose : divides <me> by a real.
179         ---C++: inline
180         ---C++: alias operator /=
181
182   Divided (me; Scalar : Real)   returns XYZ   is static;
183         ---C++:inline
184         --- Purpose : divides <me> by a real.
185         ---C++: alias operator /
186
187   Dot (me; Other : XYZ)  returns Real
188         --- Purpose : computes the scalar product between <me> and Other
189         ---C++: inline
190         ---C++: alias operator *
191      is static;
192
193   DotCross (me; Coord1, Coord2 : XYZ)   returns Real   is static;
194         ---C++: inline
195         --- Purpose : computes the triple scalar product
196
197   Multiply (me : in out; Scalar : Real)    is static;
198         ---C++: inline
199         ---C++: alias operator *=
200         --- Purpose :
201         --  <me>.X() = <me>.X() * Scalar;
202         --  <me>.Y() = <me>.Y() * Scalar;
203         --  <me>.Z() = <me>.Z() * Scalar;
204
205   Multiply (me : in out; Other : XYZ)    is static;
206         ---C++: inline
207         ---C++: alias operator *=
208         --- Purpose :
209         --  <me>.X() = <me>.X() * Other.X();
210         --  <me>.Y() = <me>.Y() * Other.Y();
211         --  <me>.Z() = <me>.Z() * Other.Z();
212
213   Multiply (me : in out; Matrix : Mat)    is static;
214         ---C++:inline
215         ---C++: alias operator *=
216         --- Purpose : <me> = Matrix * <me>
217
218   Multiplied (me; Scalar : Real)  returns XYZ    is static;
219         ---C++:inline
220         --- Purpose :
221         --  New.X() = <me>.X() * Scalar;
222         --  New.Y() = <me>.Y() * Scalar;
223         --  New.Z() = <me>.Z() * Scalar;
224         ---C++: alias operator *
225
226   Multiplied (me; Other : XYZ)   returns XYZ    is static;
227         ---C++:inline
228         --- Purpose :
229         --  new.X() = <me>.X() * Other.X();
230         --  new.Y() = <me>.Y() * Other.Y();
231         --  new.Z() = <me>.Z() * Other.Z();
232
233   Multiplied (me; Matrix : Mat)   returns XYZ    is static;
234         ---C++:inline
235         --- Purpose :  New = Matrix * <me>
236         ---C++: alias operator *
237
238   Normalize (me : in out) 
239         ---C++:inline
240         --- Purpose :
241         --  <me>.X() = <me>.X()/ <me>.Modulus()
242         --  <me>.Y() = <me>.Y()/ <me>.Modulus()
243         --  <me>.Z() = <me>.Z()/ <me>.Modulus()
244      raises ConstructionError
245         --- Purpose : Raised if <me>.Modulus() <= Resolution from gp
246      is static;
247
248   Normalized (me)  returns XYZ
249         ---C++:inline
250         --- Purpose :
251         --  New.X() = <me>.X()/ <me>.Modulus()
252         --  New.Y() = <me>.Y()/ <me>.Modulus()
253         --  New.Z() = <me>.Z()/ <me>.Modulus()
254      raises ConstructionError
255         --- Purpose : Raised if <me>.Modulus() <= Resolution from gp
256      is static;
257
258   Reverse (me : in out)    is static;
259         ---C++:inline
260         --- Purpose :
261         --  <me>.X() = -<me>.X()
262         --  <me>.Y() = -<me>.Y()
263         --  <me>.Z() = -<me>.Z()
264
265   Reversed (me)   returns XYZ     is static;
266         ---C++:inline
267         --- Purpose :
268         --  New.X() = -<me>.X()
269         --  New.Y() = -<me>.Y()
270         --  New.Z() = -<me>.Z()
271
272   Subtract (me : in out; Right : XYZ)       is static;
273         ---C++: inline
274         ---C++: alias operator -=
275         --- Purpose :
276         --  <me>.X() = <me>.X() - Other.X()
277         --  <me>.Y() = <me>.Y() - Other.Y()
278         --  <me>.Z() = <me>.Z() - Other.Z()
279
280   Subtracted (me; Right : XYZ)   returns XYZ    is static;
281         ---C++: inline
282         ---C++: alias operator -
283         --- Purpose :
284         --  new.X() = <me>.X() - Other.X()
285         --  new.Y() = <me>.Y() - Other.Y()
286         --  new.Z() = <me>.Z() - Other.Z()
287
288   SetLinearForm (me : in out; 
289                  A1 : Real; XYZ1 : XYZ; A2 : Real; XYZ2 : XYZ;
290                  A3 : Real; XYZ3 : XYZ; XYZ4 : XYZ)
291      is static;
292         --- Purpose :
293         --  <me> is set to the following linear form :
294         --  A1 * XYZ1 + A2 * XYZ2 + A3 * XYZ3 + XYZ4
295         ---C++: inline
296
297   SetLinearForm (me : in out; 
298                  A1 : Real; XYZ1 : XYZ; A2 : Real; XYZ2 : XYZ;
299                  A3 : Real; XYZ3 : XYZ)
300      is static;
301         --- Purpose :
302         --  <me> is set to the following linear form :
303         --  A1 * XYZ1 + A2 * XYZ2 + A3 * XYZ3
304         ---C++: inline
305
306   SetLinearForm (me : in out;
307                  A1 : Real; XYZ1 : XYZ; A2 : Real; XYZ2 : XYZ;  XYZ3 : XYZ)
308      is static;
309         --- Purpose :
310         --  <me> is set to the following linear form :
311         --  A1 * XYZ1 + A2 * XYZ2 + XYZ3
312         ---C++: inline
313
314   SetLinearForm (me : in out; A1 : Real; XYZ1 : XYZ; A2 : Real; XYZ2 : XYZ)
315      is static;
316         --- Purpose :
317         --  <me> is set to the following linear form :
318         --  A1 * XYZ1 + A2 * XYZ2
319         ---C++: inline
320
321   SetLinearForm (me : in out; A1 : Real; XYZ1 : XYZ; XYZ2 : XYZ)
322      is static;
323         --- Purpose :
324         --  <me> is set to the following linear form :
325         --  A1 * XYZ1 + XYZ2
326         ---C++: inline
327
328   SetLinearForm (me : in out; XYZ1, XYZ2 : XYZ)   is static;
329         --- Purpose :
330         --  <me> is set to the following linear form :
331         --  XYZ1 + XYZ2
332         ---C++: inline
333
334 fields
335   x : Real;
336   y : Real;
337   z : Real;
338
339 end;