VR-Forces 4.6.1 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 
33 namespace MAKVRinTerra
34 {
35  class DtFeature;
36  class DtFeatureGeometry;
37 }
38 
39 namespace Kaim
40 {
41  class GeneratorInputOutput;
42  class GeneratorSector;
43 }
44 
46 {
47  DtNavTagColor() : red(0), green(0), blue(0) {};
48  unsigned int red;
49  unsigned int green;
50  unsigned int blue;
51 };
52 
54 {
55  DtInputNavTag() : isExclusive(false) {};
56  std::vector<unsigned long> navTagData;
58  bool isExclusive;
60 };
61 
63 {
64  std::vector<DtVector> points;
65  unsigned int navTagDataIndex;
66 };
67 
69 {
70  std::vector<DtInputNavTag> navTagDataList;
71  std::vector<DtInputNavTagVolume> navTagVolumeList;
72 };
73 
75 {
76 public:
77  virtual bool generateTagVolumes(const MAKVRinTerra::DtFeatureGeometry& extentBox,
78  bool pruneNoGo, const DtRwNavigationProfile* navProfile, DtNavTagVolumeSet& tagVolumes) = 0;
79 };
80 
83 {
84 public:
85 
87  {
92  GenerationStopped
93  };
94 
95  typedef tbb::queuing_rw_mutex RwMutex;
96  typedef tbb::mutex Mutex;
97 
98  typedef std::map<DtNavSectorDataType, std::vector<char> > NavDataOutputMap;
99 
101  {
103  : sectorName(sn)
104  , timeToComplete(-1)
105  {
106  stop = false;
107  status = GenerationNotRequested;
108  }
109 
112  tbb::atomic<SectorGenerationStatus> status;
114  std::auto_ptr<tbb::tbb_thread> thread;
115  tbb::atomic<bool> stop;
117  };
118  typedef std::map<DtNavSectorName, SectorGenerationThreadInfo*> SectorGenerationThreadMap;
119 
121  {
124  };
125 
126 
127  typedef std::map<DtString, DtString> ProfileRandomIdMap;
128 
129  typedef DtNavDataGenerator* (*DtNavDataGeneratorCreatorFcn)();
130 
131  struct EdgePoints
132  {
133  EdgePoints(const DtVector& p1 = DtVector::zero(),
134  const DtVector& p2 = DtVector::zero(), unsigned t = 0)
135  : point1(p1), point2(p2), tag(t) {};
136 
137  DtVector point1;
139  unsigned tag;
140  };
141  typedef bool(*DynamicTerrainNavEdgeFunction)(const DtRwDynamicTerrainInformation& dynTerrInfo,
142  std::list<EdgePoints>* edges, int sectorX, int sectorY, unsigned edgeTag, void* usr);
143  typedef bool(*FeatureDataNavEdgeFunction)(const MAKVRinTerra::DtFeature& feature,
144  std::list<EdgePoints>* edges, int sectorX, int sectorY, unsigned edgeTag, void* usr);
145  typedef std::pair<DynamicTerrainNavEdgeFunction, void*> DynamicTerrainNavEdgeFunctionInfo;
146  typedef std::pair<FeatureDataNavEdgeFunction, void*> FeatureDataNavEdgeFunctionInfo;
147 
150  static DtNavDataGenerator* create();
151 
153  virtual ~DtNavDataGenerator();
154 
156  virtual bool initialize(DtTerrainInterface* terrainInterface,
157  const DtFilename& navGenConfigFile,
158  const DtFilename& runtimeConfigFile,
159  const DtFilename& outputPath,
160  const DtFilename& terrainFile,
161  bool generateFeatureTagVolumes);
162 
164  void addNavEdgeFromDynamicTerrainFunction(const DtString& name, DynamicTerrainNavEdgeFunction fcn, void* usr);
165 
167  void addNavEdgeFromFeatureDataFunction(const DtString& name, FeatureDataNavEdgeFunction fcn, void* usr);
168 
170  virtual void setTransitionPointSpacing(double spacing);
171 
173  virtual double transitionPointSpacing() const;
174 
179  virtual bool generate();
180 
183  virtual bool generateSector(const DtNavSectorName& sectorName);
184 
187  virtual SectorGenerationStatus getGenerateSectorStatus(const DtNavSectorName& sectorName,
188  NavDataOutputMap& outputNavData);
189 
191  virtual const DtRwNavigationProfile* profileConfig(const DtString& profileName) const;
192 
194  virtual const DtRwNavGenConfig* navGenConfig() const;
195 
197  static void setCreator(DtNavDataGeneratorCreatorFcn creatorFcn);
198 
200  static void setNavDataDirectory(const DtFilename& navDataDir);
201 
203  static const DtFilename& navDataDirectory();
204 
207  static DtFilename replaceSubstrings(const DtFilename& original);
208 
209 protected:
210 
214 
216  virtual void doGenerateSector(SectorGenerationThreadInfo* sectorGenInfo);
217 
220  virtual bool shouldStop(SectorGenerationThreadInfo* sectorGenInfo);
221 
224  static void triangleCallback(DtTerrainTriangleStruct& triangle, void* usr);
225  virtual void processTriangle(DtTerrainTriangleStruct& triangle, DtNavTriangles& triangles);
227 
230  static void trianglesFinalizeCallback(int status, void* usr);
231  virtual void processTrianglesFinalize(int status, DtNavTriangles& triangles);
233 
235  virtual std::list<DtVector> calculateTransitionPointLocations();
236 
238  virtual void getProfileRandomIds(DtRwStringList& profiles, ProfileRandomIdMap& randomIds);
239 
241  virtual bool generateProfileNavData(
242  const DtRwNavigationProfile* profile,
243  DtString randomId);
244 
246  virtual bool generateSectorNavData(
247  const DtRwNavigationProfile* profile,
248  const DtNavSectorName& sectorName,
249  NavDataOutputMap& outputData,
250  SectorGenerationThreadInfo* sectorGenInfo = 0);
251 
254  virtual bool generateTransitionPoints(const DtRwNavigationProfile* profile,
255  Kaim::GeneratorInputOutput& generatorInputOutput,
256  const DtString& randomId, const DtFilename& navDataOutputDir);
257 
261  virtual bool generateSectorTransitionPoints(const DtRwNavigationProfile* profile,
262  Kaim::GeneratorSector* sector, const DtString& randomId,
263  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
264  std::vector<char>* buffer = 0,
265  SectorGenerationThreadInfo* sectorGenInfo = 0);
266 
269  virtual bool generateCoverPoints(const DtRwNavigationProfile* profile,
270  Kaim::GeneratorInputOutput& generatorInputOutput,
271  const DtString& randomId, const DtFilename& navDataOutputDir);
272 
276  virtual bool generateSectorCoverPoints(const DtRwNavigationProfile* profile,
277  Kaim::GeneratorSector* sector, const DtString& randomId,
278  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
279  std::vector<char>* buffer = 0,
280  SectorGenerationThreadInfo* sectorGenInfo = 0);
281 
284  virtual bool generateNavEdges(const DtRwNavigationProfile* profile,
285  Kaim::GeneratorInputOutput& generatorInputOutput,
286  const DtString& randomId, const DtFilename& navDataOutputDir);
287 
291  virtual bool generateSectorNavEdges(const DtRwNavigationProfile* profile,
292  Kaim::GeneratorSector* sector, const DtString& randomId,
293  const DtFilename& navDataOutputDir = DtFilename::nullFilename(),
294  std::vector<char>* buffer = 0,
295  SectorGenerationThreadInfo* sectorGenInfo = 0);
296 
298  virtual void registerDefaultNavEdgeGenerationFunctions();
299 
302 
307  static bool edgeFromIntersectionNormal(const DtRwDynamicTerrainInformation& dynTerrInfo,
308  std::list<EdgePoints>* edges, int sectorX, int sectorY, unsigned edgeTag, void* usr);
309 
311 
314 
316  static bool edgeFromPathFeature(const MAKVRinTerra::DtFeature& feature,
317  std::list<EdgePoints>* edges, int sectorX, int sectorY, unsigned edgeTag, void* usr);
318 
320 
322  MAKVRinTerra::DtFeatureGeometry& extentFeatureGeometry();
323 
325  MAKVRinTerra::DtFeatureGeometry& extentFeatureGeometry(int sectorX, int sectorY);
326 
330  virtual bool terrainHeight(const DtPoint& p, double& height, double* min=0, double* max=0) const;
331 
334  virtual void setNumberOfProgressSteps(int steps);
335  virtual void nextProgressStep(const DtString& stepName, int numSubSteps = 0);
336  virtual void nextProgressSubStep();
337  virtual void progressComplete();
338  virtual void outputProgress(const DtString& stepName = DtString::nullString());
340 
344 
346  virtual DtOutputStream& detailOutput();
347 
349  virtual DtOutputStream& milestoneOutput();
350 
352  virtual DtOutputStream& notableOutput();
353 
355  virtual DtOutputStream& errorOutput();
356 
358 
359 
360 private:
361 
364 
366  DtNavDataGenerator& operator=(const DtNavDataGenerator& orig);
367 
368 protected:
369 
372 
375 
378 
381 
384 
386  DtFilename myNavGenConfigFile;
387 
390 
392  DtFilename myOutputPath;
393 
395  DtFilename myTerrainFile;
396 
399 
402 
406 
409 
412 
415 
420 
422  std::map<DtString, DynamicTerrainNavEdgeFunctionInfo> myDynamicTerrainNavEdgeFunctions;
423 
425  std::map<DtString, FeatureDataNavEdgeFunctionInfo> myFeatureDataNavEdgeFunctions;
426 
428 
429  static DtFilename theNavDataDir;
430  static DtNavDataGeneratorCreatorFcn theCreatorFcn;
431 };
432 
433 

Document ID: Generated on Wed Jul 25 16:57:45 EDT 2018 from SVN revision 190790
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)