ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
VisualizerWithVertexSelection.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 #include <unordered_map>
11 
13 
14 class ccHObject;
15 class ccPointCloud;
16 namespace cloudViewer {
17 
18 namespace visualization {
19 class SelectionPolygon;
20 class PointCloudPicker;
21 
23 public:
24  enum class SelectionMode { None = 0, Point = 1, Rectangle = 2, Moving = 3 };
25 
26 public:
30  delete;
32  const VisualizerWithVertexSelection &) = delete;
33 
34 public:
35  bool AddGeometry(std::shared_ptr<const ccHObject> geometry_ptr,
36  bool reset_bounding_box = true) override;
37  bool UpdateGeometry(
38  std::shared_ptr<const ccHObject> geometry_ptr = nullptr) override;
39  void PrintVisualizerHelp() override;
40  void UpdateWindowTitle() override;
41  void BuildUtilities() override;
42  void SetPointSize(double size);
43  std::vector<int> PickPoints(double x, double y, double w, double h);
44 
45  struct PickedPoint {
46  int index;
47  Eigen::Vector3d coord;
48  };
49  std::vector<PickedPoint> GetPickedPoints() const;
50  void ClearPickedPoints();
51  void AddPickedPoints(const std::vector<int> indices);
52  void RemovePickedPoints(const std::vector<int> indices);
53 
54  void RegisterSelectionChangedCallback(std::function<void()> f);
57  void RegisterSelectionMovingCallback(std::function<void()> f);
58  void RegisterSelectionMovedCallback(std::function<void()> f);
59 
60 protected:
61  bool InitViewControl() override;
62  bool InitRenderOption() override;
63  void WindowResizeCallback(GLFWwindow *window, int w, int h) override;
64  void MouseMoveCallback(GLFWwindow *window, double x, double y) override;
65  void MouseScrollCallback(GLFWwindow *window, double x, double y) override;
66  void MouseButtonCallback(GLFWwindow *window,
67  int button,
68  int action,
69  int mods) override;
70  void KeyPressCallback(GLFWwindow *window,
71  int key,
72  int scancode,
73  int action,
74  int mods) override;
76  void InvalidatePicking();
77  float GetDepth(int winX, int winY);
78  Eigen::Vector3d CalcDragDelta(double winX, double winY);
80  void DragSelectedPoints(const Eigen::Vector3d &delta, DragType type);
81 
82  const std::vector<CCVector3> *GetGeometryPoints(
83  std::shared_ptr<const ccHObject> geometry);
84 
85  const std::vector<Eigen::Vector3d> *GetGeometryEigenPoints(
86  std::shared_ptr<const ccHObject> geometry);
87 
88 protected:
89  std::shared_ptr<SelectionPolygon> selection_polygon_ptr_;
90  std::shared_ptr<glsl::SelectionPolygonRenderer>
93  Eigen::Vector2d mouse_down_pos_;
94  std::vector<int> points_in_rect_;
95  float drag_depth_ = 0.0f;
96 
97  std::shared_ptr<PointCloudPicker> pointcloud_picker_ptr_;
98  std::shared_ptr<glsl::PointCloudPickerRenderer>
100 
101  std::shared_ptr<const ccHObject> geometry_ptr_;
102  std::shared_ptr<glsl::GeometryRenderer> geometry_renderer_ptr_;
103 
105 
106  std::shared_ptr<ccPointCloud> ui_points_geometry_ptr_;
107  std::shared_ptr<glsl::GeometryRenderer> ui_points_renderer_ptr_;
108 
109  std::unordered_map<int, Eigen::Vector3d> selected_points_;
110  std::unordered_map<int, Eigen::Vector3d> selected_points_before_drag_;
111  std::shared_ptr<ccPointCloud> ui_selected_points_geometry_ptr_;
112  std::shared_ptr<glsl::GeometryRenderer> ui_selected_points_renderer_ptr_;
113 
114  std::function<void()> on_selection_changed_;
115  std::function<void()> on_selection_moving_;
116  std::function<void()> on_selection_moved_;
117 };
118 
119 } // namespace visualization
120 } // namespace cloudViewer
int size
char type
Hierarchical CLOUDVIEWER Object.
Definition: ecvHObject.h:25
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
Defines rendering options for visualizer.
Definition: RenderOption.h:20
std::shared_ptr< glsl::GeometryRenderer > ui_selected_points_renderer_ptr_
std::shared_ptr< glsl::SelectionPolygonRenderer > selection_polygon_renderer_ptr_
const std::vector< Eigen::Vector3d > * GetGeometryEigenPoints(std::shared_ptr< const ccHObject > geometry)
bool AddGeometry(std::shared_ptr< const ccHObject > geometry_ptr, bool reset_bounding_box=true) override
Function to add geometry to the scene and create corresponding shaders.
void MouseMoveCallback(GLFWwindow *window, double x, double y) override
void KeyPressCallback(GLFWwindow *window, int key, int scancode, int action, int mods) override
std::unordered_map< int, Eigen::Vector3d > selected_points_before_drag_
const std::vector< CCVector3 > * GetGeometryPoints(std::shared_ptr< const ccHObject > geometry)
bool UpdateGeometry(std::shared_ptr< const ccHObject > geometry_ptr=nullptr) override
Function to update geometry.
std::vector< int > PickPoints(double x, double y, double w, double h)
void MouseScrollCallback(GLFWwindow *window, double x, double y) override
void MouseButtonCallback(GLFWwindow *window, int button, int action, int mods) override
std::shared_ptr< glsl::PointCloudPickerRenderer > pointcloud_picker_renderer_ptr_
void WindowResizeCallback(GLFWwindow *window, int w, int h) override
VisualizerWithVertexSelection(const VisualizerWithVertexSelection &)=delete
bool InitViewControl() override
Function to initialize ViewControl.
VisualizerWithVertexSelection & operator=(const VisualizerWithVertexSelection &)=delete
bool InitRenderOption() override
Function to initialize RenderOption.
void DragSelectedPoints(const Eigen::Vector3d &delta, DragType type)
The main Visualizer class.
Definition: Visualizer.h:45
Generic file read and write utility for python interface.