ReUseX  0.0.1
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
11#include <latch>
12#include <mutex>
13#include <queue>
14
15namespace rux {
16
18 public:
19 using ViewerPtr = std::shared_ptr<pcl::visualization::PCLVisualizer>;
20 using VizTask = std::function<void(const ViewerPtr &)>;
21
22 void on_process_started(std::string_view process, size_t total) override;
23 void on_process_finished(std::string_view) override;
24 void on_process_updated(std::string_view, size_t increment) override;
25
26 void start();
27 void stop();
28 bool is_active() const;
30
32
33 private:
34 void enqueue_status(std::string message);
35 void enqueue_progress(std::string message);
36 void enqueue_warning(std::string message);
37 void enqueue_error(std::string message);
38 void enqueue_task(VizTask task);
39 void drain_tasks(const ViewerPtr &viewer);
40 void viewer_loop(std::latch &initialized);
41
42 std::thread viz_thread_;
43 std::queue<VizTask> task_queue_;
44 std::mutex queue_mutex_;
45 std::atomic_bool stop_requested_{false};
46 std::atomic_bool running_{false};
47 std::unique_ptr<spdmon::LoggerProgress> progress_logger_;
48};
49
50// void enable_processing_observer(bool enabled);
51
52} // namespace rux
std::function< void(const ViewerPtr &)> VizTask
void on_process_updated(std::string_view, size_t increment) override
void on_process_finished(std::string_view) override
void on_process_started(std::string_view process, size_t total) override
std::shared_ptr< pcl::visualization::PCLVisualizer > ViewerPtr