1 package org.simantics.plant3d.scl;
3 import java.util.HashSet;
6 import org.simantics.db.ReadGraph;
7 import org.simantics.db.Session;
8 import org.simantics.db.exception.DatabaseException;
9 import org.simantics.g3d.ontology.G3D;
10 import org.simantics.g3d.scenegraph.base.INode;
11 import org.simantics.g3d.scenegraph.base.ParentNode;
12 import org.simantics.g3d.scl.ScriptNodeMap;
13 import org.simantics.g3d.vtk.common.VtkView;
14 import org.simantics.objmap.graph.IMapping;
15 import org.simantics.plant3d.ontology.Plant3D;
16 import org.simantics.plant3d.scenegraph.IP3DNode;
17 import org.simantics.plant3d.scenegraph.IP3DVisualNode;
18 import org.simantics.plant3d.scenegraph.P3DParentNode;
19 import org.simantics.plant3d.scenegraph.P3DRootNode;
20 import org.simantics.plant3d.scenegraph.ParameterizedNode;
21 import org.simantics.plant3d.scenegraph.PipeRun;
22 import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint;
23 import org.simantics.plant3d.scenegraph.controlpoint.PipingRules;
27 public class P3DScriptNodeMap extends ScriptNodeMap<INode>{
29 private static final boolean DEBUG = false;
31 public P3DScriptNodeMap(Session session, IMapping mapping, P3DRootNode rootNode) {
32 super(session,mapping,rootNode);
33 //rootNode.setNodeMap(this);
37 protected void updateActor(INode n, Set<String> ids) {
38 if (DEBUG) System.out.println("P3DNodeMap update " + n);
39 if (!(n instanceof IP3DVisualNode)) {
40 if (n instanceof PipeControlPoint) {
41 n = ((PipeControlPoint)n).getPipelineComponent();
49 IP3DVisualNode node = (IP3DVisualNode)n;
52 System.out.print("P3DNodeMap update " + node);
54 System.out.print(" " + s);
58 if (ids.contains(Plant3D.URIs.hasGeometry)) {
59 //node.visualize(view);
60 //updateRenderObjectsFor(node);
61 updateTransform(node);
63 if (n instanceof ParameterizedNode) {
64 ParameterizedNode geom = (ParameterizedNode)n;
65 for (String id : geom.getParameterMap().keySet()) {
66 if (ids.contains(id)) {
67 // node.visualize(view);
68 // updateRenderObjectsFor(node);
69 updateTransform(node);
73 } else if (n instanceof PipeRun) {
74 // FIXME: may require rule based update!
75 PipeRun run = (PipeRun)n;
76 Set<String> ids2 = new HashSet<String>();
77 ids2.add(Plant3D.URIs.hasGeometry);
78 for (PipeControlPoint pcp : run.getControlPoints()) {
79 updateActor(pcp, ids2);
83 if (ids.contains(G3D.URIs.hasPosition) ||
84 ids.contains(G3D.URIs.hasOrientation) ||
85 ids.contains(G3D.URIs.hasWorldPosition) ||
86 ids.contains(G3D.URIs.hasWorldOrientation)) {
87 updateTransform(node);
91 private void updateTransform(IP3DNode node) {
92 if (DEBUG) System.out.println("P3DNodeMap update Transform " + node);
95 if (node instanceof ParentNode<?>) {
96 ParentNode<IP3DNode> p = (ParentNode<IP3DNode>)node;
97 for (IP3DNode n : p.getNodes())
103 protected void removeActor(INode n) {
104 if (DEBUG) System.out.println("P3DNodeMap.removeActor " + n);
105 if (!(n instanceof IP3DVisualNode))
107 IP3DVisualNode node = (IP3DVisualNode)n;
110 if (node instanceof P3DParentNode<?>) {
111 for (IP3DNode n2 : ((P3DParentNode<?>)node).getNodes())
112 if (n2 instanceof IP3DVisualNode)
113 removeActor((IP3DVisualNode)n2);
118 protected void addActor(INode n) {
119 if (DEBUG) System.out.println("P3DNodeMap.addActor " + n);
120 if (!(n instanceof IP3DVisualNode))
122 IP3DVisualNode node = (IP3DVisualNode)n;
124 // if (hasActor(node))
127 if (node instanceof P3DParentNode<?>) {
128 for (IP3DNode n2 : ((P3DParentNode<?>)node).getNodes())
129 if (n2 instanceof IP3DVisualNode)
130 addActor((IP3DVisualNode)n2);
133 updateTransform(node);
137 protected void update(ReadGraph graph) throws DatabaseException {
139 // System.out.println("Graph updates");
145 public void commit(String commitMessage) {
147 // System.out.println("Graph commit");
148 super.commit(commitMessage);
152 protected void doCommit() throws DatabaseException{
153 // System.out.println("Do commit");
158 private void validate() {
159 for (INode node : rootNode.getNodes()) {
160 if (node instanceof PipeRun)
161 PipingRules.validate((PipeRun)node);
166 public void update() throws DatabaseException {
171 b = PipingRules.update();
173 } catch (Exception e) {