18 #include <matrix/vlVector.h>
20 #include <tbb/queuing_rw_mutex.h>
21 #include <tbb/mutex.h>
22 #include <tbb/task_arena.h>
23 #include <tbb/spin_mutex.h>
33 class DtDynamicLibrary;
35 namespace MAKVRinTerra
38 class DtFeatureGeometry;
43 class GeneratorInputOutput;
44 class GeneratorSector;
58 std::vector<unsigned long> navTagData;
129 status = GenerationNotRequested;
134 std::atomic<SectorGenerationStatus>
status;
158 const DtVector& p2 = DtVector::zero(),
unsigned t = 0)
159 : point1(p1), point2(p2), tag(t) {};
168 NavPoint(
const DtVector& pt = DtVector::zero(),
unsigned t = 0)
169 : point(pt), tag(t) {};
204 int sectorX,
int sectorY,
unsigned edgeTag,
240 int sectorX,
int sectorY,
unsigned pointTag,
256 const DtFilename& navGenConfigFile,
257 const DtFilename& runtimeConfigFile,
258 const DtFilename& outputPath,
259 const DtFilename& terrainFile,
260 const DtFilename& regenDirectory,
261 bool generateFeatureTagVolumes);
267 void addNavEdgeFromDynamicTerrainFunction(
const DtString& name,
268 DynamicTerrainNavEdgeFunction fcn,
void* usr);
274 void addNavEdgeFromFeatureDataFunction(
const DtString& name, FeatureDataNavEdgeFunction fcn,
281 void addGeneralNavEdgeFunction(
const DtString& name, GeneralNavEdgeFunction fcn,
288 void addNavPointFromDynamicTerrainFunction(
const DtString& name,
289 DynamicTerrainNavPointFunction fcn,
void* usr);
295 void addNavPointFromFeatureDataFunction(
const DtString& name, FeatureDataNavPointFunction fcn,
302 void addGeneralNavPointFunction(
const DtString& name, GeneralNavPointFunction fcn,
306 virtual void setTransitionPointSpacing(
double spacing);
309 virtual double transitionPointSpacing()
const;
315 virtual bool generate();
322 virtual void stopGeneration();
354 virtual bool terrainHeight(
const DtPoint& p,
double& height,
double* min = 0,
double* max = 0)
const;
357 static void setCreator(DtNavDataGeneratorCreatorFcn creatorFcn);
360 static void setNavDataDirectory(
const DtFilename& navDataDir);
363 static const DtFilename& navDataDirectory();
367 static DtFilename replaceSubstrings(
const DtFilename& original);
371 friend class TbbintersectTransitionPoint;
378 virtual void loadPlugins(
const std::set<DtFilename>& pluginFiles);
381 virtual void unloadPlugins();
384 virtual bool checkPluginVersion(DtDynamicLibrary* plugin)
const;
401 static void trianglesFinalizeCallback(
int status,
void* usr);
402 virtual void processTrianglesFinalize(
int status,
DtNavTriangles& triangles);
406 virtual std::vector<DtVector> calculateTransitionPointLocations();
412 virtual bool generateProfileNavData(
417 virtual bool generateSectorNavData(
426 Kaim::GeneratorInputOutput& generatorInputOutput,
427 const DtString& randomId,
const DtFilename& navDataOutputDir);
433 Kaim::GeneratorSector* sector,
const DtString& randomId,
434 const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
435 std::vector<char>* buffer = 0,
441 Kaim::GeneratorInputOutput& generatorInputOutput,
442 const DtString& randomId,
const DtFilename& navDataOutputDir);
448 Kaim::GeneratorSector* sector,
const DtString& randomId,
449 const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
450 std::vector<char>* buffer = 0,
456 Kaim::GeneratorInputOutput& generatorInputOutput,
457 const DtString& randomId,
const DtFilename& navDataOutputDir);
463 Kaim::GeneratorSector* sector,
const DtString& randomId,
464 const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
465 std::vector<char>* buffer = 0,
470 int sectorX,
int sectorY,
const DtExtent& sectorExtent,
472 std::list<NavEdgePoints>& navEdges);
477 Kaim::GeneratorInputOutput& generatorInputOutput,
478 const DtString& randomId,
const DtFilename& navDataOutputDir);
484 Kaim::GeneratorSector* sector,
const DtString& randomId,
485 const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
486 std::vector<char>* buffer = 0,
491 int sectorX,
int sectorY,
const DtExtent& sectorExtent,
493 std::list<NavPoint>& navPoints);
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());
510 virtual DtOutputStream& detailOutput();
513 virtual DtOutputStream& milestoneOutput();
516 virtual DtOutputStream& notableOutput();
519 virtual DtOutputStream& errorOutput();
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
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
std::vector< DtNavTriangle > DtNavTriangles
Definition: navTriangle.h:37
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
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
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
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
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
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
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
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
std::map< DtNavSectorName, SectorGenerationThreadInfo * > SectorGenerationThreadMap
Definition: navGeneration.h:140
int myCurrentProgressStep
Definition: navGeneration.h:585