CigiViewCtrlV3.cpp

Go to the documentation of this file.
00001 
00052 #define _EXPORT_CCL_
00053 
00054 #include "CigiViewCtrlV3.h"
00055 #include "CigiSwapping.h"
00056 #include "CigiExceptions.h"
00057 
00058 
00059 // ====================================================================
00060 // Construction/Destruction
00061 // ====================================================================
00062 
00063 
00064 // ================================================
00065 // CigiViewCtrlV3
00066 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00067 CigiViewCtrlV3::CigiViewCtrlV3()
00068 {
00069 
00070    PacketID = CIGI_VIEW_CTRL_PACKET_ID_V3;
00071    PacketSize = CIGI_VIEW_CTRL_PACKET_SIZE_V3;
00072    Version = 3;
00073    MinorVersion = 0;
00074 
00075    EntityID = 0;
00076    ViewID = 0;
00077    GroupID = 0;
00078    XOffEn = false;
00079    YOffEn = false;
00080    ZOffEn = false;
00081    RollEn = false;
00082    PitchEn = false;
00083    YawEn = false;
00084    XOff = 0.0;
00085    YOff = 0.0;
00086    ZOff = 0.0;
00087    Roll = 0.0;
00088    Pitch = 0.0;
00089    Yaw = 0.0;
00090 
00091 }
00092 
00093 // ================================================
00094 // ~CigiViewCtrlV3
00095 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00096 CigiViewCtrlV3::~CigiViewCtrlV3()
00097 {
00098 
00099 }
00100 
00101 // ====================================================================
00102 // Pack and Unpack
00103 // ====================================================================
00104 
00105 // ================================================
00106 // Pack
00107 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00108 int CigiViewCtrlV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00109 {
00110    PackPointer CDta;
00111 
00112    CigiBaseViewCtrl * Data = ( CigiBaseViewCtrl *)Base;
00113 
00114    CDta.c = Buff;
00115 
00116    *CDta.c++ = PacketID;
00117    *CDta.c++ = PacketSize;
00118 
00119    *CDta.s++ = Data->ViewID;
00120    *CDta.c++ = Data->GroupID;
00121 
00122    Cigi_uint8 HDta = 0;
00123 
00124    if(Data->XOffEn)
00125       HDta |= 0x01;
00126 
00127    if(Data->YOffEn)
00128       HDta |= 0x02;
00129 
00130    if(Data->ZOffEn)
00131       HDta |= 0x04;
00132 
00133    if(Data->RollEn)
00134       HDta |= 0x08;
00135 
00136    if(Data->PitchEn)
00137       HDta |= 0x10;
00138 
00139    if(Data->YawEn)
00140       HDta |= 0x20;
00141 
00142    *CDta.c++ = HDta;
00143 
00144    *CDta.s++ = Data->EntityID;
00145 
00146    *CDta.f++ = Data->XOff;
00147    *CDta.f++ = Data->YOff;
00148    *CDta.f++ = Data->ZOff;
00149    *CDta.f++ = Data->Roll;
00150    *CDta.f++ = Data->Pitch;
00151    *CDta.f++ = Data->Yaw;
00152 
00153    return(PacketSize);
00154 
00155 }
00156 
00157 // ================================================
00158 // Unpack
00159 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00160 int CigiViewCtrlV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00161 {
00162    PackPointer CDta;
00163 
00164    CDta.c = Buff;
00165 
00166    CDta.c += 2;  // Step over packet id and size
00167 
00168    if(!Swap)
00169    {
00170       ViewID = *CDta.s++;
00171       GroupID = *CDta.c++;
00172 
00173       Cigi_uint8 HDta = *CDta.c++;
00174 
00175       XOffEn  = ((HDta & 0x01) != 0);
00176       YOffEn  = ((HDta & 0x02) != 0);
00177       ZOffEn  = ((HDta & 0x04) != 0);
00178       RollEn  = ((HDta & 0x08) != 0);
00179       PitchEn = ((HDta & 0x10) != 0);
00180       YawEn   = ((HDta & 0x20) != 0);
00181 
00182       EntityID = *CDta.s++;
00183 
00184       XOff = *CDta.f++;
00185       YOff = *CDta.f++;
00186       ZOff = *CDta.f++;
00187       Roll = *CDta.f++;
00188       Pitch = *CDta.f++;
00189       Yaw = *CDta.f++;
00190    }
00191    else
00192    {
00193       CigiSwap2(&ViewID, CDta.s++);
00194       GroupID = *CDta.c++;
00195 
00196       Cigi_uint8 HDta = *CDta.c++;
00197 
00198       XOffEn  = ((HDta & 0x01) != 0);
00199       YOffEn  = ((HDta & 0x02) != 0);
00200       ZOffEn  = ((HDta & 0x04) != 0);
00201       RollEn  = ((HDta & 0x08) != 0);
00202       PitchEn = ((HDta & 0x10) != 0);
00203       YawEn   = ((HDta & 0x20) != 0);
00204 
00205       CigiSwap2(&EntityID, CDta.s++);
00206 
00207       CigiSwap4(&XOff, CDta.f++);
00208       CigiSwap4(&YOff, CDta.f++);
00209       CigiSwap4(&ZOff, CDta.f++);
00210       CigiSwap4(&Roll, CDta.f++);
00211       CigiSwap4(&Pitch, CDta.f++);
00212       CigiSwap4(&Yaw, CDta.f++);
00213    }
00214 
00215    return(PacketSize);
00216 
00217 }
00218 
00219 

Generated on Wed Apr 29 08:59:59 2009 for CCL by  doxygen 1.4.7