ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
SelectionPolygon.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 <Image.h>
11 #include <ecvHObject.h>
12 
13 #include <Eigen/Core>
14 #include <memory>
15 #include <vector>
16 
17 class ccMesh;
18 class ccPointCloud;
19 namespace cloudViewer {
20 
21 namespace visualization {
22 class ViewControl;
23 class SelectionPolygonVolume;
24 
29 class SelectionPolygon : public ccHObject {
30 public:
31  enum class SectionPolygonType {
32  Unfilled = 0,
33  Rectangle = 1,
34  Polygon = 2,
35  };
36 
37 public:
38  SelectionPolygon(const char *name = "SelectionPolygon") : ccHObject(name) {}
39  ~SelectionPolygon() override {}
40 
41  // inherited methods (ccHObject)
42  virtual bool isSerializable() const override { return true; }
43 
45  virtual CV_CLASS_ENUM getClassID() const override {
47  }
48 
49 public:
51  bool isEmpty() const;
52  virtual Eigen::Vector2d GetMin2DBound() const override;
53  virtual Eigen::Vector2d GetMax2DBound() const override;
54  void FillPolygon(int width, int height);
55  std::shared_ptr<ccPointCloud> CropPointCloud(const ccPointCloud &input,
56  const ViewControl &view);
57  std::shared_ptr<ccMesh> CropTriangleMesh(const ccMesh &input,
58  const ViewControl &view);
59  std::shared_ptr<SelectionPolygonVolume> CreateSelectionPolygonVolume(
60  const ViewControl &view);
61 
62 private:
63  std::shared_ptr<ccPointCloud> CropPointCloudInRectangle(
64  const ccPointCloud &input, const ViewControl &view);
65  std::shared_ptr<ccPointCloud> CropPointCloudInPolygon(
66  const ccPointCloud &input, const ViewControl &view);
67  std::shared_ptr<ccMesh> CropTriangleMeshInRectangle(
68  const ccMesh &input, const ViewControl &view);
69  std::shared_ptr<ccMesh> CropTriangleMeshInPolygon(const ccMesh &input,
70  const ViewControl &view);
71  std::vector<size_t> CropInRectangle(const std::vector<CCVector3> &input,
72  const ViewControl &view);
73  std::vector<size_t> CropInPolygon(const std::vector<CCVector3> &input,
74  const ViewControl &view);
75 
76 public:
77  std::vector<Eigen::Vector2d> polygon_;
78  bool is_closed_ = false;
81 };
82 
83 } // namespace visualization
84 } // namespace cloudViewer
int64_t CV_CLASS_ENUM
Type of object type flags (64 bits)
Definition: CVTypes.h:97
int width
std::string name
int height
Hierarchical CLOUDVIEWER Object.
Definition: ecvHObject.h:25
Triangular mesh.
Definition: ecvMesh.h:35
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
The Image class stores image with customizable width, height, num of channels and bytes per channel.
Definition: Image.h:33
virtual CV_CLASS_ENUM getClassID() const override
Returns unique class ID.
std::vector< Eigen::Vector2d > polygon_
std::shared_ptr< ccMesh > CropTriangleMesh(const ccMesh &input, const ViewControl &view)
virtual Eigen::Vector2d GetMax2DBound() const override
virtual bool isSerializable() const override
Returns whether object is serializable of not.
std::shared_ptr< ccPointCloud > CropPointCloud(const ccPointCloud &input, const ViewControl &view)
std::shared_ptr< SelectionPolygonVolume > CreateSelectionPolygonVolume(const ViewControl &view)
virtual Eigen::Vector2d GetMin2DBound() const override
SelectionPolygon(const char *name="SelectionPolygon")
View controller for visualizer.
Definition: ViewControl.h:25
@ CUSTOM_H_OBJECT
Definition: CVTypes.h:179
Generic file read and write utility for python interface.