Viewer.h
Go to the documentation of this file.
1 
19 #pragma once
20 #ifndef _VIEWER_H
21 #define _VIEWER_H
22 
23 #include "ros/ros.h"
24 #include <pcl/visualization/pcl_visualizer.h>
25 
26 typedef pcl::PointCloud<pcl::PointXYZ> PointCloudXYZ;
27 typedef pcl::PointCloud<pcl::PointXYZRGB> PointCloudRGB;
28 typedef pcl::PointCloud<pcl::Normal> PointCloudNormal;
29 
30 class Viewer
31 {
32 public:
34  {
35  point_size_ = 2;
36  axis_scale_ = 1;
37  normals_scale_ = 0.02;
38  setColors();
39  configViewer();
40  }
41 
42  ~Viewer(){};
43 
44  struct pc_color
45  {
46  double r, g, b;
47  };
51 
52  boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer_{ new pcl::visualization::PCLVisualizer("Pointcloud "
53  "Viewer") };
54 
55  void setColors()
56  {
57  RED = { 1, 0, 0 };
58  GREEN = { 0, 1, 0 };
59  BLUE = { 0, 0, 1 };
60  PINK = { 1, 0, 0.5 };
61  ORANGE = { 1, 0.5, 0 };
62  WHITE = { 1, 1, 1 };
63  PURPLE = { 0.4, 0, 1 };
64  YELLOW = { 1, 1, 0.3 };
65  BROWN = { 0.7, 0.4, 0.1};
66  LIME = { 0.9, 1, 0};
67  CHERRY = { 1, 0, 0.5};
68  SKY = { 0.3, 1, 1};
69  PEACH = { 1, 0.8, 0.6};
70  }
71 
72  void configViewer()
73  {
74  viewer_->setBackgroundColor(0, 0, 0);
75  viewer_->addCoordinateSystem(axis_scale_);
76  viewer_->initCameraParameters();
77  }
78 
79  void loopViewer()
80  {
81  ROS_WARN("Press (X) on viewer to continue");
82  while (!viewer_->wasStopped())
83  {
84  viewer_->spinOnce(100);
85  boost::this_thread::sleep(boost::posix_time::microseconds(100000));
86  }
87  }
88 
89  void closeViewer()
90  {
91  viewer_->close();
92  }
93 
94  void resetViewer()
95  {
96  viewer_->removeAllCoordinateSystems();
97  viewer_->removeAllPointClouds();
98  viewer_->removeAllShapes();
99  }
100 
101  void setPointSize(double point_size)
102  {
103  point_size_ = point_size;
104  }
105 
106  void setAxisScale(double axis_scale)
107  {
108  axis_scale_ = axis_scale;
109  viewer_->addCoordinateSystem(axis_scale_);
110  }
111 
112  void setNormalsScale(double normals_scale)
113  {
114  normals_scale_ = normals_scale;
115  }
116 
117  void keyboardCallback(const pcl::visualization::KeyboardEvent& event, void* nothing)
118  {
119  if (event.getKeySym() == "space" && event.keyDown())
120  pressed_space_ = true;
121  }
122 
124  {
125  viewer_->registerKeyboardCallback(&Viewer::keyboardCallback, *this);
126  }
127 
128  template <typename PointT>
129  void addPCToViewer(typename pcl::PointCloud<PointT>::Ptr cloud, const pc_color& color, const std::string& name)
130  {
131  pcl::visualization::PointCloudColorHandlerCustom<PointT> cloud_rgb(cloud, color.r, color.g, color.b);
132  viewer_->resetStoppedFlag();
133 
134  if (viewer_->contains(name))
135  {
136  ROS_INFO("Update cloud in Viewer");
137  viewer_->updatePointCloud(cloud, cloud_rgb, name);
138  viewer_->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, point_size_, name);
139  }
140  else
141  {
142  ROS_INFO("Add cloud in Viewer");
143  viewer_->addPointCloud<PointT>(cloud, cloud_rgb, name);
144  viewer_->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, point_size_, name);
145  }
146 
147  loopViewer();
148  }
149 
150  template <typename PointT>
151  void addPCToViewer(typename pcl::PointCloud<PointT>::Ptr cloud, const std::string& name)
152  {
153  viewer_->resetStoppedFlag();
154 
155  if (viewer_->contains(name))
156  {
157  ROS_INFO("Update cloud in Viewer");
158  viewer_->updatePointCloud(cloud, name);
159  viewer_->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, point_size_, name);
160  }
161  else
162  {
163  ROS_INFO("Add cloud in Viewer");
164  viewer_->addPointCloud<PointT>(cloud, name);
165  viewer_->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, point_size_, name);
166  }
167 
168  loopViewer();
169  }
170 
171  template <typename PointT, typename CloudT>
172  void addNormalsToViewer(typename pcl::PointCloud<PointT>::Ptr cloud,
173  typename pcl::PointCloud<CloudT>::Ptr normals,
174  const std::string& name)
175  {
176  viewer_->resetStoppedFlag();
177 
178  if (viewer_->contains(name))
179  {
180  ROS_INFO("Update normals in Viewer");
181  deletePCFromViewer(name);
182  viewer_->addPointCloudNormals<PointT, CloudT>(cloud, normals, 1, normals_scale_, name);
183  viewer_->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, point_size_, name);
184  }
185  else
186  {
187  ROS_INFO("Add normals in Viewer");
188  viewer_->addPointCloudNormals<PointT, CloudT>(cloud, normals, 1, normals_scale_, name);
189  viewer_->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, point_size_, name);
190  }
191  }
192 
193  template <typename PointT>
194  void addCorrespondencesToViewer(typename pcl::PointCloud<PointT>::Ptr source_cloud,
195  typename pcl::PointCloud<PointT>::Ptr target_cloud,
196  pcl::CorrespondencesPtr correspondences)
197  {
198  viewer_->resetStoppedFlag();
199 
200  ROS_INFO("Add correspondences between clouds in Viewer");
201  viewer_->addCorrespondences<PointT>(source_cloud, target_cloud, *correspondences);
202 
203  loopViewer();
204  }
205 
206  void deletePCFromViewer(const std::string& name)
207  {
208  viewer_->resetStoppedFlag();
209 
210  ROS_INFO("Remove cloud from Viewer");
211  viewer_->removePointCloud(name);
212  }
213 
215  {
216  viewer_->resetStoppedFlag();
217 
218  ROS_INFO("Remove correspondences from Viewer");
219  viewer_->removeCorrespondences();
220  }
221 
222  template <typename PointT>
223  static void visualizePointCloud(typename pcl::PointCloud<PointT>::Ptr cloud)
224  {
226  new pcl::visualization::PCLVisualizer("Pointcloud viewer"));
227  ROS_INFO("Display cloud in Viewer");
228 
229  pc_viewer->setBackgroundColor(0, 0, 0);
230  pc_viewer->addPointCloud<PointT>(cloud, "cloud");
231  pc_viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3);
232  pc_viewer->addCoordinateSystem(1.0);
233  pc_viewer->initCameraParameters();
234 
235  while (!pc_viewer->wasStopped())
236  {
237  pc_viewer->spinOnce();
238  boost::this_thread::sleep(boost::posix_time::microseconds(100000));
239  }
240  pc_viewer->close();
241  }
242 
243  static void visualizeMesh(pcl::PolygonMesh::Ptr mesh)
244  {
246  new pcl::visualization::PCLVisualizer("Mesh mesh_viewer"));
247  ROS_INFO("Display mesh in Viewer");
248 
249  mesh_viewer->setBackgroundColor(0, 0, 0);
250  mesh_viewer->addPolygonMesh(*mesh, "meshes", 0);
251  mesh_viewer->addCoordinateSystem(1.0);
252  mesh_viewer->initCameraParameters();
253 
254  while (!mesh_viewer->wasStopped())
255  {
256  mesh_viewer->spinOnce(100);
257  boost::this_thread::sleep(boost::posix_time::microseconds(100000));
258  }
259  }
260 };
261 
262 #endif
pc_color GREEN
Definition: Viewer.h:48
double normals_scale_
Definition: Viewer.h:49
static void visualizeMesh(pcl::PolygonMesh::Ptr mesh)
Definition: Viewer.h:243
pc_color PURPLE
Definition: Viewer.h:48
pc_color SKY
Definition: Viewer.h:48
void configViewer()
Definition: Viewer.h:72
~Viewer()
Definition: Viewer.h:42
pc_color BROWN
Definition: Viewer.h:48
void setAxisScale(double axis_scale)
Definition: Viewer.h:106
pcl::PointCloud< pcl::Normal > PointCloudNormal
Definition: Viewer.h:28
void addPCToViewer(typename pcl::PointCloud< PointT >::Ptr cloud, const pc_color &color, const std::string &name)
Definition: Viewer.h:129
Definition: Viewer.h:30
#define ROS_WARN(...)
double point_size_
Definition: Viewer.h:49
pc_color YELLOW
Definition: Viewer.h:48
void resetViewer()
Definition: Viewer.h:94
void setNormalsScale(double normals_scale)
Definition: Viewer.h:112
static void visualizePointCloud(typename pcl::PointCloud< PointT >::Ptr cloud)
Definition: Viewer.h:223
void addCorrespondencesToViewer(typename pcl::PointCloud< PointT >::Ptr source_cloud, typename pcl::PointCloud< PointT >::Ptr target_cloud, pcl::CorrespondencesPtr correspondences)
Definition: Viewer.h:194
void deletePCFromViewer(const std::string &name)
Definition: Viewer.h:206
pc_color RED
Definition: Viewer.h:48
#define ROS_INFO(...)
boost::shared_ptr< pcl::visualization::PCLVisualizer > viewer_
Definition: Viewer.h:52
void setPointSize(double point_size)
Definition: Viewer.h:101
void addPCToViewer(typename pcl::PointCloud< PointT >::Ptr cloud, const std::string &name)
Definition: Viewer.h:151
pc_color PINK
Definition: Viewer.h:48
void deleteCorrespondencesFromViewer()
Definition: Viewer.h:214
pc_color LIME
Definition: Viewer.h:48
pc_color BLUE
Definition: Viewer.h:48
pc_color WHITE
Definition: Viewer.h:48
void setColors()
Definition: Viewer.h:55
void loopViewer()
Definition: Viewer.h:79
pc_color CHERRY
Definition: Viewer.h:48
pc_color PEACH
Definition: Viewer.h:48
pc_color ORANGE
Definition: Viewer.h:48
pcl::PointCloud< pcl::PointXYZRGB > PointCloudRGB
Definition: Viewer.h:27
double r
Definition: Viewer.h:46
pcl::PointCloud< pcl::PointXYZ > PointCloudXYZ
Definition: Viewer.h:26
void keyboardCallback(const pcl::visualization::KeyboardEvent &event, void *nothing)
Definition: Viewer.h:117
void checkForSpaceKeyPressed()
Definition: Viewer.h:123
double b
Definition: Viewer.h:46
void closeViewer()
Definition: Viewer.h:89
double axis_scale_
Definition: Viewer.h:49
void addNormalsToViewer(typename pcl::PointCloud< PointT >::Ptr cloud, typename pcl::PointCloud< CloudT >::Ptr normals, const std::string &name)
Definition: Viewer.h:172
Viewer()
Definition: Viewer.h:33
double g
Definition: Viewer.h:46
bool pressed_space_
Definition: Viewer.h:50


leica_point_cloud_processing
Author(s): Ines Lara Sicilia
autogenerated on Fri Feb 5 2021 03:20:30