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=3ef62df14340e2127ce21fc7ccab1f69f832abc0;hp=43ec97a090dda0c78c4c2b6d6bf205d7b569373b;hpb=eb7456300253668862a71f9d07fb558400e6ace6;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 43ec97a0..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,15 +11,12 @@ *******************************************************************************/ package org.simantics.g3d.vtk.handlers; -import javax.vecmath.Vector3d; - import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.Command; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.handlers.HandlerUtil; -import org.simantics.g3d.math.MathTools; import org.simantics.g3d.vtk.common.VtkView; import org.simantics.utils.threads.AWTThread; import org.simantics.utils.threads.ThreadUtils; @@ -46,37 +43,15 @@ public class ParallelPerspectiveHandler extends AbstractHandler { 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()); - double dist = MathTools.distance(pos, focal); - cam.SetParallelScale(dist/4.0); - // camera must be moved backwards, or graphics get clipped when parallel view is zoomed out - // TODO : is there a better way to do this? - Vector3d dir = new Vector3d(pos); - dir.sub(focal); - dir.normalize(); - dir.scale(100); - dir.add(focal); - cam.SetPosition(dir.x, dir.y, dir.z); - + 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 { - - double scale = cam.GetParallelScale(); cam.SetParallelProjection(0); - - Vector3d focal = new Vector3d(panel.getRenderer().GetActiveCamera().GetFocalPoint()); - Vector3d pos = new Vector3d(panel.getRenderer().GetActiveCamera().GetPosition()); - Vector3d dir = new Vector3d(pos); - dir.sub(focal); - dir.normalize(); - dir.scale(scale*4.0); - dir.add(focal); - cam.SetPosition(dir.x, dir.y, dir.z); ren.ResetCameraClippingRange(); - } panel.refresh();