00001
00052 #define _EXPORT_CCL_
00053
00054 #include "CigiViewCtrlV3.h"
00055 #include "CigiSwapping.h"
00056 #include "CigiExceptions.h"
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
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
00095
00096 CigiViewCtrlV3::~CigiViewCtrlV3()
00097 {
00098
00099 }
00100
00101
00102
00103
00104
00105
00106
00107
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
00159
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;
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