Parasol Planning Library (PPL)
WorkspaceDecomposition.h
Go to the documentation of this file.
1 #ifndef WORKSPACE_DECOMPOSITION_H
2 #define WORKSPACE_DECOMPOSITION_H
3 
4 #include <vector>
5 
6 #include <containers/sequential/graph/graph.h>
7 #include "Vector.h"
8 
9 #include "WorkspacePortal.h"
10 #include "WorkspaceRegion.h"
12 
22 class WorkspaceDecomposition : public stapl::sequential::graph<stapl::DIRECTED,
23  stapl::NONMULTIEDGES, WorkspaceRegion,
24  WorkspacePortal>{
25 
26  public:
27 
30 
31  typedef stapl::sequential::graph<stapl::DIRECTED, stapl::NONMULTIEDGES,
33 
34  typedef typename RegionGraph::vertex_iterator iterator;
35  typedef typename RegionGraph::const_vertex_iterator const_iterator;
36 
37  typedef typename RegionGraph::edge_iterator edge_iterator;
38  typedef typename RegionGraph::const_edge_iterator const_edge_iterator;
39 
40  typedef typename RegionGraph::adj_edge_iterator adj_edge_iterator;
41  typedef typename RegionGraph::const_adj_edge_iterator const_adj_edge_iterator;
42 
43  typedef typename RegionGraph::vertex_descriptor vertex_descriptor;
44  typedef typename RegionGraph::edge_descriptor edge_descriptor;
45 
50  typedef stapl::sequential::graph<stapl::DIRECTED, stapl::NONMULTIEDGES,
51  Vector3d, double> DualGraph;
52 
56 
58 
61 
63 
67 
70 
74 
75  const size_t GetNumPoints() const noexcept;
76 
77  const Point3d& GetPoint(const size_t _i) const noexcept;
78 
79  const std::vector<Point3d>& GetPoints() const noexcept;
80 
84 
85  const size_t GetNumRegions() const noexcept;
86 
87  const WorkspaceRegion& GetRegion(const size_t _i) const noexcept;
88 
89  const vertex_descriptor GetDescriptor(const WorkspaceRegion& _region) const
90  noexcept;
91 
95 
96  const WorkspacePortal& GetPortal(const size_t _i1, const size_t _i2) const
97  noexcept;
98 
102 
103  DualGraph& GetDualGraph() noexcept;
104  const DualGraph& GetDualGraph() const noexcept;
105 
109 
114  void AddPoint(const Point3d& _p);
115 
119  void AddTetrahedralRegion(const int _pts[4]);
120 
124  void AddPortal(const size_t _r1, const size_t _r2);
125 
130  void Finalize();
131 
135 
137  void Print(std::ostream& _os) const;
138 
142  void WriteObj(const std::string& _filename) const;
143 
147 
151  std::vector<size_t> FindPath(const size_t _source, const size_t _target)
152  const;
154  std::vector<size_t> FindPath(const WorkspaceRegion* const _source,
155  const WorkspaceRegion* const _target) const;
156 
162  std::vector<size_t> FindNeighborhood(const std::vector<size_t>& _roots,
163  const double _threshold) const;
164 
166 
167  private:
168 
171 
174  void AssertMutable() const;
175 
177  void ComputeDualGraph();
178 
181  void UpdateDecompositionPointers();
182 
186 
187  std::vector<Point3d> m_points;
188  DualGraph m_dual;
189 
190  bool m_finalized{false};
191 
193 };
194 
195 #endif
Definition: WorkspaceDecomposition.h:24
DualGraph & GetDualGraph() noexcept
Definition: WorkspaceDecomposition.cpp:139
void AddPoint(const Point3d &_p)
Definition: WorkspaceDecomposition.cpp:154
const Point3d & GetPoint(const size_t _i) const noexcept
Definition: WorkspaceDecomposition.cpp:86
RegionGraph::const_vertex_iterator const_iterator
Definition: WorkspaceDecomposition.h:35
void Print(std::ostream &_os) const
Write the decomposition graph to an output stream.
Definition: WorkspaceDecomposition.cpp:213
stapl::sequential::graph< stapl::DIRECTED, stapl::NONMULTIEDGES, Vector3d, double > DualGraph
Definition: WorkspaceDecomposition.h:51
const WorkspaceRegion & GetRegion(const size_t _i) const noexcept
Definition: WorkspaceDecomposition.cpp:108
const size_t GetNumRegions() const noexcept
Definition: WorkspaceDecomposition.cpp:101
RegionGraph::edge_iterator edge_iterator
Definition: WorkspaceDecomposition.h:37
std::vector< size_t > FindNeighborhood(const std::vector< size_t > &_roots, const double _threshold) const
Definition: WorkspaceDecomposition.cpp:303
WorkspaceDecomposition & operator=(const WorkspaceDecomposition &)
Definition: WorkspaceDecomposition.cpp:44
stapl::sequential::graph< stapl::DIRECTED, stapl::NONMULTIEDGES, WorkspaceRegion, WorkspacePortal > RegionGraph
Definition: WorkspaceDecomposition.h:32
const vertex_descriptor GetDescriptor(const WorkspaceRegion &_region) const noexcept
Definition: WorkspaceDecomposition.cpp:115
std::vector< size_t > FindPath(const size_t _source, const size_t _target) const
Definition: WorkspaceDecomposition.cpp:256
const WorkspacePortal & GetPortal(const size_t _i1, const size_t _i2) const noexcept
Definition: WorkspaceDecomposition.cpp:127
const size_t GetNumPoints() const noexcept
Definition: WorkspaceDecomposition.cpp:79
RegionGraph::vertex_iterator iterator
Definition: WorkspaceDecomposition.h:34
RegionGraph::const_edge_iterator const_edge_iterator
Definition: WorkspaceDecomposition.h:38
RegionGraph::vertex_descriptor vertex_descriptor
Definition: WorkspaceDecomposition.h:43
RegionGraph::adj_edge_iterator adj_edge_iterator
Definition: WorkspaceDecomposition.h:40
virtual ~WorkspaceDecomposition()
const std::vector< Point3d > & GetPoints() const noexcept
Definition: WorkspaceDecomposition.cpp:93
RegionGraph::const_adj_edge_iterator const_adj_edge_iterator
Definition: WorkspaceDecomposition.h:41
void Finalize()
Definition: WorkspaceDecomposition.cpp:204
void WriteObj(const std::string &_filename) const
Definition: WorkspaceDecomposition.cpp:231
void AddPortal(const size_t _r1, const size_t _r2)
Definition: WorkspaceDecomposition.cpp:196
void AddTetrahedralRegion(const int _pts[4])
Definition: WorkspaceDecomposition.cpp:162
RegionGraph::edge_descriptor edge_descriptor
Definition: WorkspaceDecomposition.h:44
Definition: WorkspacePortal.h:19
Definition: WorkspaceRegion.h:18