Point Cloud Library (PCL) 1.13.1
Loading...
Searching...
No Matches
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 */
56 class PCL_EXPORTS PCLHistogramVisualizer
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.
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