1 /*******************************************************************************
\r
2 * Copyright (c) 2012, 2013 Association for Decentralized Information Management in
\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
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.g3d.csg.scenegraph2;
\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
19 import javax.vecmath.Quat4d;
\r
20 import javax.vecmath.Vector3d;
\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
38 @GraphType(CSG.URIs.Model)
\r
39 public class CSGrootNode extends ParentNode<ICSGnode> implements IG3DNode, NodeMapProvider<vtkProp> {
\r
42 private CSGNodeMap nodeMap;
\r
44 public void setNodeMap(CSGNodeMap nodeMap) {
\r
45 this.nodeMap = nodeMap;
\r
49 public NodeMap<vtkProp> getNodeMap() {
\r
54 public ParentNode<?> getParent() {
\r
59 public ParentNode<?> getRootNode() {
\r
63 @RelatedElementsAdd(CSG.URIs.hasChildShape)
\r
64 public void addChild(ICSGnode node) {
\r
65 addNode("child",node);
\r
68 @RelatedElementsGet(CSG.URIs.hasChildShape)
\r
69 public Collection<ICSGnode> getChild() {
\r
70 return getNodes("child");
\r
73 @RelatedElementsRem(CSG.URIs.hasChildShape)
\r
74 public void remChild(ICSGnode node) {
\r
75 removeNode("child", node);
\r
78 public javax.vecmath.Quat4d getOrientation() {
\r
79 return MathTools.getIdentityQuat();
\r
83 public Vector3d getPosition() {
\r
84 return new Vector3d();
\r
88 public Quat4d getWorldOrientation() {
\r
89 return MathTools.getIdentityQuat();
\r
93 public Vector3d getWorldPosition() {
\r
94 return new Vector3d();
\r
98 public Quat4d getWorldOrientation(Quat4d localOrientation) {
\r
99 return localOrientation;
\r
103 public Vector3d getWorldPosition(Vector3d localPosition) {
\r
104 return localPosition;
\r
108 public Quat4d getLocalOrientation(Quat4d worldOrientation) {
\r
109 return worldOrientation;
\r
113 public Vector3d getLocalPosition(Vector3d worldPosition) {
\r
114 return worldPosition;
\r
118 public void setPosition(Vector3d position) {
\r
119 throw new NodeException("Cannot set root node position");
\r
123 public void setOrientation(Quat4d orientation) {
\r
124 throw new NodeException("Cannot set root node orientation");
\r
128 public void setWorldOrientation(Quat4d orientation) {
\r
129 throw new NodeException("Cannot set root node orientation");
\r
133 public void setWorldPosition(Vector3d position) {
\r
134 throw new NodeException("Cannot set root node orientation");
\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
152 String genName = prefix + "_" + i;
\r
153 if (!names.contains(genName))
\r
161 public Object getAdapter(Class adapter) {
\r
162 if (NodeMap.class == adapter)
\r