0024750: Replace instantiations of TCollection generic classes by NCollection templat...
[occt.git] / src / GProp / GProp_PrincipalProps.cdl
1 -- Created on: 1992-02-17
2 -- Created by: Jean Claude VAUTHIER
3 -- Copyright (c) 1992-1999 Matra Datavision
4 -- Copyright (c) 1999-2014 OPEN CASCADE SAS
5 --
6 -- This file is part of Open CASCADE Technology software library.
7 --
8 -- This library is free software; you can redistribute it and/or modify it under
9 -- the terms of the GNU Lesser General Public License version 2.1 as published
10 -- by the Free Software Foundation, with special exception defined in the file
11 -- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 -- distribution for complete text of the license and disclaimer of any warranty.
13 --
14 -- Alternatively, this file may be used under the terms of Open CASCADE
15 -- commercial license or contractual agreement.
16
17 class PrincipalProps
18
19
20 from GProp
21
22 ---Purpose:
23 -- A framework to present the principal properties of
24 -- inertia of a system of which global properties are
25 -- computed by a GProp_GProps object.
26 -- There is always a set of axes for which the
27 -- products of inertia of a geometric system are equal
28 -- to 0; i.e. the matrix of inertia of the system is
29 -- diagonal. These axes are the principal axes of
30 -- inertia. Their origin is coincident with the center of
31 -- mass of the system. The associated moments are
32 -- called the principal moments of inertia.
33 -- This sort of presentation object is created, filled and
34 -- returned by the function PrincipalProperties for
35 -- any GProp_GProps object, and can be queried to access the result.
36 -- Note: The system whose principal properties of
37 -- inertia are returned by this framework is referred to
38 -- as the current system. The current system,
39 -- however, is retained neither by this presentation
40 -- framework nor by the GProp_GProps object which activates it.
41 uses Vec from gp,
42      Pnt from gp
43      
44  raises UndefinedAxis from GProp
45  
46  is
47
48
49
50
51   Create   returns PrincipalProps;
52         --- Purpose : creates an undefined PrincipalProps.   
53
54
55   HasSymmetryAxis (me)  returns Boolean is static;
56         --- Purpose :
57         --  returns true if the geometric system has an axis of symmetry.  
58         --  For  comparing  moments  relative  tolerance  1.e-10  is  used. 
59         --  Usually  it  is  enough  for  objects,  restricted  by  faces  with 
60         --  analitycal  geometry.
61         
62   HasSymmetryAxis (me; aTol :  Real)  returns Boolean is static;
63         --- Purpose :
64         --  returns true if the geometric system has an axis of symmetry. 
65         --  aTol  is  relative  tolerance for  cheking  equality  of  moments
66         --  If  aTol  ==  0,  relative  tolerance  is  ~  1.e-16  (Epsilon(I))
67
68
69   HasSymmetryPoint (me)  returns Boolean is static;
70         --- Purpose :
71         --  returns true if the geometric system has a point of symmetry. 
72         --  For  comparing  moments  relative  tolerance  1.e-10  is  used. 
73         --  Usually  it  is  enough  for  objects,  restricted  by  faces  with 
74         --  analitycal  geometry.
75         
76   HasSymmetryPoint (me; aTol :  Real)  returns Boolean is static;
77         --- Purpose :
78         --  returns true if the geometric system has a point of symmetry.
79         --  aTol  is  relative  tolerance for  cheking  equality  of  moments 
80         --  If  aTol  ==  0,  relative  tolerance  is  ~  1.e-16  (Epsilon(I))
81
82
83   Moments (me; Ixx, Iyy, Izz: out Real) is static;
84         --- Purpose : Ixx, Iyy and Izz return the principal moments of inertia
85 -- in the current system.
86 -- Notes :
87 -- - If the current system has an axis of symmetry, two
88 --   of the three values Ixx, Iyy and Izz are equal. They
89 --   indicate which eigen vectors define an infinity of
90 --   axes of principal inertia.
91 -- - If the current system has a center of symmetry, Ixx,
92 --   Iyy and Izz are equal.
93
94
95   FirstAxisOfInertia (me)   returns Vec
96         --- Purpose :  returns the first axis of inertia.
97      raises UndefinedAxis
98         --- Purpose :
99         --  if the system has a point of symmetry there is an infinity of 
100         --  solutions. It is not possible to defines the three axis of 
101         --  inertia. 
102         ---C++: return const&
103      is static;
104
105   SecondAxisOfInertia (me)      returns Vec
106         --- Purpose :  returns the second axis of inertia.
107      raises  UndefinedAxis
108         --- Purpose :
109         --  if the system has a point of symmetry or an axis of symmetry the 
110         --  second and the third axis of symmetry are undefined.
111         ---C++: return const&
112      is static;
113
114
115   ThirdAxisOfInertia (me)   returns Vec
116     --- Purpose :  returns the third axis of inertia.
117     --     This and the above functions return the first, second or third eigen vector of the
118     -- matrix of inertia of the current system.
119     -- The first, second and third principal axis of inertia
120     -- pass through the center of mass of the current
121     -- system. They are respectively parallel to these three eigen vectors.
122     -- Note that:
123     -- - If the current system has an axis of symmetry, any
124     --   axis is an axis of principal inertia if it passes
125     --   through the center of mass of the system, and runs
126     --   parallel to a linear combination of the two eigen
127     --   vectors of the matrix of inertia, corresponding to the
128     --  two eigen values which are equal. If the current
129     --  system has a center of symmetry, any axis passing
130     --  through the center of mass of the system is an axis
131     --  of principal inertia. Use the functions
132     --  HasSymmetryAxis and HasSymmetryPoint to
133     --  check these particular cases, where the returned
134     --  eigen vectors define an infinity of principal axis of inertia.
135     -- - The Moments function can be used to know which
136     --   of the three eigen vectors corresponds to the two
137     --   eigen values which are equal.
138      raises  UndefinedAxis
139         --- Purpose :
140         --  if the system has a point of symmetry or an axis of symmetry the
141         --  second and the third axis of symmetry are undefined.
142         ---C++: return const&
143    is static;
144
145
146   RadiusOfGyration (me; Rxx, Ryy, Rzz : out Real) is static;
147         --- Purpose :  Returns the principal radii of gyration  Rxx, Ryy
148 -- and Rzz are the radii of gyration of the current
149 -- system about its three principal axes of inertia.
150 -- Note that:
151 -- - If the current system has an axis of symmetry,
152 --   two of the three values Rxx, Ryy and Rzz are equal.
153 -- - If the current system has a center of symmetry,
154 --   Rxx, Ryy and Rzz are equal.
155
156
157
158
159
160   Create (Ixx, Iyy, Izz, Rxx, Ryy, Rzz : Real; Vxx, Vyy, Vzz : Vec; G : Pnt)
161      returns PrincipalProps
162      is private;
163
164
165
166 fields
167
168    i1 : Real;
169    i2 : Real;
170    i3 : Real;
171    r1 : Real;
172    r2 : Real;
173    r3 : Real;
174    v1 : Vec;
175    v2 : Vec;
176    v3 : Vec;
177    g  : Pnt;
178    
179 friends
180
181   PrincipalProperties from GProps (me)
182   
183 end PrincipalProps;