CigiArtPartCtrlV3.cpp

Go to the documentation of this file.
00001 
00055 #define _EXPORT_CCL_
00056 
00057 #include "CigiArtPartCtrlV3.h"
00058 #include "CigiSwapping.h"
00059 #include "CigiExceptions.h"
00060 
00061 
00062 // ====================================================================
00063 // Construction/Destruction
00064 // ====================================================================
00065 
00066 
00067 // ================================================
00068 // CigiArtPartCtrlV3
00069 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00070 CigiArtPartCtrlV3::CigiArtPartCtrlV3()
00071 {
00072 
00073    PacketID = CIGI_ART_PART_CTRL_PACKET_ID_V3;
00074    PacketSize = CIGI_ART_PART_CTRL_PACKET_SIZE_V3;
00075    Version = 3;
00076    MinorVersion = 0;
00077 
00078    EntityID = 0;
00079    ArtPartIDV1 = 0;
00080    ArtPartIDV3 = 0;
00081    ArtPartEn = false;
00082    XOffEn = false;
00083    YOffEn = false;
00084    ZOffEn = false;
00085    RollEn = false;
00086    PitchEn = false;
00087    YawEn = false;
00088    XOff = 0.0;
00089    YOff = 0.0;
00090    ZOff = 0.0;
00091    Roll = 0.0;
00092    Pitch = 0.0;
00093    Yaw = 0.0;
00094 
00095 }
00096 
00097 // ================================================
00098 // ~CigiArtPartCtrlV3
00099 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00100 CigiArtPartCtrlV3::~CigiArtPartCtrlV3()
00101 {
00102 
00103 }
00104 
00105 // ====================================================================
00106 // Pack and Unpack
00107 // ====================================================================
00108 
00109 // ================================================
00110 // Pack
00111 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00112 int CigiArtPartCtrlV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00113 {
00114    PackPointer CDta;
00115 
00116    CigiBaseArtPartCtrl * Data = ( CigiBaseArtPartCtrl *)Base;
00117 
00118    CDta.c = Buff;
00119 
00120    *CDta.c++ = PacketID;
00121    *CDta.c++ = PacketSize;
00122 
00123    *CDta.s++ = Data->EntityID;
00124    *CDta.c++ = Data->ArtPartIDV3;
00125 
00126    Cigi_uint8 HDta = 0;
00127 
00128    if(Data->ArtPartEn)
00129       HDta = 0x01;
00130 
00131    if(Data->XOffEn)
00132       HDta |= 0x02;
00133 
00134    if(Data->YOffEn)
00135       HDta |= 0x04;
00136 
00137    if(Data->ZOffEn)
00138       HDta |= 0x08;
00139 
00140    if(Data->RollEn)
00141       HDta |= 0x10;
00142 
00143    if(Data->PitchEn)
00144       HDta |= 0x20;
00145 
00146    if(Data->YawEn)
00147       HDta |= 0x40;
00148 
00149    *CDta.c++ = HDta;
00150 
00151    *CDta.s++ = 0;
00152 
00153    *CDta.f++ = Data->XOff;
00154    *CDta.f++ = Data->YOff;
00155    *CDta.f++ = Data->ZOff;
00156    *CDta.f++ = Data->Roll;
00157    *CDta.f++ = Data->Pitch;
00158    *CDta.f++ = Data->Yaw;
00159 
00160    return(PacketSize);
00161 
00162 }
00163 
00164 // ================================================
00165 // Unpack
00166 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00167 int CigiArtPartCtrlV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00168 {
00169    union ArtPartConv
00170    {
00171       Cigi_uint8 uc;
00172       Cigi_int8 c;
00173    } ArtC;
00174 
00175    PackPointer CDta;
00176 
00177    CDta.c = Buff;
00178 
00179    CDta.c += 2;  // Step over packet id and size
00180 
00181    if(!Swap)
00182    {
00183       EntityID = *CDta.s++;
00184       ArtPartIDV3 = *CDta.c++;
00185 
00186       Cigi_uint16 HDta = *CDta.c++;
00187 
00188       ArtPartEn = ((HDta & 0x01) != 0);
00189       XOffEn  = ((HDta & 0x02) != 0);
00190       YOffEn  = ((HDta & 0x04) != 0);
00191       ZOffEn  = ((HDta & 0x08) != 0);
00192       RollEn  = ((HDta & 0x10) != 0);
00193       PitchEn = ((HDta & 0x20) != 0);
00194       YawEn   = ((HDta & 0x40) != 0);
00195 
00196       CDta.s++;
00197 
00198       XOff = *CDta.f++;
00199       YOff = *CDta.f++;
00200       ZOff = *CDta.f++;
00201       Roll = *CDta.f++;
00202       Pitch = *CDta.f++;
00203       Yaw = *CDta.f++;
00204    }
00205    else
00206    {
00207       CigiSwap2(&EntityID, CDta.s++);
00208       ArtPartIDV3 = *CDta.c++;
00209 
00210       Cigi_uint16 HDta = *CDta.c++;
00211 
00212       ArtPartEn = ((HDta & 0x01) != 0);
00213       XOffEn  = ((HDta & 0x02) != 0);
00214       YOffEn  = ((HDta & 0x04) != 0);
00215       ZOffEn  = ((HDta & 0x08) != 0);
00216       RollEn  = ((HDta & 0x10) != 0);
00217       PitchEn = ((HDta & 0x20) != 0);
00218       YawEn   = ((HDta & 0x40) != 0);
00219 
00220       CDta.s++;
00221 
00222       CigiSwap4(&XOff, CDta.f++);
00223       CigiSwap4(&YOff, CDta.f++);
00224       CigiSwap4(&ZOff, CDta.f++);
00225       CigiSwap4(&Roll, CDta.f++);
00226       CigiSwap4(&Pitch, CDta.f++);
00227       CigiSwap4(&Yaw, CDta.f++);
00228    }
00229 
00230    ArtC.uc = ArtPartIDV3;
00231    ArtPartIDV1 = ArtC.c;
00232 
00233    return(PacketSize);
00234 
00235 }
00236 
00237 
00238 
00239 // ====================================================================
00240 // Accessors
00241 // ====================================================================
00242 
00243 
00244 // ================================================
00245 // SetArtPartID
00246 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00247 int CigiArtPartCtrlV3::SetArtPartID(const Cigi_uint8 ArtPartIDIn, bool bndchk)
00248 {
00249    union ArtPartConv
00250    {
00251       Cigi_uint8 uc;
00252       Cigi_int8 c;
00253    } ArtC;
00254 
00255    ArtPartIDV3 = ArtPartIDIn;
00256 
00257    ArtC.uc = ArtPartIDV3;
00258    ArtPartIDV1 = ArtC.c;
00259 
00260    return(CIGI_SUCCESS);
00261 }
00262 

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