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;
128 status = GenerationNotRequested;
133 tbb::atomic<SectorGenerationStatus>
status;
155 const DtVector& p2 = DtVector::zero(),
unsigned t = 0)
156 : point1(p1), point2(p2), tag(t) {};
166 : point(pt), tag(t) {};
181 std::list<NavEdgePoints>* edges,
void* usr);
191 std::list<NavEdgePoints>* edges,
void* usr);
201 int sectorX,
int sectorY,
unsigned edgeTag,
202 std::list<NavEdgePoints>* edges,
void* usr);
217 std::list<NavPoint>* points,
void* usr);
227 std::list<NavPoint>* points,
void* usr);
237 int sectorX,
int sectorY,
unsigned pointTag,
238 std::list<NavPoint>* points,
void* usr);
253 const DtFilename& navGenConfigFile,
254 const DtFilename& runtimeConfigFile,
255 const DtFilename& outputPath,
256 const DtFilename& terrainFile,
257 bool generateFeatureTagVolumes);
263 void addNavEdgeFromDynamicTerrainFunction(
const DtString& name,
264 DynamicTerrainNavEdgeFunction fcn,
void* usr);
270 void addNavEdgeFromFeatureDataFunction(
const DtString& name, FeatureDataNavEdgeFunction fcn,
277 void addGeneralNavEdgeFunction(
const DtString& name, GeneralNavEdgeFunction fcn,
284 void addNavPointFromDynamicTerrainFunction(
const DtString& name,
285 DynamicTerrainNavPointFunction fcn,
void* usr);
291 void addNavPointFromFeatureDataFunction(
const DtString& name, FeatureDataNavPointFunction fcn,
298 void addGeneralNavPointFunction(
const DtString& name, GeneralNavPointFunction fcn,
302 virtual void setTransitionPointSpacing(
double spacing);
305 virtual double transitionPointSpacing()
const;
311 virtual bool generate();
340 virtual bool terrainHeight(
const DtPoint& p,
double& height,
double* min = 0,
double* max = 0)
const;
343 static void setCreator(DtNavDataGeneratorCreatorFcn creatorFcn);
346 static void setNavDataDirectory(
const DtFilename& navDataDir);
349 static const DtFilename& navDataDirectory();
353 static DtFilename replaceSubstrings(
const DtFilename& original);
357 friend class TbbintersectTransitionPoint;
364 virtual void loadPlugins(
const std::set<DtFilename>& pluginFiles);
367 virtual void unloadPlugins();
370 virtual bool checkPluginVersion(DtDynamicLibrary* plugin)
const;
387 static void trianglesFinalizeCallback(
int status,
void* usr);
388 virtual void processTrianglesFinalize(
int status,
DtNavTriangles& triangles);
392 virtual std::vector<DtVector> calculateTransitionPointLocations();
398 virtual bool generateProfileNavData(
403 virtual bool generateSectorNavData(
412 Kaim::GeneratorInputOutput& generatorInputOutput,
413 const DtString& randomId,
const DtFilename& navDataOutputDir);
419 Kaim::GeneratorSector* sector,
const DtString& randomId,
420 const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
421 std::vector<char>* buffer = 0,
427 Kaim::GeneratorInputOutput& generatorInputOutput,
428 const DtString& randomId,
const DtFilename& navDataOutputDir);
434 Kaim::GeneratorSector* sector,
const DtString& randomId,
435 const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
436 std::vector<char>* buffer = 0,
442 Kaim::GeneratorInputOutput& generatorInputOutput,
443 const DtString& randomId,
const DtFilename& navDataOutputDir);
449 Kaim::GeneratorSector* sector,
const DtString& randomId,
450 const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
451 std::vector<char>* buffer = 0,
456 int sectorX,
int sectorY,
const DtExtent& sectorExtent,
458 std::list<NavEdgePoints>& navEdges);
463 Kaim::GeneratorInputOutput& generatorInputOutput,
464 const DtString& randomId,
const DtFilename& navDataOutputDir);
470 Kaim::GeneratorSector* sector,
const DtString& randomId,
471 const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
472 std::vector<char>* buffer = 0,
477 int sectorX,
int sectorY,
const DtExtent& sectorExtent,
479 std::list<NavPoint>& navPoints);
484 virtual void setNumberOfProgressSteps(
int steps);
485 virtual void nextProgressStep(
const DtString& stepName,
int numSubSteps = 0);
486 virtual void nextProgressSubStep();
487 virtual void progressComplete();
488 virtual void outputProgress(
const DtString& stepName = DtString::nullString());
496 virtual DtOutputStream& detailOutput();
499 virtual DtOutputStream& milestoneOutput();
502 virtual DtOutputStream& notableOutput();
505 virtual DtOutputStream& errorOutput();
Definition: navGeneration.h:141
static const double HighCoverHeightCheck
Definition: navGeneration.h:112
DtTime timeToComplete
Definition: navGeneration.h:137
DtNavigationGeneratorInput myNavGenInput
The current input for the navigation generator.
Definition: navGeneration.h:527
SectorGenerationStatus
Definition: navGeneration.h:102
RwMutex myFeatureTagVolumeGeneratorMutex
Mutex for myFeatureTagVolumeGenerator.
Definition: navGeneration.h:551
tbb::atomic< bool > stop
Definition: navGeneration.h:136
int myCurrentProgressSubStep
Definition: navGeneration.h:569
Definition: navGeneration.h:90
double myTransitionPointSpacing
The spacing to be used between transition points for exiting the nav area.
Definition: navGeneration.h:555
SectorGenerationThreadMap mySectorThreads
Sector generation threads by sector name.
Definition: navGeneration.h:558
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:169
bool myIsInitialized
Indicates whether initialize() has been successfully called.
Definition: navGeneration.h:564
int myNumberOfProgressSteps
Definition: navGeneration.h:566
std::map< DtString, DynamicTerrainNavPointFunctionInfo > myDynamicTerrainNavPointFunctions
Functions used to create nav points from dynamic terrain features.
Definition: navGeneration.h:582
static const double LowCoverHeightCheck
Definition: navGeneration.h:111
Definition: navGeneration.h:106
NavEdgePoints(const DtVector &p1=DtVector::zero(), const DtVector &p2=DtVector::zero(), unsigned t=0)
Definition: navGeneration.h:154
static const unsigned NumCoverCheckAngles
Definition: navGeneration.h:113
unsigned int blue
Definition: navGeneration.h:53
unsigned tag
Definition: navGeneration.h:160
std::pair< FeatureDataNavEdgeFunction, void * > FeatureDataNavEdgeFunctionInfo
Definition: navGeneration.h:205
The DtExtent represents an axis-aligned 3d bounding box.
Definition: extent.h:43
Definition: navGeneration.h:84
std::list< DtDynamicLibrary * > myLoadedPlugins
Definition: navGeneration.h:593
DtFeatureTagVolumeGenerator * myFeatureTagVolumeGenerator
Whether feature tags will be generated.
Definition: navGeneration.h:548
DtTerrainInterface * myTerrainInterface
The terrain interface for the terrain on which nav data is being generated.
Definition: navGeneration.h:524
tbb::mutex Mutex
Definition: navGeneration.h:117
Definition: navGeneration.h:121
tbb::queuing_rw_mutex RwMutex
Definition: navGeneration.h:116
Definition: navGeneration.h:104
Definition: navGeneration.h:152
std::map< DtString, DtString > ProfileRandomIdMap
Definition: navGeneration.h:148
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:241
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:530
DtString statusMsg
Definition: navGeneration.h:134
DtFilename myTerrainFile
The terrain file for which nav data is being generated.
Definition: navGeneration.h:545
Definition: rwNavGenConfig.h:26
std::pair< GeneralNavPointFunction, void * > GeneralNavPointFunctionInfo
Definition: navGeneration.h:242
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:579
DtTerrainInterface allows access to common terrain calls without having to know the terrain implement...
Definition: terrainInterface.h:88
std::vector< DtInputNavTag > navTagDataList
Definition: navGeneration.h:86
std::pair< DynamicTerrainNavPointFunction, void * > DynamicTerrainNavPointFunctionInfo
Definition: navGeneration.h:240
static DtFilename theNavDataDir
Definition: navGeneration.h:595
std::auto_ptr< tbb::tbb_thread > thread
Definition: navGeneration.h:135
Definition: navGeneration.h:163
DtRwNavRuntimeConfig myNavRuntimeConfig
The runtime configuration for the nav.
Definition: navGeneration.h:521
DtClock myClock
Definition: navGeneration.h:591
std::pair< DynamicTerrainNavEdgeFunction, void * > DynamicTerrainNavEdgeFunctionInfo
Definition: navGeneration.h:204
unsigned int green
Definition: navGeneration.h:52
DtNavDataGenerator * generator
Definition: navGeneration.h:143
Definition: navGeneration.h:48
DtVector point2
Definition: navGeneration.h:159
Definition: navGeneration.h:66
MAKVRinTerra::DtFeatureGeometry myExtentFeatureGeometry
The nav area extents as a feature geometry.
Definition: navGeneration.h:561
Definition: navGeneration.h:105
std::map< DtString, FeatureDataNavEdgeFunctionInfo > myFeatureDataNavEdgeFunctions
Functions used to create nav edges from terrain feature data.
Definition: navGeneration.h:575
std::vector< DtInputNavTagVolume > navTagVolumeList
Definition: navGeneration.h:87
Definition: navGeneration.h:72
DtFilename myRuntimeConfigFile
The path of the runtime config file.
Definition: navGeneration.h:539
This class is used to generate nav data for an area on a terrain.
Definition: navGeneration.h:98
std::pair< GeneralNavEdgeFunction, void * > GeneralNavEdgeFunctionInfo
Definition: navGeneration.h:206
std::map< DtNavSectorDataType, std::vector< char > > NavDataOutputMap
Definition: navGeneration.h:119
#define DT_DLL_vrfNavigation
This file is used to determine how to build.
Definition: vrfNavigationDefines.h:26
static DtNavDataGeneratorCreatorFcn theCreatorFcn
Definition: navGeneration.h:596
static const double CoverChordLengthFactor
Definition: navGeneration.h:114
std::map< DtString, FeatureDataNavPointFunctionInfo > myFeatureDataNavPointFunctions
Functions used to create nav points from terrain feature data.
Definition: navGeneration.h:585
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:572
DtNavTriangles triangles
Definition: navGeneration.h:144
static Mutex theNavDataGenMutex
Mutex for the period when data is actually being generated.
Definition: navGeneration.h:533
DtFilename myOutputPath
Where nav data files should be generated.
Definition: navGeneration.h:542
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:536
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:589
NavDataOutputMap outputData
Definition: navGeneration.h:132
int myNumberOfProgressSubSteps
Definition: navGeneration.h:567
tbb::task_arena myArena
Tbb arena to limit number of threads.
Definition: navGeneration.h:599
SectorGenerationThreadInfo(const DtNavSectorName &sn)
Definition: navGeneration.h:123
DtNavSectorName sectorName
Definition: navGeneration.h:131
Represents a feature geometry.
Definition: featureGeometry.h:35
Definition: navGeneration.h:107
std::map< DtNavSectorName, SectorGenerationThreadInfo * > SectorGenerationThreadMap
Definition: navGeneration.h:139
tbb::atomic< SectorGenerationStatus > status
Definition: navGeneration.h:133
int myCurrentProgressStep
Definition: navGeneration.h:568