File: TestFollowerPicking.cxx

package info (click to toggle)
vtk6 6.3.0%2Bdfsg2-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 118,880 kB
  • sloc: cpp: 1,442,792; 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: 103; objc: 17
file content (345 lines) | stat: -rw-r--r-- 11,883 bytes parent folder | download | duplicates (7)
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
/*=========================================================================

  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 picking a vtkFollower and vtkProp3DFollower
//
#include "vtkJPEGReader.h"
#include "vtkImageActor.h"
#include "vtkImageMapper3D.h"
#include "vtkPlaneSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkFollower.h"
#include "vtkProp3DFollower.h"
#include "vtkPropPicker.h"
#include "vtkCellPicker.h"
#include "vtkStructuredPointsReader.h"
#include "vtkPiecewiseFunction.h"
#include "vtkColorTransferFunction.h"
#include "vtkProperty.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkCommand.h"
#include "vtkInteractorEventRecorder.h"
#include "vtkSmartPointer.h"
#include "vtkTestUtilities.h"
#include "vtkSphereSource.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*)
    {
//      vtkPropPicker *picker = reinterpret_cast<vtkPropPicker*>(caller);
      vtkCellPicker *picker = reinterpret_cast<vtkCellPicker*>(caller);
      if ( picker->GetViewProp() != NULL )
        {
        cout << "Picked\n";
        }
    }

  vtkPickFollowerCallback() {}
};

// -----------------------------------------------------------------------
const char PickFollowerLog[] =
  "# StreamVersion 1\n"
  "RenderEvent 0 0 0 0 0 0 0\n"
  "EnterEvent 285 289 0 0 0 0 0\n"
  "MouseMoveEvent 285 289 0 0 0 0 0\n"
  "MouseMoveEvent 271 294 0 0 0 0 0\n"
  "LeaveEvent 271 294 0 0 0 0 0\n"
  "EnterEvent 136 299 0 0 0 0 0\n"
  "MouseMoveEvent 136 299 0 0 0 0 0\n"
  "MouseMoveEvent 136 294 0 0 0 0 0\n"
  "MouseMoveEvent 136 291 0 0 0 0 0\n"
  "MouseMoveEvent 136 286 0 0 0 0 0\n"
  "MouseMoveEvent 136 280 0 0 0 0 0\n"
  "MouseMoveEvent 136 277 0 0 0 0 0\n"
  "MouseMoveEvent 136 274 0 0 0 0 0\n"
  "MouseMoveEvent 136 271 0 0 0 0 0\n"
  "MouseMoveEvent 136 268 0 0 0 0 0\n"
  "MouseMoveEvent 136 262 0 0 0 0 0\n"
  "MouseMoveEvent 136 260 0 0 0 0 0\n"
  "MouseMoveEvent 136 256 0 0 0 0 0\n"
  "MouseMoveEvent 136 253 0 0 0 0 0\n"
  "MouseMoveEvent 136 251 0 0 0 0 0\n"
  "MouseMoveEvent 136 249 0 0 0 0 0\n"
  "MouseMoveEvent 136 247 0 0 0 0 0\n"
  "MouseMoveEvent 136 246 0 0 0 0 0\n"
  "MouseMoveEvent 136 245 0 0 0 0 0\n"
  "MouseMoveEvent 136 243 0 0 0 0 0\n"
  "MouseMoveEvent 137 241 0 0 0 0 0\n"
  "MouseMoveEvent 137 240 0 0 0 0 0\n"
  "MouseMoveEvent 137 238 0 0 0 0 0\n"
  "MouseMoveEvent 137 237 0 0 0 0 0\n"
  "MouseMoveEvent 137 236 0 0 0 0 0\n"
  "MouseMoveEvent 137 234 0 0 0 0 0\n"
  "MouseMoveEvent 138 231 0 0 0 0 0\n"
  "MouseMoveEvent 138 230 0 0 0 0 0\n"
  "MouseMoveEvent 138 229 0 0 0 0 0\n"
  "MouseMoveEvent 138 227 0 0 0 0 0\n"
  "MouseMoveEvent 139 227 0 0 0 0 0\n"
  "MouseMoveEvent 139 226 0 0 0 0 0\n"
  "MouseMoveEvent 139 225 0 0 0 0 0\n"
  "MouseMoveEvent 139 224 0 0 0 0 0\n"
  "KeyPressEvent 139 224 0 0 114 1 r\n"
  "CharEvent 139 224 0 0 114 1 r\n"
  "RenderEvent 139 224 0 0 114 1 r\n"
  "MouseMoveEvent 140 223 0 0 0 0 r\n"
  "MouseMoveEvent 141 223 0 0 0 0 r\n"
  "KeyReleaseEvent 141 223 0 0 114 1 r\n"
  "MouseMoveEvent 142 223 0 0 0 0 r\n"
  "MouseMoveEvent 143 223 0 0 0 0 r\n"
  "MouseMoveEvent 144 223 0 0 0 0 r\n"
  "MouseMoveEvent 145 223 0 0 0 0 r\n"
  "MouseMoveEvent 146 223 0 0 0 0 r\n"
  "MouseMoveEvent 146 222 0 0 0 0 r\n"
  "MouseMoveEvent 146 221 0 0 0 0 r\n"
  "MouseMoveEvent 146 220 0 0 0 0 r\n"
  "MouseMoveEvent 146 219 0 0 0 0 r\n"
  "MouseMoveEvent 146 218 0 0 0 0 r\n"
  "MouseMoveEvent 146 217 0 0 0 0 r\n"
  "MouseMoveEvent 146 216 0 0 0 0 r\n"
  "MouseMoveEvent 146 215 0 0 0 0 r\n"
  "MouseMoveEvent 146 213 0 0 0 0 r\n"
  "MouseMoveEvent 146 212 0 0 0 0 r\n"
  "MouseWheelBackwardEvent 146 212 0 0 0 0 r\n"
  "StartInteractionEvent 146 212 0 0 0 0 r\n"
  "RenderEvent 146 212 0 0 0 0 r\n"
  "EndInteractionEvent 146 212 0 0 0 0 r\n"
  "RenderEvent 146 212 0 0 0 0 r\n"
  "MouseWheelBackwardEvent 146 212 0 0 0 0 r\n"
  "StartInteractionEvent 146 212 0 0 0 0 r\n"
  "RenderEvent 146 212 0 0 0 0 r\n"
  "EndInteractionEvent 146 212 0 0 0 0 r\n"
  "RenderEvent 146 212 0 0 0 0 r\n"
  "MouseWheelBackwardEvent 146 212 0 0 0 0 r\n"
  "StartInteractionEvent 146 212 0 0 0 0 r\n"
  "RenderEvent 146 212 0 0 0 0 r\n"
  "EndInteractionEvent 146 212 0 0 0 0 r\n"
  "RenderEvent 146 212 0 0 0 0 r\n"
  "MouseMoveEvent 146 209 0 0 0 0 r\n"
  "MouseMoveEvent 146 205 0 0 0 0 r\n"
  "MouseMoveEvent 146 202 0 0 0 0 r\n"
  "MouseMoveEvent 146 199 0 0 0 0 r\n"
  "MouseMoveEvent 146 197 0 0 0 0 r\n"
  "MouseMoveEvent 146 196 0 0 0 0 r\n"
  "MouseMoveEvent 146 194 0 0 0 0 r\n"
  "MouseMoveEvent 147 193 0 0 0 0 r\n"
  "MouseMoveEvent 147 191 0 0 0 0 r\n"
  "MouseMoveEvent 148 190 0 0 0 0 r\n"
  "MouseMoveEvent 149 189 0 0 0 0 r\n"
  "MouseMoveEvent 149 186 0 0 0 0 r\n"
  "MouseMoveEvent 149 185 0 0 0 0 r\n"
  "MouseMoveEvent 149 184 0 0 0 0 r\n"
  "MouseMoveEvent 149 183 0 0 0 0 r\n"
  "MouseMoveEvent 149 182 0 0 0 0 r\n"
  "MouseMoveEvent 149 181 0 0 0 0 r\n"
  "MouseMoveEvent 149 180 0 0 0 0 r\n"
  "MouseMoveEvent 149 179 0 0 0 0 r\n"
  "MouseMoveEvent 149 178 0 0 0 0 r\n"
  "MouseMoveEvent 149 177 0 0 0 0 r\n"
  "MouseMoveEvent 149 176 0 0 0 0 r\n"
  "MouseMoveEvent 149 175 0 0 0 0 r\n"
  "MouseMoveEvent 149 174 0 0 0 0 r\n"
  "MouseMoveEvent 149 173 0 0 0 0 r\n"
  "MouseMoveEvent 149 172 0 0 0 0 r\n"
  "MouseMoveEvent 149 171 0 0 0 0 r\n"
  "KeyPressEvent 149 171 0 0 112 1 p\n"
  "CharEvent 149 171 0 0 112 1 p\n"
  "StartPickEvent 149 171 0 0 112 1 p\n"
  "RenderEvent 149 171 0 0 112 1 p\n"
  "EndPickEvent 149 171 0 0 112 1 p\n"
  "KeyReleaseEvent 149 171 0 0 112 1 p\n"
  "MouseMoveEvent 151 169 0 0 0 0 p\n"
  "MouseMoveEvent 154 169 0 0 0 0 p\n"
  "MouseMoveEvent 164 166 0 0 0 0 p\n"
  "MouseMoveEvent 174 166 0 0 0 0 p\n"
  "MouseMoveEvent 182 165 0 0 0 0 p\n"
  "MouseMoveEvent 190 165 0 0 0 0 p\n"
  "MouseMoveEvent 194 165 0 0 0 0 p\n"
  "MouseMoveEvent 200 165 0 0 0 0 p\n"
  "MouseMoveEvent 204 164 0 0 0 0 p\n"
  "MouseMoveEvent 208 164 0 0 0 0 p\n"
  "MouseMoveEvent 215 163 0 0 0 0 p\n"
  "MouseMoveEvent 218 163 0 0 0 0 p\n"
  "MouseMoveEvent 221 163 0 0 0 0 p\n"
  "MouseMoveEvent 226 163 0 0 0 0 p\n"
  "MouseMoveEvent 230 163 0 0 0 0 p\n"
  "MouseMoveEvent 233 163 0 0 0 0 p\n"
  "MouseMoveEvent 234 163 0 0 0 0 p\n"
  "MouseMoveEvent 236 163 0 0 0 0 p\n"
  "MouseMoveEvent 237 163 0 0 0 0 p\n"
  "MouseMoveEvent 238 163 0 0 0 0 p\n"
  "MouseMoveEvent 239 163 0 0 0 0 p\n"
  "MouseMoveEvent 240 163 0 0 0 0 p\n"
  "MouseMoveEvent 242 163 0 0 0 0 p\n"
  "MouseMoveEvent 244 163 0 0 0 0 p\n"
  "MouseMoveEvent 245 163 0 0 0 0 p\n"
  "MouseMoveEvent 246 163 0 0 0 0 p\n"
  "MouseMoveEvent 247 163 0 0 0 0 p\n"
  "MouseMoveEvent 248 163 0 0 0 0 p\n"
  "KeyPressEvent 248 163 0 0 112 1 p\n"
  "CharEvent 248 163 0 0 112 1 p\n"
  "StartPickEvent 248 163 0 0 112 1 p\n"
  "RenderEvent 248 163 0 0 112 1 p\n"
  "EndPickEvent 248 163 0 0 112 1 p\n"
  "KeyReleaseEvent 248 163 0 0 112 1 p\n"
  "MouseMoveEvent 246 163 0 0 0 0 p\n"
  "MouseMoveEvent 243 163 0 0 0 0 p\n"
  "MouseMoveEvent 241 163 0 0 0 0 p\n"
  "MouseMoveEvent 238 163 0 0 0 0 p\n"
  "MouseMoveEvent 234 164 0 0 0 0 p\n"
  "MouseMoveEvent 229 164 0 0 0 0 p\n"
  "MouseMoveEvent 222 165 0 0 0 0 p\n"
  "MouseMoveEvent 215 165 0 0 0 0 p\n"
  "MouseMoveEvent 206 165 0 0 0 0 p\n"
  "MouseMoveEvent 200 165 0 0 0 0 p\n"
  "MouseMoveEvent 194 164 0 0 0 0 p\n"
  "MouseMoveEvent 192 163 0 0 0 0 p\n"
  "MouseMoveEvent 192 162 0 0 0 0 p\n"
  "MouseMoveEvent 191 162 0 0 0 0 p\n"
  "MouseMoveEvent 190 162 0 0 0 0 p\n"
  "MouseMoveEvent 189 162 0 0 0 0 p\n"
  "MouseMoveEvent 188 162 0 0 0 0 p\n"
  "MouseMoveEvent 186 162 0 0 0 0 p\n"
  "MouseMoveEvent 185 162 0 0 0 0 p\n"
  "MouseMoveEvent 183 162 0 0 0 0 p\n"
  "MouseMoveEvent 182 162 0 0 0 0 p\n"
  "MouseMoveEvent 180 162 0 0 0 0 p\n"
  "MouseMoveEvent 179 162 0 0 0 0 p\n"
  "MouseMoveEvent 178 162 0 0 0 0 p\n"
  "MouseMoveEvent 176 162 0 0 0 0 p\n"
  "MouseMoveEvent 175 162 0 0 0 0 p\n"
  "MouseMoveEvent 173 162 0 0 0 0 p\n"
  "KeyPressEvent 173 162 0 0 112 1 p\n"
  "CharEvent 173 162 0 0 112 1 p\n"
  "StartPickEvent 173 162 0 0 112 1 p\n"
  "RenderEvent 173 162 0 0 112 1 p\n"
  "EndPickEvent 173 162 0 0 112 1 p\n"
  "KeyReleaseEvent 173 162 0 0 112 1 p\n"
;

// -----------------------------------------------------------------------
int TestFollowerPicking( int argc, char* argv[] )
{
  // Create some simple actors
  //
  VTK_CREATE(vtkPlaneSource, plane);

  VTK_CREATE(vtkPolyDataMapper, mapper);
  mapper->SetInputConnection(plane->GetOutputPort());

  VTK_CREATE(vtkFollower, follower);
  follower->SetMapper( mapper);
  follower->SetPosition(1,2,3);

  // Mark the origin
  VTK_CREATE(vtkSphereSource,ss);
  VTK_CREATE(vtkPolyDataMapper,m);
  m->SetInputConnection(ss->GetOutputPort());
  VTK_CREATE(vtkActor,a);
  a->SetMapper(m);

  // Create a more complex follower
  char *fname =
    vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/beach.jpg");
  VTK_CREATE(vtkJPEGReader, pnmReader);
  pnmReader->SetFileName(fname);
  delete[] fname;

  VTK_CREATE(vtkImageActor,ia);
  ia->GetMapper()->SetInputConnection(pnmReader->GetOutputPort());
  ia->SetScale(0.01,0.01,0.01);

  VTK_CREATE(vtkProp3DFollower,p3dFollower);
  p3dFollower->SetProp3D(ia);

  // Debugging code
  VTK_CREATE(vtkPlaneSource, plane2);

  VTK_CREATE(vtkPolyDataMapper, mapper2);
  mapper2->SetInputConnection(plane2->GetOutputPort());

  VTK_CREATE(vtkActor, actor);
  actor->SetMapper( mapper2);
  actor->AddPosition(1,2,3);
  actor->GetProperty()->SetRepresentationToWireframe();
  actor->GetProperty()->SetColor(0,1,0);

  // Picking callback
  VTK_CREATE(vtkPickFollowerCallback, myCallback);

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

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

  VTK_CREATE(vtkRenderWindow, renWin);
  renWin->AddRenderer(ren1);
  // Turn off antialiasing so all GPUs produce the same image
  renWin->SetMultiSamples(0);

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

//  ren1->AddActor(follower);
  ren1->AddActor(p3dFollower);
//  ren1->AddActor(a);
//  ren1->AddActor(actor);

  // 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;
}