]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d/scl/G3D/Math/Vector3d.scl
Improvements to java.vecmath bindings to SCL.
[simantics/3d.git] / org.simantics.g3d / scl / G3D / Math / Vector3d.scl
1 include "./Tuple3d"
2
3 import "JavaBuiltin" as Java
4
5 importJava "javax.vecmath.Vector3d" where
6   // Immutable mapping
7   data Vector3d
8   
9   dot :: Vector3d -> Vector3d -> Double
10   
11   length :: Vector3d -> Double
12   lengthSquared :: Vector3d -> Double
13   
14   angle :: Vector3d -> Vector3d -> Double
15   
16   @JavaName "<init>"
17   createVector3d :: Double -> Double -> Double -> Vector3d
18   @JavaName "<init>"
19   copyVector3d' :: Tuple3d -> Vector3d
20   @JavaName "<init>"
21   defaultVector3d :: Vector3d
22
23   // Mutable mapping
24   data MVector3d
25   
26   @JavaName cross
27   crossM :: MVector3d -> Vector3d -> Vector3d -> <Proc> ()
28
29   @JavaName normalize
30   normalizeM :: MVector3d -> <Proc> ()
31   
32   @JavaName normalize
33   normalizeM2 :: MVector3d -> Vector3d -> <Proc> ()
34   
35   @JavaName dot
36   dotM :: MVector3d -> MVector3d -> <Proc> Double
37   
38   @JavaName length
39   lengthM :: MVector3d -> <Proc> Double
40   @JavaName lengthSquared
41   lengthSquaredM :: MVector3d -> <Proc> Double
42
43   @JavaName angle  
44   angleM :: MVector3d -> MVector3d -> <Proc> Double
45   
46   @JavaName "<init>"
47   createMVector3d :: Double -> Double -> Double -> <Proc> MVector3d
48   @JavaName "<init>"
49   copyMVector3d' :: Tuple3d -> <Proc> MVector3d
50   @JavaName "<init>"
51   defaultMVector3d :: <Proc> MVector3d
52
53 @private
54 applyMOp :: (MVector3d -> <Proc> ()) -> (<Proc> MVector3d) -> Vector3d
55 applyMOp op gen = runProc let
56     z = gen
57     op z
58     in freeze z
59
60 normalize :: Vector3d -> Vector3d
61 normalize v = applyMOp normalizeM (copyMVector3d (asTuple v))
62
63 cross :: Vector3d -> Vector3d -> Vector3d
64 cross x y = applyMOp (\z -> crossM z x y) defaultMVector3d
65
66 freeze :: MVector3d -> <Proc> Vector3d
67 freeze = Java.unsafeCoerce
68
69 instance Tuple3dClass Vector3d
70 instance MTuple3dClass MVector3d
71
72 copyVector3d :: Tuple3dClass a => a -> Vector3d
73 copyVector3d = copyVector3d' . asTuple
74
75 copyMVector3d :: Tuple3dClass a => a -> <Proc> MVector3d
76 copyMVector3d = copyMVector3d' . asTuple