]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/gizmo/vtkGizmo.java
3D framework (Simca 2012)
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / gizmo / vtkGizmo.java
1 package org.simantics.g3d.vtk.gizmo;\r
2 \r
3 import java.util.Collection;\r
4 \r
5 import javax.vecmath.AxisAngle4d;\r
6 import javax.vecmath.Tuple3d;\r
7 import javax.vecmath.Vector3d;\r
8 \r
9 import org.simantics.g3d.gizmo.Gizmo;\r
10 import org.simantics.g3d.math.MathTools;\r
11 \r
12 import vtk.vtkProp;\r
13 import vtk.vtkProp3D;\r
14 import vtk.vtkRenderer;\r
15 \r
16 public abstract class vtkGizmo implements Gizmo<vtkProp> {\r
17 \r
18         private vtkRenderer ren1;\r
19         private Collection<vtkProp> gizmo;\r
20         \r
21         private Tuple3d position;\r
22         private AxisAngle4d orientation;\r
23         private Tuple3d scale;\r
24         \r
25         @Override\r
26         public void attach(Object renderingPart) {\r
27                 if (ren1 != null)\r
28                         throw new RuntimeException("Gizmo is attached");\r
29                 ren1 = (vtkRenderer)renderingPart;\r
30                 attachActors();\r
31         }\r
32         \r
33         @Override\r
34         public void deattach() {\r
35                 if (ren1 == null)\r
36                         throw new RuntimeException("Gizmo is not attached");\r
37                 deattachActors();\r
38                 ren1 = null;\r
39         }\r
40         \r
41         public boolean isAttached() {\r
42                 return (ren1 != null);\r
43         }\r
44         \r
45         protected void attachActors() {\r
46                 gizmo = getGizmo();\r
47                 for (vtkProp p : gizmo) {\r
48                         ren1.AddActor(p);\r
49                 }\r
50                 if (position != null)\r
51                         setPosition(position);\r
52                 if (orientation != null)\r
53                         setRotation(orientation);\r
54                 if (scale != null)\r
55                         setScale(scale);\r
56         }\r
57         \r
58         protected void deattachActors() {\r
59                 for (vtkProp p : gizmo) {\r
60                         ren1.RemoveActor(p);\r
61                 }\r
62         }\r
63         \r
64         @Override\r
65         public boolean isPartOf(vtkProp pickedObject) {\r
66                 for (vtkProp prop : gizmo) {\r
67                         if (prop.equals(pickedObject))\r
68                                 return true;\r
69                 }\r
70                 return false;\r
71         }\r
72         \r
73          public void setPosition(Tuple3d position) {\r
74                  this.position = position;\r
75                  for (vtkProp p : gizmo) {\r
76                          ((vtkProp3D)p).SetPosition(position.x, position.y, position.z);\r
77                  }\r
78          }\r
79          \r
80          public void setRotation(AxisAngle4d q) {\r
81                  this.orientation = q;\r
82                  for (vtkProp p : gizmo) {\r
83                          ((vtkProp3D)p).SetOrientation(0,0,0);\r
84                          ((vtkProp3D)p).RotateWXYZ(MathTools.radToDeg(q.angle), q.x, q.y, q.z);\r
85                  }\r
86          }\r
87         \r
88          \r
89          public void setScale(Tuple3d s) {\r
90                  this.scale = s;\r
91                  for (vtkProp p : gizmo) {\r
92                          ((vtkProp3D)p).SetScale(s.x, s.y, s.z);\r
93                  }\r
94          }\r
95          \r
96          public void setScale(double s) {\r
97                  this.scale = new Vector3d(s,s,s);\r
98                  for (vtkProp p : gizmo) {\r
99                          ((vtkProp3D)p).SetScale(s, s, s);\r
100                  }\r
101          }\r
102         \r
103         public abstract Collection<vtkProp> getGizmo();\r
104         \r
105 //      public double[] add(double[] color1, double[] color2) {\r
106 //              double[] result = new double[]{color1[0]+color2[0],color1[1],+color2[1],color1[2]+color2[2]};\r
107 //              return result;\r
108 //      }\r
109 //      \r
110 //      public double[] add(double[] color1, double[] color2, double[] color3) {\r
111 //              double[] result = new double[]{color1[0]+color2[0]+color3[0],color1[1],+color2[1]+color3[1],color1[2]+color2[2]+color3[2]};\r
112 //              return result;\r
113 //      }\r
114         \r
115         public double[] add(double[]... color) {\r
116                 double result[] = new double[]{0,0,0};\r
117                 for (double c[] : color) {\r
118                         for (int i = 0; i < 3; i++)\r
119                                 result[i] += c[i];\r
120                 }\r
121                 \r
122                 return result;\r
123         }\r
124         \r
125         \r
126         public vtkRenderer getRenderer() {\r
127                 return ren1;\r
128         }\r
129         \r
130         \r
131         \r
132 }\r