X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Fscenegraph%2FP3DRootNode.java;h=93f4ecf27d4be74d4e67ade02c20a983a884eda1;hb=refs%2Fchanges%2F88%2F4288%2F1;hp=5a968604f29ba6c8659e61198813b291ea85c0ea;hpb=a460e609147d064dd3da464bcf1626845e0f93b4;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/P3DRootNode.java b/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/P3DRootNode.java index 5a968604..93f4ecf2 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/P3DRootNode.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/P3DRootNode.java @@ -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,45 +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 implements IG3DNode, NodeMapProvider { +public class P3DRootNode extends ParentNode implements IG3DNode, NodeMapProvider { - - @RelatedElementsAdd(Plant3D.URIs.childen) - public void addChild(IP3DVisualNode node) { - addNode(Plant3D.URIs.childen,node); + // 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.children,node); } - @RelatedElementsGet(Plant3D.URIs.childen) + @RelatedElementsGet(Plant3D.URIs.children) public Collection getChild() { - return getNodes(Plant3D.URIs.childen); + return getNodes(Plant3D.URIs.children); } - @RelatedElementsRem(Plant3D.URIs.childen) - public void remChild(IP3DNode node) { - removeNode(Plant3D.URIs.childen, node); + @RelatedElementsRem(Plant3D.URIs.children) + public void remChild(INode node) { + //public void remChild(IP3DNode node) { + removeNode(Plant3D.URIs.children, node); } - private P3DNodeMap nodeMap; + private NodeMap nodeMap; + private IMapping mapping; - public void setNodeMap(P3DNodeMap nodeMap) { + public void setNodeMap(NodeMap nodeMap) { this.nodeMap = nodeMap; + this.mapping = nodeMap.getMapping(); + } + + public void setMapping(IMapping mapping) { + this.mapping = mapping; } @Override - public NodeMap getNodeMap() { + public NodeMap 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; @@ -122,6 +141,10 @@ public class P3DRootNode extends ParentNode 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 names = new HashSet(); for (INode node : getChild()) { @@ -129,6 +152,8 @@ public class P3DRootNode extends ParentNode 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) { @@ -140,11 +165,10 @@ public class P3DRootNode extends ParentNode implements IG3DNode, NodeMapP } - @SuppressWarnings("rawtypes") @Override - public Object getAdapter(Class adapter) { - if (NodeMap.class == adapter) - return nodeMap; + public T getAdapter(Class adapter) { + if (adapter.isAssignableFrom(NodeMap.class)) + return adapter.cast(nodeMap); return null; } @@ -167,4 +191,8 @@ public class P3DRootNode extends ParentNode implements IG3DNode, NodeMapP public TurnComponent createTurn() { return new TurnComponent(); } + + public Vector3d getUpVector() { + return upVector; + } }