]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d/scl/G3D/Math/Quat4d.scl
Refactoring of SCL interfaces for g3d.
[simantics/3d.git] / org.simantics.g3d / scl / G3D / Math / Quat4d.scl
1 import "JavaBuiltin" as Java
2   
3 importJava "javax.vecmath.Quat4d" where
4   // Immutable binding
5   data Quat4d
6   
7   @JavaName "<init>"
8   createQuat4d :: Double -> Double -> Double -> Double -> Quat4d
9   @JavaName "<init>"
10   copyQuat4d :: Quat4d -> Quat4d
11   @JavaName "<init>"
12   defaultQuat4d :: Quat4d
13   
14   getX :: Quat4d -> Double
15   getY :: Quat4d -> Double
16   getZ :: Quat4d -> Double
17   getW :: Quat4d -> Double
18   
19   // Mutable binding
20   data MQuat4d
21   
22   @JavaName "<init>"
23   createMQuat4d :: Double -> Double -> Double -> Double -> <Proc> MQuat4d
24   @JavaName "<init>"
25   copyMQuat4d :: Quat4d -> <Proc> MQuat4d
26   @JavaName "<init>"
27   defaultMQuat4d :: <Proc> MQuat4d
28   
29   @JavaName getX
30   getXM :: MQuat4d -> <Proc> Double
31   @JavaName getY
32   getYM :: MQuat4d -> <Proc> Double
33   @JavaName getZ
34   getZM :: MQuat4d -> <Proc> Double
35   @JavaName getW
36   getWM:: MQuat4d -> <Proc> Double
37   setX :: MQuat4d -> Double -> <Proc> ()
38   setY :: MQuat4d -> Double -> <Proc> ()
39   setZ :: MQuat4d -> Double -> <Proc> ()
40   setW :: MQuat4d -> Double -> <Proc> ()
41   
42   @JavaName mul
43   mulM :: MQuat4d -> Quat4d -> <Proc> ()
44   @JavaName mul
45   mulM2 :: MQuat4d -> Quat4d -> Quat4d -> <Proc> ()
46   
47   @JavaName mulInverse
48   mulInverseM :: MQuat4d -> Quat4d -> <Proc> ()
49   @JavaName mulInverse
50   mulInverseM2 :: MQuat4d -> Quat4d -> Quat4d -> <Proc> ()
51   
52   @JavaName inverse
53   inverseM :: MQuat4d -> <Proc> ()
54   @JavaName inverse
55   inverseM2 :: MQuat4d -> Quat4d -> <Proc> ()
56   
57   @JavaName normalize
58   normalizeM :: MQuat4d -> <Proc> ()
59   @JavaName normalize
60   normalizeM2 :: MQuat4d -> Quat4d -> <Proc> ()
61
62 freeze :: MQuat4d -> <Proc> Quat4d
63 freeze = Java.unsafeCoerce
64
65 // Mapping of mutable operations to immutable ones
66
67 @private
68 applyMOp :: (MQuat4d -> <Proc> ()) -> Quat4d -> Quat4d
69 applyMOp op x = runProc let
70     z = copyMQuat4d x
71     op z
72     in freeze z
73
74 mul :: Quat4d -> Quat4d -> Quat4d
75 mul x y = applyMOp (flip mulM y) x
76
77 mulInverse :: Quat4d -> Quat4d -> Quat4d
78 mulInverse x y = applyMOp (flip mulInverseM y) x
79
80 inverse :: Quat4d -> Quat4d
81 inverse = applyMOp inverseM
82
83 normalize :: Quat4d -> Quat4d
84 normalize = applyMOp normalizeM