]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/gizmo/vtkGizmo.java
0fc6dbb26b5fec9b94d398820ae0566bfa7b5834
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / gizmo / vtkGizmo.java
1 /*******************************************************************************\r
2  * Copyright (c) 2012, 2013 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.g3d.vtk.gizmo;\r
13 \r
14 import java.util.Collection;\r
15 \r
16 import javax.vecmath.AxisAngle4d;\r
17 import javax.vecmath.Tuple3d;\r
18 import javax.vecmath.Vector3d;\r
19 \r
20 import org.simantics.g3d.gizmo.Gizmo;\r
21 import org.simantics.g3d.math.MathTools;\r
22 \r
23 import vtk.vtkProp;\r
24 import vtk.vtkProp3D;\r
25 import vtk.vtkRenderer;\r
26 \r
27 public abstract class vtkGizmo implements Gizmo<vtkProp> {\r
28 \r
29         private vtkRenderer ren1;\r
30         private Collection<vtkProp> gizmo;\r
31         \r
32         private Tuple3d position;\r
33         private AxisAngle4d orientation;\r
34         private Tuple3d scale;\r
35         \r
36         @Override\r
37         public void attach(Object renderingPart) {\r
38                 if (ren1 != null)\r
39                         throw new RuntimeException("Gizmo is attached");\r
40                 ren1 = (vtkRenderer)renderingPart;\r
41                 attachActors();\r
42         }\r
43         \r
44         @Override\r
45         public void deattach() {\r
46                 if (ren1 == null)\r
47                         throw new RuntimeException("Gizmo is not attached");\r
48                 deattachActors();\r
49                 ren1 = null;\r
50         }\r
51         \r
52         public boolean isAttached() {\r
53                 return (ren1 != null);\r
54         }\r
55         \r
56         protected void attachActors() {\r
57                 gizmo = getGizmo();\r
58                 for (vtkProp p : gizmo) {\r
59                         ren1.AddActor(p);\r
60                 }\r
61                 if (position != null)\r
62                         setPosition(position);\r
63                 if (orientation != null)\r
64                         setRotation(orientation);\r
65                 if (scale != null)\r
66                         setScale(scale);\r
67         }\r
68         \r
69         protected void deattachActors() {\r
70                 for (vtkProp p : gizmo) {\r
71                         ren1.RemoveActor(p);\r
72                 }\r
73         }\r
74         \r
75         @Override\r
76         public boolean isPartOf(vtkProp pickedObject) {\r
77                 for (vtkProp prop : gizmo) {\r
78                         if (prop.equals(pickedObject))\r
79                                 return true;\r
80                 }\r
81                 return false;\r
82         }\r
83         \r
84          public void setPosition(Tuple3d position) {\r
85                  this.position = position;\r
86                  for (vtkProp p : gizmo) {\r
87                          ((vtkProp3D)p).SetPosition(position.x, position.y, position.z);\r
88                  }\r
89          }\r
90          \r
91          public void setRotation(AxisAngle4d q) {\r
92                  this.orientation = q;\r
93                  for (vtkProp p : gizmo) {\r
94                          ((vtkProp3D)p).SetOrientation(0,0,0);\r
95                          ((vtkProp3D)p).RotateWXYZ(MathTools.radToDeg(q.angle), q.x, q.y, q.z);\r
96                  }\r
97          }\r
98         \r
99          \r
100          public void setScale(Tuple3d s) {\r
101                  this.scale = s;\r
102                  for (vtkProp p : gizmo) {\r
103                          ((vtkProp3D)p).SetScale(s.x, s.y, s.z);\r
104                  }\r
105          }\r
106          \r
107          public void setScale(double s) {\r
108                  this.scale = new Vector3d(s,s,s);\r
109                  for (vtkProp p : gizmo) {\r
110                          ((vtkProp3D)p).SetScale(s, s, s);\r
111                  }\r
112          }\r
113         \r
114         public abstract Collection<vtkProp> getGizmo();\r
115         \r
116 //      public double[] add(double[] color1, double[] color2) {\r
117 //              double[] result = new double[]{color1[0]+color2[0],color1[1],+color2[1],color1[2]+color2[2]};\r
118 //              return result;\r
119 //      }\r
120 //      \r
121 //      public double[] add(double[] color1, double[] color2, double[] color3) {\r
122 //              double[] result = new double[]{color1[0]+color2[0]+color3[0],color1[1],+color2[1]+color3[1],color1[2]+color2[2]+color3[2]};\r
123 //              return result;\r
124 //      }\r
125         \r
126         public double[] add(double[]... color) {\r
127                 double result[] = new double[]{0,0,0};\r
128                 for (double c[] : color) {\r
129                         for (int i = 0; i < 3; i++)\r
130                                 result[i] += c[i];\r
131                 }\r
132                 \r
133                 return result;\r
134         }\r
135         \r
136         \r
137         public vtkRenderer getRenderer() {\r
138                 return ren1;\r
139         }\r
140         \r
141         \r
142         \r
143 }\r