1 /*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: TestHandleWidget.cxx
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14 =========================================================================*/
15 //
16 // This example tests a vtkProp3DFollower with a volume
17 //
18 #include "vtkProp3DFollower.h"
19 #include "vtkPropPicker.h"
20 #include "vtkCellPicker.h"
21 #include "vtkStructuredPointsReader.h"
22 #include "vtkPiecewiseFunction.h"
23 #include "vtkColorTransferFunction.h"
24 #include "vtkVolumeProperty.h"
25 #include "vtkVolumeRayCastCompositeFunction.h"
26 #include "vtkVolumeRayCastMapper.h"
27 #include "vtkVolumeTextureMapper2D.h"
28 #include "vtkVolume.h"
29 #include "vtkRenderer.h"
30 #include "vtkRenderWindow.h"
31 #include "vtkRenderWindowInteractor.h"
32 #include "vtkCommand.h"
33 #include "vtkInteractorEventRecorder.h"
34 #include "vtkSmartPointer.h"
35 #include "vtkTestUtilities.h"
36 #include "vtkRegressionTestImage.h"
37
38 #define VTK_CREATE(type, name) \
39 vtkSmartPointer<type> name = vtkSmartPointer<type>::New()
40
41 // -----------------------------------------------------------------------
42 // This does the actual work: updates the vtkPline implicit function.
43 // This in turn causes the pipeline to update and clip the object.
44 // Callback for the interaction
45 class vtkPickFollowerCallback : public vtkCommand
46 {
47 public:
New()48 static vtkPickFollowerCallback *New()
49 { return new vtkPickFollowerCallback; }
Execute(vtkObject * caller,unsigned long,void *)50 virtual void Execute(vtkObject *caller, unsigned long, void*)
51 {
52 vtkCellPicker *picker = reinterpret_cast<vtkCellPicker*>(caller);
53 if ( picker->GetViewProp() != NULL )
54 {
55 cout << "Picked\n";
56 }
57 }
58
vtkPickFollowerCallback()59 vtkPickFollowerCallback() {}
60 };
61
62 // -----------------------------------------------------------------------
63 static char PickFollowerLog[] =
64 "# StreamVersion 1\n"
65 "RenderEvent 0 0 0 0 0 0 0\n"
66 "EnterEvent 123 298 0 0 0 0 0\n"
67 "MouseMoveEvent 123 298 0 0 0 0 0\n"
68 "MouseMoveEvent 123 293 0 0 0 0 0\n"
69 "MouseMoveEvent 123 288 0 0 0 0 0\n"
70 "MouseMoveEvent 123 281 0 0 0 0 0\n"
71 "MouseMoveEvent 123 275 0 0 0 0 0\n"
72 "MouseMoveEvent 123 268 0 0 0 0 0\n"
73 "MouseMoveEvent 123 260 0 0 0 0 0\n"
74 "MouseMoveEvent 123 256 0 0 0 0 0\n"
75 "MouseMoveEvent 124 245 0 0 0 0 0\n"
76 "MouseMoveEvent 124 237 0 0 0 0 0\n"
77 "MouseMoveEvent 124 230 0 0 0 0 0\n"
78 "MouseMoveEvent 124 226 0 0 0 0 0\n"
79 "MouseMoveEvent 124 220 0 0 0 0 0\n"
80 "MouseMoveEvent 125 216 0 0 0 0 0\n"
81 "MouseMoveEvent 125 210 0 0 0 0 0\n"
82 "MouseMoveEvent 125 207 0 0 0 0 0\n"
83 "MouseMoveEvent 125 203 0 0 0 0 0\n"
84 "MouseMoveEvent 126 200 0 0 0 0 0\n"
85 "MouseMoveEvent 126 197 0 0 0 0 0\n"
86 "MouseMoveEvent 126 194 0 0 0 0 0\n"
87 "MouseMoveEvent 126 193 0 0 0 0 0\n"
88 "MouseMoveEvent 126 192 0 0 0 0 0\n"
89 "MouseMoveEvent 126 191 0 0 0 0 0\n"
90 "KeyPressEvent 126 191 0 0 116 1 t\n"
91 "CharEvent 126 191 0 0 116 1 t\n"
92 "KeyReleaseEvent 126 191 0 0 116 1 t\n"
93 "MouseMoveEvent 126 190 0 0 0 0 t\n"
94 "MouseMoveEvent 126 189 0 0 0 0 t\n"
95 "MouseMoveEvent 127 187 0 0 0 0 t\n"
96 "MouseMoveEvent 127 185 0 0 0 0 t\n"
97 "MouseMoveEvent 127 184 0 0 0 0 t\n"
98 "MouseMoveEvent 128 183 0 0 0 0 t\n"
99 "MouseMoveEvent 129 183 0 0 0 0 t\n"
100 "MouseMoveEvent 130 182 0 0 0 0 t\n"
101 "MouseMoveEvent 130 183 0 0 0 0 t\n"
102 "MouseMoveEvent 130 184 0 0 0 0 t\n"
103 "MiddleButtonPressEvent 130 184 0 0 0 0 t\n"
104 "StartInteractionEvent 130 184 0 0 0 0 t\n"
105 "MouseWheelForwardEvent 130 184 0 0 0 0 t\n"
106 "RenderEvent 130 184 0 0 0 0 t\n"
107 "MouseWheelForwardEvent 130 184 0 0 0 0 t\n"
108 "RenderEvent 130 184 0 0 0 0 t\n"
109 "MiddleButtonReleaseEvent 130 184 0 0 0 0 t\n"
110 "EndInteractionEvent 130 184 0 0 0 0 t\n"
111 "RenderEvent 130 184 0 0 0 0 t\n"
112 "MouseWheelForwardEvent 130 184 0 0 0 0 t\n"
113 "StartInteractionEvent 130 184 0 0 0 0 t\n"
114 "RenderEvent 130 184 0 0 0 0 t\n"
115 "EndInteractionEvent 130 184 0 0 0 0 t\n"
116 "RenderEvent 130 184 0 0 0 0 t\n"
117 "MouseMoveEvent 130 186 0 0 0 0 t\n"
118 "MouseWheelBackwardEvent 130 186 0 0 0 0 t\n"
119 "StartInteractionEvent 130 186 0 0 0 0 t\n"
120 "RenderEvent 130 186 0 0 0 0 t\n"
121 "EndInteractionEvent 130 186 0 0 0 0 t\n"
122 "RenderEvent 130 186 0 0 0 0 t\n"
123 "MouseWheelBackwardEvent 130 186 0 0 0 0 t\n"
124 "StartInteractionEvent 130 186 0 0 0 0 t\n"
125 "RenderEvent 130 186 0 0 0 0 t\n"
126 "EndInteractionEvent 130 186 0 0 0 0 t\n"
127 "RenderEvent 130 186 0 0 0 0 t\n"
128 "MouseMoveEvent 131 186 0 0 0 0 t\n"
129 "MouseWheelBackwardEvent 131 186 0 0 0 0 t\n"
130 "StartInteractionEvent 131 186 0 0 0 0 t\n"
131 "RenderEvent 131 186 0 0 0 0 t\n"
132 "EndInteractionEvent 131 186 0 0 0 0 t\n"
133 "RenderEvent 131 186 0 0 0 0 t\n"
134 "MouseMoveEvent 132 186 0 0 0 0 t\n"
135 "MouseMoveEvent 133 186 0 0 0 0 t\n"
136 "MouseMoveEvent 132 186 0 0 0 0 t\n"
137 "KeyPressEvent 132 186 0 -128 0 1 Shift_L\n"
138 "LeftButtonPressEvent 132 186 0 4 0 0 Shift_L\n"
139 "StartInteractionEvent 132 186 0 4 0 0 Shift_L\n"
140 "MouseMoveEvent 131 186 0 4 0 0 Shift_L\n"
141 "RenderEvent 131 186 0 4 0 0 Shift_L\n"
142 "MouseMoveEvent 124 188 0 4 0 0 Shift_L\n"
143 "RenderEvent 124 188 0 4 0 0 Shift_L\n"
144 "MouseMoveEvent 113 188 0 4 0 0 Shift_L\n"
145 "RenderEvent 113 188 0 4 0 0 Shift_L\n"
146 "MouseMoveEvent 112 188 0 4 0 0 Shift_L\n"
147 "RenderEvent 112 188 0 4 0 0 Shift_L\n"
148 "MouseMoveEvent 109 188 0 4 0 0 Shift_L\n"
149 "RenderEvent 109 188 0 4 0 0 Shift_L\n"
150 "MouseMoveEvent 99 189 0 4 0 0 Shift_L\n"
151 "RenderEvent 99 189 0 4 0 0 Shift_L\n"
152 "MouseMoveEvent 95 189 0 4 0 0 Shift_L\n"
153 "RenderEvent 95 189 0 4 0 0 Shift_L\n"
154 "MouseMoveEvent 91 190 0 4 0 0 Shift_L\n"
155 "RenderEvent 91 190 0 4 0 0 Shift_L\n"
156 "MouseMoveEvent 82 191 0 4 0 0 Shift_L\n"
157 "RenderEvent 82 191 0 4 0 0 Shift_L\n"
158 "MouseMoveEvent 77 191 0 4 0 0 Shift_L\n"
159 "RenderEvent 77 191 0 4 0 0 Shift_L\n"
160 "KeyPressEvent 77 191 0 -128 0 1 Shift_L\n"
161 "MouseMoveEvent 70 191 0 4 0 0 Shift_L\n"
162 "RenderEvent 70 191 0 4 0 0 Shift_L\n"
163 "KeyPressEvent 70 191 0 -128 0 1 Shift_L\n"
164 "MouseMoveEvent 67 191 0 4 0 0 Shift_L\n"
165 "RenderEvent 67 191 0 4 0 0 Shift_L\n"
166 "KeyPressEvent 67 191 0 -128 0 1 Shift_L\n"
167 "MouseMoveEvent 64 192 0 4 0 0 Shift_L\n"
168 "RenderEvent 64 192 0 4 0 0 Shift_L\n"
169 "KeyPressEvent 64 192 0 -128 0 1 Shift_L\n"
170 "MouseMoveEvent 54 192 0 4 0 0 Shift_L\n"
171 "RenderEvent 54 192 0 4 0 0 Shift_L\n"
172 "KeyPressEvent 54 192 0 -128 0 1 Shift_L\n"
173 "MouseMoveEvent 47 192 0 4 0 0 Shift_L\n"
174 "RenderEvent 47 192 0 4 0 0 Shift_L\n"
175 "KeyPressEvent 47 192 0 -128 0 1 Shift_L\n"
176 "MouseMoveEvent 45 192 0 4 0 0 Shift_L\n"
177 "RenderEvent 45 192 0 4 0 0 Shift_L\n"
178 "KeyPressEvent 45 192 0 -128 0 1 Shift_L\n"
179 "MouseMoveEvent 43 191 0 4 0 0 Shift_L\n"
180 "RenderEvent 43 191 0 4 0 0 Shift_L\n"
181 "KeyPressEvent 43 191 0 -128 0 1 Shift_L\n"
182 "MouseMoveEvent 39 190 0 4 0 0 Shift_L\n"
183 "RenderEvent 39 190 0 4 0 0 Shift_L\n"
184 "KeyPressEvent 39 190 0 -128 0 1 Shift_L\n"
185 "MouseMoveEvent 35 189 0 4 0 0 Shift_L\n"
186 "RenderEvent 35 189 0 4 0 0 Shift_L\n"
187 "KeyPressEvent 35 189 0 -128 0 1 Shift_L\n"
188 "MouseMoveEvent 32 189 0 4 0 0 Shift_L\n"
189 "RenderEvent 32 189 0 4 0 0 Shift_L\n"
190 "KeyPressEvent 32 189 0 -128 0 1 Shift_L\n"
191 "MouseMoveEvent 31 189 0 4 0 0 Shift_L\n"
192 "RenderEvent 31 189 0 4 0 0 Shift_L\n"
193 "KeyPressEvent 31 189 0 -128 0 2 Shift_L\n"
194 "MouseMoveEvent 30 189 0 4 0 0 Shift_L\n"
195 "RenderEvent 30 189 0 4 0 0 Shift_L\n"
196 "KeyPressEvent 30 189 0 -128 0 1 Shift_L\n"
197 "KeyPressEvent 30 189 0 -128 0 1 Shift_L\n"
198 "MouseMoveEvent 32 188 0 4 0 0 Shift_L\n"
199 "RenderEvent 32 188 0 4 0 0 Shift_L\n"
200 "MouseMoveEvent 36 188 0 4 0 0 Shift_L\n"
201 "RenderEvent 36 188 0 4 0 0 Shift_L\n"
202 "KeyPressEvent 36 188 0 -128 0 1 Shift_L\n"
203 "MouseMoveEvent 47 189 0 4 0 0 Shift_L\n"
204 "RenderEvent 47 189 0 4 0 0 Shift_L\n"
205 "KeyPressEvent 47 189 0 -128 0 1 Shift_L\n"
206 "MouseMoveEvent 63 190 0 4 0 0 Shift_L\n"
207 "RenderEvent 63 190 0 4 0 0 Shift_L\n"
208 "KeyPressEvent 63 190 0 -128 0 1 Shift_L\n"
209 "MouseMoveEvent 71 190 0 4 0 0 Shift_L\n"
210 "RenderEvent 71 190 0 4 0 0 Shift_L\n"
211 "KeyPressEvent 71 190 0 -128 0 1 Shift_L\n"
212 "MouseMoveEvent 81 190 0 4 0 0 Shift_L\n"
213 "RenderEvent 81 190 0 4 0 0 Shift_L\n"
214 "KeyPressEvent 81 190 0 -128 0 1 Shift_L\n"
215 "MouseMoveEvent 96 190 0 4 0 0 Shift_L\n"
216 "RenderEvent 96 190 0 4 0 0 Shift_L\n"
217 "KeyPressEvent 96 190 0 -128 0 1 Shift_L\n"
218 "MouseMoveEvent 100 189 0 4 0 0 Shift_L\n"
219 "RenderEvent 100 189 0 4 0 0 Shift_L\n"
220 "KeyPressEvent 100 189 0 -128 0 2 Shift_L\n"
221 "MouseMoveEvent 101 189 0 4 0 0 Shift_L\n"
222 "RenderEvent 101 189 0 4 0 0 Shift_L\n"
223 "KeyPressEvent 101 189 0 -128 0 1 Shift_L\n"
224 "KeyPressEvent 101 189 0 -128 0 1 Shift_L\n"
225 "KeyPressEvent 101 189 0 -128 0 1 Shift_L\n"
226 "KeyPressEvent 101 189 0 -128 0 1 Shift_L\n"
227 "LeftButtonReleaseEvent 101 189 0 4 0 0 Shift_L\n"
228 "EndInteractionEvent 101 189 0 4 0 0 Shift_L\n"
229 "RenderEvent 101 189 0 4 0 0 Shift_L\n"
230 "KeyPressEvent 101 189 0 -128 0 2 Shift_L\n"
231 "KeyReleaseEvent 101 189 0 0 0 1 Shift_L\n"
232 "MouseMoveEvent 101 189 0 0 0 0 Shift_L\n"
233 "LeftButtonPressEvent 101 189 0 0 0 0 Shift_L\n"
234 "StartInteractionEvent 101 189 0 0 0 0 Shift_L\n"
235 "MouseMoveEvent 101 188 0 0 0 0 Shift_L\n"
236 "RenderEvent 101 188 0 0 0 0 Shift_L\n"
237 "MouseMoveEvent 87 186 0 0 0 0 Shift_L\n"
238 "RenderEvent 87 186 0 0 0 0 Shift_L\n"
239 "MouseMoveEvent 82 185 0 0 0 0 Shift_L\n"
240 "RenderEvent 82 185 0 0 0 0 Shift_L\n"
241 "MouseMoveEvent 75 185 0 0 0 0 Shift_L\n"
242 "RenderEvent 75 185 0 0 0 0 Shift_L\n"
243 "MouseMoveEvent 72 185 0 0 0 0 Shift_L\n"
244 "RenderEvent 72 185 0 0 0 0 Shift_L\n"
245 "MouseMoveEvent 71 185 0 0 0 0 Shift_L\n"
246 "RenderEvent 71 185 0 0 0 0 Shift_L\n"
247 "MouseMoveEvent 69 185 0 0 0 0 Shift_L\n"
248 "RenderEvent 69 185 0 0 0 0 Shift_L\n"
249 "MouseMoveEvent 67 184 0 0 0 0 Shift_L\n"
250 "RenderEvent 67 184 0 0 0 0 Shift_L\n"
251 "MouseMoveEvent 59 183 0 0 0 0 Shift_L\n"
252 "RenderEvent 59 183 0 0 0 0 Shift_L\n"
253 "MouseMoveEvent 55 182 0 0 0 0 Shift_L\n"
254 "RenderEvent 55 182 0 0 0 0 Shift_L\n"
255 "MouseMoveEvent 54 182 0 0 0 0 Shift_L\n"
256 "RenderEvent 54 182 0 0 0 0 Shift_L\n"
257 "MouseMoveEvent 53 182 0 0 0 0 Shift_L\n"
258 "RenderEvent 53 182 0 0 0 0 Shift_L\n"
259 "MouseMoveEvent 53 182 0 0 0 0 Shift_L\n"
260 "RenderEvent 53 182 0 0 0 0 Shift_L\n"
261 "MouseMoveEvent 54 182 0 0 0 0 Shift_L\n"
262 "RenderEvent 54 182 0 0 0 0 Shift_L\n"
263 "MouseMoveEvent 63 182 0 0 0 0 Shift_L\n"
264 "RenderEvent 63 182 0 0 0 0 Shift_L\n"
265 "MouseMoveEvent 69 183 0 0 0 0 Shift_L\n"
266 "RenderEvent 69 183 0 0 0 0 Shift_L\n"
267 "MouseMoveEvent 76 183 0 0 0 0 Shift_L\n"
268 "RenderEvent 76 183 0 0 0 0 Shift_L\n"
269 "MouseMoveEvent 86 182 0 0 0 0 Shift_L\n"
270 "RenderEvent 86 182 0 0 0 0 Shift_L\n"
271 "MouseMoveEvent 90 182 0 0 0 0 Shift_L\n"
272 "RenderEvent 90 182 0 0 0 0 Shift_L\n"
273 "MouseMoveEvent 96 183 0 0 0 0 Shift_L\n"
274 "RenderEvent 96 183 0 0 0 0 Shift_L\n"
275 "MouseMoveEvent 99 183 0 0 0 0 Shift_L\n"
276 "RenderEvent 99 183 0 0 0 0 Shift_L\n"
277 "MouseMoveEvent 100 184 0 0 0 0 Shift_L\n"
278 "RenderEvent 100 184 0 0 0 0 Shift_L\n"
279 "MouseMoveEvent 104 186 0 0 0 0 Shift_L\n"
280 "RenderEvent 104 186 0 0 0 0 Shift_L\n"
281 "MouseMoveEvent 106 188 0 0 0 0 Shift_L\n"
282 "RenderEvent 106 188 0 0 0 0 Shift_L\n"
283 "MouseMoveEvent 108 189 0 0 0 0 Shift_L\n"
284 "RenderEvent 108 189 0 0 0 0 Shift_L\n"
285 "MouseMoveEvent 109 189 0 0 0 0 Shift_L\n"
286 "RenderEvent 109 189 0 0 0 0 Shift_L\n"
287 "MouseMoveEvent 109 190 0 0 0 0 Shift_L\n"
288 "RenderEvent 109 190 0 0 0 0 Shift_L\n"
289 "MouseMoveEvent 110 191 0 0 0 0 Shift_L\n"
290 "RenderEvent 110 191 0 0 0 0 Shift_L\n"
291 "MouseMoveEvent 114 194 0 0 0 0 Shift_L\n"
292 "RenderEvent 114 194 0 0 0 0 Shift_L\n"
293 "MouseMoveEvent 116 197 0 0 0 0 Shift_L\n"
294 "RenderEvent 116 197 0 0 0 0 Shift_L\n"
295 "MouseMoveEvent 116 201 0 0 0 0 Shift_L\n"
296 "RenderEvent 116 201 0 0 0 0 Shift_L\n"
297 "MouseMoveEvent 116 202 0 0 0 0 Shift_L\n"
298 "RenderEvent 116 202 0 0 0 0 Shift_L\n"
299 "MouseMoveEvent 116 203 0 0 0 0 Shift_L\n"
300 "RenderEvent 116 203 0 0 0 0 Shift_L\n"
301 "MouseMoveEvent 116 205 0 0 0 0 Shift_L\n"
302 "RenderEvent 116 205 0 0 0 0 Shift_L\n"
303 "MouseMoveEvent 117 209 0 0 0 0 Shift_L\n"
304 "RenderEvent 117 209 0 0 0 0 Shift_L\n"
305 "MouseMoveEvent 117 211 0 0 0 0 Shift_L\n"
306 "RenderEvent 117 211 0 0 0 0 Shift_L\n"
307 "MouseMoveEvent 117 212 0 0 0 0 Shift_L\n"
308 "RenderEvent 117 212 0 0 0 0 Shift_L\n"
309 "MouseMoveEvent 117 214 0 0 0 0 Shift_L\n"
310 "RenderEvent 117 214 0 0 0 0 Shift_L\n"
311 "MouseMoveEvent 118 215 0 0 0 0 Shift_L\n"
312 "RenderEvent 118 215 0 0 0 0 Shift_L\n"
313 "LeftButtonReleaseEvent 118 215 0 0 0 0 Shift_L\n"
314 "EndInteractionEvent 118 215 0 0 0 0 Shift_L\n"
315 "RenderEvent 118 215 0 0 0 0 Shift_L\n"
316 "MouseMoveEvent 118 215 0 0 0 0 Shift_L\n"
317 ;
318
319 // -----------------------------------------------------------------------
TestProp3DFollower(int argc,char * argv[])320 int TestProp3DFollower( int argc, char* argv[] )
321 {
322 // A volume rendered button!
323 // Create the reader for the data
324 char* fname3 = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/ironProt.vtk");
325 VTK_CREATE(vtkStructuredPointsReader, reader);
326 reader->SetFileName(fname3);
327 delete [] fname3;
328
329 // Create transfer mapping scalar value to opacity
330 VTK_CREATE(vtkPiecewiseFunction, opacityTransferFunction);
331 opacityTransferFunction->AddPoint(20,0);
332 opacityTransferFunction->AddPoint(255,1);
333
334 // Create transfer mapping scalar value to color
335 VTK_CREATE(vtkColorTransferFunction, colorTransferFunction);
336 colorTransferFunction->AddRGBPoint(0.0, 0.0, 0.0, 0.0);
337 colorTransferFunction->AddRGBPoint(64.0, 1.0, 0.0, 0.0);
338 colorTransferFunction->AddRGBPoint(128.0, 0.0, 0.0, 1.0);
339 colorTransferFunction->AddRGBPoint(192.0, 0.0, 1.0, 0.0);
340 colorTransferFunction->AddRGBPoint(255.0, 0.0, 0.2, 0.0);
341
342 // The property describes how the data will look
343 VTK_CREATE(vtkVolumeProperty, volumeProperty);
344 volumeProperty->SetColor(colorTransferFunction);
345 volumeProperty->SetScalarOpacity(opacityTransferFunction);
346 volumeProperty->ShadeOn();
347 volumeProperty->SetInterpolationTypeToLinear();
348
349 // The mapper / ray cast function know how to render the data
350 VTK_CREATE(vtkVolumeTextureMapper2D, volumeMapper);
351 volumeMapper->SetInputConnection(reader->GetOutputPort());
352
353 // The volume holds the mapper and the property and
354 // can be used to position/orient the volume
355 VTK_CREATE(vtkVolume, volume);
356 volume->SetMapper(volumeMapper);
357 volume->SetProperty(volumeProperty);
358 volume->SetOrigin(-32,-32,-32);
359
360 VTK_CREATE(vtkProp3DFollower,vFollower);
361 vFollower->SetProp3D(volume);
362
363 // Picking callback
364 VTK_CREATE(vtkPickFollowerCallback, myCallback);
365
366 VTK_CREATE(vtkCellPicker,picker);
367 picker->AddObserver(vtkCommand::EndPickEvent,myCallback);
368
369 // Create the rendering machinary
370 //
371 VTK_CREATE(vtkRenderer, ren1);
372 vFollower->SetCamera(ren1->GetActiveCamera());
373
374 VTK_CREATE(vtkRenderWindow, renWin);
375 renWin->AddRenderer(ren1);
376
377 VTK_CREATE(vtkRenderWindowInteractor, iren);
378 iren->SetRenderWindow(renWin);
379 iren->SetPicker(picker);
380
381 ren1->AddActor(vFollower);
382
383 // record events
384 VTK_CREATE(vtkInteractorEventRecorder, recorder);
385 recorder->SetInteractor(iren);
386 // recorder->SetFileName("record.log");
387 // recorder->Record();
388 recorder->ReadFromInputStringOn();
389 recorder->SetInputString(PickFollowerLog);
390 recorder->EnabledOn();
391
392 ren1->SetBackground(0.1, 0.2, 0.4);
393 renWin->SetSize(300, 300);
394 ren1->ResetCamera();
395 iren->Initialize();
396 renWin->Render();
397 recorder->Play();
398 // recorder->Off();
399
400 int retVal = vtkRegressionTestImageThreshold( renWin, 10 );
401 if ( retVal == vtkRegressionTester::DO_INTERACTOR)
402 {
403 iren->Start();
404 }
405
406 return !retVal;
407 }
408