VR-Forces Development_Version Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
physicalWorld.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2014 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
14 #include <geometry/point.h>
15 #include <vlutil/vlConfig.h>
16 #include <vlutil/vlFilename.h>
17 #include <matrix/vlVector.h>
18 #include <list>
19 #include <map>
20 #include <boost/unordered_set.hpp>
25 #include "features/areaFeature.h"
27 #include "geometry/surface.h"
28 
29 class DtSimManager;
30 
31 class DtFilename;
32 class DtGeodeticCoord;
33 class Coordinate_System;
34 class DtTerrainInterface;
35 class DtVrfObjectManager;
38 class DtExtent;
39 class DtChord;
40 class DtSurface;
41 
42 class DtPoint;
43 
45 
46 class DtVrfObject;
47 class DtDcm;
50 class DtSimMessage;
55 
57 class DtVrfCallbackQueue;
58 
87 {
88 public:
89 
91  DtPhysicalWorld(DtSimManager* simManager);
92 
94  virtual ~DtPhysicalWorld();
95 
96 private:
98  DtPhysicalWorld(const DtPhysicalWorld& orig);
99 
101  DtPhysicalWorld& operator=(const DtPhysicalWorld& orig);
102 
103 public:
104  typedef std::list<DtVrfLineOfSightFunctorSP> DtLineOfSightTestContainer;
105 
114  virtual bool initialize();
115 
124  virtual bool reinitialize();
125 
127  virtual bool reset();
128 
134  virtual bool loadParametersFromFile(const DtFilename& filename);
135 
141  virtual bool loadPhysicalWorldFile(const DtFilename& filename);
142 
144  virtual void processParameters();
145 
148  const DtFilename& physicalWorldFile() const;
149 
151  virtual bool parametersLoaded() const;
152 
172  virtual bool isValidState() const;
173 
179  virtual void tick();
180 
181 
185 
191 
192  virtual Coordinate_System* coordinateSystem();
193  virtual const Coordinate_System* coordinateSystem() const;
194 
196  virtual void geocentricToDatabase(const DtVector& in, DtVector& out) const;
197 
199  virtual void geocentricToDatabase(const DtDcm& in, DtDcm& out) const;
200 
202  virtual void geocentricToDatabase(const DtVector& vIn, const DtDcm& dIn,
203  DtVector& vOut, DtDcm& dOut) const;
204 
206  virtual void geocentricToDatabase(const DtExtent& in, DtExtent& out) const;
207 
209  virtual void databaseToGeocentric(const DtVector& in, DtVector& out) const;
210 
212  virtual void databaseToGeocentric(const DtDcm& in, DtDcm& out) const;
213 
215  virtual void databaseToGeocentric(const DtVector& vIn, const DtDcm& dIn,
216  DtVector& vOut, DtDcm& dOut) const;
217 
219  virtual void databaseToGeocentric(const DtExtent& in, DtExtent& out) const;
220 
222  virtual void databaseToGeodetic(const DtVector& databasePosition, DtGeodeticCoord& geodeticPosition) const;
225  virtual void databaseToGeodetic(const DtVector& databasePosition, DtVector& geodeticPosition) const;
227  virtual void databaseToGeodetic(const DtExtent& extent, DtExtent& destExtent) const;
228 
230  virtual void geodeticToDatabase(const DtExtent& extent, DtExtent& destExtent) const;
232  virtual void geodeticToDatabase(const DtGeodeticCoord& geodeticPosition,
233  DtVector& databasePosition) const;
236  virtual void geodeticToDatabase(const DtVector& geodeticPosition,
237  DtVector& databasePosition) const;
238 
241  virtual void topoToDatabase(const DtVector& databasePosition, DtDcm& topoToDatabase) const;
244  virtual void databaseToTopo(const DtVector& databasePosition, DtDcm& databaseToTopo) const;
245 
253  virtual DtVector down(const DtVector& databasePosition) const;
254 
256 
257 
258 
259 
260 
261 
262 
263 
264 
265 
266 
267 
268 
269 
270 
271 
272 
273 
274 
275 
276 
277 
278 
279 
280 
281 
282 
283 
284  virtual double terrainHeight(const DtPoint& databaseLocation,
285  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
286  virtual double terrainHeight(double lat, double lon, bool* dataAvailable = 0,
287  bool overrideBlockingAssert = false) const;
288  virtual double terrainHeight(const DtVector& databaseLocation,
289  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
291 
293 
294 
295 
296 
297 
298 
299 
300 
301 
302 
303 
304 
305 
306 
307 
308 
309 
310 
311 
312 
313 
314  virtual bool terrainHeight(const DtPoint& databaseLocation, double& height,
315  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
316  virtual bool terrainHeight(double lat, double lon, double& height,
317  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
318  virtual bool terrainHeight(const DtVector& databaseLocation, double& height,
319  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
321 
323 
324 
325 
326 
327 
328 
329 
330 
331 
332 
333 
334 
335 
336 
337 
338 
339 
340 
341 
342 
343 
344 
345 
346 
347 
348 
349 
350 
351 
352 
353 
354 
355 
356 
357 
358 
359  virtual bool terrainHeightAndSurface(const DtPoint& databaseLocation,
360  double& height, DtSurface& surface, bool* dataAvailable = 0,
361  bool overrideBlockingAssert = false) const;
362  virtual bool terrainHeightAndSurface(double lat, double lon, double& height,
363  DtSurface& surface, bool* dataAvailable = 0,
364  bool overrideBlockingAssert = false) const;
365  virtual bool terrainHeightAndSurface(const DtVector& databaseLocation,
366  double& height, DtSurface& surface, bool* dataAvailable = 0,
367  bool overrideBlockingAssert = false) const;
368  virtual bool terrainHeightAndSurface(const DtVector& databaseLocation,
369  double& heightAtLocation, DtChordIntersectionRecord& intersectionRec,
372  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
374 
378  virtual bool terrainHeightAndSurfaceBelow(const DtVector& databaseLocation,
379  double& heightAtLocation, DtSurface& surfaceAtLocation,
380  bool* dataAvailable = 0,
381  bool overrideBlockingAssert = false) const;
382 
384 
385 
386 
387 
388 
389 
390 
391 
392 
393 
394 
395 
396 
397 
398 
399 
400 
401 
402 
403 
404 
405 
406 
407 
408 
409 
410 
411 
412 
413 
414 
415 
416 
417 
418 
419 
420 
421 
422 
423 
424 
425 
426 
427 
428 
429 
430 
431 
432 
433 
434 
435 
436 
437 
438 
439 
440 
441 
442 
443  virtual bool terrainHeightUnderWater(const DtVector& databaseLocation,
444  double& groundHeight, DtSurface& groundSurface, DtVector& groundNormal,
445  double& waterHeight, DtSurface::DtMedium & topSurfaceMedium,
446  bool* dataAvailable = 0, bool overrideBlockingAssert = false);
448 
450 
451 
452 
453 
454 
455 
456 
457 
458 
459 
460 
461 
462 
463 
464 
465 
466 
467 
468 
469 
470 
471 
472 
473 
474 
475 
476 
477 
478 
479 
480  virtual bool terrainSurface(const DtPoint& databaseLocation,
481  DtSurface& surface, bool* dataAvailable = 0,
482  bool overrideBlockingAssert = false) const;
483  virtual bool terrainSurface(double lat, double lon, DtSurface& surface,
484  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
485  virtual bool terrainSurface(const DtVector& databaseLocation,
486  DtSurface& surface, bool* dataAvailable = 0,
487  bool overrideBlockingAssert = false) const;
488 
489  virtual DtSurface terrainSurface(const DtPoint& databaseLocation,
490  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
491  virtual DtSurface terrainSurface(double lat, double lon,
492  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
493  virtual DtSurface terrainSurface(const DtVector& databaseLocation,
494  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
496 
527  virtual bool closestTerrainLocation(const DtPoint& databaseLocation,
528  DtPoint& intersectionPoint, bool* dataAvailable = 0,
529  bool overrideBlockingAssert = false) const;
530 
533  virtual bool closestTerrainLocation(double lat, double lon,
534  DtPoint& intersectionPoint, bool* dataAvailable = 0,
535  bool overrideBlockingAssert = false) const;
536 
538  virtual bool closestTerrainLocation(const DtVector& databaseLocation,
539  DtPoint& intersectionPoint, bool* dataAvailable = 0,
540  bool overrideBlockingAssert = false) const;
541 
544  virtual bool closestTerrainLocation(const DtPoint& databaseLocation,
545  DtChordIntersectionRecord& record,
547  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
548 
550  virtual bool closestTerrainLocation(const DtPoint& databaseLocation,
551  DtChordIntersectionRecord& record, const DtString& vectorFeatureLookup,
553  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
554 
557  virtual bool closestTerrainLocation(double lat, double lon,
560  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
561 
563  virtual bool closestTerrainLocation(const DtVector& databaseLocation,
564  DtChordIntersectionRecord& record,
566  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
567 
596  virtual bool closestTerrainLocation(const DtVector& curPosition,
597  DtVector& intersection, bool ignoreWater, bool* dataAvailable = 0,
598  bool overrideBlockingAssert = false) const;
599 
630  virtual bool intersect(const DtChord& chord, DtPoint& intersectionPoint,
631  double& intersectionTime, bool* dataAvailable = 0,
632  bool overrideBlockingAssert = false) const;
633 
662  virtual bool intersect(const DtChord& chord,
666  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
667 
693  virtual bool allIntersectsAlongChord(const DtChord& chord,
696  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
697  bool overrideBlockingAssert = false) const;
698 
700 
701 
702 
703 
704 
705 
706 
707 
708 
709 
710  typedef boost::unordered_set<DtVrfObject*> DtVrfObjectUniqueContainer;
711  typedef boost::unordered_set<const DtVrfObject*> DtVrfConstObjectUniqueContainer;
712 
713  bool getVrfObjects(DtExtent& extent, DtVrfObjectUniqueContainer& objects);
714  bool getVrfObjects(DtExtent& extent, DtVrfConstObjectUniqueContainer& objects) const;
715 
716 
717  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtExtent& extent,
718  DtVrfObjectUniqueContainer& objects);
719 
720  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtExtent& extent,
721  DtVrfConstObjectUniqueContainer& objects) const;
722 
723  bool getVrfObjects(DtChord& chord, std::list<DtVrfObject*>& objects);
724  bool getVrfObjects(DtChord& chord, std::list<const DtVrfObject*>& objects) const;
725 
726  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtChord& chord,
727  std::list<DtVrfObject*>& objects);
728  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtChord& chord,
729  std::list<const DtVrfObject*>& objects) const;
731 
733 
734 
735 
736 
737 
738 
739 
740 
741 
742 
743  void visitVrfObjects(const DtExtent& extent, class DtSpatialSelectionFunctor& callback) const;
744  void visitVrfObjects(const DtChord& chord, class DtSpatialSelectionFunctor& callback) const;
746 
764  virtual void groundClamp(DtPoint& databaseCoord, float const offset = 0,
765  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
766 
784  virtual void groundClamp(DtVector& databaseCoord, float const offset = 0,
785  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
786 
791  virtual void getVrfObjectsAlongChord(const DtVector& databaseStart,
792  const DtVector& databaseEnd, std::list<const DtVrfObject*>& orderedList) const;
793 
801  virtual DtManagedObjectListConstPtr getSpatiallyManagedVrfObjectList();
802 
808  virtual bool initializeSpatialVrfObjectOrganization();
809 
821  virtual void calcSpatialMgrResolution(const DtManagedObjectListConstPtr& vrfObjList);
822 
829  virtual DtFilterFunctionPredicate getSpatialOrganizationPredicate();
830 
833  static bool spatialOrganizationObjectFilterFcn(const DtVrfObject* obj, void* usr);
834 
845  virtual bool processSpatialOrganizationObjectFilterFcn(const DtVrfObject* obj);
846 
848  static void querySpatialSubdivisionConfigurationCallback(DtSimMessage* msg, void* usr);
849  static void setSpatialSubdivisionConfigurationCallback(DtSimMessage* msg, void* usr);
850 
852  static void requestSensorDomainsCallback(DtSimMessage* msg, void* usr);
853  virtual void sendSensorDomains();
854 
857  virtual void processQuerySpatialSubdivisionConfiguration(DtSimMessage* msg);
858  virtual void processSetSpatialSubdivisionConfiguration(DtSimMessage* msg);
859 
862  virtual bool useVrfObjectSpatialSub() const;
863  virtual void setUseVrfObjectSpatialSub(bool yesOrNo);
864 
865 
868  virtual bool isSpatialMgrResolutionUserSpecified() const;
869  virtual void setSpatialMgrResolutionUserSpecified(bool yesOrNo);
870 
873  virtual unsigned int vrfObjectSpatialSubXResolution() const;
874  virtual unsigned int vrfObjectSpatialSubYResolution() const;
875  virtual unsigned int vrfObjectSpatialSubZResolution() const;
877 
882  virtual void setVrfObjectSpatialSubXResolution(unsigned int newXResolution);
883  virtual void setVrfObjectSpatialSubYResolution(unsigned int newYResolution);
884  virtual void setVrfObjectSpatialSubZResolution(unsigned int newZResolution);
886 
888 
890  virtual DtTerrainInterface* terrainInterface();
892  virtual const DtTerrainInterface* terrainInterface() const;
893 
896  virtual void setTerrainInterface(DtTerrainInterface* newTerrainDatabase);
897 
898  virtual DtSimManager* simManager();
899  virtual const DtSimManager* simManager() const;
900  virtual void setSimManager(DtSimManager* newSimManager);
901 
902  virtual DtVrfObjectManager* objectManager();
903  virtual const DtVrfObjectManager* objectManager() const;
904  virtual void setVrfObjectManager(DtVrfObjectManager* newObjectMgr);
905 
906 
907  virtual DtEnvironmentalStateManager * environmentalStateManager();
908  virtual const DtEnvironmentalStateManager * environmentalStateManager() const;
909  virtual void setEnvironmentalStateManager(DtEnvironmentalStateManager * manager);
910 
913  virtual MAKVRinTerra::DtDynamicFeatureSet* dynamicObjectFeatures() const;
914 
916 
917  virtual DtPhysicalWorldParams* parameters();
918  virtual const DtPhysicalWorldParams* parameters() const;
919 
920 
924 
925  virtual DtSensorSignatureManager* sensorSignatureManager();
926  virtual const DtSensorSignatureManager* sensorSignatureManager() const;
927 
928 
949  virtual bool checkLineOfSight(const DtVrfObject& viewingObject,
950  const DtVector& databaseViewingPoint, const DtVrfObject& targetObject,
951  bool* terrainDataAvailable = 0,
952  const DtString& featureQueryName = "default",
953  DtVector* intersectionPoint = 0) const;
954 
968  virtual bool checkLineOfSight(const DtVrfObject& viewingObject,
969  const DtVector& databaseViewingPoint, const DtVector& databaseTargetPoint,
970  bool* terrainDataAvailable = 0,
971  const DtString& featureQueryName = "default",
972  DtVector* intersectionPoint = 0) const;
973 
987  virtual bool checkLineOfSight(const DtVector& databaseViewingPoint,
988  const DtVrfObject& targetObject, bool* terrainDataAvailable = 0,
989  const DtString& featureQueryName = "default",
990  DtVector* intersectionPoint = 0) const;
991 
1002  virtual bool checkLineOfSightWithoutObjects(
1003  const DtVector& databaseViewingPoint,
1004  const DtVector& databaseTargetPoint,
1005  bool* terrainDataAvailable = 0,
1006  const DtString& featureQueryName = "default",
1007  DtVector* intersectionPoint = 0);
1008 
1009 
1026  virtual bool checkLineOfFire(const DtVrfObject& viewingObject,
1027  const DtVector& databaseViewingPoint, const DtVrfObject& targetObject,
1028  const DtVector& databaseTargetPoint,
1029  bool* terrainDataAvailable = 0,
1030  double* normIntersectDistance = 0,
1031  DtVrfObject** intersectObject = 0,
1032  DtVector* intersectingPoint = 0);
1033 
1035  virtual bool checkLineOfFire(const DtVrfObject& viewingObject,
1036  const DtVector& databaseViewingPoint, const DtVector& databaseTargetPoint,
1037  bool* terrainDataAvailable = 0,
1038  double* normIntersectDistance = 0,
1039  DtVrfObject** intersectionObject = 0,
1040  DtVector* intersectingPoint = 0);
1041 
1043  virtual bool checkLineOfFire(const DtVector& databaseViewingPoint,
1044  const DtVector& databaseTargetPoint,
1045  bool* terrainDataAvailable = 0,
1046  double* normIntersectDistance = 0,
1047  DtVrfObject** intersectionObject = 0,
1048  DtVector* intersectingPoint = 0);
1049 
1062  virtual bool checkLineOfFireWithoutObjects(
1063  const DtVector& databaseViewingPoint,
1064  const DtVector& databaseTargetPoint,
1065  bool* terrainDataAvailable = 0,
1066  double* normIntersectDistance = 0,
1067  DtVrfObject** intersectionObject = 0,
1068  DtVector* intersectingPoint = 0);
1069 
1075  static void objectAboutToBeRemovedCb(DtVrfObject * vrfObject, void * usr);
1076 
1077  virtual void expireDataLoadRequestsBeforeTime(const double& time);
1078 
1082  virtual double thermoclinePermeability(
1083  const DtPoint& startPoint, const DtPoint& endPoint) const;
1084 
1087  virtual bool checkLineOfSight(const DtLineOfSightTestContainer& losTests,
1088  DtVrfLineOfSightCheckParams& losCheckParams) const;
1089 
1090  const DtLineOfSightTestContainer& lineOfSightTestsToPerform() const
1091  {
1092  return myLineOfSightTestsToPerform;
1093  }
1094 
1099  const DtChord createWorldIntersectionChord(const DtVector& databaseLocation) const;
1100 
1101 protected:
1102 
1103 
1108 
1109  typedef std::map<DtLosTestKey, DtVrfLineOfSightFunctorSP> DtKeyedLineOfSightTestContainer;
1110  typedef DtKeyedLineOfSightTestContainer::iterator DtMasterLosTestIter;
1111  typedef DtKeyedLineOfSightTestContainer::const_iterator DtMasterLosTestConstIter;
1112 
1114 
1115  typedef DtLineOfSightTestContainer::iterator DtLosTestIter;
1116  typedef DtLineOfSightTestContainer::const_iterator DtLosTestConstIter;
1117 
1119 
1120  virtual void addInitialLosChecks();
1121 
1127 
1128  virtual void setDefaultLineOfSightTestOrder(
1129  const DtRwNLengthStringVector& lineOfSightTestsAndOrder);
1130  virtual void setLineOfSightTestOrder(
1131  const DtRwNLengthStringVector& lineOfSightTestsAndOrder);
1132 
1133 
1139  virtual void addLineOfSightTest(const DtLosTestKey&, DtVrfLineOfSightFunctorSP losTest);
1140 
1143  virtual void removeLineOfSightTest(const DtLosTestKey& testKey);
1144 
1149  virtual void performTest(const DtLosTestKey& testToRun);
1150 
1154  virtual void doNotPerformTest(const DtLosTestKey& testToRun);
1155 
1159  virtual void doNotPerformTest(DtVrfLineOfSightFunctorSP losTest);
1160 
1161 
1166  static bool canBlockLineOfSight(const DtVrfObject* object, void* usr);
1167 
1172  virtual DtVector localLineOfSightTestLocation(const DtVrfObject& object) const;
1173 
1184 
1187  virtual bool checkVrfObjectsForLOS(
1188  const DtVrfLineOfSightCheckParams& losCheckParams) const;
1189 
1192  virtual bool checkFeaturesForLOS(
1193  const DtVrfLineOfSightCheckParams& losCheckParams) const;
1194 
1197  virtual bool checkTerrainForLOS(
1198  const DtVrfLineOfSightCheckParams& losCheckParams) const;
1200 
1209  virtual bool intersectVrfObjects(const DtVrfObject* const primaryVrfObject,
1210  const DtVector& databaseStartPoint,
1211  const DtVrfObject* const secondaryVrfObject,
1212  const DtVector& databaseEndPoint,
1213  double& interxTime,
1214  DtVrfObject** intersectedObject = 0) const;
1215 
1220  virtual bool intersectVrfObjects(const DtVrfObject* const primaryVrfObject,
1221  const DtVector& databaseStartPoint, const DtVector& databaseEndPoint,
1222  double& interxTime,
1223  DtVrfObject** intersectedObject = 0) const;
1224 
1228  virtual bool intersectsVrfObject(const DtVrfObject& vrfObjectToTest,
1229  const DtVector& databaseStartPoint, const DtVector& databaseEndPoint,
1230  double& distToIntersect) const;
1231 
1232 protected:
1233 
1234  bool testInvariant() const;
1235 
1238  virtual DtSpatialVrfObjectManagerInterface* spatialVrfObjectManager();
1239  virtual const DtSpatialVrfObjectManagerInterface* spatialVrfObjectManager() const;
1240  virtual void setSpatialVrfObjectManager(DtSpatialVrfObjectManagerInterface* newSpatialVrfObjectMgr);
1241 
1245  virtual DtPhysicalWorldParams* createParameters();
1246 
1249  virtual DtSensorSignatureManager* createSensorSignatureManager();
1250 
1256  virtual void processObjectAboutToBeRemoved(DtVrfObject * vrfObject);
1257 
1260  virtual void performTerrainPreload();
1261 
1262 protected:
1263 
1265  boost::shared_ptr<MAKVRinTerra::DtDynamicFeatureSet> myDynamicObjectFeatures;
1266 
1272 
1274 
1276 
1281 
1284 
1286 
1288 
1290 
1292 
1294 
1295  boost::shared_ptr<DtVrfCallbackQueue> mySoilTypeLookupQueue;
1296 
1297  friend class IntersectVrfObjectFunctor;
1298 };
1299 
1300 inline const DtFilename& DtPhysicalWorld::physicalWorldFile() const
1301 {
1302  return myPhysicalWorldFile;
1303 }
1304 
1306 {
1307 public:
1308  DtExpireOlderThanCommand(DtPhysicalWorld* physicalWorld);
1309  virtual bool execute(const DtString& parameters);
1310  virtual DtString help(const DtString& parameters);
1311  virtual bool showInHelp() const { return true; };
1312 protected:
1313  DtPhysicalWorld* myPhysicalWorld;
1314 };

Document ID: Generated on Mon Jul 4 01:00:18 EDT 2016 from SVN revision 166489
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)