00001
00055 #define _EXPORT_CCL_
00056
00057 #include "CigiArtPartCtrlV3.h"
00058 #include "CigiSwapping.h"
00059 #include "CigiExceptions.h"
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
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
00099
00100 CigiArtPartCtrlV3::~CigiArtPartCtrlV3()
00101 {
00102
00103 }
00104
00105
00106
00107
00108
00109
00110
00111
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
00166
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;
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
00241
00242
00243
00244
00245
00246
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