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/task_arena.h>
23 #include <tbb/spin_mutex.h>
24 
25 #include <string>
26 #include <list>
27 
30 class DtTerrainInterface;
33 class DtDynamicLibrary;
34 
35 namespace MAKVRinTerra
36 {
37  class DtFeature;
38  class DtFeatureGeometry;
39 }
40 
41 namespace Kaim
42 {
43  class GeneratorInputOutput;
44  class GeneratorSector;
45 }
46 
48 {
49  DtNavTagColor() : red(0), green(0), blue(0) {};
50  unsigned int red;
51  unsigned int green;
52  unsigned int blue;
53 };
54 
56 {
57  DtInputNavTag() : isExclusive(false) {};
58  std::vector<unsigned long> navTagData;
60  bool isExclusive;
62 };
63 
64 
66 {
67 public:
69 };
70 
72 {
73 public:
75 };
76 
78 {
79  std::vector<DtVector> points;
80  unsigned int navTagDataIndex;
81 };
82 
84 {
85  std::vector<DtInputNavTag> navTagDataList;
86  std::vector<DtInputNavTagVolume> navTagVolumeList;
87 };
88 
90 {
91 public:
92  virtual bool generateTagVolumes(const MAKVRinTerra::DtFeatureGeometry& extentBox,
93  bool pruneNoGo, const DtRwNavigationProfile* navProfile, DtNavTagVolumeSet& tagVolumes) = 0;
94 };
95 
100 {
101 public:
102 
104  {
109  GenerationStopped
110  };
111 
112  static const double LowCoverHeightCheck;
113  static const double HighCoverHeightCheck;
114  static const unsigned NumCoverCheckAngles;
115  static const double CoverChordLengthFactor;
116 
117  typedef tbb::queuing_rw_mutex RwMutex;
118  typedef tbb::mutex Mutex;
119 
120  typedef std::map<DtNavSectorDataType, std::vector<char> > NavDataOutputMap;
121 
123  {
125  : sectorName(sn)
126  , timeToComplete(-1)
127  {
128  stop = false;
129  status = GenerationNotRequested;
130  }
131 
134  std::atomic<SectorGenerationStatus> status;
136  std::unique_ptr<std::thread> thread;
137  std::atomic<bool> stop;
139  };
140  typedef std::map<DtNavSectorName, SectorGenerationThreadInfo*> SectorGenerationThreadMap;
141 
143  {
146  };
147 
148 
149  typedef std::map<DtString, DtString> ProfileRandomIdMap;
150 
152 
153  typedef DtNavDataGenerator* (*DtNavDataGeneratorCreatorFcn)();
154 
156  {
157  NavEdgePoints(const DtVector& p1 = DtVector::zero(),
158  const DtVector& p2 = DtVector::zero(), unsigned t = 0)
159  : point1(p1), point2(p2), tag(t) {};
160 
161  DtVector point1;
162  DtVector point2;
163  unsigned tag;
164  };
165 
166  struct NavPoint
167  {
168  NavPoint(const DtVector& pt = DtVector::zero(), unsigned t = 0)
169  : point(pt), tag(t) {};
170 
171  DtVector point;
172  unsigned tag;
173  };
174 
182  typedef bool(*DynamicTerrainNavEdgeFunction)(const DtRwDynamicTerrainInformation& dynTerrInfo,
183  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned edgeTag,
184  std::list<NavEdgePoints>* edges, SectorGenerationThreadInfo* threadInfo, void* usr);
185 
192  typedef bool(*FeatureDataNavEdgeFunction)(const MAKVRinTerra::DtFeature& feature,
193  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned edgeTag,
194  std::list<NavEdgePoints>* edges, SectorGenerationThreadInfo* threadInfo, void* usr);
195 
203  typedef bool(*GeneralNavEdgeFunction)(DtNavDataGenerator* navGenerator,
204  int sectorX, int sectorY, unsigned edgeTag,
205  std::list<NavEdgePoints>* edges, SectorGenerationThreadInfo* threadInfo, void* usr);
206 
207  typedef std::pair<DynamicTerrainNavEdgeFunction, void*> DynamicTerrainNavEdgeFunctionInfo;
208  typedef std::pair<FeatureDataNavEdgeFunction, void*> FeatureDataNavEdgeFunctionInfo;
209  typedef std::pair<GeneralNavEdgeFunction, void*> GeneralNavEdgeFunctionInfo;
210 
218  typedef bool(*DynamicTerrainNavPointFunction)(const DtRwDynamicTerrainInformation& dynTerrInfo,
219  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned pointTag,
220  std::list<NavPoint>* points, SectorGenerationThreadInfo* threadInfo, void* usr);
221 
228  typedef bool(*FeatureDataNavPointFunction)(const MAKVRinTerra::DtFeature& feature,
229  DtNavDataGenerator* navGenerator, int sectorX, int sectorY, unsigned pointTag,
230  std::list<NavPoint>* points, SectorGenerationThreadInfo* threadInfo, void* usr);
231 
239  typedef bool(*GeneralNavPointFunction)(DtNavDataGenerator* navGenerator,
240  int sectorX, int sectorY, unsigned pointTag,
241  std::list<NavPoint>* points, SectorGenerationThreadInfo* threadInfo, void* usr);
242 
243  typedef std::pair<DynamicTerrainNavPointFunction, void*> DynamicTerrainNavPointFunctionInfo;
244  typedef std::pair<FeatureDataNavPointFunction, void*> FeatureDataNavPointFunctionInfo;
245  typedef std::pair<GeneralNavPointFunction, void*> GeneralNavPointFunctionInfo;
246 
249  static DtNavDataGenerator* create();
250 
252  virtual ~DtNavDataGenerator();
253 
255  virtual bool initialize(DtTerrainInterface* terrainInterface,
256  const DtFilename& navGenConfigFile,
257  const DtFilename& runtimeConfigFile,
258  const DtFilename& outputPath,
259  const DtFilename& terrainFile,
260  const DtFilename& regenDirectory,
261  bool generateFeatureTagVolumes);
262 
267  void addNavEdgeFromDynamicTerrainFunction(const DtString& name,
268  DynamicTerrainNavEdgeFunction fcn, void* usr);
269 
274  void addNavEdgeFromFeatureDataFunction(const DtString& name, FeatureDataNavEdgeFunction fcn,
275  void* usr);
276 
281  void addGeneralNavEdgeFunction(const DtString& name, GeneralNavEdgeFunction fcn,
282  void* usr);
283 
288  void addNavPointFromDynamicTerrainFunction(const DtString& name,
289  DynamicTerrainNavPointFunction fcn, void* usr);
290 
295  void addNavPointFromFeatureDataFunction(const DtString& name, FeatureDataNavPointFunction fcn,
296  void* usr);
297 
302  void addGeneralNavPointFunction(const DtString& name, GeneralNavPointFunction fcn,
303  void* usr);
304 
306  virtual void setTransitionPointSpacing(double spacing);
307 
309  virtual double transitionPointSpacing() const;
310 
315  virtual bool generate();
316 
319  virtual bool generateSector(const DtNavSectorName& sectorName);
320 
322  virtual void stopGeneration();
323 
326  virtual SectorGenerationStatus getGenerateSectorStatus(const DtNavSectorName& sectorName,
327  NavDataOutputMap& outputNavData);
328 
331  virtual SectorGenerationStatus getGenerateSectorStatusNoCleanup(const DtNavSectorName& sectorName) const;
332 
334  virtual const DtRwNavigationProfile* profileConfig(const DtString& profileName) const;
335 
337  virtual const ProfileConfigList& profileConfigs() const;
338 
340  virtual const DtRwNavGenConfig* navGenConfig() const;
341 
343  virtual const DtTerrainInterface* terrainInterface() const;
344 
346  MAKVRinTerra::DtFeatureGeometry& extentFeatureGeometry();
347 
349  MAKVRinTerra::DtFeatureGeometry& extentFeatureGeometry(int sectorX, int sectorY);
350 
354  virtual bool terrainHeight(const DtPoint& p, double& height, double* min = 0, double* max = 0) const;
355 
357  static void setCreator(DtNavDataGeneratorCreatorFcn creatorFcn);
358 
360  static void setNavDataDirectory(const DtFilename& navDataDir);
361 
363  static const DtFilename& navDataDirectory();
364 
367  static DtFilename replaceSubstrings(const DtFilename& original);
368 
369 protected:
370 
371  friend class TbbintersectTransitionPoint;
372 
376 
378  virtual void loadPlugins(const std::set<DtFilename>& pluginFiles);
379 
381  virtual void unloadPlugins();
382 
384  virtual bool checkPluginVersion(DtDynamicLibrary* plugin) const;
385 
387  virtual void doGenerateSector(SectorGenerationThreadInfo* sectorGenInfo);
388 
391  virtual bool shouldStop(SectorGenerationThreadInfo* sectorGenInfo);
392 
395  static void triangleCallback(DtTerrainTriangleStruct& triangle, void* usr);
396  virtual void processTriangle(DtTerrainTriangleStruct& triangle, DtNavTriangles& triangles);
398 
401  static void trianglesFinalizeCallback(int status, void* usr);
402  virtual void processTrianglesFinalize(int status, DtNavTriangles& triangles);
404 
406  virtual std::vector<DtVector> calculateTransitionPointLocations();
407 
409  virtual void getProfileRandomIds(DtRwStringList& profiles, ProfileRandomIdMap& randomIds);
410 
412  virtual bool generateProfileNavData(
413  const DtRwNavigationProfile* profile,
414  DtString randomId);
415 
417  virtual bool generateSectorNavData(
418  const DtRwNavigationProfile* profile,
419  const DtNavSectorName& sectorName,
420  NavDataOutputMap& outputData,
421  SectorGenerationThreadInfo* sectorGenInfo = 0);
422 
425  virtual bool generateTransitionPoints(const DtRwNavigationProfile* profile,
426  Kaim::GeneratorInputOutput& generatorInputOutput,
427  const DtString& randomId, const DtFilename& navDataOutputDir);
428 
432  virtual bool generateSectorTransitionPoints(const DtRwNavigationProfile* profile,
433  Kaim::GeneratorSector* sector, const DtString& randomId,
434  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
435  std::vector<char>* buffer = 0,
436  SectorGenerationThreadInfo* sectorGenInfo = 0);
437 
440  virtual bool generateCoverPoints(const DtRwNavigationProfile* profile,
441  Kaim::GeneratorInputOutput& generatorInputOutput,
442  const DtString& randomId, const DtFilename& navDataOutputDir);
443 
447  virtual bool generateSectorCoverPoints(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 
455  virtual bool generateNavEdges(const DtRwNavigationProfile* profile,
456  Kaim::GeneratorInputOutput& generatorInputOutput,
457  const DtString& randomId, const DtFilename& navDataOutputDir);
458 
462  virtual bool generateSectorNavEdges(const DtRwNavigationProfile* profile,
463  Kaim::GeneratorSector* sector, const DtString& randomId,
464  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
465  std::vector<char>* buffer = 0,
466  SectorGenerationThreadInfo* sectorGenInfo = 0);
467 
469  virtual bool computeSectorNavEdges(const DtRwNavigationProfile* profile,
470  int sectorX, int sectorY, const DtExtent& sectorExtent,
471  SectorGenerationThreadInfo* sectorGenInfo,
472  std::list<NavEdgePoints>& navEdges);
473 
476  virtual bool generateNavPoints(const DtRwNavigationProfile* profile,
477  Kaim::GeneratorInputOutput& generatorInputOutput,
478  const DtString& randomId, const DtFilename& navDataOutputDir);
479 
483  virtual bool generateSectorNavPoints(const DtRwNavigationProfile* profile,
484  Kaim::GeneratorSector* sector, const DtString& randomId,
485  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
486  std::vector<char>* buffer = 0,
487  SectorGenerationThreadInfo* sectorGenInfo = 0);
488 
490  virtual bool computeSectorNavPoints(const DtRwNavigationProfile* profile,
491  int sectorX, int sectorY, const DtExtent& sectorExtent,
492  SectorGenerationThreadInfo* sectorGenInfo,
493  std::list<NavPoint>& navPoints);
494 
495 
498  virtual void setNumberOfProgressSteps(int steps);
499  virtual void nextProgressStep(const DtString& stepName, int numSubSteps = 0);
500  virtual void nextProgressSubStep();
501  virtual void progressComplete();
502  virtual void outputProgress(const DtString& stepName = DtString::nullString());
504 
508 
510  virtual DtOutputStream& detailOutput();
511 
513  virtual DtOutputStream& milestoneOutput();
514 
516  virtual DtOutputStream& notableOutput();
517 
519  virtual DtOutputStream& errorOutput();
520 
522 
523 
524 private:
525 
528 
530  DtNavDataGenerator& operator=(const DtNavDataGenerator& orig);
531 
532 protected:
533 
536 
539 
542 
545 
548 
550  DtFilename myNavGenConfigFile;
551 
554 
556  DtFilename myOutputPath;
557 
559  DtFilename myTerrainFile;
560 
562  DtFilename myRegenDirectory;
563 
566 
569 
573 
576 
579 
582 
587 
589  std::map<DtString, DynamicTerrainNavEdgeFunctionInfo> myDynamicTerrainNavEdgeFunctions;
590 
592  std::map<DtString, FeatureDataNavEdgeFunctionInfo> myFeatureDataNavEdgeFunctions;
593 
596  std::map<DtString, GeneralNavEdgeFunctionInfo> myGeneralNavEdgeFunctions;
597 
599  std::map<DtString, DynamicTerrainNavPointFunctionInfo> myDynamicTerrainNavPointFunctions;
600 
602  std::map<DtString, FeatureDataNavPointFunctionInfo> myFeatureDataNavPointFunctions;
603 
606  std::map<DtString, GeneralNavPointFunctionInfo> myGeneralNavPointFunctions;
607 
609 
610  std::list<DtDynamicLibrary*> myLoadedPlugins;
611 
612  static DtFilename theNavDataDir;
613  static DtNavDataGeneratorCreatorFcn theCreatorFcn;
614 
616  tbb::task_arena myArena;
617 };
618 
619 
Definition: navGeneration.h:77
Definition: navGeneration.h:142
static const double HighCoverHeightCheck
Definition: navGeneration.h:113
DtTime timeToComplete
Definition: navGeneration.h:138
DtNavigationGeneratorInput myNavGenInput
The current input for the navigation generator.
Definition: navGeneration.h:541
SectorGenerationStatus
Definition: navGeneration.h:103
RwMutex myFeatureTagVolumeGeneratorMutex
Mutex for myFeatureTagVolumeGenerator.
Definition: navGeneration.h:568
int myCurrentProgressSubStep
Definition: navGeneration.h:586
Definition: navGeneration.h:89
std::vector< DtVector > points
Definition: navGeneration.h:79
double myTransitionPointSpacing
The spacing to be used between transition points for exiting the nav area. Default is 3...
Definition: navGeneration.h:572
SectorGenerationThreadMap mySectorThreads
Sector generation threads by sector name.
Definition: navGeneration.h:575
DtFilename myRegenDirectory
The directory in which we will regenerate nav data at runtime.
Definition: navGeneration.h:562
Definition: navGeneration.h:55
Aids in creating and parsing nav sector names.
Definition: navSectorName.h:25
unsigned tag
Definition: navGeneration.h:172
bool myIsInitialized
Indicates whether initialize() has been successfully called.
Definition: navGeneration.h:581
int myNumberOfProgressSteps
Definition: navGeneration.h:583
std::map< DtString, DynamicTerrainNavPointFunctionInfo > myDynamicTerrainNavPointFunctions
Functions used to create nav points from dynamic terrain features.
Definition: navGeneration.h:599
static const double LowCoverHeightCheck
Definition: navGeneration.h:112
Definition: navGeneration.h:107
NavEdgePoints(const DtVector &p1=DtVector::zero(), const DtVector &p2=DtVector::zero(), unsigned t=0)
Definition: navGeneration.h:157
static const unsigned NumCoverCheckAngles
Definition: navGeneration.h:114
unsigned int blue
Definition: navGeneration.h:52
unsigned tag
Definition: navGeneration.h:163
std::pair< FeatureDataNavEdgeFunction, void * > FeatureDataNavEdgeFunctionInfo
Definition: navGeneration.h:208
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
std::atomic< bool > stop
Definition: navGeneration.h:137
Definition: navGeneration.h:83
std::list< DtDynamicLibrary * > myLoadedPlugins
Definition: navGeneration.h:610
DtFeatureTagVolumeGenerator * myFeatureTagVolumeGenerator
Whether feature tags will be generated.
Definition: navGeneration.h:565
DtTerrainInterface * myTerrainInterface
The terrain interface for the terrain on which nav data is being generated.
Definition: navGeneration.h:538
tbb::mutex Mutex
Definition: navGeneration.h:118
class DtNavigationGeneratorInput
Definition: navigationGeneratorInput.h:31
Definition: navGeneration.h:122
tbb::queuing_rw_mutex RwMutex
Definition: navGeneration.h:117
Definition: navGeneration.h:105
Definition: navGeneration.h:155
std::map< DtString, DtString > ProfileRandomIdMap
Definition: navGeneration.h:149
Definition: feature.h:26
std::unique_ptr< std::thread > thread
Definition: navGeneration.h:136
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:244
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:544
DtString statusMsg
Definition: navGeneration.h:135
DtFilename myTerrainFile
The terrain file for which nav data is being generated.
Definition: navGeneration.h:559
Definition: rwNavGenConfig.h:26
DtNavTagColor color
Definition: navGeneration.h:59
std::pair< GeneralNavPointFunction, void * > GeneralNavPointFunctionInfo
Definition: navGeneration.h:245
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:596
DtTerrainInterface allows access to common terrain calls without having to know the terrain implement...
Definition: terrainInterface.h:93
bool isExclusive
Definition: navGeneration.h:60
std::vector< DtInputNavTag > navTagDataList
Definition: navGeneration.h:85
std::pair< DynamicTerrainNavPointFunction, void * > DynamicTerrainNavPointFunctionInfo
Definition: navGeneration.h:243
static DtFilename theNavDataDir
Definition: navGeneration.h:612
Definition: navGeneration.h:166
DtRwNavRuntimeConfig myNavRuntimeConfig
The runtime configuration for the nav.
Definition: navGeneration.h:535
DtClock myClock
Definition: navGeneration.h:608
std::pair< DynamicTerrainNavEdgeFunction, void * > DynamicTerrainNavEdgeFunctionInfo
Definition: navGeneration.h:207
unsigned int green
Definition: navGeneration.h:51
DtRwTemplatedListPtr< DtRwNavigationProfile, true > ProfileConfigList
Definition: navGeneration.h:151
DtNavDataGenerator * generator
Definition: navGeneration.h:144
Definition: navGeneration.h:47
bool uniquelyIdentify
for no-go areas, this should be true.
Definition: navGeneration.h:61
std::atomic< SectorGenerationStatus > status
Definition: navGeneration.h:134
DtVector point2
Definition: navGeneration.h:162
Definition: navGeneration.h:65
MAKVRinTerra::DtFeatureGeometry myExtentFeatureGeometry
The nav area extents as a feature geometry.
Definition: navGeneration.h:578
Definition: navGeneration.h:106
std::map< DtString, FeatureDataNavEdgeFunctionInfo > myFeatureDataNavEdgeFunctions
Functions used to create nav edges from terrain feature data.
Definition: navGeneration.h:592
std::vector< DtInputNavTagVolume > navTagVolumeList
Definition: navGeneration.h:86
Definition: navGeneration.h:71
DtFilename myRuntimeConfigFile
The path of the runtime config file.
Definition: navGeneration.h:553
This class is used to generate nav data for an area on a terrain.
Definition: navGeneration.h:99
std::pair< GeneralNavEdgeFunction, void * > GeneralNavEdgeFunctionInfo
Definition: navGeneration.h:209
std::map< DtNavSectorDataType, std::vector< char > > NavDataOutputMap
Definition: navGeneration.h:120
#define DT_DLL_vrfNavigation
This file is used to determine how to build.
Definition: vrfNavigationDefines.h:26
static DtNavDataGeneratorCreatorFcn theCreatorFcn
Definition: navGeneration.h:613
static const double CoverChordLengthFactor
Definition: navGeneration.h:115
std::map< DtString, FeatureDataNavPointFunctionInfo > myFeatureDataNavPointFunctions
Functions used to create nav points from terrain feature data.
Definition: navGeneration.h:602
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:589
DtNavTriangles triangles
Definition: navGeneration.h:145
unsigned int navTagDataIndex
Definition: navGeneration.h:80
static Mutex theNavDataGenMutex
Mutex for the period when data is actually being generated.
Definition: navGeneration.h:547
DtFilename myOutputPath
Where nav data files should be generated.
Definition: navGeneration.h:556
Represents a GIS feature. Features consist of a DtFeatureGeometry (2.5D geometric vector data) and a ...
Definition: feature.h:36
Definition: rwNavigationProfile.h:141
DtFilename myNavGenConfigFile
The path of the navigation generator config file.
Definition: navGeneration.h:550
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:606
NavDataOutputMap outputData
Definition: navGeneration.h:133
int myNumberOfProgressSubSteps
Definition: navGeneration.h:584
tbb::task_arena myArena
Tbb arena to limit number of threads.
Definition: navGeneration.h:616
SectorGenerationThreadInfo(const DtNavSectorName &sn)
Definition: navGeneration.h:124
DtNavSectorName sectorName
Definition: navGeneration.h:132
Represents a feature geometry.
Definition: featureGeometry.h:40
Definition: navGeneration.h:108
Definition: point.h:34
std::map< DtNavSectorName, SectorGenerationThreadInfo * > SectorGenerationThreadMap
Definition: navGeneration.h:140
int myCurrentProgressStep
Definition: navGeneration.h:585

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)