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 {
@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() {
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;
+
}
-
+
}