]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d/src/org/simantics/g3d/scenegraph/G3DNode.java
Remove dependencies on log4j
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / g3d / scenegraph / G3DNode.java
1 /*******************************************************************************\r
2  * Copyright (c) 2012, 2013 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.g3d.scenegraph;\r
13 \r
14 import java.util.Objects;\r
15 \r
16 import javax.vecmath.Quat4d;\r
17 import javax.vecmath.Vector3d;\r
18 \r
19 import org.simantics.g3d.ontology.G3D;\r
20 import org.simantics.g3d.property.annotations.GetPropertyValue;\r
21 import org.simantics.g3d.property.annotations.PropertyContributor;\r
22 import org.simantics.g3d.property.annotations.SetPropertyValue;\r
23 import org.simantics.g3d.scenegraph.base.Node;\r
24 import org.simantics.g3d.tools.NodeTools;\r
25 import org.simantics.objmap.graph.annotations.RelatedGetValue;\r
26 import org.simantics.objmap.graph.annotations.RelatedSetValue;\r
27 \r
28 \r
29 @PropertyContributor\r
30 public class G3DNode extends Node implements IG3DNode {\r
31         \r
32         private Vector3d position = new Vector3d();\r
33         private Quat4d orientation = new Quat4d(0,0,0,1);\r
34         \r
35         @Override\r
36         @GetPropertyValue(value = G3D.URIs.hasOrientation, tabId = "Transform", name = "Orientation")\r
37         public Quat4d getOrientation() {\r
38                 return orientation;\r
39         }\r
40         \r
41         @RelatedGetValue(G3D.URIs.hasOrientation)\r
42         public double[] getOrientationArr() {\r
43                 double arr[] = new double[4];\r
44                 orientation.get(arr);\r
45                 return arr;\r
46                 \r
47         }\r
48         \r
49         @Override\r
50         @GetPropertyValue(value = G3D.URIs.hasPosition, tabId = "Transform", name = "Position")\r
51         public Vector3d getPosition() {\r
52                 return position;\r
53         }\r
54         \r
55         @RelatedGetValue(G3D.URIs.hasPosition)\r
56         public double[] getPositionArr() {\r
57                 double arr[] = new double[3];\r
58                 position.get(arr);\r
59                 return arr;\r
60         }\r
61         \r
62         @Override\r
63         @SetPropertyValue(G3D.URIs.hasOrientation)\r
64         public void setOrientation(Quat4d orientation) {\r
65                 assert(orientation != null);\r
66                 if (Objects.equals(this.orientation, orientation))\r
67                         return;\r
68 \r
69                 this.orientation = orientation;\r
70                         \r
71                 firePropertyChanged(G3D.URIs.hasOrientation);\r
72         }\r
73         \r
74         @RelatedSetValue(G3D.URIs.hasOrientation)\r
75         public void setOrientation(double[] arr) {\r
76                 if (arr == null)\r
77                         return;\r
78                 setOrientation(new Quat4d(arr));\r
79         }\r
80         \r
81         @Override\r
82         @SetPropertyValue(G3D.URIs.hasPosition)\r
83         public void setPosition(Vector3d position) {\r
84                 assert(position != null);\r
85                 if (Objects.equals(this.position, position))\r
86                         return;\r
87                 \r
88                 this.position = position;\r
89                 \r
90                 firePropertyChanged(G3D.URIs.hasPosition);\r
91         }\r
92         \r
93         @RelatedSetValue(G3D.URIs.hasPosition)\r
94         public void setPosition(double[] arr) {\r
95                 if (arr == null)\r
96                         return;\r
97                 setPosition(new Vector3d(arr));\r
98         }\r
99         \r
100         public void _setPosition(Vector3d position) {\r
101                 assert(position != null);\r
102                 this.position = position;\r
103         }\r
104         \r
105         @Override\r
106         @GetPropertyValue(value = G3D.URIs.hasWorldPosition, tabId = "Transform", name = "World Position")\r
107         public Vector3d getWorldPosition() {\r
108                 IG3DNode parent = (IG3DNode)getParent();\r
109                 if (parent == null)\r
110                         return position;\r
111                 return NodeTools.getWorldPosition(parent, new Vector3d(position));\r
112         }\r
113         \r
114         \r
115         public Vector3d getWorldPosition(Vector3d localPosition) {\r
116                 return NodeTools.getWorldPosition(this,localPosition);\r
117         }\r
118 \r
119         \r
120         @Override\r
121         @GetPropertyValue(value = G3D.URIs.hasWorldOrientation, tabId = "Transform", name = "World Orientation")\r
122         public Quat4d getWorldOrientation() {\r
123                 return getWorldOrientation(new Quat4d(orientation));\r
124         }\r
125         \r
126         public Quat4d getWorldOrientation(Quat4d localOrientation) {\r
127                 IG3DNode parent = (IG3DNode)getParent();\r
128                 if (parent == null)\r
129                         return localOrientation;\r
130                 return NodeTools.getWorldOrientation(parent, localOrientation);\r
131         }\r
132         \r
133         @Override\r
134         public Vector3d getLocalPosition(Vector3d worldPosition) {\r
135                 IG3DNode parent = (IG3DNode)getParent();\r
136                 if (parent == null)\r
137                         return worldPosition;\r
138                 return NodeTools.getLocalPosition(parent,new Vector3d(worldPosition));\r
139         }\r
140         \r
141         @Override\r
142         public Quat4d getLocalOrientation(Quat4d worldOrientation) {\r
143                 IG3DNode parent = (IG3DNode)getParent();\r
144                 if (parent == null)\r
145                         return worldOrientation;\r
146                 return NodeTools.getLocalOrientation(parent, new Quat4d(worldOrientation));\r
147         }\r
148         \r
149         @Override\r
150         @SetPropertyValue(G3D.URIs.hasWorldPosition)\r
151         public void setWorldPosition(Vector3d position) {\r
152                 Vector3d localPos = getLocalPosition(position);\r
153                 setPosition(localPos);\r
154         }\r
155         \r
156         @Override\r
157         @SetPropertyValue(G3D.URIs.hasWorldOrientation)\r
158         public void setWorldOrientation(Quat4d orientation) {\r
159                 Quat4d localOr = getLocalOrientation(orientation);\r
160                 setOrientation(localOr);\r
161         }\r
162         \r
163         @Override\r
164         public <C> C getAdapter(Class<C> adapter) {\r
165                 if (adapter.isInstance(this))\r
166                         return adapter.cast(this);\r
167                 return null;\r
168         }\r
169 \r
170 }\r