VR-Forces 4.7 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
navGeneration.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2015 MaK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 #pragma once
10 
17 
18 #include <matrix/vlVector.h>
19 
20 #include <tbb/queuing_rw_mutex.h>
21 #include <tbb/mutex.h>
22 #include <tbb/tbb_thread.h>
23 
24 #include <string>
25 #include <list>
26 
29 class DtTerrainInterface;
32 class DtDynamicLibrary;
33 
34 namespace MAKVRinTerra
35 {
36  class DtFeature;
37  class DtFeatureGeometry;
38 }
39 
40 namespace Kaim
41 {
42  class GeneratorInputOutput;
43  class GeneratorSector;
44 }
45 
47 {
48  DtNavTagColor() : red(0), green(0), blue(0) {};
49  unsigned int red;
50  unsigned int green;
51  unsigned int blue;
52 };
53 
55 {
56  DtInputNavTag() : isExclusive(false) {};
57  std::vector<unsigned long> navTagData;
59  bool isExclusive;
61 };
62 
64 {
65  std::vector<DtVector> points;
66  unsigned int navTagDataIndex;
67 };
68 
70 {
71  std::vector<DtInputNavTag> navTagDataList;
72  std::vector<DtInputNavTagVolume> navTagVolumeList;
73 };
74 
76 {
77 public:
78  virtual bool generateTagVolumes(const MAKVRinTerra::DtFeatureGeometry& extentBox,
79  bool pruneNoGo, const DtRwNavigationProfile* navProfile, DtNavTagVolumeSet& tagVolumes) = 0;
80 };
81 
84 {
85 public:
86 
88  {
93  GenerationStopped
94  };
95 
96  typedef tbb::queuing_rw_mutex RwMutex;
97  typedef tbb::mutex Mutex;
98 
99  typedef std::map<DtNavSectorDataType, std::vector<char> > NavDataOutputMap;
100 
102  {
104  : sectorName(sn)
105  , timeToComplete(-1)
106  {
107  stop = false;
108  status = GenerationNotRequested;
109  }
110 
113  tbb::atomic<SectorGenerationStatus> status;
115  std::auto_ptr<tbb::tbb_thread> thread;
116  tbb::atomic<bool> stop;
118  };
119  typedef std::map<DtNavSectorName, SectorGenerationThreadInfo*> SectorGenerationThreadMap;
120 
122  {
125  };
126 
127 
128  typedef std::map<DtString, DtString> ProfileRandomIdMap;
129 
130  typedef DtNavDataGenerator* (*DtNavDataGeneratorCreatorFcn)();
131 
133  {
134  NavEdgePoints(const DtVector& p1 = DtVector::zero(),
135  const DtVector& p2 = DtVector::zero(), unsigned t = 0)
136  : point1(p1), point2(p2), tag(t) {};
137 
138  DtVector point1;
140  unsigned tag;
141  };
142 
143  struct NavPoint
144  {
145  NavPoint(const DtVector& pt = DtVector::zero(), unsigned t = 0)
146  : point(pt), tag(t) {};
147 
148  DtVector point;
149  unsigned tag;
150  };
151 
159  typedef bool(*DynamicTerrainNavEdgeFunction)(const DtRwDynamicTerrainInformation& dynTerrInfo,
160  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned edgeTag,
161  std::list<NavEdgePoints>* edges, void* usr);
162 
169  typedef bool(*FeatureDataNavEdgeFunction)(const MAKVRinTerra::DtFeature& feature,
170  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned edgeTag,
171  std::list<NavEdgePoints>* edges, void* usr);
172 
180  typedef bool(*GeneralNavEdgeFunction)(DtNavDataGenerator* navGenerator,
181  int sectorX, int sectorY, unsigned edgeTag,
182  std::list<NavEdgePoints>* edges, void* usr);
183 
184  typedef std::pair<DynamicTerrainNavEdgeFunction, void*> DynamicTerrainNavEdgeFunctionInfo;
185  typedef std::pair<FeatureDataNavEdgeFunction, void*> FeatureDataNavEdgeFunctionInfo;
186  typedef std::pair<GeneralNavEdgeFunction, void*> GeneralNavEdgeFunctionInfo;
187 
195  typedef bool(*DynamicTerrainNavPointFunction)(const DtRwDynamicTerrainInformation& dynTerrInfo,
196  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned pointTag,
197  std::list<NavPoint>* points, void* usr);
198 
205  typedef bool(*FeatureDataNavPointFunction)(const MAKVRinTerra::DtFeature& feature,
206  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned pointTag,
207  std::list<NavPoint>* points, void* usr);
208 
216  typedef bool(*GeneralNavPointFunction)(DtNavDataGenerator* navGenerator,
217  int sectorX, int sectorY, unsigned pointTag,
218  std::list<NavPoint>* points, void* usr);
219 
220  typedef std::pair<DynamicTerrainNavPointFunction, void*> DynamicTerrainNavPointFunctionInfo;
221  typedef std::pair<FeatureDataNavPointFunction, void*> FeatureDataNavPointFunctionInfo;
222  typedef std::pair<GeneralNavPointFunction, void*> GeneralNavPointFunctionInfo;
223 
226  static DtNavDataGenerator* create();
227 
229  virtual ~DtNavDataGenerator();
230 
232  virtual bool initialize(DtTerrainInterface* terrainInterface,
233  const DtFilename& navGenConfigFile,
234  const DtFilename& runtimeConfigFile,
235  const DtFilename& outputPath,
236  const DtFilename& terrainFile,
237  bool generateFeatureTagVolumes);
238 
243  void addNavEdgeFromDynamicTerrainFunction(const DtString& name,
244  DynamicTerrainNavEdgeFunction fcn, void* usr);
245 
250  void addNavEdgeFromFeatureDataFunction(const DtString& name, FeatureDataNavEdgeFunction fcn,
251  void* usr);
252 
257  void addGeneralNavEdgeFunction(const DtString& name, GeneralNavEdgeFunction fcn,
258  void* usr);
259 
264  void addNavPointFromDynamicTerrainFunction(const DtString& name,
265  DynamicTerrainNavPointFunction fcn, void* usr);
266 
271  void addNavPointFromFeatureDataFunction(const DtString& name, FeatureDataNavPointFunction fcn,
272  void* usr);
273 
278  void addGeneralNavPointFunction(const DtString& name, FeatureDataNavPointFunction fcn,
279  void* usr);
280 
282  virtual void setTransitionPointSpacing(double spacing);
283 
285  virtual double transitionPointSpacing() const;
286 
291  virtual bool generate();
292 
295  virtual bool generateSector(const DtNavSectorName& sectorName);
296 
299  virtual SectorGenerationStatus getGenerateSectorStatus(const DtNavSectorName& sectorName,
300  NavDataOutputMap& outputNavData);
301 
303  virtual const DtRwNavigationProfile* profileConfig(const DtString& profileName) const;
304 
306  virtual const DtRwNavGenConfig* navGenConfig() const;
307 
309  virtual const DtTerrainInterface* terrainInterface() const;
310 
312  MAKVRinTerra::DtFeatureGeometry& extentFeatureGeometry();
313 
315  MAKVRinTerra::DtFeatureGeometry& extentFeatureGeometry(int sectorX, int sectorY);
316 
320  virtual bool terrainHeight(const DtPoint& p, double& height, double* min = 0, double* max = 0) const;
321 
323  static void setCreator(DtNavDataGeneratorCreatorFcn creatorFcn);
324 
326  static void setNavDataDirectory(const DtFilename& navDataDir);
327 
329  static const DtFilename& navDataDirectory();
330 
333  static DtFilename replaceSubstrings(const DtFilename& original);
334 
335 protected:
336 
340 
342  virtual void loadPlugins(const std::set<DtFilename>& pluginFiles);
343 
345  virtual void unloadPlugins();
346 
348  virtual bool checkPluginVersion(DtDynamicLibrary* plugin) const;
349 
351  virtual void doGenerateSector(SectorGenerationThreadInfo* sectorGenInfo);
352 
355  virtual bool shouldStop(SectorGenerationThreadInfo* sectorGenInfo);
356 
359  static void triangleCallback(DtTerrainTriangleStruct& triangle, void* usr);
360  virtual void processTriangle(DtTerrainTriangleStruct& triangle, DtNavTriangles& triangles);
362 
365  static void trianglesFinalizeCallback(int status, void* usr);
366  virtual void processTrianglesFinalize(int status, DtNavTriangles& triangles);
368 
370  virtual std::list<DtVector> calculateTransitionPointLocations();
371 
373  virtual void getProfileRandomIds(DtRwStringList& profiles, ProfileRandomIdMap& randomIds);
374 
376  virtual bool generateProfileNavData(
377  const DtRwNavigationProfile* profile,
378  DtString randomId);
379 
381  virtual bool generateSectorNavData(
382  const DtRwNavigationProfile* profile,
383  const DtNavSectorName& sectorName,
384  NavDataOutputMap& outputData,
385  SectorGenerationThreadInfo* sectorGenInfo = 0);
386 
389  virtual bool generateTransitionPoints(const DtRwNavigationProfile* profile,
390  Kaim::GeneratorInputOutput& generatorInputOutput,
391  const DtString& randomId, const DtFilename& navDataOutputDir);
392 
396  virtual bool generateSectorTransitionPoints(const DtRwNavigationProfile* profile,
397  Kaim::GeneratorSector* sector, const DtString& randomId,
398  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
399  std::vector<char>* buffer = 0,
400  SectorGenerationThreadInfo* sectorGenInfo = 0);
401 
404  virtual bool generateCoverPoints(const DtRwNavigationProfile* profile,
405  Kaim::GeneratorInputOutput& generatorInputOutput,
406  const DtString& randomId, const DtFilename& navDataOutputDir);
407 
411  virtual bool generateSectorCoverPoints(const DtRwNavigationProfile* profile,
412  Kaim::GeneratorSector* sector, const DtString& randomId,
413  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
414  std::vector<char>* buffer = 0,
415  SectorGenerationThreadInfo* sectorGenInfo = 0);
416 
419  virtual bool generateNavEdges(const DtRwNavigationProfile* profile,
420  Kaim::GeneratorInputOutput& generatorInputOutput,
421  const DtString& randomId, const DtFilename& navDataOutputDir);
422 
426  virtual bool generateSectorNavEdges(const DtRwNavigationProfile* profile,
427  Kaim::GeneratorSector* sector, const DtString& randomId,
428  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
429  std::vector<char>* buffer = 0,
430  SectorGenerationThreadInfo* sectorGenInfo = 0);
431 
433  virtual bool computeSectorNavEdges(const DtRwNavigationProfile* profile,
434  int sectorX, int sectorY, const DtExtent& sectorExtent,
435  SectorGenerationThreadInfo* sectorGenInfo,
436  std::list<NavEdgePoints>& navEdges);
437 
440  virtual bool generateNavPoints(const DtRwNavigationProfile* profile,
441  Kaim::GeneratorInputOutput& generatorInputOutput,
442  const DtString& randomId, const DtFilename& navDataOutputDir);
443 
447  virtual bool generateSectorNavPoints(const DtRwNavigationProfile* profile,
448  Kaim::GeneratorSector* sector, const DtString& randomId,
449  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
450  std::vector<char>* buffer = 0,
451  SectorGenerationThreadInfo* sectorGenInfo = 0);
452 
454  virtual bool computeSectorNavPoints(const DtRwNavigationProfile* profile,
455  int sectorX, int sectorY, const DtExtent& sectorExtent,
456  SectorGenerationThreadInfo* sectorGenInfo,
457  std::list<NavPoint>& navPoints);
458 
459 
462  virtual void setNumberOfProgressSteps(int steps);
463  virtual void nextProgressStep(const DtString& stepName, int numSubSteps = 0);
464  virtual void nextProgressSubStep();
465  virtual void progressComplete();
466  virtual void outputProgress(const DtString& stepName = DtString::nullString());
468 
472 
474  virtual DtOutputStream& detailOutput();
475 
477  virtual DtOutputStream& milestoneOutput();
478 
480  virtual DtOutputStream& notableOutput();
481 
483  virtual DtOutputStream& errorOutput();
484 
486 
487 
488 private:
489 
492 
494  DtNavDataGenerator& operator=(const DtNavDataGenerator& orig);
495 
496 protected:
497 
500 
503 
506 
509 
512 
514  DtFilename myNavGenConfigFile;
515 
518 
520  DtFilename myOutputPath;
521 
523  DtFilename myTerrainFile;
524 
527 
530 
534 
537 
540 
543 
548 
550  std::map<DtString, DynamicTerrainNavEdgeFunctionInfo> myDynamicTerrainNavEdgeFunctions;
551 
553  std::map<DtString, FeatureDataNavEdgeFunctionInfo> myFeatureDataNavEdgeFunctions;
554 
557  std::map<DtString, GeneralNavEdgeFunctionInfo> myGeneralNavEdgeFunctions;
558 
560  std::map<DtString, DynamicTerrainNavPointFunctionInfo> myDynamicTerrainNavPointFunctions;
561 
563  std::map<DtString, FeatureDataNavPointFunctionInfo> myFeatureDataNavPointFunctions;
564 
567  std::map<DtString, GeneralNavPointFunctionInfo> myGeneralNavPointFunctions;
568 
570 
571  std::list<DtDynamicLibrary*> myLoadedPlugins;
572 
573  static DtFilename theNavDataDir;
574  static DtNavDataGeneratorCreatorFcn theCreatorFcn;
575 };
576 
577 

Document ID: Generated on Fri Apr 26 21:53:14 EDT 2019 from SVN revision 197883
Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)