CigiCollDetSegRespV2.cpp

Go to the documentation of this file.
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 // Construction/Destruction
00076 // ====================================================================
00077 
00078 
00079 // ================================================
00080 // CigiCollDetSegRespV2
00081 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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 // ~CigiCollDetSegRespV2
00105 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00106 CigiCollDetSegRespV2::~CigiCollDetSegRespV2()
00107 {
00108 
00109 }
00110 
00111 // ====================================================================
00112 // Pack and Unpack
00113 // ====================================================================
00114 
00115 // ================================================
00116 // Pack
00117 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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 // Unpack
00166 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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;  // Step over packet id and size
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 // Accessors
00206 // ====================================================================
00207 
00208 
00209 // ================================================
00210 // SegID
00211 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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 // CollType
00233 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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 

Generated on Wed Apr 29 08:59:58 2009 for CCL by  doxygen 1.4.7