]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/swt/FocusAction.java
97d5abf0306c96e641b4aed039ba0c994dbc9862
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / swt / FocusAction.java
1 package org.simantics.g3d.vtk.swt;
2
3 import java.util.Collection;
4
5 import org.eclipse.jface.action.Action;
6 import org.simantics.g3d.vtk.Activator;
7 import org.simantics.g3d.vtk.common.VtkView;
8 import org.simantics.utils.threads.AWTThread;
9
10 import vtk.vtkProp;
11 import vtk.vtkProp3D;
12
13 public class FocusAction extends Action {
14         
15     VtkView view;
16     vtkCameraAndSelectorAction cameraAndSelectorAction;
17         Collection<vtkProp> props;
18         
19         public FocusAction(VtkView view, vtkCameraAndSelectorAction cameraAndSelectorAction) {
20                 super("Focus");
21                 setImageDescriptor(Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/eye.png"));
22                 this.view = view;
23                 this.cameraAndSelectorAction = cameraAndSelectorAction;
24         }
25         
26         public void setProps(Collection<vtkProp> props) {
27                 this.props = props;
28         }
29         
30         @Override
31         public void run() {
32                 view.getThreadQueue().asyncExec(new Runnable() {
33                         
34                         @Override
35                         public void run() {
36                                 int count = 0;
37                                 double loc[] = new double[] {0,0,0};
38                                 for (vtkProp prop : props) {
39                                         if (prop instanceof vtkProp3D) {
40                                                 vtkProp3D prop3d = (vtkProp3D)prop;
41                                                 double l[] = prop3d.GetCenter();
42                                                 for (int i = 0; i < 3; i++)
43                                                         loc[i] = loc[i] + l[i]; 
44                                                 count++;
45                                         }
46                                 }
47                                 if (count > 0) {
48                                         for (int i = 0; i < 3; i++)
49                                                 loc[i] = loc[i] / count;
50                                         cameraAndSelectorAction.focus(loc[0],loc[1],loc[2]);
51                                         view.refresh();
52                                 }
53                                 
54                         }
55                 });
56         }
57 }