X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Feditor%2FPlant3DEditor.java;h=a7559f8009b35a599469a6d7d45cc7845b698a43;hb=refs%2Fchanges%2F03%2F3903%2F1;hp=53a0ed2c78ed1298bca72e551986d2fe2f3cd8fc;hpb=4a656971025eea4b563933179d6120d0e87e7549;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/editor/Plant3DEditor.java b/org.simantics.plant3d/src/org/simantics/plant3d/editor/Plant3DEditor.java index 53a0ed2c..a7559f80 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/editor/Plant3DEditor.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/editor/Plant3DEditor.java @@ -8,15 +8,18 @@ import java.util.Set; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.layout.GridDataFactory; +import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.views.contentoutline.IContentOutlinePage; +import org.simantics.Simantics; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.Session; @@ -25,6 +28,7 @@ import org.simantics.db.exception.DatabaseException; import org.simantics.g3d.scenegraph.NodeMap; import org.simantics.g3d.scenegraph.RenderListener; import org.simantics.g3d.scenegraph.base.INode; +import org.simantics.g3d.toolbar.ToolComposite; import org.simantics.g3d.vtk.action.RemoveAction; import org.simantics.g3d.vtk.common.HoverHighlighter; import org.simantics.g3d.vtk.common.NodeSelectionProvider2; @@ -46,6 +50,7 @@ import org.simantics.plant3d.actions.AddComponentAction; import org.simantics.plant3d.actions.AddEquipmentAction; import org.simantics.plant3d.actions.AddNozzleAction; import org.simantics.plant3d.actions.RemoveAndSplitAction; +import org.simantics.plant3d.actions.ReversePipeRunAction; import org.simantics.plant3d.actions.RoutePipeAction; import org.simantics.plant3d.actions.TranslateFreeVariableLengthAction; import org.simantics.plant3d.actions.TranslateInlineAction; @@ -56,6 +61,7 @@ import org.simantics.plant3d.scenegraph.IP3DNode; import org.simantics.plant3d.scenegraph.InlineComponent; import org.simantics.plant3d.scenegraph.Nozzle; import org.simantics.plant3d.scenegraph.P3DRootNode; +import org.simantics.plant3d.scenegraph.PipeRun; import org.simantics.plant3d.scenegraph.PipelineComponent; import org.simantics.plant3d.scenegraph.SchemaBuilder; import org.simantics.plant3d.scenegraph.TurnComponent; @@ -82,16 +88,17 @@ import vtk.vtkRenderer; import vtk.vtkSSAAPass; import vtk.vtkSequencePass; import vtk.vtkSimpleMotionBlurPass; -import vtk.vtkSobelGradientMagnitudePass; public class Plant3DEditor extends ResourceEditorPart { private Composite parent; + protected ToolComposite toolComposite; private Resource input; // private InteractiveVtkPanel panel; // private SWTAWTComponent component; private InteractiveVtkComposite panel; + private P3DRootNode rootNode; private IMapping mapping; @@ -109,13 +116,21 @@ public class Plant3DEditor extends ResourceEditorPart { protected RemoveAndSplitAction removeSplitAction; protected RoutePipeAction routePipeAction; protected AddComponentAction addComponentAction; + protected ReversePipeRunAction reversePipeRunAction; private P3DNodeMap nodeMap; + /** Constants for selecting the up-direction */ + public static final int X = 0, Y = 1, Z = 2; + + protected int upDirection = 1; + @Override public void createPartControl(Composite parent) { this.parent = parent; - parent.setLayout (new FillLayout ()); + //parent.setLayout (new FillLayout ()); + + // component = new SWTAWTComponent(parent,SWT.NONE) { // // @Override @@ -132,9 +147,17 @@ public class Plant3DEditor extends ResourceEditorPart { IResourceEditorInput rei = (IResourceEditorInput)getEditorInput(); input = rei.getResource(); + toolComposite = new ToolComposite(parent, SWT.BORDER); + toolComposite.setVisible(true); + panel = new InteractiveVtkComposite(parent); + GridLayoutFactory.fillDefaults().margins(0, 0).spacing(0, 0).applyTo(parent); + GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(getPanel().getComponent()); + + GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).applyTo(toolComposite); + //IActionBars actionBars = getEditorSite().getActionBars(); hookContextMenu(); @@ -144,13 +167,25 @@ public class Plant3DEditor extends ResourceEditorPart { new ContextMenuListener(panel, contextMenu); cameraAction = createCameraAction(); + switch (upDirection) { + case 0: + cameraAction.setUpDirection(new double[] { 1, 0, 0 }); + break; + case 1: + cameraAction.setUpDirection(new double[] { 0, 1, 0 }); + break; + case 2: + cameraAction.setUpDirection(new double[] { 0, 0, 1 }); + break; + } + panel.setDefaultAction(cameraAction); panel.useDefaultAction(); panel.setPickType(4); try { - ControlPointFactory.preloadCache(getLibraryUri()); - ComponentUtils.preloadCache(); + ControlPointFactory.preloadCache(Simantics.getSession(), getLibraryUri()); + ComponentUtils.preloadCache(Simantics.getSession()); } catch (Exception e) { ExceptionUtils.logAndShowError("Cannot open Plant3D editor",e); return; @@ -161,7 +196,7 @@ public class Plant3DEditor extends ResourceEditorPart { @Override public void run(ReadGraph graph) throws DatabaseException { - System.out.println("START PLANT3D LOAD"); + //System.out.println("START PLANT3D LOAD"); PipingRules.setEnabled(false); IMappingSchema schema = getSchema(graph); mapping = Mappings.createWithListening(schema); @@ -177,7 +212,7 @@ public class Plant3DEditor extends ResourceEditorPart { throw new DatabaseException(e); } - System.out.println("END PLANT3D LOAD"); + //System.out.println("END PLANT3D LOAD"); } }); @@ -222,6 +257,10 @@ public class Plant3DEditor extends ResourceEditorPart { } + public void setUpDirection(int upDirection) { + this.upDirection = upDirection; + } + protected vtkCameraAndSelectorAction createCameraAction() { return new vtkCameraAndSelectorAction(panel); } @@ -230,12 +269,12 @@ public class Plant3DEditor extends ResourceEditorPart { return new NodeSelectionProvider2(this,mapping,nodeMap); } - protected HoverHighlighter createHoverHighlhighter() { - return new HoverHighlighter(panel,nodeMap); + protected HoverHighlighter createHoverHighlhighter() { + return new HoverHighlighter<>(panel,nodeMap); } - protected SelectionHighlighter createSelectionHighlighter() { - return new SelectionHighlighter(panel,nodeMap); + protected SelectionHighlighter createSelectionHighlighter() { + return new SelectionHighlighter(panel,nodeMap); } protected String getLibraryUri() { @@ -244,14 +283,15 @@ public class Plant3DEditor extends ResourceEditorPart { protected void createActions() { focusAction = new FocusAction(panel, cameraAction); - translateAction = new TranslateAction(panel,nodeMap); - translateInlineAction = new TranslateInlineAction(panel, nodeMap); - translateFreeVariableLengthAction = new TranslateFreeVariableLengthAction(panel, getRootNode()); - rotateAction = new RotateAction(panel,nodeMap); + translateAction = new TranslateAction(panel,nodeMap,toolComposite); + translateInlineAction = new TranslateInlineAction(panel, nodeMap,toolComposite); + translateFreeVariableLengthAction = new TranslateFreeVariableLengthAction(panel, getRootNode(), toolComposite); + rotateAction = new RotateAction(panel,nodeMap,toolComposite); removeAction = new RemoveAction(nodeMap); removeSplitAction = new RemoveAndSplitAction(nodeMap); - routePipeAction = new RoutePipeAction(panel,rootNode); + routePipeAction = new RoutePipeAction(panel,rootNode, toolComposite); addComponentAction = new AddComponentAction(panel, rootNode, getLibraryUri()); + reversePipeRunAction = new ReversePipeRunAction(nodeMap); } public void populate() { @@ -274,6 +314,7 @@ public class Plant3DEditor extends ResourceEditorPart { if (nodeMap.isRangeModified()); nodeMap.commit("Load sync"); } catch (Exception e) { + ExceptionUtils.logAndShowError("Failed to load model correctly", e); //throw new DatabaseException(e); } panel.removeListener(this); @@ -358,7 +399,8 @@ public class Plant3DEditor extends ResourceEditorPart { ren1.SetGradientBackground(true); // vtkActor grid = vtkShape.createGridActor(8,1.0,1|2|4); - vtkActor grid = vtkShape.createGridActor(8,1.0, 2 ); + int dir = 1 << upDirection; + vtkActor grid = vtkShape.createGridActor(8, 1.0, dir); grid.SetPickable(0); ren1.AddActor(grid); panel.addDeletable(grid); @@ -399,15 +441,16 @@ public class Plant3DEditor extends ResourceEditorPart { } try { if (selected.size() == 0) { - for (Item eq : P3DUtil.getEquipments(getLibraryUri())) { - m.add(new AddEquipmentAction(rootNode, eq)); - } + m.add(new AddEquipmentAction(rootNode, getLibraryUri())); +// for (Item eq : P3DUtil.getEquipments(getLibraryUri())) { +// m.add(new AddEquipmentAction(rootNode, eq)); +// } } else if (selected.size() == 1) { IP3DNode node = (IP3DNode)selected.get(0); if (node instanceof Equipment) { m.add(translateAction); m.add(rotateAction); - for (Item eq : P3DUtil.getNozzles(getLibraryUri())) { + for (Item eq : P3DUtil.getNozzles(Simantics.getSession(), getLibraryUri())) { AddNozzleAction add = new AddNozzleAction(rootNode, eq); add.setEquipment((Equipment)node); m.add(add); @@ -455,6 +498,10 @@ public class Plant3DEditor extends ResourceEditorPart { m.add(removeAction); m.add(removeSplitAction); removeSplitAction.setNode(node); + } else if (node instanceof PipeRun) { + m.add(reversePipeRunAction); + m.add(removeAction); + reversePipeRunAction.setNode(node); } else { m.add(removeAction); } @@ -491,30 +538,29 @@ public class Plant3DEditor extends ResourceEditorPart { return outlinePage; } - @SuppressWarnings("rawtypes") @Override - public Object getAdapter(Class adapter) { - if (IPropertyPage.class.equals(adapter)) - return new StandardPropertyPage(getSite(),getPropertyContexts()); - if (IContentOutlinePage.class.equals(adapter)) { - return createOutline(); + public T getAdapter(Class adapter) { + if (adapter.isAssignableFrom(IPropertyPage.class)) + return adapter.cast(new StandardPropertyPage(getSite(),getPropertyContexts())); + if (adapter.isAssignableFrom(ISelectionProvider.class)) + return adapter.cast(selectionProvider); + if (adapter.isAssignableFrom(IContentOutlinePage.class)) { + return adapter.cast(createOutline()); } - if (NodeMap.class.equals(adapter)) { - return nodeMap; + if (adapter.isAssignableFrom(NodeMap.class)) { + return adapter.cast(nodeMap); } - if (INode.class.equals(adapter)) { - return rootNode; + if (adapter.isAssignableFrom(INode.class)) { + return adapter.cast(rootNode); } - if (IMapping.class.equals(adapter)) { - return mapping; + if (adapter.isAssignableFrom(IMapping.class)) { + return adapter.cast(mapping); } -// if (InteractiveVtkPanel.class.equals(adapter)) { -// return panel; +// if (adapter.isAssignableFrom(InteractiveVtkPanel.class)) { +// return adapter.cast(panel); // } - if (VtkView.class.equals(adapter)) - return panel; - if (ISelectionProvider.class.equals(adapter)) - return selectionProvider; + if (adapter.isAssignableFrom(VtkView.class)) + return adapter.cast(panel); return super.getAdapter(adapter); }