From fc44aa6fb56a795b4cae2d0684af67ae539fc748 Mon Sep 17 00:00:00 2001 From: Marko Luukkainen Date: Mon, 6 May 2019 13:48:39 +0300 Subject: [PATCH] Refactoring small features to common classes ContextMenuListener - hook awt mouse event for context menu AxesDisplay - Axes widget to lower left corner of the 3d view gitlab #3 Change-Id: I8c92f8debfa958f0fc0103d66e37b79e05d81d17 --- .../action/vtkCameraAndSelectorAction.java | 773 +++++++++--------- .../g3d/vtk/common/ContextMenuListener.java | 32 + .../simantics/g3d/vtk/utils/AxesDisplay.java | 48 ++ .../plant3d/editor/Plant3DEditor.java | 49 +- 4 files changed, 476 insertions(+), 426 deletions(-) create mode 100644 org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/common/ContextMenuListener.java create mode 100644 org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/utils/AxesDisplay.java diff --git a/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/action/vtkCameraAndSelectorAction.java b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/action/vtkCameraAndSelectorAction.java index efae5ae9..f4bd2a07 100644 --- a/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/action/vtkCameraAndSelectorAction.java +++ b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/action/vtkCameraAndSelectorAction.java @@ -1,382 +1,391 @@ -/******************************************************************************* - * Copyright (c) 2012, 2013 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.g3d.vtk.action; - -import java.awt.event.InputEvent; -import java.awt.event.MouseEvent; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.ISelectionProvider; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.swt.widgets.Display; -import org.simantics.g3d.tools.AdaptationUtils; -import org.simantics.g3d.vtk.common.InteractiveVtkPanel; - -import vtk.vtkActor; -import vtk.vtkCamera; -import vtk.vtkProp; -import vtk.vtkRenderWindow; -import vtk.vtkRenderer; - -public class vtkCameraAndSelectorAction extends vtkAction implements ISelectionProvider { - - protected vtkRenderer ren; - protected int lastX; - protected int lastY; - protected vtkRenderWindow rw; - protected vtkCamera cam; - protected int InteractionMode = 1; - - public vtkCameraAndSelectorAction(InteractiveVtkPanel panel) { - super(panel); - this.ren = panel.GetRenderer(); - this.rw = panel.GetRenderWindow(); - this.cam = ren.GetActiveCamera(); - } - - public void Lock() { - panel.lock(); - } - - public void UnLock() { - panel.unlock(); - } - - public void InteractionModeRotate() - { - this.InteractionMode = 1; - } - - public void InteractionModeTranslate() - { - this.InteractionMode = 2; - } - - public void InteractionModeZoom() - { - this.InteractionMode = 3; - } - - public void resetCameraClippingRange() { - Lock(); - ren.ResetCameraClippingRange(); - UnLock(); - } - - public void resetCamera() { - Lock(); - ren.ResetCamera(); - UnLock(); - } - - public void mousePressed(MouseEvent e) - { - - if (ren.VisibleActorCount() == 0) return; - rw.SetDesiredUpdateRate(5.0); - lastX = e.getX(); - lastY = e.getY(); - if ((e.getModifiers()==InputEvent.BUTTON2_MASK) || - (e.getModifiers()==(InputEvent.BUTTON1_MASK | InputEvent.SHIFT_MASK))) - { - InteractionModeTranslate(); - } - else if (e.getModifiers()==InputEvent.BUTTON3_MASK) - { - InteractionModeZoom(); - } - else - { - InteractionModeRotate(); - } - } - - public void mouseReleased(MouseEvent e) - { - rw.SetDesiredUpdateRate(0.01); - } - - - - public void mouseDragged(MouseEvent e) - { - if (ren.VisibleActorCount() == 0) return; - int x = e.getX(); - int y = e.getY(); - // rotate - if (this.InteractionMode == 1) - { - cam.Azimuth(lastX - x); - cam.Elevation(y - lastY); - cam.OrthogonalizeViewUp(); - resetCameraClippingRange(); - panel.UpdateLight(); - } - // translate - if (this.InteractionMode == 2) - { - double FPoint[]; - double PPoint[]; - double APoint[] = new double[3]; - double RPoint[]; - double focalDepth; - - // get the current focal point and position - FPoint = cam.GetFocalPoint(); - PPoint = cam.GetPosition(); - - // calculate the focal depth since we'll be using it a lot - ren.SetWorldPoint(FPoint[0],FPoint[1],FPoint[2],1.0); - ren.WorldToDisplay(); - focalDepth = ren.GetDisplayPoint()[2]; - - APoint[0] = rw.GetSize()[0]/2.0 + (x - lastX); - APoint[1] = rw.GetSize()[1]/2.0 - (y - lastY); - APoint[2] = focalDepth; - ren.SetDisplayPoint(APoint); - ren.DisplayToWorld(); - RPoint = ren.GetWorldPoint(); - if (RPoint[3] != 0.0) - { - RPoint[0] = RPoint[0]/RPoint[3]; - RPoint[1] = RPoint[1]/RPoint[3]; - RPoint[2] = RPoint[2]/RPoint[3]; - } - - /* - * Compute a translation vector, moving everything 1/2 - * the distance to the cursor. (Arbitrary scale factor) - */ - cam.SetFocalPoint( - (FPoint[0]-RPoint[0])/2.0 + FPoint[0], - (FPoint[1]-RPoint[1])/2.0 + FPoint[1], - (FPoint[2]-RPoint[2])/2.0 + FPoint[2]); - cam.SetPosition( - (FPoint[0]-RPoint[0])/2.0 + PPoint[0], - (FPoint[1]-RPoint[1])/2.0 + PPoint[1], - (FPoint[2]-RPoint[2])/2.0 + PPoint[2]); - resetCameraClippingRange(); - } - // zoom - if (this.InteractionMode == 3) - { - double zoomFactor; - //double clippingRange[]; - - zoomFactor = Math.pow(1.02,(y - lastY)); - if (cam.GetParallelProjection() == 1) - { - cam.SetParallelScale(cam.GetParallelScale()/zoomFactor); - } - else - { - cam.Dolly(zoomFactor); - resetCameraClippingRange(); - } - } - lastX = x; - lastY = y; - panel.Render(); - } - - - private List selectActors = new ArrayList(); - private List hoverActor = new ArrayList(); - - @Override - public void mouseClicked(MouseEvent e) { - if (!panel.isFocusOwner()) - return; - if (e.getButton() != MouseEvent.BUTTON1) - return; - vtkProp spick[] = panel.pick(e.getX(), e.getY()); - if (spick != null && spick.length > 0) { - for (vtkProp selectActor : spick) { - if (!e.isControlDown()) { - selectActors.clear(); - selectActors.add(selectActor); - } else { - if (selectActors.contains(selectActor)) - selectActors.remove(selectActor); - else - selectActors.add(selectActor); - } - } - fireSelectionChanged(); - } else if (!e.isControlDown()) { - selectActors.clear(); - fireSelectionChanged(); - } - -// if (e.getClickCount() > 1) -// updatePickRay(e.getX(), e.getY()); - - } - -// private void updatePickRay(double x , double y) { -// Ray ray = vtkUtil.createMouseRay(panel.GetRenderer(), x, y); -// -// -// System.out.println(ray.pos + " " + ray.dir); -// vtkPoints linePoints = new vtkPoints(); -// linePoints.InsertPoint(0,ray.pos.x, ray.pos.y, ray.pos.z); -// linePoints.InsertPoint(1, ray.pos.x + ray.dir.x, ray.pos.y + ray.dir.y, ray.pos.z + ray.dir.z); -// vtkLine aLine = new vtkLine(); -// aLine.GetPointIds().SetId(0, 0); -// aLine.GetPointIds().SetId(1, 1); -// vtkUnstructuredGrid aLineGrid = new vtkUnstructuredGrid(); -// aLineGrid.Allocate(1, 1); -// aLineGrid.InsertNextCell(aLine.GetCellType(), aLine.GetPointIds()); -// aLineGrid.SetPoints(linePoints); -// vtkDataSetMapper aLineMapper = new vtkDataSetMapper(); -// aLineMapper.SetInput(aLineGrid); -// vtkActor aLineActor = new vtkActor(); -// aLineActor.SetMapper(aLineMapper); -// aLineActor.GetProperty().SetDiffuseColor(.2, 1, 1); -// -// if (rayActor != null) { -// panel.GetRenderer().RemoveActor(rayActor); -// rayActor.Delete(); -// } -// rayActor = aLineActor; -// panel.GetRenderer().AddActor(rayActor); -// -// linePoints.Delete(); -// aLine.Delete(); -// aLineGrid.Delete(); -// aLineMapper.Delete(); -// panel.repaint(); -// } -// -// private vtkActor rayActor; - - @Override - public void mouseMoved(MouseEvent e) { - lastX = e.getX(); - lastY = e.getY(); - - if (!panel.isFocusOwner()) - return; - List prevHover = new ArrayList(); - prevHover.addAll(hoverActor); - hoverActor.clear(); - vtkProp pick[] = panel.pick(e.getX(),e.getY()); - if (pick != null) { - for (vtkProp p : pick) - hoverActor.add(p); - } - - if (!prevHover.containsAll(hoverActor) || !hoverActor.containsAll(prevHover)) { - fireHoverChanged(); - } - } - - public List getSelectActor() { - return selectActors; - } - - public List getHoverActor() { - return hoverActor; - } - - private List selectionListeners = new ArrayList(); - - @Override - public void addSelectionChangedListener(ISelectionChangedListener listener) { - selectionListeners.add(listener); - } - - @Override - public ISelection getSelection() { - return new StructuredSelection(selectActors); - } - - @Override - public void removeSelectionChangedListener( - ISelectionChangedListener listener) { - selectionListeners.remove(listener); - } - - @Override - public void setSelection(ISelection selection) { - setSelection(selection, false); - - } - - public void setSelection(ISelection selection, boolean fire) { - Collection selectedProps = AdaptationUtils.adaptToCollection(selection, vtkProp.class); - - selectActors.clear(); - selectActors.addAll(selectedProps); - if (fire) - fireSelectionChanged(); - } - - private void fireSelectionChanged() { - Display.getDefault().asyncExec(new Runnable() { - @Override - public void run() { - - SelectionChangedEvent evt = new SelectionChangedEvent(vtkCameraAndSelectorAction.this, new StructuredSelection(selectActors)); - for (ISelectionChangedListener l :selectionListeners) { - l.selectionChanged(evt); - } - - } - }); - } - - - private List hoverListeners = new ArrayList(); - - - public void addHoverChangedListener(ISelectionChangedListener listener) { - hoverListeners.add(listener); - } - - - public ISelection getHoverSelection() { - return new StructuredSelection(hoverActor); - } - - public void removeHoverChangedListener( - ISelectionChangedListener listener) { - hoverListeners.remove(listener); - } - - private void fireHoverChanged() { - Display.getDefault().asyncExec(new Runnable() { - @Override - public void run() { - StructuredSelection sel = null; - if (hoverActor == null) - sel = new StructuredSelection(); - else - sel = new StructuredSelection(hoverActor); - SelectionChangedEvent evt = new SelectionChangedEvent(vtkCameraAndSelectorAction.this, sel); - for (ISelectionChangedListener l :hoverListeners) { - l.selectionChanged(evt); - } - - } - }); - } - - -} +/******************************************************************************* + * Copyright (c) 2012, 2013 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.g3d.vtk.action; + +import java.awt.event.InputEvent; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.swt.widgets.Display; +import org.simantics.g3d.tools.AdaptationUtils; +import org.simantics.g3d.vtk.common.InteractiveVtkPanel; + +import vtk.vtkCamera; +import vtk.vtkProp; +import vtk.vtkRenderWindow; +import vtk.vtkRenderer; + +public class vtkCameraAndSelectorAction extends vtkAction implements ISelectionProvider { + + protected vtkRenderer ren; + protected int lastX; + protected int lastY; + protected vtkRenderWindow rw; + protected vtkCamera cam; + protected int InteractionMode = 1; + + protected double activeRate = 5.0; + protected double passiveRate = 0.01; + protected boolean doNotRotate = true; + + public vtkCameraAndSelectorAction(InteractiveVtkPanel panel) { + super(panel); + this.ren = panel.GetRenderer(); + this.rw = panel.GetRenderWindow(); + this.cam = ren.GetActiveCamera(); + } + + public void Lock() { + panel.lock(); + } + + public void UnLock() { + panel.unlock(); + } + + public void InteractionModeRotate() + { + this.InteractionMode = 1; + } + + public void InteractionModeTranslate() + { + this.InteractionMode = 2; + } + + public void InteractionModeZoom() + { + this.InteractionMode = 3; + } + + public void resetCameraClippingRange() { + Lock(); + ren.ResetCameraClippingRange(); + UnLock(); + } + + public void resetCamera() { + Lock(); + ren.ResetCamera(); + UnLock(); + } + + public void mousePressed(MouseEvent e) + { + + if (ren.VisibleActorCount() == 0) return; + rw.SetDesiredUpdateRate(activeRate); + lastX = e.getX(); + lastY = e.getY(); + if ((e.getModifiers()==InputEvent.BUTTON2_MASK) || + (e.getModifiers()==(InputEvent.BUTTON1_MASK | InputEvent.SHIFT_MASK))) + { + InteractionModeTranslate(); + } + else if (e.getModifiers()==InputEvent.BUTTON3_MASK) + { + InteractionModeZoom(); + } + else + { + InteractionModeRotate(); + } + } + + public void mouseReleased(MouseEvent e) + { + rw.SetDesiredUpdateRate(passiveRate); + } + + + + public void mouseDragged(MouseEvent e) + { + if (ren.VisibleActorCount() == 0) return; + int x = e.getX(); + int y = e.getY(); + // rotate + if (this.InteractionMode == 1) + { + cam.Azimuth(lastX - x); + cam.Elevation(y - lastY); + if (doNotRotate) + cam.SetRoll(0); + cam.OrthogonalizeViewUp(); + resetCameraClippingRange(); + panel.UpdateLight(); + } + // translate + if (this.InteractionMode == 2) + { + double FPoint[]; + double PPoint[]; + double APoint[] = new double[3]; + double RPoint[]; + double focalDepth; + + // get the current focal point and position + FPoint = cam.GetFocalPoint(); + PPoint = cam.GetPosition(); + + // calculate the focal depth since we'll be using it a lot + ren.SetWorldPoint(FPoint[0],FPoint[1],FPoint[2],1.0); + ren.WorldToDisplay(); + focalDepth = ren.GetDisplayPoint()[2]; + + APoint[0] = rw.GetSize()[0]/2.0 + (x - lastX); + APoint[1] = rw.GetSize()[1]/2.0 - (y - lastY); + APoint[2] = focalDepth; + ren.SetDisplayPoint(APoint); + ren.DisplayToWorld(); + RPoint = ren.GetWorldPoint(); + if (RPoint[3] != 0.0) + { + RPoint[0] = RPoint[0]/RPoint[3]; + RPoint[1] = RPoint[1]/RPoint[3]; + RPoint[2] = RPoint[2]/RPoint[3]; + } + + /* + * Compute a translation vector, moving everything 1/2 + * the distance to the cursor. (Arbitrary scale factor) + */ + cam.SetFocalPoint( + (FPoint[0]-RPoint[0])/2.0 + FPoint[0], + (FPoint[1]-RPoint[1])/2.0 + FPoint[1], + (FPoint[2]-RPoint[2])/2.0 + FPoint[2]); + cam.SetPosition( + (FPoint[0]-RPoint[0])/2.0 + PPoint[0], + (FPoint[1]-RPoint[1])/2.0 + PPoint[1], + (FPoint[2]-RPoint[2])/2.0 + PPoint[2]); + resetCameraClippingRange(); + } + // zoom + if (this.InteractionMode == 3) + { + double zoomFactor; + //double clippingRange[]; + + zoomFactor = Math.pow(1.02,(y - lastY)); + if (cam.GetParallelProjection() == 1) + { + cam.SetParallelScale(cam.GetParallelScale()/zoomFactor); + } + else + { + cam.Dolly(zoomFactor); + resetCameraClippingRange(); + } + } + lastX = x; + lastY = y; + panel.Render(); + } + + + private List selectActors = new ArrayList(); + private List hoverActor = new ArrayList(); + + @Override + public void mouseClicked(MouseEvent e) { + if (!panel.isFocusOwner()) + return; + if (e.getButton() != MouseEvent.BUTTON1) + return; + vtkProp spick[] = panel.pick(e.getX(), e.getY()); + if (spick != null && spick.length > 0) { + for (vtkProp selectActor : spick) { + if (!e.isControlDown()) { + selectActors.clear(); + selectActors.add(selectActor); + } else { + if (selectActors.contains(selectActor)) + selectActors.remove(selectActor); + else + selectActors.add(selectActor); + } + } + fireSelectionChanged(); + } else if (!e.isControlDown()) { + selectActors.clear(); + fireSelectionChanged(); + } + +// if (e.getClickCount() > 1) +// updatePickRay(e.getX(), e.getY()); + + } + +// private void updatePickRay(double x , double y) { +// Ray ray = vtkUtil.createMouseRay(panel.GetRenderer(), x, y); +// +// +// System.out.println(ray.pos + " " + ray.dir); +// vtkPoints linePoints = new vtkPoints(); +// linePoints.InsertPoint(0,ray.pos.x, ray.pos.y, ray.pos.z); +// linePoints.InsertPoint(1, ray.pos.x + ray.dir.x, ray.pos.y + ray.dir.y, ray.pos.z + ray.dir.z); +// vtkLine aLine = new vtkLine(); +// aLine.GetPointIds().SetId(0, 0); +// aLine.GetPointIds().SetId(1, 1); +// vtkUnstructuredGrid aLineGrid = new vtkUnstructuredGrid(); +// aLineGrid.Allocate(1, 1); +// aLineGrid.InsertNextCell(aLine.GetCellType(), aLine.GetPointIds()); +// aLineGrid.SetPoints(linePoints); +// vtkDataSetMapper aLineMapper = new vtkDataSetMapper(); +// aLineMapper.SetInput(aLineGrid); +// vtkActor aLineActor = new vtkActor(); +// aLineActor.SetMapper(aLineMapper); +// aLineActor.GetProperty().SetDiffuseColor(.2, 1, 1); +// +// if (rayActor != null) { +// panel.GetRenderer().RemoveActor(rayActor); +// rayActor.Delete(); +// } +// rayActor = aLineActor; +// panel.GetRenderer().AddActor(rayActor); +// +// linePoints.Delete(); +// aLine.Delete(); +// aLineGrid.Delete(); +// aLineMapper.Delete(); +// panel.repaint(); +// } +// +// private vtkActor rayActor; + + @Override + public void mouseMoved(MouseEvent e) { + lastX = e.getX(); + lastY = e.getY(); + + if (!panel.isFocusOwner()) + return; + List prevHover = new ArrayList(); + prevHover.addAll(hoverActor); + hoverActor.clear(); + vtkProp pick[] = panel.pick(e.getX(),e.getY()); + if (pick != null) { + for (vtkProp p : pick) + hoverActor.add(p); + } + + if (!prevHover.containsAll(hoverActor) || !hoverActor.containsAll(prevHover)) { + fireHoverChanged(); + } + } + + public List getSelectActor() { + return selectActors; + } + + public List getHoverActor() { + return hoverActor; + } + + private List selectionListeners = new ArrayList(); + + @Override + public void addSelectionChangedListener(ISelectionChangedListener listener) { + selectionListeners.add(listener); + } + + @Override + public ISelection getSelection() { + return new StructuredSelection(selectActors); + } + + @Override + public void removeSelectionChangedListener( + ISelectionChangedListener listener) { + selectionListeners.remove(listener); + } + + @Override + public void setSelection(ISelection selection) { + setSelection(selection, false); + + } + + public void setSelection(ISelection selection, boolean fire) { + Collection selectedProps = AdaptationUtils.adaptToCollection(selection, vtkProp.class); + + selectActors.clear(); + selectActors.addAll(selectedProps); + if (fire) + fireSelectionChanged(); + } + + private void fireSelectionChanged() { + Display.getDefault().asyncExec(new Runnable() { + @Override + public void run() { + + SelectionChangedEvent evt = new SelectionChangedEvent(vtkCameraAndSelectorAction.this, new StructuredSelection(selectActors)); + for (ISelectionChangedListener l :selectionListeners) { + l.selectionChanged(evt); + } + + } + }); + } + + + private List hoverListeners = new ArrayList(); + + + public void addHoverChangedListener(ISelectionChangedListener listener) { + hoverListeners.add(listener); + } + + + public ISelection getHoverSelection() { + return new StructuredSelection(hoverActor); + } + + public void removeHoverChangedListener( + ISelectionChangedListener listener) { + hoverListeners.remove(listener); + } + + private void fireHoverChanged() { + Display.getDefault().asyncExec(new Runnable() { + @Override + public void run() { + StructuredSelection sel = null; + if (hoverActor == null) + sel = new StructuredSelection(); + else + sel = new StructuredSelection(hoverActor); + SelectionChangedEvent evt = new SelectionChangedEvent(vtkCameraAndSelectorAction.this, sel); + for (ISelectionChangedListener l :hoverListeners) { + l.selectionChanged(evt); + } + + } + }); + } + + public void focus(double x, double y, double z) { + Lock(); + cam.SetFocalPoint(x, y, z); + UnLock(); + } + + +} diff --git a/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/common/ContextMenuListener.java b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/common/ContextMenuListener.java new file mode 100644 index 00000000..3f42fca1 --- /dev/null +++ b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/common/ContextMenuListener.java @@ -0,0 +1,32 @@ +package org.simantics.g3d.vtk.common; + +import java.awt.event.MouseEvent; + +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Menu; + +import vtk.vtkPanel; + +public class ContextMenuListener extends java.awt.event.MouseAdapter{ + + vtkPanel panel; + Menu contextMenu; + + public ContextMenuListener(vtkPanel panel, Menu contextMenu) { + this.panel = panel; + this.contextMenu = contextMenu; + this.panel.addMouseListener(this); + } + @Override + public void mouseClicked(final MouseEvent e) { + if (e.getButton() == java.awt.event.MouseEvent.BUTTON3) { + Display.getDefault().asyncExec(new Runnable() { + public void run() { + contextMenu.setLocation(e.getXOnScreen(), e.getYOnScreen()); + contextMenu.setVisible(true); + } + }); + } + } + +} diff --git a/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/utils/AxesDisplay.java b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/utils/AxesDisplay.java new file mode 100644 index 00000000..ed1a503a --- /dev/null +++ b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/utils/AxesDisplay.java @@ -0,0 +1,48 @@ +package org.simantics.g3d.vtk.utils; + +import org.simantics.g3d.vtk.common.InteractiveVtkPanel; + +import vtk.vtkAxesActor; +import vtk.vtkOrientationMarkerWidget; + +public class AxesDisplay { + + + private InteractiveVtkPanel panel; + + public AxesDisplay(InteractiveVtkPanel panel) { + this.panel = panel; + } + + public void show() { + vtkAxesActor axes = new vtkAxesActor(); + axes.GetXAxisCaptionActor2D().GetCaptionTextProperty().SetColor(0,0,0); + axes.GetYAxisCaptionActor2D().GetCaptionTextProperty().SetColor(0,0,0); + axes.GetZAxisCaptionActor2D().GetCaptionTextProperty().SetColor(0,0,0); + axes.GetXAxisCaptionActor2D().GetCaptionTextProperty().SetShadow(0); + axes.GetYAxisCaptionActor2D().GetCaptionTextProperty().SetShadow(0); + axes.GetZAxisCaptionActor2D().GetCaptionTextProperty().SetShadow(0); + axes.GetXAxisCaptionActor2D().GetCaptionTextProperty().ItalicOff(); + axes.GetYAxisCaptionActor2D().GetCaptionTextProperty().ItalicOff(); + axes.GetZAxisCaptionActor2D().GetCaptionTextProperty().ItalicOff(); + axes.GetXAxisCaptionActor2D().GetCaptionTextProperty().Delete(); + axes.GetYAxisCaptionActor2D().GetCaptionTextProperty().Delete(); + axes.GetZAxisCaptionActor2D().GetCaptionTextProperty().Delete(); + axes.GetXAxisCaptionActor2D().Delete(); + axes.GetYAxisCaptionActor2D().Delete(); + axes.GetZAxisCaptionActor2D().Delete(); + vtkOrientationMarkerWidget widget = new vtkOrientationMarkerWidget(); + widget.SetOutlineColor(0.9300, 0.5700, 0.1300 ); + widget.SetOrientationMarker(axes); + widget.SetInteractor(panel.getRenderWindowInteractor()); + //widget.SetViewport(0.8, 0.0, 1.0, 0.2); // bottom right + //widget.SetViewport(0.0, 0.0, 0.4, 0.4); + widget.SetViewport(0.0, 0.0, 0.2, 0.2); // bottom left + widget.SetEnabled(1); + widget.InteractiveOff(); + + panel.addDeletable(widget); + panel.addDeletable(axes); + } + +} 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 9d0c3b82..618e0853 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/editor/Plant3DEditor.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/editor/Plant3DEditor.java @@ -31,11 +31,13 @@ import org.simantics.g3d.vtk.action.RemoveAction; import org.simantics.g3d.vtk.action.RotateAction; import org.simantics.g3d.vtk.action.TranslateAction; import org.simantics.g3d.vtk.action.vtkCameraAndSelectorAction; +import org.simantics.g3d.vtk.common.ContextMenuListener; import org.simantics.g3d.vtk.common.HoverHighlighter; import org.simantics.g3d.vtk.common.InteractiveVtkPanel; import org.simantics.g3d.vtk.common.NodeSelectionProvider2; import org.simantics.g3d.vtk.common.SelectionHighlighter; import org.simantics.g3d.vtk.shape.vtkShape; +import org.simantics.g3d.vtk.utils.AxesDisplay; import org.simantics.g3d.vtk.utils.vtkPanelUtil; import org.simantics.objmap.graph.IMapping; import org.simantics.objmap.graph.Mappings; @@ -128,21 +130,8 @@ public class Plant3DEditor extends ResourceEditorPart { component.syncPopulate(); - panel.addMouseListener(new java.awt.event.MouseAdapter() { - @Override - public void mouseClicked(final java.awt.event.MouseEvent e) { - if (e.getButton() == java.awt.event.MouseEvent.BUTTON3) { - Display.getDefault().asyncExec(new Runnable() { - public void run() { - contextMenu.setLocation(e.getXOnScreen(), e.getYOnScreen()); - contextMenu.setVisible(true); - } - }); - } - } - }); + new ContextMenuListener(panel, contextMenu); - cameraAction = new vtkCameraAndSelectorAction(panel); panel.setDefaultAction(cameraAction); panel.useDefaultAction(); @@ -310,8 +299,6 @@ public class Plant3DEditor extends ResourceEditorPart { vtkSequencePass seq = new vtkSequencePass(); seq.SetPasses(passes); - - vtkCameraPass cameraPass = new vtkCameraPass(); cameraPass.SetDelegatePass(seq); @@ -335,34 +322,8 @@ public class Plant3DEditor extends ResourceEditorPart { ren1.AddActor(grid); panel.addDeletable(grid); - { - vtkAxesActor axes = new vtkAxesActor(); - axes.GetXAxisCaptionActor2D().GetCaptionTextProperty().SetColor(0,0,0); - axes.GetYAxisCaptionActor2D().GetCaptionTextProperty().SetColor(0,0,0); - axes.GetZAxisCaptionActor2D().GetCaptionTextProperty().SetColor(0,0,0); - axes.GetXAxisCaptionActor2D().GetCaptionTextProperty().SetShadow(0); - axes.GetYAxisCaptionActor2D().GetCaptionTextProperty().SetShadow(0); - axes.GetZAxisCaptionActor2D().GetCaptionTextProperty().SetShadow(0); - axes.GetXAxisCaptionActor2D().GetCaptionTextProperty().ItalicOff(); - axes.GetYAxisCaptionActor2D().GetCaptionTextProperty().ItalicOff(); - axes.GetZAxisCaptionActor2D().GetCaptionTextProperty().ItalicOff(); - axes.GetXAxisCaptionActor2D().GetCaptionTextProperty().Delete(); - axes.GetYAxisCaptionActor2D().GetCaptionTextProperty().Delete(); - axes.GetZAxisCaptionActor2D().GetCaptionTextProperty().Delete(); - axes.GetXAxisCaptionActor2D().Delete(); - axes.GetYAxisCaptionActor2D().Delete(); - axes.GetZAxisCaptionActor2D().Delete(); - vtkOrientationMarkerWidget widget = new vtkOrientationMarkerWidget(); - widget.SetOutlineColor(0.9300, 0.5700, 0.1300 ); - widget.SetOrientationMarker(axes); - widget.SetInteractor(panel.getRenderWindowInteractor()); - //widget.SetViewport(0.8, 0.0, 1.0, 0.2); // bottom right - //widget.SetViewport(0.0, 0.0, 0.4, 0.4); - widget.SetViewport(0.0, 0.0, 0.2, 0.2); // bottom left - widget.SetEnabled(1); - widget.InteractiveOff(); - } - + AxesDisplay axesDisplay = new AxesDisplay(panel); + axesDisplay.show(); } -- 2.45.2