40 template<
typename Po
intSource,
typename Po
intTarget>
void
48 template<
typename Po
intSource,
typename Po
intTarget>
void
52 viewer_thread_.~thread ();
56 template<
typename Po
intSource,
typename Po
intTarget>
void
62 viewer_->initCameraParameters ();
74 viewer_->createViewPort (0.0, 0.0, 0.5, 1.0, v1);
75 viewer_->setBackgroundColor (0, 0, 0, v1);
76 viewer_->addText (
"Initial position of source and target point clouds", 10, 50,
"title v1", v1);
77 viewer_->addText (
"Blue -> target", 10, 30, 0.0, 0.0, 1.0,
"legend target v1", v1);
78 viewer_->addText (
"Red -> source", 10, 10, 1.0, 0.0, 0.0,
"legend source v1", v1);
80 viewer_->addPointCloud<PointSource> (cloud_source_.makeShared (), cloud_source_handler_,
"cloud source v1", v1);
81 viewer_->addPointCloud<PointTarget> (cloud_target_.makeShared (), cloud_target_handler_,
"cloud target v1", v1);
85 viewer_->createViewPort (0.5, 0.0, 1.0, 1.0, v2);
86 viewer_->setBackgroundColor (0.1, 0.1, 0.1, v2);
87 std::string registration_port_title_ =
"Registration using "+registration_method_name_;
88 viewer_->addText (registration_port_title_, 10, 90,
"title v2", v2);
90 viewer_->addText (
"Yellow -> intermediate", 10, 50, 1.0, 1.0, 0.0,
"legend intermediate v2", v2);
91 viewer_->addText (
"Blue -> target", 10, 30, 0.0, 0.0, 1.0,
"legend target v2", v2);
92 viewer_->addText (
"Red -> source", 10, 10, 1.0, 0.0, 0.0,
"legend source v2", v1);
95 viewer_->addPointCloud<PointTarget> (cloud_target_.makeShared (), cloud_target_handler_,
"cloud target v2", v2);
96 viewer_->addPointCloud<PointSource> (cloud_intermediate_.makeShared (), cloud_intermediate_handler_,
97 "cloud intermediate v2", v2);
100 size_t correspondeces_old_size = 0;
103 viewer_->addCoordinateSystem (1.0);
106 std::string line_root_ =
"line";
109 while (!viewer_->wasStopped ())
112 visualizer_updating_mutex_.lock ();
116 viewer_->removePointCloud (
"cloud intermediate v2", v2);
119 viewer_->addPointCloud<PointSource> (cloud_intermediate_.makeShared (), cloud_intermediate_handler_,
120 "cloud intermediate v2", v2);
124 std::string line_name_;
126 for (
size_t correspondence_id = 0; correspondence_id < correspondeces_old_size; ++correspondence_id)
129 line_name_ = getIndexedName (line_root_, correspondence_id);
132 viewer_->removeShape (line_name_, v2);
136 size_t correspondences_new_size = cloud_intermediate_indices_.size ();
139 std::stringstream stream_;
140 stream_ <<
"Random -> correspondences " << correspondences_new_size;
141 viewer_->removeShape (
"correspondences_size", 0);
142 viewer_->addText (stream_.str(), 10, 70, 0.0, 1.0, 0.0,
"correspondences_size", v2);
145 if( ( 0 < maximum_displayed_correspondences_ ) &&
146 (maximum_displayed_correspondences_ < correspondences_new_size) )
147 correspondences_new_size = maximum_displayed_correspondences_;
150 correspondeces_old_size = correspondences_new_size;
153 for (
size_t correspondence_id = 0; correspondence_id < correspondences_new_size; ++correspondence_id)
156 double random_red = 255 * rand () / (RAND_MAX + 1.0);
157 double random_green = 255 * rand () / (RAND_MAX + 1.0);
158 double random_blue = 255 * rand () / (RAND_MAX + 1.0);
161 line_name_ = getIndexedName (line_root_, correspondence_id);
164 viewer_->addLine (cloud_intermediate_[cloud_intermediate_indices_[correspondence_id]],
165 cloud_target_[cloud_target_indices_[correspondence_id]],
166 random_red, random_green, random_blue,
171 visualizer_updating_mutex_.unlock ();
174 viewer_->spinOnce (100);
175 boost::this_thread::sleep (boost::posix_time::microseconds (100000));
181 template<
typename Po
intSource,
typename Po
intTarget>
void
184 const std::vector<int> &indices_src,
186 const std::vector<int> &indices_tgt)
189 visualizer_updating_mutex_.lock ();
193 if (!first_update_flag_)
195 first_update_flag_ =
true;
197 this->cloud_source_ = cloud_src;
198 this->cloud_target_ = cloud_tgt;
200 this->cloud_intermediate_ = cloud_src;
204 cloud_intermediate_ = cloud_src;
205 cloud_intermediate_indices_ = indices_src;
208 cloud_target_indices_ = indices_tgt;
211 visualizer_updating_mutex_.unlock ();
Handler for predefined user colors.
void startDisplay()
Start the viewer thread.
PCL Visualizer main class.
void stopDisplay()
Stop the viewer thread.
RegistrationVisualizer represents the base class for rendering the intermediate positions ocupied by ...
void updateIntermediateCloud(const pcl::PointCloud< PointSource > &cloud_src, const std::vector< int > &indices_src, const pcl::PointCloud< PointTarget > &cloud_tgt, const std::vector< int > &indices_tgt)
Updates visualizer local buffers cloud_intermediate, cloud_intermediate_indices, cloud_target_indices...