1 -- Created on: 1992-02-17
2 -- Created by: Jean Claude VAUTHIER
3 -- Copyright (c) 1992-1999 Matra Datavision
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.
17 class PrincipalProps
20 from GProp
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
44  raises UndefinedAxis from GProp
46  is
51   Create   returns PrincipalProps;
52         --- Purpose : creates an undefined PrincipalProps.
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.
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))
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.
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))
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.
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;
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;
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;
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.
160   Create (Ixx, Iyy, Izz, Rxx, Ryy, Rzz : Real; Vxx, Vyy, Vzz : Vec; G : Pnt)
161      returns PrincipalProps
162      is private;
166 fields
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;
179 friends
181   PrincipalProperties from GProps (me)
183 end PrincipalProps;