X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Feditor%2FP3DNodeMap.java;h=00118cfd842441568b8bc85dd6cf83364d0a5bcb;hb=eef59c3af070cafa9783850f3922fd646599ae1e;hp=510956efaa45edc772a31280182c631446a57ab2;hpb=bbf50fc505117a5269f0aaff504eaa3dc57b9d31;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/editor/P3DNodeMap.java b/org.simantics.plant3d/src/org/simantics/plant3d/editor/P3DNodeMap.java index 510956ef..00118cfd 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/editor/P3DNodeMap.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/editor/P3DNodeMap.java @@ -30,11 +30,11 @@ import org.simantics.plant3d.scenegraph.controlpoint.PipingRules; import vtk.vtkProp; import vtk.vtkProp3D; -public class P3DNodeMap extends AbstractVTKNodeMap { +public class P3DNodeMap extends AbstractVTKNodeMap { private static final boolean DEBUG = false; - public P3DNodeMap(Session session, IMapping mapping, VtkView panel, P3DRootNode rootNode) { + public P3DNodeMap(Session session, IMapping mapping, VtkView panel, P3DRootNode rootNode) { super(session, mapping, panel, rootNode); rootNode.setNodeMap(this); } @@ -71,19 +71,25 @@ public class P3DNodeMap extends AbstractVTKNodeMap { 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 ids2 = new HashSet(); 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 { 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 { node.update(view.getRenderer()); if (node instanceof ParentNode) { + @SuppressWarnings("unchecked") ParentNode p = (ParentNode)node; for (IP3DNode n : p.getNodes()) updateTransform(n); @@ -150,10 +168,8 @@ public class P3DNodeMap extends AbstractVTKNodeMap { 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 { private boolean hasActor(IP3DVisualNode node) { - List list = nodeToActor.getValues(node); + Collection list = getRenderObjects(node); if (list == null || list.size() == 0) return false; return true; @@ -181,17 +197,12 @@ public class P3DNodeMap extends AbstractVTKNodeMap { if (Thread.currentThread() != view.getThreadQueue().getThread()) throw new RuntimeException("Illegal thread."); - List list = nodeToActor.getValues(node); - if (list != null) { - for (vtkProp obj : list) { - actorToNode.remove(obj); - } - nodeToActor.remove(node); - view.lock(); - - node.stopVisualize(); - - view.unlock(); + Collection list = getRenderObjects(node); + if (list.size() > 0) { + removeMap(node); + view.lock(); + node.stopVisualize(); + view.unlock(); } }