diff options
Diffstat (limited to 'OpenSim/Client/Sirikata/Protocol/PBJ.cs')
-rw-r--r-- | OpenSim/Client/Sirikata/Protocol/PBJ.cs | 2104 |
1 files changed, 0 insertions, 2104 deletions
diff --git a/OpenSim/Client/Sirikata/Protocol/PBJ.cs b/OpenSim/Client/Sirikata/Protocol/PBJ.cs deleted file mode 100644 index 9b1951a..0000000 --- a/OpenSim/Client/Sirikata/Protocol/PBJ.cs +++ /dev/null | |||
@@ -1,2104 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | namespace PBJ | ||
30 | { | ||
31 | |||
32 | public class IMessage | ||
33 | { | ||
34 | public virtual Google.ProtocolBuffers.IMessage _PBJISuper { get { return null; } } | ||
35 | protected virtual bool _HasAllPBJFields { get { return true; } } | ||
36 | public void WriteTo(Google.ProtocolBuffers.CodedOutputStream output) | ||
37 | { | ||
38 | _PBJISuper.WriteTo(output); | ||
39 | } | ||
40 | public override bool Equals(object other) | ||
41 | { | ||
42 | return _PBJISuper.Equals(other); | ||
43 | } | ||
44 | public int SerializedSize { get { return _PBJISuper.SerializedSize; } } | ||
45 | |||
46 | public override int GetHashCode() { return _PBJISuper.GetHashCode(); } | ||
47 | |||
48 | public override string ToString() | ||
49 | { | ||
50 | return _PBJISuper.ToString(); | ||
51 | } | ||
52 | public virtual IBuilder WeakCreateBuilderForType() { return null; } | ||
53 | public Google.ProtocolBuffers.ByteString ToByteString() | ||
54 | { | ||
55 | return _PBJISuper.ToByteString(); | ||
56 | } | ||
57 | public byte[] ToByteArray() | ||
58 | { | ||
59 | return _PBJISuper.ToByteArray(); | ||
60 | } | ||
61 | public void WriteTo(global::System.IO.Stream output) | ||
62 | { | ||
63 | _PBJISuper.WriteTo(output); | ||
64 | } | ||
65 | // Google.ProtocolBuffers.MessageDescriptor DescriptorForType { get {return _PBJISuper.DescriptorForType;} } | ||
66 | public Google.ProtocolBuffers.UnknownFieldSet UnknownFields { get { return _PBJISuper.UnknownFields; } } | ||
67 | public class IBuilder | ||
68 | { | ||
69 | public virtual Google.ProtocolBuffers.IBuilder _PBJISuper { get { return null; } } | ||
70 | protected virtual bool _HasAllPBJFields { get { return true; } } | ||
71 | } | ||
72 | } | ||
73 | |||
74 | public struct Vector2f | ||
75 | { | ||
76 | |||
77 | public float x; | ||
78 | public float y; | ||
79 | |||
80 | |||
81 | public Vector2f(float _x, float _y) | ||
82 | { | ||
83 | x = _x; y = _y; | ||
84 | } | ||
85 | |||
86 | public Vector2f(Vector2f cpy) | ||
87 | { | ||
88 | x = cpy.x; y = cpy.y; | ||
89 | } | ||
90 | |||
91 | |||
92 | public Vector2f Negate() | ||
93 | { | ||
94 | return new Vector2f(-x, -y); | ||
95 | } | ||
96 | |||
97 | public Vector2f Add(Vector2f rhs) | ||
98 | { | ||
99 | return new Vector2f(x + rhs.x, y + rhs.y); | ||
100 | } | ||
101 | |||
102 | public Vector2f Subtract(Vector2f rhs) | ||
103 | { | ||
104 | return new Vector2f(x - rhs.x, y - rhs.y); | ||
105 | } | ||
106 | |||
107 | public Vector2f Multiply(Vector2f rhs) | ||
108 | { | ||
109 | return new Vector2f(x * rhs.x, y * rhs.y); | ||
110 | } | ||
111 | |||
112 | public Vector2f Multiply(float s) | ||
113 | { | ||
114 | return new Vector2f(x * s, y * s); | ||
115 | } | ||
116 | |||
117 | public Vector2f Divide(Vector2f rhs) | ||
118 | { | ||
119 | return new Vector2f(x / rhs.x, y / rhs.y); | ||
120 | } | ||
121 | |||
122 | public Vector2f Divide(float s) | ||
123 | { | ||
124 | return new Vector2f(x / s, y / s); | ||
125 | } | ||
126 | |||
127 | public float Dot(Vector2f rhs) | ||
128 | { | ||
129 | return (x * rhs.x + y * rhs.y); | ||
130 | } | ||
131 | |||
132 | public void Normalize() | ||
133 | { | ||
134 | float len = Length; | ||
135 | if (len != 0.0) | ||
136 | { | ||
137 | x /= len; y /= len; | ||
138 | } | ||
139 | } | ||
140 | |||
141 | public Vector2f Normalized | ||
142 | { | ||
143 | get | ||
144 | { | ||
145 | Vector2f normed = new Vector2f(this); | ||
146 | normed.Normalize(); | ||
147 | return normed; | ||
148 | } | ||
149 | } | ||
150 | |||
151 | public float SquaredLength | ||
152 | { | ||
153 | get | ||
154 | { | ||
155 | return (x * x + y * y); | ||
156 | } | ||
157 | } | ||
158 | public float Length | ||
159 | { | ||
160 | get | ||
161 | { | ||
162 | return (float)Math.Sqrt(SquaredLength); | ||
163 | } | ||
164 | } | ||
165 | |||
166 | |||
167 | public override string ToString() | ||
168 | { | ||
169 | return String.Format("<{0}, {1}>", x, y); | ||
170 | } | ||
171 | |||
172 | |||
173 | public static Vector2f operator -(Vector2f uo) | ||
174 | { | ||
175 | return uo.Negate(); | ||
176 | } | ||
177 | |||
178 | public static Vector2f operator +(Vector2f lhs, Vector2f rhs) | ||
179 | { | ||
180 | return lhs.Add(rhs); | ||
181 | } | ||
182 | |||
183 | public static Vector2f operator -(Vector2f lhs, Vector2f rhs) | ||
184 | { | ||
185 | return lhs.Subtract(rhs); | ||
186 | } | ||
187 | |||
188 | public static Vector2f operator *(Vector2f lhs, Vector2f rhs) | ||
189 | { | ||
190 | return lhs.Multiply(rhs); | ||
191 | } | ||
192 | |||
193 | public static Vector2f operator *(Vector2f lhs, float rhs) | ||
194 | { | ||
195 | return lhs.Multiply(rhs); | ||
196 | } | ||
197 | public static Vector2f operator *(float lhs, Vector2f rhs) | ||
198 | { | ||
199 | return rhs.Multiply(lhs); | ||
200 | } | ||
201 | |||
202 | public static Vector2f operator /(Vector2f lhs, Vector2f rhs) | ||
203 | { | ||
204 | return lhs.Divide(rhs); | ||
205 | } | ||
206 | |||
207 | public static Vector2f operator /(Vector2f lhs, float rhs) | ||
208 | { | ||
209 | return lhs.Divide(rhs); | ||
210 | } | ||
211 | |||
212 | } // struct Vector2f | ||
213 | |||
214 | public struct Vector2d | ||
215 | { | ||
216 | |||
217 | public double x; | ||
218 | public double y; | ||
219 | |||
220 | |||
221 | public Vector2d(double _x, double _y) | ||
222 | { | ||
223 | x = _x; y = _y; | ||
224 | } | ||
225 | |||
226 | public Vector2d(Vector2d cpy) | ||
227 | { | ||
228 | x = cpy.x; y = cpy.y; | ||
229 | } | ||
230 | |||
231 | |||
232 | public Vector2d Negate() | ||
233 | { | ||
234 | return new Vector2d(-x, -y); | ||
235 | } | ||
236 | |||
237 | public Vector2d Add(Vector2d rhs) | ||
238 | { | ||
239 | return new Vector2d(x + rhs.x, y + rhs.y); | ||
240 | } | ||
241 | |||
242 | public Vector2d Subtract(Vector2d rhs) | ||
243 | { | ||
244 | return new Vector2d(x - rhs.x, y - rhs.y); | ||
245 | } | ||
246 | |||
247 | public Vector2d Multiply(Vector2d rhs) | ||
248 | { | ||
249 | return new Vector2d(x * rhs.x, y * rhs.y); | ||
250 | } | ||
251 | |||
252 | public Vector2d Multiply(double s) | ||
253 | { | ||
254 | return new Vector2d(x * s, y * s); | ||
255 | } | ||
256 | |||
257 | public Vector2d Divide(Vector2d rhs) | ||
258 | { | ||
259 | return new Vector2d(x / rhs.x, y / rhs.y); | ||
260 | } | ||
261 | |||
262 | public Vector2d Divide(double s) | ||
263 | { | ||
264 | return new Vector2d(x / s, y / s); | ||
265 | } | ||
266 | |||
267 | public double Dot(Vector2d rhs) | ||
268 | { | ||
269 | return (x * rhs.x + y * rhs.y); | ||
270 | } | ||
271 | |||
272 | public void Normalize() | ||
273 | { | ||
274 | double len = Length; | ||
275 | if (len != 0.0) | ||
276 | { | ||
277 | x /= len; y /= len; | ||
278 | } | ||
279 | } | ||
280 | |||
281 | public Vector2d Normalized | ||
282 | { | ||
283 | get | ||
284 | { | ||
285 | Vector2d normed = new Vector2d(this); | ||
286 | normed.Normalize(); | ||
287 | return normed; | ||
288 | } | ||
289 | } | ||
290 | |||
291 | public double SquaredLength | ||
292 | { | ||
293 | get | ||
294 | { | ||
295 | return (x * x + y * y); | ||
296 | } | ||
297 | } | ||
298 | public double Length | ||
299 | { | ||
300 | get | ||
301 | { | ||
302 | return Math.Sqrt(SquaredLength); | ||
303 | } | ||
304 | } | ||
305 | |||
306 | |||
307 | public override string ToString() | ||
308 | { | ||
309 | return String.Format("<{0}, {1}>", x, y); | ||
310 | } | ||
311 | |||
312 | |||
313 | public static Vector2d operator -(Vector2d uo) | ||
314 | { | ||
315 | return uo.Negate(); | ||
316 | } | ||
317 | |||
318 | public static Vector2d operator +(Vector2d lhs, Vector2d rhs) | ||
319 | { | ||
320 | return lhs.Add(rhs); | ||
321 | } | ||
322 | |||
323 | public static Vector2d operator -(Vector2d lhs, Vector2d rhs) | ||
324 | { | ||
325 | return lhs.Subtract(rhs); | ||
326 | } | ||
327 | |||
328 | public static Vector2d operator *(Vector2d lhs, Vector2d rhs) | ||
329 | { | ||
330 | return lhs.Multiply(rhs); | ||
331 | } | ||
332 | |||
333 | public static Vector2d operator *(Vector2d lhs, double rhs) | ||
334 | { | ||
335 | return lhs.Multiply(rhs); | ||
336 | } | ||
337 | public static Vector2d operator *(double lhs, Vector2d rhs) | ||
338 | { | ||
339 | return rhs.Multiply(lhs); | ||
340 | } | ||
341 | |||
342 | public static Vector2d operator /(Vector2d lhs, Vector2d rhs) | ||
343 | { | ||
344 | return lhs.Divide(rhs); | ||
345 | } | ||
346 | |||
347 | public static Vector2d operator /(Vector2d lhs, double rhs) | ||
348 | { | ||
349 | return lhs.Divide(rhs); | ||
350 | } | ||
351 | |||
352 | } // struct Vector2d | ||
353 | |||
354 | public struct Vector3f | ||
355 | { | ||
356 | |||
357 | public float x; | ||
358 | public float y; | ||
359 | public float z; | ||
360 | |||
361 | |||
362 | public Vector3f(float _x, float _y, float _z) | ||
363 | { | ||
364 | x = _x; y = _y; z = _z; | ||
365 | } | ||
366 | |||
367 | public Vector3f(Vector3f cpy) | ||
368 | { | ||
369 | x = cpy.x; y = cpy.y; z = cpy.z; | ||
370 | } | ||
371 | |||
372 | |||
373 | public Vector3f Negate() | ||
374 | { | ||
375 | return new Vector3f(-x, -y, -z); | ||
376 | } | ||
377 | |||
378 | public Vector3f Add(Vector3f rhs) | ||
379 | { | ||
380 | return new Vector3f(x + rhs.x, y + rhs.y, z + rhs.z); | ||
381 | } | ||
382 | |||
383 | public Vector3f Subtract(Vector3f rhs) | ||
384 | { | ||
385 | return new Vector3f(x - rhs.x, y - rhs.y, z - rhs.z); | ||
386 | } | ||
387 | |||
388 | public Vector3f Multiply(Vector3f rhs) | ||
389 | { | ||
390 | return new Vector3f(x * rhs.x, y * rhs.y, z * rhs.z); | ||
391 | } | ||
392 | |||
393 | public Vector3f Multiply(float s) | ||
394 | { | ||
395 | return new Vector3f(x * s, y * s, z * s); | ||
396 | } | ||
397 | |||
398 | public Vector3f Divide(Vector3f rhs) | ||
399 | { | ||
400 | return new Vector3f(x / rhs.x, y / rhs.y, z / rhs.z); | ||
401 | } | ||
402 | |||
403 | public Vector3f Divide(float s) | ||
404 | { | ||
405 | return new Vector3f(x / s, y / s, z / s); | ||
406 | } | ||
407 | |||
408 | public float Dot(Vector3f rhs) | ||
409 | { | ||
410 | return (x * rhs.x + y * rhs.y + z * rhs.z); | ||
411 | } | ||
412 | |||
413 | public Vector3f Cross(Vector3f rhs) | ||
414 | { | ||
415 | return new Vector3f(y * rhs.z - z * rhs.y, z * rhs.x - x * rhs.z, x * rhs.y - y * rhs.x); | ||
416 | } | ||
417 | |||
418 | public void Normalize() | ||
419 | { | ||
420 | float len = Length; | ||
421 | if (len != 0.0) | ||
422 | { | ||
423 | x /= len; y /= len; z /= len; | ||
424 | } | ||
425 | } | ||
426 | |||
427 | public Vector3f Normalized | ||
428 | { | ||
429 | get | ||
430 | { | ||
431 | Vector3f normed = new Vector3f(this); | ||
432 | normed.Normalize(); | ||
433 | return normed; | ||
434 | } | ||
435 | } | ||
436 | |||
437 | public float SquaredLength | ||
438 | { | ||
439 | get | ||
440 | { | ||
441 | return (x * x + y * y + z * z); | ||
442 | } | ||
443 | } | ||
444 | public float Length | ||
445 | { | ||
446 | get | ||
447 | { | ||
448 | return (float)Math.Sqrt(SquaredLength); | ||
449 | } | ||
450 | } | ||
451 | |||
452 | |||
453 | public override string ToString() | ||
454 | { | ||
455 | return String.Format("<{0}, {1}, {2}>", x, y, z); | ||
456 | } | ||
457 | |||
458 | |||
459 | public static Vector3f operator -(Vector3f uo) | ||
460 | { | ||
461 | return uo.Negate(); | ||
462 | } | ||
463 | |||
464 | public static Vector3f operator +(Vector3f lhs, Vector3f rhs) | ||
465 | { | ||
466 | return lhs.Add(rhs); | ||
467 | } | ||
468 | |||
469 | public static Vector3f operator -(Vector3f lhs, Vector3f rhs) | ||
470 | { | ||
471 | return lhs.Subtract(rhs); | ||
472 | } | ||
473 | |||
474 | public static Vector3f operator *(Vector3f lhs, Vector3f rhs) | ||
475 | { | ||
476 | return lhs.Multiply(rhs); | ||
477 | } | ||
478 | |||
479 | public static Vector3f operator *(Vector3f lhs, float rhs) | ||
480 | { | ||
481 | return lhs.Multiply(rhs); | ||
482 | } | ||
483 | public static Vector3f operator *(float lhs, Vector3f rhs) | ||
484 | { | ||
485 | return rhs.Multiply(lhs); | ||
486 | } | ||
487 | |||
488 | public static Vector3f operator /(Vector3f lhs, Vector3f rhs) | ||
489 | { | ||
490 | return lhs.Divide(rhs); | ||
491 | } | ||
492 | |||
493 | public static Vector3f operator /(Vector3f lhs, float rhs) | ||
494 | { | ||
495 | return lhs.Divide(rhs); | ||
496 | } | ||
497 | |||
498 | } // struct Vector3f | ||
499 | |||
500 | public struct Vector3d | ||
501 | { | ||
502 | |||
503 | public double x; | ||
504 | public double y; | ||
505 | public double z; | ||
506 | |||
507 | |||
508 | public Vector3d(double _x, double _y, double _z) | ||
509 | { | ||
510 | x = _x; y = _y; z = _z; | ||
511 | } | ||
512 | |||
513 | public Vector3d(Vector3d cpy) | ||
514 | { | ||
515 | x = cpy.x; y = cpy.y; z = cpy.z; | ||
516 | } | ||
517 | |||
518 | |||
519 | public Vector3d Negate() | ||
520 | { | ||
521 | return new Vector3d(-x, -y, -z); | ||
522 | } | ||
523 | |||
524 | public Vector3d Add(Vector3d rhs) | ||
525 | { | ||
526 | return new Vector3d(x + rhs.x, y + rhs.y, z + rhs.z); | ||
527 | } | ||
528 | |||
529 | public Vector3d Subtract(Vector3d rhs) | ||
530 | { | ||
531 | return new Vector3d(x - rhs.x, y - rhs.y, z - rhs.z); | ||
532 | } | ||
533 | |||
534 | public Vector3d Multiply(Vector3d rhs) | ||
535 | { | ||
536 | return new Vector3d(x * rhs.x, y * rhs.y, z * rhs.z); | ||
537 | } | ||
538 | |||
539 | public Vector3d Multiply(double s) | ||
540 | { | ||
541 | return new Vector3d(x * s, y * s, z * s); | ||
542 | } | ||
543 | |||
544 | public Vector3d Divide(Vector3d rhs) | ||
545 | { | ||
546 | return new Vector3d(x / rhs.x, y / rhs.y, z / rhs.z); | ||
547 | } | ||
548 | |||
549 | public Vector3d Divide(double s) | ||
550 | { | ||
551 | return new Vector3d(x / s, y / s, z / s); | ||
552 | } | ||
553 | |||
554 | public double Dot(Vector3d rhs) | ||
555 | { | ||
556 | return (x * rhs.x + y * rhs.y + z * rhs.z); | ||
557 | } | ||
558 | |||
559 | public Vector3d Cross(Vector3d rhs) | ||
560 | { | ||
561 | return new Vector3d(y * rhs.z - z * rhs.y, z * rhs.x - x * rhs.z, x * rhs.y - y * rhs.x); | ||
562 | } | ||
563 | |||
564 | public void Normalize() | ||
565 | { | ||
566 | double len = Length; | ||
567 | if (len != 0.0) | ||
568 | { | ||
569 | x /= len; y /= len; z /= len; | ||
570 | } | ||
571 | } | ||
572 | |||
573 | public Vector3d Normalized | ||
574 | { | ||
575 | get | ||
576 | { | ||
577 | Vector3d normed = new Vector3d(this); | ||
578 | normed.Normalize(); | ||
579 | return normed; | ||
580 | } | ||
581 | } | ||
582 | |||
583 | public double SquaredLength | ||
584 | { | ||
585 | get | ||
586 | { | ||
587 | return (x * x + y * y + z * z); | ||
588 | } | ||
589 | } | ||
590 | public double Length | ||
591 | { | ||
592 | get | ||
593 | { | ||
594 | return Math.Sqrt(SquaredLength); | ||
595 | } | ||
596 | } | ||
597 | |||
598 | |||
599 | public override string ToString() | ||
600 | { | ||
601 | return String.Format("<{0}, {1}, {2}>", x, y, z); | ||
602 | } | ||
603 | |||
604 | |||
605 | public static Vector3d operator -(Vector3d uo) | ||
606 | { | ||
607 | return uo.Negate(); | ||
608 | } | ||
609 | |||
610 | public static Vector3d operator +(Vector3d lhs, Vector3d rhs) | ||
611 | { | ||
612 | return lhs.Add(rhs); | ||
613 | } | ||
614 | |||
615 | public static Vector3d operator -(Vector3d lhs, Vector3d rhs) | ||
616 | { | ||
617 | return lhs.Subtract(rhs); | ||
618 | } | ||
619 | |||
620 | public static Vector3d operator *(Vector3d lhs, Vector3d rhs) | ||
621 | { | ||
622 | return lhs.Multiply(rhs); | ||
623 | } | ||
624 | |||
625 | public static Vector3d operator *(Vector3d lhs, double rhs) | ||
626 | { | ||
627 | return lhs.Multiply(rhs); | ||
628 | } | ||
629 | public static Vector3d operator *(double lhs, Vector3d rhs) | ||
630 | { | ||
631 | return rhs.Multiply(lhs); | ||
632 | } | ||
633 | |||
634 | public static Vector3d operator /(Vector3d lhs, Vector3d rhs) | ||
635 | { | ||
636 | return lhs.Divide(rhs); | ||
637 | } | ||
638 | |||
639 | public static Vector3d operator /(Vector3d lhs, double rhs) | ||
640 | { | ||
641 | return lhs.Divide(rhs); | ||
642 | } | ||
643 | |||
644 | } // struct Vector3d | ||
645 | |||
646 | public struct Quaternion | ||
647 | { | ||
648 | |||
649 | public float w; | ||
650 | public float x; | ||
651 | public float y; | ||
652 | public float z; | ||
653 | |||
654 | |||
655 | public Quaternion(float _w, float _x, float _y, float _z) | ||
656 | { | ||
657 | w = _w; x = _x; y = _y; z = _z; | ||
658 | } | ||
659 | |||
660 | public Quaternion(Quaternion cpy) | ||
661 | { | ||
662 | w = cpy.w; x = cpy.x; y = cpy.y; z = cpy.z; | ||
663 | } | ||
664 | |||
665 | public static readonly Quaternion Identity = new Quaternion((float)1.0, (float)0.0, (float)0.0, (float)0.0); | ||
666 | |||
667 | public static Quaternion FromAxisAngle(Vector3f axis, float rads) | ||
668 | { | ||
669 | float halfAngle = rads * 0.5f; | ||
670 | float sinHalf = (float)Math.Sin(halfAngle); | ||
671 | float w = (float)Math.Cos(halfAngle); | ||
672 | float x = sinHalf * axis.x; | ||
673 | float y = sinHalf * axis.y; | ||
674 | float z = sinHalf * axis.z; | ||
675 | return new Quaternion(w, x, y, z); | ||
676 | } | ||
677 | |||
678 | public static Quaternion FromAxisAngle(Vector3d axis, float rads) | ||
679 | { | ||
680 | float halfAngle = rads * 0.5f; | ||
681 | float sinHalf = (float)Math.Sin(halfAngle); | ||
682 | float w = (float)Math.Cos(halfAngle); | ||
683 | float x = (float)(sinHalf * axis.x); | ||
684 | float y = (float)(sinHalf * axis.y); | ||
685 | float z = (float)(sinHalf * axis.z); | ||
686 | return new Quaternion(w, x, y, z); | ||
687 | } | ||
688 | |||
689 | |||
690 | public Quaternion Add(Quaternion rhs) | ||
691 | { | ||
692 | return new Quaternion(w + rhs.w, x + rhs.x, y + rhs.y, z + rhs.z); | ||
693 | } | ||
694 | |||
695 | public Quaternion Subtract(Quaternion rhs) | ||
696 | { | ||
697 | return new Quaternion(w - rhs.w, x - rhs.x, y - rhs.y, z - rhs.z); | ||
698 | } | ||
699 | |||
700 | public Quaternion Multiply(Quaternion rhs) | ||
701 | { | ||
702 | return new Quaternion( | ||
703 | w * rhs.w - x * rhs.x - y * rhs.y - z * rhs.z, | ||
704 | w * rhs.x + x * rhs.w + y * rhs.z - z * rhs.y, | ||
705 | w * rhs.y + y * rhs.w + z * rhs.x - x * rhs.z, | ||
706 | w * rhs.z + z * rhs.w + x * rhs.y - y * rhs.x | ||
707 | ); | ||
708 | } | ||
709 | |||
710 | public Vector3f Multiply(Vector3f rhs) | ||
711 | { | ||
712 | Vector3f qvec = new Vector3f(x, y, z); | ||
713 | Vector3f uv = qvec.Cross(rhs); | ||
714 | Vector3f uuv = qvec.Cross(uv); | ||
715 | uv *= 2.0f * w; | ||
716 | uuv *= 2.0f; | ||
717 | |||
718 | return rhs + uv + uuv; | ||
719 | } | ||
720 | |||
721 | public Vector3d Multiply(Vector3d rhs) | ||
722 | { | ||
723 | Vector3d qvec = new Vector3d(x, y, z); | ||
724 | Vector3d uv = qvec.Cross(rhs); | ||
725 | Vector3d uuv = qvec.Cross(uv); | ||
726 | uv *= 2.0f * w; | ||
727 | uuv *= 2.0f; | ||
728 | |||
729 | return rhs + uv + uuv; | ||
730 | } | ||
731 | |||
732 | public Quaternion Multiply(float rhs) | ||
733 | { | ||
734 | return new Quaternion(w * rhs, x * rhs, y * rhs, z * rhs); | ||
735 | } | ||
736 | |||
737 | public Quaternion Negate() | ||
738 | { | ||
739 | return new Quaternion(-w, -x, -y, -z); | ||
740 | } | ||
741 | |||
742 | public float Dot(Quaternion rhs) | ||
743 | { | ||
744 | return (w * rhs.w + x * rhs.x + y * rhs.y + z * rhs.z); | ||
745 | } | ||
746 | |||
747 | public float Norm | ||
748 | { | ||
749 | get | ||
750 | { | ||
751 | return (float)Math.Sqrt(w * w + x * x + y * y + z * z); | ||
752 | } | ||
753 | } | ||
754 | |||
755 | public float SquareNorm | ||
756 | { | ||
757 | get | ||
758 | { | ||
759 | return (w * w + x * x + y * y + z * z); | ||
760 | } | ||
761 | } | ||
762 | |||
763 | public void Normalize() | ||
764 | { | ||
765 | float len = SquareNorm; | ||
766 | if (len == 0.0) return; | ||
767 | float factor = 1.0f / (float)Math.Sqrt(len); | ||
768 | this *= factor; | ||
769 | } | ||
770 | |||
771 | public Quaternion Normalized | ||
772 | { | ||
773 | get | ||
774 | { | ||
775 | Quaternion q = new Quaternion(this); | ||
776 | q.Normalize(); | ||
777 | return q; | ||
778 | } | ||
779 | } | ||
780 | |||
781 | public Quaternion Inverse | ||
782 | { | ||
783 | get | ||
784 | { | ||
785 | float norm = SquareNorm; | ||
786 | if (norm > 0.0) | ||
787 | { | ||
788 | double invnorm = 1.0 / norm; | ||
789 | return new Quaternion((float)(w * invnorm), (float)(-x * invnorm), (float)(-y * invnorm), (float)(-z * invnorm)); | ||
790 | } | ||
791 | else | ||
792 | return new Quaternion((float)0.0, 0.0f, 0.0f, 0.0f); | ||
793 | } | ||
794 | } | ||
795 | |||
796 | |||
797 | public override string ToString() | ||
798 | { | ||
799 | return String.Format("<{0}, {1}, {2}, {3}>", w, x, y, z); | ||
800 | } | ||
801 | |||
802 | |||
803 | |||
804 | public static Quaternion operator -(Quaternion uo) | ||
805 | { | ||
806 | return uo.Negate(); | ||
807 | } | ||
808 | |||
809 | public static Quaternion operator +(Quaternion lhs, Quaternion rhs) | ||
810 | { | ||
811 | return lhs.Add(rhs); | ||
812 | } | ||
813 | |||
814 | public static Quaternion operator -(Quaternion lhs, Quaternion rhs) | ||
815 | { | ||
816 | return lhs.Subtract(rhs); | ||
817 | } | ||
818 | |||
819 | public static Vector3f operator *(Quaternion lhs, Vector3f rhs) | ||
820 | { | ||
821 | return lhs.Multiply(rhs); | ||
822 | } | ||
823 | |||
824 | public static Vector3d operator *(Quaternion lhs, Vector3d rhs) | ||
825 | { | ||
826 | return lhs.Multiply(rhs); | ||
827 | } | ||
828 | |||
829 | public static Quaternion operator *(Quaternion lhs, Quaternion rhs) | ||
830 | { | ||
831 | return lhs.Multiply(rhs); | ||
832 | } | ||
833 | |||
834 | public static Quaternion operator *(Quaternion lhs, float rhs) | ||
835 | { | ||
836 | return lhs.Multiply(rhs); | ||
837 | } | ||
838 | |||
839 | public static Quaternion operator *(float lhs, Quaternion rhs) | ||
840 | { | ||
841 | return rhs.Multiply(lhs); | ||
842 | } | ||
843 | |||
844 | } // struct Quaternion | ||
845 | |||
846 | |||
847 | public struct Vector4f | ||
848 | { | ||
849 | |||
850 | public float x; | ||
851 | public float y; | ||
852 | public float z; | ||
853 | public float w; | ||
854 | |||
855 | |||
856 | public Vector4f(float _x, float _y, float _z, float _w) | ||
857 | { | ||
858 | x = _x; y = _y; z = _z; w = _w; | ||
859 | } | ||
860 | |||
861 | public Vector4f(Vector4f cpy) | ||
862 | { | ||
863 | x = cpy.x; y = cpy.y; z = cpy.z; w = cpy.w; | ||
864 | } | ||
865 | |||
866 | |||
867 | public Vector4f Negate() | ||
868 | { | ||
869 | return new Vector4f(-x, -y, -z, -w); | ||
870 | } | ||
871 | |||
872 | public Vector4f Add(Vector4f rhs) | ||
873 | { | ||
874 | return new Vector4f(x + rhs.x, y + rhs.y, z + rhs.z, w + rhs.w); | ||
875 | } | ||
876 | |||
877 | public Vector4f Subtract(Vector4f rhs) | ||
878 | { | ||
879 | return new Vector4f(x - rhs.x, y - rhs.y, z - rhs.z, w - rhs.w); | ||
880 | } | ||
881 | |||
882 | public Vector4f Multiply(Vector4f rhs) | ||
883 | { | ||
884 | return new Vector4f(x * rhs.x, y * rhs.y, z * rhs.z, w * rhs.w); | ||
885 | } | ||
886 | |||
887 | public Vector4f Multiply(float s) | ||
888 | { | ||
889 | return new Vector4f(x * s, y * s, z * s, w * s); | ||
890 | } | ||
891 | |||
892 | public Vector4f Divide(Vector4f rhs) | ||
893 | { | ||
894 | return new Vector4f(x / rhs.x, y / rhs.y, z / rhs.z, w / rhs.w); | ||
895 | } | ||
896 | |||
897 | public Vector4f Divide(float s) | ||
898 | { | ||
899 | return new Vector4f(x / s, y / s, z / s, w / s); | ||
900 | } | ||
901 | |||
902 | public float Dot(Vector4f rhs) | ||
903 | { | ||
904 | return (x * rhs.x + y * rhs.y + z * rhs.z + w * rhs.w); | ||
905 | } | ||
906 | |||
907 | public void Normalize() | ||
908 | { | ||
909 | float len = Length; | ||
910 | if (len != 0.0) | ||
911 | { | ||
912 | x /= len; y /= len; z /= len; w /= len; | ||
913 | } | ||
914 | } | ||
915 | |||
916 | public Vector4f Normalized | ||
917 | { | ||
918 | get | ||
919 | { | ||
920 | Vector4f normed = new Vector4f(this); | ||
921 | normed.Normalize(); | ||
922 | return normed; | ||
923 | } | ||
924 | } | ||
925 | |||
926 | public float SquaredLength | ||
927 | { | ||
928 | get | ||
929 | { | ||
930 | return (x * x + y * y + z * z + w * w); | ||
931 | } | ||
932 | } | ||
933 | public float Length | ||
934 | { | ||
935 | get | ||
936 | { | ||
937 | return (float)Math.Sqrt(SquaredLength); | ||
938 | } | ||
939 | } | ||
940 | |||
941 | |||
942 | public override string ToString() | ||
943 | { | ||
944 | return String.Format("<{0}, {1}, {2}, {3}>", x, y, z, w); | ||
945 | } | ||
946 | |||
947 | |||
948 | public static Vector4f operator -(Vector4f uo) | ||
949 | { | ||
950 | return uo.Negate(); | ||
951 | } | ||
952 | |||
953 | public static Vector4f operator +(Vector4f lhs, Vector4f rhs) | ||
954 | { | ||
955 | return lhs.Add(rhs); | ||
956 | } | ||
957 | |||
958 | public static Vector4f operator -(Vector4f lhs, Vector4f rhs) | ||
959 | { | ||
960 | return lhs.Subtract(rhs); | ||
961 | } | ||
962 | |||
963 | public static Vector4f operator *(Vector4f lhs, Vector4f rhs) | ||
964 | { | ||
965 | return lhs.Multiply(rhs); | ||
966 | } | ||
967 | |||
968 | public static Vector4f operator *(Vector4f lhs, float rhs) | ||
969 | { | ||
970 | return lhs.Multiply(rhs); | ||
971 | } | ||
972 | public static Vector4f operator *(float lhs, Vector4f rhs) | ||
973 | { | ||
974 | return rhs.Multiply(lhs); | ||
975 | } | ||
976 | |||
977 | public static Vector4f operator /(Vector4f lhs, Vector4f rhs) | ||
978 | { | ||
979 | return lhs.Divide(rhs); | ||
980 | } | ||
981 | |||
982 | public static Vector4f operator /(Vector4f lhs, float rhs) | ||
983 | { | ||
984 | return lhs.Divide(rhs); | ||
985 | } | ||
986 | |||
987 | } // struct Vector4f | ||
988 | |||
989 | |||
990 | |||
991 | public struct Vector4d | ||
992 | { | ||
993 | |||
994 | public double x; | ||
995 | public double y; | ||
996 | public double z; | ||
997 | public double w; | ||
998 | |||
999 | |||
1000 | public Vector4d(double _x, double _y, double _z, double _w) | ||
1001 | { | ||
1002 | x = _x; y = _y; z = _z; w = _w; | ||
1003 | } | ||
1004 | |||
1005 | public Vector4d(Vector4d cpy) | ||
1006 | { | ||
1007 | x = cpy.x; y = cpy.y; z = cpy.z; w = cpy.w; | ||
1008 | } | ||
1009 | |||
1010 | |||
1011 | public Vector4d Negate() | ||
1012 | { | ||
1013 | return new Vector4d(-x, -y, -z, -w); | ||
1014 | } | ||
1015 | |||
1016 | public Vector4d Add(Vector4d rhs) | ||
1017 | { | ||
1018 | return new Vector4d(x + rhs.x, y + rhs.y, z + rhs.z, w + rhs.w); | ||
1019 | } | ||
1020 | |||
1021 | public Vector4d Subtract(Vector4d rhs) | ||
1022 | { | ||
1023 | return new Vector4d(x - rhs.x, y - rhs.y, z - rhs.z, w - rhs.w); | ||
1024 | } | ||
1025 | |||
1026 | public Vector4d Multiply(Vector4d rhs) | ||
1027 | { | ||
1028 | return new Vector4d(x * rhs.x, y * rhs.y, z * rhs.z, w * rhs.w); | ||
1029 | } | ||
1030 | |||
1031 | public Vector4d Multiply(double s) | ||
1032 | { | ||
1033 | return new Vector4d(x * s, y * s, z * s, w * s); | ||
1034 | } | ||
1035 | |||
1036 | public Vector4d Divide(Vector4d rhs) | ||
1037 | { | ||
1038 | return new Vector4d(x / rhs.x, y / rhs.y, z / rhs.z, w / rhs.w); | ||
1039 | } | ||
1040 | |||
1041 | public Vector4d Divide(double s) | ||
1042 | { | ||
1043 | return new Vector4d(x / s, y / s, z / s, w / s); | ||
1044 | } | ||
1045 | |||
1046 | public double Dot(Vector4d rhs) | ||
1047 | { | ||
1048 | return (x * rhs.x + y * rhs.y + z * rhs.z + w * rhs.w); | ||
1049 | } | ||
1050 | |||
1051 | public void Normalize() | ||
1052 | { | ||
1053 | double len = Length; | ||
1054 | if (len != 0.0) | ||
1055 | { | ||
1056 | x /= len; y /= len; z /= len; w /= len; | ||
1057 | } | ||
1058 | } | ||
1059 | |||
1060 | public Vector4d Normalized | ||
1061 | { | ||
1062 | get | ||
1063 | { | ||
1064 | Vector4d normed = new Vector4d(this); | ||
1065 | normed.Normalize(); | ||
1066 | return normed; | ||
1067 | } | ||
1068 | } | ||
1069 | |||
1070 | public double SquaredLength | ||
1071 | { | ||
1072 | get | ||
1073 | { | ||
1074 | return (x * x + y * y + z * z + w * w); | ||
1075 | } | ||
1076 | } | ||
1077 | public double Length | ||
1078 | { | ||
1079 | get | ||
1080 | { | ||
1081 | return Math.Sqrt(SquaredLength); | ||
1082 | } | ||
1083 | } | ||
1084 | |||
1085 | |||
1086 | public override string ToString() | ||
1087 | { | ||
1088 | return String.Format("<{0}, {1}, {2}, {3}>", x, y, z, w); | ||
1089 | } | ||
1090 | |||
1091 | |||
1092 | public static Vector4d operator -(Vector4d uo) | ||
1093 | { | ||
1094 | return uo.Negate(); | ||
1095 | } | ||
1096 | |||
1097 | public static Vector4d operator +(Vector4d lhs, Vector4d rhs) | ||
1098 | { | ||
1099 | return lhs.Add(rhs); | ||
1100 | } | ||
1101 | |||
1102 | public static Vector4d operator -(Vector4d lhs, Vector4d rhs) | ||
1103 | { | ||
1104 | return lhs.Subtract(rhs); | ||
1105 | } | ||
1106 | |||
1107 | public static Vector4d operator *(Vector4d lhs, Vector4d rhs) | ||
1108 | { | ||
1109 | return lhs.Multiply(rhs); | ||
1110 | } | ||
1111 | |||
1112 | public static Vector4d operator *(Vector4d lhs, double rhs) | ||
1113 | { | ||
1114 | return lhs.Multiply(rhs); | ||
1115 | } | ||
1116 | public static Vector4d operator *(double lhs, Vector4d rhs) | ||
1117 | { | ||
1118 | return rhs.Multiply(lhs); | ||
1119 | } | ||
1120 | |||
1121 | public static Vector4d operator /(Vector4d lhs, Vector4d rhs) | ||
1122 | { | ||
1123 | return lhs.Divide(rhs); | ||
1124 | } | ||
1125 | |||
1126 | public static Vector4d operator /(Vector4d lhs, double rhs) | ||
1127 | { | ||
1128 | return lhs.Divide(rhs); | ||
1129 | } | ||
1130 | |||
1131 | } // struct Vector4d | ||
1132 | |||
1133 | |||
1134 | |||
1135 | public struct BoundingBox3f3f | ||
1136 | { | ||
1137 | Vector3f mMin; | ||
1138 | Vector3f mDiag; | ||
1139 | public BoundingBox3f3f(float minx, float miny, float minz, float diagx, float diagy, float diagz) | ||
1140 | { | ||
1141 | mMin.x = minx; | ||
1142 | mMin.y = miny; | ||
1143 | mMin.z = minz; | ||
1144 | |||
1145 | mDiag.x = diagx; | ||
1146 | mDiag.y = diagy; | ||
1147 | mDiag.z = diagz; | ||
1148 | } | ||
1149 | public BoundingBox3f3f(Vector3f min, Vector3f max) | ||
1150 | { | ||
1151 | mMin = min; | ||
1152 | mDiag = (max - min); | ||
1153 | } | ||
1154 | public BoundingBox3f3f(BoundingBox3f3f cpy, Vector3f scale) | ||
1155 | { | ||
1156 | mMin.x = (float)(cpy.mMin.x * scale.x); | ||
1157 | mMin.y = (float)(cpy.mMin.y * scale.y); | ||
1158 | mMin.z = (float)(cpy.mMin.z * scale.z); | ||
1159 | |||
1160 | mDiag.x = (float)(cpy.mDiag.x * scale.x); | ||
1161 | mDiag.y = (float)(cpy.mDiag.y * scale.y); | ||
1162 | mDiag.z = (float)(cpy.mDiag.z * scale.z); | ||
1163 | } | ||
1164 | public Vector3f Min | ||
1165 | { | ||
1166 | get | ||
1167 | { | ||
1168 | return new Vector3f(mMin.x, mMin.y, mMin.z); | ||
1169 | } | ||
1170 | } | ||
1171 | public Vector3f Max | ||
1172 | { | ||
1173 | get | ||
1174 | { | ||
1175 | return new Vector3f(mMin.x + mDiag.x, mMin.y + mDiag.y, mMin.z + mDiag.z); | ||
1176 | } | ||
1177 | } | ||
1178 | |||
1179 | public Vector3f Diag | ||
1180 | { | ||
1181 | get | ||
1182 | { | ||
1183 | return new Vector3f(mDiag.x, mDiag.y, mDiag.z); | ||
1184 | } | ||
1185 | } | ||
1186 | |||
1187 | |||
1188 | public override string ToString() | ||
1189 | { | ||
1190 | return "[" + this.Min.ToString() + " - " + this.Max.ToString() + "]"; | ||
1191 | } | ||
1192 | public BoundingBox3f3f Merge(BoundingBox3f3f other) | ||
1193 | { | ||
1194 | Vector3f thisMax = Max; | ||
1195 | Vector3f otherMax = other.Max; | ||
1196 | bool xless = other.mMin.x > mMin.x; | ||
1197 | bool yless = other.mMin.y > mMin.y; | ||
1198 | bool zless = other.mMin.z > mMin.z; | ||
1199 | |||
1200 | bool xmore = otherMax.x < thisMax.x; | ||
1201 | bool ymore = otherMax.y < thisMax.y; | ||
1202 | bool zmore = otherMax.z < thisMax.z; | ||
1203 | return new BoundingBox3f3f(xless ? mMin.x : other.mMin.x, | ||
1204 | yless ? mMin.y : other.mMin.y, | ||
1205 | zless ? mMin.z : other.mMin.z, | ||
1206 | xmore ? (xless ? mDiag.x : otherMax.x - mMin.x) : (xless ? thisMax.x - other.mMin.x : other.mDiag.x), | ||
1207 | ymore ? (yless ? mDiag.y : otherMax.y - mMin.y) : (yless ? thisMax.y - other.mMin.y : other.mDiag.y), | ||
1208 | zmore ? (zless ? mDiag.z : otherMax.z - mMin.z) : (zless ? thisMax.z - other.mMin.z : other.mDiag.z)); | ||
1209 | } | ||
1210 | |||
1211 | } // struct BoundingBox | ||
1212 | |||
1213 | public struct BoundingBox3d3f | ||
1214 | { | ||
1215 | Vector3d mMin; | ||
1216 | Vector3f mDiag; | ||
1217 | public BoundingBox3d3f(double minx, double miny, double minz, float diagx, float diagy, float diagz) | ||
1218 | { | ||
1219 | mMin.x = minx; | ||
1220 | mMin.y = miny; | ||
1221 | mMin.z = minz; | ||
1222 | |||
1223 | mDiag.x = diagx; | ||
1224 | mDiag.y = diagy; | ||
1225 | mDiag.z = diagz; | ||
1226 | } | ||
1227 | public BoundingBox3d3f(Vector3d min, Vector3f max) | ||
1228 | { | ||
1229 | mMin = min; | ||
1230 | |||
1231 | mDiag = new Vector3f((float)(max.x - min.x), | ||
1232 | (float)(max.y - min.y), | ||
1233 | (float)(max.z - min.z)); | ||
1234 | } | ||
1235 | public BoundingBox3d3f(BoundingBox3d3f cpy, Vector3d scale) | ||
1236 | { | ||
1237 | mMin.x = (double)(cpy.mMin.x * scale.x); | ||
1238 | mMin.y = (double)(cpy.mMin.y * scale.y); | ||
1239 | mMin.z = (double)(cpy.mMin.z * scale.z); | ||
1240 | |||
1241 | mDiag.x = (float)(cpy.mDiag.x * scale.x); | ||
1242 | mDiag.y = (float)(cpy.mDiag.y * scale.y); | ||
1243 | mDiag.z = (float)(cpy.mDiag.z * scale.z); | ||
1244 | } | ||
1245 | public Vector3d Min | ||
1246 | { | ||
1247 | get | ||
1248 | { | ||
1249 | return new Vector3d(mMin.x, mMin.y, mMin.z); | ||
1250 | } | ||
1251 | } | ||
1252 | public Vector3d Max | ||
1253 | { | ||
1254 | get | ||
1255 | { | ||
1256 | return new Vector3d(mMin.x + mDiag.x, mMin.y + mDiag.y, mMin.z + mDiag.z); | ||
1257 | } | ||
1258 | } | ||
1259 | |||
1260 | public Vector3d Diag | ||
1261 | { | ||
1262 | get | ||
1263 | { | ||
1264 | return new Vector3d(mDiag.x, mDiag.y, mDiag.z); | ||
1265 | } | ||
1266 | } | ||
1267 | |||
1268 | |||
1269 | public override string ToString() | ||
1270 | { | ||
1271 | return "[" + this.Min.ToString() + " - " + this.Max.ToString() + "]"; | ||
1272 | } | ||
1273 | public BoundingBox3d3f Merge(BoundingBox3d3f other) | ||
1274 | { | ||
1275 | Vector3d thisMax = Max; | ||
1276 | Vector3d otherMax = other.Max; | ||
1277 | bool xless = other.mMin.x > mMin.x; | ||
1278 | bool yless = other.mMin.y > mMin.y; | ||
1279 | bool zless = other.mMin.z > mMin.z; | ||
1280 | |||
1281 | bool xmore = otherMax.x < thisMax.x; | ||
1282 | bool ymore = otherMax.y < thisMax.y; | ||
1283 | bool zmore = otherMax.z < thisMax.z; | ||
1284 | return new BoundingBox3d3f(xless ? mMin.x : other.mMin.x, | ||
1285 | yless ? mMin.y : other.mMin.y, | ||
1286 | zless ? mMin.z : other.mMin.z, | ||
1287 | (float)(xmore ? (xless ? mDiag.x : otherMax.x - mMin.x) : (xless ? thisMax.x - other.mMin.x : other.mDiag.x)), | ||
1288 | (float)(ymore ? (yless ? mDiag.y : otherMax.y - mMin.y) : (yless ? thisMax.y - other.mMin.y : other.mDiag.y)), | ||
1289 | (float)(zmore ? (zless ? mDiag.z : otherMax.z - mMin.z) : (zless ? thisMax.z - other.mMin.z : other.mDiag.z))); | ||
1290 | } | ||
1291 | |||
1292 | } // struct BoundingBox | ||
1293 | |||
1294 | |||
1295 | |||
1296 | |||
1297 | public struct BoundingSphere3f | ||
1298 | { | ||
1299 | Vector3f mCenter; | ||
1300 | float mRadius; | ||
1301 | public BoundingSphere3f(float x, float y, float z, float r) | ||
1302 | { | ||
1303 | mCenter = new Vector3f(x, y, z); | ||
1304 | mRadius = r; | ||
1305 | } | ||
1306 | public BoundingSphere3f(Vector3f center, float radius) | ||
1307 | { | ||
1308 | mCenter = center; | ||
1309 | mRadius = radius; | ||
1310 | } | ||
1311 | public BoundingSphere3f(BoundingSphere3f cpy, float scale) | ||
1312 | { | ||
1313 | mCenter = cpy.mCenter; | ||
1314 | mRadius = cpy.mRadius * scale; | ||
1315 | } | ||
1316 | public Vector3f Center | ||
1317 | { | ||
1318 | get | ||
1319 | { | ||
1320 | return new Vector3f(mCenter.x, mCenter.y, mCenter.z); | ||
1321 | } | ||
1322 | } | ||
1323 | public float Radius | ||
1324 | { | ||
1325 | get | ||
1326 | { | ||
1327 | return mRadius; | ||
1328 | } | ||
1329 | } | ||
1330 | |||
1331 | public override string ToString() | ||
1332 | { | ||
1333 | return "[" + this.Center.ToString() + " : " + this.Radius.ToString() + "]"; | ||
1334 | } | ||
1335 | } // struct BoundingSphere3f | ||
1336 | |||
1337 | |||
1338 | |||
1339 | public struct BoundingSphere3d | ||
1340 | { | ||
1341 | Vector3d mCenter; | ||
1342 | float mRadius; | ||
1343 | public BoundingSphere3d(double x, double y, double z, float r) | ||
1344 | { | ||
1345 | mCenter.x = x; | ||
1346 | mCenter.y = y; | ||
1347 | mCenter.z = z; | ||
1348 | mRadius = r; | ||
1349 | } | ||
1350 | public BoundingSphere3d(Vector3d center, float radius) | ||
1351 | { | ||
1352 | mCenter = center; | ||
1353 | mRadius = radius; | ||
1354 | } | ||
1355 | public BoundingSphere3d(BoundingSphere3d cpy, float scale) | ||
1356 | { | ||
1357 | mCenter = cpy.mCenter; | ||
1358 | mRadius = cpy.mRadius * scale; | ||
1359 | } | ||
1360 | public Vector3d Center | ||
1361 | { | ||
1362 | get | ||
1363 | { | ||
1364 | return new Vector3d(mCenter.x, mCenter.y, mCenter.z); | ||
1365 | } | ||
1366 | } | ||
1367 | public float Radius | ||
1368 | { | ||
1369 | get | ||
1370 | { | ||
1371 | return mRadius; | ||
1372 | } | ||
1373 | } | ||
1374 | |||
1375 | public override string ToString() | ||
1376 | { | ||
1377 | return "[" + this.Center.ToString() + " : " + this.Radius.ToString() + "]"; | ||
1378 | } | ||
1379 | } // struct BoundingSphere3f | ||
1380 | |||
1381 | public struct UUID | ||
1382 | { | ||
1383 | ulong mLowOrderBytes; | ||
1384 | ulong mHighOrderBytes; | ||
1385 | |||
1386 | |||
1387 | static ulong SetUUIDlow(Google.ProtocolBuffers.ByteString data, int offset) | ||
1388 | { | ||
1389 | ulong LowOrderBytes = 0; | ||
1390 | int shiftVal = 0; | ||
1391 | for (int i = 0; i < 8; ++i) | ||
1392 | { | ||
1393 | ulong temp = data[i]; | ||
1394 | LowOrderBytes |= (temp << shiftVal); | ||
1395 | shiftVal += 8; | ||
1396 | } | ||
1397 | return LowOrderBytes; | ||
1398 | } | ||
1399 | static ulong SetUUIDhigh(Google.ProtocolBuffers.ByteString data) | ||
1400 | { | ||
1401 | return SetUUIDlow(data, 8); | ||
1402 | } | ||
1403 | static ulong SetUUIDlow(byte[] data, int offset) | ||
1404 | { | ||
1405 | ulong LowOrderBytes = 0; | ||
1406 | int shiftVal = 0; | ||
1407 | for (int i = 0; i < 8; ++i) | ||
1408 | { | ||
1409 | ulong temp = data[i]; | ||
1410 | LowOrderBytes |= (temp << shiftVal); | ||
1411 | shiftVal += 8; | ||
1412 | } | ||
1413 | return LowOrderBytes; | ||
1414 | } | ||
1415 | static ulong SetUUIDhigh(byte[] data) | ||
1416 | { | ||
1417 | return SetUUIDlow(data, 8); | ||
1418 | } | ||
1419 | public bool SetUUID(byte[] data) | ||
1420 | { | ||
1421 | if (data.Length == 16) | ||
1422 | { | ||
1423 | mLowOrderBytes = 0; | ||
1424 | mHighOrderBytes = 0; | ||
1425 | mLowOrderBytes = SetUUIDlow(data, 0); | ||
1426 | mHighOrderBytes = SetUUIDlow(data, 8); | ||
1427 | return true; | ||
1428 | } | ||
1429 | else | ||
1430 | { | ||
1431 | return false; | ||
1432 | } | ||
1433 | } | ||
1434 | public byte[] GetUUID() | ||
1435 | { | ||
1436 | byte[] data = new byte[16]; | ||
1437 | int shiftVal = 0; | ||
1438 | for (int i = 0; i < 8; ++i) | ||
1439 | { | ||
1440 | ulong temp = 0xff; | ||
1441 | temp = (mLowOrderBytes & (temp << shiftVal)); | ||
1442 | temp = (temp >> shiftVal); | ||
1443 | data[i] = (byte)temp; | ||
1444 | shiftVal += 8; | ||
1445 | } | ||
1446 | shiftVal = 0; | ||
1447 | for (int i = 8; i < 16; ++i) | ||
1448 | { | ||
1449 | ulong temp = 0xff; | ||
1450 | temp = (mHighOrderBytes & (temp << shiftVal)); | ||
1451 | temp = (temp >> shiftVal); | ||
1452 | data[i] = (byte)temp; | ||
1453 | shiftVal += 8; | ||
1454 | } | ||
1455 | return data; | ||
1456 | } | ||
1457 | |||
1458 | public static UUID Empty = new UUID(new byte[16]); | ||
1459 | public UUID(byte[] data) | ||
1460 | { | ||
1461 | if (data.Length != 16) | ||
1462 | { | ||
1463 | throw new System.ArgumentException("UUIDs must be provided 16 bytes"); | ||
1464 | } | ||
1465 | mLowOrderBytes = SetUUIDlow(data, 0); | ||
1466 | mHighOrderBytes = SetUUIDhigh(data); | ||
1467 | } | ||
1468 | public UUID(Google.ProtocolBuffers.ByteString data) | ||
1469 | { | ||
1470 | if (data.Length != 16) | ||
1471 | { | ||
1472 | throw new System.ArgumentException("UUIDs must be provided 16 bytes"); | ||
1473 | } | ||
1474 | mLowOrderBytes = SetUUIDlow(data, 0); | ||
1475 | mHighOrderBytes = SetUUIDhigh(data); | ||
1476 | } | ||
1477 | |||
1478 | } | ||
1479 | |||
1480 | |||
1481 | public struct SHA256 | ||
1482 | { | ||
1483 | ulong mLowOrderBytes; | ||
1484 | ulong mLowMediumOrderBytes; | ||
1485 | ulong mMediumHighOrderBytes; | ||
1486 | ulong mHighOrderBytes; | ||
1487 | |||
1488 | |||
1489 | static ulong SetLMH(Google.ProtocolBuffers.ByteString data, int offset) | ||
1490 | { | ||
1491 | ulong LowOrderBytes = 0; | ||
1492 | int shiftVal = 0; | ||
1493 | for (int i = 0; i < 8; ++i) | ||
1494 | { | ||
1495 | ulong temp = data[i]; | ||
1496 | LowOrderBytes |= (temp << shiftVal); | ||
1497 | shiftVal += 8; | ||
1498 | } | ||
1499 | return LowOrderBytes; | ||
1500 | } | ||
1501 | static ulong SetLow(Google.ProtocolBuffers.ByteString data) | ||
1502 | { | ||
1503 | return SetLMH(data, 0); | ||
1504 | } | ||
1505 | static ulong SetLowMedium(Google.ProtocolBuffers.ByteString data) | ||
1506 | { | ||
1507 | return SetLMH(data, 8); | ||
1508 | } | ||
1509 | static ulong SetMediumHigh(Google.ProtocolBuffers.ByteString data) | ||
1510 | { | ||
1511 | return SetLMH(data, 16); | ||
1512 | } | ||
1513 | static ulong SetHigh(Google.ProtocolBuffers.ByteString data) | ||
1514 | { | ||
1515 | return SetLMH(data, 24); | ||
1516 | } | ||
1517 | static ulong SetLMH(byte[] data, int offset) | ||
1518 | { | ||
1519 | ulong LowOrderBytes = 0; | ||
1520 | int shiftVal = 0; | ||
1521 | for (int i = 0; i < 8; ++i) | ||
1522 | { | ||
1523 | ulong temp = data[i]; | ||
1524 | LowOrderBytes |= (temp << shiftVal); | ||
1525 | shiftVal += 8; | ||
1526 | } | ||
1527 | return LowOrderBytes; | ||
1528 | } | ||
1529 | static ulong SetLow(byte[] data) | ||
1530 | { | ||
1531 | return SetLMH(data, 0); | ||
1532 | } | ||
1533 | static ulong SetLowMedium(byte[] data) | ||
1534 | { | ||
1535 | return SetLMH(data, 8); | ||
1536 | } | ||
1537 | static ulong SetMediumHigh(byte[] data) | ||
1538 | { | ||
1539 | return SetLMH(data, 16); | ||
1540 | } | ||
1541 | static ulong SetHigh(byte[] data) | ||
1542 | { | ||
1543 | return SetLMH(data, 24); | ||
1544 | } | ||
1545 | public bool SetSHA256(byte[] data) | ||
1546 | { | ||
1547 | if (data.Length == 32) | ||
1548 | { | ||
1549 | mLowOrderBytes = SetLow(data); | ||
1550 | mLowMediumOrderBytes = SetLowMedium(data); | ||
1551 | mMediumHighOrderBytes = SetMediumHigh(data); | ||
1552 | mHighOrderBytes = SetHigh(data); | ||
1553 | return true; | ||
1554 | } | ||
1555 | else | ||
1556 | { | ||
1557 | return false; | ||
1558 | } | ||
1559 | } | ||
1560 | public byte[] GetBinaryData() | ||
1561 | { | ||
1562 | byte[] data = new byte[32]; | ||
1563 | int shiftVal = 0; | ||
1564 | for (int i = 0; i < 8; ++i) | ||
1565 | { | ||
1566 | ulong temp = 0xff; | ||
1567 | temp = (mLowOrderBytes & (temp << shiftVal)); | ||
1568 | temp = (temp >> shiftVal); | ||
1569 | data[i] = (byte)temp; | ||
1570 | shiftVal += 8; | ||
1571 | } | ||
1572 | shiftVal = 0; | ||
1573 | for (int i = 8; i < 16; ++i) | ||
1574 | { | ||
1575 | ulong temp = 0xff; | ||
1576 | temp = (mLowMediumOrderBytes & (temp << shiftVal)); | ||
1577 | temp = (temp >> shiftVal); | ||
1578 | data[i] = (byte)temp; | ||
1579 | shiftVal += 8; | ||
1580 | } | ||
1581 | shiftVal = 0; | ||
1582 | for (int i = 16; i < 24; ++i) | ||
1583 | { | ||
1584 | ulong temp = 0xff; | ||
1585 | temp = (mMediumHighOrderBytes & (temp << shiftVal)); | ||
1586 | temp = (temp >> shiftVal); | ||
1587 | data[i] = (byte)temp; | ||
1588 | shiftVal += 8; | ||
1589 | } | ||
1590 | shiftVal = 0; | ||
1591 | for (int i = 24; i < 32; ++i) | ||
1592 | { | ||
1593 | ulong temp = 0xff; | ||
1594 | temp = (mHighOrderBytes & (temp << shiftVal)); | ||
1595 | temp = (temp >> shiftVal); | ||
1596 | data[i] = (byte)temp; | ||
1597 | shiftVal += 8; | ||
1598 | } | ||
1599 | return data; | ||
1600 | } | ||
1601 | |||
1602 | public static SHA256 Empty = new SHA256(new byte[32]); | ||
1603 | public SHA256(byte[] data) | ||
1604 | { | ||
1605 | if (data.Length != 32) | ||
1606 | { | ||
1607 | throw new System.ArgumentException("SHA256s must be provided 32 bytes"); | ||
1608 | } | ||
1609 | mLowOrderBytes = SetLow(data); | ||
1610 | mLowMediumOrderBytes = SetLowMedium(data); | ||
1611 | mMediumHighOrderBytes = SetMediumHigh(data); | ||
1612 | mHighOrderBytes = SetHigh(data); | ||
1613 | } | ||
1614 | public SHA256(Google.ProtocolBuffers.ByteString data) | ||
1615 | { | ||
1616 | if (data.Length != 32) | ||
1617 | { | ||
1618 | throw new System.ArgumentException("SHA256s must be provided 32 bytes"); | ||
1619 | } | ||
1620 | mLowOrderBytes = SetLow(data); | ||
1621 | mLowMediumOrderBytes = SetLowMedium(data); | ||
1622 | mMediumHighOrderBytes = SetMediumHigh(data); | ||
1623 | mHighOrderBytes = SetHigh(data); | ||
1624 | } | ||
1625 | |||
1626 | } | ||
1627 | |||
1628 | |||
1629 | |||
1630 | |||
1631 | public struct Time | ||
1632 | { | ||
1633 | ulong usec; | ||
1634 | public Time(ulong usec_since_epoch) | ||
1635 | { | ||
1636 | usec = usec_since_epoch; | ||
1637 | } | ||
1638 | public ulong toMicro() | ||
1639 | { | ||
1640 | return usec; | ||
1641 | } | ||
1642 | } | ||
1643 | public class Duration | ||
1644 | { | ||
1645 | long usec; | ||
1646 | public Duration(long time_since) | ||
1647 | { | ||
1648 | usec = time_since; | ||
1649 | } | ||
1650 | public long toMicro() | ||
1651 | { | ||
1652 | return usec; | ||
1653 | } | ||
1654 | } | ||
1655 | |||
1656 | class _PBJ | ||
1657 | { | ||
1658 | |||
1659 | public static bool ValidateBool(bool d) | ||
1660 | { | ||
1661 | return true; | ||
1662 | } | ||
1663 | public static bool ValidateDouble(double d) | ||
1664 | { | ||
1665 | return true; | ||
1666 | } | ||
1667 | public static bool ValidateFloat(float d) | ||
1668 | { | ||
1669 | return true; | ||
1670 | } | ||
1671 | public static bool ValidateUint64(ulong d) | ||
1672 | { | ||
1673 | return true; | ||
1674 | } | ||
1675 | public static bool ValidateUint32(uint d) | ||
1676 | { | ||
1677 | return true; | ||
1678 | } | ||
1679 | public static bool ValidateUint16(ushort d) | ||
1680 | { | ||
1681 | return true; | ||
1682 | } | ||
1683 | public static bool ValidateUint8(byte d) | ||
1684 | { | ||
1685 | return true; | ||
1686 | } | ||
1687 | public static bool ValidateInt64(long d) | ||
1688 | { | ||
1689 | return true; | ||
1690 | } | ||
1691 | public static bool ValidateInt32(int d) | ||
1692 | { | ||
1693 | return true; | ||
1694 | } | ||
1695 | public static bool ValidateInt16(short d) | ||
1696 | { | ||
1697 | return true; | ||
1698 | } | ||
1699 | public static bool ValidateInt8(sbyte d) | ||
1700 | { | ||
1701 | return true; | ||
1702 | } | ||
1703 | public static bool ValidateString<S>(S input) | ||
1704 | { | ||
1705 | return true; | ||
1706 | } | ||
1707 | public static bool ValidateBytes<B>(B input) | ||
1708 | { | ||
1709 | return true; | ||
1710 | } | ||
1711 | public static bool ValidateUuid(Google.ProtocolBuffers.ByteString input) | ||
1712 | { | ||
1713 | return input.Length == 16; | ||
1714 | } | ||
1715 | public static bool ValidateSha256(Google.ProtocolBuffers.ByteString input) | ||
1716 | { | ||
1717 | return input.Length == 32; | ||
1718 | } | ||
1719 | public static bool ValidateAngle(float input) | ||
1720 | { | ||
1721 | return input >= 0 && input <= 3.1415926536 * 2.0; | ||
1722 | } | ||
1723 | public static bool ValidateTime(ulong input) | ||
1724 | { | ||
1725 | return true; | ||
1726 | } | ||
1727 | public static bool ValidateDuration(long input) | ||
1728 | { | ||
1729 | return true; | ||
1730 | } | ||
1731 | public static bool ValidateFlags(ulong input, ulong verification) | ||
1732 | { | ||
1733 | return (input & verification) == input; | ||
1734 | } | ||
1735 | |||
1736 | |||
1737 | |||
1738 | |||
1739 | public static bool CastBool(bool d) | ||
1740 | { | ||
1741 | return d; | ||
1742 | } | ||
1743 | public static double CastDouble(double d) | ||
1744 | { | ||
1745 | return d; | ||
1746 | } | ||
1747 | public static float CastFloat(float d) | ||
1748 | { | ||
1749 | return d; | ||
1750 | } | ||
1751 | public static ulong CastUint64(ulong d) | ||
1752 | { | ||
1753 | return d; | ||
1754 | } | ||
1755 | public static uint CastUint32(uint d) | ||
1756 | { | ||
1757 | return d; | ||
1758 | } | ||
1759 | public static ushort CastUint16(ushort d) | ||
1760 | { | ||
1761 | return d; | ||
1762 | } | ||
1763 | public static byte CastUint8(byte d) | ||
1764 | { | ||
1765 | return d; | ||
1766 | } | ||
1767 | public static long CastInt64(long d) | ||
1768 | { | ||
1769 | return d; | ||
1770 | } | ||
1771 | public static int CastInt32(int d) | ||
1772 | { | ||
1773 | return d; | ||
1774 | } | ||
1775 | public static short CastInt16(short d) | ||
1776 | { | ||
1777 | return d; | ||
1778 | } | ||
1779 | public static sbyte CastInt8(sbyte d) | ||
1780 | { | ||
1781 | return d; | ||
1782 | } | ||
1783 | public static S CastString<S>(S input) | ||
1784 | { | ||
1785 | return input; | ||
1786 | } | ||
1787 | public static B CastBytes<B>(B input) | ||
1788 | { | ||
1789 | return input; | ||
1790 | } | ||
1791 | |||
1792 | |||
1793 | |||
1794 | public static bool CastBool() | ||
1795 | { | ||
1796 | return false; | ||
1797 | } | ||
1798 | public static double CastDouble() | ||
1799 | { | ||
1800 | return 0; | ||
1801 | } | ||
1802 | public static float CastFloat() | ||
1803 | { | ||
1804 | return 0; | ||
1805 | } | ||
1806 | public static ulong CastUint64() | ||
1807 | { | ||
1808 | return 0; | ||
1809 | } | ||
1810 | public static uint CastUint32() | ||
1811 | { | ||
1812 | return 0; | ||
1813 | } | ||
1814 | public static ushort CastUint16() | ||
1815 | { | ||
1816 | return 0; | ||
1817 | } | ||
1818 | public static byte CastUint8() | ||
1819 | { | ||
1820 | return 0; | ||
1821 | } | ||
1822 | public static long CastInt64() | ||
1823 | { | ||
1824 | return 0; | ||
1825 | } | ||
1826 | public static int CastInt32() | ||
1827 | { | ||
1828 | return 0; | ||
1829 | } | ||
1830 | public static short CastInt16() | ||
1831 | { | ||
1832 | return 0; | ||
1833 | } | ||
1834 | public static sbyte CastInt8() | ||
1835 | { | ||
1836 | return 0; | ||
1837 | } | ||
1838 | public static string CastString() | ||
1839 | { | ||
1840 | return ""; | ||
1841 | } | ||
1842 | public static Google.ProtocolBuffers.ByteString CastBytes() | ||
1843 | { | ||
1844 | return Google.ProtocolBuffers.ByteString.Empty; | ||
1845 | } | ||
1846 | |||
1847 | |||
1848 | public static ulong CastFlags(ulong data, ulong allFlagsOn) | ||
1849 | { | ||
1850 | return allFlagsOn & data; | ||
1851 | } | ||
1852 | public static ulong CastFlags(ulong allFlagsOn) | ||
1853 | { | ||
1854 | return 0; | ||
1855 | } | ||
1856 | |||
1857 | public static Vector3f CastNormal(float x, float y) | ||
1858 | { | ||
1859 | float neg = (x > 1.5f || y > 1.5f) ? -1.0f : 1.0f; | ||
1860 | if (x > 1.5) | ||
1861 | x -= 3; | ||
1862 | if (y > 1.5) | ||
1863 | y -= 3; | ||
1864 | return new Vector3f(x, y, neg - neg * (float)Math.Sqrt(x * x + y * y)); | ||
1865 | } | ||
1866 | public static Vector3f CastNormal() | ||
1867 | { | ||
1868 | return new Vector3f(0, 1, 0); | ||
1869 | } | ||
1870 | |||
1871 | |||
1872 | public static Vector2f CastVector2f(float x, float y) | ||
1873 | { | ||
1874 | return new Vector2f(x, y); | ||
1875 | } | ||
1876 | public static Vector2f CastVector2f() | ||
1877 | { | ||
1878 | return new Vector2f(0, 0); | ||
1879 | } | ||
1880 | |||
1881 | public static Vector3f CastVector3f(float x, float y, float z) | ||
1882 | { | ||
1883 | return new Vector3f(x, y, z); | ||
1884 | } | ||
1885 | public static Vector3f CastVector3f() | ||
1886 | { | ||
1887 | return new Vector3f(0, 0, 0); | ||
1888 | } | ||
1889 | |||
1890 | public static Vector4f CastVector4f(float x, float y, float z, float w) | ||
1891 | { | ||
1892 | return new Vector4f(x, y, z, w); | ||
1893 | } | ||
1894 | public static Vector4f CastVector4f() | ||
1895 | { | ||
1896 | return new Vector4f(0, 0, 0, 0); | ||
1897 | } | ||
1898 | public static Vector2d CastVector2d(double x, double y) | ||
1899 | { | ||
1900 | return new Vector2d(x, y); | ||
1901 | } | ||
1902 | public static Vector2d CastVector2d() | ||
1903 | { | ||
1904 | return new Vector2d(0, 0); | ||
1905 | } | ||
1906 | |||
1907 | public static Vector3d CastVector3d(double x, double y, double z) | ||
1908 | { | ||
1909 | return new Vector3d(x, y, z); | ||
1910 | } | ||
1911 | public static Vector3d CastVector3d() | ||
1912 | { | ||
1913 | return new Vector3d(0, 0, 0); | ||
1914 | } | ||
1915 | |||
1916 | public static Vector4d CastVector4d(double x, double y, double z, double w) | ||
1917 | { | ||
1918 | return new Vector4d(x, y, z, w); | ||
1919 | } | ||
1920 | public static Vector4d CastVector4d() | ||
1921 | { | ||
1922 | return new Vector4d(0, 0, 0, 0); | ||
1923 | } | ||
1924 | |||
1925 | public static BoundingSphere3f CastBoundingsphere3f(float x, float y, float z, float r) | ||
1926 | { | ||
1927 | return new BoundingSphere3f(new Vector3f(x, y, z), r); | ||
1928 | } | ||
1929 | public static BoundingSphere3d CastBoundingsphere3d(double x, double y, double z, double r) | ||
1930 | { | ||
1931 | return new BoundingSphere3d(new Vector3d(x, y, z), (float)r); | ||
1932 | } | ||
1933 | |||
1934 | public static BoundingSphere3f CastBoundingsphere3f() | ||
1935 | { | ||
1936 | return new BoundingSphere3f(new Vector3f(0, 0, 0), 0); | ||
1937 | } | ||
1938 | public static BoundingSphere3d CastBoundingsphere3d() | ||
1939 | { | ||
1940 | return new BoundingSphere3d(new Vector3d(0, 0, 0), (float)0); | ||
1941 | } | ||
1942 | |||
1943 | |||
1944 | public static BoundingBox3f3f CastBoundingbox3f3f(float x, float y, float z, float dx, float dy, float dz) | ||
1945 | { | ||
1946 | return new BoundingBox3f3f(x, y, z, dx, dy, dz); | ||
1947 | } | ||
1948 | public static BoundingBox3d3f CastBoundingbox3d3f(double x, double y, double z, double dx, double dy, double dz) | ||
1949 | { | ||
1950 | return new BoundingBox3d3f(x, y, z, (float)dx, (float)dy, (float)dz); | ||
1951 | } | ||
1952 | |||
1953 | public static BoundingBox3f3f CastBoundingbox3f3f() | ||
1954 | { | ||
1955 | return new BoundingBox3f3f(new Vector3f(0, 0, 0), new Vector3f(0, 0, 0)); | ||
1956 | } | ||
1957 | public static BoundingBox3d3f CastBoundingbox3d3f() | ||
1958 | { | ||
1959 | return new BoundingBox3d3f(0, 0, 0, 0, 0, 0); | ||
1960 | } | ||
1961 | |||
1962 | |||
1963 | |||
1964 | public static Quaternion CastQuaternion(float x, float y, float z) | ||
1965 | { | ||
1966 | float neg = (x > 1.5 || y > 1.5 || z > 1.5) ? -1.0f : 1.0f; | ||
1967 | if (x > 1.5) | ||
1968 | x -= 3.0f; | ||
1969 | if (y > 1.5) | ||
1970 | y -= 3.0f; | ||
1971 | if (z > 1.5) | ||
1972 | z -= 3.0f; | ||
1973 | return new Quaternion(neg - neg * (float)Math.Sqrt(x * x + y * y + z * z), x, y, z); | ||
1974 | } | ||
1975 | public static Quaternion CastQuaternion() | ||
1976 | { | ||
1977 | return new Quaternion(1, 0, 0, 0); | ||
1978 | } | ||
1979 | |||
1980 | public static UUID CastUuid(Google.ProtocolBuffers.ByteString input) | ||
1981 | { | ||
1982 | return new UUID(input); | ||
1983 | } | ||
1984 | public static SHA256 CastSha256(Google.ProtocolBuffers.ByteString input) | ||
1985 | { | ||
1986 | return new SHA256(input); | ||
1987 | } | ||
1988 | public static SHA256 CastSha256() | ||
1989 | { | ||
1990 | return SHA256.Empty; | ||
1991 | } | ||
1992 | public static UUID CastUuid() | ||
1993 | { | ||
1994 | return UUID.Empty; | ||
1995 | } | ||
1996 | |||
1997 | public static float CastAngle(float d) | ||
1998 | { | ||
1999 | return d; | ||
2000 | } | ||
2001 | public static float CastAngle() | ||
2002 | { | ||
2003 | return 0; | ||
2004 | } | ||
2005 | |||
2006 | public static Time CastTime(ulong t) | ||
2007 | { | ||
2008 | return new Time(t); | ||
2009 | } | ||
2010 | public static Time CastTime() | ||
2011 | { | ||
2012 | return new Time(0); | ||
2013 | } | ||
2014 | public static Duration CastDuration(long t) | ||
2015 | { | ||
2016 | return new Duration(t); | ||
2017 | } | ||
2018 | public static Duration CastDuration() | ||
2019 | { | ||
2020 | return new Duration(0); | ||
2021 | } | ||
2022 | |||
2023 | public static T Construct<T>(T retval) | ||
2024 | { | ||
2025 | return retval; | ||
2026 | } | ||
2027 | public static long Construct(Duration d) | ||
2028 | { | ||
2029 | return d.toMicro(); | ||
2030 | } | ||
2031 | public static ulong Construct(Time t) | ||
2032 | { | ||
2033 | return t.toMicro(); | ||
2034 | } | ||
2035 | public static Google.ProtocolBuffers.ByteString Construct(UUID u) | ||
2036 | { | ||
2037 | byte[] data = u.GetUUID(); | ||
2038 | Google.ProtocolBuffers.ByteString retval = Google.ProtocolBuffers.ByteString.CopyFrom(data, 0, 16); | ||
2039 | return retval; | ||
2040 | } | ||
2041 | public static Google.ProtocolBuffers.ByteString Construct(SHA256 u) | ||
2042 | { | ||
2043 | byte[] data = u.GetBinaryData(); | ||
2044 | Google.ProtocolBuffers.ByteString retval = Google.ProtocolBuffers.ByteString.CopyFrom(data, 0, 16); | ||
2045 | return retval; | ||
2046 | } | ||
2047 | public static float[] ConstructNormal(Vector3f d) | ||
2048 | { | ||
2049 | return new float[] { d.x + (d.z < 0 ? 3.0f : 0.0f), d.y }; | ||
2050 | } | ||
2051 | public static float[] ConstructQuaternion(Quaternion d) | ||
2052 | { | ||
2053 | return new float[] { d.x + (d.w < 0 ? 3.0f : 0.0f), d.y, d.z }; | ||
2054 | } | ||
2055 | |||
2056 | public static float[] ConstructVector2f(Vector2f d) | ||
2057 | { | ||
2058 | return new float[] { d.x, d.y }; | ||
2059 | } | ||
2060 | public static double[] ConstructVector2d(Vector2d d) | ||
2061 | { | ||
2062 | return new double[] { d.x, d.y }; | ||
2063 | } | ||
2064 | |||
2065 | public static float[] ConstructVector3f(Vector3f d) | ||
2066 | { | ||
2067 | return new float[] { d.x, d.y, d.z }; | ||
2068 | } | ||
2069 | public static double[] ConstructVector3d(Vector3d d) | ||
2070 | { | ||
2071 | return new double[] { d.x, d.y, d.z }; | ||
2072 | } | ||
2073 | public static float[] ConstructVector4f(Vector4f d) | ||
2074 | { | ||
2075 | return new float[] { d.x, d.y, d.z, d.w }; | ||
2076 | } | ||
2077 | public static double[] ConstructVector4d(Vector4d d) | ||
2078 | { | ||
2079 | return new double[] { d.x, d.y, d.z, d.w }; | ||
2080 | } | ||
2081 | |||
2082 | |||
2083 | public static float[] ConstructBoundingsphere3f(BoundingSphere3f d) | ||
2084 | { | ||
2085 | return new float[] { d.Center.x, d.Center.y, d.Center.z, d.Radius }; | ||
2086 | } | ||
2087 | public static double[] ConstructBoundingsphere3d(BoundingSphere3d d) | ||
2088 | { | ||
2089 | return new double[] { d.Center.x, d.Center.y, d.Center.z, d.Radius }; | ||
2090 | } | ||
2091 | |||
2092 | public static float[] ConstructBoundingbox3f3f(BoundingBox3f3f d) | ||
2093 | { | ||
2094 | return new float[] { d.Min.x, d.Min.y, d.Min.z, d.Diag.x, d.Diag.y, d.Diag.z }; | ||
2095 | } | ||
2096 | public static double[] ConstructBoundingbox3d3f(BoundingBox3d3f d) | ||
2097 | { | ||
2098 | return new double[] { d.Min.x, d.Min.y, d.Min.z, d.Diag.x, d.Diag.y, d.Diag.z }; | ||
2099 | } | ||
2100 | |||
2101 | |||
2102 | } | ||
2103 | |||
2104 | } | ||