1 #ifndef PROPERTY_MAP_H_
2 #define PROPERTY_MAP_H_
5 #include <unordered_map>
14 #include <containers/sequential/graph/directed_preds_graph.h>
27 return hash<typename WorkspaceSkeleton::ED::edge_id_type>()(_ed.id());
37 template<
typename EdgeProperty,
typename VertexProperty=
void>
57 typedef unordered_map<ED, EdgeProperty, edgeHash>
EdgeMapType;
106 void Write(
const std::string& _file);
111 void Read(
const std::string& _file);
121 EdgeMapType m_edgeMap;
122 VertexMapType m_vertexMap;
128 bool _boundary =
true);
137 template<
typename EdgeProperty,
typename VertexProperty>
141 return m_edgeMap.at(_e);
144 template<
typename EdgeProperty,
typename VertexProperty>
148 m_edgeMap.emplace(_e, _ep);
151 template<
typename EdgeProperty,
typename VertexProperty>
155 return m_vertexMap.at(_v);
158 template<
typename EdgeProperty,
typename VertexProperty>
162 m_vertexMap.emplace(_v, _vp);
165 template<
typename EdgeProperty,
typename VertexProperty>
170 for(
auto mit = m_vertexMap.begin();
171 mit != m_vertexMap.end(); ++mit) {
172 if(_f(mit->second)) {
180 template<
typename EdgeProperty,
typename VertexProperty>
185 for(
auto mit = m_edgeMap.begin();
186 mit != m_edgeMap.end(); ++mit) {
187 if(_f(mit->second)) {
188 m_skeleton->delete_edge(mit->first);
197 template<
typename EdgeProperty,
typename VertexProperty>
200 Write(
const std::string& _file) {
201 std::ofstream ofs(_file);
203 ofs << m_vertexMap.size() <<
" "<< m_edgeMap.size() << std::endl;
204 for(
auto vit : m_vertexMap){
205 auto spk = this->GetVertexProperty(vit.first);
206 ofs << vit.first <<
" "<< spk.size() <<
" ";
212 for(
auto eit : m_edgeMap) {
213 auto spks = this->GetEdgeProperty(eit.first);
215 ofs << eit.first.id() <<
" ";
216 ofs << eit.first.source() <<
" " << eit.first.target() <<
" " << spks.size() << std::endl;
218 for(
auto spk : spks) {
219 ofs << spk.size() <<
" ";
230 template<
typename EdgeProperty,
typename VertexProperty>
233 Read(
const std::string& _file) {
237 std::fstream ifs(_file);
238 size_t nVerts, nEdges;
240 ifs >> nVerts >> nEdges;
242 for(
size_t vit = 0; vit < nVerts; vit++) {
245 std::vector<Point3d> vertexProperty;
247 ifs >> vid >> propSize;
248 for (
size_t propit = 0; propit < propSize; propit++) {
251 vertexProperty.push_back(prop);
253 this->SetVertexProperty(vid, vertexProperty);
256 for(
size_t eit = 0; eit < nEdges; eit++) {
258 size_t proSize, eSource, eTarget, eDesID;
259 std::vector<vector<Point3d> > intermediateWitnesses;
262 ifs >> eSource >> eTarget >> proSize;
263 for (
size_t pit = 0; pit < proSize; pit++) {
265 std::vector<Point3d> edgeProperty;
268 for(
size_t it = 0; it < eSize; it++) {
271 edgeProperty.push_back(prop);
274 intermediateWitnesses.push_back(edgeProperty);
277 auto ed =
ED(eSource, eTarget, eDesID);
278 this->SetEdgeProperty(ed, intermediateWitnesses);
PropertyMap< vector< double >, double > * ClearanceAnnotatedSkeleton(MPBaseObject *_mp, WorkspaceSkeleton *_ws, bool _boundary=true)
Function to generate the annotated clearance skeleton.
Definition: PropertyMap.cpp:9
virtual void DeleteVertex(const VID _v) noexcept
Definition: GenericStateGraph.h:663
Definition: MPBaseObject.h:46
Definition: PropertyMap.h:38
PropertyMap(WorkspaceSkeleton *_ws)
Definition: PropertyMap.h:65
VertexProperty & GetVertexProperty(const VD &_v)
Definition: PropertyMap.h:154
WorkspaceSkeleton * GetVertexFilteredSkeleton(VertexFilterFunction &&_f)
Definition: PropertyMap.h:168
void Read(const std::string &_file)
Definition: PropertyMap.h:233
unordered_map< VD, VertexProperty > VertexMapType
Definition: PropertyMap.h:58
EdgeMapType & GetEdgeMap()
Definition: PropertyMap.h:88
WorkspaceSkeleton * GetEdgeFilteredSkeleton(EdgeFilterFunction &&_f)
Definition: PropertyMap.h:183
WorkspaceSkeleton::VD VD
Definition: PropertyMap.h:47
VertexMapType & GetVertexMap()
Definition: PropertyMap.h:87
void SetEdgeProperty(const ED &_e, const EdgeProperty &_ep)
Definition: PropertyMap.h:147
GraphType::adj_edge_iterator adj_edge_iterator
Definition: PropertyMap.h:50
EdgeProperty & GetEdgeProperty(const ED &_e)
Definition: PropertyMap.h:140
void SetVertexProperty(const VD &_v, const VertexProperty &_vp)
Individual accessors.
Definition: PropertyMap.h:161
GraphType::vertex_iterator vertex_iterator
Definition: PropertyMap.h:49
function< bool(EdgeProperty &)> EdgeFilterFunction
Definition: PropertyMap.h:54
void SetVertexMap(VertexMapType &_vMap)
Definition: PropertyMap.h:89
void SetEdgeMap(EdgeMapType &_eMap)
Definition: PropertyMap.h:90
void SetSkeleton(WorkspaceSkeleton *_ws)
Definition: PropertyMap.h:86
WorkspaceSkeleton GraphType
Graph type is a directed multiedge graph of points and paths.
Definition: PropertyMap.h:46
void Write(const std::string &_file)
Definition: PropertyMap.h:200
WorkspaceSkeleton::ED ED
Definition: PropertyMap.h:48
unordered_map< ED, EdgeProperty, edgeHash > EdgeMapType
Definition: PropertyMap.h:57
function< bool(VertexProperty &)> VertexFilterFunction
Definition: PropertyMap.h:55
Geometric skeleton of the workspace.
Definition: WorkspaceSkeleton.h:22
BaseType::EID ED
Definition: WorkspaceSkeleton.h:32
BaseType::VID VD
Definition: WorkspaceSkeleton.h:31
BaseType::VI vertex_iterator
Definition: WorkspaceSkeleton.h:33
BaseType::EI adj_edge_iterator
Definition: WorkspaceSkeleton.h:35
Hash for edge descriptor.
Definition: PropertyMap.h:23
size_t operator()(const WorkspaceSkeleton::ED &_ed) const
return a hashed value for a given edge descriptor
Definition: PropertyMap.h:26