VR-Link API Documentation for HLA Evolved
articulatedPart.h
Go to the documentation of this file.
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

Document ID: Generated on Mon May 14 08:06:18 EDT 2012 from SVN revision 114750
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)