VR-Forces 4.1.1 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 
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 
26 class DtSimManager;
27 
28 class DtFilename;
29 class DtGeodeticCoord;
30 class Coordinate_System;
31 class DtTerrainInterface;
32 class DtVrfObjectManager;
35 class DtExtent;
36 class DtChord;
37 class DtSurface;
38 
39 class DtVector;
40 class DtPoint;
41 
43 
44 class DtVrfObject;
45 class DtDcm;
48 class DtSimMessage;
53 
55 
84 {
85 public:
86 
88  DtPhysicalWorld(DtSimManager* simManager);
89 
91  virtual ~DtPhysicalWorld();
92 
93 private:
95  DtPhysicalWorld(const DtPhysicalWorld& orig);
96 
98  DtPhysicalWorld& operator=(const DtPhysicalWorld& orig);
99 
100 public:
101 
110  virtual bool initialize();
111 
120  virtual bool reinitialize();
121 
123  virtual bool reset();
124 
130  virtual bool loadParametersFromFile(const DtFilename& filename);
131 
137  virtual bool loadPhysicalWorldFile(const DtFilename& filename);
138 
140  virtual void processParameters();
141 
144  const DtFilename& physicalWorldFile() const;
145 
147  virtual bool parametersLoaded() const;
148 
168  virtual bool isValidState() const;
169 
175  virtual void tick();
176 
177 
181 
187 
188  virtual Coordinate_System* coordinateSystem();
189  virtual const Coordinate_System* coordinateSystem() const;
190 
192  virtual void geocentricToDatabase(const DtVector& in, DtVector& out) const;
193 
195  virtual void geocentricToDatabase(const DtDcm& in, DtDcm& out) const;
196 
198  virtual void geocentricToDatabase(const DtVector& vIn, const DtDcm& dIn,
199  DtVector& vOut, DtDcm& dOut) const;
200 
202  virtual void geocentricToDatabase(const DtExtent& in, DtExtent& out) const;
203 
205  virtual void databaseToGeocentric(const DtVector& in, DtVector& out) const;
206 
208  virtual void databaseToGeocentric(const DtDcm& in, DtDcm& out) const;
209 
211  virtual void databaseToGeocentric(const DtVector& vIn, const DtDcm& dIn,
212  DtVector& vOut, DtDcm& dOut) const;
213 
215  virtual void databaseToGeocentric(const DtExtent& in, DtExtent& out) const;
216 
218  virtual void databaseToGeodetic(const DtVector& databasePosition, DtGeodeticCoord& geodeticPosition) const;
221  virtual void databaseToGeodetic(const DtVector& databasePosition, DtVector& geodeticPosition) const;
223  virtual void databaseToGeodetic(const DtExtent& extent, DtExtent& destExtent) const;
224 
226  virtual void geodeticToDatabase(const DtExtent& extent, DtExtent& destExtent) const;
228  virtual void geodeticToDatabase(const DtGeodeticCoord& geodeticPosition,
229  DtVector& databasePosition) const;
232  virtual void geodeticToDatabase(const DtVector& geodeticPosition,
233  DtVector& databasePosition) const;
234 
237  virtual void topoToDatabase(const DtVector& databasePosition, DtDcm& topoToDatabase) const;
240  virtual void databaseToTopo(const DtVector& databasePosition, DtDcm& databaseToTopo) const;
241 
249  virtual DtVector down(const DtVector& databasePosition) const;
250 
252 
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  virtual double terrainHeight(const DtPoint& databaseLocation,
281  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
282  virtual double terrainHeight(double lat, double lon, bool* dataAvailable = 0,
283  bool overrideBlockingAssert = false) const;
284  virtual double terrainHeight(const DtVector& databaseLocation,
285  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
287 
289 
290 
291 
292 
293 
294 
295 
296 
297 
298 
299 
300 
301 
302 
303 
304 
305 
306 
307 
308 
309 
310  virtual bool terrainHeight(const DtPoint& databaseLocation, double& height,
311  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
312  virtual bool terrainHeight(double lat, double lon, double& height,
313  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
314  virtual bool terrainHeight(const DtVector& databaseLocation, double& height,
315  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
317 
319 
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  virtual bool terrainHeightAndSurface(const DtPoint& databaseLocation,
356  double& height, DtSurface& surface, bool* dataAvailable = 0,
357  bool overrideBlockingAssert = false) const;
358  virtual bool terrainHeightAndSurface(double lat, double lon, double& height,
359  DtSurface& surface, bool* dataAvailable = 0,
360  bool overrideBlockingAssert = false) const;
361  virtual bool terrainHeightAndSurface(const DtVector& databaseLocation,
362  double& height, DtSurface& surface, bool* dataAvailable = 0,
363  bool overrideBlockingAssert = false) const;
364  virtual bool terrainHeightAndSurface(const DtVector& databaseLocation,
365  double& heightAtLocation, DtChordIntersectionRecord& intersectionRec,
368  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
370 
372 
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  virtual bool terrainSurface(const DtPoint& databaseLocation,
403  DtSurface& surface, bool* dataAvailable = 0,
404  bool overrideBlockingAssert = false) const;
405  virtual bool terrainSurface(double lat, double lon, DtSurface& surface,
406  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
407  virtual bool terrainSurface(const DtVector& databaseLocation,
408  DtSurface& surface, bool* dataAvailable = 0,
409  bool overrideBlockingAssert = false) const;
410 
411  virtual DtSurface terrainSurface(const DtPoint& databaseLocation,
412  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
413  virtual DtSurface terrainSurface(double lat, double lon,
414  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
415  virtual DtSurface terrainSurface(const DtVector& databaseLocation,
416  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
418 
449  virtual bool closestTerrainLocation(const DtPoint& databaseLocation,
450  DtPoint& intersectionPoint, bool* dataAvailable = 0,
451  bool overrideBlockingAssert = false) const;
452 
455  virtual bool closestTerrainLocation(double lat, double lon,
456  DtPoint& intersectionPoint, bool* dataAvailable = 0,
457  bool overrideBlockingAssert = false) const;
458 
460  virtual bool closestTerrainLocation(const DtVector& databaseLocation,
461  DtPoint& intersectionPoint, bool* dataAvailable = 0,
462  bool overrideBlockingAssert = false) const;
463 
466  virtual bool closestTerrainLocation(const DtPoint& databaseLocation,
467  DtChordIntersectionRecord& record,
469  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
470 
473  virtual bool closestTerrainLocation(double lat, double lon,
476  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
477 
479  virtual bool closestTerrainLocation(const DtVector& databaseLocation,
480  DtChordIntersectionRecord& record,
482  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
483 
512  virtual bool closestTerrainLocation(const DtVector& curPosition,
513  DtVector& intersection, bool ignoreWater, bool* dataAvailable = 0,
514  bool overrideBlockingAssert = false) const;
515 
546  virtual bool intersect(const DtChord& chord, DtPoint& intersectionPoint,
547  double& intersectionTime, bool* dataAvailable = 0,
548  bool overrideBlockingAssert = false) const;
549 
578  virtual bool intersect(const DtChord& chord,
582  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
583 
585 
586 
587 
588 
589 
590 
591 
592 
593 
594 
595  bool getVrfObjects(DtExtent& extent, std::set<DtVrfObject*>& objects);
596  bool getVrfObjects(DtExtent& extent, std::set<const DtVrfObject*>& objects) const;
597 
598 
599  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtExtent& extent,
600  std::set<DtVrfObject*>& objects);
601 
602  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtExtent& extent,
603  std::set<const DtVrfObject*>& objects) const;
604 
605  bool getVrfObjects(DtChord& chord, std::list<DtVrfObject*>& objects);
606  bool getVrfObjects(DtChord& chord, std::list<const DtVrfObject*>& objects) const;
607 
608  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtChord& chord,
609  std::list<DtVrfObject*>& objects);
610  bool getVrfObjects(DtVrfObjectPredicate& predicate, DtChord& chord,
611  std::list<const DtVrfObject*>& objects) const;
613 
615 
616 
617 
618 
619 
620 
621 
622 
623 
624 
625  void visitVrfObjects(const DtExtent& extent, class DtSpatialSelectionFunctor& callback) const;
626  void visitVrfObjects(const DtChord& chord, class DtSpatialSelectionFunctor& callback) const;
628 
646  virtual void groundClamp(DtPoint& databaseCoord, float const offset = 0,
647  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
648 
666  virtual void groundClamp(DtVector& databaseCoord, float const offset = 0,
667  bool* dataAvailable = 0, bool overrideBlockingAssert = false) const;
668 
673  virtual void getVrfObjectsAlongChord(const DtVector& databaseStart,
674  const DtVector& databaseEnd, std::list<const DtVrfObject*>& orderedList) const;
675 
683  virtual DtManagedObjectListConstPtr getSpatiallyManagedVrfObjectList();
684 
690  virtual bool initializeSpatialVrfObjectOrganization();
691 
703  virtual void calcSpatialMgrResolution(const DtManagedObjectListConstPtr& vrfObjList);
704 
711  virtual DtFilterFunctionPredicate getSpatialOrganizationPredicate();
712 
715  static bool spatialOrganizationObjectFilterFcn(const DtVrfObject* obj, void* usr);
716 
727  virtual bool processSpatialOrganizationObjectFilterFcn(const DtVrfObject* obj);
728 
730  static void querySpatialSubdivisionConfigurationCallback(DtSimMessage* msg, void* usr);
731  static void setSpatialSubdivisionConfigurationCallback(DtSimMessage* msg, void* usr);
732 
735  virtual void processQuerySpatialSubdivisionConfiguration(DtSimMessage* msg);
736  virtual void processSetSpatialSubdivisionConfiguration(DtSimMessage* msg);
737 
740  virtual bool useVrfObjectSpatialSub() const;
741  virtual void setUseVrfObjectSpatialSub(bool yesOrNo);
742 
743 
746  virtual bool isSpatialMgrResolutionUserSpecified() const;
747  virtual void setSpatialMgrResolutionUserSpecified(bool yesOrNo);
748 
751  virtual unsigned int vrfObjectSpatialSubXResolution() const;
752  virtual unsigned int vrfObjectSpatialSubYResolution() const;
753  virtual unsigned int vrfObjectSpatialSubZResolution() const;
755 
760  virtual void setVrfObjectSpatialSubXResolution(unsigned int newXResolution);
761  virtual void setVrfObjectSpatialSubYResolution(unsigned int newYResolution);
762  virtual void setVrfObjectSpatialSubZResolution(unsigned int newZResolution);
764 
766 
768  virtual DtTerrainInterface* terrainInterface();
770  virtual const DtTerrainInterface* terrainInterface() const;
771 
774  virtual void setTerrainInterface(DtTerrainInterface* newTerrainDatabase);
775 
776  virtual DtSimManager* simManager();
777  virtual const DtSimManager* simManager() const;
778  virtual void setSimManager(DtSimManager* newSimManager);
779 
780  virtual DtVrfObjectManager* objectManager();
781  virtual const DtVrfObjectManager* objectManager() const;
782  virtual void setVrfObjectManager(DtVrfObjectManager* newObjectMgr);
783 
784 
785  virtual DtEnvironmentalStateManager * environmentalStateManager();
786  virtual const DtEnvironmentalStateManager * environmentalStateManager() const;
787  virtual void setEnvironmentalStateManager(DtEnvironmentalStateManager * manager);
788 
789 
791 
792  virtual DtPhysicalWorldParams* parameters();
793  virtual const DtPhysicalWorldParams* parameters() const;
794 
795 
799 
800  virtual DtSensorSignatureManager* sensorSignatureManager();
801  virtual const DtSensorSignatureManager* sensorSignatureManager() const;
802 
803 
818  virtual bool checkLineOfSight(const DtVrfObject& viewingObject,
819  const DtVector& databaseViewingPoint, const DtVrfObject& targetObject,
820  bool* terrainDataAvailable = 0) const;
821 
835  virtual bool checkLineOfSight(const DtVrfObject& viewingObject,
836  const DtVector& databaseViewingPoint, const DtVector& databaseTargetPoint,
837  bool* terrainDataAvailable = 0) const;
838 
852  virtual bool checkLineOfSight(const DtVector& databaseViewingPoint,
853  const DtVrfObject& targetObject, bool* terrainDataAvailable = 0) const;
854 
865  virtual bool checkLineOfSightWithoutObjects(
866  const DtVector& databaseViewingPoint,
867  const DtVector& databaseTargetPoint,
868  bool* terrainDataAvailable = 0);
869 
870 
876  static void objectAboutToBeRemovedCb(DtVrfObject * vrfObject, void * usr);
877 
878  virtual void expireDataLoadRequestsBeforeTime(const double& time);
879 
880 protected:
881 
882 
887 
888  typedef std::map<DtLosTestKey, DtVrfLineOfSightFunctorSP> DtKeyedLineOfSightTestContainer;
889  typedef DtKeyedLineOfSightTestContainer::iterator DtMasterLosTestIter;
890  typedef DtKeyedLineOfSightTestContainer::const_iterator DtMasterLosTestConstIter;
891 
893 
894  typedef std::list<DtVrfLineOfSightFunctorSP> DtLineOfSightTestContainer;
895  typedef DtLineOfSightTestContainer::iterator DtLosTestIter;
896  typedef DtLineOfSightTestContainer::const_iterator DtLosTestConstIter;
897 
899 
900  virtual void addInitialLosChecks();
901 
907 
908  virtual void setDefaultLineOfSightTestOrder(
909  const DtRwNLengthStringVector& lineOfSightTestsAndOrder);
910  virtual void setLineOfSightTestOrder(
911  const DtRwNLengthStringVector& lineOfSightTestsAndOrder);
912 
913 
919  virtual void addLineOfSightTest(const DtLosTestKey&, DtVrfLineOfSightFunctorSP losTest);
920 
923  virtual void removeLineOfSightTest(const DtLosTestKey& testKey);
924 
929  virtual void performTest(const DtLosTestKey& testToRun);
930 
934  virtual void doNotPerformTest(const DtLosTestKey& testToRun);
935 
939  virtual void doNotPerformTest(DtVrfLineOfSightFunctorSP losTest);
940 
941 
946  static bool canBlockLineOfSight(const DtVrfObject* object, void* usr);
947 
950  virtual bool checkLineOfSight(const DtLineOfSightTestContainer& losTests,
951  const DtVrfLineOfSightCheckParams& losCheckParams) const;
952 
957  virtual DtVector localLineOfSightTestLocation(const DtVrfObject& object) const;
958 
961  virtual bool checkVrfObjectsForLOS(
962  const DtVrfLineOfSightCheckParams& losCheckParams) const;
963 
966  virtual bool checkFeaturesForLOS(
967  const DtVrfLineOfSightCheckParams& losCheckParams) const;
968 
971  virtual bool checkTerrainForLOS(
972  const DtVrfLineOfSightCheckParams& losCheckParams) const;
973 
977  virtual bool intersectVrfObjects(const DtVrfObject* const primaryVrfObject,
978  const DtVector& databaseStartPoint,
979  const DtVrfObject* const secondaryVrfObject) const;
980 
984  virtual bool intersectsVrfObject(const DtVrfObject& vrfObjectToTest,
985  const DtVector& databaseStartPoint, const DtVector& databaseEndPoint,
986  double& distToIntersect) const;
987 
988 protected:
989 
990  bool testInvariant() const;
991 
996  const DtChord createWorldIntersectionChord(const DtVector& databaseLocation) const;
997 
998 
1000  virtual DtSpatialVrfObjectManagerInterface* spatialVrfObjectManager();
1001  virtual const DtSpatialVrfObjectManagerInterface* spatialVrfObjectManager() const;
1002  virtual void setSpatialVrfObjectManager(DtSpatialVrfObjectManagerInterface* newSpatialVrfObjectMgr);
1003 
1007  virtual DtPhysicalWorldParams* createParameters();
1008 
1011  virtual DtSensorSignatureManager* createSensorSignatureManager();
1012 
1018  virtual void processObjectAboutToBeRemoved(DtVrfObject * vrfObject);
1019 
1022  virtual void performTerrainPreload();
1023 
1024 protected:
1025 
1027 
1033 
1035 
1037 
1042 
1045 
1047 
1049 
1051 
1053 
1055 
1056  std::auto_ptr<MAKVRinTerra::DtObstacleFeatureSet> myLOSFeatures;
1057 
1058  friend class IntersectVrfObjectFunctor;
1059 };
1060 
1061 inline const DtFilename& DtPhysicalWorld::physicalWorldFile() const
1062 {
1063  return myPhysicalWorldFile;
1064 }
1065 
1067 {
1068 public:
1069  DtExpireOlderThanCommand(DtPhysicalWorld* physicalWorld);
1070  virtual bool execute(const DtString& parameters);
1071  virtual DtString help(const DtString& parameters);
1072  virtual bool showInHelp() const { return true; };
1073 protected:
1074  DtPhysicalWorld* myPhysicalWorld;
1075 };

Document ID: Generated on Mon Apr 8 19:24:01 EDT 2013 from SVN revision 125877
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)