]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/handlers/ParallelPerspectiveHandler.java
Remove dependencies on log4j
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / handlers / ParallelPerspectiveHandler.java
index 70eb3a63d25a3afe94fac46ec31e77b8c91817a8..59f94c0b638707d689893245505a88bcc7fb321a 100644 (file)
  *******************************************************************************/
 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<VtkView,Vector3d> cameraPos = new HashMap<VtkView, Vector3d>();
-       
        @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();
 
                        }