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