7#include "processing_observer.hpp"
10#include <fmt/format.h>
11#include <spdlog/spdlog.h>
39 const std::string &name) {
40 viewer->removePointCloud(name);
52 viewer->removePolygonMesh(item.
name);
53 auto textured = std::get<pcl::TextureMesh::Ptr>(item.
mesh);
54 viewer->addTextureMesh(*textured, item.
name, viewport);
56 auto regular = std::get<pcl::PolygonMesh::Ptr>(item.
mesh);
57 viewer->addPolygonMesh(*regular, item.
name, viewport);
63 const std::string &name) {
64 viewer->removePolygonMesh(name);
77template <
typename LoadedItem>
87 const std::vector<int> &) {
88 viewer->registerKeyboardCallback(
90 &observer](
const pcl::visualization::KeyboardEvent &event) {
91 for (
size_t i = 0; i < items.size() && i < 10; ++i) {
92 if (event.getKeySym() ==
93 fmt::format(
"{}_{}", Traits::key_prefix, i) &&
95 items[i].visible = !items[i].visible;
96 if (items[i].visible) {
100 const std::vector<int> &viewports) {
101 Traits::add_to_viewer(viewer, items[i], viewports[0]);
103 spdlog::info(
"{} {} shown", Traits::type_name, i);
108 const std::vector<int> &) {
109 Traits::remove_from_viewer(viewer, items[i].name);
111 spdlog::info(
"{} {} hidden", Traits::type_name, i);
124template <
typename LoadedItem>
134 const std::vector<int> &) {
135 viewer->registerKeyboardCallback(
137 &observer](
const pcl::visualization::KeyboardEvent &event) {
138 if (event.getKeySym() == Traits::key_prefix && event.keyDown()) {
140 bool all_visible =
true;
141 for (
const auto &item : items) {
149 for (
size_t i = 0; i < items.size(); ++i) {
154 const std::vector<int> &) {
155 Traits::remove_from_viewer(viewer, items[i].name);
156 items[i].visible =
false;
162 const std::vector<int> &viewports) {
163 Traits::add_to_viewer(viewer, items[i], viewports[0]);
164 items[i].visible =
true;
168 spdlog::info(
"All {}s {}", Traits::type_name,
169 all_visible ?
"hidden" :
"shown");
185 std::shared_ptr<ViewerState> state,
190 std::shared_ptr<ViewerState> state,
199 std::shared_ptr<ViewerState> state,
void viewer_enqueue_task(VizTask task)
std::shared_ptr< pcl::visualization::PCLVisualizer > ViewerPtr
void remove_label_legend(std::shared_ptr< ViewerState > state, rux::VizualizationObserver &observer)
Remove the label legend overlay from the viewer.
void add_label_legend(const LabelCloudInfo &info, std::shared_ptr< ViewerState > state, rux::VizualizationObserver &observer)
Add a label legend overlay to the viewer for the given label cloud info.
void register_legend_toggle(const std::vector< LabelCloudInfo > &label_clouds, std::shared_ptr< ViewerState > state, rux::VizualizationObserver &observer)
Register keyboard callback for toggling label legend (key 'l').
void register_toggle_all_callback(std::vector< LoadedItem > &items, rux::VizualizationObserver &observer)
Register keyboard callback for toggling all items at once (key 'c' or 'm').
void register_individual_toggles(std::vector< LoadedItem > &items, rux::VizualizationObserver &observer)
Register keyboard callbacks for toggling individual items (e.g., c_0, m_0).
void register_label_toggles(const std::vector< LabelCloudInfo > &label_clouds, std::shared_ptr< ViewerState > state, rux::VizualizationObserver &observer)
Register keyboard callbacks for toggling label overlays (keys '1'-'9').
static constexpr const char * key_prefix
static void remove_from_viewer(const rux::VizualizationObserver::ViewerPtr &viewer, const std::string &name)
static constexpr const char * type_name
static void add_to_viewer(const rux::VizualizationObserver::ViewerPtr &viewer, const LoadedCloud &item, int viewport)
static constexpr const char * key_prefix
static constexpr const char * type_name
static void remove_from_viewer(const rux::VizualizationObserver::ViewerPtr &viewer, const std::string &name)
static void add_to_viewer(const rux::VizualizationObserver::ViewerPtr &viewer, const LoadedMesh &item, int viewport)
Traits class template for viewer item operations.
A label cloud with its associated metadata for legend display.
A point cloud loaded for visualization with associated metadata.
std::string name
Display name in viewer.
CloudPtr cloud
The point cloud data.
A polygon mesh loaded for visualization with associated metadata.
std::string name
Display name in viewer.
std::variant< pcl::PolygonMesh::Ptr, pcl::TextureMesh::Ptr > mesh
The mesh data (regular or textured).