X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d.vtk%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fvtk%2Fhandlers%2FParallelPerspectiveHandler.java;h=59f94c0b638707d689893245505a88bcc7fb321a;hb=HEAD;hp=855a0d145286696194ac03b0511878b7b7d8ab04;hpb=84132a1d750c45f9161afbd58b78572964e50d26;p=simantics%2F3d.git diff --git a/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/handlers/ParallelPerspectiveHandler.java b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/handlers/ParallelPerspectiveHandler.java index 855a0d14..59f94c0b 100644 --- a/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/handlers/ParallelPerspectiveHandler.java +++ b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/handlers/ParallelPerspectiveHandler.java @@ -11,11 +11,6 @@ *******************************************************************************/ package org.simantics.g3d.vtk.handlers; -import java.util.HashMap; -import java.util.Map; - -import javax.vecmath.Vector3d; - import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.Command; import org.eclipse.core.commands.ExecutionEvent; @@ -26,55 +21,45 @@ import org.simantics.g3d.vtk.common.VtkView; import org.simantics.utils.threads.AWTThread; import org.simantics.utils.threads.ThreadUtils; +import vtk.vtkCamera; +import vtk.vtkRenderer; + public class ParallelPerspectiveHandler extends AbstractHandler { - private Map cameraPos = new HashMap(); - @Override public Object execute(ExecutionEvent event) throws ExecutionException { - Command command = event.getCommand(); - boolean oldValue = HandlerUtil.toggleCommandState(command); - final boolean activate = !oldValue; - - final IWorkbenchPart ap = HandlerUtil.getActiveEditor(event); - final VtkView panel = (VtkView)ap.getAdapter(VtkView.class); - - ThreadUtils.asyncExec(AWTThread.getThreadAccess(), new Runnable() { - + Command command = event.getCommand(); + boolean oldValue = HandlerUtil.toggleCommandState(command); + final boolean activate = !oldValue; + + final IWorkbenchPart ap = HandlerUtil.getActiveEditor(event); + final VtkView panel = (VtkView)ap.getAdapter(VtkView.class); + + ThreadUtils.asyncExec(AWTThread.getThreadAccess(), new Runnable() { + @Override public void run() { + vtkRenderer ren = panel.getRenderer(); + vtkCamera cam = ren.GetActiveCamera(); if (activate){ - Vector3d focal = new Vector3d(panel.getRenderer().GetActiveCamera().GetFocalPoint()); - Vector3d pos = new Vector3d(panel.getRenderer().GetActiveCamera().GetPosition()); - cameraPos.put(panel, pos); - Vector3d dir = new Vector3d(pos); - dir.sub(focal); - dir.normalize(); - dir.scale(100); - dir.add(focal); - panel.getRenderer().GetActiveCamera().SetPosition(dir.x, dir.y, dir.z); - - - panel.getRenderer().GetActiveCamera().SetParallelProjection(1); - panel.getRenderer().ResetCameraClippingRange(); + double distance = cam.GetDistance(); + double angle = cam.GetViewAngle(); + double scale = Math.tan(Math.toRadians(angle / 2)) * distance; + cam.SetParallelScale(scale); + cam.SetParallelProjection(1); + ren.ResetCameraClippingRange(); } else { - panel.getRenderer().GetActiveCamera().SetParallelProjection(0); - Vector3d pos = cameraPos.get(panel); - if (pos != null) { - panel.getRenderer().GetActiveCamera().SetPosition(pos.x, pos.y, pos.z); - } - panel.getRenderer().ResetCameraClippingRange(); - + cam.SetParallelProjection(0); + ren.ResetCameraClippingRange(); } -// panel.UpdateLight(); panel.refresh(); } - }); - - return null; - + }); + + return null; + }