24 #include <boost/graph/adjacency_list.hpp>
25 #include <boost/graph/properties.hpp>
26 #include <boost/graph/graph_traits.hpp>
27 #include <boost/function.hpp>
28 #include <boost/unordered_set.hpp>
30 #include <tbb/queuing_mutex.h>
31 #include <tbb/queuing_rw_mutex.h>
32 #include <tbb/atomic.h>
33 #include <tbb/compat/condition_variable>
34 #include <tbb/mutex.h>
39 namespace MAKVRinTerra
41 class DtAStarGraphDebugger;
47 explicit VertexInfo(
const DtPoint& point);
65 bool isOneway()
const;
66 bool isDeleted()
const;
76 boost::shared_ptr<Data>
myData;
82 class BoostGraphVisitor;
83 friend class BoostGraphVisitor;
85 struct RedrawCallback;
86 friend struct RedrawCallback;
93 typedef boost::shared_ptr<DtAStarGraph>
Ptr;
95 Ptr shared_from_this();
97 typedef boost::adjacency_list<
118 typedef boost::property<boost::edge_weight_t, double>
Weight;
126 typedef std::list<PathVertex>
List;
128 static double Distance(
const List&);
142 typedef std::list<MultiPathVertex>
List;
152 void addPath(PathVertex::List::const_iterator, PathVertex::List::const_iterator);
154 void addPathToEnd(PathVertex::List::const_iterator, PathVertex::List::const_iterator);
159 const DtProj& localProj)
const;
170 explicit Path(
const std::string& = std::string());
175 void addPath(
const Path&);
179 bool empty()
const {
return myPathVertices.empty(); }
180 size_t numPaths()
const {
return myPathVertices.size(); }
189 const DtProj& localProj)
const;
196 template <
typename T>
212 std::auto_ptr<DtFeatureSet> input,
215 std::string label = std::string());
219 virtual void shutdown();
220 virtual bool isShutdown()
const;
235 double maxSearchRadius,
236 double startProximityThreshold,
237 double stopProximityThreshold,
257 void setMaxSearchRadius(
double radius);
264 Results* results = 0,
265 unsigned recursionLevel = 0);
269 bool onPathFeature(
const DtPoint& location,
double offset = 0.5);
271 std::auto_ptr<DtPathFeatureSet> paths()
const;
287 const DtPoint& startingLocation,
288 const double& searchRadius,
289 bool* dataAvailable = NULL);
291 bool isDrawing()
const;
292 void setDrawing(
bool);
294 bool isSearchDrawing()
const;
295 void setSearchDrawing(
bool);
297 bool isLoadDrawing()
const;
298 void setLoadDrawing(
bool);
300 std::string label()
const;
305 void addFeatureToGraph(
307 bool joinToIntersectingEdges,
308 const boost::optional<DtFeatureGeometry>& searchArea = boost::none_t(),
311 void addFeatureToGraph(
313 const boost::optional<DtFeatureGeometry>& searchArea = boost::none_t(),
318 bool loadTile(
const DtPoint& localLocation,
double timeout = 0);
320 bool loadTileAndBlock(
322 bool loadTileAndBlock(
329 std::auto_ptr<DtFeatureSet> input,
352 struct GridTile :
public boost::enable_shared_from_this<GridTile>
354 typedef boost::shared_ptr<GridTile>
Ptr;
361 size_t operator()(
const EdgeRecord& edge)
const;
399 bool loaded(
double timeout)
const;
409 typedef tbb::queuing_rw_mutex
Mutex;
414 boost::shared_ptr<GridTile> subtiles[2][2];
448 template <
typename T>
467 for (
size_t i=0; i !=
size; ++i)
479 while (index >=
size())
487 while (index >=
size())
508 template <
typename T>
520 template <
typename T>
544 const DtPoint& localDestination,
545 double maxSearchRadius,
546 double startProximityThreshold,
547 double stopProximityThreshold,