00001
00055 #define _EXPORT_CCL_
00056
00057 #include "CigiCollDetVolDefV3.h"
00058 #include "CigiSwapping.h"
00059 #include "CigiExceptions.h"
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070 CigiCollDetVolDefV3::CigiCollDetVolDefV3()
00071 {
00072
00073 PacketID = CIGI_COLL_DET_VOL_DEF_PACKET_ID_V3;
00074 PacketSize = CIGI_COLL_DET_VOL_DEF_PACKET_SIZE_V3;
00075 Version = 3;
00076 MinorVersion = 0;
00077
00078 EntityID = 0;
00079 VolID = 0;
00080 VolEn = false;
00081 VolType = Sphere;
00082 Xoff = 0.0;
00083 Yoff = 0.0;
00084 Zoff = 0.0;
00085 HeightOrRadius = 0.0;
00086 Width = 0.0;
00087 Depth = 0.0;
00088 Roll = 0.0;
00089 Pitch = 0.0;
00090 Yaw = 0.0;
00091
00092 }
00093
00094
00095
00096
00097 CigiCollDetVolDefV3::~CigiCollDetVolDefV3()
00098 {
00099
00100 }
00101
00102
00103
00104
00105
00106
00107
00108
00109 int CigiCollDetVolDefV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00110 {
00111 PackPointer CDta;
00112
00113 CigiBaseCollDetVolDef * Data = ( CigiBaseCollDetVolDef *)Base;
00114
00115 CDta.c = Buff;
00116
00117 *CDta.c++ = PacketID;
00118 *CDta.c++ = PacketSize;
00119
00120 *CDta.s++ = Data->EntityID;
00121 *CDta.c++ = Data->VolID;
00122
00123 Cigi_uint8 HDta = (Data->VolEn) ? 0x01 : 0;
00124 HDta |= (Data->VolType << 1) & 0x02;
00125 *CDta.c++ = HDta;
00126
00127 *CDta.s++ = 0;
00128
00129 *CDta.f++ = Data->Xoff;
00130 *CDta.f++ = Data->Yoff;
00131 *CDta.f++ = Data->Zoff;
00132 *CDta.f++ = Data->HeightOrRadius;
00133 *CDta.f++ = Data->Width;
00134 *CDta.f++ = Data->Depth;
00135 *CDta.f++ = Data->Roll;
00136 *CDta.f++ = Data->Pitch;
00137 *CDta.f++ = Data->Yaw;
00138
00139 *CDta.l = 0;
00140
00141 return(PacketSize);
00142
00143 }
00144
00145
00146
00147
00148 int CigiCollDetVolDefV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00149 {
00150 PackPointer CDta;
00151
00152 CDta.c = Buff;
00153
00154 CDta.c += 2;
00155
00156 if(!Swap)
00157 {
00158 EntityID = *CDta.s++;
00159 VolID = *CDta.c++;
00160
00161 Cigi_uint16 HDta = *CDta.c++;
00162 VolEn = ((HDta & 0x01) != 0);
00163 VolType = (VolTypeGrp)((HDta >> 1) & 0x01);
00164
00165 CDta.s++;
00166
00167 Xoff = *CDta.f++;
00168 Yoff = *CDta.f++;
00169 Zoff = *CDta.f++;
00170 HeightOrRadius = *CDta.f++;
00171 Width = *CDta.f++;
00172 Depth = *CDta.f++;
00173 Roll = *CDta.f++;
00174 Pitch = *CDta.f++;
00175 Yaw = *CDta.f++;
00176 }
00177 else
00178 {
00179 CigiSwap2(&EntityID, CDta.s++);
00180 VolID = *CDta.c++;
00181
00182 Cigi_uint16 HDta = *CDta.c++;
00183 VolEn = ((HDta & 0x01) != 0);
00184 VolType = (VolTypeGrp)((HDta >> 1) & 0x01);
00185
00186 CDta.s++;
00187
00188 CigiSwap4(&Xoff, CDta.f++);
00189 CigiSwap4(&Yoff, CDta.f++);
00190 CigiSwap4(&Zoff, CDta.f++);
00191 CigiSwap4(&HeightOrRadius, CDta.f++);
00192 CigiSwap4(&Width, CDta.f++);
00193 CigiSwap4(&Depth, CDta.f++);
00194 CigiSwap4(&Roll, CDta.f++);
00195 CigiSwap4(&Pitch, CDta.f++);
00196 CigiSwap4(&Yaw, CDta.f++);
00197 }
00198
00199 return(PacketSize);
00200
00201 }
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213 int CigiCollDetVolDefV3::SetVolType(const VolTypeGrp VolTypeIn, bool bndchk)
00214 {
00215
00216 #ifndef CIGI_NO_BND_CHK
00217 if(bndchk && ((VolTypeIn < 0)||(VolTypeIn > 1)))
00218 {
00219 #ifndef CIGI_NO_EXCEPT
00220 throw CigiValueOutOfRangeException("VolType",(VolTypeGrp)VolTypeIn,0,1);
00221 #endif
00222 return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00223 }
00224 #endif
00225
00226 VolType = VolTypeIn;
00227 return(CIGI_SUCCESS);
00228
00229 }
00230
00231
00232
00233
00234
00235 int CigiCollDetVolDefV3::SetRoll(const float RollIn, bool bndchk)
00236 {
00237
00238 #ifndef CIGI_NO_BND_CHK
00239 if(bndchk && ((RollIn < -180.0)||(RollIn > 180.0)))
00240 {
00241 #ifndef CIGI_NO_EXCEPT
00242 throw CigiValueOutOfRangeException("Roll",(float)RollIn,-180.0,180.0);
00243 #endif
00244 return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00245 }
00246 #endif
00247
00248 Roll = RollIn;
00249 return(CIGI_SUCCESS);
00250
00251 }
00252
00253
00254
00255
00256
00257 int CigiCollDetVolDefV3::SetPitch(const float PitchIn, bool bndchk)
00258 {
00259
00260 #ifndef CIGI_NO_BND_CHK
00261 if(bndchk && ((PitchIn < -90.0)||(PitchIn > 90.0)))
00262 {
00263 #ifndef CIGI_NO_EXCEPT
00264 throw CigiValueOutOfRangeException("Pitch",(float)PitchIn,-90.0,90.0);
00265 #endif
00266 return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00267 }
00268 #endif
00269
00270 Pitch = PitchIn;
00271 return(CIGI_SUCCESS);
00272
00273 }
00274
00275
00276
00277
00278
00279 int CigiCollDetVolDefV3::SetYaw(const float YawIn, bool bndchk)
00280 {
00281
00282 #ifndef CIGI_NO_BND_CHK
00283 if(bndchk && ((YawIn < 0.0)||(YawIn > 360.0)))
00284 {
00285 #ifndef CIGI_NO_EXCEPT
00286 throw CigiValueOutOfRangeException("Yaw",(float)YawIn,0.0,360.0);
00287 #endif
00288 return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00289 }
00290 #endif
00291
00292 Yaw = YawIn;
00293 return(CIGI_SUCCESS);
00294
00295 }
00296
00297