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