]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/editor/P3DNodeMap.java
Remove dependencies on log4j
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / editor / P3DNodeMap.java
index f7bb42306aad6690a9088d35e8eac79d5ccac054..00118cfd842441568b8bc85dd6cf83364d0a5bcb 100644 (file)
@@ -30,11 +30,11 @@ import org.simantics.plant3d.scenegraph.controlpoint.PipingRules;
 import vtk.vtkProp;
 import vtk.vtkProp3D;
 
-public class P3DNodeMap extends AbstractVTKNodeMap<INode> {
+public class P3DNodeMap extends AbstractVTKNodeMap<Resource,INode> {
        
        private static final boolean DEBUG = false;
 
-       public P3DNodeMap(Session session, IMapping mapping, VtkView panel, P3DRootNode rootNode) {
+       public P3DNodeMap(Session session, IMapping<Resource,INode> mapping, VtkView panel, P3DRootNode rootNode) {
                super(session, mapping, panel, rootNode);
                rootNode.setNodeMap(this);
        }
@@ -71,19 +71,25 @@ public class P3DNodeMap extends AbstractVTKNodeMap<INode> {
                                if (ids.contains(id)) {
                                        node.visualize(view);
                                        updateRenderObjectsFor(node);
-                                       updateTransform(node);
+                                       //updateTransform(node);
                                        break;
                                }
                        }
                } else if (n instanceof PipeRun) {
-                       // FIXME: may require rule based update!
                        PipeRun run = (PipeRun)n;
+                       
+                       // Check for change to turn radii and update turn components
+                       if (ids.contains(Plant3D.URIs.HasTurnRadiusArray) ||
+                               ids.contains(Plant3D.URIs.HasTurnRadius)) {
+                               requestTurnUpdates(run);
+                       }
+                       
                        Set<String> ids2 = new HashSet<String>();
                        ids2.add(Plant3D.URIs.hasGeometry);
                        for (PipeControlPoint pcp : run.getControlPoints()) {
                                updateActor(pcp, ids2);
                        }
-               }
+               } 
                
                if (ids.contains(G3D.URIs.hasPosition) || 
                        ids.contains(G3D.URIs.hasOrientation) ||
@@ -91,6 +97,17 @@ public class P3DNodeMap extends AbstractVTKNodeMap<INode> {
                        ids.contains(G3D.URIs.hasWorldOrientation)) {
                        updateTransform(node);
                }
+               if (ids.contains(Plant3D.URIs.HasTurnRadiusIndex)) {
+                   node.visualize(view);
+                   updateRenderObjectsFor(node);
+               }
+       }
+       
+       private void requestTurnUpdates(PipeRun run) {
+               for (PipeControlPoint pcp : run.getControlPoints()) {
+                       if (pcp.isTurn())
+                               PipingRules.requestUpdate(pcp);
+               }
        }
        
        private void updateTransform(IP3DNode node) {
@@ -99,6 +116,7 @@ public class P3DNodeMap extends AbstractVTKNodeMap<INode> {
                node.update(view.getRenderer());
                
                if (node instanceof ParentNode<?>) {
+                       @SuppressWarnings("unchecked")
                        ParentNode<IP3DNode> p = (ParentNode<IP3DNode>)node;
                        for (IP3DNode n : p.getNodes())
                                updateTransform(n);
@@ -150,10 +168,8 @@ public class P3DNodeMap extends AbstractVTKNodeMap<INode> {
                
                node.visualize(view);
 
-               for (vtkProp3D act : node.getActors()) {
-                       nodeToActor.add(node, act);
-                       actorToNode.put(act, node);
-               }
+               map(node, node.getActors());
+               
                if (DEBUG) System.out.println("Added " + node.getActors().size() + " actors");
                
                if (node instanceof P3DParentNode<?>) {
@@ -171,7 +187,7 @@ public class P3DNodeMap extends AbstractVTKNodeMap<INode> {
        
        
        private boolean hasActor(IP3DVisualNode node) {
-               List<vtkProp> list = nodeToActor.getValues(node);
+               Collection<vtkProp> list = getRenderObjects(node);
                if (list == null || list.size() == 0)
                        return false;
                return true;
@@ -181,17 +197,12 @@ public class P3DNodeMap extends AbstractVTKNodeMap<INode> {
                if (Thread.currentThread() != view.getThreadQueue().getThread())
                        throw new RuntimeException("Illegal thread.");
 
-               List<vtkProp> list = nodeToActor.getValues(node);
-               if (list != null) {
-                       for (vtkProp obj : list) {
-                               actorToNode.remove(obj);        
-                       }
-                       nodeToActor.remove(node);
-                       view.lock();
-                       
-                       node.stopVisualize();
-                       
-                       view.unlock();
+               Collection<vtkProp> list = getRenderObjects(node);
+               if (list.size() > 0) {
+                   removeMap(node);
+                   view.lock();
+                   node.stopVisualize();
+                   view.unlock();
                }
        }
        
@@ -265,7 +276,7 @@ public class P3DNodeMap extends AbstractVTKNodeMap<INode> {
                } else if (graph.isInstanceOf(r, P3D.PipeRun)) {
                    pipeRuns.add(r);
                } else {
-                   throw new DatabaseException("Unknown resource " + r);
+                   throw new DatabaseException("Unknown resource " + r+ " " + mapping.get(r));
                }
            }
            Set<Resource> nozzles = new HashSet<>();
@@ -274,7 +285,7 @@ public class P3DNodeMap extends AbstractVTKNodeMap<INode> {
                    if (graph.isInstanceOf(n, P3D.Nozzle)) {
                        nozzles.add(n);
                    } else {
-                       throw new DatabaseException("Unknown nozzle resource " + n);
+                       throw new DatabaseException("Unknown nozzle resource " + n+ " " + mapping.get(n));
                    }
                }
            }
@@ -285,7 +296,7 @@ public class P3DNodeMap extends AbstractVTKNodeMap<INode> {
                 if (graph.isInstanceOf(c, P3D.PipelineComponent)) {
                     components.add(c);
                 } else {
-                    throw new DatabaseException("Unknown component resource " + c);
+                    throw new DatabaseException("Unknown component resource " + c + " " + mapping.get(c));
                 }
             }
         }
@@ -293,11 +304,11 @@ public class P3DNodeMap extends AbstractVTKNodeMap<INode> {
         for (Resource c : components) {
             for (Resource connected : graph.getObjects(c, P3D.Connects)) {
                 if (!components.contains(connected) && !nozzles.contains(connected)) {
-                    throw new DatabaseException("Unbrowsable component resource " + connected + " connected to " + c);
+                    throw new DatabaseException("Unbrowsable component resource " + connected + " " + mapping.get(connected) +" connected to " + c + " " + mapping.get(c));
                 }
                 Collection<Resource> connectedConnected = graph.getObjects(connected, P3D.Connects);
                 if (!connectedConnected.contains(c)) {
-                    throw new DatabaseException("Component resource " + c + " is connected to " + connected +", but its has no connection back.");
+                    throw new DatabaseException("Component resource " + c + " " + mapping.get(c) + " is connected to " + connected + " " + mapping.get(connected) +", but its has no connection back.");
                 }
             }
         }