23 #ifndef __LIBS_NAVGRAPH_NAVGRAPH_H_ 24 #define __LIBS_NAVGRAPH_NAVGRAPH_H_ 26 #include <navgraph/navgraph_node.h> 27 #include <navgraph/navgraph_edge.h> 28 #include <navgraph/navgraph_path.h> 29 #include <core/utils/lockptr.h> 46 std::function<float (const fawkes::NavGraphNode &, const fawkes::NavGraphNode &)>
49 std::function<float (const fawkes::NavGraphNode &, const fawkes::NavGraphNode &)>
52 extern const char *PROP_ORIENTATION;
55 class NavGraphConstraintRepo;
73 EDGE_SPLIT_INTERSECTION
79 NavGraph(
const std::string &graph_name);
82 std::string name()
const;
83 const std::vector<NavGraphNode> & nodes()
const;
84 const std::vector<NavGraphEdge> & edges()
const;
87 const std::map<std::string, std::string> & default_properties()
const;
88 bool has_default_property(
const std::string &property)
const;
90 std::string default_property(
const std::string &prop)
const;
91 float default_property_as_float(
const std::string &prop)
const;
92 int default_property_as_int(
const std::string &prop)
const;
93 bool default_property_as_bool(
const std::string &prop)
const;
95 void set_default_property(
const std::string &property,
const std::string &value);
96 void set_default_property(
const std::string &property,
float value);
97 void set_default_property(
const std::string &property,
int value);
98 void set_default_property(
const std::string &property,
bool value);
99 void set_default_properties(
const std::map<std::string, std::string> &properties);
106 const std::string &property =
"")
const;
108 NavGraphNode closest_node_to(
const std::string &node_name,
109 const std::string &property =
"")
const;
111 NavGraphNode closest_node(
float pos_x,
float pos_y,
bool consider_unconnected,
112 const std::string &property =
"")
const;
114 NavGraphNode closest_node_to(
const std::string &node_name,
bool consider_unconnected,
115 const std::string &property =
"")
const;
117 NavGraphNode closest_node_with_unconnected(
float pos_x,
float pos_y,
118 const std::string &property =
"")
const;
120 NavGraphNode closest_node_to_with_unconnected(
const std::string &node_name,
121 const std::string &property =
"")
const;
123 NavGraphEdge edge(
const std::string &from,
const std::string &to)
const;
124 NavGraphEdge closest_edge(
float pos_x,
float pos_y)
const;
126 std::vector<NavGraphNode> search_nodes(
const std::string &property)
const;
128 std::vector<std::string> reachable_nodes(
const std::string &node_name)
const;
131 bool use_constraints =
true,
bool compute_constraints =
true);
134 navgraph::EstimateFunction estimate_func,
135 navgraph::CostFunction cost_func,
136 bool use_constraints =
true,
bool compute_constraints =
true);
140 bool use_constraints =
true,
bool compute_constraints =
true);
144 navgraph::EstimateFunction estimate_func,
145 navgraph::CostFunction cost_func,
146 bool use_constraints =
true,
bool compute_constraints =
true);
149 void add_node_and_connect(
const NavGraphNode &node, ConnectionMode conn_mode);
150 void connect_node_to_closest_node(
const NavGraphNode &n);
151 void connect_node_to_closest_edge(
const NavGraphNode &n);
152 void add_edge(
const NavGraphEdge &edge, EdgeMode mode = EDGE_NO_INTERSECTION,
153 bool allow_existing =
false);
155 void remove_node(
const std::string &node_name);
157 void remove_edge(
const std::string &from,
const std::string &to);
164 bool node_exists(
const std::string &name)
const;
166 bool edge_exists(
const std::string &from,
const std::string &to)
const;
168 void calc_reachability(
bool allow_multi_graph =
false);
172 void set_notifications_enabled(
bool enabled);
173 void notify_of_change() throw();
177 virtual ~ChangeListener();
178 virtual void graph_changed()
throw() = 0;
190 {
return search_default_funcs_; }
192 void set_search_funcs(navgraph::EstimateFunction estimate_func,
193 navgraph::CostFunction cost_func);
195 void unset_search_funcs();
199 static std::string format_name(
const char *format, ...);
200 std::string gen_unique_name(
const char *prefix =
"U-");
203 void assert_valid_edges();
204 void assert_connected();
205 void edge_add_no_intersection(
const NavGraphEdge &edge);
206 void edge_add_split_intersection(
const NavGraphEdge &edge);
209 std::string graph_name_;
210 std::vector<NavGraphNode> nodes_;
211 std::vector<NavGraphEdge> edges_;
213 std::list<ChangeListener *> change_listeners_;
214 std::map<std::string, std::string> default_properties_;
216 bool search_default_funcs_;
217 navgraph::EstimateFunction search_estimate_func_;
218 navgraph::CostFunction search_cost_func_;
220 bool reachability_calced_;
223 bool notifications_enabled_;
Fawkes library namespace.
Class representing a path for a NavGraph.
LockPtr<> is a reference-counting shared lockable smartpointer.
EdgeMode
Mode to use to add edges.
bool uses_default_search() const
Check if the default euclidean distance search is used.
add nodes no matter what (be careful)
Topological graph change listener.
ConnectionMode
Connect mode enum for connect_node_* methods.