]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/P3DRootNode.java
Use unique names at the model scope instead of pipe run
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / scenegraph / P3DRootNode.java
index 1e9492a45297252e5cf63bdcb23e15f86989b7be..93f4ecf27d4be74d4e67ade02c20a983a884eda1 100644 (file)
@@ -7,6 +7,7 @@ import java.util.Set;
 import javax.vecmath.Quat4d;
 import javax.vecmath.Vector3d;
 
+import org.simantics.db.Resource;
 import org.simantics.g3d.math.MathTools;
 import org.simantics.g3d.scenegraph.IG3DNode;
 import org.simantics.g3d.scenegraph.NodeMap;
@@ -14,47 +15,63 @@ import org.simantics.g3d.scenegraph.NodeMapProvider;
 import org.simantics.g3d.scenegraph.base.INode;
 import org.simantics.g3d.scenegraph.base.NodeException;
 import org.simantics.g3d.scenegraph.base.ParentNode;
+import org.simantics.objmap.graph.IMapping;
 import org.simantics.objmap.graph.annotations.GraphType;
 import org.simantics.objmap.graph.annotations.RelatedElementsAdd;
 import org.simantics.objmap.graph.annotations.RelatedElementsGet;
 import org.simantics.objmap.graph.annotations.RelatedElementsRem;
-import org.simantics.plant3d.editor.P3DNodeMap;
 import org.simantics.plant3d.ontology.Plant3D;
 
 import vtk.vtkProp;
 
 @GraphType(Plant3D.URIs.Plant)
-public class P3DRootNode extends ParentNode<INode> implements IG3DNode, NodeMapProvider<vtkProp , INode> {
+public class P3DRootNode extends ParentNode<INode> implements IG3DNode, NodeMapProvider<Resource, vtkProp, INode> {
        
-       
-       @RelatedElementsAdd(Plant3D.URIs.childen)
+       // Vertical direction that determines the interpretation of rotation angle origin
+       protected Vector3d upVector = new Vector3d(0.0, 1.0, 0.0);
+
+       @RelatedElementsAdd(Plant3D.URIs.children)
        public void addChild(INode node) {
        //public void addChild(IP3DVisualNode node) {
-               addNode(Plant3D.URIs.childen,node);
+               addNode(Plant3D.URIs.children,node);
        }
        
-       @RelatedElementsGet(Plant3D.URIs.childen)
+       @RelatedElementsGet(Plant3D.URIs.children)
        public Collection<INode> getChild() {
-               return getNodes(Plant3D.URIs.childen);
+               return getNodes(Plant3D.URIs.children);
        }
        
-       @RelatedElementsRem(Plant3D.URIs.childen)
+       @RelatedElementsRem(Plant3D.URIs.children)
        public void remChild(INode node) {
        //public void remChild(IP3DNode node) {
-               removeNode(Plant3D.URIs.childen, node);
+               removeNode(Plant3D.URIs.children, node);
        }
        
-       private P3DNodeMap nodeMap;
+       private NodeMap<Resource, vtkProp, INode> nodeMap;
+       private IMapping<Resource, INode> mapping;
        
-       public void setNodeMap(P3DNodeMap nodeMap) {
+       public void setNodeMap(NodeMap<Resource, vtkProp, INode> nodeMap) {
                this.nodeMap = nodeMap;
+               this.mapping = nodeMap.getMapping();
+       }
+       
+       public void setMapping(IMapping<Resource, INode> mapping) {
+               this.mapping = mapping;
        }
        
        @Override
-       public NodeMap<vtkProp, INode> getNodeMap() {
+       public NodeMap<Resource, vtkProp, INode> getNodeMap() {
                return nodeMap;
        }
        
+       public Resource getNodeResource(INode node) {
+               return mapping.inverseGet(node);
+       }
+       
+       public INode getResourceNode(Resource r) {
+               return mapping.get(r);
+       }
+       
        @Override
        public ParentNode<?> getParent() {
                return null;
@@ -124,6 +141,10 @@ public class P3DRootNode extends ParentNode<INode> implements IG3DNode, NodeMapP
                throw new NodeException("Cannot set root node orientation");
        }
        
+       /**
+        * Get a unique name in the Plant3D model with a given prefix followed by
+        * an underscore and number.
+        */
        public String getUniqueName(String prefix) {
                Set<String> names = new HashSet<String>();
                for (INode node : getChild()) {
@@ -131,6 +152,8 @@ public class P3DRootNode extends ParentNode<INode> implements IG3DNode, NodeMapP
                                continue;
                        IP3DVisualNode n = (IP3DVisualNode)node;
                        names.add(n.getName());
+                       if (node instanceof P3DParentNode)
+                               ((P3DParentNode<?>) node).getComponentNames(names);
                }
                int i = 1;
                while (true) {
@@ -142,11 +165,10 @@ public class P3DRootNode extends ParentNode<INode> implements IG3DNode, NodeMapP
        }
 
        
-       @SuppressWarnings("rawtypes")
        @Override
-       public Object getAdapter(Class adapter) {
-               if (NodeMap.class == adapter)
-                       return nodeMap;
+       public <T> T getAdapter(Class<T> adapter) {
+               if (adapter.isAssignableFrom(NodeMap.class))
+                       return adapter.cast(nodeMap);
                return null;
        }
        
@@ -169,4 +191,8 @@ public class P3DRootNode extends ParentNode<INode> implements IG3DNode, NodeMapP
        public TurnComponent createTurn() {
                return new TurnComponent();
        }
+
+       public Vector3d getUpVector() {
+               return upVector;
+       }
 }