X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d.vtk%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fvtk%2Fhandlers%2FCameraPositionHandler.java;h=e3697be2a8295992bb63adb23e05f3bd764a6ad1;hb=efb52587babd1b858c8e77fedc44a5b4ef0c1088;hp=c3e0e54a98f29abd910b5e81739952086e6f1a3e;hpb=84132a1d750c45f9161afbd58b78572964e50d26;p=simantics%2F3d.git diff --git a/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/handlers/CameraPositionHandler.java b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/handlers/CameraPositionHandler.java index c3e0e54a..e3697be2 100644 --- a/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/handlers/CameraPositionHandler.java +++ b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/handlers/CameraPositionHandler.java @@ -21,7 +21,9 @@ 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.vtk.action.vtkAction; import org.simantics.g3d.vtk.common.VtkView; +import org.simantics.g3d.vtk.swt.vtkCameraAndSelectorAction; import org.simantics.utils.threads.ThreadUtils; public class CameraPositionHandler extends AbstractHandler { @@ -31,17 +33,17 @@ public class CameraPositionHandler extends AbstractHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { - - final IWorkbenchPart ap = HandlerUtil.getActiveEditor(event); - final VtkView panel = (VtkView)ap.getAdapter(VtkView.class); - - String param = event.getParameter("org.simantics.g3d.viewDirection"); - String vals[] = param.split(","); - final Vector3d direction = new Vector3d(Double.parseDouble(vals[0]),Double.parseDouble(vals[1]),Double.parseDouble(vals[2])); - - - ThreadUtils.asyncExec(panel.getThreadQueue(), new Runnable() { - + + final IWorkbenchPart ap = HandlerUtil.getActiveEditor(event); + final VtkView panel = (VtkView)ap.getAdapter(VtkView.class); + + String param = event.getParameter("org.simantics.g3d.viewDirection"); + String vals[] = param.split(","); + final Vector3d direction = new Vector3d(Double.parseDouble(vals[0]),Double.parseDouble(vals[1]),Double.parseDouble(vals[2])); + + + ThreadUtils.asyncExec(panel.getThreadQueue(), new Runnable() { + @Override public void run() { @@ -51,26 +53,33 @@ public class CameraPositionHandler extends AbstractHandler { Vector3d dir = new Vector3d(pos); dir.sub(focal); double distance = dir.length(); - + dir.set(direction); dir.scale(distance); dir.add(focal); + panel.getRenderer().GetActiveCamera().SetPosition(dir.x, dir.y, dir.z); - if (Math.abs(direction.dot(new Vector3d(0,1,0))) < 0.95) - panel.getRenderer().GetActiveCamera().SetViewUp(0, 1, 0); - else - panel.getRenderer().GetActiveCamera().SetViewUp(1, 0, 0); - panel.getRenderer().ResetCameraClippingRange(); + vtkAction action = panel.getDefaultAction(); + if (action instanceof vtkCameraAndSelectorAction) + ((vtkCameraAndSelectorAction)action).focus(focal.x, focal.y, focal.z); + else { + if (Math.abs(direction.dot(new Vector3d(0,1,0))) < 0.95) + panel.getRenderer().GetActiveCamera().SetViewUp(0, 1, 0); + else + panel.getRenderer().GetActiveCamera().SetViewUp(1, 0, 0); + + panel.getRenderer().ResetCameraClippingRange(); + } //panel.UpdateLight(); panel.refresh(); } - }); - - return null; - + }); + + return null; + } - + }