@@ -128,62 +128,23 @@ pcl::visualization::PCLVisualizer::PCLVisualizer (const std::string &name, const
128
128
, exit_main_loop_timer_callback_ ()
129
129
, exit_callback_ ()
130
130
, rens_ (vtkSmartPointer<vtkRendererCollection>::New ())
131
- , win_ ()
131
+ , win_ (vtkSmartPointer<vtkRenderWindow>::New () )
132
132
, style_ (vtkSmartPointer<pcl::visualization::PCLVisualizerInteractorStyle>::New ())
133
133
, cloud_actor_map_ (new CloudActorMap)
134
134
, shape_actor_map_ (new ShapeActorMap)
135
135
, coordinate_actor_map_ (new CoordinateActorMap)
136
136
, camera_set_ ()
137
137
, camera_file_loaded_ (false )
138
138
{
139
- // Create a Renderer
140
139
vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New ();
141
- ren->AddObserver (vtkCommand::EndEvent, update_fps_);
142
- // Add it to the list of renderers
143
- rens_->AddItem (ren);
144
-
145
- // FPS callback
146
- vtkSmartPointer<vtkTextActor> txt = vtkSmartPointer<vtkTextActor>::New ();
147
- update_fps_->actor = txt;
148
- update_fps_->pcl_visualizer = this ;
149
- update_fps_->decimated = false ;
150
- ren->AddActor (txt);
151
- txt->SetInput (" 0 FPS" );
152
-
153
- // Create a RendererWindow
154
- win_ = vtkSmartPointer<vtkRenderWindow>::New ();
155
- win_->SetWindowName (name.c_str ());
156
-
157
- // Get screen size
158
- int scr_size_x = win_->GetScreenSize ()[0 ];
159
- int scr_size_y = win_->GetScreenSize ()[1 ];
160
- // Set the window size as 1/2 of the screen size
161
- win_->SetSize (scr_size_x / 2 , scr_size_y / 2 );
162
-
163
- // By default, don't use vertex buffer objects
164
- use_vbos_ = false ;
165
-
166
- // Add all renderers to the window
167
- rens_->InitTraversal ();
168
- vtkRenderer* renderer = NULL ;
169
- while ((renderer = rens_->GetNextItem ()) != NULL )
170
- win_->AddRenderer (renderer);
171
-
172
- // Set renderer window in case no interactor is created
173
- style_->setRenderWindow (win_);
174
-
175
- // Create the interactor style
176
- style_->Initialize ();
177
- style_->setRendererCollection (rens_);
178
- style_->setCloudActorMap (cloud_actor_map_);
179
- style_->setShapeActorMap (shape_actor_map_);
180
- style_->UseTimersOn ();
181
- style_->setUseVbos (use_vbos_);
140
+ setupRenderer (ren);
141
+ setupFPSCallback (ren);
142
+ setupRenderWindow (name);
143
+ setDefaultWindowSizeAndPos ();
144
+ setupStyle ();
182
145
183
146
if (create_interactor)
184
147
createInteractor ();
185
-
186
- win_->SetWindowName (name.c_str ());
187
148
}
188
149
189
150
// ///////////////////////////////////////////////////////////////////////////////////////////
@@ -197,86 +158,92 @@ pcl::visualization::PCLVisualizer::PCLVisualizer (int &argc, char **argv, const
197
158
, exit_main_loop_timer_callback_ ()
198
159
, exit_callback_ ()
199
160
, rens_ (vtkSmartPointer<vtkRendererCollection>::New ())
200
- , win_ ()
161
+ , win_ (vtkSmartPointer<vtkRenderWindow>::New () )
201
162
, style_ (style)
202
163
, cloud_actor_map_ (new CloudActorMap)
203
164
, shape_actor_map_ (new ShapeActorMap)
204
165
, coordinate_actor_map_ (new CoordinateActorMap)
205
166
, camera_set_ ()
206
167
, camera_file_loaded_ (false )
207
168
{
208
- // Create a Renderer
209
169
vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New ();
210
- ren->AddObserver (vtkCommand::EndEvent, update_fps_);
211
- // Add it to the list of renderers
212
- rens_->AddItem (ren);
170
+ setupRenderer (ren);
171
+ setupFPSCallback (ren);
172
+ setupRenderWindow (name);
173
+ setupStyle ();
174
+ setupCamera (argc, argv);
213
175
214
- // FPS callback
215
- vtkSmartPointer<vtkTextActor> txt = vtkSmartPointer<vtkTextActor>::New ();
216
- update_fps_->actor = txt;
217
- update_fps_->pcl_visualizer = this ;
218
- update_fps_->decimated = false ;
219
- ren->AddActor (txt);
220
- txt->SetInput (" 0 FPS" );
176
+ if (!camera_set_ && !camera_file_loaded_)
177
+ setDefaultWindowSizeAndPos ();
221
178
222
- // Create a RendererWindow
223
- win_ = vtkSmartPointer<vtkRenderWindow>::New ();
224
- win_->SetWindowName (name.c_str ());
225
-
226
- // By default, don't use vertex buffer objects
227
- use_vbos_ = false ;
228
-
229
- // Add all renderers to the window
230
- rens_->InitTraversal ();
231
- vtkRenderer* renderer = NULL ;
232
- while ((renderer = rens_->GetNextItem ()) != NULL )
233
- win_->AddRenderer (renderer);
234
-
235
- // Set renderer window in case no interactor is created
236
- style_->setRenderWindow (win_);
179
+ if (create_interactor)
180
+ createInteractor ();
237
181
238
- // Create the interactor style
239
- style_->Initialize ();
240
- style_->setRendererCollection (rens_);
241
- style_->setCloudActorMap (cloud_actor_map_);
242
- style_->setShapeActorMap (shape_actor_map_);
243
- style_->UseTimersOn ();
182
+ // window name should be reset due to its reset somewhere in camera initialization
183
+ win_->SetWindowName (name.c_str ());
184
+ }
244
185
245
- // Get screen size
246
- int scr_size_x = win_->GetScreenSize ()[0 ];
247
- int scr_size_y = win_->GetScreenSize ()[1 ];
186
+ // ///////////////////////////////////////////////////////////////////////////////////////////
187
+ pcl::visualization::PCLVisualizer::PCLVisualizer (vtkSmartPointer<vtkRenderer> ren, vtkSmartPointer<vtkRenderWindow> wind,
188
+ const std::string &name, const bool create_interactor)
189
+ : interactor_ ()
190
+ , update_fps_ (vtkSmartPointer<FPSCallback>::New ())
191
+ #if !((VTK_MAJOR_VERSION == 5) && (VTK_MINOR_VERSION <= 4))
192
+ , stopped_ ()
193
+ , timer_id_ ()
194
+ #endif
195
+ , exit_main_loop_timer_callback_ ()
196
+ , exit_callback_ ()
197
+ , rens_ (vtkSmartPointer<vtkRendererCollection>::New ())
198
+ , win_ (wind)
199
+ , style_ (vtkSmartPointer<pcl::visualization::PCLVisualizerInteractorStyle>::New ())
200
+ , cloud_actor_map_ (new CloudActorMap)
201
+ , shape_actor_map_ (new ShapeActorMap)
202
+ , coordinate_actor_map_ (new CoordinateActorMap)
203
+ , camera_set_ ()
204
+ , camera_file_loaded_ (false )
205
+ {
206
+ setupRenderer (ren);
207
+ setupFPSCallback (ren);
208
+ setupRenderWindow (name);
209
+ setDefaultWindowSizeAndPos ();
210
+ setupStyle ();
248
211
249
- // Set default camera parameters
250
- initCameraParameters ();
212
+ if (create_interactor)
213
+ createInteractor ();
214
+ }
251
215
252
- // Parse the camera settings and update the internal camera
253
- camera_set_ = getCameraParameters (argc, argv);
254
- // Calculate unique camera filename for camera parameter saving/restoring
255
- if (!camera_set_)
256
- {
257
- std::string camera_file = getUniqueCameraFile (argc, argv);
258
- if (!camera_file.empty ())
259
- {
260
- if (boost::filesystem::exists (camera_file) && style_->loadCameraParameters (camera_file))
261
- {
262
- camera_file_loaded_ = true ;
263
- }
264
- else
265
- {
266
- style_->setCameraFile (camera_file);
267
- }
268
- }
269
- }
270
- // Set the window size as 1/2 of the screen size or the user given parameter
216
+ // ///////////////////////////////////////////////////////////////////////////////////////////
217
+ pcl::visualization::PCLVisualizer::PCLVisualizer (int &argc, char **argv, vtkSmartPointer<vtkRenderer> ren, vtkSmartPointer<vtkRenderWindow> wind,
218
+ const std::string &name, PCLVisualizerInteractorStyle* style, const bool create_interactor)
219
+ : interactor_ ()
220
+ , update_fps_ (vtkSmartPointer<FPSCallback>::New ())
221
+ #if !((VTK_MAJOR_VERSION == 5) && (VTK_MINOR_VERSION <= 4))
222
+ , stopped_ ()
223
+ , timer_id_ ()
224
+ #endif
225
+ , exit_main_loop_timer_callback_ ()
226
+ , exit_callback_ ()
227
+ , rens_ (vtkSmartPointer<vtkRendererCollection>::New ())
228
+ , win_ (wind)
229
+ , style_ (style)
230
+ , cloud_actor_map_ (new CloudActorMap)
231
+ , shape_actor_map_ (new ShapeActorMap)
232
+ , coordinate_actor_map_ (new CoordinateActorMap)
233
+ , camera_set_ ()
234
+ , camera_file_loaded_ (false )
235
+ {
236
+ setupRenderer (ren);
237
+ setupFPSCallback (ren);
238
+ setupRenderWindow (name);
239
+ setupStyle ();
240
+ setupCamera (argc, argv);
271
241
if (!camera_set_ && !camera_file_loaded_)
272
- {
273
- win_->SetSize (scr_size_x/2 , scr_size_y/2 );
274
- win_->SetPosition (0 , 0 );
275
- }
276
-
242
+ setDefaultWindowSizeAndPos ();
277
243
if (create_interactor)
278
244
createInteractor ();
279
245
246
+ // window name should be reset due to its reset somewhere in camera initialization
280
247
win_->SetWindowName (name.c_str ());
281
248
}
282
249
@@ -387,6 +354,103 @@ pcl::visualization::PCLVisualizer::setupInteractor (
387
354
// iren->SetPicker (pp);
388
355
}
389
356
357
+ // ///////////////////////////////////////////////////////////////////////////////////////////
358
+ void pcl::visualization::PCLVisualizer::setupRenderer (vtkSmartPointer<vtkRenderer> ren)
359
+ {
360
+ if (!ren)
361
+ PCL_ERROR (" Passed pointer to renderer is null" );
362
+
363
+ ren->AddObserver (vtkCommand::EndEvent, update_fps_);
364
+ // Add it to the list of renderers
365
+ rens_->AddItem (ren);
366
+ }
367
+
368
+ // ///////////////////////////////////////////////////////////////////////////////////////////
369
+ void pcl::visualization::PCLVisualizer::setupFPSCallback (const vtkSmartPointer<vtkRenderer>& ren)
370
+ {
371
+ if (!ren)
372
+ PCL_ERROR (" Passed pointer to renderer is null" );
373
+ // FPS callback
374
+ vtkSmartPointer<vtkTextActor> txt = vtkSmartPointer<vtkTextActor>::New ();
375
+ update_fps_->actor = txt;
376
+ update_fps_->pcl_visualizer = this ;
377
+ update_fps_->decimated = false ;
378
+ ren->AddActor (txt);
379
+ txt->SetInput (" 0 FPS" );
380
+ }
381
+
382
+ // ///////////////////////////////////////////////////////////////////////////////////////////
383
+ void pcl::visualization::PCLVisualizer::setupRenderWindow (const std::string& name)
384
+ {
385
+ if (!win_)
386
+ PCL_ERROR (" Pointer to render window is null" );
387
+
388
+ win_->SetWindowName (name.c_str ());
389
+
390
+ // By default, don't use vertex buffer objects
391
+ use_vbos_ = false ;
392
+
393
+ // Add all renderers to the window
394
+ rens_->InitTraversal ();
395
+ vtkRenderer* renderer = NULL ;
396
+ while ((renderer = rens_->GetNextItem ()) != NULL )
397
+ win_->AddRenderer (renderer);
398
+ }
399
+
400
+ // ///////////////////////////////////////////////////////////////////////////////////////////
401
+ void pcl::visualization::PCLVisualizer::setupStyle ()
402
+ {
403
+ if (!style_)
404
+ PCL_ERROR (" Pointer to style is null" );
405
+
406
+ // Set rend erer window in case no interactor is created
407
+ style_->setRenderWindow (win_);
408
+
409
+ // Create the interactor style
410
+ style_->Initialize ();
411
+ style_->setRendererCollection (rens_);
412
+ style_->setCloudActorMap (cloud_actor_map_);
413
+ style_->setShapeActorMap (shape_actor_map_);
414
+ style_->UseTimersOn ();
415
+ style_->setUseVbos (use_vbos_);
416
+ }
417
+
418
+ // ///////////////////////////////////////////////////////////////////////////////////////////
419
+ void pcl::visualization::PCLVisualizer::setDefaultWindowSizeAndPos ()
420
+ {
421
+ if (!win_)
422
+ PCL_ERROR (" Pointer to render window is null" );
423
+ int scr_size_x = win_->GetScreenSize ()[0 ];
424
+ int scr_size_y = win_->GetScreenSize ()[1 ];
425
+ win_->SetSize (scr_size_x / 2 , scr_size_y / 2 );
426
+ win_->SetPosition (0 , 0 );
427
+ }
428
+
429
+ // ///////////////////////////////////////////////////////////////////////////////////////////
430
+ void pcl::visualization::PCLVisualizer::setupCamera (int &argc, char **argv)
431
+ {
432
+ initCameraParameters ();
433
+
434
+ // Parse the camera settings and update the internal camera
435
+ camera_set_ = getCameraParameters (argc, argv);
436
+ // Calculate unique camera filename for camera parameter saving/restoring
437
+ if (!camera_set_)
438
+ {
439
+ std::string camera_file = getUniqueCameraFile (argc, argv);
440
+ if (!camera_file.empty ())
441
+ {
442
+ if (boost::filesystem::exists (camera_file) && style_->loadCameraParameters (camera_file))
443
+ {
444
+ camera_file_loaded_ = true ;
445
+ }
446
+ else
447
+ {
448
+ style_->setCameraFile (camera_file);
449
+ }
450
+ }
451
+ }
452
+ }
453
+
390
454
// ///////////////////////////////////////////////////////////////////////////////////////////
391
455
pcl::visualization::PCLVisualizer::~PCLVisualizer ()
392
456
{
0 commit comments