]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d.csg/src/org/simantics/g3d/csg/scenegraph2/CSGrootNode.java
Alpha-version of jME-bindings for g3d.
[simantics/3d.git] / org.simantics.g3d.csg / src / org / simantics / g3d / csg / scenegraph2 / CSGrootNode.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.csg.scenegraph2;\r
13 \r
14 import java.util.Collection;\r
15 import java.util.HashSet;\r
16 import java.util.Set;\r
17 import java.util.Stack;\r
18 \r
19 import javax.vecmath.Quat4d;\r
20 import javax.vecmath.Vector3d;\r
21 \r
22 import org.simantics.g3d.csg.editor.CSGNodeMap;\r
23 import org.simantics.g3d.csg.ontology.CSG;\r
24 import org.simantics.g3d.math.MathTools;\r
25 import org.simantics.g3d.scenegraph.IG3DNode;\r
26 import org.simantics.g3d.scenegraph.NodeMap;\r
27 import org.simantics.g3d.scenegraph.NodeMapProvider;\r
28 import org.simantics.g3d.scenegraph.base.NodeException;\r
29 import org.simantics.g3d.scenegraph.base.ParentNode;\r
30 import org.simantics.objmap.graph.annotations.GraphType;\r
31 import org.simantics.objmap.graph.annotations.RelatedElementsAdd;\r
32 import org.simantics.objmap.graph.annotations.RelatedElementsGet;\r
33 import org.simantics.objmap.graph.annotations.RelatedElementsRem;\r
34 \r
35 import vtk.vtkProp;\r
36 \r
37 \r
38 @GraphType(CSG.URIs.Model)\r
39 public class CSGrootNode extends ParentNode<ICSGnode> implements IG3DNode, NodeMapProvider<vtkProp> {\r
40         \r
41         \r
42         private CSGNodeMap nodeMap;\r
43         \r
44         public void setNodeMap(CSGNodeMap nodeMap) {\r
45                 this.nodeMap = nodeMap;\r
46         }\r
47         \r
48         @Override\r
49         public NodeMap<vtkProp> getNodeMap() {\r
50                 return nodeMap;\r
51         }\r
52         \r
53         @Override\r
54         public ParentNode<?> getParent() {\r
55                 return null;\r
56         }\r
57         \r
58         @Override\r
59         public ParentNode<?> getRootNode() {\r
60                 return this;\r
61         }\r
62         \r
63         @RelatedElementsAdd(CSG.URIs.hasChildShape)\r
64         public void addChild(ICSGnode node) {\r
65                 addNode("child",node);\r
66         }\r
67         \r
68         @RelatedElementsGet(CSG.URIs.hasChildShape)\r
69         public Collection<ICSGnode> getChild() {\r
70                 return getNodes("child");\r
71         }\r
72         \r
73         @RelatedElementsRem(CSG.URIs.hasChildShape)\r
74         public void remChild(ICSGnode node) {\r
75                 removeNode("child", node);\r
76         }\r
77         \r
78         public javax.vecmath.Quat4d getOrientation() {\r
79                 return MathTools.getIdentityQuat();\r
80         };\r
81         \r
82         @Override\r
83         public Vector3d getPosition() {\r
84                 return new Vector3d();\r
85         }\r
86         \r
87         @Override\r
88         public Quat4d getWorldOrientation() {\r
89                 return MathTools.getIdentityQuat();\r
90         }\r
91         \r
92         @Override\r
93         public Vector3d getWorldPosition() {\r
94                 return new Vector3d();\r
95         }\r
96         \r
97         @Override\r
98         public Quat4d getWorldOrientation(Quat4d localOrientation) {\r
99                 return localOrientation;\r
100         }\r
101         \r
102         @Override\r
103         public Vector3d getWorldPosition(Vector3d localPosition) {\r
104                 return localPosition;\r
105         }\r
106         \r
107         @Override\r
108         public Quat4d getLocalOrientation(Quat4d worldOrientation) {\r
109                 return worldOrientation;\r
110         }\r
111         \r
112         @Override\r
113         public Vector3d getLocalPosition(Vector3d worldPosition) {\r
114                 return worldPosition;\r
115         }\r
116         \r
117         @Override\r
118         public void setPosition(Vector3d position) {\r
119                 throw new NodeException("Cannot set root node position");\r
120         }\r
121         \r
122         @Override\r
123         public void setOrientation(Quat4d orientation) {\r
124                 throw new NodeException("Cannot set root node orientation");\r
125         }\r
126         \r
127         @Override\r
128         public void setWorldOrientation(Quat4d orientation) {\r
129                 throw new NodeException("Cannot set root node orientation");\r
130         }\r
131         \r
132         @Override\r
133         public void setWorldPosition(Vector3d position) {\r
134                 throw new NodeException("Cannot set root node orientation");\r
135         }\r
136         \r
137         public String getUniqueName(String prefix) {\r
138                 Set<String> names = new HashSet<String>();\r
139                 Stack<ICSGnode> nodes = new Stack<ICSGnode>();\r
140                 nodes.addAll(getChild());\r
141                 while (!nodes.isEmpty()) {\r
142                         ICSGnode n = nodes.pop();\r
143                         names.add(((ICSGnode)n).getName());\r
144                         if (n instanceof CSGparentNode) {\r
145                                 nodes.addAll(((CSGparentNode)n).getChild());\r
146                                 nodes.addAll(((CSGparentNode)n).getPrimaryChild());\r
147                                 nodes.addAll(((CSGparentNode)n).getSecondaryChild());\r
148                         }\r
149                 }\r
150                 int i = 1;\r
151                 while (true) {\r
152                         String genName = prefix + "_" + i;\r
153                         if (!names.contains(genName))\r
154                                 return genName;\r
155                         i++;\r
156                 }\r
157         }\r
158         \r
159 \r
160         @Override\r
161         public Object getAdapter(Class adapter) {\r
162                 if (NodeMap.class == adapter)\r
163                         return nodeMap;\r
164                 return null;\r
165         }\r
166         \r
167 \r
168 }\r