48template<
typename Po
intSource,
typename Po
intTarget,
typename Scalar>
void
56template<
typename Po
intSource,
typename Po
intTarget,
typename Scalar>
void
60 if(viewer_thread_.joinable())
61 viewer_thread_.join();
62 viewer_thread_.~thread ();
66template<
typename Po
intSource,
typename Po
intTarget,
typename Scalar>
void
72 viewer_->initCameraParameters ();
84 viewer_->createViewPort (0.0, 0.0, 0.5, 1.0, v1);
85 viewer_->setBackgroundColor (0, 0, 0, v1);
86 viewer_->addText (
"Initial position of source and target point clouds", 10, 50,
"title v1", v1);
87 viewer_->addText (
"Blue -> target", 10, 30, 0.0, 0.0, 1.0,
"legend target v1", v1);
88 viewer_->addText (
"Red -> source", 10, 10, 1.0, 0.0, 0.0,
"legend source v1", v1);
90 viewer_->addPointCloud<PointSource> (cloud_source_.makeShared (), cloud_source_handler_,
"cloud source v1", v1);
91 viewer_->addPointCloud<PointTarget> (cloud_target_.makeShared (), cloud_target_handler_,
"cloud target v1", v1);
95 viewer_->createViewPort (0.5, 0.0, 1.0, 1.0, v2);
96 viewer_->setBackgroundColor (0.1, 0.1, 0.1, v2);
97 std::string registration_port_title_ =
"Registration using "+registration_method_name_;
98 viewer_->addText (registration_port_title_, 10, 90,
"title v2", v2);
100 viewer_->addText (
"Yellow -> intermediate", 10, 50, 1.0, 1.0, 0.0,
"legend intermediate v2", v2);
101 viewer_->addText (
"Blue -> target", 10, 30, 0.0, 0.0, 1.0,
"legend target v2", v2);
102 viewer_->addText (
"Red -> source", 10, 10, 1.0, 0.0, 0.0,
"legend source v2", v1);
105 viewer_->addPointCloud<PointTarget> (cloud_target_.makeShared (), cloud_target_handler_,
"cloud target v2", v2);
106 viewer_->addPointCloud<PointSource> (cloud_intermediate_.makeShared (), cloud_intermediate_handler_,
107 "cloud intermediate v2", v2);
110 std::size_t correspondeces_old_size = 0;
113 viewer_->addCoordinateSystem (1.0,
"global");
116 std::string line_root_ =
"line";
119 while (!viewer_->wasStopped ())
122 visualizer_updating_mutex_.lock ();
126 viewer_->removePointCloud (
"cloud intermediate v2", v2);
129 viewer_->addPointCloud<PointSource> (cloud_intermediate_.makeShared (), cloud_intermediate_handler_,
130 "cloud intermediate v2", v2);
134 std::string line_name_;
136 for (std::size_t correspondence_id = 0; correspondence_id < correspondeces_old_size; ++correspondence_id)
139 line_name_ = getIndexedName (line_root_, correspondence_id);
142 viewer_->removeShape (line_name_, v2);
146 std::size_t correspondences_new_size = cloud_intermediate_indices_.size ();
149 const std::string correspondences_text =
"Random -> correspondences " + std::to_string(correspondences_new_size);
150 viewer_->removeShape (
"correspondences_size", 0);
151 viewer_->addText (correspondences_text, 10, 70, 0.0, 1.0, 0.0,
"correspondences_size", v2);
154 if( ( 0 < maximum_displayed_correspondences_ ) &&
155 (maximum_displayed_correspondences_ < correspondences_new_size) )
156 correspondences_new_size = maximum_displayed_correspondences_;
159 correspondeces_old_size = correspondences_new_size;
162 for (std::size_t correspondence_id = 0; correspondence_id < correspondences_new_size; ++correspondence_id)
165 double random_red = 255 * rand () / (RAND_MAX + 1.0);
166 double random_green = 255 * rand () / (RAND_MAX + 1.0);
167 double random_blue = 255 * rand () / (RAND_MAX + 1.0);
170 line_name_ = getIndexedName (line_root_, correspondence_id);
173 viewer_->addLine (cloud_intermediate_[cloud_intermediate_indices_[correspondence_id]],
174 cloud_target_[cloud_target_indices_[correspondence_id]],
175 random_red, random_green, random_blue,
180 visualizer_updating_mutex_.unlock ();
183 viewer_->spinOnce (100);
184 using namespace std::chrono_literals;
185 std::this_thread::sleep_for(100ms);
190template<
typename Po
intSource,
typename Po
intTarget,
typename Scalar>
void
198 visualizer_updating_mutex_.lock ();
202 if (!first_update_flag_)
204 first_update_flag_ =
true;
206 this->cloud_source_ = cloud_src;
207 this->cloud_target_ = cloud_tgt;
209 this->cloud_intermediate_ = cloud_src;
213 cloud_intermediate_ = cloud_src;
214 cloud_intermediate_indices_ = indices_src;
217 cloud_target_indices_ = indices_tgt;
220 visualizer_updating_mutex_.unlock ();
PointCloud represents the base class in PCL for storing collections of 3D points.
RegistrationVisualizer represents the base class for rendering the intermediate positions occupied by...
void stopDisplay()
Stop the viewer thread.
void startDisplay()
Start the viewer thread.
void updateIntermediateCloud(const pcl::PointCloud< PointSource > &cloud_src, const pcl::Indices &indices_src, const pcl::PointCloud< PointTarget > &cloud_tgt, const pcl::Indices &indices_tgt)
Updates visualizer local buffers cloud_intermediate, cloud_intermediate_indices, cloud_target_indices...
PCL Visualizer main class.
shared_ptr< PCLVisualizer > Ptr
Handler for predefined user colors.
IndicesAllocator<> Indices
Type used for indices in PCL.