+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 org.simantics.utils.threads.AWTThread;
+
+import vtk.vtkProp;
+import vtk.vtkProp3D;
+
+public class FocusAction extends Action {
+
+ VtkView view;
+ vtkCameraAndSelectorAction cameraAndSelectorAction;
+ Collection<vtkProp> 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<vtkProp> 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();
+ }
+
+ }
+ });
+ }
+}
\ No newline at end of file