]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/shape/axesActor.java
vtk 8.2.0 API changes
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / shape / axesActor.java
1 /*******************************************************************************
2  * Copyright (c) 2012, 2013 Association for Decentralized Information Management in
3  * Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.g3d.vtk.shape;
13
14 import javax.vecmath.Matrix4d;
15 import javax.vecmath.Point3d;
16
17 import org.simantics.g3d.math.MathTools;
18 import org.simantics.utils.threads.AWTThread;
19 import org.simantics.utils.threads.ThreadUtils;
20
21 import vtk.vtkActor;
22 import vtk.vtkAssembly;
23 import vtk.vtkAxes;
24 import vtk.vtkConeSource;
25 import vtk.vtkLinearTransform;
26 import vtk.vtkMatrix4x4;
27 import vtk.vtkPolyDataMapper;
28 import vtk.vtkProp3D;
29 import vtk.vtkRenderer;
30 import vtk.vtkTextActor;
31 import vtk.vtkTubeFilter;
32
33 public class axesActor extends vtkAssembly implements IvtkVisualObject{
34
35         private vtkRenderer ren;
36         private double axisLength = 0.8;
37         private vtkTextActor xactor, yactor, zactor;
38         private vtkActor tubeActor;
39         private vtkActor xconeActor;
40         private vtkActor yconeActor;
41         private vtkActor zconeActor;
42         private boolean rendered = false;
43
44         public axesActor(vtkRenderer _ren) {
45                 super();
46                 ren = _ren;
47                 createAxes();
48         }
49         
50         public axesActor(vtkRenderer _ren, double axisLength) {
51                 super();
52                 ren = _ren;
53                 this.axisLength = axisLength;
54                 createAxes();
55         }
56
57         public void createAxes() {
58                 vtkAxes axes = new vtkAxes();
59                 axes.SetOrigin(0, 0, 0);
60                 axes.SetScaleFactor(axisLength);
61
62                 xactor = new vtkTextActor();
63                 yactor = new vtkTextActor();
64                 zactor = new vtkTextActor();
65
66                 xactor.SetInput("X");
67                 yactor.SetInput("Y");
68                 zactor.SetInput("Z");
69
70 //              xactor.SetTextScaleModeToViewport();
71 //              yactor.SetTextScaleModeToViewport();
72 //              zactor.SetTextScaleModeToViewport();
73                 xactor.SetTextScaleModeToNone();
74                 yactor.SetTextScaleModeToNone();
75                 zactor.SetTextScaleModeToNone();
76                 
77                 xactor.GetTextProperty().SetColor(0.0, 0.0, 0.0);
78                 xactor.GetTextProperty().ShadowOff();
79                 xactor.GetTextProperty().ItalicOff();
80                 xactor.GetTextProperty().BoldOff();
81
82                 yactor.GetTextProperty().SetColor(0.0, 0.0, 0.0);
83                 yactor.GetTextProperty().ShadowOff();
84                 yactor.GetTextProperty().ItalicOff();
85                 yactor.GetTextProperty().BoldOff();
86
87                 zactor.GetTextProperty().SetColor(0.0, 0.0, 0.0);
88                 zactor.GetTextProperty().ShadowOff();
89                 zactor.GetTextProperty().ItalicOff();
90                 zactor.GetTextProperty().BoldOff();
91                 
92                 xactor.GetTextProperty().Delete();
93                 yactor.GetTextProperty().Delete();
94                 zactor.GetTextProperty().Delete();
95
96                 xactor.SetMaximumLineHeight(0.25);
97                 yactor.SetMaximumLineHeight(0.25);
98                 zactor.SetMaximumLineHeight(0.25);
99                 
100                 xactor.SetPickable(0);
101                 yactor.SetPickable(0);
102                 zactor.SetPickable(0);
103
104                 vtkTubeFilter tube = new vtkTubeFilter();
105                 tube.SetInputData(axes.GetOutput());
106                 tube.SetRadius(0.05 * axisLength);
107                 tube.SetNumberOfSides(8);
108
109                 vtkPolyDataMapper tubeMapper = new vtkPolyDataMapper();
110                 tubeMapper.SetInputData(tube.GetOutput());
111
112                 tubeActor = new vtkActor();
113                 tubeActor.SetMapper(tubeMapper);
114                 tubeActor.PickableOff();
115
116                 int coneRes = 12;
117                 double coneScale = 0.3 * axisLength;
118
119                 // --- x-Cone
120                 vtkConeSource xcone = new vtkConeSource();
121                 xcone.SetResolution(coneRes);
122                 vtkPolyDataMapper xconeMapper = new vtkPolyDataMapper();
123                 xconeMapper.SetInputData(xcone.GetOutput());
124                 xconeActor = new vtkActor();
125                 xconeActor.SetMapper(xconeMapper);
126                 xconeActor.GetProperty().SetColor(1, 0, 0);
127                 xconeActor.SetScale(coneScale, coneScale, coneScale);
128                 xconeActor.SetPosition(axisLength, 0.0, 0.0);
129                 xconeActor.SetPickable(0);
130
131                 // --- y-Cone
132                 vtkConeSource ycone = new vtkConeSource();
133                 ycone.SetResolution(coneRes);
134                 vtkPolyDataMapper yconeMapper = new vtkPolyDataMapper();
135                 yconeMapper.SetInputData(ycone.GetOutput());
136                 yconeActor = new vtkActor();
137                 yconeActor.SetMapper(yconeMapper);
138                 yconeActor.GetProperty().SetColor(1, 1, 0);
139                 yconeActor.RotateZ(90);
140                 yconeActor.SetScale(coneScale, coneScale, coneScale);
141                 yconeActor.SetPosition(0.0, axisLength, 0.0);
142                 yconeActor.SetPickable(0);
143
144                 // --- z-Cone
145                 vtkConeSource zcone = new vtkConeSource();
146                 zcone.SetResolution(coneRes);
147                 vtkPolyDataMapper zconeMapper = new vtkPolyDataMapper();
148                 zconeMapper.SetInputData(zcone.GetOutput());
149                 zconeActor = new vtkActor();
150                 zconeActor.SetMapper(zconeMapper);
151                 zconeActor.GetProperty().SetColor(0, 1, 0);
152                 zconeActor.RotateY(-90);
153                 zconeActor.SetScale(coneScale, coneScale, coneScale);
154                 zconeActor.SetPosition(0.0, 0.0, axisLength);
155                 zconeActor.SetPickable(0);
156
157                 
158                 this.AddPart(tubeActor);
159                 this.AddPart(xconeActor);
160                 this.AddPart(yconeActor);
161                 this.AddPart(zconeActor);
162                 
163                 tube.GetOutput().Delete();
164                 xcone.GetOutput().Delete();
165                 ycone.GetOutput().Delete();
166                 zcone.GetOutput().Delete();
167                 axes.GetOutput().Delete();
168                 axes.Delete();
169                 tubeMapper.Delete();
170                 tube.Delete();
171                 xcone.Delete();
172                 ycone.Delete();
173                 zcone.Delete();
174                 xconeMapper.Delete();
175                 yconeMapper.Delete();
176                 zconeMapper.Delete();
177                 
178                 xconeActor.GetProperty().Delete();
179                 yconeActor.GetProperty().Delete();
180                 zconeActor.GetProperty().Delete();
181         }
182         
183         public void addToRenderer() {
184                 if (rendered)
185                         return;
186                 rendered = true;
187                 
188                 ren.AddActor2D(xactor);
189                 ren.AddActor2D(yactor);
190                 ren.AddActor2D(zactor);
191                 
192                 
193                 ren.AddActor(this);
194         }
195         
196         public void removeFromRenderer() {
197                 if (!rendered)
198                         return;
199                 rendered = false;
200                 ren.RemoveActor2D(xactor);
201                 ren.RemoveActor2D(yactor);
202                 ren.RemoveActor2D(zactor);
203                 ren.RemoveActor(this);
204         }
205         
206         public boolean isRendered() {
207                 return rendered;
208         }
209
210         public void setAxesVisibility(boolean ison) {
211                 this.SetVisibility(ison ? 1 : 0);
212                 xactor.SetVisibility(ison ? 1 : 0);
213                 yactor.SetVisibility(ison ? 1 : 0);
214                 zactor.SetVisibility(ison ? 1 : 0);
215         }
216         
217         private boolean labelVisible = true;
218         
219         public void setLabelVisibility(boolean ison) {
220                 xactor.SetVisibility(ison ? 1 : 0);
221                 yactor.SetVisibility(ison ? 1 : 0);
222                 zactor.SetVisibility(ison ? 1 : 0);
223                 labelVisible = ison;
224                 if (labelVisible)
225                         updateTextLoc();
226         }
227         
228         Matrix4d m = new Matrix4d();
229         double mat[] = new double[16];
230         Point3d x = new Point3d();
231         Point3d y = new Point3d();
232         Point3d z = new Point3d();
233         
234         private void updateTextLoc() {
235                 if (!labelVisible)
236                         return;
237                 xactor.GetPositionCoordinate().SetCoordinateSystemToWorld();
238                 yactor.GetPositionCoordinate().SetCoordinateSystemToWorld();
239                 zactor.GetPositionCoordinate().SetCoordinateSystemToWorld();
240                 
241                 GetMatrix(mat);
242                 MathTools.set(m, mat);
243                 x.set(axisLength, 0,0);
244                 y.set(0,axisLength, 0);
245                 z.set(0,0,axisLength);
246                 
247                 m.transform(x);
248                 m.transform(y);
249                 m.transform(z);
250                 xactor.GetPositionCoordinate().SetValue(x.x, x.y, x.z);
251                 yactor.GetPositionCoordinate().SetValue(y.x, y.y, y.z);
252                 zactor.GetPositionCoordinate().SetValue(z.x, z.y, z.z);
253                 
254                 xactor.GetPositionCoordinate().Delete();
255                 yactor.GetPositionCoordinate().Delete();
256                 zactor.GetPositionCoordinate().Delete();
257         }
258         
259         @Override
260         public void SetPickable(int id0) {
261                 super.SetPickable(id0);
262                 tubeActor.SetPickable(id0);
263                 xconeActor.SetPickable(id0);
264                 yconeActor.SetPickable(id0);
265                 zconeActor.SetPickable(id0);
266
267         }
268         
269         @Override
270         public void SetOrientation(double id0, double id1, double id2) {
271                 super.SetOrientation(id0, id1, id2);
272                 updateTextLoc();
273         }
274         
275         @Override
276         public void RotateWXYZ(double id0, double id1, double id2, double id3) {
277                 super.RotateWXYZ(id0, id1, id2, id3);
278                 updateTextLoc();
279         }
280         
281         @Override
282         public void SetPosition(double[] id0) {
283                 super.SetPosition(id0);
284                 updateTextLoc();
285         }
286         
287         @Override
288         public void SetPosition(double id0, double id1, double id2) {
289                 super.SetPosition(id0, id1, id2);
290                 updateTextLoc();
291         }
292         
293         @Override
294         public void SetOrientation(double[] id0) {
295                 super.SetOrientation(id0);
296                 updateTextLoc();
297         }
298         
299         @Override
300         public void SetScale(double id0) {
301                 super.SetScale(id0);
302                 updateTextLoc();
303         }
304         
305         @Override
306         public void SetScale(double id0, double id1, double id2) {
307                 super.SetScale(id0, id1, id2);
308                 updateTextLoc();
309         }
310         
311         @Override
312         public void SetScale(double[] id0) {
313                 super.SetScale(id0);
314                 updateTextLoc();
315         }
316         
317         @Override
318         public void SetUserMatrix(vtkMatrix4x4 id0) {
319                 super.SetUserMatrix(id0);
320                 updateTextLoc();
321         }
322         
323         @Override
324         public void SetUserTransform(vtkLinearTransform id0) {
325                 super.SetUserTransform(id0);
326                 updateTextLoc();
327         }
328         
329         @Override
330         public void Delete() {
331                 ren.RemoveActor(xactor);
332                 ren.RemoveActor(yactor);
333                 ren.RemoveActor(zactor);
334                 ren.RemoveActor(tubeActor);
335                 ren.RemoveActor(xconeActor);
336                 ren.RemoveActor(yconeActor);
337                 ren.RemoveActor(xconeActor);
338                 xactor.Delete();
339                 yactor.Delete();
340                 zactor.Delete();
341                 tubeActor.Delete();
342                 xconeActor.Delete();
343                 yconeActor.Delete();
344                 zconeActor.Delete();
345                 super.Delete();
346         }
347
348         public void dispose() {
349                 ThreadUtils.asyncExec(AWTThread.getThreadAccess(), new Runnable() {
350                         
351                         @Override
352                         public void run() {
353                                 removeFromRenderer();
354                                 Delete();
355                         }
356                 });
357         }
358         
359         @Override
360         public vtkProp3D getVtkProp() {
361                 return this;
362         }
363         
364 }