X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Factions%2FRoutePipeAction.java;h=509ab38cce6e9120f94a1e732768b4af0f993e64;hb=0ad74f024bc769b126a2e46d0015fe0deb30b34c;hp=0310311dacecbcc254a71237e82fb22bceb977ef;hpb=22bb24d2a7e26c70b0dd4c57080f2c25ac3d40a8;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/actions/RoutePipeAction.java b/org.simantics.plant3d/src/org/simantics/plant3d/actions/RoutePipeAction.java index 0310311d..509ab38c 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/actions/RoutePipeAction.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/actions/RoutePipeAction.java @@ -18,9 +18,9 @@ import org.simantics.g3d.scenegraph.NodeMap; import org.simantics.g3d.scenegraph.base.INode; import org.simantics.g3d.tools.ConstraintDetector; import org.simantics.g3d.tools.DummyConstraintDetector; -import org.simantics.g3d.vtk.action.vtkAction; -import org.simantics.g3d.vtk.common.InteractiveVtkPanel; import org.simantics.g3d.vtk.gizmo.TranslateAxisGizmo; +import org.simantics.g3d.vtk.swt.InteractiveVtkComposite; +import org.simantics.g3d.vtk.swt.vtkSwtAction; import org.simantics.g3d.vtk.utils.vtkUtil; import org.simantics.plant3d.Activator; import org.simantics.plant3d.gizmo.SplitPointSelectionGizmo; @@ -38,14 +38,13 @@ import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint.Direction; import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint.PositionType; import org.simantics.plant3d.scenegraph.controlpoint.PipingRules; import org.simantics.plant3d.utils.ComponentUtils; -import org.simantics.utils.threads.AWTThread; import org.simantics.utils.threads.ThreadUtils; import org.simantics.utils.ui.ExceptionUtils; import vtk.vtkProp; import vtk.vtkTextActor; -public class RoutePipeAction extends vtkAction { +public class RoutePipeAction extends vtkSwtAction { enum LockType { X, Y, Z, XY, YZ, XZ, NONE, CUSTOM }; @@ -87,7 +86,7 @@ public class RoutePipeAction extends vtkAction { private Set allowed = new HashSet(); - public RoutePipeAction(InteractiveVtkPanel panel, P3DRootNode root) { + public RoutePipeAction(InteractiveVtkComposite panel, P3DRootNode root) { super(panel); this.root = root; setText("Route Pipe"); @@ -112,10 +111,10 @@ public class RoutePipeAction extends vtkAction { public void deattach() { deactivate(); startComponent = null; - nodeMap.commit(); + nodeMap.commit("Route pipe"); deattachUI(); super.deattach(); - panel.repaint(); + panel.refresh(); } public void attach() { @@ -123,7 +122,7 @@ public class RoutePipeAction extends vtkAction { return; super.attach(); - ThreadUtils.asyncExec(AWTThread.getThreadAccess(), new Runnable() { + ThreadUtils.asyncExec(panel.getThreadQueue(), new Runnable() { public void run() { // attachUI(); try { @@ -145,6 +144,7 @@ public class RoutePipeAction extends vtkAction { private void deattachUI() { //panel.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + panel.lock(); if (translateAxisGizmo.isAttached()) translateAxisGizmo.deattach(); if (splitPointSelectionGizmo.isAttached()) @@ -152,16 +152,17 @@ public class RoutePipeAction extends vtkAction { if (terminalSelectionGizmo.isAttached()) terminalSelectionGizmo.deattach(); if (infoActor != null) { - panel.GetRenderer().RemoveActor(infoActor); + panel.getRenderer().RemoveActor(infoActor); infoActor.Delete(); infoActor = null; } + panel.unlock(); } private List added = new ArrayList(); @Override - public void keyPressed(KeyEvent e) { + public boolean keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ESCAPE) panel.useDefaultAction(); if (lock != LockType.CUSTOM) { @@ -223,12 +224,12 @@ public class RoutePipeAction extends vtkAction { update(); - + return true; } private void update() { - panel.repaint(); + panel.refresh(); } private void update(double x, double y) { switch (state) { @@ -276,9 +277,9 @@ public class RoutePipeAction extends vtkAction { return; } else { terminalSelectionGizmo.setComponent(startComponent, allowed); - terminalSelectionGizmo.attach(panel.GetRenderer()); + terminalSelectionGizmo.attach(panel); state = ToolState.SELECTING_POSITION; - panel.repaint(); + update(); } } @@ -356,7 +357,7 @@ public class RoutePipeAction extends vtkAction { straightCP.setNext(start); } } - translateAxisGizmo.attach(panel.GetRenderer()); + translateAxisGizmo.attach(panel); setPreviousPosition(previousPosition); updateCurrentPoint(); } @@ -402,7 +403,7 @@ public class RoutePipeAction extends vtkAction { } - translateAxisGizmo.attach(panel.GetRenderer()); + translateAxisGizmo.attach(panel); setPreviousPosition(previousPosition); updateCurrentPoint(); } @@ -412,7 +413,7 @@ public class RoutePipeAction extends vtkAction { Point3d p2 = new Point3d(); start.getInlineControlPointEnds(p1, p2); splitPointSelectionGizmo.setSplit(p1, p2); - splitPointSelectionGizmo.attach(panel.GetRenderer()); + splitPointSelectionGizmo.attach(panel); state = ToolState.SELECTING_SPLIT; } public void deactivate() { @@ -475,24 +476,26 @@ public class RoutePipeAction extends vtkAction { } @Override - public void mousePressed(MouseEvent e) { + public boolean mousePressed(MouseEvent e) { if (useDefault) { - panel.getDefaultAction().mousePressed(e); + getDefaultAction().mousePressed(e); } + return true; } @Override - public void mouseReleased(MouseEvent e) { + public boolean mouseReleased(MouseEvent e) { if (useDefault) { - panel.getDefaultAction().mouseReleased(e); + getDefaultAction().mouseReleased(e); } + return true; } @Override - public void mouseClicked(MouseEvent e) { + public boolean mouseClicked(MouseEvent e) { if (useDefault) { - panel.getDefaultAction().mouseClicked(e); - return; + getDefaultAction().mouseClicked(e); + return true; } if (state == ToolState.ROUTING) { try { @@ -528,7 +531,8 @@ public class RoutePipeAction extends vtkAction { } else if (state == ToolState.SELECTING_POSITION) { if (e.getClickCount() == 1 && e.getButton() == MouseEvent.BUTTON1) { int type = panel.getPickType(); - panel.setPickType(0); + //panel.setPickType(0); + panel.setPickType(5); vtkProp[] picked = panel.pick(e.getX(), e.getY()); panel.setPickType(type); PositionType position = terminalSelectionGizmo.getPickedPosition(picked); @@ -555,7 +559,7 @@ public class RoutePipeAction extends vtkAction { splitPointSelectionGizmo.deattach(); if (t == null) { panel.useDefaultAction(); - return; + return true; } try { Vector3d pos = new Vector3d(t); @@ -579,7 +583,7 @@ public class RoutePipeAction extends vtkAction { } } } - + return true; } private InlineComponent createBranchSplit(InlineComponent component, Vector3d pos) throws Exception{ @@ -594,19 +598,21 @@ public class RoutePipeAction extends vtkAction { } @Override - public void mouseMoved(MouseEvent e) { + public boolean mouseMoved(MouseEvent e) { if (useDefault) { - panel.getDefaultAction().mouseMoved(e); - return; + getDefaultAction().mouseMoved(e); + return true; } step = ((e.getModifiers() & MouseEvent.CTRL_DOWN_MASK) > 0); update(e.getX(), e.getY()); + return true; } @Override - public void mouseDragged(MouseEvent e) { + public boolean mouseDragged(MouseEvent e) { if (useDefault) - panel.getDefaultAction().mouseDragged(e); + getDefaultAction().mouseDragged(e); + return true; } @@ -644,7 +650,7 @@ public class RoutePipeAction extends vtkAction { endType = null; endPort = null; - Ray ray = vtkUtil.createMouseRay(panel.GetRenderer(),x, y); + Ray ray = vtkUtil.createMouseRay(panel.getRenderer(),x, y); Vector3d o = new Vector3d(ray.pos); Vector3d d = ray.dir; @@ -709,11 +715,7 @@ public class RoutePipeAction extends vtkAction { updateRoute(o,d); } - panel.repaint(); - - - - + panel.refresh(); } private boolean updateCurrentPoint(Vector3d o, Vector3d d) { @@ -757,7 +759,7 @@ public class RoutePipeAction extends vtkAction { MathTools.intersectStraightPlane(o, d, point, new Vector3d(1.0,0.0,0.0), currentPosition); break; case NONE: - Vector3d normal = new Vector3d(panel.GetRenderer().GetActiveCamera().GetDirectionOfProjection()); + Vector3d normal = new Vector3d(panel.getRenderer().GetActiveCamera().GetDirectionOfProjection()); normal.normalize(); MathTools.intersectStraightPlane(o, d, point, normal, currentPosition); @@ -830,7 +832,7 @@ public class RoutePipeAction extends vtkAction { infoActor.SetPosition(10,10); - panel.GetRenderer().AddActor(infoActor); + panel.getRenderer().AddActor(infoActor); } infoActor.SetInput(text); } @@ -1059,16 +1061,19 @@ public class RoutePipeAction extends vtkAction { * Updates tool graphics for current point */ private void updateCurrentPoint() { -// PipeComponentProvider.createStraightEdges(pipeShapes.get(pipeShapes.size() - 1), controlPoints.get(controlPoints.size() - 1), currentPoint, pipeDiameter*0.5); InlineComponent straight = (InlineComponent)added.get(added.size()-1); - // FIXME : does not take account space the the previous elbow reserves. + // TODO: the inline length is from previous update step. + double l = straight.getPrevious().getControlPoint().getInlineLength(); Vector3d v = new Vector3d(); v.sub(currentPosition, previousPosition); double length = v.length(); - v.scale(0.5); - v.add(previousPosition); - straight.getControlPoint().setWorldPosition(v); - straight.getControlPoint().setLength(length); + if (length > MathTools.NEAR_ZERO) { + v.scale(1.0/length); + v.scale(0.5*(length+l)); + v.add(previousPosition); + straight.getControlPoint().setWorldPosition(v); + straight.getControlPoint().setLength(length); + } try { PipingRules.positionUpdate(straight.getControlPoint(),false); } catch (Exception e) {