File: TestProp3DFollower.cxx

package info (click to toggle)
vtk6 6.3.0%2Bdfsg2-8.1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 118,972 kB
  • sloc: cpp: 1,442,790; ansic: 113,395; python: 72,383; tcl: 46,998; xml: 8,119; yacc: 4,525; java: 4,239; perl: 3,108; lex: 1,694; sh: 1,093; asm: 154; makefile: 68; objc: 17
file content (407 lines) | stat: -rw-r--r-- 15,851 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    TestHandleWidget.cxx

  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
//
// This example tests a  vtkProp3DFollower with a volume
//
#include "vtkProp3DFollower.h"
#include "vtkPropPicker.h"
#include "vtkCellPicker.h"
#include "vtkStructuredPointsReader.h"
#include "vtkPiecewiseFunction.h"
#include "vtkColorTransferFunction.h"
#include "vtkVolumeProperty.h"
#include "vtkVolumeRayCastCompositeFunction.h"
#include "vtkVolumeRayCastMapper.h"
#include "vtkVolumeTextureMapper2D.h"
#include "vtkVolume.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkCommand.h"
#include "vtkInteractorEventRecorder.h"
#include "vtkSmartPointer.h"
#include "vtkTestUtilities.h"
#include "vtkRegressionTestImage.h"

#define VTK_CREATE(type, name) \
  vtkSmartPointer<type> name = vtkSmartPointer<type>::New()

// -----------------------------------------------------------------------
// This does the actual work: updates the vtkPline implicit function.
// This in turn causes the pipeline to update and clip the object.
// Callback for the interaction
class vtkPickFollowerCallback : public vtkCommand
{
public:
  static vtkPickFollowerCallback *New()
    { return new vtkPickFollowerCallback; }
  virtual void Execute(vtkObject *caller, unsigned long, void*)
    {
      vtkCellPicker *picker = reinterpret_cast<vtkCellPicker*>(caller);
      if ( picker->GetViewProp() != NULL )
        {
        cout << "Picked\n";
        }
    }

  vtkPickFollowerCallback() {}
};

// -----------------------------------------------------------------------
static char PickFollowerLog[] =
  "# StreamVersion 1\n"
  "RenderEvent 0 0 0 0 0 0 0\n"
  "EnterEvent 123 298 0 0 0 0 0\n"
  "MouseMoveEvent 123 298 0 0 0 0 0\n"
  "MouseMoveEvent 123 293 0 0 0 0 0\n"
  "MouseMoveEvent 123 288 0 0 0 0 0\n"
  "MouseMoveEvent 123 281 0 0 0 0 0\n"
  "MouseMoveEvent 123 275 0 0 0 0 0\n"
  "MouseMoveEvent 123 268 0 0 0 0 0\n"
  "MouseMoveEvent 123 260 0 0 0 0 0\n"
  "MouseMoveEvent 123 256 0 0 0 0 0\n"
  "MouseMoveEvent 124 245 0 0 0 0 0\n"
  "MouseMoveEvent 124 237 0 0 0 0 0\n"
  "MouseMoveEvent 124 230 0 0 0 0 0\n"
  "MouseMoveEvent 124 226 0 0 0 0 0\n"
  "MouseMoveEvent 124 220 0 0 0 0 0\n"
  "MouseMoveEvent 125 216 0 0 0 0 0\n"
  "MouseMoveEvent 125 210 0 0 0 0 0\n"
  "MouseMoveEvent 125 207 0 0 0 0 0\n"
  "MouseMoveEvent 125 203 0 0 0 0 0\n"
  "MouseMoveEvent 126 200 0 0 0 0 0\n"
  "MouseMoveEvent 126 197 0 0 0 0 0\n"
  "MouseMoveEvent 126 194 0 0 0 0 0\n"
  "MouseMoveEvent 126 193 0 0 0 0 0\n"
  "MouseMoveEvent 126 192 0 0 0 0 0\n"
  "MouseMoveEvent 126 191 0 0 0 0 0\n"
  "KeyPressEvent 126 191 0 0 116 1 t\n"
  "CharEvent 126 191 0 0 116 1 t\n"
  "KeyReleaseEvent 126 191 0 0 116 1 t\n"
  "MouseMoveEvent 126 190 0 0 0 0 t\n"
  "MouseMoveEvent 126 189 0 0 0 0 t\n"
  "MouseMoveEvent 127 187 0 0 0 0 t\n"
  "MouseMoveEvent 127 185 0 0 0 0 t\n"
  "MouseMoveEvent 127 184 0 0 0 0 t\n"
  "MouseMoveEvent 128 183 0 0 0 0 t\n"
  "MouseMoveEvent 129 183 0 0 0 0 t\n"
  "MouseMoveEvent 130 182 0 0 0 0 t\n"
  "MouseMoveEvent 130 183 0 0 0 0 t\n"
  "MouseMoveEvent 130 184 0 0 0 0 t\n"
  "MiddleButtonPressEvent 130 184 0 0 0 0 t\n"
  "StartInteractionEvent 130 184 0 0 0 0 t\n"
  "MouseWheelForwardEvent 130 184 0 0 0 0 t\n"
  "RenderEvent 130 184 0 0 0 0 t\n"
  "MouseWheelForwardEvent 130 184 0 0 0 0 t\n"
  "RenderEvent 130 184 0 0 0 0 t\n"
  "MiddleButtonReleaseEvent 130 184 0 0 0 0 t\n"
  "EndInteractionEvent 130 184 0 0 0 0 t\n"
  "RenderEvent 130 184 0 0 0 0 t\n"
  "MouseWheelForwardEvent 130 184 0 0 0 0 t\n"
  "StartInteractionEvent 130 184 0 0 0 0 t\n"
  "RenderEvent 130 184 0 0 0 0 t\n"
  "EndInteractionEvent 130 184 0 0 0 0 t\n"
  "RenderEvent 130 184 0 0 0 0 t\n"
  "MouseMoveEvent 130 186 0 0 0 0 t\n"
  "MouseWheelBackwardEvent 130 186 0 0 0 0 t\n"
  "StartInteractionEvent 130 186 0 0 0 0 t\n"
  "RenderEvent 130 186 0 0 0 0 t\n"
  "EndInteractionEvent 130 186 0 0 0 0 t\n"
  "RenderEvent 130 186 0 0 0 0 t\n"
  "MouseWheelBackwardEvent 130 186 0 0 0 0 t\n"
  "StartInteractionEvent 130 186 0 0 0 0 t\n"
  "RenderEvent 130 186 0 0 0 0 t\n"
  "EndInteractionEvent 130 186 0 0 0 0 t\n"
  "RenderEvent 130 186 0 0 0 0 t\n"
  "MouseMoveEvent 131 186 0 0 0 0 t\n"
  "MouseWheelBackwardEvent 131 186 0 0 0 0 t\n"
  "StartInteractionEvent 131 186 0 0 0 0 t\n"
  "RenderEvent 131 186 0 0 0 0 t\n"
  "EndInteractionEvent 131 186 0 0 0 0 t\n"
  "RenderEvent 131 186 0 0 0 0 t\n"
  "MouseMoveEvent 132 186 0 0 0 0 t\n"
  "MouseMoveEvent 133 186 0 0 0 0 t\n"
  "MouseMoveEvent 132 186 0 0 0 0 t\n"
  "KeyPressEvent 132 186 0 -128 0 1 Shift_L\n"
  "LeftButtonPressEvent 132 186 0 4 0 0 Shift_L\n"
  "StartInteractionEvent 132 186 0 4 0 0 Shift_L\n"
  "MouseMoveEvent 131 186 0 4 0 0 Shift_L\n"
  "RenderEvent 131 186 0 4 0 0 Shift_L\n"
  "MouseMoveEvent 124 188 0 4 0 0 Shift_L\n"
  "RenderEvent 124 188 0 4 0 0 Shift_L\n"
  "MouseMoveEvent 113 188 0 4 0 0 Shift_L\n"
  "RenderEvent 113 188 0 4 0 0 Shift_L\n"
  "MouseMoveEvent 112 188 0 4 0 0 Shift_L\n"
  "RenderEvent 112 188 0 4 0 0 Shift_L\n"
  "MouseMoveEvent 109 188 0 4 0 0 Shift_L\n"
  "RenderEvent 109 188 0 4 0 0 Shift_L\n"
  "MouseMoveEvent 99 189 0 4 0 0 Shift_L\n"
  "RenderEvent 99 189 0 4 0 0 Shift_L\n"
  "MouseMoveEvent 95 189 0 4 0 0 Shift_L\n"
  "RenderEvent 95 189 0 4 0 0 Shift_L\n"
  "MouseMoveEvent 91 190 0 4 0 0 Shift_L\n"
  "RenderEvent 91 190 0 4 0 0 Shift_L\n"
  "MouseMoveEvent 82 191 0 4 0 0 Shift_L\n"
  "RenderEvent 82 191 0 4 0 0 Shift_L\n"
  "MouseMoveEvent 77 191 0 4 0 0 Shift_L\n"
  "RenderEvent 77 191 0 4 0 0 Shift_L\n"
  "KeyPressEvent 77 191 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 70 191 0 4 0 0 Shift_L\n"
  "RenderEvent 70 191 0 4 0 0 Shift_L\n"
  "KeyPressEvent 70 191 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 67 191 0 4 0 0 Shift_L\n"
  "RenderEvent 67 191 0 4 0 0 Shift_L\n"
  "KeyPressEvent 67 191 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 64 192 0 4 0 0 Shift_L\n"
  "RenderEvent 64 192 0 4 0 0 Shift_L\n"
  "KeyPressEvent 64 192 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 54 192 0 4 0 0 Shift_L\n"
  "RenderEvent 54 192 0 4 0 0 Shift_L\n"
  "KeyPressEvent 54 192 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 47 192 0 4 0 0 Shift_L\n"
  "RenderEvent 47 192 0 4 0 0 Shift_L\n"
  "KeyPressEvent 47 192 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 45 192 0 4 0 0 Shift_L\n"
  "RenderEvent 45 192 0 4 0 0 Shift_L\n"
  "KeyPressEvent 45 192 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 43 191 0 4 0 0 Shift_L\n"
  "RenderEvent 43 191 0 4 0 0 Shift_L\n"
  "KeyPressEvent 43 191 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 39 190 0 4 0 0 Shift_L\n"
  "RenderEvent 39 190 0 4 0 0 Shift_L\n"
  "KeyPressEvent 39 190 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 35 189 0 4 0 0 Shift_L\n"
  "RenderEvent 35 189 0 4 0 0 Shift_L\n"
  "KeyPressEvent 35 189 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 32 189 0 4 0 0 Shift_L\n"
  "RenderEvent 32 189 0 4 0 0 Shift_L\n"
  "KeyPressEvent 32 189 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 31 189 0 4 0 0 Shift_L\n"
  "RenderEvent 31 189 0 4 0 0 Shift_L\n"
  "KeyPressEvent 31 189 0 -128 0 2 Shift_L\n"
  "MouseMoveEvent 30 189 0 4 0 0 Shift_L\n"
  "RenderEvent 30 189 0 4 0 0 Shift_L\n"
  "KeyPressEvent 30 189 0 -128 0 1 Shift_L\n"
  "KeyPressEvent 30 189 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 32 188 0 4 0 0 Shift_L\n"
  "RenderEvent 32 188 0 4 0 0 Shift_L\n"
  "MouseMoveEvent 36 188 0 4 0 0 Shift_L\n"
  "RenderEvent 36 188 0 4 0 0 Shift_L\n"
  "KeyPressEvent 36 188 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 47 189 0 4 0 0 Shift_L\n"
  "RenderEvent 47 189 0 4 0 0 Shift_L\n"
  "KeyPressEvent 47 189 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 63 190 0 4 0 0 Shift_L\n"
  "RenderEvent 63 190 0 4 0 0 Shift_L\n"
  "KeyPressEvent 63 190 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 71 190 0 4 0 0 Shift_L\n"
  "RenderEvent 71 190 0 4 0 0 Shift_L\n"
  "KeyPressEvent 71 190 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 81 190 0 4 0 0 Shift_L\n"
  "RenderEvent 81 190 0 4 0 0 Shift_L\n"
  "KeyPressEvent 81 190 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 96 190 0 4 0 0 Shift_L\n"
  "RenderEvent 96 190 0 4 0 0 Shift_L\n"
  "KeyPressEvent 96 190 0 -128 0 1 Shift_L\n"
  "MouseMoveEvent 100 189 0 4 0 0 Shift_L\n"
  "RenderEvent 100 189 0 4 0 0 Shift_L\n"
  "KeyPressEvent 100 189 0 -128 0 2 Shift_L\n"
  "MouseMoveEvent 101 189 0 4 0 0 Shift_L\n"
  "RenderEvent 101 189 0 4 0 0 Shift_L\n"
  "KeyPressEvent 101 189 0 -128 0 1 Shift_L\n"
  "KeyPressEvent 101 189 0 -128 0 1 Shift_L\n"
  "KeyPressEvent 101 189 0 -128 0 1 Shift_L\n"
  "KeyPressEvent 101 189 0 -128 0 1 Shift_L\n"
  "LeftButtonReleaseEvent 101 189 0 4 0 0 Shift_L\n"
  "EndInteractionEvent 101 189 0 4 0 0 Shift_L\n"
  "RenderEvent 101 189 0 4 0 0 Shift_L\n"
  "KeyPressEvent 101 189 0 -128 0 2 Shift_L\n"
  "KeyReleaseEvent 101 189 0 0 0 1 Shift_L\n"
  "MouseMoveEvent 101 189 0 0 0 0 Shift_L\n"
  "LeftButtonPressEvent 101 189 0 0 0 0 Shift_L\n"
  "StartInteractionEvent 101 189 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 101 188 0 0 0 0 Shift_L\n"
  "RenderEvent 101 188 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 87 186 0 0 0 0 Shift_L\n"
  "RenderEvent 87 186 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 82 185 0 0 0 0 Shift_L\n"
  "RenderEvent 82 185 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 75 185 0 0 0 0 Shift_L\n"
  "RenderEvent 75 185 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 72 185 0 0 0 0 Shift_L\n"
  "RenderEvent 72 185 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 71 185 0 0 0 0 Shift_L\n"
  "RenderEvent 71 185 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 69 185 0 0 0 0 Shift_L\n"
  "RenderEvent 69 185 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 67 184 0 0 0 0 Shift_L\n"
  "RenderEvent 67 184 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 59 183 0 0 0 0 Shift_L\n"
  "RenderEvent 59 183 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 55 182 0 0 0 0 Shift_L\n"
  "RenderEvent 55 182 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 54 182 0 0 0 0 Shift_L\n"
  "RenderEvent 54 182 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 53 182 0 0 0 0 Shift_L\n"
  "RenderEvent 53 182 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 53 182 0 0 0 0 Shift_L\n"
  "RenderEvent 53 182 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 54 182 0 0 0 0 Shift_L\n"
  "RenderEvent 54 182 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 63 182 0 0 0 0 Shift_L\n"
  "RenderEvent 63 182 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 69 183 0 0 0 0 Shift_L\n"
  "RenderEvent 69 183 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 76 183 0 0 0 0 Shift_L\n"
  "RenderEvent 76 183 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 86 182 0 0 0 0 Shift_L\n"
  "RenderEvent 86 182 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 90 182 0 0 0 0 Shift_L\n"
  "RenderEvent 90 182 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 96 183 0 0 0 0 Shift_L\n"
  "RenderEvent 96 183 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 99 183 0 0 0 0 Shift_L\n"
  "RenderEvent 99 183 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 100 184 0 0 0 0 Shift_L\n"
  "RenderEvent 100 184 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 104 186 0 0 0 0 Shift_L\n"
  "RenderEvent 104 186 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 106 188 0 0 0 0 Shift_L\n"
  "RenderEvent 106 188 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 108 189 0 0 0 0 Shift_L\n"
  "RenderEvent 108 189 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 109 189 0 0 0 0 Shift_L\n"
  "RenderEvent 109 189 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 109 190 0 0 0 0 Shift_L\n"
  "RenderEvent 109 190 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 110 191 0 0 0 0 Shift_L\n"
  "RenderEvent 110 191 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 114 194 0 0 0 0 Shift_L\n"
  "RenderEvent 114 194 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 116 197 0 0 0 0 Shift_L\n"
  "RenderEvent 116 197 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 116 201 0 0 0 0 Shift_L\n"
  "RenderEvent 116 201 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 116 202 0 0 0 0 Shift_L\n"
  "RenderEvent 116 202 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 116 203 0 0 0 0 Shift_L\n"
  "RenderEvent 116 203 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 116 205 0 0 0 0 Shift_L\n"
  "RenderEvent 116 205 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 117 209 0 0 0 0 Shift_L\n"
  "RenderEvent 117 209 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 117 211 0 0 0 0 Shift_L\n"
  "RenderEvent 117 211 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 117 212 0 0 0 0 Shift_L\n"
  "RenderEvent 117 212 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 117 214 0 0 0 0 Shift_L\n"
  "RenderEvent 117 214 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 118 215 0 0 0 0 Shift_L\n"
  "RenderEvent 118 215 0 0 0 0 Shift_L\n"
  "LeftButtonReleaseEvent 118 215 0 0 0 0 Shift_L\n"
  "EndInteractionEvent 118 215 0 0 0 0 Shift_L\n"
  "RenderEvent 118 215 0 0 0 0 Shift_L\n"
  "MouseMoveEvent 118 215 0 0 0 0 Shift_L\n"
;

// -----------------------------------------------------------------------
int TestProp3DFollower( int argc, char* argv[] )
{
  // A volume rendered button!
  // Create the reader for the data
  char* fname3 = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/ironProt.vtk");
  VTK_CREATE(vtkStructuredPointsReader, reader);
  reader->SetFileName(fname3);
  delete [] fname3;

  // Create transfer mapping scalar value to opacity
  VTK_CREATE(vtkPiecewiseFunction, opacityTransferFunction);
  opacityTransferFunction->AddPoint(20,0);
  opacityTransferFunction->AddPoint(255,1);

  // Create transfer mapping scalar value to color
  VTK_CREATE(vtkColorTransferFunction, colorTransferFunction);
  colorTransferFunction->AddRGBPoint(0.0, 0.0, 0.0, 0.0);
  colorTransferFunction->AddRGBPoint(64.0, 1.0, 0.0, 0.0);
  colorTransferFunction->AddRGBPoint(128.0, 0.0, 0.0, 1.0);
  colorTransferFunction->AddRGBPoint(192.0, 0.0, 1.0, 0.0);
  colorTransferFunction->AddRGBPoint(255.0, 0.0, 0.2, 0.0);

  // The property describes how the data will look
  VTK_CREATE(vtkVolumeProperty, volumeProperty);
  volumeProperty->SetColor(colorTransferFunction);
  volumeProperty->SetScalarOpacity(opacityTransferFunction);
  volumeProperty->ShadeOn();
  volumeProperty->SetInterpolationTypeToLinear();

  // The mapper / ray cast function know how to render the data
  VTK_CREATE(vtkVolumeTextureMapper2D, volumeMapper);
  volumeMapper->SetInputConnection(reader->GetOutputPort());

  // The volume holds the mapper and the property and
  // can be used to position/orient the volume
  VTK_CREATE(vtkVolume, volume);
  volume->SetMapper(volumeMapper);
  volume->SetProperty(volumeProperty);
  volume->SetOrigin(-32,-32,-32);

  VTK_CREATE(vtkProp3DFollower,vFollower);
  vFollower->SetProp3D(volume);

  // Picking callback
  VTK_CREATE(vtkPickFollowerCallback, myCallback);

  VTK_CREATE(vtkCellPicker,picker);
  picker->AddObserver(vtkCommand::EndPickEvent,myCallback);

  // Create the rendering machinary
  //
  VTK_CREATE(vtkRenderer, ren1);
  vFollower->SetCamera(ren1->GetActiveCamera());

  VTK_CREATE(vtkRenderWindow, renWin);
  renWin->AddRenderer(ren1);

  VTK_CREATE(vtkRenderWindowInteractor, iren);
  iren->SetRenderWindow(renWin);
  iren->SetPicker(picker);

  ren1->AddActor(vFollower);

  // record events
  VTK_CREATE(vtkInteractorEventRecorder, recorder);
  recorder->SetInteractor(iren);
//  recorder->SetFileName("record.log");
//  recorder->Record();
  recorder->ReadFromInputStringOn();
  recorder->SetInputString(PickFollowerLog);
  recorder->EnabledOn();

  ren1->SetBackground(0.1, 0.2, 0.4);
  renWin->SetSize(300, 300);
  ren1->ResetCamera();
  iren->Initialize();
  renWin->Render();
  recorder->Play();
//  recorder->Off();

  int retVal = vtkRegressionTestImageThreshold( renWin, 10 );
  if ( retVal == vtkRegressionTester::DO_INTERACTOR)
    {
    iren->Start();
    }

  return !retVal;
}