00001
00052 #define _EXPORT_CCL_
00053
00054 #include "CigiCollDetSegRespV2.h"
00055 #include "CigiSwapping.h"
00056 #include "CigiExceptions.h"
00057
00058 #include <memory.h>
00059
00060
00061 #ifdef CIGI_LITTLE_ENDIAN
00062 #define CIGI_SCOPY2 CigiSwap2
00063 #define CIGI_SCOPY4 CigiSwap4
00064 #define CIGI_SCOPY8 CigiSwap8
00065 #else
00066 #define CIGI_SCOPY2 CigiCopy2
00067 #define CIGI_SCOPY4 CigiCopy4
00068 #define CIGI_SCOPY8 CigiCopy8
00069 #endif
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 CigiCollDetSegRespV2::CigiCollDetSegRespV2()
00083 {
00084
00085 PacketID = CIGI_COLL_DET_SEG_RESP_PACKET_ID_V2;
00086 PacketSize = CIGI_COLL_DET_SEG_RESP_PACKET_SIZE_V2;
00087 Version = 2;
00088 MinorVersion = 0;
00089
00090 EntityID = 0;
00091 SegID = 0;
00092 CollType = NonEntity;
00093 CollEntityID = 0;
00094 Material = 0;
00095 IntersectDist = 0.0;
00096 X = 0.0;
00097 Y = 0.0;
00098 Z = 0.0;
00099 IsValidV1or2 = true;
00100
00101 }
00102
00103
00104
00105
00106 CigiCollDetSegRespV2::~CigiCollDetSegRespV2()
00107 {
00108
00109 }
00110
00111
00112
00113
00114
00115
00116
00117
00118 int CigiCollDetSegRespV2::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00119 {
00120 double DBuf[6];
00121
00122 Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00123
00124 PackPointer CDta;
00125
00126 CigiBaseCollDetSegResp * Data = ( CigiBaseCollDetSegResp *)Base;
00127
00128 CDta.d = DBuf;
00129
00130 *CDta.c++ = PacketID;
00131 *CDta.c++ = PacketSize;
00132
00133 CIGI_SCOPY2(CDta.s++, &Data->EntityID);
00134
00135 Cigi_uint8 HDta = (Data->SegID << 1) & 0xfe;
00136 HDta |= ((Cigi_uint8)Data->CollType) & 0x01;
00137 *CDta.c++ = HDta;
00138
00139 *CDta.c++ = 0;
00140
00141 CIGI_SCOPY2(CDta.s++, &Data->CollEntityID);
00142 CIGI_SCOPY4(CDta.l++, &Data->Material);
00143
00144 if(Data->IsValidV1or2)
00145 {
00146 CIGI_SCOPY4(CDta.f++, &Data->X);
00147 CIGI_SCOPY4(CDta.f++, &Data->Y);
00148 CIGI_SCOPY4(CDta.f++, &Data->Z);
00149 }
00150 else
00151 {
00152 float tzero = 0.0f;
00153 CIGI_SCOPY4(CDta.f++, &tzero);
00154 CIGI_SCOPY4(CDta.f++, &tzero);
00155 CIGI_SCOPY4(CDta.f++, &tzero);
00156 }
00157
00158 memcpy(Buff,tBuf,CIGI_COLL_DET_SEG_RESP_PACKET_SIZE_V2);
00159
00160 return(PacketSize);
00161
00162 }
00163
00164
00165
00166
00167 int CigiCollDetSegRespV2::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00168 {
00169 double DBuf[6];
00170
00171 Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00172
00173 PackPointer CDta;
00174
00175 memcpy(tBuf,Buff,CIGI_COLL_DET_SEG_RESP_PACKET_SIZE_V2);
00176
00177 CDta.d = DBuf;
00178
00179 CDta.c += 2;
00180
00181 CIGI_SCOPY2(&EntityID, CDta.s++);
00182
00183 Cigi_uint8 HDta = *CDta.c++;
00184 SegID = (HDta >> 1) & 0x7f;
00185 CollType = (CollTypeGrp)(HDta & 0x01);
00186
00187 CDta.c++;
00188
00189 CIGI_SCOPY2(&CollEntityID, CDta.s++);
00190 CIGI_SCOPY4(&Material, CDta.l++);
00191
00192 CIGI_SCOPY4(&X, CDta.f++);
00193 CIGI_SCOPY4(&Y, CDta.f++);
00194 CIGI_SCOPY4(&Z, CDta.f++);
00195
00196 IsValidV1or2 = true;
00197
00198 return(PacketSize);
00199
00200 }
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212 int CigiCollDetSegRespV2::SetSegID(const Cigi_uint8 SegIDIn, bool bndchk)
00213 {
00214
00215 #ifndef CIGI_NO_BND_CHK
00216 if(bndchk && ((SegIDIn < 0)||(SegIDIn > 127)))
00217 {
00218 #ifndef CIGI_NO_EXCEPT
00219 throw CigiValueOutOfRangeException("SegID",(Cigi_uint8)SegIDIn,0,127);
00220 #endif
00221 return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00222 }
00223 #endif
00224
00225 SegID = SegIDIn;
00226 return(CIGI_SUCCESS);
00227
00228 }
00229
00230
00231
00232
00233
00234 int CigiCollDetSegRespV2::SetCollType(const CollTypeGrp CollTypeIn, bool bndchk)
00235 {
00236
00237 #ifndef CIGI_NO_BND_CHK
00238 if(bndchk && ((CollTypeIn < 0)||(CollTypeIn > 1)))
00239 {
00240 #ifndef CIGI_NO_EXCEPT
00241 throw CigiValueOutOfRangeException("CollType",(CollTypeGrp)CollTypeIn,0,1);
00242 #endif
00243 return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00244 }
00245 #endif
00246
00247 CollType = CollTypeIn;
00248 return(CIGI_SUCCESS);
00249
00250 }
00251
00252