18 #include <matrix/vlVector.h>
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>
34 class DtDynamicLibrary;
36 namespace MAKVRinTerra
39 class DtFeatureGeometry;
44 class GeneratorInputOutput;
45 class GeneratorSector;
59 std::vector<unsigned long> navTagData;
130 status = GenerationNotRequested;
135 tbb::atomic<SectorGenerationStatus>
status;
159 const DtVector& p2 = DtVector::zero(),
unsigned t = 0)
160 : point1(p1), point2(p2), tag(t) {};
170 : point(pt), tag(t) {};
205 int sectorX,
int sectorY,
unsigned edgeTag,
241 int sectorX,
int sectorY,
unsigned pointTag,
257 const DtFilename& navGenConfigFile,
258 const DtFilename& runtimeConfigFile,
259 const DtFilename& outputPath,
260 const DtFilename& terrainFile,
261 const DtFilename& regenDirectory,
262 bool generateFeatureTagVolumes);
268 void addNavEdgeFromDynamicTerrainFunction(
const DtString& name,
269 DynamicTerrainNavEdgeFunction fcn,
void* usr);
275 void addNavEdgeFromFeatureDataFunction(
const DtString& name, FeatureDataNavEdgeFunction fcn,
282 void addGeneralNavEdgeFunction(
const DtString& name, GeneralNavEdgeFunction fcn,
289 void addNavPointFromDynamicTerrainFunction(
const DtString& name,
290 DynamicTerrainNavPointFunction fcn,
void* usr);
296 void addNavPointFromFeatureDataFunction(
const DtString& name, FeatureDataNavPointFunction fcn,
303 void addGeneralNavPointFunction(
const DtString& name, GeneralNavPointFunction fcn,
307 virtual void setTransitionPointSpacing(
double spacing);
310 virtual double transitionPointSpacing()
const;
316 virtual bool generate();
323 virtual void stopGeneration();
351 virtual bool terrainHeight(
const DtPoint& p,
double& height,
double* min = 0,
double* max = 0)
const;
354 static void setCreator(DtNavDataGeneratorCreatorFcn creatorFcn);
357 static void setNavDataDirectory(
const DtFilename& navDataDir);
360 static const DtFilename& navDataDirectory();
364 static DtFilename replaceSubstrings(
const DtFilename& original);
368 friend class TbbintersectTransitionPoint;
375 virtual void loadPlugins(
const std::set<DtFilename>& pluginFiles);
378 virtual void unloadPlugins();
381 virtual bool checkPluginVersion(DtDynamicLibrary* plugin)
const;
398 static void trianglesFinalizeCallback(
int status,
void* usr);
399 virtual void processTrianglesFinalize(
int status,
DtNavTriangles& triangles);
403 virtual std::vector<DtVector> calculateTransitionPointLocations();
409 virtual bool generateProfileNavData(
414 virtual bool generateSectorNavData(
423 Kaim::GeneratorInputOutput& generatorInputOutput,
424 const DtString& randomId,
const DtFilename& navDataOutputDir);
430 Kaim::GeneratorSector* sector,
const DtString& randomId,
431 const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
432 std::vector<char>* buffer = 0,
438 Kaim::GeneratorInputOutput& generatorInputOutput,
439 const DtString& randomId,
const DtFilename& navDataOutputDir);
445 Kaim::GeneratorSector* sector,
const DtString& randomId,
446 const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
447 std::vector<char>* buffer = 0,
453 Kaim::GeneratorInputOutput& generatorInputOutput,
454 const DtString& randomId,
const DtFilename& navDataOutputDir);
460 Kaim::GeneratorSector* sector,
const DtString& randomId,
461 const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
462 std::vector<char>* buffer = 0,
467 int sectorX,
int sectorY,
const DtExtent& sectorExtent,
469 std::list<NavEdgePoints>& navEdges);
474 Kaim::GeneratorInputOutput& generatorInputOutput,
475 const DtString& randomId,
const DtFilename& navDataOutputDir);
481 Kaim::GeneratorSector* sector,
const DtString& randomId,
482 const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
483 std::vector<char>* buffer = 0,
488 int sectorX,
int sectorY,
const DtExtent& sectorExtent,
490 std::list<NavPoint>& navPoints);
495 virtual void setNumberOfProgressSteps(
int steps);
496 virtual void nextProgressStep(
const DtString& stepName,
int numSubSteps = 0);
497 virtual void nextProgressSubStep();
498 virtual void progressComplete();
499 virtual void outputProgress(
const DtString& stepName = DtString::nullString());
507 virtual DtOutputStream& detailOutput();
510 virtual DtOutputStream& milestoneOutput();
513 virtual DtOutputStream& notableOutput();
516 virtual DtOutputStream& errorOutput();
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:538
SectorGenerationStatus
Definition: navGeneration.h:104
RwMutex myFeatureTagVolumeGeneratorMutex
Mutex for myFeatureTagVolumeGenerator.
Definition: navGeneration.h:565
tbb::atomic< bool > stop
Definition: navGeneration.h:138
int myCurrentProgressSubStep
Definition: navGeneration.h:583
Definition: navGeneration.h:90
double myTransitionPointSpacing
The spacing to be used between transition points for exiting the nav area. Default is 3...
Definition: navGeneration.h:569
SectorGenerationThreadMap mySectorThreads
Sector generation threads by sector name.
Definition: navGeneration.h:572
DtFilename myRegenDirectory
The directory in which we will regenerate nav data at runtime.
Definition: navGeneration.h:559
std::vector< DtNavTriangle > DtNavTriangles
Definition: navTriangle.h:38
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:578
int myNumberOfProgressSteps
Definition: navGeneration.h:580
std::map< DtString, DynamicTerrainNavPointFunctionInfo > myDynamicTerrainNavPointFunctions
Functions used to create nav points from dynamic terrain features.
Definition: navGeneration.h:596
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
Definition: navGeneration.h:84
std::list< DtDynamicLibrary * > myLoadedPlugins
Definition: navGeneration.h:607
DtFeatureTagVolumeGenerator * myFeatureTagVolumeGenerator
Whether feature tags will be generated.
Definition: navGeneration.h:562
DtTerrainInterface * myTerrainInterface
The terrain interface for the terrain on which nav data is being generated.
Definition: navGeneration.h:535
tbb::mutex Mutex
Definition: navGeneration.h:119
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: 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:541
DtString statusMsg
Definition: navGeneration.h:136
DtFilename myTerrainFile
The terrain file for which nav data is being generated.
Definition: navGeneration.h:556
Definition: rwNavGenConfig.h:26
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:593
DtTerrainInterface allows access to common terrain calls without having to know the terrain implement...
Definition: terrainInterface.h:100
std::vector< DtInputNavTag > navTagDataList
Definition: navGeneration.h:86
std::pair< DynamicTerrainNavPointFunction, void * > DynamicTerrainNavPointFunctionInfo
Definition: navGeneration.h:244
static DtFilename theNavDataDir
Definition: navGeneration.h:609
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:532
DtClock myClock
Definition: navGeneration.h:605
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
DtVector point2
Definition: navGeneration.h:163
Definition: navGeneration.h:66
MAKVRinTerra::DtFeatureGeometry myExtentFeatureGeometry
The nav area extents as a feature geometry.
Definition: navGeneration.h:575
Definition: navGeneration.h:107
std::map< DtString, FeatureDataNavEdgeFunctionInfo > myFeatureDataNavEdgeFunctions
Functions used to create nav edges from terrain feature data.
Definition: navGeneration.h:589
std::vector< DtInputNavTagVolume > navTagVolumeList
Definition: navGeneration.h:87
Definition: navGeneration.h:72
DtFilename myRuntimeConfigFile
The path of the runtime config file.
Definition: navGeneration.h:550
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:610
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:599
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:586
DtNavTriangles triangles
Definition: navGeneration.h:146
static Mutex theNavDataGenMutex
Mutex for the period when data is actually being generated.
Definition: navGeneration.h:544
DtFilename myOutputPath
Where nav data files should be generated.
Definition: navGeneration.h:553
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:547
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:603
NavDataOutputMap outputData
Definition: navGeneration.h:134
int myNumberOfProgressSubSteps
Definition: navGeneration.h:581
tbb::task_arena myArena
Tbb arena to limit number of threads.
Definition: navGeneration.h:613
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
std::map< DtNavSectorName, SectorGenerationThreadInfo * > SectorGenerationThreadMap
Definition: navGeneration.h:141
tbb::atomic< SectorGenerationStatus > status
Definition: navGeneration.h:135
int myCurrentProgressStep
Definition: navGeneration.h:582