![]() |
VR-Link API Documentation for HLA 1.3
|
00001 /********************************************************************* 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 00006 00011 00012 #ifndef articulatedPart_H_ 00013 #define articulatedPart_H_ 00014 00015 #include <vlutil/vlMachineTypes.h> 00016 #include <vlutil/vlTime.h> 00017 00018 #include <matrix/vlTaitBryan.h> 00019 #include <matrix/vlVector.h> 00020 00021 #include <vector> 00022 00023 00024 class DtClock; 00025 00030 class DT_DLL_VLPROTIND DtArticulatedPart 00031 { 00032 public: 00034 struct Parameter 00035 { 00036 float value; 00037 unsigned char change; 00038 double time; 00039 }; 00040 00045 enum ParameterMetrics 00046 { 00047 ParameterMetric_Position = 1, 00048 ParameterMetric_PositionRate = 2, 00049 ParameterMetric_Extension = 3, 00050 ParameterMetric_ExtensionRate = 4, 00051 ParameterMetric_X = 5, 00052 ParameterMetric_XRate = 6, 00053 ParameterMetric_Y = 7, 00054 ParameterMetric_YRate = 8, 00055 ParameterMetric_Z = 9, 00056 ParameterMetric_ZRate = 10, 00057 ParameterMetric_Azimuth = 11, 00058 ParameterMetric_AzimuthRate = 12, 00059 ParameterMetric_Elevation = 13, 00060 ParameterMetric_ElevationRate = 14, 00061 ParameterMetric_Rotation = 15, 00062 ParameterMetric_RotationRate = 16 00063 }; 00064 00066 typedef unsigned char ParameterMetric; 00067 00071 DtArticulatedPart(DtClock* clock = 0); 00072 00074 DtArticulatedPart(const DtArticulatedPart& copy); 00075 00077 DtArticulatedPart& operator=(const DtArticulatedPart& copy); 00078 00080 virtual ~DtArticulatedPart(); 00081 00084 bool operator==(const DtArticulatedPart& other) const; 00085 bool operator!=(const DtArticulatedPart& other) const; 00086 00089 virtual bool hasTheSameMetrics(const DtArticulatedPart& other) const; 00090 00093 virtual unsigned int parameterCount() const; 00094 00096 virtual int partTypeAttachedTo() const; 00097 00099 virtual void setPartTypeAttachedTo(int attachedTo); 00100 00102 virtual unsigned short attachedToPartIndex() const; 00103 00105 virtual void setAttachedToPartIndex(unsigned int index); 00106 00108 virtual unsigned int partType() const; 00109 00111 virtual void setPartType(unsigned int artPartType); 00112 00114 virtual void getParameterMetrics(std::vector<ParameterMetric>& metrics) const; 00115 00128 virtual bool setParameter(ParameterMetric parameterMetric,const Parameter& parameter, 00129 bool setOnlyValue = true); 00130 00137 inline bool setParameter(ParameterMetric parameterMetric,float value) 00138 { 00139 Parameter parameter; 00140 parameter.value = value; 00141 return setParameter(parameterMetric,parameter); 00142 } 00143 00148 virtual bool getParameter(ParameterMetric parameterMetric,Parameter& parameter) const; 00149 00156 virtual float getParameterValue(ParameterMetric parameterMetric, double time) const; 00157 00161 inline float getParameterValue(ParameterMetric parameterMetric) const 00162 { 00163 return getParameterValue(parameterMetric,clock() ? clock()->simTime() : 0.0); 00164 } 00165 00167 virtual void unsetParameter(ParameterMetric parameterMetric); 00168 00170 virtual void unsetAllParameters(); 00171 00173 virtual void incrementChange(ParameterMetric parameterMetric); 00174 00176 virtual bool approximating() const; 00177 00179 virtual void setApproximating(bool deadreckoning); 00180 00184 virtual void setClock(DtClock* clock); 00185 00187 00188 DtClock* clock(); 00189 const DtClock* clock() const; 00191 00192 //@name Fast inline functions for validating metrics. 00194 00196 inline bool isParameterSet(ParameterMetric parameterMetric) const; 00197 00199 inline bool isParameterMetricValid(ParameterMetric parameterMetric) const; 00200 00202 inline bool isParameterApproximated(ParameterMetric parameterMetric) const; 00203 00209 inline unsigned int getParameterRateMetric(ParameterMetric parameterMetric) const; 00210 00212 00213 00214 //@name Helper functions for getting/setting Translation,Orientation and rates. 00216 00218 inline bool hasTranslation() const; 00219 00221 inline DtVector translation() const; 00222 00224 inline DtVector translation(double time) const; 00225 00227 inline bool getTranslation(DtVector& vec) const; 00228 00230 inline bool getTranslation(DtVector& vec, double time) const; 00231 00233 inline void setTranslation(const DtVector& trans); 00234 00236 inline bool hasTranslationRate() const; 00237 00239 inline DtVector translationRate() const; 00240 00242 inline bool getTranslationRate(DtVector& vec) const; 00243 00245 inline void setTranslationRate(const DtVector& transRate); 00246 00248 inline bool hasOrientation() const; 00249 00251 inline DtTaitBryan orientation() const; 00252 00254 inline DtTaitBryan orientation(double time) const; 00255 00257 inline bool getOrientation(DtTaitBryan& ori) const; 00258 00260 inline bool getOrientation(DtTaitBryan& ori, double time) const; 00261 00263 inline void setOrientation(const DtTaitBryan& ori); 00264 00266 inline bool hasOrientationRate() const; 00267 00269 inline DtVector orientationRate() const; 00270 00272 inline bool getOrientationRate(DtVector& oriRate) const; 00273 00275 inline void setOrientationRate(const DtVector& oriRate); 00276 00278 00280 virtual void printDataToStream(std::ostream& str) const; 00281 00282 public: 00284 static inline unsigned int decodeArtPartType(unsigned int type); 00285 00287 static inline unsigned char decodeArtPartParamMetric(unsigned int type); 00288 00289 static inline unsigned int encodeArtPartParamType(unsigned int partType, unsigned char paramMetric); 00290 00291 static bool approximatingEnabledFlag(); 00292 static void setApproximatingEnabledFlag(bool enabled); 00293 00294 protected: 00295 00296 // A 16bit integer id. 00297 int myPartTypeAttachedTo; 00298 unsigned short myAttachedToPartIndex; 00299 00300 unsigned int myPartType; 00301 00302 //A Mask of the first 32 parameters. Most standards do not support more than 32. 00303 unsigned int myParameterMask; 00304 00305 //A vector of parameters. 00306 std::vector<Parameter> myParameters; 00307 00308 //A flag which controls whether to dead-reckon values. 00309 bool myApproximatingFlag; 00310 00311 //An internal pointer to a shared clock used to automatically get the time. 00312 DtClock* myClock; 00313 00314 protected: 00315 00316 //A flag which controls whether to dead-reckon value by default 00317 static bool theApproximatingEnabledFlag; 00318 }; 00319 00320 #define articulatedPart_inl_ 00321 #include "articulatedPart.inl" 00322 #undef articulatedPart_inl_ 00323 00324 00325 00326 #endif