00001
00052 #define _EXPORT_CCL_
00053
00054 #include "CigiCollDetSegRespV1.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 CigiCollDetSegRespV1::CigiCollDetSegRespV1()
00083 {
00084
00085 PacketID = CIGI_COLL_DET_SEG_RESP_PACKET_ID_V1;
00086 PacketSize = CIGI_COLL_DET_SEG_RESP_PACKET_SIZE_V1;
00087 Version = 1;
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 CigiCollDetSegRespV1::~CigiCollDetSegRespV1()
00107 {
00108
00109 }
00110
00111
00112
00113
00114
00115
00116
00117
00118 int CigiCollDetSegRespV1::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 *CDta.c++ = HDta;
00137
00138 *CDta.c++ = 0;
00139 *CDta.s++ = 0;
00140
00141 CIGI_SCOPY4(CDta.l++, &Data->Material);
00142
00143 if(Data->IsValidV1or2)
00144 {
00145 CIGI_SCOPY4(CDta.f++, &Data->X);
00146 CIGI_SCOPY4(CDta.f++, &Data->Y);
00147 CIGI_SCOPY4(CDta.f++, &Data->Z);
00148 }
00149 else
00150 {
00151 float tzero = 0.0f;
00152 CIGI_SCOPY4(CDta.f++, &tzero);
00153 CIGI_SCOPY4(CDta.f++, &tzero);
00154 CIGI_SCOPY4(CDta.f++, &tzero);
00155 }
00156
00157
00158 memcpy(Buff,tBuf,CIGI_COLL_DET_SEG_RESP_PACKET_SIZE_V1);
00159
00160 return(PacketSize);
00161
00162 }
00163
00164
00165
00166
00167 int CigiCollDetSegRespV1::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_V1);
00176
00177 CDta.d = DBuf;
00178
00179 CDta.c += 2;
00180
00181 CIGI_SCOPY2(&EntityID, CDta.s++);
00182
00183 SegID = (*CDta.c++ >> 1) & 0x7f;
00184
00185 CDta.c += 3;
00186
00187 CIGI_SCOPY4(&Material, CDta.l++);
00188
00189 CIGI_SCOPY4(&X, CDta.f++);
00190 CIGI_SCOPY4(&Y, CDta.f++);
00191 CIGI_SCOPY4(&Z, CDta.f++);
00192
00193 IsValidV1or2 = true;
00194
00195 return(PacketSize);
00196
00197 }
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209 int CigiCollDetSegRespV1::SetSegID(const Cigi_uint8 SegIDIn, bool bndchk)
00210 {
00211
00212 #ifndef CIGI_NO_BND_CHK
00213 if(bndchk && ((SegIDIn < 0)||(SegIDIn > 127)))
00214 {
00215 #ifndef CIGI_NO_EXCEPT
00216 throw CigiValueOutOfRangeException("SegID",(Cigi_uint8)SegIDIn,0,127);
00217 #endif
00218 return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00219 }
00220 #endif
00221
00222 SegID = SegIDIn;
00223 return(CIGI_SUCCESS);
00224
00225 }
00226
00227