![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2005 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00008 00010 00011 #pragma once 00012 00015 00016 #include "vrfobjcore/vrfobjcoreDefines.h" 00017 #include "vrfutil/rwInt.h" 00018 #include "vrfutil/rwString.h" 00019 #include "vrfutil/rdrWritr.h" 00020 #include "vrfutil/rwObjType.h" 00021 #include <matrix/vlDcm.h> 00022 #include <geometry/intersectionRecord.h> 00023 #include <geometry/point.h> 00024 #include <geometry/chord.h> 00025 #include "vrfobjcore/objectGeometricModel.h" 00026 00027 class Coordinate_System; 00028 class DtVectorNetworkRecord; 00029 class DtVectorNetworkIntersectionRecord; 00030 class DtObjectGeometricModelEntry; 00031 class DtPhysicalWorld; 00032 class DtGdbNode; 00033 class DtTerrainDatabase; 00034 class DtVrfObject; 00035 class DtChordIntersectionRecord; 00036 class DtSurface; 00037 class DtVectorNetwork; 00038 00039 class DT_DLL_vrfobjcore DtAttachedTerrain : public DtReaderWriter 00040 { 00041 public: 00042 00044 DtAttachedTerrain(); 00045 00047 DtAttachedTerrain(const DtString& name, 00048 DtReaderWriterRegistry* const parentRegistry = 0); 00049 00050 DtAttachedTerrain(const DtSymbolString& name, 00051 DtReaderWriterRegistry* const parentRegistry = 0); 00052 00054 DtAttachedTerrain(const DtString& name, const DtAttachedTerrain& orig, 00055 DtReaderWriterRegistry* const parentRegistry = 0); 00056 00057 DtAttachedTerrain(const DtSymbolString& name, const DtAttachedTerrain& 00058 from, DtReaderWriterRegistry* const parentRegistry = 0); 00059 00061 virtual ~DtAttachedTerrain(); 00062 00064 DtAttachedTerrain& operator=(const DtAttachedTerrain & orig); 00065 DtAttachedTerrain& operator=(const DtObjectGeometricModelEntry& orig); 00066 00070 virtual const char* readerWriterType() const; 00071 00072 DtAttachedTerrain& operator=(const DtObjectType& type); 00073 00074 public: 00075 virtual const Coordinate_System* coordinateSystem() const; 00076 virtual Coordinate_System* coordinateSystem(); 00077 virtual const Coordinate_System* objectModelCoordinateSystem() const; 00078 00079 00080 virtual double terrainHeight(const DtVector& localLocation, 00081 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00082 virtual bool terrainHeight(const DtVector& localLocation, 00083 double& terrainHeight, bool* dataAvailable = 0, 00084 bool overrideBlockingAssert = false) const; 00085 00086 virtual bool terrainHeightAndSurface(const DtVector& localLocation, 00087 double& terrainHeight, DtSurface& surface, bool* dataAvailable = 0, 00088 bool overrideBlockingAssert = false) const; 00089 00090 00091 virtual bool closestIntersection(const DtVector& localLocation, 00092 DtPoint& intersectionPoint, 00093 DtVectorNetworkRecord* vectorNetworkRecord = 0, 00094 DtVectorNetworkIntersectionRecord* vecNetworkIntersectionRecord = 0, 00095 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00096 00097 virtual bool closestIntersection(const DtVector& localLocation, 00098 DtVector& intersectionPoint, 00099 DtVectorNetworkRecord* vectorNetworkRecord = 0, 00100 DtVectorNetworkIntersectionRecord* vecNetworkIntersectionRecord = 0, 00101 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00102 00103 virtual bool closestIntersection(const DtVector& localLocation, 00104 DtChordIntersectionRecord& record, 00105 DtIntersectionRecord::DtIntersectionType irtFlag = 00106 DtIntersectionRecord::INT_ALL_DATA, 00107 DtVectorNetworkRecord* vectorDatarecord = 0, 00108 DtVectorNetworkIntersectionRecord* vectorIntersectionRecord = 0, 00109 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00110 00111 virtual bool intersect(const DtChord& chord, DtPoint& intersectionPoint, 00112 double& intersectionTime, DtVectorNetworkRecord *record = 0, 00113 DtVectorNetworkIntersectionRecord *intersectionRecord = 0, 00114 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00115 00116 virtual bool intersect(const DtChord& chord, 00117 DtChordIntersectionRecord& record, 00118 DtIntersectionRecord::DtIntersectionType irtFlag = 00119 DtIntersectionRecord::INT_ALL_DATA, 00120 DtVectorNetworkRecord *vectorDatarecord = 0, 00121 DtVectorNetworkIntersectionRecord *vectorIntersectionRecord = 0, 00122 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00123 00130 virtual bool closestIntersection(const DtVector& curPosition, 00131 DtVector& intersection, bool ignoreWater, bool* dataAvailable = 0, 00132 bool overrideBlockingAssert = false) const; 00133 00135 virtual const DtVectorNetwork* vectorNetwork() const; 00136 00137 protected: 00138 bool testInvariant() const; 00139 00142 virtual double setOriginToDatabase(); 00143 00145 virtual const DtDcm& rotateToDcm() const; 00146 virtual const DtDcm& rotateBackDcm() const; 00147 00149 virtual DtVector rotateTerrainLocation(const DtVector& source) const; 00150 00153 virtual DtChord convertAndRotateChordToLocal(const DtChord& source) const; 00154 00156 virtual DtPoint convertLocalToSimTerrain(const DtPoint&, double addHeight = 0.) const; 00157 00160 virtual void convertLocalToSimTerrain(DtChordIntersectionRecord&, double addHeight = 0.) const; 00161 00162 public: 00163 void setObjectName(const DtString&); 00164 const DtString objectName() const; 00165 00166 void setObjectType(const DtObjectType&); 00167 const DtObjectType& objectType() const; 00168 00169 void addRef(); 00170 void removeRef(); 00171 int referenceCount() const; 00172 00173 void setObjectGeometricModel(const DtObjectGeometricModel* newObjGeomModel); 00174 const DtObjectGeometricModel* objectGeometricModel() const; 00175 00176 void setEntity(const DtVrfObject*); 00177 const DtVrfObject* entity() const; 00178 00179 void setPhysicalWorld(DtPhysicalWorld* newPhysicalWorld); 00180 DtPhysicalWorld* physicalWorld(); 00181 const DtPhysicalWorld* physicalWorld() const; 00182 00183 void clear(); 00184 00185 virtual DtAttachedTerrain* clone(const DtString& name, DtReaderWriterRegistry* const parentRegistry = 0) const; 00186 00187 protected: 00188 DtRwString myObjectName; 00189 DtRwObjectType myObjectType; 00190 int myReferenceCount; 00191 00193 const DtObjectGeometricModel* myObjectGeometricModel; 00194 00197 const DtVrfObject* myEntity; 00198 00201 DtPhysicalWorld* myPhysicalWorld; 00202 00205 mutable DtTaitBryan myLastEntityOrientation; 00206 mutable DtDcm myRotateToDcm; 00207 mutable DtDcm myRotateBackDcm; 00208 }; 00209