Parasol Planning Library (PPL)
WorkspaceRegion.h
Go to the documentation of this file.
1 #ifndef WORKSPACE_REGION_H_
2 #define WORKSPACE_REGION_H_
3 
4 #include <memory>
5 #include <vector>
6 #include "Geometry/GMSPolygon.h"
7 
8 class Boundary;
10 
11 
18 class WorkspaceRegion final {
19 
20  public:
21 
24 
25  typedef GMSPolygon Facet;
26 
30 
34 
39 
42 
44 
49 
53 
56 
60 
61  bool operator==(const WorkspaceRegion& _region) const noexcept;
62  bool operator!=(const WorkspaceRegion& _region) const noexcept;
63 
67 
68  void AddPoint(const size_t _i);
69 
70  void AddFacet(Facet&& _f);
71 
73  void AddBoundary(std::unique_ptr<Boundary>&& _b);
74 
78 
80  const size_t GetNumPoints() const noexcept;
81 
83  const size_t GetNumFacets() const noexcept;
84 
86  const Point3d& GetPoint(const size_t _i) const noexcept;
87 
89  const std::vector<Point3d> GetPoints() const noexcept;
90 
92  const std::vector<Facet>& GetFacets() const noexcept;
93 
95  const Boundary* GetBoundary() const noexcept;
96 
100 
102  const bool HasPoint(const Point3d& _p) const noexcept;
103 
105  const Point3d FindCenter() const noexcept;
106 
108  const std::vector<Point3d> FindSharedPoints(const WorkspaceRegion& _wr)
109  const noexcept;
110 
112  const std::vector<const Facet*> FindSharedFacets(const WorkspaceRegion& _wr)
113  const noexcept;
114 
116 
117  private:
118 
121 
122  WorkspaceDecomposition* m_decomposition{nullptr};
123 
124  std::vector<size_t> m_points;
125  std::vector<Facet> m_facets;
126 
127  std::unique_ptr<Boundary> m_boundary;
128 
130 };
131 
132 #endif
Definition: Boundary.h:30
Definition: GMSPolygon.h:21
Definition: WorkspaceDecomposition.h:24
Definition: WorkspaceRegion.h:18
const size_t GetNumFacets() const noexcept
Get the number of facets in the region.
Definition: WorkspaceRegion.cpp:116
void AddBoundary(std::unique_ptr< Boundary > &&_b)
Add a boundary and assume ownership of it.
Definition: WorkspaceRegion.cpp:101
bool operator!=(const WorkspaceRegion &_region) const noexcept
Definition: WorkspaceRegion.cpp:79
const bool HasPoint(const Point3d &_p) const noexcept
Check if a given point is part of this region's boundary.
Definition: WorkspaceRegion.cpp:155
void AddFacet(Facet &&_f)
Definition: WorkspaceRegion.cpp:94
const Boundary * GetBoundary() const noexcept
Get the boundary for this region.
Definition: WorkspaceRegion.cpp:147
WorkspaceRegion & operator=(WorkspaceRegion &&)
Move.
const std::vector< Point3d > FindSharedPoints(const WorkspaceRegion &_wr) const noexcept
Find shared points with another workspace region.
Definition: WorkspaceRegion.cpp:176
GMSPolygon Facet
A triangle facet.
Definition: WorkspaceRegion.h:25
const std::vector< Facet > & GetFacets() const noexcept
Get the set of facets that border this region.
Definition: WorkspaceRegion.cpp:140
const std::vector< const Facet * > FindSharedFacets(const WorkspaceRegion &_wr) const noexcept
Find shared facets with another workspace region.
Definition: WorkspaceRegion.cpp:198
const std::vector< Point3d > GetPoints() const noexcept
Get a list of all points in this region.
Definition: WorkspaceRegion.cpp:130
WorkspaceRegion & operator=(const WorkspaceRegion &)
Copy.
Definition: WorkspaceRegion.cpp:50
const Point3d & GetPoint(const size_t _i) const noexcept
Get the _i'th point of this region.
Definition: WorkspaceRegion.cpp:123
const Point3d FindCenter() const noexcept
Find the center of this region.
Definition: WorkspaceRegion.cpp:165
void SetDecomposition(WorkspaceDecomposition *const _wd)
Definition: WorkspaceRegion.cpp:37
bool operator==(const WorkspaceRegion &_region) const noexcept
Definition: WorkspaceRegion.cpp:70
const size_t GetNumPoints() const noexcept
Get the number of points in the region.
Definition: WorkspaceRegion.cpp:109
void AddPoint(const size_t _i)
Definition: WorkspaceRegion.cpp:87