00001
00052 #define _EXPORT_CCL_
00053
00054 #include "CigiCollDetSegRespV3.h"
00055 #include "CigiSwapping.h"
00056 #include "CigiExceptions.h"
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 CigiCollDetSegRespV3::CigiCollDetSegRespV3()
00068 {
00069
00070 PacketID = CIGI_COLL_DET_SEG_RESP_PACKET_ID_V3;
00071 PacketSize = CIGI_COLL_DET_SEG_RESP_PACKET_SIZE_V3;
00072 Version = 3;
00073 MinorVersion = 0;
00074
00075 EntityID = 0;
00076 SegID = 0;
00077 CollType = NonEntity;
00078 CollEntityID = 0;
00079 Material = 0;
00080 IntersectDist = 0.0;
00081 X = 0.0;
00082 Y = 0.0;
00083 Z = 0.0;
00084 IsValidV1or2 = false;
00085
00086 }
00087
00088
00089
00090
00091 CigiCollDetSegRespV3::~CigiCollDetSegRespV3()
00092 {
00093
00094 }
00095
00096
00097
00098
00099
00100
00101
00102
00103 int CigiCollDetSegRespV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00104 {
00105 PackPointer CDta;
00106
00107 CigiBaseCollDetSegResp * Data = ( CigiBaseCollDetSegResp *)Base;
00108
00109 CDta.c = Buff;
00110
00111 *CDta.c++ = PacketID;
00112 *CDta.c++ = PacketSize;
00113
00114 *CDta.s++ = Data->EntityID;
00115 *CDta.c++ = Data->SegID;
00116
00117 *CDta.c++ = ((Cigi_uint8)Data->CollType) & 0x01;
00118
00119 *CDta.s++ = Data->CollEntityID;
00120 *CDta.l++ = Data->Material;
00121
00122 if(!Data->IsValidV1or2)
00123 *CDta.f++ = Data->IntersectDist;
00124 else
00125 *CDta.f++ = 0.0f;
00126
00127 return(PacketSize);
00128
00129 }
00130
00131
00132
00133
00134 int CigiCollDetSegRespV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00135 {
00136 PackPointer CDta;
00137
00138 CDta.c = Buff;
00139
00140 CDta.c += 2;
00141
00142 if(!Swap)
00143 {
00144 EntityID = *CDta.s++;
00145 SegID = *CDta.c++;
00146
00147 CollType = (CollTypeGrp)(*CDta.c++ & 0x01);
00148
00149 CollEntityID = *CDta.s++;
00150 Material = *CDta.l++;
00151 IntersectDist = *CDta.f++;
00152 }
00153 else
00154 {
00155 CigiSwap2(&EntityID, CDta.s++);
00156 SegID = *CDta.c++;
00157
00158 CollType = (CollTypeGrp)(*CDta.c++ & 0x01);
00159
00160 CigiSwap2(&CollEntityID, CDta.s++);
00161 CigiSwap4(&Material, CDta.l++);
00162 CigiSwap4(&IntersectDist, CDta.f++);
00163 }
00164
00165 IsValidV1or2 = false;
00166
00167 return(PacketSize);
00168
00169 }
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181 int CigiCollDetSegRespV3::SetCollType(const CollTypeGrp CollTypeIn, bool bndchk)
00182 {
00183
00184 #ifndef CIGI_NO_BND_CHK
00185 if(bndchk && ((CollTypeIn < 0)||(CollTypeIn > 1)))
00186 {
00187 #ifndef CIGI_NO_EXCEPT
00188 throw CigiValueOutOfRangeException("CollType",(CollTypeGrp)CollTypeIn,0,1);
00189 #endif
00190 return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00191 }
00192 #endif
00193
00194 CollType = CollTypeIn;
00195 return(CIGI_SUCCESS);
00196
00197 }
00198
00199