ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
PclAnnotationTool.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 // LOCAL
11 #include <Utils/PCLCloud.h>
12 
14 #include "qPCL.h"
15 
16 // CV_DB_LIB
18 
19 // QT
20 #include <QObject>
21 #include <memory>
22 
23 namespace PclUtils {
24 class PCLVis;
25 }
27 
28 class vtkActor;
29 class Annotation;
30 class Annotaions;
31 
33  Q_OBJECT
34 public:
35  explicit PclAnnotationTool(
36  AnnotationMode mode = AnnotationMode::BOUNDINGBOX);
37  explicit PclAnnotationTool(
38  ecvGenericVisualizer3D* viewer,
39  AnnotationMode mode = AnnotationMode::BOUNDINGBOX);
40  virtual ~PclAnnotationTool() override;
41 
42 public: // implemented from ecvGenericAnnotationTool interface
43  virtual void setVisualizer(
44  ecvGenericVisualizer3D* viewer = nullptr) override;
45  virtual bool loadClassesFromFile(const std::string& file) override;
46  virtual void getAnnotationLabels(
47  std::vector<std::string>& labelList) override;
48  virtual bool getCurrentAnnotations(std::vector<int>& annos) const override;
49  virtual void initAnnotationLabels(
50  const std::vector<std::string>& labelList) override;
51 
52  virtual void toggleInteractor() override;
53  virtual bool setInputCloud(ccPointCloud* pointCloud,
54  int viewport = 0) override;
55 
56  virtual void start() override;
57  virtual void stop() override;
58 
59  virtual void intersectMode() override;
60  virtual void unionMode() override;
61  virtual void trimMode() override;
62  virtual void resetMode() override;
63 
67  virtual void reset() override;
68  virtual void clear() override;
69 
73  virtual void exportAnnotations() override;
74 
75  virtual void changeAnnotationType(const std::string& type) override;
76  virtual void selectExistedAnnotation(const std::string& type) override;
77  virtual void updateCloud() override;
78 
79  // visibility
80  virtual void showAnnotation() override;
81  virtual void hideAnnotation() override;
82  virtual void showOrigin() override;
83  virtual void hideOrigin() override;
84  virtual void removeAnnotation() override;
85 
86 protected: // implemented from ecvGenericAnnotationTool interface
87  virtual void initialize(ecvGenericVisualizer3D* viewer) override;
88 
89 protected slots:
90  void pointPickingProcess(int index);
91  void areaPickingEventProcess(const std::vector<int>& new_selected_slice);
92  void pickedEventProcess(vtkActor* actor);
93  void keyboardEventProcess(const std::string& symKey);
94 
95 private:
96  void showAnnotation(const Annotation* anno);
97  void removeAnnotation(Annotation* anno);
98  void hideAnnotation(Annotation* anno);
99 
100  void changeAnnotationType(Annotation* anno, const std::string& type);
101  void setPointSize(const std::string& viewID, int viewport = 0);
102  void highlightPoint(std::vector<int>& slice);
103  void defaultColorPoint(std::vector<int>& slice);
104  void createAnnotationFromSelectPoints(std::string type = "unknown");
105 
106  void labelCloudByAnnotations();
107  void labelCloudByAnnotation(const Annotation* anno);
108  void resetCloudByAnnotation(const Annotation* anno);
109  void updateCloudLabel(const std::string& type);
110 
114  void refresh();
115  void loadDefaultClasses();
116 
117  void filterPickedSlice(const std::vector<int>& inSlices,
118  std::vector<int>& outSlices,
119  bool skip = false);
120 
121 private:
122  void fastLabelCloud(const std::vector<int>& inSlices, int label = 0);
123 
124 private:
125  bool m_intersectMode;
126  bool m_unionMode;
127  bool m_trimMode;
128 
129  PclUtils::PCLVis* m_viewer;
130 
131  std::string m_pointcloudFileName;
132  std::string m_annotationFileName;
133 
134  std::string m_annotationCloudId = "annotationCloud";
135  std::string m_baseCloudId;
136 
140  PointCloudI::Ptr m_baseCloud;
141 
145  int* m_cloudLabel;
147  std::vector<int> m_last_selected_slice;
148 
149  // manage annotations
150  std::shared_ptr<Annotaions> m_annoManager;
151 
152  // for pick
153  Annotation* m_currPickedAnnotation;
154 
155  std::vector<Annotation*> m_lastSelectedAnnotations;
156 };
char type
#define slots
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
Generic Annotation Tool interface.
virtual void hideAnnotation()=0
virtual void updateCloud()=0
AnnotationMode
Default constructor.
virtual void selectExistedAnnotation(const std::string &type)=0
virtual bool getCurrentAnnotations(std::vector< int > &annos) const =0
virtual void reset()=0
virtual void stop()=0
virtual void hideOrigin()=0
virtual bool setInputCloud(ccPointCloud *pointCloud, int viewport=0)=0
virtual void intersectMode()=0
virtual void resetMode()=0
virtual void initialize(ecvGenericVisualizer3D *viewer)=0
virtual void getAnnotationLabels(std::vector< std::string > &labelList)=0
virtual bool loadClassesFromFile(const std::string &file)=0
virtual void changeAnnotationType(const std::string &type)=0
virtual void removeAnnotation()=0
virtual void initAnnotationLabels(const std::vector< std::string > &labelList)
virtual void start()=0
virtual void toggleInteractor()=0
virtual void clear()=0
virtual void unionMode()=0
virtual void showOrigin()=0
virtual void showAnnotation()=0
virtual void trimMode()=0
virtual void setVisualizer(ecvGenericVisualizer3D *viewer=nullptr)=0
virtual void exportAnnotations()=0
Generic visualizer 3D interface.
#define QPCL_ENGINE_LIB_API
Definition: qPCL.h:15