0024750: Replace instantiations of TCollection generic classes by NCollection templat...
[occt.git] / src / GProp / GProp_PrincipalProps.cxx
1 // Copyright (c) 1995-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 #include <GProp_PrincipalProps.ixx>
16
17
18 typedef gp_Vec Vec;
19 typedef gp_Pnt Pnt;
20
21
22
23
24
25    GProp_PrincipalProps::GProp_PrincipalProps () {
26
27       i1= i2 = i3 = RealLast();
28       r1 = r2 = r3 = RealLast();
29       v1 = Vec (1.0, 0.0, 0.0);
30       v2 = Vec (0.0, 1.0, 0.0);
31       v3 = Vec (0.0, 0.0, 1.0);
32       g = Pnt (RealLast(), RealLast(), RealLast());
33    }
34
35
36    GProp_PrincipalProps::GProp_PrincipalProps (
37    const Standard_Real Ixx, const Standard_Real Iyy, const Standard_Real Izz, 
38    const Standard_Real Rxx, const Standard_Real Ryy, const Standard_Real Rzz,
39    const gp_Vec& Vxx, const gp_Vec& Vyy, const gp_Vec& Vzz, const gp_Pnt& G) :
40    i1 (Ixx), i2 (Iyy), i3 (Izz), r1 (Rxx), r2 (Ryy), r3 (Rzz),
41    v1 (Vxx), v2 (Vyy), v3 (Vzz), g (G) { }
42
43
44    Standard_Boolean GProp_PrincipalProps::HasSymmetryAxis () const {
45
46 //     Standard_Real Eps1 = Abs(Epsilon (i1));
47 //     Standard_Real Eps2 = Abs(Epsilon (i2));
48      const Standard_Real aRelTol = 1.e-10;
49      Standard_Real Eps1 = Abs(i1)*aRelTol;
50      Standard_Real Eps2 = Abs(i2)*aRelTol;
51      return (Abs (i1 - i2) <= Eps1 || Abs (i1 - i3) <= Eps1 ||
52              Abs (i2 - i3) <= Eps2);
53    }
54
55    Standard_Boolean GProp_PrincipalProps::HasSymmetryAxis (const Standard_Real aTol) const {
56
57
58      Standard_Real Eps1 = Abs(i1*aTol) + Abs(Epsilon(i1));
59      Standard_Real Eps2 = Abs(i2*aTol) + Abs(Epsilon(i2));
60      return (Abs (i1 - i2) <= Eps1 || Abs (i1 - i3) <= Eps1 ||
61              Abs (i2 - i3) <= Eps2);
62    }
63
64
65    Standard_Boolean GProp_PrincipalProps::HasSymmetryPoint () const {
66
67 //     Standard_Real Eps1 = Abs(Epsilon (i1));
68      const Standard_Real aRelTol = 1.e-10;
69      Standard_Real Eps1 = Abs(i1)*aRelTol;
70      return (Abs (i1 - i2) <= Eps1 && Abs (i1 - i3) <= Eps1);
71    }
72
73    Standard_Boolean GProp_PrincipalProps::HasSymmetryPoint (const Standard_Real aTol) const {
74
75      Standard_Real Eps1 = Abs(i1*aTol) + Abs(Epsilon(i1));
76      return (Abs (i1 - i2) <= Eps1 && Abs (i1 - i3) <= Eps1);
77    }
78
79
80    void GProp_PrincipalProps::Moments (Standard_Real& Ixx, Standard_Real& Iyy, Standard_Real& Izz) const {
81
82       Ixx = i1;
83       Iyy = i2;
84       Izz = i3;
85    }
86
87
88    const Vec& GProp_PrincipalProps::FirstAxisOfInertia () const {return  v1;}
89
90
91    const Vec& GProp_PrincipalProps::SecondAxisOfInertia () const {return  v2;}
92
93
94    const Vec& GProp_PrincipalProps::ThirdAxisOfInertia () const {return v3;}
95
96
97    void GProp_PrincipalProps::RadiusOfGyration (
98    Standard_Real& Rxx, Standard_Real& Ryy, Standard_Real& Rzz) const {
99    
100      Rxx = r1;
101      Ryy = r2;
102      Rzz = r3;
103    }
104
105
106
107
108
109
110