CigiArtPartCtrlV1 Class Reference

#include <CigiArtPartCtrlV1.h>

Inheritance diagram for CigiArtPartCtrlV1:

CigiBaseArtPartCtrl CigiBasePacket List of all members.

Public Member Functions

 CigiArtPartCtrlV1 ()
virtual ~CigiArtPartCtrlV1 ()
virtual int Pack (CigiBasePacket *Base, Cigi_uint8 *Buff, void *Spec) const
virtual int Unpack (Cigi_uint8 *Buff, bool Swap, void *Spec)
int SetArtPartID (const Cigi_int8 ArtPartIDIn, bool bndchk=true)
Cigi_int8 GetArtPartIDV1 (void) const

Detailed Description

Definition at line 57 of file CigiArtPartCtrlV1.h.


Constructor & Destructor Documentation

CigiArtPartCtrlV1::CigiArtPartCtrlV1 (  ) 

General Constructor

Definition at line 85 of file CigiArtPartCtrlV1.cpp.

References CigiBaseArtPartCtrl::ArtPartEn, CigiBaseArtPartCtrl::ArtPartIDV1, CigiBaseArtPartCtrl::ArtPartIDV3, CIGI_ART_PART_CTRL_PACKET_ID_V1, CIGI_ART_PART_CTRL_PACKET_SIZE_V1, CigiBaseArtPartCtrl::EntityID, CigiBasePacket::MinorVersion, CigiBasePacket::PacketID, CigiBasePacket::PacketSize, CigiBaseArtPartCtrl::Pitch, CigiBaseArtPartCtrl::PitchEn, CigiBaseArtPartCtrl::Roll, CigiBaseArtPartCtrl::RollEn, CigiBasePacket::Version, CigiBaseArtPartCtrl::XOff, CigiBaseArtPartCtrl::XOffEn, CigiBaseArtPartCtrl::Yaw, CigiBaseArtPartCtrl::YawEn, CigiBaseArtPartCtrl::YOff, CigiBaseArtPartCtrl::YOffEn, CigiBaseArtPartCtrl::ZOff, and CigiBaseArtPartCtrl::ZOffEn.

00086 {
00087 
00088    PacketID = CIGI_ART_PART_CTRL_PACKET_ID_V1;
00089    PacketSize = CIGI_ART_PART_CTRL_PACKET_SIZE_V1;
00090    Version = 1;
00091    MinorVersion = 0;
00092 
00093    EntityID = 0;
00094    ArtPartIDV1 = 0;
00095    ArtPartIDV3 = 0;
00096    ArtPartEn = false;
00097    XOffEn = false;
00098    YOffEn = false;
00099    ZOffEn = false;
00100    RollEn = false;
00101    PitchEn = false;
00102    YawEn = false;
00103    XOff = 0.0;
00104    YOff = 0.0;
00105    ZOff = 0.0;
00106    Roll = 0.0;
00107    Pitch = 0.0;
00108    Yaw = 0.0;
00109 
00110 }

CigiArtPartCtrlV1::~CigiArtPartCtrlV1 (  )  [virtual]

General Destructor

Definition at line 115 of file CigiArtPartCtrlV1.cpp.

00116 {
00117 
00118 }


Member Function Documentation

Cigi_int8 CigiArtPartCtrlV1::GetArtPartIDV1 ( void   )  const [inline]

Gets the ArtPartID value.

Returns:
the current ArtPartID.

Definition at line 121 of file CigiArtPartCtrlV1.h.

00121 { return(ArtPartIDV1); }

int CigiArtPartCtrlV1::Pack ( CigiBasePacket Base,
Cigi_uint8 Buff,
void *  Spec 
) const [virtual]

The virtual Pack function for CIGI 1

Parameters:
Base - A pointer to the instance of the packet to be packed. (Downcast to CigiBasePacket)
Buff - A pointer to the current pack point.
Spec - A pointer to special data - This is not used in this class.
Returns:
This returns CIGI_SUCCESS or an error code defined in CigiErrorCodes.h

Implements CigiBaseArtPartCtrl.

Definition at line 127 of file CigiArtPartCtrlV1.cpp.

References CigiBaseArtPartCtrl::ArtPartEn, CigiBaseArtPartCtrl::ArtPartIDV1, PackPointerUnion::c, CIGI_ART_PART_CTRL_PACKET_SIZE_V1, CIGI_FLOAT_TO_B6, CIGI_FLOAT_TO_BA, CIGI_SCOPY2, PackPointerUnion::d, CigiBaseArtPartCtrl::EntityID, CigiBasePacket::PacketID, CigiBasePacket::PacketSize, CigiBaseArtPartCtrl::Pitch, CigiBaseArtPartCtrl::PitchEn, CigiBaseArtPartCtrl::Roll, CigiBaseArtPartCtrl::RollEn, PackPointerUnion::s, CigiBaseArtPartCtrl::XOff, CigiBaseArtPartCtrl::XOffEn, CigiBaseArtPartCtrl::Yaw, CigiBaseArtPartCtrl::YawEn, CigiBaseArtPartCtrl::YOff, CigiBaseArtPartCtrl::YOffEn, CigiBaseArtPartCtrl::ZOff, and CigiBaseArtPartCtrl::ZOffEn.

00128 {
00129    double DBuf[6];
00130 
00131    Cigi_int16  tsCnvt;
00132    Cigi_int32   tlCnvt;
00133    double tdCnvt;
00134 
00135    union Conversion_short
00136    {
00137       Cigi_uint16 u;
00138       Cigi_int16 s;
00139    } tuCnvt;
00140 
00141    Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00142 
00143    PackPointer CDta;
00144 
00145    CigiBaseArtPartCtrl * Data = ( CigiBaseArtPartCtrl *)Base;
00146 
00147    CDta.d = DBuf;
00148 
00149    *CDta.c++ = PacketID;
00150    *CDta.c++ = PacketSize;
00151 
00152    CIGI_SCOPY2(CDta.s++, &Data->EntityID);
00153    *CDta.c++ = Data->ArtPartIDV1;
00154 
00155    Cigi_uint8 HDta = 0;
00156 
00157    if(Data->ArtPartEn)
00158       HDta = 0x80;
00159 
00160    if(Data->XOffEn)
00161       HDta |= 0x40;
00162 
00163    if(Data->YOffEn)
00164       HDta |= 0x20;
00165 
00166    if(Data->ZOffEn)
00167       HDta |= 0x10;
00168 
00169    if(Data->RollEn)
00170       HDta |= 0x08;
00171 
00172    if(Data->PitchEn)
00173       HDta |= 0x04;
00174 
00175    if(Data->YawEn)
00176       HDta |= 0x02;
00177 
00178    *CDta.c++ = HDta;
00179 
00180    *CDta.s++ = 0;
00181 
00182    // b6 & degrees
00183    tsCnvt = CIGI_FLOAT_TO_B6((double)Data->XOff);
00184    CIGI_SCOPY2(CDta.s++, &tsCnvt);
00185 
00186    tsCnvt = CIGI_FLOAT_TO_B6((double)Data->YOff);
00187    CIGI_SCOPY2(CDta.s++, &tsCnvt);
00188 
00189    tsCnvt = CIGI_FLOAT_TO_B6((double)Data->ZOff);
00190    CIGI_SCOPY2(CDta.s++, &tsCnvt);
00191 
00192    tdCnvt = (double)Data->Roll;
00193    if(tdCnvt < 0.0)
00194       tdCnvt += 360.0;
00195    tlCnvt = CIGI_FLOAT_TO_BA(tdCnvt);
00196    if((tlCnvt > 65535)||(tlCnvt < 0))
00197       tsCnvt = 0;
00198    else
00199    {
00200       tuCnvt.u = (Cigi_uint16)tlCnvt;
00201       tsCnvt = tuCnvt.s;
00202    }
00203    CIGI_SCOPY2(CDta.s++, &tsCnvt);
00204 
00205    tdCnvt = (double)Data->Pitch;
00206    if(tdCnvt < 0.0)
00207       tdCnvt += 360.0;
00208    tlCnvt = CIGI_FLOAT_TO_BA(tdCnvt);
00209    if((tlCnvt > 65535)||(tlCnvt < 0))
00210       tsCnvt = 0;
00211    else
00212    {
00213       tuCnvt.u = (Cigi_uint16)tlCnvt;
00214       tsCnvt = tuCnvt.s;
00215    }
00216    CIGI_SCOPY2(CDta.s++, &tsCnvt);
00217 
00218    tlCnvt = CIGI_FLOAT_TO_BA((double)Data->Yaw);
00219    if((tlCnvt > 65535)||(tlCnvt < 0))
00220       tsCnvt = 0;
00221    else
00222    {
00223       tuCnvt.u = (Cigi_uint16)tlCnvt;
00224       tsCnvt = tuCnvt.s;
00225    }
00226    CIGI_SCOPY2(CDta.s++, &tsCnvt);
00227 
00228    memcpy(Buff,tBuf,CIGI_ART_PART_CTRL_PACKET_SIZE_V1);
00229 
00230    return(PacketSize);
00231 
00232 }

int CigiArtPartCtrlV1::SetArtPartID ( const Cigi_int8  ArtPartIDIn,
bool  bndchk = true 
)

Sets the ArtPartID with bound checking control

Parameters:
ArtPartIDIn - Identifies the specific articulated part of a specified entity to which this data is applied.
bndchk - Enables (true) or disables (false) bounds checking.
Returns:
This returns CIGI_SUCCESS or an error code defined in CigiErrorCodes.h

Definition at line 314 of file CigiArtPartCtrlV1.cpp.

References CigiBaseArtPartCtrl::ArtPartIDV1, CigiBaseArtPartCtrl::ArtPartIDV3, and CIGI_SUCCESS.

00315 {
00316    union ArtPartConv
00317    {
00318       Cigi_uint8 uc;
00319       Cigi_int8 c;
00320    } ArtC;
00321 
00322    ArtPartIDV1 = ArtPartIDIn;
00323 
00324    ArtC.c = ArtPartIDV1;
00325    ArtPartIDV3 = ArtC.uc;
00326 
00327    return(CIGI_SUCCESS);
00328 }

int CigiArtPartCtrlV1::Unpack ( Cigi_uint8 Buff,
bool  Swap,
void *  Spec 
) [virtual]

The virtual Unpack function for CIGI 1

Parameters:
Buff - A pointer to the current pack point.
Swap - N/A for V1 & V2
Spec - A pointer to special data - This is not used in this class.
Returns:
This returns CIGI_SUCCESS or an error code defined in CigiErrorCodes.h

Implements CigiBaseArtPartCtrl.

Definition at line 237 of file CigiArtPartCtrlV1.cpp.

References CigiBaseArtPartCtrl::ArtPartEn, CigiBaseArtPartCtrl::ArtPartIDV1, CigiBaseArtPartCtrl::ArtPartIDV3, PackPointerUnion::c, CIGI_ART_PART_CTRL_PACKET_SIZE_V1, CIGI_B6_TO_FLOAT, CIGI_BA_TO_FLOAT, CIGI_SCOPY2, PackPointerUnion::d, CigiBaseArtPartCtrl::EntityID, CigiBasePacket::PacketSize, CigiBaseArtPartCtrl::Pitch, CigiBaseArtPartCtrl::PitchEn, CigiBaseArtPartCtrl::Roll, CigiBaseArtPartCtrl::RollEn, PackPointerUnion::s, CigiBaseArtPartCtrl::XOff, CigiBaseArtPartCtrl::XOffEn, CigiBaseArtPartCtrl::Yaw, CigiBaseArtPartCtrl::YawEn, CigiBaseArtPartCtrl::YOff, CigiBaseArtPartCtrl::YOffEn, CigiBaseArtPartCtrl::ZOff, and CigiBaseArtPartCtrl::ZOffEn.

00238 {
00239    union ArtPartConv
00240    {
00241       Cigi_uint8 uc;
00242       Cigi_int8 c;
00243    } ArtC;
00244 
00245    double DBuf[6];
00246 
00247    Cigi_int16  tsCnvt;
00248 
00249    Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00250 
00251    PackPointer CDta;
00252 
00253    memcpy(tBuf,Buff,CIGI_ART_PART_CTRL_PACKET_SIZE_V1);
00254 
00255    CDta.d = DBuf;
00256 
00257    CDta.c += 2;  // Step over packet id and size
00258 
00259    CIGI_SCOPY2(&EntityID, CDta.s++);
00260    ArtPartIDV1 = *CDta.c++;
00261 
00262    Cigi_uint16 HDta = *CDta.c++;
00263 
00264    ArtPartEn = ((HDta & 0x80) != 0);
00265    XOffEn  = ((HDta & 0x40) != 0);
00266    ZOffEn  = ((HDta & 0x10) != 0);
00267    YOffEn  = ((HDta & 0x20) != 0);
00268    RollEn  = ((HDta & 0x08) != 0);
00269    PitchEn = ((HDta & 0x04) != 0);
00270    YawEn   = ((HDta & 0x02) != 0);
00271 
00272    CDta.s++;
00273 
00274    // b6 & degrees
00275    CIGI_SCOPY2(&tsCnvt, CDta.s++);
00276    XOff = (float)CIGI_B6_TO_FLOAT(tsCnvt);
00277 
00278    CIGI_SCOPY2(&tsCnvt, CDta.s++);
00279    YOff = (float)CIGI_B6_TO_FLOAT(tsCnvt);
00280 
00281    CIGI_SCOPY2(&tsCnvt, CDta.s++);
00282    ZOff = (float)CIGI_B6_TO_FLOAT(tsCnvt);
00283 
00284    CIGI_SCOPY2(&tsCnvt, CDta.s++);
00285    Roll = (float)CIGI_BA_TO_FLOAT(tsCnvt);
00286    if(Roll > 180.0)
00287       Roll -= 360.0;
00288 
00289    CIGI_SCOPY2(&tsCnvt, CDta.s++);
00290    Pitch = (float)CIGI_BA_TO_FLOAT(tsCnvt);
00291    if(Pitch > 180.0)
00292       Pitch -= 360.0;
00293 
00294    CIGI_SCOPY2(&tsCnvt, CDta.s++);
00295    Yaw = (float)CIGI_BA_TO_FLOAT(tsCnvt);
00296 
00297    ArtC.c = ArtPartIDV1;
00298    ArtPartIDV3 = ArtC.uc;
00299 
00300    return(PacketSize);
00301 
00302 }


The documentation for this class was generated from the following files:
Generated on Wed Apr 29 09:00:04 2009 for CCL by  doxygen 1.4.7