Point Cloud Library (PCL) 1.13.0
histogram_visualizer.h
1/*
2 * Software License Agreement (BSD License)
3 *
4 * Point Cloud Library (PCL) - www.pointclouds.org
5 * Copyright (c) 2010-2011, Willow Garage, Inc.
6 *
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * * Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * * Redistributions in binary form must reproduce the above
16 * copyright notice, this list of conditions and the following
17 * disclaimer in the documentation and/or other materials provided
18 * with the distribution.
19 * * Neither the name of Willow Garage, Inc. nor the names of its
20 * contributors may be used to endorse or promote products derived
21 * from this software without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 *
36 * $Id$
37 *
38 */
39
40#pragma once
41
42#include <pcl/visualization/interactor_style.h>
43#include <pcl/visualization/common/common.h>
44#include <pcl/visualization/common/ren_win_interact_map.h>
45
46class vtkRenderWindowInteractor;
47
48namespace pcl
49{
50 namespace visualization
51 {
52 /** \brief PCL histogram visualizer main class.
53 * \author Radu Bogdan Rusu
54 * \ingroup visualization
55 */
57 {
58 public:
59 using Ptr = shared_ptr<PCLHistogramVisualizer>;
60 using ConstPtr = shared_ptr<const PCLHistogramVisualizer>;
61
62 /** \brief PCL histogram visualizer constructor. */
64
65 virtual ~PCLHistogramVisualizer () = default;
66 /** \brief Spin once method. Calls the interactor and updates the screen once.
67 * \param[in] time - How long (in ms) should the visualization loop be allowed to run.
68 */
69 void
70 spinOnce (int time = 1);
71
72 /** \brief Spin method. Calls the interactor and runs an internal loop. */
73 void
74 spin ();
75
76 /** \brief Set the viewport's background color.
77 * \param[in] r the red component of the RGB color
78 * \param[in] g the green component of the RGB color
79 * \param[in] b the blue component of the RGB color
80 */
81 void
82 setBackgroundColor (const double &r, const double &g, const double &b);
83
84 /** \brief Add a histogram feature to screen as a separate window, from a cloud containing a single histogram.
85 * \param[in] cloud the PointCloud dataset containing the histogram
86 * \param[in] hsize the length of the histogram
87 * \param[in] id the point cloud object id (default: cloud)
88 * \param[in] win_width the width of the window
89 * \param[in] win_height the height of the window
90 */
91 template <typename PointT> bool
92 addFeatureHistogram (const pcl::PointCloud<PointT> &cloud,
93 int hsize,
94 const std::string &id = "cloud", int win_width = 640, int win_height = 200);
95
96 /** \brief Add a histogram feature to screen as a separate window from a cloud containing a single histogram.
97 * \param[in] cloud the PointCloud dataset containing the histogram
98 * \param[in] field_name the field name containing the histogram
99 * \param[in] id the point cloud object id (default: cloud)
100 * \param[in] win_width the width of the window
101 * \param[in] win_height the height of the window
102 */
103 bool
105 const std::string &field_name,
106 const std::string &id = "cloud", int win_width = 640, int win_height = 200);
107
108 /** \brief Add a histogram feature to screen as a separate window.
109 * \param[in] cloud the PointCloud dataset containing the histogram
110 * \param[in] field_name the field name containing the histogram
111 * \param[in] index the point index to extract the histogram from
112 * \param[in] id the point cloud object id (default: cloud)
113 * \param[in] win_width the width of the window
114 * \param[in] win_height the height of the window
115 */
116 template <typename PointT> bool
117 addFeatureHistogram (const pcl::PointCloud<PointT> &cloud,
118 const std::string &field_name,
119 const pcl::index_t index,
120 const std::string &id = "cloud", int win_width = 640, int win_height = 200);
121
122 /** \brief Add a histogram feature to screen as a separate window.
123 * \param[in] cloud the PointCloud dataset containing the histogram
124 * \param[in] field_name the field name containing the histogram
125 * \param[in] index the point index to extract the histogram from
126 * \param[in] id the point cloud object id (default: cloud)
127 * \param[in] win_width the width of the window
128 * \param[in] win_height the height of the window
129 */
130 bool
132 const std::string &field_name,
133 const pcl::index_t index,
134 const std::string &id = "cloud", int win_width = 640, int win_height = 200);
135
136 /** \brief Update a histogram feature that is already on screen, with a cloud containing a single histogram.
137 * \param[in] cloud the PointCloud dataset containing the histogram
138 * \param[in] hsize the length of the histogram
139 * \param[in] id the point cloud object id (default: cloud)
140 */
141 template <typename PointT> bool
142 updateFeatureHistogram (const pcl::PointCloud<PointT> &cloud, int hsize, const std::string &id = "cloud");
143
144
145 /** \brief Update a histogram feature that is already on screen, with a cloud containing a single histogram.
146 * \param[in] cloud the PointCloud dataset containing the histogram
147 * \param[in] field_name the field name containing the histogram
148 * \param[in] id the point cloud object id (default: cloud)
149 */
150 bool
152 const std::string &field_name,
153 const std::string &id = "cloud");
154
155
156 /** \brief Update a histogram feature that is already on screen, with a cloud containing a single histogram.
157 * \param[in] cloud the PointCloud dataset containing the histogram
158 * \param[in] field_name the field name containing the histogram
159 * \param[in] index the point index to extract the histogram from
160 * \param[in] id the point cloud object id (default: cloud)
161 */
162 template <typename PointT> bool
163 updateFeatureHistogram (const pcl::PointCloud<PointT> &cloud, const std::string &field_name,
164 const pcl::index_t index, const std::string &id = "cloud");
165
166
167 /** \brief Update a histogram feature that is already on screen, with a cloud containing a single histogram.
168 * \param[in] cloud the PointCloud dataset containing the histogram
169 * \param[in] field_name the field name containing the histogram
170 * \param[in] index the point index to extract the histogram from
171 * \param[in] id the point cloud object id (default: cloud)
172 */
173 bool
175 const std::string &field_name, const pcl::index_t index,
176 const std::string &id = "cloud");
177
178
179 /** \brief Set the Y range to minp-maxp for all histograms.
180 * \param[in] minp the minimum Y range
181 * \param[in] maxp the maximum Y range
182 */
183 void
184 setGlobalYRange (float minp, float maxp);
185
186 /** \brief Update all window positions on screen so that they fit. */
187 void
189
190 protected:
191
192 /** \brief Create a 2D actor from the given vtkDoubleArray histogram and add it to the screen.
193 * \param[in] xy_array the input vtkDoubleArray holding the histogram data
194 * \param[out] renwinint the resultant render window interactor holding the rendered object
195 * \param[in] id the point cloud object id
196 * \param[in] win_width the width of the window
197 * \param[in] win_height the height of the window
198 */
199 void
201 RenWinInteract &renwinint,
202 const std::string &id, const int win_width, const int win_height);
203
204 /** \brief Remove the current 2d actor and create a new 2D actor from the given vtkDoubleArray histogram and add it to the screen.
205 * \param[in] xy_array the input vtkDoubleArray holding the histogram data
206 * \param[out] renwinupd the resultant render window interactor holding the rendered object
207 * \param[in] hsize Histogram size
208 */
209 void
211 RenWinInteract* renwinupd, const int hsize);
212
213 private:
214 /** \brief A map of all windows on screen (with their renderers and interactors). */
215 RenWinInteractMap wins_;
216
217 struct ExitMainLoopTimerCallback : public vtkCommand
218 {
219 static ExitMainLoopTimerCallback* New ()
220 {
221 return (new ExitMainLoopTimerCallback);
222 }
223 void
224 Execute (vtkObject*, unsigned long event_id, void* call_data) override;
225
226 int right_timer_id;
227 vtkRenderWindowInteractor *interact;
228 };
229
230 struct ExitCallback : public vtkCommand
231 {
232 ExitCallback () : his () {}
233
234 static ExitCallback* New ()
235 {
236 return (new ExitCallback);
237 }
238
239 void
240 Execute (vtkObject*, unsigned long event_id, void*) override;
241
242 PCLHistogramVisualizer *his;
243 };
244
245 /** \brief Callback object enabling us to leave the main loop, when a timer fires. */
246 vtkSmartPointer<ExitMainLoopTimerCallback> exit_main_loop_timer_callback_;
247 vtkSmartPointer<ExitCallback> exit_callback_;
248 /** \brief Set to true when the histogram visualizer is ready to be terminated. */
249 bool stopped_;
250 };
251 }
252}
253
254#include <pcl/visualization/impl/histogram_visualizer.hpp>
PointCloud represents the base class in PCL for storing collections of 3D points.
Definition: point_cloud.h:173
PCL histogram visualizer main class.
void updateWindowPositions()
Update all window positions on screen so that they fit.
shared_ptr< const PCLHistogramVisualizer > ConstPtr
void setGlobalYRange(float minp, float maxp)
Set the Y range to minp-maxp for all histograms.
bool addFeatureHistogram(const pcl::PCLPointCloud2 &cloud, const std::string &field_name, const pcl::index_t index, const std::string &id="cloud", int win_width=640, int win_height=200)
Add a histogram feature to screen as a separate window.
bool updateFeatureHistogram(const pcl::PCLPointCloud2 &cloud, const std::string &field_name, const pcl::index_t index, const std::string &id="cloud")
Update a histogram feature that is already on screen, with a cloud containing a single histogram.
void setBackgroundColor(const double &r, const double &g, const double &b)
Set the viewport's background color.
void createActor(const vtkSmartPointer< vtkDoubleArray > &xy_array, RenWinInteract &renwinint, const std::string &id, const int win_width, const int win_height)
Create a 2D actor from the given vtkDoubleArray histogram and add it to the screen.
void reCreateActor(const vtkSmartPointer< vtkDoubleArray > &xy_array, RenWinInteract *renwinupd, const int hsize)
Remove the current 2d actor and create a new 2D actor from the given vtkDoubleArray histogram and add...
PCLHistogramVisualizer()
PCL histogram visualizer constructor.
void spinOnce(int time=1)
Spin once method.
shared_ptr< PCLHistogramVisualizer > Ptr
bool updateFeatureHistogram(const pcl::PCLPointCloud2 &cloud, const std::string &field_name, const std::string &id="cloud")
Update a histogram feature that is already on screen, with a cloud containing a single histogram.
bool addFeatureHistogram(const pcl::PCLPointCloud2 &cloud, const std::string &field_name, const std::string &id="cloud", int win_width=640, int win_height=200)
Add a histogram feature to screen as a separate window from a cloud containing a single histogram.
std::map< std::string, RenWinInteract > RenWinInteractMap
detail::int_type_t< detail::index_type_size, detail::index_type_signed > index_t
Type used for an index in PCL.
Definition: types.h:112
#define PCL_EXPORTS
Definition: pcl_macros.h:323