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=70eb3a63d25a3afe94fac46ec31e77b8c91817a8;hpb=53d55c24c779745f188bdb18d32f71d20acb61b2;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 70eb3a63..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,11 +21,12 @@ 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(); @@ -44,30 +40,19 @@ public class ParallelPerspectiveHandler extends AbstractHandler { @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(); }