package org.simantics.g3d.vtk.swt; import java.util.Collection; import org.eclipse.jface.action.Action; import org.simantics.g3d.vtk.Activator; import org.simantics.g3d.vtk.common.VtkView; import vtk.vtkProp; import vtk.vtkProp3D; public class FocusAction extends Action { VtkView view; vtkCameraAndSelectorAction cameraAndSelectorAction; Collection props; public FocusAction(VtkView view, vtkCameraAndSelectorAction cameraAndSelectorAction) { super("Focus"); setImageDescriptor(Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/eye.png")); this.view = view; this.cameraAndSelectorAction = cameraAndSelectorAction; } public void setProps(Collection props) { this.props = props; } @Override public void run() { view.getThreadQueue().asyncExec(new Runnable() { @Override public void run() { int count = 0; double loc[] = new double[] {0,0,0}; for (vtkProp prop : props) { if (prop instanceof vtkProp3D) { vtkProp3D prop3d = (vtkProp3D)prop; double l[] = prop3d.GetCenter(); for (int i = 0; i < 3; i++) loc[i] = loc[i] + l[i]; count++; } } if (count > 0) { for (int i = 0; i < 3; i++) loc[i] = loc[i] / count; cameraAndSelectorAction.focus(loc[0],loc[1],loc[2]); view.refresh(); } } }); } }