]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/editor/P3DNodeMap.java
Allow multiple radii for turns.
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / editor / P3DNodeMap.java
index f7bb42306aad6690a9088d35e8eac79d5ccac054..8daee3a530e9286a725bf5b0a113f711fd507f86 100644 (file)
@@ -30,7 +30,7 @@ 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;
 
@@ -71,7 +71,7 @@ public class P3DNodeMap extends AbstractVTKNodeMap<INode> {
                                if (ids.contains(id)) {
                                        node.visualize(view);
                                        updateRenderObjectsFor(node);
-                                       updateTransform(node);
+                                       //updateTransform(node);
                                        break;
                                }
                        }
@@ -83,7 +83,7 @@ public class P3DNodeMap extends AbstractVTKNodeMap<INode> {
                        for (PipeControlPoint pcp : run.getControlPoints()) {
                                updateActor(pcp, ids2);
                        }
-               }
+               } 
                
                if (ids.contains(G3D.URIs.hasPosition) || 
                        ids.contains(G3D.URIs.hasOrientation) ||
@@ -91,6 +91,10 @@ 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 updateTransform(IP3DNode node) {
@@ -150,10 +154,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 +173,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 +183,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 +262,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 +271,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 +282,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 +290,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.");
                 }
             }
         }