CigiSymbolSurfaceDefV3_3.cpp

Go to the documentation of this file.
00001 
00040 #define _EXPORT_CCL_
00041 
00042 
00043 #include "CigiSymbolSurfaceDefV3_3.h"
00044 #include "CigiSwapping.h"
00045 #include "CigiExceptions.h"
00046 
00047 
00048 
00049 // ====================================================================
00050 // Construction/Destruction
00051 // ====================================================================
00052 
00053 // ================================================
00054 // CigiBaseEntityCtrl
00055 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00056 CigiSymbolSurfaceDefV3_3::CigiSymbolSurfaceDefV3_3(void)
00057 {
00058    PacketID = CIGI_SYMBOL_SURFACE_DEF_PACKET_ID_V3_3;
00059    PacketSize = CIGI_SYMBOL_SURFACE_DEF_PACKET_SIZE_V3_3;
00060    Version = 3;
00061    MinorVersion = 3;
00062    SurfaceID = 0;
00063    SurfaceState = CigiBaseSymbolSurfaceDef::Active;
00064    Attached = CigiBaseSymbolSurfaceDef::EntityAttached;
00065    BillboardState = CigiBaseSymbolSurfaceDef::NotBillboard;
00066    PerspectiveGrowth = CigiBaseSymbolSurfaceDef::Enable;
00067    EntityViewID = 0;
00068    XLeft = 0.0;
00069    YRight = 0.0;
00070    ZTop = 0.0;
00071    YawBottom = 0.0;
00072    Pitch = 0.0;
00073    Roll = 0.0;
00074    Width = 0.0;
00075    Height = 0.0;
00076    MinU = 0.0;
00077    MaxU = 0.0;
00078    MinV = 0.0;
00079    MaxV = 0.0;
00080 }
00081 
00082 // ================================================
00083 // ~CigiBaseEntityCtrl
00084 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00085 CigiSymbolSurfaceDefV3_3::~CigiSymbolSurfaceDefV3_3(void)
00086 {
00087 }
00088 
00089 
00090 
00091 // ====================================================================
00092 // Pack and Unpack
00093 // ====================================================================
00094 
00095 // ================================================
00096 // Pack
00097 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00098 int CigiSymbolSurfaceDefV3_3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00099 {
00100    PackPointer CDta;
00101 
00102    CigiSymbolSurfaceDefV3_3 * Data =
00103       ( CigiSymbolSurfaceDefV3_3 *)Base;
00104 
00105    CDta.c = Buff;
00106 
00107    *CDta.c++ = PacketID;
00108    *CDta.c++ = PacketSize;
00109 
00110    *CDta.s++ = Data->SurfaceID;
00111 
00112    unsigned char HDta = 0;
00113    HDta |= (Data->SurfaceState & 0x01);
00114    HDta |= ((Data->Attached << 1) & 0x02);
00115    HDta |= ((Data->BillboardState << 2) & 0x04);
00116    HDta |= ((Data->PerspectiveGrowth << 3) & 0x08);
00117    *CDta.c++ = HDta;
00118 
00119    *CDta.c++ = 0;
00120    *CDta.s++ = Data->EntityViewID;
00121    *CDta.f++ = Data->XLeft;
00122    *CDta.f++ = Data->YRight;
00123    *CDta.f++ = Data->ZTop;
00124    *CDta.f++ = Data->YawBottom;
00125 
00126    if(Attached == Data->EntityAttached)
00127    {
00128       *CDta.f++ = Data->Pitch;
00129       *CDta.f++ = Data->Roll;
00130       *CDta.f++ = Data->Width;
00131       *CDta.f++ = Data->Height;
00132    }
00133    else
00134    {
00135       *CDta.l++ = 0;
00136       *CDta.l++ = 0;
00137       *CDta.l++ = 0;
00138       *CDta.l++ = 0;
00139    }
00140 
00141    *CDta.f++ = Data->MinU;
00142    *CDta.f++ = Data->MaxU;
00143    *CDta.f++ = Data->MinV;
00144    *CDta.f++ = Data->MaxV;
00145 
00146    return(PacketSize);
00147 
00148 }
00149 
00150 // ================================================
00151 // Unpack
00152 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00153 int CigiSymbolSurfaceDefV3_3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00154 {
00155    PackPointer CDta;
00156    unsigned char HDta = 0;
00157 
00158    CDta.c = Buff;
00159 
00160    CDta.c += 2;  // Step over packet id and size
00161 
00162    if(!Swap)
00163    {
00164       SurfaceID = *CDta.s++;
00165 
00166       HDta = *CDta.c++;
00167       Attached = (AttachStateGrp)((HDta >> 1) & 0x01);
00168       CDta.c++;
00169 
00170       EntityViewID = *CDta.s++;
00171       XLeft = *CDta.f++;
00172       YRight = *CDta.f++;
00173       ZTop = *CDta.f++;
00174       YawBottom = *CDta.f++;
00175 
00176       if(Attached == EntityAttached)
00177       {
00178          Pitch = *CDta.f++;
00179          Roll = *CDta.f++;
00180          Width = *CDta.f++;
00181          Height = *CDta.f++;
00182       }
00183       else
00184       {
00185          CDta.l += 4;
00186 
00187          Pitch = 0.0f;
00188          Roll = 0.0f;
00189          Width = 0.0f;
00190          Height = 0.0f;
00191       }
00192 
00193       MinU = *CDta.f++;
00194       MaxU = *CDta.f++;
00195       MinV = *CDta.f++;
00196       MaxV = *CDta.f++;
00197    }
00198    else
00199    {
00200       CigiSwap2(&SurfaceID, CDta.s++);
00201 
00202       HDta = *CDta.c++;
00203       Attached = (AttachStateGrp)((HDta >> 1) & 0x01);
00204       CDta.c++;
00205 
00206       CigiSwap2(&EntityViewID, CDta.s++);
00207       CigiSwap4(&XLeft, CDta.f++);
00208       CigiSwap4(&YRight, CDta.f++);
00209       CigiSwap4(&ZTop, CDta.f++);
00210       CigiSwap4(&YawBottom, CDta.f++);
00211 
00212       if(Attached == EntityAttached)
00213       {
00214          CigiSwap4(&Pitch, CDta.f++);
00215          CigiSwap4(&Roll, CDta.f++);
00216          CigiSwap4(&Width, CDta.f++);
00217          CigiSwap4(&Height, CDta.f++);
00218       }
00219       else
00220       {
00221          CDta.l += 4;
00222 
00223          Pitch = 0.0f;
00224          Roll = 0.0f;
00225          Width = 0.0f;
00226          Height = 0.0f;
00227       }
00228 
00229       CigiSwap4(&MinU, CDta.f++);
00230       CigiSwap4(&MaxU, CDta.f++);
00231       CigiSwap4(&MinV, CDta.f++);
00232       CigiSwap4(&MaxV, CDta.f++);
00233    }
00234 
00235    SurfaceState = (StateGrp)(HDta & 0x01);
00236    BillboardState = (BillboardStateGrp)((HDta >> 2) & 0x01);
00237    PerspectiveGrowth = (PerspectiveGrowthStateGrp)((HDta >> 3) & 0x01);
00238 
00239    return(PacketSize);
00240 
00241 }
00242 
00243 
00244 
00245 

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