23 #include <boost/graph/adjacency_list.hpp>
24 #include <boost/graph/properties.hpp>
25 #include <boost/graph/graph_traits.hpp>
26 #include <boost/function.hpp>
27 #include <boost/unordered_set.hpp>
29 #include <tbb/queuing_mutex.h>
30 #include <tbb/queuing_rw_mutex.h>
31 #include <tbb/atomic.h>
32 #include <tbb/compat/condition_variable>
33 #include <tbb/mutex.h>
38 namespace MAKVRinTerra
40 class DtAStarGraphDebugger;
46 explicit VertexInfo(
const DtPoint& point);
64 bool isOneway()
const;
65 bool isDeleted()
const;
75 boost::shared_ptr<Data>
myData;
81 class BoostGraphVisitor;
82 friend class BoostGraphVisitor;
84 struct RedrawCallback;
85 friend struct RedrawCallback;
92 typedef boost::shared_ptr<DtAStarGraph>
Ptr;
94 Ptr shared_from_this();
96 typedef boost::adjacency_list<
117 typedef boost::property<boost::edge_weight_t, double>
Weight;
125 typedef std::list<PathVertex>
List;
127 static double Distance(
const List&);
141 typedef std::list<MultiPathVertex>
List;
151 void addPath(PathVertex::List::const_iterator, PathVertex::List::const_iterator);
153 void addPathToEnd(PathVertex::List::const_iterator, PathVertex::List::const_iterator);
158 const DtProj& localProj)
const;
169 explicit Path(
const std::string& = std::string());
174 void addPath(
const Path&);
178 bool empty()
const {
return myPathVertices.empty(); }
179 size_t numPaths()
const {
return myPathVertices.size(); }
188 const DtProj& localProj)
const;
195 template <
typename T>
211 std::auto_ptr<DtFeatureSet> input,
214 std::string label = std::string());
218 virtual void shutdown();
219 virtual bool isShutdown()
const;
232 const DtPoint& startLocation,
233 const DtPoint& endLocation,
234 double maxSearchRadius,
235 double startProximityThreshold,
236 double stopProximityThreshold,
256 void setMaxSearchRadius(
double radius);
263 Results* results = 0,
264 unsigned recursionLevel = 0);
268 bool onPathFeature(
const DtPoint& location,
double offset = 0.5);
270 std::auto_ptr<DtPathFeatureSet> paths()
const;
286 const DtPoint& startingLocation,
287 const double& searchRadius,
288 bool* dataAvailable = NULL);
290 bool isDrawing()
const;
291 void setDrawing(
bool);
293 bool isSearchDrawing()
const;
294 void setSearchDrawing(
bool);
296 bool isLoadDrawing()
const;
297 void setLoadDrawing(
bool);
299 std::string label()
const;
304 void addFeatureToGraph(
306 bool joinToIntersectingEdges,
307 const boost::optional<DtFeatureGeometry>& searchArea = boost::none_t(),
310 void addFeatureToGraph(
312 const boost::optional<DtFeatureGeometry>& searchArea = boost::none_t(),
317 bool loadTile(
const DtPoint& localLocation,
double timeout = 0);
319 bool loadTileAndBlock(
321 bool loadTileAndBlock(
328 std::auto_ptr<DtFeatureSet> input,
351 struct GridTile :
public boost::enable_shared_from_this<GridTile>
353 typedef boost::shared_ptr<GridTile>
Ptr;
360 size_t operator()(
const EdgeRecord& edge)
const;
402 typedef tbb::queuing_rw_mutex
Mutex;
407 boost::shared_ptr<GridTile> subtiles[2][2];
441 template <
typename T>
460 for (
size_t i=0; i !=
size; ++i)
472 while (index >=
size())
480 while (index >=
size())
501 template <
typename T>
513 template <
typename T>
536 const DtPoint& localStart,
537 const DtPoint& localDestination,
538 double maxSearchRadius,
539 double startProximityThreshold,
540 double stopProximityThreshold,