VR-Forces 4.3.1 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 
13 #include <geometry/intersectionRecord.h>
14 #include <geometry/point.h>
15 #include <vlutil/vlConfig.h>
16 #include <vlutil/vlFilename.h>
17 #include <list>
18 #include <map>
19 #include <boost/unordered_set.hpp>
24 #include "features/areaFeature.h"
25 #include "geometry/surface.h"
26 
27 class DtSimManager;
28 
29 class DtFilename;
30 class DtGeodeticCoord;
31 class Coordinate_System;
32 class DtTerrainInterface;
33 class DtVrfObjectManager;
36 class DtExtent;
37 class DtChord;
38 class DtSurface;
39 
40 class DtVector;
41 class DtPoint;
42 
44 
45 class DtVrfObject;
46 class DtDcm;
47 class DtChordIntersectionRecord;
48 class DtChordIntersectRecordList;
49 class DtSimMessage;
54 
56 class DtCallbackQueue;
57 
86 {
87 public:
88 
90  DtPhysicalWorld(DtSimManager* simManager);
91 
93  virtual ~DtPhysicalWorld();
94 
95 private:
97  DtPhysicalWorld(const DtPhysicalWorld& orig);
98 
100  DtPhysicalWorld& operator=(const DtPhysicalWorld& orig);
101 
102 public:
103  typedef std::list<DtVrfLineOfSightFunctorSP> DtLineOfSightTestContainer;
104 
113  virtual bool initialize();
114 
123  virtual bool reinitialize();
124 
126  virtual bool reset();
127 
133  virtual bool loadParametersFromFile(const DtFilename& filename);
134 
140  virtual bool loadPhysicalWorldFile(const DtFilename& filename);
141 
143  virtual void processParameters();
144 
147  const DtFilename& physicalWorldFile() const;
148 
150  virtual bool parametersLoaded() const;
151 
171  virtual bool isValidState() const;
172 
178  virtual void tick();
179 
180 
184 
190 
191  virtual Coordinate_System* coordinateSystem();
192  virtual const Coordinate_System* coordinateSystem() const;
193 
195  virtual void geocentricToDatabase(const DtVector& in, DtVector& out) const;
196 
198  virtual void geocentricToDatabase(const DtDcm& in, DtDcm& out) const;
199 
201  virtual void geocentricToDatabase(const DtVector& vIn, const DtDcm& dIn,
202  DtVector& vOut, DtDcm& dOut) const;
203 
205  virtual void geocentricToDatabase(const DtExtent& in, DtExtent& out) const;
206 
208  virtual void databaseToGeocentric(const DtVector& in, DtVector& out) const;
209 
211  virtual void databaseToGeocentric(const DtDcm& in, DtDcm& out) const;
212 
214  virtual void databaseToGeocentric(const DtVector& vIn, const DtDcm& dIn,
215  DtVector& vOut, DtDcm& dOut) const;
216 
218  virtual void databaseToGeocentric(const DtExtent& in, DtExtent& out) const;
219 
221  virtual void databaseToGeodetic(const DtVector& databasePosition, DtGeodeticCoord& geodeticPosition) const;
224  virtual void databaseToGeodetic(const DtVector& databasePosition, DtVector& geodeticPosition) const;
226  virtual void databaseToGeodetic(const DtExtent& extent, DtExtent& destExtent) const;
227 
229  virtual void geodeticToDatabase(const DtExtent& extent, DtExtent& destExtent) const;
231  virtual void geodeticToDatabase(const DtGeodeticCoord& geodeticPosition,
232  DtVector& databasePosition) const;
235  virtual void geodeticToDatabase(const DtVector& geodeticPosition,
236  DtVector& databasePosition) const;
237 
240  virtual void topoToDatabase(const DtVector& databasePosition, DtDcm& topoToDatabase) const;
243  virtual void databaseToTopo(const DtVector& databasePosition, DtDcm& databaseToTopo) const;
244 
252  virtual DtVector down(const DtVector& databasePosition) const;
253 
255 
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  virtual double terrainHeight(const DtPoint& databaseLocation,
284  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
285  virtual double terrainHeight(double lat, double lon, bool* dataAvailable = 0,
286  bool overrideBlockingAssert = false) const;
287  virtual double terrainHeight(const DtVector& databaseLocation,
288  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
290 
292 
293 
294 
295 
296 
297 
298 
299 
300 
301 
302 
303 
304 
305 
306 
307 
308 
309 
310 
311 
312 
313  virtual bool terrainHeight(const DtPoint& databaseLocation, double& height,
314  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
315  virtual bool terrainHeight(double lat, double lon, double& height,
316  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
317  virtual bool terrainHeight(const DtVector& databaseLocation, double& height,
318  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
320 
322 
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  virtual bool terrainHeightAndSurface(const DtPoint& databaseLocation,
359  double& height, DtSurface& surface, bool* dataAvailable = 0,
360  bool overrideBlockingAssert = false) const;
361  virtual bool terrainHeightAndSurface(double lat, double lon, double& height,
362  DtSurface& surface, bool* dataAvailable = 0,
363  bool overrideBlockingAssert = false) const;
364  virtual bool terrainHeightAndSurface(const DtVector& databaseLocation,
365  double& height, DtSurface& surface, bool* dataAvailable = 0,
366  bool overrideBlockingAssert = false) const;
367  virtual bool terrainHeightAndSurface(const DtVector& databaseLocation,
368  double& heightAtLocation, DtChordIntersectionRecord& intersectionRec,
369  DtIntersectionRecord::DtIntersectionType irtFlag =
370  DtIntersectionRecord::INT_ALL_DATA,
371  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
373 
375 
376 
377 
378 
379 
380 
381 
382 
383 
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  virtual bool terrainHeightUnderWater(const DtVector& databaseLocation,
435  double& groundHeight, DtSurface& groundSurface, DtVector& groundNormal,
436  double& waterHeight, DtSurface::DtMedium & topSurfaceMedium,
437  bool* dataAvailable = 0, bool overrideBlockingAssert = false);
439 
441 
442 
443 
444 
445 
446 
447 
448 
449 
450 
451 
452 
453 
454 
455 
456 
457 
458 
459 
460 
461 
462 
463 
464 
465 
466 
467 
468 
469 
470 
471  virtual bool terrainSurface(const DtPoint& databaseLocation,
472  DtSurface& surface, bool* dataAvailable = 0,
473  bool overrideBlockingAssert = false) const;
474  virtual bool terrainSurface(double lat, double lon, DtSurface& surface,
475  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
476  virtual bool terrainSurface(const DtVector& databaseLocation,
477  DtSurface& surface, bool* dataAvailable = 0,
478  bool overrideBlockingAssert = false) const;
479 
480  virtual DtSurface terrainSurface(const DtPoint& databaseLocation,
481  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
482  virtual DtSurface terrainSurface(double lat, double lon,
483  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
484  virtual DtSurface terrainSurface(const DtVector& databaseLocation,
485  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
487 
518  virtual bool closestTerrainLocation(const DtPoint& databaseLocation,
519  DtPoint& intersectionPoint, bool* dataAvailable = 0,
520  bool overrideBlockingAssert = false) const;
521 
524  virtual bool closestTerrainLocation(double lat, double lon,
525  DtPoint& intersectionPoint, bool* dataAvailable = 0,
526  bool overrideBlockingAssert = false) const;
527 
529  virtual bool closestTerrainLocation(const DtVector& databaseLocation,
530  DtPoint& intersectionPoint, bool* dataAvailable = 0,
531  bool overrideBlockingAssert = false) const;
532 
535  virtual bool closestTerrainLocation(const DtPoint& databaseLocation,
536  DtChordIntersectionRecord& record,
537  DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA,
538  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
539 
541  virtual bool closestTerrainLocation(const DtPoint& databaseLocation,
542  DtChordIntersectionRecord& record, const DtString& vectorFeatureLookup,
543  DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA,
544  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
545 
548  virtual bool closestTerrainLocation(double lat, double lon,
549  DtChordIntersectionRecord& record,
550  DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA,
551  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
552 
554  virtual bool closestTerrainLocation(const DtVector& databaseLocation,
555  DtChordIntersectionRecord& record,
556  DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA,
557  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
558 
587  virtual bool closestTerrainLocation(const DtVector& curPosition,
588  DtVector& intersection, bool ignoreWater, bool* dataAvailable = 0,
589  bool overrideBlockingAssert = false) const;
590 
621  virtual bool intersect(const DtChord& chord, DtPoint& intersectionPoint,
622  double& intersectionTime, bool* dataAvailable = 0,
623  bool overrideBlockingAssert = false) const;
624 
653  virtual bool intersect(const DtChord& chord,
654  DtChordIntersectionRecord& record,
655  DtIntersectionRecord::DtIntersectionType irtFlag =
656  DtIntersectionRecord::INT_ALL_DATA,
657  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
658 
684  virtual bool allIntersectsAlongChord(const DtChord& chord,
685  DtChordIntersectRecordList& intList,
686  DtIntersectionRecord::DtIntersectionType irtFlag =
687  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
688  bool overrideBlockingAssert = false) const;
689 
691 
692 
693 
694 
695 
696 
697 
698 
699 
700 
701  typedef boost::unordered_set<DtVrfObject*> DtVrfObjectUniqueContainer;
702  typedef boost::unordered_set<const DtVrfObject*> DtVrfConstObjectUniqueContainer;
703 
704  bool getVrfObjects(DtExtent& extent, DtVrfObjectUniqueContainer& objects);
705  bool getVrfObjects(DtExtent& extent, DtVrfConstObjectUniqueContainer& objects) const;
706 
707 
708  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtExtent& extent,
709  DtVrfObjectUniqueContainer& objects);
710 
711  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtExtent& extent,
712  DtVrfConstObjectUniqueContainer& objects) const;
713 
714  bool getVrfObjects(DtChord& chord, std::list<DtVrfObject*>& objects);
715  bool getVrfObjects(DtChord& chord, std::list<const DtVrfObject*>& objects) const;
716 
717  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtChord& chord,
718  std::list<DtVrfObject*>& objects);
719  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtChord& chord,
720  std::list<const DtVrfObject*>& objects) const;
722 
724 
725 
726 
727 
728 
729 
730 
731 
732 
733 
734  void visitVrfObjects(const DtExtent& extent, class DtSpatialSelectionFunctor& callback) const;
735  void visitVrfObjects(const DtChord& chord, class DtSpatialSelectionFunctor& callback) const;
737 
755  virtual void groundClamp(DtPoint& databaseCoord, float const offset = 0,
756  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
757 
775  virtual void groundClamp(DtVector& databaseCoord, float const offset = 0,
776  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
777 
782  virtual void getVrfObjectsAlongChord(const DtVector& databaseStart,
783  const DtVector& databaseEnd, std::list<const DtVrfObject*>& orderedList) const;
784 
792  virtual DtManagedObjectListConstPtr getSpatiallyManagedVrfObjectList();
793 
799  virtual bool initializeSpatialVrfObjectOrganization();
800 
812  virtual void calcSpatialMgrResolution(const DtManagedObjectListConstPtr& vrfObjList);
813 
820  virtual DtFilterFunctionPredicate getSpatialOrganizationPredicate();
821 
824  static bool spatialOrganizationObjectFilterFcn(const DtVrfObject* obj, void* usr);
825 
836  virtual bool processSpatialOrganizationObjectFilterFcn(const DtVrfObject* obj);
837 
839  static void querySpatialSubdivisionConfigurationCallback(DtSimMessage* msg, void* usr);
840  static void setSpatialSubdivisionConfigurationCallback(DtSimMessage* msg, void* usr);
841 
843  static void requestSensorDomainsCallback(DtSimMessage* msg, void* usr);
844  virtual void sendSensorDomains();
845 
848  virtual void processQuerySpatialSubdivisionConfiguration(DtSimMessage* msg);
849  virtual void processSetSpatialSubdivisionConfiguration(DtSimMessage* msg);
850 
853  virtual bool useVrfObjectSpatialSub() const;
854  virtual void setUseVrfObjectSpatialSub(bool yesOrNo);
855 
856 
859  virtual bool isSpatialMgrResolutionUserSpecified() const;
860  virtual void setSpatialMgrResolutionUserSpecified(bool yesOrNo);
861 
864  virtual unsigned int vrfObjectSpatialSubXResolution() const;
865  virtual unsigned int vrfObjectSpatialSubYResolution() const;
866  virtual unsigned int vrfObjectSpatialSubZResolution() const;
868 
873  virtual void setVrfObjectSpatialSubXResolution(unsigned int newXResolution);
874  virtual void setVrfObjectSpatialSubYResolution(unsigned int newYResolution);
875  virtual void setVrfObjectSpatialSubZResolution(unsigned int newZResolution);
877 
879 
881  virtual DtTerrainInterface* terrainInterface();
883  virtual const DtTerrainInterface* terrainInterface() const;
884 
887  virtual void setTerrainInterface(DtTerrainInterface* newTerrainDatabase);
888 
889  virtual DtSimManager* simManager();
890  virtual const DtSimManager* simManager() const;
891  virtual void setSimManager(DtSimManager* newSimManager);
892 
893  virtual DtVrfObjectManager* objectManager();
894  virtual const DtVrfObjectManager* objectManager() const;
895  virtual void setVrfObjectManager(DtVrfObjectManager* newObjectMgr);
896 
897 
898  virtual DtEnvironmentalStateManager * environmentalStateManager();
899  virtual const DtEnvironmentalStateManager * environmentalStateManager() const;
900  virtual void setEnvironmentalStateManager(DtEnvironmentalStateManager * manager);
901 
902 
904 
905  virtual DtPhysicalWorldParams* parameters();
906  virtual const DtPhysicalWorldParams* parameters() const;
907 
908 
912 
913  virtual DtSensorSignatureManager* sensorSignatureManager();
914  virtual const DtSensorSignatureManager* sensorSignatureManager() const;
915 
916 
935  virtual bool checkLineOfSight(const DtVrfObject& viewingObject,
936  const DtVector& databaseViewingPoint, const DtVrfObject& targetObject,
937  bool* terrainDataAvailable = 0,
938  const DtString& featureQueryName = "default") const;
939 
953  virtual bool checkLineOfSight(const DtVrfObject& viewingObject,
954  const DtVector& databaseViewingPoint, const DtVector& databaseTargetPoint,
955  bool* terrainDataAvailable = 0,
956  const DtString& featureQueryName = "default") const;
957 
971  virtual bool checkLineOfSight(const DtVector& databaseViewingPoint,
972  const DtVrfObject& targetObject, bool* terrainDataAvailable = 0,
973  const DtString& featureQueryName = "default") const;
974 
985  virtual bool checkLineOfSightWithoutObjects(
986  const DtVector& databaseViewingPoint,
987  const DtVector& databaseTargetPoint,
988  bool* terrainDataAvailable = 0,
989  const DtString& featureQueryName = "default");
990 
991 
997  static void objectAboutToBeRemovedCb(DtVrfObject * vrfObject, void * usr);
998 
999  virtual void expireDataLoadRequestsBeforeTime(const double& time);
1000 
1004  virtual double thermoclinePermeability(
1005  const DtPoint& startPoint, const DtPoint& endPoint) const;
1006 
1009  virtual bool checkLineOfSight(const DtLineOfSightTestContainer& losTests,
1010  const DtVrfLineOfSightCheckParams& losCheckParams) const;
1011 
1012  const DtLineOfSightTestContainer& lineOfSightTestsToPerform() const
1013  {
1014  return myLineOfSightTestsToPerform;
1015  }
1016 
1021  const DtChord createWorldIntersectionChord(const DtVector& databaseLocation) const;
1022 
1023 protected:
1024 
1025 
1030 
1031  typedef std::map<DtLosTestKey, DtVrfLineOfSightFunctorSP> DtKeyedLineOfSightTestContainer;
1032  typedef DtKeyedLineOfSightTestContainer::iterator DtMasterLosTestIter;
1033  typedef DtKeyedLineOfSightTestContainer::const_iterator DtMasterLosTestConstIter;
1034 
1036 
1037  typedef DtLineOfSightTestContainer::iterator DtLosTestIter;
1038  typedef DtLineOfSightTestContainer::const_iterator DtLosTestConstIter;
1039 
1041 
1042  virtual void addInitialLosChecks();
1043 
1049 
1050  virtual void setDefaultLineOfSightTestOrder(
1051  const DtRwNLengthStringVector& lineOfSightTestsAndOrder);
1052  virtual void setLineOfSightTestOrder(
1053  const DtRwNLengthStringVector& lineOfSightTestsAndOrder);
1054 
1055 
1061  virtual void addLineOfSightTest(const DtLosTestKey&, DtVrfLineOfSightFunctorSP losTest);
1062 
1065  virtual void removeLineOfSightTest(const DtLosTestKey& testKey);
1066 
1071  virtual void performTest(const DtLosTestKey& testToRun);
1072 
1076  virtual void doNotPerformTest(const DtLosTestKey& testToRun);
1077 
1081  virtual void doNotPerformTest(DtVrfLineOfSightFunctorSP losTest);
1082 
1083 
1088  static bool canBlockLineOfSight(const DtVrfObject* object, void* usr);
1089 
1094  virtual DtVector localLineOfSightTestLocation(const DtVrfObject& object) const;
1095 
1098  virtual bool checkVrfObjectsForLOS(
1099  const DtVrfLineOfSightCheckParams& losCheckParams) const;
1100 
1103  virtual bool checkFeaturesForLOS(
1104  const DtVrfLineOfSightCheckParams& losCheckParams) const;
1105 
1108  virtual bool checkTerrainForLOS(
1109  const DtVrfLineOfSightCheckParams& losCheckParams) const;
1110 
1118  virtual bool intersectVrfObjects(const DtVrfObject* const primaryVrfObject,
1119  const DtVector& databaseStartPoint,
1120  const DtVrfObject* const secondaryVrfObject,
1121  const DtVector& databaseEndPoint = DtVector::zero(),
1122  DtVrfObject** intersectedObject = 0) const;
1123 
1128  virtual bool intersectVrfObjects(const DtVrfObject* const primaryVrfObject,
1129  const DtVector& databaseStartPoint, const DtVector& databaseEndPoint,
1130  DtVrfObject** intersectedObject = 0) const;
1131 
1135  virtual bool intersectsVrfObject(const DtVrfObject& vrfObjectToTest,
1136  const DtVector& databaseStartPoint, const DtVector& databaseEndPoint,
1137  double& distToIntersect) const;
1138 
1139 protected:
1140 
1141  bool testInvariant() const;
1142 
1145  virtual DtSpatialVrfObjectManagerInterface* spatialVrfObjectManager();
1146  virtual const DtSpatialVrfObjectManagerInterface* spatialVrfObjectManager() const;
1147  virtual void setSpatialVrfObjectManager(DtSpatialVrfObjectManagerInterface* newSpatialVrfObjectMgr);
1148 
1152  virtual DtPhysicalWorldParams* createParameters();
1153 
1156  virtual DtSensorSignatureManager* createSensorSignatureManager();
1157 
1163  virtual void processObjectAboutToBeRemoved(DtVrfObject * vrfObject);
1164 
1167  virtual void performTerrainPreload();
1168 
1169 protected:
1170 
1172 
1178 
1180 
1182 
1187 
1190 
1192 
1194 
1196 
1198 
1200 
1201  boost::shared_ptr<DtCallbackQueue> mySoilTypeLookupQueue;
1202 
1203  friend class IntersectVrfObjectFunctor;
1204 };
1205 
1206 inline const DtFilename& DtPhysicalWorld::physicalWorldFile() const
1207 {
1208  return myPhysicalWorldFile;
1209 }
1210 
1212 {
1213 public:
1214  DtExpireOlderThanCommand(DtPhysicalWorld* physicalWorld);
1215  virtual bool execute(const DtString& parameters);
1216  virtual DtString help(const DtString& parameters);
1217  virtual bool showInHelp() const { return true; };
1218 protected:
1219  DtPhysicalWorld* myPhysicalWorld;
1220 };

Document ID: Generated on Wed Jul 29 00:55:00 EDT 2015 from SVN revision 155257
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)