0023024: Update headers of OCCT files
[occt.git] / src / gp / gp_Torus.cxx
CommitLineData
b311480e 1// Copyright (c) 1995-1999 Matra Datavision
2// Copyright (c) 1999-2012 OPEN CASCADE SAS
3//
4// The content of this file is subject to the Open CASCADE Technology Public
5// License Version 6.5 (the "License"). You may not use the content of this file
6// except in compliance with the License. Please obtain a copy of the License
7// at http://www.opencascade.org and read it completely before using this file.
8//
9// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
10// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
11//
12// The Original Code and all software distributed under the License is
13// distributed on an "AS IS" basis, without warranty of any kind, and the
14// Initial Developer hereby disclaims all such warranties, including without
15// limitation, any warranties of merchantability, fitness for a particular
16// purpose or non-infringement. Please see the License for the specific terms
17// and conditions governing the rights and limitations under the License.
18
7fd59977 19
20#include <gp_Torus.ixx>
21#include <gp.hxx>
22#include <Standard_ConstructionError.hxx>
23#include <Standard_DimensionError.hxx>
24
25void gp_Torus::Coefficients (TColStd_Array1OfReal& Coef) const
26{
27 // Dans le repere local du tore :
28 // X*X + Y*Y + Z*Z - 2.0 * majorRadius * sqrt (X*X + Y*Y)
29 // - minorRadius * minorRadius + majorRadius * majorRadius = 0.0
30 // X**4 + Y **4 + 2.0 * (X*Y)**2 + 2.0 * (X*Z)**2 + 2.0 * (Y*Z)**2 -
31 // 2.0 * (majorRadius + minorRadius) * (X**2 + Y**2) +
32 // 2.0 * (majorRadius - minorRadius) * Z**2 - 2.0 *
33 // majorRadius * minorRadius = 0.0
34 Standard_Integer Low = Coef.Lower();
35 Standard_DimensionError_Raise_if (Coef.Length() < 31, " ");
36 gp_Trsf T;
37 Standard_Real SumRadius = (majorRadius * majorRadius +
38 minorRadius * minorRadius);
39 Standard_Real SubRadius = (majorRadius * majorRadius -
40 minorRadius * minorRadius);
41 T.SetTransformation (pos);
42 Standard_Real T11 = T.Value (1, 1);
43 Standard_Real T12 = T.Value (1, 2);
44 Standard_Real T13 = T.Value (1, 3);
45 Standard_Real T14 = T.Value (1, 4);
46 Standard_Real T21 = T.Value (2, 1);
47 Standard_Real T22 = T.Value (2, 2);
48 Standard_Real T23 = T.Value (2, 3);
49 Standard_Real T24 = T.Value (2, 4);
50 Standard_Real T31 = T.Value (3, 1);
51 Standard_Real T32 = T.Value (3, 2);
52 Standard_Real T33 = T.Value (3, 3);
53 Standard_Real T34 = T.Value (3, 4);
54 Coef(Low) = Pow (T11, 4) + Pow (T21, 4) + Pow(T31, 4) +
55 2.0 * (T11 * T11 * T21 * T21 + T11 * T11 * T31 * T31 +
56 T21 * T21 * T31 * T31);
57 Coef(Low+1) = Pow (T12, 4) + Pow (T22, 4) + Pow(T32, 4) +
58 2.0 * (T12 * T12 * T22 * T22 + T12 * T12 * T32 * T32 +
59 T22 * T22 * T32 * T32);
60 Coef(Low+2) = Pow (T13, 4) + Pow (T23, 4) + Pow(T33, 4) +
61 2.0 * (T13 * T13 * T23 * T23 + T13 * T13 * T33 * T33 +
62 T23 * T23 * T33 * T33);
63 Coef(Low+3) = 4.0 * (Pow (T11, 3) * T12 + Pow (T21, 3) * T22 +
64 Pow (T31, 3) * T32 + T11 * T11 * T21 * T22 + T21 * T21 * T11 * T12 +
65 T11 * T11 * T31 * T32 + T31 * T31 * T11 * T12 + T21 * T21 * T31 * T32
66 + T31 * T31 * T21 * T22);
67 Coef(Low+4) = 4.0 * (Pow (T11, 3) * T13 + Pow (T21, 3) * T23 +
68 Pow (T31, 3) * T33 + T11 * T11 * T21 * T23 + T21 * T21 * T11 * T13 +
69 T11 * T11 * T31 * T33 + T31 * T31 * T11 * T13 + T21 * T21 * T31 * T33
70 + T31 * T31 * T21 * T23);
71 Coef(Low+5) = 4.0 * (Pow (T12, 3) * T11 + Pow (T22, 3) * T21 +
72 Pow (T32, 3) * T31 + T12 * T12 * T21 * T22 + T22 * T22 * T11 * T12 +
73 T12 * T12 * T31 * T32 + T32 * T32 * T11 * T12 + T22 * T22 * T31 * T32
74 + T32 * T32 * T21 * T22);
75 Coef(Low+6) = 4.0 * (Pow (T12, 3) * T13 + Pow (T22, 3) * T23 +
76 Pow (T32, 3) * T33 + T12 * T12 * T22 * T23 + T22 * T22 * T12 * T13 +
77 T12 * T12 * T32 * T33 + T32 * T32 * T12 * T13 + T22 * T22 * T32 * T33
78 + T32 * T32 * T22 * T23);
79 Coef(Low+7) = 4.0 * (Pow (T13, 3) * T11 + Pow (T23, 3) * T21 +
80 Pow (T33, 3) * T31 + T13 * T13 * T21 * T23 + T23 * T23 * T11 * T13 +
81 T13 * T13 * T31 * T33 + T33 * T33 * T11 * T13 + T23 * T23 * T31 * T33
82 + T33 * T33 * T21 * T23);
83 Coef(Low+8) = 4.0 * (Pow (T13, 3) * T12 + Pow (T23, 3) * T22 +
84 Pow (T33, 3) * T32 + T13 * T13 * T22 * T23 + T23 * T23 * T12 * T13 +
85 T13 * T13 * T32 * T33 + T33 * T33 * T12 * T13 + T23 * T23 * T32 * T33
86 + T33 * T33 * T22 * T23);
87 Coef(Low+9) = 6.0 * (T11 * T11 * T12 * T12 + T21 * T21 * T22 * T22 +
88 T31 * T31 * T32 * T32) + 8.0 * ( T11 * T12 * T21 * T22 +
89 T11 * T12 * T31 * T32 + T21 * T22 * T31 * T32) +
90 2.0 * (T11 * T11 * T22 * T22 + T11 * T11 * T32 * T32 +
91 T21 * T21 * T32 * T32 + T12 * T12 * T21 * T21 +
92 T12 * T12 * T31 * T31 + T22 * T22 * T31 * T31 );
93 Coef(Low+10) = 6.0 * (T11 * T11 * T13 * T13 + T21 * T21 * T23 * T23 +
94 T31 * T31 * T33 * T33) + 8.0 * ( T11 * T13 * T21 * T23 +
95 T11 * T13 * T31 * T33 + T21 * T23 * T31 * T33) +
96 2.0 * (T11 * T11 * T23 * T23 + T11 * T11 * T33 * T33 +
97 T21 * T21 * T33 * T33 + T13 * T13 * T21 * T21 +
98 T13 * T13 * T31 * T31 + T23 * T23 * T31 * T31);
99 Coef(Low+11) = 6.0 * (T12 * T12 * T13 * T13 + T22 * T22 * T23 * T23 +
100 T32 * T32 * T33 * T33) + 8.0 * ( T12 * T13 * T22 * T23 +
101 T12 * T23 * T32 * T33 + T22 * T23 * T32 * T33) +
102 2.0 * (T12 * T12 * T23 * T23 + T12 * T12 * T33 * T33 +
103 T22 * T22 * T33 * T33 + T13 * T13 * T22 * T22 +
104 T13 * T13 * T32 * T32 + T23 * T23 * T32 * T32);
105 Coef(Low+12) = 4.0 * (Pow (T11, 3) * T14 + Pow (T21, 3) * T24 +
106 Pow (T31, 3) * T34 + T11 * T11 * T21 * T24 + T11 * T11 * T31 * T34 +
107 T21 * T21 * T31 * T34 + T21 * T21 * T11 * T14 +
108 T31 * T31 * T11 * T34 + T31 * T31 * T21 * T24);
109 Coef(Low+13) = 4.0 * (Pow (T12, 3) * T14 + Pow (T22, 3) * T24 +
110 Pow (T32, 3) * T34 + T12 * T12 * T22 * T24 + T12 * T12 * T32 * T34 +
111 T22 * T22 * T32 * T34 + T22 * T22 * T12 * T14 +
112 T32 * T32 * T12 * T34 + T32 * T32 * T22 * T24);
113 Coef(Low+14) = 4.0 * (Pow (T13, 3) * T14 + Pow (T23, 3) * T24 +
114 Pow (T33, 3) * T34 + T13 * T13 * T23 * T24 + T13 * T13 * T33 * T34 +
115 T23 * T23 * T33 * T34 + T23 * T23 * T13 * T14 +
116 T33 * T33 * T13 * T34 + T33 * T33 * T23 * T24);
117 Coef(Low+15) = 4.0 * (T11 * T11 * T22 * T24 + T11 * T11 * T32 * T34 +
118 T21 * T21 * T32 * T34 + T21 * T21 * T12 * T14 + T31 * T31 * T12 * T14
119 + T31 * T31 * T22 * T24);
120 Coef(Low+16) = 4.0 * (T11 * T11 * T23 * T24 + T11 * T11 * T33 * T34 +
121 T21 * T21 * T33 * T34 + T21 * T21 * T13 * T14 + T31 * T31 * T13 * T14
122 + T31 * T31 * T23 * T24);
123 Coef(Low+17) = 4.0 * (T12 * T12 * T21 * T24 + T12 * T12 * T31 * T34 +
124 T22 * T22 * T31 * T34 + T22 * T22 * T11 * T14 + T32 * T32 * T11 * T14
125 + T32 * T32 * T21 * T24);
126 Coef(Low+18) = 4.0 * (T12 * T12 * T23 * T24 + T12 * T12 * T33 * T34 +
127 T22 * T22 * T33 * T34 + T22 * T22 * T13 * T14 + T32 * T32 * T13 * T14
128 + T32 * T32 * T23 * T24);
129 Coef(Low+19) = 4.0 * (T13 * T13 * T21 * T24 + T13 * T13 * T31 * T34 +
130 T23 * T23 * T31 * T34 + T23 * T23 * T11 * T14 + T33 * T33 * T11 * T14
131 + T33 * T33 * T21 * T24);
132 Coef(Low+20) = 4.0 * (T13 * T13 * T22 * T24 + T13 * T13 * T32 * T34 +
133 T23 * T23 * T32 * T34 + T23 * T23 * T12 * T14 + T33 * T33 * T12 * T14
134 + T33 * T33 * T22 * T24);
135 Coef(Low+21) = 6.0 * (T11 * T11 * T14 * T14 + T21 * T21 * T24 * T24 +
136 T31 * T31 * T34 * T34) + 2.0 * (T11 * T11 * T24 * T24 +
137 T11 * T11 * T34 * T34 + T21 * T21 * T34 * T34 + T21 * T21 * T14 * T14
138 + T31 * T31 * T14 * T14 + T31 * T31 * T24 * T24 -
139 SumRadius * (T11 * T11 + T21 * T21) + SubRadius * T31 * T31);
140 Coef(Low+22) = 6.0 * (T12 * T12 * T14 * T14 + T22 * T22 * T24 * T24 +
141 T32 * T32 * T34 * T34) + 2.0 * (T12 * T12 * T24 * T24 +
142 T12 * T12 * T34 * T34 + T22 * T22 * T34 * T34 + T22 * T22 * T14 * T14
143 + T32 * T32 * T14 * T14 + T32 * T32 * T24 * T24 -
144 SumRadius * (T12 * T12 + T22 * T22) + SubRadius * T32 * T32);
145 Coef(Low+23) = 6.0 * (T13 * T13 * T14 * T14 + T23 * T23 * T24 * T24 +
146 T33 * T33 * T34 * T34) + 2.0 * (T13 * T13 * T24 * T24 +
147 T13 * T13 * T34 * T34 + T23 * T23 * T34 * T34 + T23 * T23 * T14 * T14
148 + T33 * T33 * T14 * T14 + T33 * T33 * T24 * T24 -
149 SumRadius * (T13 * T13 + T23 * T23) + SubRadius * T33 * T33);
150 Coef(Low+24) = 8.0 * (T11 * T14 * T22 * T24 + T11 * T14 * T32 * T34 +
151 T21 * T24 * T32 * T34 + T21 * T24 * T12 * T14 + T31 * T34 * T12 * T14
152 + T31 * T34 *T22 * T24) + 4.0 * (T11 * T12 * T24 * T24 +
153 T11 * T12 * T34 * T34 + T21 * T22 * T34 * T34 + T21 * T22 * T14 * T14
154 + T31 * T32 * T14 * T14 + T31 * T32 * T24 * T24 - SumRadius * (
155 T11 * T12 + T21 * T22) + SubRadius * T31 * T32);
156 Coef(Low+25) = 8.0 * (T11 * T14 * T23 * T24 + T11 * T14 * T33 * T34 +
157 T21 * T24 * T33 * T34 + T21 * T24 * T13 * T14 + T31 * T34 * T13 * T14
158 + T31 * T34 *T23 * T24) + 4.0 * (T11 * T13 * T24 * T24 +
159 T11 * T13 * T34 * T34 + T21 * T23 * T34 * T34 + T21 * T23 * T14 * T14
160 + T31 * T33 * T14 * T14 + T31 * T33 * T24 * T24 - SumRadius * (
161 T11 * T13 + T21 * T22) + SubRadius * T31 * T33);
162 Coef(Low+26) = 8.0 * (T12 * T14 * T23 * T24 + T12 * T14 * T33 * T34 +
163 T22 * T24 * T33 * T34 + T22 * T24 * T13 * T14 + T32 * T34 * T13 * T14
164 + T32 * T34 *T23 * T24) + 4.0 * (T12 * T13 * T24 * T24 +
165 T12 * T13 * T34 * T34 + T22 * T23 * T34 * T34 + T22 * T23 * T14 * T14
166 + T32 * T33 * T14 * T14 + T32 * T33 * T24 * T24 - SumRadius * (
167 T12 * T13 + T21 * T22) + SubRadius * T32 * T33);
168
169
170 Coef(Low+27) = 4.0 * (Pow (T14, 3) * T11 + Pow (T24, 3) * T21 +
171 Pow (T34, 3) * T31 + T11 * T14 * T24 * T24 + T11 * T14 * T34 * T34
172 + T21 * T24 * T34 * T34 + T21 * T24 * T14 * T14 +
173 T31 * T34 * T14 * T14 + T31 * T34 * T24 * T24 + SubRadius * T31 * T34
174 - SumRadius * (T11 * T14 + T21 * T24));
175 Coef(Low+28) = 4.0 * (Pow (T14, 3) * T12 + Pow (T24, 3) * T22 +
176 Pow (T34, 3) * T32 + T12 * T14 * T24 * T24 + T12 * T14 * T34 * T34
177 + T22 * T24 * T34 * T34 + T22 * T24 * T14 * T14 +
178 T32 * T34 * T14 * T14 + T32 * T34 * T24 * T24 + SubRadius * T32 * T34
179 - SumRadius * (T12 * T14 + T22 * T24));
180 Coef(Low+29) = 4.0 * (Pow (T14, 3) * T13 + Pow (T24, 3) * T23 +
181 Pow (T34, 3) * T33 + T13 * T14 * T24 * T24 + T13 * T14 * T34 * T34
182 + T23 * T24 * T34 * T34 + T23 * T24 * T14 * T14 +
183 T33 * T34 * T14 * T14 + T33 * T34 * T24 * T24 + SubRadius * T33 * T34
184 - SumRadius * (T13 * T14 + T21 * T24));
185 Coef(Low+30) = Pow (T14, 4) + Pow (T24, 4) + Pow (T34, 4) + 2.0 * (
186 T14 * T14 * T24 * T24 + T14 * T14 * T34 * T34 + T24 * T24 * T34 * T34
187 - SumRadius * (T14 * T14 + T24 * T24) + SubRadius * T34 * T34 -
188 majorRadius * majorRadius * minorRadius * minorRadius);
189}
190
191void gp_Torus::Mirror (const gp_Pnt& P)
192{ pos.Mirror (P); }
193
194gp_Torus gp_Torus::Mirrored (const gp_Pnt& P) const
195{
196 gp_Torus C = *this;
197 C.pos.Mirror (P);
198 return C;
199}
200
201void gp_Torus::Mirror (const gp_Ax1& A1)
202{ pos.Mirror (A1); }
203
204gp_Torus gp_Torus::Mirrored (const gp_Ax1& A1) const
205{
206 gp_Torus C = *this;
207 C.pos.Mirror (A1);
208 return C;
209}
210
211void gp_Torus::Mirror (const gp_Ax2& A2)
212{ pos.Mirror (A2); }
213
214gp_Torus gp_Torus::Mirrored (const gp_Ax2& A2) const
215{
216 gp_Torus C = *this;
217 C.pos.Mirror (A2);
218 return C;
219}
220