]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d/src/org/simantics/g3d/scenegraph/G3DparentNode.java
8e5cc81b4f2cf9d455ee36d679f96da91a3c41d9
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / g3d / scenegraph / G3DparentNode.java
1 package org.simantics.g3d.scenegraph;\r
2 \r
3 import javax.vecmath.Quat4d;\r
4 import javax.vecmath.Vector3d;\r
5 \r
6 import org.simantics.g3d.math.MathTools;\r
7 import org.simantics.g3d.ontology.G3D;\r
8 import org.simantics.g3d.property.annotations.GetPropertyValue;\r
9 import org.simantics.g3d.property.annotations.SetPropertyValue;\r
10 import org.simantics.g3d.scenegraph.base.ParentNode;\r
11 import org.simantics.g3d.tools.NodeTools;\r
12 import org.simantics.objmap.graph.annotations.RelatedGetValue;\r
13 import org.simantics.objmap.graph.annotations.RelatedSetValue;\r
14 \r
15 \r
16 public class G3DparentNode<T extends IG3DNode> extends ParentNode<T> implements IG3DNode{\r
17         private Vector3d position = new Vector3d();\r
18         private Quat4d orientation = MathTools.getIdentityQuat();\r
19         \r
20         \r
21         @Override\r
22         @GetPropertyValue(value = G3D.URIs.hasOrientation, tabId = "Transform", name = "Orientation")\r
23         public Quat4d getOrientation() {\r
24                 return orientation;\r
25         }\r
26         \r
27         @RelatedGetValue(G3D.URIs.hasOrientation)\r
28         public double[] getOrientationArr() {\r
29                 double arr[] = new double[4];\r
30                 orientation.get(arr);\r
31                 return arr;\r
32                 \r
33         }\r
34         \r
35         @Override\r
36         @GetPropertyValue(value = G3D.URIs.hasPosition, tabId = "Transform", name = "Position")\r
37         public Vector3d getPosition() {\r
38                 return position;\r
39         }\r
40         \r
41         @RelatedGetValue(G3D.URIs.hasPosition)\r
42         public double[] getPositionArr() {\r
43                 double arr[] = new double[3];\r
44                 position.get(arr);\r
45                 return arr;\r
46         }\r
47         \r
48         @Override\r
49         @SetPropertyValue(G3D.URIs.hasOrientation)\r
50         public void setOrientation(Quat4d orientation) {\r
51                 assert(orientation != null);\r
52                 this.orientation = orientation;\r
53         }\r
54         \r
55         @Override\r
56         @SetPropertyValue(G3D.URIs.hasPosition)\r
57         public void setPosition(Vector3d position) {\r
58                 assert(position != null);\r
59                 this.position = position;\r
60         }\r
61         \r
62         @RelatedSetValue(G3D.URIs.hasOrientation)\r
63         public void setOrientation(double[] arr) {\r
64                 if (arr == null)\r
65                         return;\r
66                 setOrientation(new Quat4d(arr));\r
67         }\r
68         \r
69         @RelatedSetValue(G3D.URIs.hasPosition)\r
70         public void setPosition(double[] arr) {\r
71                 if (arr == null)\r
72                         return;\r
73                 setPosition(new Vector3d(arr));\r
74         }\r
75         \r
76         @Override\r
77         @GetPropertyValue(value = G3D.URIs.hasWorldPosition, tabId = "Transform", name = "World Position")\r
78         public Vector3d getWorldPosition() {\r
79                 IG3DNode parent = (IG3DNode)getParent();\r
80                 if (parent == null)\r
81                         return position;\r
82                 return NodeTools.getWorldPosition(parent, new Vector3d(position));\r
83         }\r
84         \r
85         \r
86         public Vector3d getWorldPosition(Vector3d localPosition) {\r
87                 return NodeTools.getWorldPosition(this,localPosition);\r
88         }\r
89 \r
90         \r
91         @Override\r
92         @GetPropertyValue(value = G3D.URIs.hasWorldOrientation, tabId = "Transform", name = "World Orientation")\r
93         public Quat4d getWorldOrientation() {\r
94                 return getWorldOrientation(new Quat4d(orientation));\r
95         }\r
96         \r
97         public Quat4d getWorldOrientation(Quat4d localOrientation) {\r
98                 IG3DNode parent = (IG3DNode)getParent();\r
99                 if (parent == null)\r
100                         return localOrientation;\r
101                 return NodeTools.getWorldOrientation(parent, localOrientation);\r
102         }\r
103         \r
104         @Override\r
105         public Vector3d getLocalPosition(Vector3d worldPosition) {\r
106                 IG3DNode parent = (IG3DNode)getParent();\r
107                 if (parent == null)\r
108                         return worldPosition;\r
109                 return NodeTools.getLocalPosition(parent,new Vector3d(worldPosition));\r
110         }\r
111         \r
112         @Override\r
113         public Quat4d getLocalOrientation(Quat4d worldOrientation) {\r
114                 IG3DNode parent = (IG3DNode)getParent();\r
115                 if (parent == null)\r
116                         return worldOrientation;\r
117                 return NodeTools.getLocalOrientation(parent, new Quat4d(worldOrientation));\r
118         }\r
119         \r
120         @Override\r
121         @SetPropertyValue(G3D.URIs.hasWorldPosition)\r
122         public void setWorldPosition(Vector3d position) {\r
123                 Vector3d localPos = getLocalPosition(position);\r
124                 setPosition(localPos);\r
125         }\r
126         \r
127         @Override\r
128         @SetPropertyValue(G3D.URIs.hasWorldOrientation)\r
129         public void setWorldOrientation(Quat4d orientation) {\r
130                 Quat4d localOr = getLocalOrientation(orientation);\r
131                 setOrientation(localOr);\r
132         }\r
133         \r
134         @Override\r
135         public Object getAdapter(Class adapter) {\r
136                 return null;\r
137         }\r
138 }\r