39 template<
typename Po
intSource,
typename Po
intTarget>
void
47 template<
typename Po
intSource,
typename Po
intTarget>
void
51 viewer_thread_.~thread ();
55 template<
typename Po
intSource,
typename Po
intTarget>
void
61 viewer_->initCameraParameters ();
73 viewer_->createViewPort (0.0, 0.0, 0.5, 1.0, v1);
74 viewer_->setBackgroundColor (0, 0, 0, v1);
75 viewer_->addText (
"Initial position of source and target point clouds", 10, 50,
"title v1", v1);
76 viewer_->addText (
"Blue -> target", 10, 30, 0.0, 0.0, 1.0,
"legend target v1", v1);
77 viewer_->addText (
"Red -> source", 10, 10, 1.0, 0.0, 0.0,
"legend source v1", v1);
79 viewer_->addPointCloud<PointSource> (cloud_source_.makeShared (), cloud_source_handler_,
"cloud source v1", v1);
80 viewer_->addPointCloud<PointTarget> (cloud_target_.makeShared (), cloud_target_handler_,
"cloud target v1", v1);
84 viewer_->createViewPort (0.5, 0.0, 1.0, 1.0, v2);
85 viewer_->setBackgroundColor (0.1, 0.1, 0.1, v2);
86 std::string registration_port_title_ =
"Registration using "+registration_method_name_;
87 viewer_->addText (registration_port_title_, 10, 90,
"title v2", v2);
89 viewer_->addText (
"Yellow -> intermediate", 10, 50, 1.0, 1.0, 0.0,
"legend intermediate v2", v2);
90 viewer_->addText (
"Blue -> target", 10, 30, 0.0, 0.0, 1.0,
"legend target v2", v2);
91 viewer_->addText (
"Red -> source", 10, 10, 1.0, 0.0, 0.0,
"legend source v2", v1);
94 viewer_->addPointCloud<PointTarget> (cloud_target_.makeShared (), cloud_target_handler_,
"cloud target v2", v2);
95 viewer_->addPointCloud<PointSource> (cloud_intermediate_.makeShared (), cloud_intermediate_handler_,
96 "cloud intermediate v2", v2);
99 size_t correspondeces_old_size = 0;
102 viewer_->addCoordinateSystem (1.0);
105 std::string line_root_ =
"line";
108 while (!viewer_->wasStopped ())
111 visualizer_updating_mutex_.lock ();
115 viewer_->removePointCloud (
"cloud intermediate v2", v2);
118 viewer_->addPointCloud<
pcl::PointXYZ> (cloud_intermediate_.makeShared (), cloud_intermediate_handler_,
119 "cloud intermediate v2", v2);
123 std::string line_name_;
125 for (
size_t correspondence_id = 0; correspondence_id < correspondeces_old_size; ++correspondence_id)
128 line_name_ = getIndexedName (line_root_, correspondence_id);
131 viewer_->removeShape (line_name_, v2);
135 size_t correspondences_new_size = cloud_intermediate_indices_.size ();
138 std::stringstream stream_;
139 stream_ <<
"Random -> correspondences " << correspondences_new_size;
140 viewer_->removeShape (
"correspondences_size", 0);
141 viewer_->addText (stream_.str(), 10, 70, 0.0, 1.0, 0.0,
"correspondences_size", v2);
144 if( ( 0 < maximum_displayed_correspondences_ ) &&
145 (maximum_displayed_correspondences_ < correspondences_new_size) )
146 correspondences_new_size = maximum_displayed_correspondences_;
149 correspondeces_old_size = correspondences_new_size;
152 for (
size_t correspondence_id = 0; correspondence_id < correspondences_new_size; ++correspondence_id)
155 double random_red = 255 * rand () / (RAND_MAX + 1.0);
156 double random_green = 255 * rand () / (RAND_MAX + 1.0);
157 double random_blue = 255 * rand () / (RAND_MAX + 1.0);
160 line_name_ = getIndexedName (line_root_, correspondence_id);
163 viewer_->addLine (cloud_intermediate_[cloud_intermediate_indices_[correspondence_id]],
164 cloud_target_[cloud_target_indices_[correspondence_id]],
165 random_red, random_green, random_blue,
170 visualizer_updating_mutex_.unlock ();
173 viewer_->spinOnce (100);
174 boost::this_thread::sleep (boost::posix_time::microseconds (100000));
180 template<
typename Po
intSource,
typename Po
intTarget>
void
183 const std::vector<int> &indices_src,
185 const std::vector<int> &indices_tgt)
188 visualizer_updating_mutex_.lock ();
192 if (!first_update_flag_)
194 first_update_flag_ =
true;
196 this->cloud_source_ = cloud_src;
197 this->cloud_target_ = cloud_tgt;
199 this->cloud_intermediate_ = cloud_src;
203 cloud_intermediate_ = cloud_src;
204 cloud_intermediate_indices_ = indices_src;
207 cloud_target_indices_ = indices_tgt;
210 visualizer_updating_mutex_.unlock ();