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 | |
25 | void 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 | |
191 | void gp_Torus::Mirror (const gp_Pnt& P) |
192 | { pos.Mirror (P); } |
193 | |
194 | gp_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 | |
201 | void gp_Torus::Mirror (const gp_Ax1& A1) |
202 | { pos.Mirror (A1); } |
203 | |
204 | gp_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 | |
211 | void gp_Torus::Mirror (const gp_Ax2& A2) |
212 | { pos.Mirror (A2); } |
213 | |
214 | gp_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 | |