traversability_generator3d
TravMapBfsVisitor.hpp
Go to the documentation of this file.
1#pragma once
2#include "TravGenNode.hpp"
3#include <functional>
4#include <unordered_set>
5#include <unordered_map>
6#include <deque>
7
9{
10
11//FIXME should be moved to envire::maps ?!
12
15{
16public:
17
21 static void visit(const TravGenNode* start, std::function<void(const TravGenNode* currentNode,
22 bool& visitChildren, bool& abort, std::size_t distToRoot)> f)
23 {
24
25 std::unordered_set<const TravGenNode*> visited;
26 std::deque<const TravGenNode*> toVisit;
27 std::unordered_map<const TravGenNode*, std::size_t> distToRoot;
28 toVisit.push_back(start);
29 visited.insert(start);
30 distToRoot[start] = 0;
31
32 while(toVisit.size() > 0)
33 {
34 const TravGenNode* currentNode = toVisit.front();
35 toVisit.pop_front();
36
37 bool visitChildren = true;
38 bool abort = false;
40
41 if(abort)
42 return;
43
45 {
46 for(const maps::grid::TraversabilityNodeBase* node : currentNode->getConnections())
47 {
48 const TravGenNode* travNode = static_cast<const TravGenNode*>(node);
49 assert(travNode != nullptr);
50 if(visited.find(travNode) != visited.end())
51 continue;
52 visited.insert(travNode); //if we mark it as visited after the visit it might be visited multiple times
53 toVisit.push_back(travNode);
55 }
56 }
57 }
58 }
59};
60
61
62}
CGAL::Polyhedron_3< K > Polyhedron_3
Definition TraversabilityGenerator3d.hpp:27
Definition TravMapBfsVisitor.hpp:15
static void visit(const TravGenNode *start, std::function< void(const TravGenNode *currentNode, bool &visitChildren, bool &abort, std::size_t distToRoot)> f)
Definition TravMapBfsVisitor.hpp:21
Definition SoilNode.hpp:9
maps::grid::TraversabilityNode< TravGenTrackingData > TravGenNode
Definition TravGenNode.hpp:108