VR-Forces Developer's Guide
 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) 2020 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 #include <tbb/task_arena.h>
24 #include <tbb/spin_mutex.h>
25 
26 #include <string>
27 #include <list>
28 
31 class DtTerrainInterface;
34 class DtDynamicLibrary;
35 
36 namespace MAKVRinTerra
37 {
38  class DtFeature;
39  class DtFeatureGeometry;
40 }
41 
42 namespace Kaim
43 {
44  class GeneratorInputOutput;
45  class GeneratorSector;
46 }
47 
49 {
50  DtNavTagColor() : red(0), green(0), blue(0) {};
51  unsigned int red;
52  unsigned int green;
53  unsigned int blue;
54 };
55 
57 {
58  DtInputNavTag() : isExclusive(false) {};
59  std::vector<unsigned long> navTagData;
61  bool isExclusive;
63 };
64 
65 
67 {
68 public:
70 };
71 
73 {
74 public:
76 };
77 
79 {
80  std::vector<DtVector> points;
81  unsigned int navTagDataIndex;
82 };
83 
85 {
86  std::vector<DtInputNavTag> navTagDataList;
87  std::vector<DtInputNavTagVolume> navTagVolumeList;
88 };
89 
91 {
92 public:
93  virtual bool generateTagVolumes(const MAKVRinTerra::DtFeatureGeometry& extentBox,
94  bool pruneNoGo, const DtRwNavigationProfile* navProfile, DtNavTagVolumeSet& tagVolumes) = 0;
95 };
96 
101 {
102 public:
103 
105  {
110  GenerationStopped
111  };
112 
113  static const double LowCoverHeightCheck;
114  static const double HighCoverHeightCheck;
115  static const unsigned NumCoverCheckAngles;
116  static const double CoverChordLengthFactor;
117 
118  typedef tbb::queuing_rw_mutex RwMutex;
119  typedef tbb::mutex Mutex;
120 
121  typedef std::map<DtNavSectorDataType, std::vector<char> > NavDataOutputMap;
122 
124  {
126  : sectorName(sn)
127  , timeToComplete(-1)
128  {
129  stop = false;
130  status = GenerationNotRequested;
131  }
132 
135  tbb::atomic<SectorGenerationStatus> status;
137  std::auto_ptr<tbb::tbb_thread> thread;
138  tbb::atomic<bool> stop;
140  };
141  typedef std::map<DtNavSectorName, SectorGenerationThreadInfo*> SectorGenerationThreadMap;
142 
144  {
147  };
148 
149 
150  typedef std::map<DtString, DtString> ProfileRandomIdMap;
151 
153 
154  typedef DtNavDataGenerator* (*DtNavDataGeneratorCreatorFcn)();
155 
157  {
158  NavEdgePoints(const DtVector& p1 = DtVector::zero(),
159  const DtVector& p2 = DtVector::zero(), unsigned t = 0)
160  : point1(p1), point2(p2), tag(t) {};
161 
162  DtVector point1;
164  unsigned tag;
165  };
166 
167  struct NavPoint
168  {
169  NavPoint(const DtVector& pt = DtVector::zero(), unsigned t = 0)
170  : point(pt), tag(t) {};
171 
172  DtVector point;
173  unsigned tag;
174  };
175 
183  typedef bool(*DynamicTerrainNavEdgeFunction)(const DtRwDynamicTerrainInformation& dynTerrInfo,
184  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned edgeTag,
185  std::list<NavEdgePoints>* edges, SectorGenerationThreadInfo* threadInfo, void* usr);
186 
193  typedef bool(*FeatureDataNavEdgeFunction)(const MAKVRinTerra::DtFeature& feature,
194  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned edgeTag,
195  std::list<NavEdgePoints>* edges, SectorGenerationThreadInfo* threadInfo, void* usr);
196 
204  typedef bool(*GeneralNavEdgeFunction)(DtNavDataGenerator* navGenerator,
205  int sectorX, int sectorY, unsigned edgeTag,
206  std::list<NavEdgePoints>* edges, SectorGenerationThreadInfo* threadInfo, void* usr);
207 
208  typedef std::pair<DynamicTerrainNavEdgeFunction, void*> DynamicTerrainNavEdgeFunctionInfo;
209  typedef std::pair<FeatureDataNavEdgeFunction, void*> FeatureDataNavEdgeFunctionInfo;
210  typedef std::pair<GeneralNavEdgeFunction, void*> GeneralNavEdgeFunctionInfo;
211 
219  typedef bool(*DynamicTerrainNavPointFunction)(const DtRwDynamicTerrainInformation& dynTerrInfo,
220  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned pointTag,
221  std::list<NavPoint>* points, SectorGenerationThreadInfo* threadInfo, void* usr);
222 
229  typedef bool(*FeatureDataNavPointFunction)(const MAKVRinTerra::DtFeature& feature,
230  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned pointTag,
231  std::list<NavPoint>* points, SectorGenerationThreadInfo* threadInfo, void* usr);
232 
240  typedef bool(*GeneralNavPointFunction)(DtNavDataGenerator* navGenerator,
241  int sectorX, int sectorY, unsigned pointTag,
242  std::list<NavPoint>* points, SectorGenerationThreadInfo* threadInfo, void* usr);
243 
244  typedef std::pair<DynamicTerrainNavPointFunction, void*> DynamicTerrainNavPointFunctionInfo;
245  typedef std::pair<FeatureDataNavPointFunction, void*> FeatureDataNavPointFunctionInfo;
246  typedef std::pair<GeneralNavPointFunction, void*> GeneralNavPointFunctionInfo;
247 
250  static DtNavDataGenerator* create();
251 
253  virtual ~DtNavDataGenerator();
254 
256  virtual bool initialize(DtTerrainInterface* terrainInterface,
257  const DtFilename& navGenConfigFile,
258  const DtFilename& runtimeConfigFile,
259  const DtFilename& outputPath,
260  const DtFilename& terrainFile,
261  const DtFilename& regenDirectory,
262  bool generateFeatureTagVolumes);
263 
268  void addNavEdgeFromDynamicTerrainFunction(const DtString& name,
269  DynamicTerrainNavEdgeFunction fcn, void* usr);
270 
275  void addNavEdgeFromFeatureDataFunction(const DtString& name, FeatureDataNavEdgeFunction fcn,
276  void* usr);
277 
282  void addGeneralNavEdgeFunction(const DtString& name, GeneralNavEdgeFunction fcn,
283  void* usr);
284 
289  void addNavPointFromDynamicTerrainFunction(const DtString& name,
290  DynamicTerrainNavPointFunction fcn, void* usr);
291 
296  void addNavPointFromFeatureDataFunction(const DtString& name, FeatureDataNavPointFunction fcn,
297  void* usr);
298 
303  void addGeneralNavPointFunction(const DtString& name, GeneralNavPointFunction fcn,
304  void* usr);
305 
307  virtual void setTransitionPointSpacing(double spacing);
308 
310  virtual double transitionPointSpacing() const;
311 
316  virtual bool generate();
317 
320  virtual bool generateSector(const DtNavSectorName& sectorName);
321 
323  virtual void stopGeneration();
324 
327  virtual SectorGenerationStatus getGenerateSectorStatus(const DtNavSectorName& sectorName,
328  NavDataOutputMap& outputNavData);
329 
332  virtual SectorGenerationStatus getGenerateSectorStatusNoCleanup(const DtNavSectorName& sectorName) const;
333 
335  virtual const DtRwNavigationProfile* profileConfig(const DtString& profileName) const;
336 
338  virtual const ProfileConfigList& profileConfigs() const;
339 
341  virtual const DtRwNavGenConfig* navGenConfig() const;
342 
344  virtual const DtTerrainInterface* terrainInterface() const;
345 
347  MAKVRinTerra::DtFeatureGeometry& extentFeatureGeometry();
348 
350  MAKVRinTerra::DtFeatureGeometry& extentFeatureGeometry(int sectorX, int sectorY);
351 
355  virtual bool terrainHeight(const DtPoint& p, double& height, double* min = 0, double* max = 0) const;
356 
358  static void setCreator(DtNavDataGeneratorCreatorFcn creatorFcn);
359 
361  static void setNavDataDirectory(const DtFilename& navDataDir);
362 
364  static const DtFilename& navDataDirectory();
365 
368  static DtFilename replaceSubstrings(const DtFilename& original);
369 
370 protected:
371 
372  friend class TbbintersectTransitionPoint;
373 
377 
379  virtual void loadPlugins(const std::set<DtFilename>& pluginFiles);
380 
382  virtual void unloadPlugins();
383 
385  virtual bool checkPluginVersion(DtDynamicLibrary* plugin) const;
386 
388  virtual void doGenerateSector(SectorGenerationThreadInfo* sectorGenInfo);
389 
392  virtual bool shouldStop(SectorGenerationThreadInfo* sectorGenInfo);
393 
396  static void triangleCallback(DtTerrainTriangleStruct& triangle, void* usr);
397  virtual void processTriangle(DtTerrainTriangleStruct& triangle, DtNavTriangles& triangles);
399 
402  static void trianglesFinalizeCallback(int status, void* usr);
403  virtual void processTrianglesFinalize(int status, DtNavTriangles& triangles);
405 
407  virtual std::vector<DtVector> calculateTransitionPointLocations();
408 
410  virtual void getProfileRandomIds(DtRwStringList& profiles, ProfileRandomIdMap& randomIds);
411 
413  virtual bool generateProfileNavData(
414  const DtRwNavigationProfile* profile,
415  DtString randomId);
416 
418  virtual bool generateSectorNavData(
419  const DtRwNavigationProfile* profile,
420  const DtNavSectorName& sectorName,
421  NavDataOutputMap& outputData,
422  SectorGenerationThreadInfo* sectorGenInfo = 0);
423 
426  virtual bool generateTransitionPoints(const DtRwNavigationProfile* profile,
427  Kaim::GeneratorInputOutput& generatorInputOutput,
428  const DtString& randomId, const DtFilename& navDataOutputDir);
429 
433  virtual bool generateSectorTransitionPoints(const DtRwNavigationProfile* profile,
434  Kaim::GeneratorSector* sector, const DtString& randomId,
435  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
436  std::vector<char>* buffer = 0,
437  SectorGenerationThreadInfo* sectorGenInfo = 0);
438 
441  virtual bool generateCoverPoints(const DtRwNavigationProfile* profile,
442  Kaim::GeneratorInputOutput& generatorInputOutput,
443  const DtString& randomId, const DtFilename& navDataOutputDir);
444 
448  virtual bool generateSectorCoverPoints(const DtRwNavigationProfile* profile,
449  Kaim::GeneratorSector* sector, const DtString& randomId,
450  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
451  std::vector<char>* buffer = 0,
452  SectorGenerationThreadInfo* sectorGenInfo = 0);
453 
456  virtual bool generateNavEdges(const DtRwNavigationProfile* profile,
457  Kaim::GeneratorInputOutput& generatorInputOutput,
458  const DtString& randomId, const DtFilename& navDataOutputDir);
459 
463  virtual bool generateSectorNavEdges(const DtRwNavigationProfile* profile,
464  Kaim::GeneratorSector* sector, const DtString& randomId,
465  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
466  std::vector<char>* buffer = 0,
467  SectorGenerationThreadInfo* sectorGenInfo = 0);
468 
470  virtual bool computeSectorNavEdges(const DtRwNavigationProfile* profile,
471  int sectorX, int sectorY, const DtExtent& sectorExtent,
472  SectorGenerationThreadInfo* sectorGenInfo,
473  std::list<NavEdgePoints>& navEdges);
474 
477  virtual bool generateNavPoints(const DtRwNavigationProfile* profile,
478  Kaim::GeneratorInputOutput& generatorInputOutput,
479  const DtString& randomId, const DtFilename& navDataOutputDir);
480 
484  virtual bool generateSectorNavPoints(const DtRwNavigationProfile* profile,
485  Kaim::GeneratorSector* sector, const DtString& randomId,
486  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
487  std::vector<char>* buffer = 0,
488  SectorGenerationThreadInfo* sectorGenInfo = 0);
489 
491  virtual bool computeSectorNavPoints(const DtRwNavigationProfile* profile,
492  int sectorX, int sectorY, const DtExtent& sectorExtent,
493  SectorGenerationThreadInfo* sectorGenInfo,
494  std::list<NavPoint>& navPoints);
495 
496 
499  virtual void setNumberOfProgressSteps(int steps);
500  virtual void nextProgressStep(const DtString& stepName, int numSubSteps = 0);
501  virtual void nextProgressSubStep();
502  virtual void progressComplete();
503  virtual void outputProgress(const DtString& stepName = DtString::nullString());
505 
509 
511  virtual DtOutputStream& detailOutput();
512 
514  virtual DtOutputStream& milestoneOutput();
515 
517  virtual DtOutputStream& notableOutput();
518 
520  virtual DtOutputStream& errorOutput();
521 
523 
524 
525 private:
526 
529 
531  DtNavDataGenerator& operator=(const DtNavDataGenerator& orig);
532 
533 protected:
534 
537 
540 
543 
546 
549 
551  DtFilename myNavGenConfigFile;
552 
555 
557  DtFilename myOutputPath;
558 
560  DtFilename myTerrainFile;
561 
563  DtFilename myRegenDirectory;
564 
567 
570 
574 
577 
580 
583 
588 
590  std::map<DtString, DynamicTerrainNavEdgeFunctionInfo> myDynamicTerrainNavEdgeFunctions;
591 
593  std::map<DtString, FeatureDataNavEdgeFunctionInfo> myFeatureDataNavEdgeFunctions;
594 
597  std::map<DtString, GeneralNavEdgeFunctionInfo> myGeneralNavEdgeFunctions;
598 
600  std::map<DtString, DynamicTerrainNavPointFunctionInfo> myDynamicTerrainNavPointFunctions;
601 
603  std::map<DtString, FeatureDataNavPointFunctionInfo> myFeatureDataNavPointFunctions;
604 
607  std::map<DtString, GeneralNavPointFunctionInfo> myGeneralNavPointFunctions;
608 
610 
611  std::list<DtDynamicLibrary*> myLoadedPlugins;
612 
613  static DtFilename theNavDataDir;
614  static DtNavDataGeneratorCreatorFcn theCreatorFcn;
615 
617  tbb::task_arena myArena;
618 };
619 
620 
Definition: navGeneration.h:78
Definition: navGeneration.h:143
static const double HighCoverHeightCheck
Definition: navGeneration.h:114
DtTime timeToComplete
Definition: navGeneration.h:139
DtNavigationGeneratorInput myNavGenInput
The current input for the navigation generator.
Definition: navGeneration.h:542
SectorGenerationStatus
Definition: navGeneration.h:104
RwMutex myFeatureTagVolumeGeneratorMutex
Mutex for myFeatureTagVolumeGenerator.
Definition: navGeneration.h:569
tbb::atomic< bool > stop
Definition: navGeneration.h:138
int myCurrentProgressSubStep
Definition: navGeneration.h:587
Definition: navGeneration.h:90
std::vector< DtVector > points
Definition: navGeneration.h:80
double myTransitionPointSpacing
The spacing to be used between transition points for exiting the nav area. Default is 3...
Definition: navGeneration.h:573
SectorGenerationThreadMap mySectorThreads
Sector generation threads by sector name.
Definition: navGeneration.h:576
DtFilename myRegenDirectory
The directory in which we will regenerate nav data at runtime.
Definition: navGeneration.h:563
Definition: navGeneration.h:56
Aids in creating and parsing nav sector names.
Definition: navSectorName.h:25
unsigned tag
Definition: navGeneration.h:173
bool myIsInitialized
Indicates whether initialize() has been successfully called.
Definition: navGeneration.h:582
int myNumberOfProgressSteps
Definition: navGeneration.h:584
std::map< DtString, DynamicTerrainNavPointFunctionInfo > myDynamicTerrainNavPointFunctions
Functions used to create nav points from dynamic terrain features.
Definition: navGeneration.h:600
static const double LowCoverHeightCheck
Definition: navGeneration.h:113
Definition: navGeneration.h:108
NavEdgePoints(const DtVector &p1=DtVector::zero(), const DtVector &p2=DtVector::zero(), unsigned t=0)
Definition: navGeneration.h:158
static const unsigned NumCoverCheckAngles
Definition: navGeneration.h:115
unsigned int blue
Definition: navGeneration.h:53
unsigned tag
Definition: navGeneration.h:164
std::pair< FeatureDataNavEdgeFunction, void * > FeatureDataNavEdgeFunctionInfo
Definition: navGeneration.h:209
The DtExtent represents an axis-aligned 3d bounding box.
Definition: extent.h:43
Information on what dynamic changes are possible for a particular geometry feature in the terrain...
Definition: rwDynamicTerrainInformation.h:23
Definition: navGeneration.h:84
std::list< DtDynamicLibrary * > myLoadedPlugins
Definition: navGeneration.h:611
DtFeatureTagVolumeGenerator * myFeatureTagVolumeGenerator
Whether feature tags will be generated.
Definition: navGeneration.h:566
DtTerrainInterface * myTerrainInterface
The terrain interface for the terrain on which nav data is being generated.
Definition: navGeneration.h:539
tbb::mutex Mutex
Definition: navGeneration.h:119
class DtNavigationGeneratorInput
Definition: navigationGeneratorInput.h:31
Definition: navGeneration.h:123
tbb::queuing_rw_mutex RwMutex
Definition: navGeneration.h:118
Definition: navGeneration.h:106
Definition: navGeneration.h:156
std::map< DtString, DtString > ProfileRandomIdMap
Definition: navGeneration.h:150
Definition: feature.h:26
Definition: terrainProcessPolygonsBox.h:25
Configuration data for a set of navigation data that is loaded by the sim engine and used at runtime...
Definition: rwNavRuntimeConfig.h:60
std::pair< FeatureDataNavPointFunction, void * > FeatureDataNavPointFunctionInfo
Definition: navGeneration.h:245
Defines settings for navData generation, to allow navData to be generated differently for different t...
Definition: rwNavigationProfile.h:25
RwMutex myNavGenInputMutex
Mutex for myNavGenInput.
Definition: navGeneration.h:545
DtString statusMsg
Definition: navGeneration.h:136
DtFilename myTerrainFile
The terrain file for which nav data is being generated.
Definition: navGeneration.h:560
Definition: rwNavGenConfig.h:26
DtNavTagColor color
Definition: navGeneration.h:60
std::pair< GeneralNavPointFunction, void * > GeneralNavPointFunctionInfo
Definition: navGeneration.h:246
std::map< DtString, GeneralNavEdgeFunctionInfo > myGeneralNavEdgeFunctions
Functions used to create nav edges using a user defined algorithm that does not use dynamic terrain f...
Definition: navGeneration.h:597
DtTerrainInterface allows access to common terrain calls without having to know the terrain implement...
Definition: terrainInterface.h:100
bool isExclusive
Definition: navGeneration.h:61
std::vector< DtInputNavTag > navTagDataList
Definition: navGeneration.h:86
std::pair< DynamicTerrainNavPointFunction, void * > DynamicTerrainNavPointFunctionInfo
Definition: navGeneration.h:244
static DtFilename theNavDataDir
Definition: navGeneration.h:613
std::auto_ptr< tbb::tbb_thread > thread
Definition: navGeneration.h:137
Definition: navGeneration.h:167
DtRwNavRuntimeConfig myNavRuntimeConfig
The runtime configuration for the nav.
Definition: navGeneration.h:536
DtClock myClock
Definition: navGeneration.h:609
std::pair< DynamicTerrainNavEdgeFunction, void * > DynamicTerrainNavEdgeFunctionInfo
Definition: navGeneration.h:208
unsigned int green
Definition: navGeneration.h:52
DtRwTemplatedListPtr< DtRwNavigationProfile, true > ProfileConfigList
Definition: navGeneration.h:152
DtNavDataGenerator * generator
Definition: navGeneration.h:145
Definition: navGeneration.h:48
bool uniquelyIdentify
for no-go areas, this should be true.
Definition: navGeneration.h:62
DtVector point2
Definition: navGeneration.h:163
Definition: navGeneration.h:66
MAKVRinTerra::DtFeatureGeometry myExtentFeatureGeometry
The nav area extents as a feature geometry.
Definition: navGeneration.h:579
Definition: navGeneration.h:107
std::map< DtString, FeatureDataNavEdgeFunctionInfo > myFeatureDataNavEdgeFunctions
Functions used to create nav edges from terrain feature data.
Definition: navGeneration.h:593
std::vector< DtInputNavTagVolume > navTagVolumeList
Definition: navGeneration.h:87
Definition: navGeneration.h:72
DtFilename myRuntimeConfigFile
The path of the runtime config file.
Definition: navGeneration.h:554
This class is used to generate nav data for an area on a terrain.
Definition: navGeneration.h:100
std::pair< GeneralNavEdgeFunction, void * > GeneralNavEdgeFunctionInfo
Definition: navGeneration.h:210
std::map< DtNavSectorDataType, std::vector< char > > NavDataOutputMap
Definition: navGeneration.h:121
#define DT_DLL_vrfNavigation
This file is used to determine how to build.
Definition: vrfNavigationDefines.h:26
static DtNavDataGeneratorCreatorFcn theCreatorFcn
Definition: navGeneration.h:614
static const double CoverChordLengthFactor
Definition: navGeneration.h:116
std::map< DtString, FeatureDataNavPointFunctionInfo > myFeatureDataNavPointFunctions
Functions used to create nav points from terrain feature data.
Definition: navGeneration.h:603
Definition: rwStringList.h:20
Definition: featureTagVolumeGenerator.h:15
std::map< DtString, DynamicTerrainNavEdgeFunctionInfo > myDynamicTerrainNavEdgeFunctions
Functions used to create nav edges from dynamic terrain features.
Definition: navGeneration.h:590
DtNavTriangles triangles
Definition: navGeneration.h:146
unsigned int navTagDataIndex
Definition: navGeneration.h:81
static Mutex theNavDataGenMutex
Mutex for the period when data is actually being generated.
Definition: navGeneration.h:548
DtFilename myOutputPath
Where nav data files should be generated.
Definition: navGeneration.h:557
Represents a GIS feature. Features consist of a DtFeatureGeometry (2.5D geometric vector data) and a ...
Definition: feature.h:37
Definition: rwNavigationProfile.h:137
DtFilename myNavGenConfigFile
The path of the navigation generator config file.
Definition: navGeneration.h:551
std::map< DtString, GeneralNavPointFunctionInfo > myGeneralNavPointFunctions
Functions used to create nav points using a user defined algorithm that does not use dynamic terrain ...
Definition: navGeneration.h:607
NavDataOutputMap outputData
Definition: navGeneration.h:134
int myNumberOfProgressSubSteps
Definition: navGeneration.h:585
tbb::task_arena myArena
Tbb arena to limit number of threads.
Definition: navGeneration.h:617
SectorGenerationThreadInfo(const DtNavSectorName &sn)
Definition: navGeneration.h:125
DtNavSectorName sectorName
Definition: navGeneration.h:133
Represents a feature geometry.
Definition: featureGeometry.h:39
Definition: navGeneration.h:109
Definition: point.h:34
std::map< DtNavSectorName, SectorGenerationThreadInfo * > SectorGenerationThreadMap
Definition: navGeneration.h:141
tbb::atomic< SectorGenerationStatus > status
Definition: navGeneration.h:135
int myCurrentProgressStep
Definition: navGeneration.h:586

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)