VR-Forces 4.8 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 
63 
65 {
66 public:
68 };
69 
71 {
72 public:
74 };
75 
77 {
78  std::vector<DtVector> points;
79  unsigned int navTagDataIndex;
80 };
81 
83 {
84  std::vector<DtInputNavTag> navTagDataList;
85  std::vector<DtInputNavTagVolume> navTagVolumeList;
86 };
87 
89 {
90 public:
91  virtual bool generateTagVolumes(const MAKVRinTerra::DtFeatureGeometry& extentBox,
92  bool pruneNoGo, const DtRwNavigationProfile* navProfile, DtNavTagVolumeSet& tagVolumes) = 0;
93 };
94 
97 {
98 public:
99 
101  {
106  GenerationStopped
107  };
108 
109  static const double LowCoverHeightCheck;
110  static const double HighCoverHeightCheck;
111  static const unsigned NumCoverCheckAngles;
112  static const double CoverChordLengthFactor;
113 
114  typedef tbb::queuing_rw_mutex RwMutex;
115  typedef tbb::mutex Mutex;
116 
117  typedef std::map<DtNavSectorDataType, std::vector<char> > NavDataOutputMap;
118 
120  {
122  : sectorName(sn)
123  , timeToComplete(-1)
124  {
125  stop = false;
126  status = GenerationNotRequested;
127  }
128 
131  tbb::atomic<SectorGenerationStatus> status;
133  std::auto_ptr<tbb::tbb_thread> thread;
134  tbb::atomic<bool> stop;
136  };
137  typedef std::map<DtNavSectorName, SectorGenerationThreadInfo*> SectorGenerationThreadMap;
138 
140  {
143  };
144 
145 
146  typedef std::map<DtString, DtString> ProfileRandomIdMap;
147 
148  typedef DtNavDataGenerator* (*DtNavDataGeneratorCreatorFcn)();
149 
151  {
152  NavEdgePoints(const DtVector& p1 = DtVector::zero(),
153  const DtVector& p2 = DtVector::zero(), unsigned t = 0)
154  : point1(p1), point2(p2), tag(t) {};
155 
156  DtVector point1;
158  unsigned tag;
159  };
160 
161  struct NavPoint
162  {
163  NavPoint(const DtVector& pt = DtVector::zero(), unsigned t = 0)
164  : point(pt), tag(t) {};
165 
166  DtVector point;
167  unsigned tag;
168  };
169 
177  typedef bool(*DynamicTerrainNavEdgeFunction)(const DtRwDynamicTerrainInformation& dynTerrInfo,
178  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned edgeTag,
179  std::list<NavEdgePoints>* edges, void* usr);
180 
187  typedef bool(*FeatureDataNavEdgeFunction)(const MAKVRinTerra::DtFeature& feature,
188  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned edgeTag,
189  std::list<NavEdgePoints>* edges, void* usr);
190 
198  typedef bool(*GeneralNavEdgeFunction)(DtNavDataGenerator* navGenerator,
199  int sectorX, int sectorY, unsigned edgeTag,
200  std::list<NavEdgePoints>* edges, void* usr);
201 
202  typedef std::pair<DynamicTerrainNavEdgeFunction, void*> DynamicTerrainNavEdgeFunctionInfo;
203  typedef std::pair<FeatureDataNavEdgeFunction, void*> FeatureDataNavEdgeFunctionInfo;
204  typedef std::pair<GeneralNavEdgeFunction, void*> GeneralNavEdgeFunctionInfo;
205 
213  typedef bool(*DynamicTerrainNavPointFunction)(const DtRwDynamicTerrainInformation& dynTerrInfo,
214  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned pointTag,
215  std::list<NavPoint>* points, void* usr);
216 
223  typedef bool(*FeatureDataNavPointFunction)(const MAKVRinTerra::DtFeature& feature,
224  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned pointTag,
225  std::list<NavPoint>* points, void* usr);
226 
234  typedef bool(*GeneralNavPointFunction)(DtNavDataGenerator* navGenerator,
235  int sectorX, int sectorY, unsigned pointTag,
236  std::list<NavPoint>* points, void* usr);
237 
238  typedef std::pair<DynamicTerrainNavPointFunction, void*> DynamicTerrainNavPointFunctionInfo;
239  typedef std::pair<FeatureDataNavPointFunction, void*> FeatureDataNavPointFunctionInfo;
240  typedef std::pair<GeneralNavPointFunction, void*> GeneralNavPointFunctionInfo;
241 
244  static DtNavDataGenerator* create();
245 
247  virtual ~DtNavDataGenerator();
248 
250  virtual bool initialize(DtTerrainInterface* terrainInterface,
251  const DtFilename& navGenConfigFile,
252  const DtFilename& runtimeConfigFile,
253  const DtFilename& outputPath,
254  const DtFilename& terrainFile,
255  bool generateFeatureTagVolumes);
256 
261  void addNavEdgeFromDynamicTerrainFunction(const DtString& name,
262  DynamicTerrainNavEdgeFunction fcn, void* usr);
263 
268  void addNavEdgeFromFeatureDataFunction(const DtString& name, FeatureDataNavEdgeFunction fcn,
269  void* usr);
270 
275  void addGeneralNavEdgeFunction(const DtString& name, GeneralNavEdgeFunction fcn,
276  void* usr);
277 
282  void addNavPointFromDynamicTerrainFunction(const DtString& name,
283  DynamicTerrainNavPointFunction fcn, void* usr);
284 
289  void addNavPointFromFeatureDataFunction(const DtString& name, FeatureDataNavPointFunction fcn,
290  void* usr);
291 
296  void addGeneralNavPointFunction(const DtString& name, GeneralNavPointFunction fcn,
297  void* usr);
298 
300  virtual void setTransitionPointSpacing(double spacing);
301 
303  virtual double transitionPointSpacing() const;
304 
309  virtual bool generate();
310 
313  virtual bool generateSector(const DtNavSectorName& sectorName);
314 
317  virtual SectorGenerationStatus getGenerateSectorStatus(const DtNavSectorName& sectorName,
318  NavDataOutputMap& outputNavData);
319 
321  virtual const DtRwNavigationProfile* profileConfig(const DtString& profileName) const;
322 
324  virtual const DtRwNavGenConfig* navGenConfig() const;
325 
327  virtual const DtTerrainInterface* terrainInterface() const;
328 
330  MAKVRinTerra::DtFeatureGeometry& extentFeatureGeometry();
331 
333  MAKVRinTerra::DtFeatureGeometry& extentFeatureGeometry(int sectorX, int sectorY);
334 
338  virtual bool terrainHeight(const DtPoint& p, double& height, double* min = 0, double* max = 0) const;
339 
341  static void setCreator(DtNavDataGeneratorCreatorFcn creatorFcn);
342 
344  static void setNavDataDirectory(const DtFilename& navDataDir);
345 
347  static const DtFilename& navDataDirectory();
348 
351  static DtFilename replaceSubstrings(const DtFilename& original);
352 
353 protected:
354 
358 
360  virtual void loadPlugins(const std::set<DtFilename>& pluginFiles);
361 
363  virtual void unloadPlugins();
364 
366  virtual bool checkPluginVersion(DtDynamicLibrary* plugin) const;
367 
369  virtual void doGenerateSector(SectorGenerationThreadInfo* sectorGenInfo);
370 
373  virtual bool shouldStop(SectorGenerationThreadInfo* sectorGenInfo);
374 
377  static void triangleCallback(DtTerrainTriangleStruct& triangle, void* usr);
378  virtual void processTriangle(DtTerrainTriangleStruct& triangle, DtNavTriangles& triangles);
380 
383  static void trianglesFinalizeCallback(int status, void* usr);
384  virtual void processTrianglesFinalize(int status, DtNavTriangles& triangles);
386 
388  virtual std::list<DtVector> calculateTransitionPointLocations();
389 
391  virtual void getProfileRandomIds(DtRwStringList& profiles, ProfileRandomIdMap& randomIds);
392 
394  virtual bool generateProfileNavData(
395  const DtRwNavigationProfile* profile,
396  DtString randomId);
397 
399  virtual bool generateSectorNavData(
400  const DtRwNavigationProfile* profile,
401  const DtNavSectorName& sectorName,
402  NavDataOutputMap& outputData,
403  SectorGenerationThreadInfo* sectorGenInfo = 0);
404 
407  virtual bool generateTransitionPoints(const DtRwNavigationProfile* profile,
408  Kaim::GeneratorInputOutput& generatorInputOutput,
409  const DtString& randomId, const DtFilename& navDataOutputDir);
410 
414  virtual bool generateSectorTransitionPoints(const DtRwNavigationProfile* profile,
415  Kaim::GeneratorSector* sector, const DtString& randomId,
416  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
417  std::vector<char>* buffer = 0,
418  SectorGenerationThreadInfo* sectorGenInfo = 0);
419 
422  virtual bool generateCoverPoints(const DtRwNavigationProfile* profile,
423  Kaim::GeneratorInputOutput& generatorInputOutput,
424  const DtString& randomId, const DtFilename& navDataOutputDir);
425 
429  virtual bool generateSectorCoverPoints(const DtRwNavigationProfile* profile,
430  Kaim::GeneratorSector* sector, const DtString& randomId,
431  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
432  std::vector<char>* buffer = 0,
433  SectorGenerationThreadInfo* sectorGenInfo = 0);
434 
437  virtual bool generateNavEdges(const DtRwNavigationProfile* profile,
438  Kaim::GeneratorInputOutput& generatorInputOutput,
439  const DtString& randomId, const DtFilename& navDataOutputDir);
440 
444  virtual bool generateSectorNavEdges(const DtRwNavigationProfile* profile,
445  Kaim::GeneratorSector* sector, const DtString& randomId,
446  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
447  std::vector<char>* buffer = 0,
448  SectorGenerationThreadInfo* sectorGenInfo = 0);
449 
451  virtual bool computeSectorNavEdges(const DtRwNavigationProfile* profile,
452  int sectorX, int sectorY, const DtExtent& sectorExtent,
453  SectorGenerationThreadInfo* sectorGenInfo,
454  std::list<NavEdgePoints>& navEdges);
455 
458  virtual bool generateNavPoints(const DtRwNavigationProfile* profile,
459  Kaim::GeneratorInputOutput& generatorInputOutput,
460  const DtString& randomId, const DtFilename& navDataOutputDir);
461 
465  virtual bool generateSectorNavPoints(const DtRwNavigationProfile* profile,
466  Kaim::GeneratorSector* sector, const DtString& randomId,
467  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
468  std::vector<char>* buffer = 0,
469  SectorGenerationThreadInfo* sectorGenInfo = 0);
470 
472  virtual bool computeSectorNavPoints(const DtRwNavigationProfile* profile,
473  int sectorX, int sectorY, const DtExtent& sectorExtent,
474  SectorGenerationThreadInfo* sectorGenInfo,
475  std::list<NavPoint>& navPoints);
476 
477 
480  virtual void setNumberOfProgressSteps(int steps);
481  virtual void nextProgressStep(const DtString& stepName, int numSubSteps = 0);
482  virtual void nextProgressSubStep();
483  virtual void progressComplete();
484  virtual void outputProgress(const DtString& stepName = DtString::nullString());
486 
490 
492  virtual DtOutputStream& detailOutput();
493 
495  virtual DtOutputStream& milestoneOutput();
496 
498  virtual DtOutputStream& notableOutput();
499 
501  virtual DtOutputStream& errorOutput();
502 
504 
505 
506 private:
507 
510 
512  DtNavDataGenerator& operator=(const DtNavDataGenerator& orig);
513 
514 protected:
515 
518 
521 
524 
527 
530 
532  DtFilename myNavGenConfigFile;
533 
536 
538  DtFilename myOutputPath;
539 
541  DtFilename myTerrainFile;
542 
545 
548 
552 
555 
558 
561 
566 
568  std::map<DtString, DynamicTerrainNavEdgeFunctionInfo> myDynamicTerrainNavEdgeFunctions;
569 
571  std::map<DtString, FeatureDataNavEdgeFunctionInfo> myFeatureDataNavEdgeFunctions;
572 
575  std::map<DtString, GeneralNavEdgeFunctionInfo> myGeneralNavEdgeFunctions;
576 
578  std::map<DtString, DynamicTerrainNavPointFunctionInfo> myDynamicTerrainNavPointFunctions;
579 
581  std::map<DtString, FeatureDataNavPointFunctionInfo> myFeatureDataNavPointFunctions;
582 
585  std::map<DtString, GeneralNavPointFunctionInfo> myGeneralNavPointFunctions;
586 
588 
589  std::list<DtDynamicLibrary*> myLoadedPlugins;
590 
591  static DtFilename theNavDataDir;
592  static DtNavDataGeneratorCreatorFcn theCreatorFcn;
593 };
594 
595 
Definition: navGeneration.h:76
Definition: navGeneration.h:139
static const double HighCoverHeightCheck
Definition: navGeneration.h:110
DtTime timeToComplete
Definition: navGeneration.h:135
DtNavigationGeneratorInput myNavGenInput
The current input for the navigation generator.
Definition: navGeneration.h:523
SectorGenerationStatus
Definition: navGeneration.h:100
RwMutex myFeatureTagVolumeGeneratorMutex
Mutex for myFeatureTagVolumeGenerator.
Definition: navGeneration.h:547
tbb::atomic< bool > stop
Definition: navGeneration.h:134
int myCurrentProgressSubStep
Definition: navGeneration.h:565
Definition: navGeneration.h:88
std::vector< DtVector > points
Definition: navGeneration.h:78
double myTransitionPointSpacing
The spacing to be used between transition points for exiting the nav area.
Definition: navGeneration.h:551
SectorGenerationThreadMap mySectorThreads
Sector generation threads by sector name.
Definition: navGeneration.h:554
Definition: navGeneration.h:54
Aids in creating and parsing nav sector names.
Definition: navSectorName.h:25
unsigned tag
Definition: navGeneration.h:167
bool myIsInitialized
Indicates whether initialize() has been successfully called.
Definition: navGeneration.h:560
int myNumberOfProgressSteps
Definition: navGeneration.h:562
std::map< DtString, DynamicTerrainNavPointFunctionInfo > myDynamicTerrainNavPointFunctions
Functions used to create nav points from dynamic terrain features.
Definition: navGeneration.h:578
static const double LowCoverHeightCheck
Definition: navGeneration.h:109
Definition: navGeneration.h:104
NavEdgePoints(const DtVector &p1=DtVector::zero(), const DtVector &p2=DtVector::zero(), unsigned t=0)
Definition: navGeneration.h:152
static const unsigned NumCoverCheckAngles
Definition: navGeneration.h:111
unsigned int blue
Definition: navGeneration.h:51
unsigned tag
Definition: navGeneration.h:158
std::pair< FeatureDataNavEdgeFunction, void * > FeatureDataNavEdgeFunctionInfo
Definition: navGeneration.h:203
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:21
Definition: navGeneration.h:82
std::list< DtDynamicLibrary * > myLoadedPlugins
Definition: navGeneration.h:589
DtFeatureTagVolumeGenerator * myFeatureTagVolumeGenerator
Whether feature tags will be generated.
Definition: navGeneration.h:544
DtTerrainInterface * myTerrainInterface
The terrain interface for the terrain on which nav data is being generated.
Definition: navGeneration.h:520
tbb::mutex Mutex
Definition: navGeneration.h:115
Definition: navigationGeneratorInput.h:28
Definition: navGeneration.h:119
tbb::queuing_rw_mutex RwMutex
Definition: navGeneration.h:114
Definition: navGeneration.h:102
Definition: navGeneration.h:150
std::map< DtString, DtString > ProfileRandomIdMap
Definition: navGeneration.h:146
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:239
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:526
DtString statusMsg
Definition: navGeneration.h:132
DtFilename myTerrainFile
The terrain file for which nav data is being generated.
Definition: navGeneration.h:541
Definition: rwNavGenConfig.h:26
DtNavTagColor color
Definition: navGeneration.h:58
std::pair< GeneralNavPointFunction, void * > GeneralNavPointFunctionInfo
Definition: navGeneration.h:240
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:575
DtTerrainInterface allows access to common terrain calls without having to know the terrain implement...
Definition: terrainInterface.h:84
bool isExclusive
Definition: navGeneration.h:59
std::vector< DtInputNavTag > navTagDataList
Definition: navGeneration.h:84
std::pair< DynamicTerrainNavPointFunction, void * > DynamicTerrainNavPointFunctionInfo
Definition: navGeneration.h:238
static DtFilename theNavDataDir
Definition: navGeneration.h:591
std::auto_ptr< tbb::tbb_thread > thread
Definition: navGeneration.h:133
Definition: navGeneration.h:161
DtRwNavRuntimeConfig myNavRuntimeConfig
The runtime configuration for the nav.
Definition: navGeneration.h:517
DtClock myClock
Definition: navGeneration.h:587
std::pair< DynamicTerrainNavEdgeFunction, void * > DynamicTerrainNavEdgeFunctionInfo
Definition: navGeneration.h:202
unsigned int green
Definition: navGeneration.h:50
DtNavDataGenerator * generator
Definition: navGeneration.h:141
Definition: navGeneration.h:46
bool uniquelyIdentify
for no-go areas, this should be true.
Definition: navGeneration.h:60
DtVector point2
Definition: navGeneration.h:157
Definition: navGeneration.h:64
MAKVRinTerra::DtFeatureGeometry myExtentFeatureGeometry
The nav area extents as a feature geometry.
Definition: navGeneration.h:557
Definition: navGeneration.h:103
std::map< DtString, FeatureDataNavEdgeFunctionInfo > myFeatureDataNavEdgeFunctions
Functions used to create nav edges from terrain feature data.
Definition: navGeneration.h:571
std::vector< DtInputNavTagVolume > navTagVolumeList
Definition: navGeneration.h:85
Definition: navGeneration.h:70
DtFilename myRuntimeConfigFile
The path of the runtime config file.
Definition: navGeneration.h:535
This class is used to generate nav data for an area on a terrain.
Definition: navGeneration.h:96
std::pair< GeneralNavEdgeFunction, void * > GeneralNavEdgeFunctionInfo
Definition: navGeneration.h:204
std::map< DtNavSectorDataType, std::vector< char > > NavDataOutputMap
Definition: navGeneration.h:117
#define DT_DLL_vrfNavigation
This file is used to determine how to build.
Definition: vrfNavigationDefines.h:26
static DtNavDataGeneratorCreatorFcn theCreatorFcn
Definition: navGeneration.h:592
static const double CoverChordLengthFactor
Definition: navGeneration.h:112
std::map< DtString, FeatureDataNavPointFunctionInfo > myFeatureDataNavPointFunctions
Functions used to create nav points from terrain feature data.
Definition: navGeneration.h:581
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:568
DtNavTriangles triangles
Definition: navGeneration.h:142
unsigned int navTagDataIndex
Definition: navGeneration.h:79
static Mutex theNavDataGenMutex
Mutex for the period when data is actually being generated.
Definition: navGeneration.h:529
DtFilename myOutputPath
Where nav data files should be generated.
Definition: navGeneration.h:538
Represents a GIS feature.
Definition: feature.h:37
Definition: rwNavigationProfile.h:133
DtFilename myNavGenConfigFile
The path of the navigation generator config file.
Definition: navGeneration.h:532
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:585
NavDataOutputMap outputData
Definition: navGeneration.h:130
int myNumberOfProgressSubSteps
Definition: navGeneration.h:563
SectorGenerationThreadInfo(const DtNavSectorName &sn)
Definition: navGeneration.h:121
DtNavSectorName sectorName
Definition: navGeneration.h:129
Represents a feature geometry.
Definition: featureGeometry.h:35
Definition: navGeneration.h:105
Definition: point.h:34
std::map< DtNavSectorName, SectorGenerationThreadInfo * > SectorGenerationThreadMap
Definition: navGeneration.h:137
tbb::atomic< SectorGenerationStatus > status
Definition: navGeneration.h:131
int myCurrentProgressStep
Definition: navGeneration.h:564

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)