X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Feditor%2FPlant3DEditor.java;h=96789ff11770b871412d5e2d9aaff09bdee0579b;hb=3ef62df14340e2127ce21fc7ccab1f69f832abc0;hp=a7559f8009b35a599469a6d7d45cc7845b698a43;hpb=eb7456300253668862a71f9d07fb558400e6ace6;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 a7559f80..96789ff1 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/editor/Plant3DEditor.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/editor/Plant3DEditor.java @@ -1,13 +1,16 @@ package org.simantics.plant3d.editor; import java.util.ArrayList; +import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; +import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.Separator; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.ISelectionChangedListener; @@ -28,12 +31,12 @@ 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.scenegraph.base.ParentNode; 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; import org.simantics.g3d.vtk.common.SelectionHighlighter; -import org.simantics.g3d.vtk.common.VTKSelectionItem; import org.simantics.g3d.vtk.common.VtkView; import org.simantics.g3d.vtk.shape.vtkShape; import org.simantics.g3d.vtk.swt.ContextMenuListener; @@ -58,6 +61,7 @@ import org.simantics.plant3d.ontology.Plant3D; import org.simantics.plant3d.scenegraph.EndComponent; import org.simantics.plant3d.scenegraph.Equipment; import org.simantics.plant3d.scenegraph.IP3DNode; +import org.simantics.plant3d.scenegraph.IP3DVisualNode; import org.simantics.plant3d.scenegraph.InlineComponent; import org.simantics.plant3d.scenegraph.Nozzle; import org.simantics.plant3d.scenegraph.P3DRootNode; @@ -82,7 +86,7 @@ import vtk.vtkCameraPass; import vtk.vtkDefaultPass; import vtk.vtkGaussianBlurPass; import vtk.vtkLightsPass; -import vtk.vtkProp; +import vtk.vtkProp3D; import vtk.vtkRenderPassCollection; import vtk.vtkRenderer; import vtk.vtkSSAAPass; @@ -254,7 +258,6 @@ public class Plant3DEditor extends ResourceEditorPart { } createActions(); - } public void setUpDirection(int upDirection) { @@ -309,19 +312,21 @@ public class Plant3DEditor extends ResourceEditorPart { @Override public void postRender() { + panel.removeListener(this); + try { P3DUtil.finalizeDBLoad2(rootNode); 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); - + + List props = new ArrayList(); + collectProps(rootNode, props); + fitToWindow(props); } }); - } }); @@ -342,7 +347,7 @@ public class Plant3DEditor extends ResourceEditorPart { panel.getComponent().setFocus(); } - private void createScene() { + protected void createScene() { vtkRenderer ren1 = panel.getRenderer(); boolean multiPass = false; @@ -407,7 +412,6 @@ public class Plant3DEditor extends ResourceEditorPart { AxesDisplay axesDisplay = new AxesDisplay(panel); axesDisplay.show(); - } protected Menu contextMenu; @@ -426,19 +430,11 @@ public class Plant3DEditor extends ResourceEditorPart { protected void createContextMenu(IMenuManager m) { List selected = selectionProvider.getSelectedNodes(); - List> selectedItems = selectionProvider.getSelectedItems(); - if (selectedItems.size() > 0) { - List props = new ArrayList<>(); - for (VTKSelectionItem i : selectedItems) { - vtkProp p = (vtkProp)i.getAdapter(vtkProp.class); - if (p != null) - props.add(p); - } - if (props.size() > 0) { - focusAction.setProps(props); - m.add(focusAction); - } - } + + createFocusMenu(m, selected); + + m.add(new Separator()); + try { if (selected.size() == 0) { m.add(new AddEquipmentAction(rootNode, getLibraryUri())); @@ -518,6 +514,31 @@ public class Plant3DEditor extends ResourceEditorPart { ExceptionUtils.logAndShowError(e); } } + + protected void createFocusMenu(IMenuManager m, List selected) { + m.add(new Action("Fit to Window") { + @Override + public void run() { + List props = new ArrayList<>(); + final Collection collection = !selected.isEmpty() ? selected : getRootNode().getChild(); + for (INode n : collection) + collectProps(n, props); + + fitToWindow(props); + getPanel().refresh(); + } + }); + + if (!selected.isEmpty()) { + List actors = new ArrayList<>(); + for (INode n : selected) + collectProps(n, actors); + if (actors.size() > 0) { + focusAction.setProps(new ArrayList<>(actors)); + m.add(focusAction); + } + } + } private IContentOutlinePage createOutline() { if (rootNode == null || selectionProvider == null) @@ -585,4 +606,18 @@ public class Plant3DEditor extends ResourceEditorPart { public P3DNodeMap getNodeMap() { return nodeMap; } + + public void fitToWindow(Collection props) { + cameraAction.fitToView(props); + } + + protected static void collectProps(INode node, List props) { + if (node instanceof IP3DVisualNode) + props.addAll(((IP3DVisualNode) node).getActors()); + + if (node instanceof ParentNode) + for (INode n : ((ParentNode) node).getNodes()) { + collectProps(n, props); + } + } }