Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new constructors to PCLVisualizer #2004

Merged
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions visualization/include/pcl/visualization/pcl_visualizer.h
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,26 @@ namespace pcl
*/
PCLVisualizer (int &argc, char **argv, const std::string &name = "",
PCLVisualizerInteractorStyle* style = PCLVisualizerInteractorStyle::New (), const bool create_interactor = true);

/** \brief PCL Visualizer constructor.
* \param[in] custom vtk renderer
* \param[in] custom vtk render window
* \param[in] create_interactor if true (default), create an interactor, false otherwise
*/
PCLVisualizer(vtkSmartPointer<vtkRenderer> ren, vtkSmartPointer<vtkRenderWindow> wind, const std::string &name = "", const bool create_interactor = true);

/** \brief PCL Visualizer constructor.
* \param[in] argc
* \param[in] argv
* \param[in] custom vtk renderer
* \param[in] custom vtk render window
* \param[in] style interactor style (defaults to PCLVisualizerInteractorStyle)
* \param[in] create_interactor if true (default), create an interactor, false otherwise
*/
PCLVisualizer(int &argc, char **argv, vtkSmartPointer<vtkRenderer> ren, vtkSmartPointer<vtkRenderWindow> wind, const std::string &name = "",
PCLVisualizerInteractorStyle* style = PCLVisualizerInteractorStyle::New(),
const bool create_interactor = true);


/** \brief PCL Visualizer destructor. */
virtual ~PCLVisualizer ();
Expand Down Expand Up @@ -1939,6 +1959,25 @@ namespace pcl
vtkSmartPointer<vtkRenderWindowInteractor> interactor_;
#endif
private:
/** \brief Internal function for object construction
* \param[in] custom vtk renderer
* \param[in] custom vtk render window
* \param[in] create_interactor if true (default), create an interactor, false otherwise
*/
void construct(vtkSmartPointer<vtkRenderer> ren, vtkSmartPointer<vtkRenderWindow> wind,
const std::string &name, const bool create_interactor);

/** \brief Internal function for object construction
* \param[in] argc
* \param[in] argv
* \param[in] custom vtk renderer
* \param[in] custom vtk render window
* \param[in] style interactor style (defaults to PCLVisualizerInteractorStyle)
* \param[in] create_interactor if true (default), create an interactor, false otherwise
*/
void construct(int &argc, char **argv, vtkSmartPointer<vtkRenderer> ren, vtkSmartPointer<vtkRenderWindow> wind,
const std::string &name, PCLVisualizerInteractorStyle* style, const bool create_interactor );

struct PCL_EXPORTS ExitMainLoopTimerCallback : public vtkCommand
{
static ExitMainLoopTimerCallback* New ()
Expand Down
301 changes: 182 additions & 119 deletions visualization/src/pcl_visualizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,54 +136,7 @@ pcl::visualization::PCLVisualizer::PCLVisualizer (const std::string &name, const
, camera_set_ ()
, camera_file_loaded_ (false)
{
// Create a Renderer
vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New ();
ren->AddObserver (vtkCommand::EndEvent, update_fps_);
// Add it to the list of renderers
rens_->AddItem (ren);

// FPS callback
vtkSmartPointer<vtkTextActor> txt = vtkSmartPointer<vtkTextActor>::New ();
update_fps_->actor = txt;
update_fps_->pcl_visualizer = this;
update_fps_->decimated = false;
ren->AddActor (txt);
txt->SetInput("0 FPS");

// Create a RendererWindow
win_ = vtkSmartPointer<vtkRenderWindow>::New ();
win_->SetWindowName (name.c_str ());

// Get screen size
int scr_size_x = win_->GetScreenSize ()[0];
int scr_size_y = win_->GetScreenSize ()[1];
// Set the window size as 1/2 of the screen size
win_->SetSize (scr_size_x / 2, scr_size_y / 2);

// By default, don't use vertex buffer objects
use_vbos_ = false;

// Add all renderers to the window
rens_->InitTraversal ();
vtkRenderer* renderer = NULL;
while ((renderer = rens_->GetNextItem ()) != NULL)
win_->AddRenderer (renderer);

// Set renderer window in case no interactor is created
style_->setRenderWindow (win_);

// Create the interactor style
style_->Initialize ();
style_->setRendererCollection (rens_);
style_->setCloudActorMap (cloud_actor_map_);
style_->setShapeActorMap (shape_actor_map_);
style_->UseTimersOn ();
style_->setUseVbos(use_vbos_);

if (create_interactor)
createInteractor ();

win_->SetWindowName (name.c_str ());
construct(vtkSmartPointer<vtkRenderer>::New(), vtkSmartPointer<vtkRenderWindow>::New(), name, create_interactor);
}

/////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -205,79 +158,53 @@ pcl::visualization::PCLVisualizer::PCLVisualizer (int &argc, char **argv, const
, camera_set_ ()
, camera_file_loaded_ (false)
{
// Create a Renderer
vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New ();
ren->AddObserver (vtkCommand::EndEvent, update_fps_);
// Add it to the list of renderers
rens_->AddItem (ren);

// FPS callback
vtkSmartPointer<vtkTextActor> txt = vtkSmartPointer<vtkTextActor>::New ();
update_fps_->actor = txt;
update_fps_->pcl_visualizer = this;
update_fps_->decimated = false;
ren->AddActor (txt);
txt->SetInput("0 FPS");

// Create a RendererWindow
win_ = vtkSmartPointer<vtkRenderWindow>::New ();
win_->SetWindowName (name.c_str ());

// By default, don't use vertex buffer objects
use_vbos_ = false;

// Add all renderers to the window
rens_->InitTraversal ();
vtkRenderer* renderer = NULL;
while ((renderer = rens_->GetNextItem ()) != NULL)
win_->AddRenderer (renderer);

// Set renderer window in case no interactor is created
style_->setRenderWindow (win_);

// Create the interactor style
style_->Initialize ();
style_->setRendererCollection (rens_);
style_->setCloudActorMap (cloud_actor_map_);
style_->setShapeActorMap (shape_actor_map_);
style_->UseTimersOn ();

// Get screen size
int scr_size_x = win_->GetScreenSize ()[0];
int scr_size_y = win_->GetScreenSize ()[1];

// Set default camera parameters
initCameraParameters ();

// Parse the camera settings and update the internal camera
camera_set_ = getCameraParameters (argc, argv);
// Calculate unique camera filename for camera parameter saving/restoring
if (!camera_set_)
{
std::string camera_file = getUniqueCameraFile (argc, argv);
if (!camera_file.empty ())
{
if (boost::filesystem::exists (camera_file) && style_->loadCameraParameters (camera_file))
{
camera_file_loaded_ = true;
}
else
{
style_->setCameraFile (camera_file);
}
}
}
// Set the window size as 1/2 of the screen size or the user given parameter
if (!camera_set_ && !camera_file_loaded_)
{
win_->SetSize (scr_size_x/2, scr_size_y/2);
win_->SetPosition (0, 0);
}
construct(argc, argv, vtkSmartPointer<vtkRenderer>::New(), vtkSmartPointer<vtkRenderWindow>::New(), name, style, create_interactor);
}

if (create_interactor)
createInteractor ();
/////////////////////////////////////////////////////////////////////////////////////////////
pcl::visualization::PCLVisualizer::PCLVisualizer(vtkSmartPointer<vtkRenderer> ren, vtkSmartPointer<vtkRenderWindow> wind,
const std::string &name, const bool create_interactor)
: interactor_ ()
, update_fps_ (vtkSmartPointer<FPSCallback>::New ())
#if !((VTK_MAJOR_VERSION == 5) && (VTK_MINOR_VERSION <= 4))
, stopped_ ()
, timer_id_ ()
#endif
, exit_main_loop_timer_callback_ ()
, exit_callback_ ()
, rens_ (vtkSmartPointer<vtkRendererCollection>::New ())
, win_ ()
, style_ (vtkSmartPointer<pcl::visualization::PCLVisualizerInteractorStyle>::New ())
, cloud_actor_map_ (new CloudActorMap)
, shape_actor_map_ (new ShapeActorMap)
, coordinate_actor_map_ (new CoordinateActorMap)
, camera_set_ ()
, camera_file_loaded_ (false)
{
construct(ren, wind, name, create_interactor);
}

win_->SetWindowName (name.c_str ());
/////////////////////////////////////////////////////////////////////////////////////////////
pcl::visualization::PCLVisualizer::PCLVisualizer(int &argc, char **argv, vtkSmartPointer<vtkRenderer> ren, vtkSmartPointer<vtkRenderWindow> wind,
const std::string &name, PCLVisualizerInteractorStyle* style, const bool create_interactor)
: interactor_ ()
, update_fps_ (vtkSmartPointer<FPSCallback>::New ())
#if !((VTK_MAJOR_VERSION == 5) && (VTK_MINOR_VERSION <= 4))
, stopped_ ()
, timer_id_ ()
#endif
, exit_main_loop_timer_callback_ ()
, exit_callback_ ()
, rens_ (vtkSmartPointer<vtkRendererCollection>::New ())
, win_ ()
, style_ (style)
, cloud_actor_map_ (new CloudActorMap)
, shape_actor_map_ (new ShapeActorMap)
, coordinate_actor_map_ (new CoordinateActorMap)
, camera_set_ ()
, camera_file_loaded_ (false)
{
construct(argc, argv, ren, wind, name, style, create_interactor);
}

/////////////////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -387,6 +314,142 @@ pcl::visualization::PCLVisualizer::setupInteractor (
// iren->SetPicker (pp);
}

/////////////////////////////////////////////////////////////////////////////////////////////
void pcl::visualization::PCLVisualizer::construct(vtkSmartPointer<vtkRenderer> ren, vtkSmartPointer<vtkRenderWindow> wind, const std::string & name, const bool create_interactor)
{
if (!ren)
PCL_ERROR("Passed pointer to renderer is 0");

if (!wind)
PCL_ERROR("Passed pointer to render window is 0");
// Create a Renderer
ren->AddObserver(vtkCommand::EndEvent, update_fps_);
// Add it to the list of renderers
rens_->AddItem(ren);

// FPS callback
vtkSmartPointer<vtkTextActor> txt = vtkSmartPointer<vtkTextActor>::New();
update_fps_->actor = txt;
update_fps_->pcl_visualizer = this;
update_fps_->decimated = false;
ren->AddActor(txt);
txt->SetInput("0 FPS");

win_ = wind;
win_->SetWindowName(name.c_str());

// Get screen size
int scr_size_x = win_->GetScreenSize()[0];
int scr_size_y = win_->GetScreenSize()[1];
// Set the window size as 1/2 of the screen size
win_->SetSize(scr_size_x / 2, scr_size_y / 2);

// By default, don't use vertex buffer objects
use_vbos_ = false;

// Add all renderers to the window
rens_->InitTraversal();
vtkRenderer* renderer = NULL;
while ((renderer = rens_->GetNextItem()) != NULL)
win_->AddRenderer(renderer);

// Set renderer window in case no interactor is created
style_->setRenderWindow(win_);

// Create the interactor style
style_->Initialize();
style_->setRendererCollection(rens_);
style_->setCloudActorMap(cloud_actor_map_);
style_->setShapeActorMap(shape_actor_map_);
style_->UseTimersOn();
style_->setUseVbos(use_vbos_);

if (create_interactor)
createInteractor();

win_->SetWindowName(name.c_str());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Already done in line 339?

}

/////////////////////////////////////////////////////////////////////////////////////////////
void pcl::visualization::PCLVisualizer::construct(int & argc, char ** argv, vtkSmartPointer<vtkRenderer> ren, vtkSmartPointer<vtkRenderWindow> wind, const std::string & name, PCLVisualizerInteractorStyle * style, const bool create_interactor)
{
if (!ren)
PCL_ERROR("Passed pointer to renderer is 0");

if (!wind)
PCL_ERROR("Passed pointer to render window is 0");
ren->AddObserver(vtkCommand::EndEvent, update_fps_);
// Add it to the list of renderers
rens_->AddItem(ren);

// FPS callback
vtkSmartPointer<vtkTextActor> txt = vtkSmartPointer<vtkTextActor>::New();
update_fps_->actor = txt;
update_fps_->pcl_visualizer = this;
update_fps_->decimated = false;
ren->AddActor(txt);
txt->SetInput("0 FPS");

win_ = wind;
win_->SetWindowName(name.c_str());

// By default, don't use vertex buffer objects
use_vbos_ = false;

// Add all renderers to the window
rens_->InitTraversal();
vtkRenderer* renderer = NULL;
while ((renderer = rens_->GetNextItem()) != NULL)
win_->AddRenderer(renderer);

// Set renderer window in case no interactor is created
style_->setRenderWindow(wind);

// Create the interactor style
style_->Initialize();
style_->setRendererCollection(rens_);
style_->setCloudActorMap(cloud_actor_map_);
style_->setShapeActorMap(shape_actor_map_);
style_->UseTimersOn();

// Get screen size
int scr_size_x = win_->GetScreenSize()[0];
int scr_size_y = win_->GetScreenSize()[1];

// Set default camera parameters
initCameraParameters();

// Parse the camera settings and update the internal camera
camera_set_ = getCameraParameters(argc, argv);
// Calculate unique camera filename for camera parameter saving/restoring
if (!camera_set_)
{
std::string camera_file = getUniqueCameraFile(argc, argv);
if (!camera_file.empty())
{
if (boost::filesystem::exists(camera_file) && style_->loadCameraParameters(camera_file))
{
camera_file_loaded_ = true;
}
else
{
style_->setCameraFile(camera_file);
}
}
}
// Set the window size as 1/2 of the screen size or the user given parameter
if (!camera_set_ && !camera_file_loaded_)
{
win_->SetSize(scr_size_x / 2, scr_size_y / 2);
win_->SetPosition(0, 0);
}

if (create_interactor)
createInteractor();

win_->SetWindowName(name.c_str());
}

/////////////////////////////////////////////////////////////////////////////////////////////
pcl::visualization::PCLVisualizer::~PCLVisualizer ()
{
Expand Down