ReUseX  0.0.5
3D Point Cloud Processing for Building Reuse
Loading...
Searching...
No Matches
processing_observer.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#include "spdmon.hpp"
7
8#include <pcl/visualization/pcl_visualizer.h>
9#include <reusex/core/processing_observer.hpp>
10#include <reusex/geometry/CellComplex.hpp>
11#include <reusex/types.hpp>
12
13#include <latch>
14#include <mutex>
15#include <queue>
16
17namespace rux {
18
21 public:
22 using ViewerPtr = std::shared_ptr<pcl::visualization::PCLVisualizer>;
23 using VizTask =
24 std::function<void(const ViewerPtr &, const std::vector<int> &viewports)>;
25 using Pair = std::pair<Eigen::Vector4d, Eigen::Vector3d>;
26 using PlanePair = std::pair<Pair, Pair>;
27
29
30 // Viewer callbacks
31
32 // Default implementation does nothing - users can override this method to add
33 template <typename T>
34 void viewer_add_geometry(std::string_view
35 /*name*/,
36 const T & /*geometry*/, std::string_view /*stage*/,
37 int /*idx*/) {};
38
39 // Override virtual method for planes
40 void viewer_add_plane(std::string_view name, const Eigen::Vector4d &plane,
41 reusex::core::Stage stage, int idx) override;
42 void viewer_add_plane(std::string_view name, const Pair &plane,
43 reusex::core::Stage stage, int idx) override;
44 void viewer_add_plane_pair(std::string_view name, const PlanePair &pair,
45 reusex::core::Stage stage, int idx) override;
47 std::string_view name,
48 const std::shared_ptr<reusex::geometry::CellComplex> &cc,
49 reusex::core::Stage stage, int idx) override;
50
51 void viewer_add_cloud(std::string_view name,
52 const reusex::CloudConstPtr &cloud,
53 reusex::core::Stage stage, int idx) override;
54
55 void viewer_add_camera_frustum(std::string_view name, double focal_x,
56 double focal_y, int image_width,
57 int image_height,
58 const Eigen::Affine3f &pose,
59 reusex::core::Stage stage, int idx) override;
60
61 // Progress bar callbacks
62 void on_process_started(reusex::core::Stage stage, size_t total) override;
64 void on_process_updated(reusex::core::Stage stage, size_t increment) override;
65
66 // Viewer control methods
69 bool viewer_is_active() const;
72 void viewer_request_viewports(size_t num_viewports);
73
74 private:
75 void viewer_drain_tasks(const ViewerPtr &viewer);
76 void viewer_loop(std::latch &initialized);
77
78 std::vector<int> viewports_ = std::vector<int>(1);
79 std::thread viz_thread_;
80 std::queue<VizTask> task_queue_;
81 std::mutex queue_mutex_;
82 std::atomic_bool stop_requested_{false};
83 std::atomic_bool running_{false};
84 std::unique_ptr<spdmon::LoggerProgress> progress_logger_;
85};
86
90
91// Return non-owning reference to the global processing observer instance
93} // namespace rux
std::pair< Eigen::Vector4d, Eigen::Vector3d > Pair
void on_process_finished(reusex::core::Stage stage) override
void viewer_add_plane(std::string_view name, const Pair &plane, reusex::core::Stage stage, int idx) override
void on_process_updated(reusex::core::Stage stage, size_t increment) override
void viewer_add_plane_pair(std::string_view name, const PlanePair &pair, reusex::core::Stage stage, int idx) override
void on_process_started(reusex::core::Stage stage, size_t total) override
std::function< void(const ViewerPtr &, const std::vector< int > &viewports)> VizTask
std::pair< Pair, Pair > PlanePair
void viewer_add_geometry(std::string_view, const T &, std::string_view, int)
void viewer_add_cell_complex(std::string_view name, const std::shared_ptr< reusex::geometry::CellComplex > &cc, reusex::core::Stage stage, int idx) override
void viewer_enqueue_task(VizTask task)
void viewer_add_plane(std::string_view name, const Eigen::Vector4d &plane, reusex::core::Stage stage, int idx) override
void viewer_add_camera_frustum(std::string_view name, double focal_x, double focal_y, int image_width, int image_height, const Eigen::Affine3f &pose, reusex::core::Stage stage, int idx) override
void viewer_add_cloud(std::string_view name, const reusex::CloudConstPtr &cloud, reusex::core::Stage stage, int idx) override
std::shared_ptr< pcl::visualization::PCLVisualizer > ViewerPtr
void viewer_request_viewports(size_t num_viewports)
typename Cloud::ConstPtr CloudConstPtr
Definition types.hpp:28
void setup_processing_observer()
VizualizationObserver & get_processing_observer()
void wait_for_viewer()
void start_viewer()