CigiCollDetSegRespV1.cpp

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

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