00001 
00052 #include <math.h>
00053 
00054 #define _EXPORT_CCL_
00055 
00056 #include "CigiTrajectoryDefV3.h"
00057 #include "CigiSwapping.h"
00058 #include "CigiExceptions.h"
00059 
00060 
00061 
00062 
00063 
00064 
00065 
00066 
00067 
00068 
00069 CigiTrajectoryDefV3::CigiTrajectoryDefV3()
00070 {
00071 
00072    PacketID = CIGI_TRAJECTORY_DEF_PACKET_ID_V3;
00073    PacketSize = CIGI_TRAJECTORY_DEF_PACKET_SIZE_V3;
00074    Version = 3;
00075    MinorVersion = 0;
00076 
00077    EntityID = 0;
00078    Accel = 0.0;
00079    RetardationRate = 0.0;
00080    TermVel = 0.0;
00081    Xoff = 0.0;
00082    Yoff = 0.0;
00083    Zoff = 0.0;
00084    AccelX = 0.0f;
00085    AccelY = 0.0f;
00086    AccelZ = 0.0f;
00087 
00088 }
00089 
00090 
00091 
00092 
00093 CigiTrajectoryDefV3::~CigiTrajectoryDefV3()
00094 {
00095 
00096 }
00097 
00098 
00099 
00100 
00101 
00102 
00103 
00104 
00105 int CigiTrajectoryDefV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00106 {
00107    PackPointer CDta;
00108 
00109    CigiBaseTrajectoryDef * Data = ( CigiBaseTrajectoryDef *)Base;
00110 
00111    CDta.c = Buff;
00112 
00113    *CDta.c++ = PacketID;
00114    *CDta.c++ = PacketSize;
00115 
00116    *CDta.s++ = Data->EntityID;
00117    *CDta.f++ = Data->AccelX;
00118    *CDta.f++ = Data->AccelY;
00119    *CDta.f++ = Data->AccelZ;
00120    *CDta.f++ = Data->RetardationRate;
00121    *CDta.f++ = Data->TermVel;
00122 
00123    return(PacketSize);
00124 
00125 }
00126 
00127 
00128 
00129 
00130 int CigiTrajectoryDefV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00131 {
00132    PackPointer CDta;
00133 
00134    CDta.c = Buff;
00135 
00136    CDta.c += 2;  
00137 
00138    if(!Swap)
00139    {
00140       EntityID = *CDta.s++;
00141       AccelX = *CDta.f++;
00142       AccelY = *CDta.f++;
00143       AccelZ = *CDta.f++;
00144       RetardationRate = *CDta.f++;
00145       TermVel = *CDta.f++;
00146    }
00147    else
00148    {
00149       CigiSwap2(&EntityID, CDta.s++);
00150       CigiSwap4(&AccelX, CDta.f++);
00151       CigiSwap4(&AccelY, CDta.f++);
00152       CigiSwap4(&AccelZ, CDta.f++);
00153       CigiSwap4(&RetardationRate, CDta.f++);
00154       CigiSwap4(&TermVel, CDta.f++);
00155    }
00156 
00157    Accel = (float)sqrt((double)((AccelX*AccelX) + (AccelY*AccelY) + (AccelZ*AccelZ)));
00158 
00159    Xoff = 0.0;
00160    Yoff = 0.0;
00161    Zoff = 0.0;
00162 
00163    return(PacketSize);
00164 
00165 }
00166 
00167 
00168 
00169 
00170 
00171 
00172 
00173 
00174 
00175 
00176 
00177 int CigiTrajectoryDefV3::SetAccelX(const float AccelIn, bool bndchk)
00178 {
00179    AccelX = AccelIn;
00180    Accel = (float)sqrt((double)((AccelX*AccelX) + (AccelY*AccelY) + (AccelZ*AccelZ)));
00181 
00182    return(CIGI_SUCCESS);
00183 }
00184 
00185 
00186 
00187 
00188 
00189 int CigiTrajectoryDefV3::SetAccelY(const float AccelIn, bool bndchk)
00190 {
00191    AccelY = AccelIn;
00192    Accel = (float)sqrt((double)((AccelX*AccelX) + (AccelY*AccelY) + (AccelZ*AccelZ)));
00193 
00194    return(CIGI_SUCCESS);
00195 }
00196 
00197 
00198 
00199 
00200 
00201 int CigiTrajectoryDefV3::SetAccelZ(const float AccelIn, bool bndchk)
00202 {
00203    AccelZ = AccelIn;
00204    Accel = (float)sqrt((double)((AccelX*AccelX) + (AccelY*AccelY) + (AccelZ*AccelZ)));
00205 
00206    return(CIGI_SUCCESS);
00207 }