ReUseX  0.0.1
3D Point Cloud Processing for Building Reuse
Loading...
Searching...
No Matches
Visualizer.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2025 Povl Filip Sonne-Frederiksen
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#pragma once
6
8#include <ReUseX/types.hpp>
9
10#include <functional>
11#include <memory>
12#include <string>
13#include <string_view>
14#include <unordered_map>
15#include <vector>
16
17namespace ReUseX::visualize {
18
26public:
31 Visualizer(std::shared_ptr<std::vector<int>> vps = nullptr);
32
37
38 // Delete copy constructor and copy assignment operator
39 Visualizer(const Visualizer &) = delete;
40 Visualizer &operator=(const Visualizer &) = delete;
41
42 // Delete move constructor and move assignment operator
43 Visualizer(Visualizer &&) = delete;
45
46public:
51 std::shared_ptr<const std::vector<int>> getViewports() const;
52
57 void reset_camera_viewpoint(const std::string &name = "");
58
65 void add_point_cloud(CloudConstPtr cloud, std::string name = "cloud",
66 int vp = 0);
67
76 void add_plane(const Eigen::Vector4d &plane, const Eigen::Vector3d &origin,
77 const pcl::RGB &color, const std::string_view &name = "plane",
78 int vp = 0);
79
86 void add_planes(const std::vector<Pair> &planes,
87 const std::string_view &name = "plane", int vp = 0);
88
95 void add_pair(const PlanePair &plane_pair,
96 const std::string_view &name = "plane_pair", int vp = 0);
97
104 void add_plane_pairs(const std::vector<PlanePair> &plane_pairs,
105 const std::string_view &name = "plane_pair", int vp = 0);
106
115 void add_floor(const double height, const Eigen::Vector3d &min,
116 const Eigen::Vector3d &max,
117 const std::string_view &name = "floor", int vp = 0);
118
127 void add_floors(const std::vector<double> &heights, const Eigen::Vector3d &min,
128 const Eigen::Vector3d &max,
129 const std::string_view &name = "floor", int vp = 0);
130
132 const std::shared_ptr<ReUseX::geometry::CellComplex> &cc,
133 const std::string_view &name = "cell_complex", int vp = 0);
134
136
137 const std::shared_ptr<ReUseX::geometry::CellComplex> &cc,
138 const std::string_view &name = "room_probabilities", int vp = 0);
139
141
142 const std::shared_ptr<ReUseX::geometry::CellComplex> &cc,
143 const std::string_view &name = "support_probabilities", int vp = 0);
144
146 const std::shared_ptr<ReUseX::geometry::CellComplex> &cc,
147 const std::pair<
148 std::unordered_map<ReUseX::geometry::CellComplex::Vertex, int>,
149 std::unordered_map<ReUseX::geometry::CellComplex::Vertex,
150 std::set<int>>> &results,
151 const std::string_view &name = "rooms", int vp = 0);
152
153 // Deprecated aliases for backward compatibility
154 [[deprecated("Use reset_camera_viewpoint instead")]] void
155 resetCameraViewpoint(const std::string &name = "") {
157 }
158 [[deprecated("Use add_point_cloud instead")]] void
159 addPointCloud(CloudConstPtr cloud, std::string name = "cloud", int vp = 0) {
160 add_point_cloud(cloud, name, vp);
161 }
162 [[deprecated("Use add_plane instead")]] void
163 addPlane(const Eigen::Vector4d &plane, const Eigen::Vector3d &origin,
164 const pcl::RGB &color, const std::string_view &name = "plane",
165 int vp = 0) {
166 add_plane(plane, origin, color, name, vp);
167 }
168 [[deprecated("Use add_planes instead")]] void
169 addPlanes(const std::vector<Pair> &planes,
170 const std::string_view &name = "plane", int vp = 0) {
171 add_planes(planes, name, vp);
172 }
173 [[deprecated("Use add_pair instead")]] void
174 addPair(const PlanePair &plane_pair,
175 const std::string_view &name = "plane_pair", int vp = 0) {
176 add_pair(plane_pair, name, vp);
177 }
178 [[deprecated("Use add_plane_pairs instead")]] void
179 addPlanePairs(const std::vector<PlanePair> &plane_pairs,
180 const std::string_view &name = "plane_pair", int vp = 0) {
181 add_plane_pairs(plane_pairs, name, vp);
182 }
183 [[deprecated("Use add_floor instead")]] void
184 addFloor(const double height, const Eigen::Vector3d &min,
185 const Eigen::Vector3d &max, const std::string_view &name = "floor",
186 int vp = 0) {
187 add_floor(height, min, max, name, vp);
188 }
189 [[deprecated("Use add_floors instead")]] void
190 addFloors(const std::vector<double> &heights, const Eigen::Vector3d &min,
191 const Eigen::Vector3d &max, const std::string_view &name = "floor",
192 int vp = 0) {
193 add_floors(heights, min, max, name, vp);
194 }
195 [[deprecated("Use add_cell_complex instead")]] void
196 addCellComplex(const std::shared_ptr<ReUseX::geometry::CellComplex> &cc,
197 const std::string_view &name = "cell_complex", int vp = 0) {
198 add_cell_complex(cc, name, vp);
199 }
200 [[deprecated("Use add_room_probabilities instead")]] void
202 const std::shared_ptr<ReUseX::geometry::CellComplex> &cc,
203 const std::string_view &name = "room_probabilities", int vp = 0) {
204 add_room_probabilities(cc, name, vp);
205 }
206 [[deprecated("Use add_support_probabilities instead")]] void
208 const std::shared_ptr<ReUseX::geometry::CellComplex> &cc,
209 const std::string_view &name = "support_probabilities", int vp = 0) {
210 add_support_probabilities(cc, name, vp);
211 }
212 [[deprecated("Use add_rooms instead")]] void
213 addRooms(const std::shared_ptr<ReUseX::geometry::CellComplex> &cc,
214 const std::pair<
215 std::unordered_map<ReUseX::geometry::CellComplex::Vertex, int>,
216 std::unordered_map<ReUseX::geometry::CellComplex::Vertex,
217 std::set<int>>> &results,
218 const std::string_view &name = "rooms", int vp = 0) {
219 add_rooms(cc, results, name, vp);
220 }
221
222private:
223 class Impl;
224 std::unique_ptr<Impl> pimpl_;
225};
226} // namespace ReUseX::visualize
boost::graph_traits< Graph >::vertex_descriptor Vertex
void addSupportProbabilities(const std::shared_ptr< ReUseX::geometry::CellComplex > &cc, const std::string_view &name="support_probabilities", int vp=0)
void add_room_probabilities(const std::shared_ptr< ReUseX::geometry::CellComplex > &cc, const std::string_view &name="room_probabilities", int vp=0)
void addRooms(const std::shared_ptr< ReUseX::geometry::CellComplex > &cc, const std::pair< std::unordered_map< ReUseX::geometry::CellComplex::Vertex, int >, std::unordered_map< ReUseX::geometry::CellComplex::Vertex, std::set< int > > > &results, const std::string_view &name="rooms", int vp=0)
void add_floors(const std::vector< double > &heights, const Eigen::Vector3d &min, const Eigen::Vector3d &max, const std::string_view &name="floor", int vp=0)
Add multiple floor planes at different heights.
void add_plane_pairs(const std::vector< PlanePair > &plane_pairs, const std::string_view &name="plane_pair", int vp=0)
Add multiple plane pairs to the visualization.
void addFloors(const std::vector< double > &heights, const Eigen::Vector3d &min, const Eigen::Vector3d &max, const std::string_view &name="floor", int vp=0)
void add_cell_complex(const std::shared_ptr< ReUseX::geometry::CellComplex > &cc, const std::string_view &name="cell_complex", int vp=0)
Visualizer(const Visualizer &)=delete
~Visualizer()
Destroy the Visualizer object.
void addPlane(const Eigen::Vector4d &plane, const Eigen::Vector3d &origin, const pcl::RGB &color, const std::string_view &name="plane", int vp=0)
void resetCameraViewpoint(const std::string &name="")
void addRoomProbabilities(const std::shared_ptr< ReUseX::geometry::CellComplex > &cc, const std::string_view &name="room_probabilities", int vp=0)
Visualizer & operator=(Visualizer &&)=delete
void addFloor(const double height, const Eigen::Vector3d &min, const Eigen::Vector3d &max, const std::string_view &name="floor", int vp=0)
void reset_camera_viewpoint(const std::string &name="")
Reset camera viewpoint to default.
void addPointCloud(CloudConstPtr cloud, std::string name="cloud", int vp=0)
void addCellComplex(const std::shared_ptr< ReUseX::geometry::CellComplex > &cc, const std::string_view &name="cell_complex", int vp=0)
void add_support_probabilities(const std::shared_ptr< ReUseX::geometry::CellComplex > &cc, const std::string_view &name="support_probabilities", int vp=0)
void add_pair(const PlanePair &plane_pair, const std::string_view &name="plane_pair", int vp=0)
Add a plane pair to the visualization.
void add_floor(const double height, const Eigen::Vector3d &min, const Eigen::Vector3d &max, const std::string_view &name="floor", int vp=0)
Add a floor plane at specified height.
Visualizer & operator=(const Visualizer &)=delete
void add_rooms(const std::shared_ptr< ReUseX::geometry::CellComplex > &cc, const std::pair< std::unordered_map< ReUseX::geometry::CellComplex::Vertex, int >, std::unordered_map< ReUseX::geometry::CellComplex::Vertex, std::set< int > > > &results, const std::string_view &name="rooms", int vp=0)
void addPlanePairs(const std::vector< PlanePair > &plane_pairs, const std::string_view &name="plane_pair", int vp=0)
Visualizer(std::shared_ptr< std::vector< int > > vps=nullptr)
Construct a new Visualizer object.
void addPlanes(const std::vector< Pair > &planes, const std::string_view &name="plane", int vp=0)
std::shared_ptr< const std::vector< int > > getViewports() const
Get the configured viewports.
void addPair(const PlanePair &plane_pair, const std::string_view &name="plane_pair", int vp=0)
void add_planes(const std::vector< Pair > &planes, const std::string_view &name="plane", int vp=0)
Add multiple planes to the visualization.
void add_point_cloud(CloudConstPtr cloud, std::string name="cloud", int vp=0)
Add a point cloud to the visualization.
void add_plane(const Eigen::Vector4d &plane, const Eigen::Vector3d &origin, const pcl::RGB &color, const std::string_view &name="plane", int vp=0)
Add a single plane to the visualization.
Visualizer(Visualizer &&)=delete
std::pair< Pair, Pair > PlanePair
Definition types.hpp:43
typename Cloud::ConstPtr CloudConstPtr
Definition types.hpp:23