VR-Forces 4.2 Class Documentation
physicalWorld.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2009 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 <set>
19 #include <map>
21 #include "vrfobjcore/fltrFcnPred.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 
85 {
86 public:
87 
89  DtPhysicalWorld(DtSimManager* simManager);
90 
92  virtual ~DtPhysicalWorld();
93 
94 private:
96  DtPhysicalWorld(const DtPhysicalWorld& orig);
97 
99  DtPhysicalWorld& operator=(const DtPhysicalWorld& orig);
100 
101 public:
102 
111  virtual bool initialize();
112 
121  virtual bool reinitialize();
122 
124  virtual bool reset();
125 
131  virtual bool loadParametersFromFile(const DtFilename& filename);
132 
138  virtual bool loadPhysicalWorldFile(const DtFilename& filename);
139 
141  virtual void processParameters();
142 
145  const DtFilename& physicalWorldFile() const;
146 
148  virtual bool parametersLoaded() const;
149 
169  virtual bool isValidState() const;
170 
176  virtual void tick();
177 
178 
182 
188 
189  virtual Coordinate_System* coordinateSystem();
190  virtual const Coordinate_System* coordinateSystem() const;
191 
193  virtual void geocentricToDatabase(const DtVector& in, DtVector& out) const;
194 
196  virtual void geocentricToDatabase(const DtDcm& in, DtDcm& out) const;
197 
199  virtual void geocentricToDatabase(const DtVector& vIn, const DtDcm& dIn,
200  DtVector& vOut, DtDcm& dOut) const;
201 
203  virtual void geocentricToDatabase(const DtExtent& in, DtExtent& out) const;
204 
206  virtual void databaseToGeocentric(const DtVector& in, DtVector& out) const;
207 
209  virtual void databaseToGeocentric(const DtDcm& in, DtDcm& out) const;
210 
212  virtual void databaseToGeocentric(const DtVector& vIn, const DtDcm& dIn,
213  DtVector& vOut, DtDcm& dOut) const;
214 
216  virtual void databaseToGeocentric(const DtExtent& in, DtExtent& out) const;
217 
219  virtual void databaseToGeodetic(const DtVector& databasePosition, DtGeodeticCoord& geodeticPosition) const;
222  virtual void databaseToGeodetic(const DtVector& databasePosition, DtVector& geodeticPosition) const;
224  virtual void databaseToGeodetic(const DtExtent& extent, DtExtent& destExtent) const;
225 
227  virtual void geodeticToDatabase(const DtExtent& extent, DtExtent& destExtent) const;
229  virtual void geodeticToDatabase(const DtGeodeticCoord& geodeticPosition,
230  DtVector& databasePosition) const;
233  virtual void geodeticToDatabase(const DtVector& geodeticPosition,
234  DtVector& databasePosition) const;
235 
238  virtual void topoToDatabase(const DtVector& databasePosition, DtDcm& topoToDatabase) const;
241  virtual void databaseToTopo(const DtVector& databasePosition, DtDcm& databaseToTopo) const;
242 
250  virtual DtVector down(const DtVector& databasePosition) const;
251 
253 
254 
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  virtual double terrainHeight(const DtPoint& databaseLocation,
282  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
283  virtual double terrainHeight(double lat, double lon, bool* dataAvailable = 0,
284  bool overrideBlockingAssert = false) const;
285  virtual double terrainHeight(const DtVector& databaseLocation,
286  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
288 
290 
291 
292 
293 
294 
295 
296 
297 
298 
299 
300 
301 
302 
303 
304 
305 
306 
307 
308 
309 
310 
311  virtual bool terrainHeight(const DtPoint& databaseLocation, double& height,
312  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
313  virtual bool terrainHeight(double lat, double lon, double& height,
314  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
315  virtual bool terrainHeight(const DtVector& databaseLocation, double& height,
316  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
318 
320 
321 
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  virtual bool terrainHeightAndSurface(const DtPoint& databaseLocation,
357  double& height, DtSurface& surface, bool* dataAvailable = 0,
358  bool overrideBlockingAssert = false) const;
359  virtual bool terrainHeightAndSurface(double lat, double lon, double& height,
360  DtSurface& surface, bool* dataAvailable = 0,
361  bool overrideBlockingAssert = false) const;
362  virtual bool terrainHeightAndSurface(const DtVector& databaseLocation,
363  double& height, DtSurface& surface, bool* dataAvailable = 0,
364  bool overrideBlockingAssert = false) const;
365  virtual bool terrainHeightAndSurface(const DtVector& databaseLocation,
366  double& heightAtLocation, DtChordIntersectionRecord& intersectionRec,
367  DtIntersectionRecord::DtIntersectionType irtFlag =
368  DtIntersectionRecord::INT_ALL_DATA,
369  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
371 
373 
374 
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  virtual bool terrainHeightUnderWater(const DtVector& databaseLocation,
433  double& groundHeight, DtSurface& groundSurface, DtVector& groundNormal,
434  double& waterHeight, DtSurface::DtMedium & topSurfaceMedium,
435  bool* dataAvailable = 0, bool overrideBlockingAssert = false);
437 
439 
440 
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  virtual bool terrainSurface(const DtPoint& databaseLocation,
470  DtSurface& surface, bool* dataAvailable = 0,
471  bool overrideBlockingAssert = false) const;
472  virtual bool terrainSurface(double lat, double lon, DtSurface& surface,
473  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
474  virtual bool terrainSurface(const DtVector& databaseLocation,
475  DtSurface& surface, bool* dataAvailable = 0,
476  bool overrideBlockingAssert = false) const;
477 
478  virtual DtSurface terrainSurface(const DtPoint& databaseLocation,
479  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
480  virtual DtSurface terrainSurface(double lat, double lon,
481  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
482  virtual DtSurface terrainSurface(const DtVector& databaseLocation,
483  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
485 
516  virtual bool closestTerrainLocation(const DtPoint& databaseLocation,
517  DtPoint& intersectionPoint, bool* dataAvailable = 0,
518  bool overrideBlockingAssert = false) const;
519 
522  virtual bool closestTerrainLocation(double lat, double lon,
523  DtPoint& intersectionPoint, bool* dataAvailable = 0,
524  bool overrideBlockingAssert = false) const;
525 
527  virtual bool closestTerrainLocation(const DtVector& databaseLocation,
528  DtPoint& intersectionPoint, bool* dataAvailable = 0,
529  bool overrideBlockingAssert = false) const;
530 
533  virtual bool closestTerrainLocation(const DtPoint& databaseLocation,
534  DtChordIntersectionRecord& record,
535  DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA,
536  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
537 
540  virtual bool closestTerrainLocation(double lat, double lon,
541  DtChordIntersectionRecord& record,
542  DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA,
543  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
544 
546  virtual bool closestTerrainLocation(const DtVector& databaseLocation,
547  DtChordIntersectionRecord& record,
548  DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA,
549  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
550 
579  virtual bool closestTerrainLocation(const DtVector& curPosition,
580  DtVector& intersection, bool ignoreWater, bool* dataAvailable = 0,
581  bool overrideBlockingAssert = false) const;
582 
613  virtual bool intersect(const DtChord& chord, DtPoint& intersectionPoint,
614  double& intersectionTime, bool* dataAvailable = 0,
615  bool overrideBlockingAssert = false) const;
616 
645  virtual bool intersect(const DtChord& chord,
646  DtChordIntersectionRecord& record,
647  DtIntersectionRecord::DtIntersectionType irtFlag =
648  DtIntersectionRecord::INT_ALL_DATA,
649  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
650 
652 
653 
654 
655 
656 
657 
658 
659 
660 
661 
662  bool getVrfObjects(DtExtent& extent, std::set<DtVrfObject*>& objects);
663  bool getVrfObjects(DtExtent& extent, std::set<const DtVrfObject*>& objects) const;
664 
665 
666  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtExtent& extent,
667  std::set<DtVrfObject*>& objects);
668 
669  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtExtent& extent,
670  std::set<const DtVrfObject*>& objects) const;
671 
672  bool getVrfObjects(DtChord& chord, std::list<DtVrfObject*>& objects);
673  bool getVrfObjects(DtChord& chord, std::list<const DtVrfObject*>& objects) const;
674 
675  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtChord& chord,
676  std::list<DtVrfObject*>& objects);
677  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtChord& chord,
678  std::list<const DtVrfObject*>& objects) const;
680 
682 
683 
684 
685 
686 
687 
688 
689 
690 
691 
692  void visitVrfObjects(const DtExtent& extent, class DtSpatialSelectionFunctor& callback) const;
693  void visitVrfObjects(const DtChord& chord, class DtSpatialSelectionFunctor& callback) const;
695 
713  virtual void groundClamp(DtPoint& databaseCoord, float const offset = 0,
714  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
715 
733  virtual void groundClamp(DtVector& databaseCoord, float const offset = 0,
734  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
735 
740  virtual void getVrfObjectsAlongChord(const DtVector& databaseStart,
741  const DtVector& databaseEnd, std::list<const DtVrfObject*>& orderedList) const;
742 
750  virtual DtManagedObjectListConstPtr getSpatiallyManagedVrfObjectList();
751 
757  virtual bool initializeSpatialVrfObjectOrganization();
758 
770  virtual void calcSpatialMgrResolution(const DtManagedObjectListConstPtr& vrfObjList);
771 
778  virtual DtFilterFunctionPredicate getSpatialOrganizationPredicate();
779 
782  static bool spatialOrganizationObjectFilterFcn(const DtVrfObject* obj, void* usr);
783 
794  virtual bool processSpatialOrganizationObjectFilterFcn(const DtVrfObject* obj);
795 
797  static void querySpatialSubdivisionConfigurationCallback(DtSimMessage* msg, void* usr);
798  static void setSpatialSubdivisionConfigurationCallback(DtSimMessage* msg, void* usr);
799 
802  virtual void processQuerySpatialSubdivisionConfiguration(DtSimMessage* msg);
803  virtual void processSetSpatialSubdivisionConfiguration(DtSimMessage* msg);
804 
807  virtual bool useVrfObjectSpatialSub() const;
808  virtual void setUseVrfObjectSpatialSub(bool yesOrNo);
809 
810 
813  virtual bool isSpatialMgrResolutionUserSpecified() const;
814  virtual void setSpatialMgrResolutionUserSpecified(bool yesOrNo);
815 
818  virtual unsigned int vrfObjectSpatialSubXResolution() const;
819  virtual unsigned int vrfObjectSpatialSubYResolution() const;
820  virtual unsigned int vrfObjectSpatialSubZResolution() const;
822 
827  virtual void setVrfObjectSpatialSubXResolution(unsigned int newXResolution);
828  virtual void setVrfObjectSpatialSubYResolution(unsigned int newYResolution);
829  virtual void setVrfObjectSpatialSubZResolution(unsigned int newZResolution);
831 
833 
835  virtual DtTerrainInterface* terrainInterface();
837  virtual const DtTerrainInterface* terrainInterface() const;
838 
841  virtual void setTerrainInterface(DtTerrainInterface* newTerrainDatabase);
842 
843  virtual DtSimManager* simManager();
844  virtual const DtSimManager* simManager() const;
845  virtual void setSimManager(DtSimManager* newSimManager);
846 
847  virtual DtVrfObjectManager* objectManager();
848  virtual const DtVrfObjectManager* objectManager() const;
849  virtual void setVrfObjectManager(DtVrfObjectManager* newObjectMgr);
850 
851 
852  virtual DtEnvironmentalStateManager * environmentalStateManager();
853  virtual const DtEnvironmentalStateManager * environmentalStateManager() const;
854  virtual void setEnvironmentalStateManager(DtEnvironmentalStateManager * manager);
855 
856 
858 
859  virtual DtPhysicalWorldParams* parameters();
860  virtual const DtPhysicalWorldParams* parameters() const;
861 
862 
866 
867  virtual DtSensorSignatureManager* sensorSignatureManager();
868  virtual const DtSensorSignatureManager* sensorSignatureManager() const;
869 
870 
885  virtual bool checkLineOfSight(const DtVrfObject& viewingObject,
886  const DtVector& databaseViewingPoint, const DtVrfObject& targetObject,
887  bool* terrainDataAvailable = 0) const;
888 
902  virtual bool checkLineOfSight(const DtVrfObject& viewingObject,
903  const DtVector& databaseViewingPoint, const DtVector& databaseTargetPoint,
904  bool* terrainDataAvailable = 0) const;
905 
919  virtual bool checkLineOfSight(const DtVector& databaseViewingPoint,
920  const DtVrfObject& targetObject, bool* terrainDataAvailable = 0) const;
921 
932  virtual bool checkLineOfSightWithoutObjects(
933  const DtVector& databaseViewingPoint,
934  const DtVector& databaseTargetPoint,
935  bool* terrainDataAvailable = 0);
936 
937 
943  static void objectAboutToBeRemovedCb(DtVrfObject * vrfObject, void * usr);
944 
945  virtual void expireDataLoadRequestsBeforeTime(const double& time);
946 
950  virtual double thermoclinePermeability(
951  const DtPoint& startPoint, const DtPoint& endPoint) const;
952 
953 protected:
954 
955 
960 
961  typedef std::map<DtLosTestKey, DtVrfLineOfSightFunctorSP> DtKeyedLineOfSightTestContainer;
962  typedef DtKeyedLineOfSightTestContainer::iterator DtMasterLosTestIter;
963  typedef DtKeyedLineOfSightTestContainer::const_iterator DtMasterLosTestConstIter;
964 
966 
967  typedef std::list<DtVrfLineOfSightFunctorSP> DtLineOfSightTestContainer;
968  typedef DtLineOfSightTestContainer::iterator DtLosTestIter;
969  typedef DtLineOfSightTestContainer::const_iterator DtLosTestConstIter;
970 
972 
973  virtual void addInitialLosChecks();
974 
980 
981  virtual void setDefaultLineOfSightTestOrder(
982  const DtRwNLengthStringVector& lineOfSightTestsAndOrder);
983  virtual void setLineOfSightTestOrder(
984  const DtRwNLengthStringVector& lineOfSightTestsAndOrder);
985 
986 
992  virtual void addLineOfSightTest(const DtLosTestKey&, DtVrfLineOfSightFunctorSP losTest);
993 
996  virtual void removeLineOfSightTest(const DtLosTestKey& testKey);
997 
1002  virtual void performTest(const DtLosTestKey& testToRun);
1003 
1007  virtual void doNotPerformTest(const DtLosTestKey& testToRun);
1008 
1012  virtual void doNotPerformTest(DtVrfLineOfSightFunctorSP losTest);
1013 
1014 
1019  static bool canBlockLineOfSight(const DtVrfObject* object, void* usr);
1020 
1023  virtual bool checkLineOfSight(const DtLineOfSightTestContainer& losTests,
1024  const DtVrfLineOfSightCheckParams& losCheckParams) const;
1025 
1030  virtual DtVector localLineOfSightTestLocation(const DtVrfObject& object) const;
1031 
1034  virtual bool checkVrfObjectsForLOS(
1035  const DtVrfLineOfSightCheckParams& losCheckParams) const;
1036 
1039  virtual bool checkFeaturesForLOS(
1040  const DtVrfLineOfSightCheckParams& losCheckParams) const;
1041 
1044  virtual bool checkTerrainForLOS(
1045  const DtVrfLineOfSightCheckParams& losCheckParams) const;
1046 
1051  virtual bool intersectVrfObjects(const DtVrfObject* const primaryVrfObject,
1052  const DtVector& databaseStartPoint,
1053  const DtVrfObject* const secondaryVrfObject) const;
1054 
1058  virtual bool intersectVrfObjects(const DtVrfObject* const primaryVrfObject,
1059  const DtVector& databaseStartPoint, const DtVector& databaseEndPoint) const;
1060 
1064  virtual bool intersectsVrfObject(const DtVrfObject& vrfObjectToTest,
1065  const DtVector& databaseStartPoint, const DtVector& databaseEndPoint,
1066  double& distToIntersect) const;
1067 
1068 protected:
1069 
1070  bool testInvariant() const;
1071 
1076  const DtChord createWorldIntersectionChord(const DtVector& databaseLocation) const;
1077 
1080  virtual DtSpatialVrfObjectManagerInterface* spatialVrfObjectManager();
1081  virtual const DtSpatialVrfObjectManagerInterface* spatialVrfObjectManager() const;
1082  virtual void setSpatialVrfObjectManager(DtSpatialVrfObjectManagerInterface* newSpatialVrfObjectMgr);
1083 
1087  virtual DtPhysicalWorldParams* createParameters();
1088 
1091  virtual DtSensorSignatureManager* createSensorSignatureManager();
1092 
1098  virtual void processObjectAboutToBeRemoved(DtVrfObject * vrfObject);
1099 
1102  virtual void performTerrainPreload();
1103 
1104 protected:
1105 
1107 
1113 
1115 
1117 
1122 
1125 
1127 
1129 
1131 
1133 
1135 
1136  std::auto_ptr<MAKVRinTerra::DtObstacleFeatureSet> myLOSFeatures;
1137 
1138  friend class IntersectVrfObjectFunctor;
1139 };
1140 
1141 inline const DtFilename& DtPhysicalWorld::physicalWorldFile() const
1142 {
1143  return myPhysicalWorldFile;
1144 }
1145 
1147 {
1148 public:
1149  DtExpireOlderThanCommand(DtPhysicalWorld* physicalWorld);
1150  virtual bool execute(const DtString& parameters);
1151  virtual DtString help(const DtString& parameters);
1152  virtual bool showInHelp() const { return true; };
1153 protected:
1154  DtPhysicalWorld* myPhysicalWorld;
1155 };

Document ID: Generated on Sun Nov 24 19:49:21 EST 2013 from SVN revision 133924
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)