CigiSymbolCircleDefV3_3 Class Reference

#include <CigiSymbolCircleDefV3_3.h>

Inheritance diagram for CigiSymbolCircleDefV3_3:

CigiBaseSymbolCircleDef CigiBaseVariableSizePckt CigiBasePacket List of all members.

Public Member Functions

 CigiSymbolCircleDefV3_3 (void)
virtual ~CigiSymbolCircleDefV3_3 (void)
 CigiSymbolCircleDefV3_3 (const CigiSymbolCircleDefV3_3 &BaseIn)
CigiSymbolCircleDefV3_3operator= (const CigiSymbolCircleDefV3_3 &BaseIn)
virtual int Pack (CigiBasePacket *Base, Cigi_uint8 *Buff, void *Spec) const
virtual int Unpack (Cigi_uint8 *Buff, bool Swap, void *Spec)
virtual CigiBaseCircleSymbolDataAddCircle (void)
virtual int RemoveCircle (int CircleIndex, bool bndchk=true)

Detailed Description

The base class for all packets.

Definition at line 51 of file CigiSymbolCircleDefV3_3.h.


Constructor & Destructor Documentation

CigiSymbolCircleDefV3_3::CigiSymbolCircleDefV3_3 ( void   ) 

General Constructor

Definition at line 59 of file CigiSymbolCircleDefV3_3.cpp.

References CIGI_SYMBOL_CIRCLE_DEFINITION_PACKET_ID_V3_3, CIGI_SYMBOL_CIRCLE_DEFINITION_PACKET_SIZE_V3_3, CigiBaseSymbolCircleDef::DrawingStyle, CigiBaseSymbolCircleDef::Line, CigiBaseSymbolCircleDef::LineWidth, CigiBasePacket::MinorVersion, CigiBasePacket::PacketID, CigiBasePacket::PacketSize, CigiBaseSymbolCircleDef::StipplePattern, CigiBaseSymbolCircleDef::StipplePatternLen, CigiBaseSymbolCircleDef::SymbolID, CigiBaseVariableSizePckt::VariableDataSize, and CigiBasePacket::Version.

00060 {
00061    PacketID = CIGI_SYMBOL_CIRCLE_DEFINITION_PACKET_ID_V3_3;
00062    PacketSize = CIGI_SYMBOL_CIRCLE_DEFINITION_PACKET_SIZE_V3_3;
00063    Version = 3;
00064    MinorVersion = 3;
00065    VariableDataSize = 0;
00066 
00067    SymbolID = 0;
00068    DrawingStyle = Line;
00069    StipplePattern = 0;
00070    LineWidth = 0.0f;
00071    StipplePatternLen = 0.0f;
00072 
00073 }

CigiSymbolCircleDefV3_3::~CigiSymbolCircleDefV3_3 ( void   )  [virtual]

General Destructor

Definition at line 78 of file CigiSymbolCircleDefV3_3.cpp.

00079 {
00080 }

CigiSymbolCircleDefV3_3::CigiSymbolCircleDefV3_3 ( const CigiSymbolCircleDefV3_3 BaseIn  ) 

Copy Constructor

Definition at line 85 of file CigiSymbolCircleDefV3_3.cpp.

References CIGI_CIRCLE_SYMBOL_DATA_SIZE_V3_3, CIGI_SYMBOL_CIRCLE_DEFINITION_PACKET_ID_V3_3, CigiBaseSymbolCircleDef::Circles, CigiBaseSymbolCircleDef::DrawingStyle, CigiBaseSymbolCircleDef::LineWidth, CigiBasePacket::MinorVersion, CigiBasePacket::PacketID, CigiBasePacket::PacketSize, CigiBaseSymbolCircleDef::StipplePattern, CigiBaseSymbolCircleDef::StipplePatternLen, CigiBaseSymbolCircleDef::SymbolID, CigiBaseVariableSizePckt::VariableDataSize, and CigiBasePacket::Version.

00086 : CigiBaseSymbolCircleDef((CigiBaseSymbolCircleDef &)BaseIn)
00087 {
00088    PacketID = CIGI_SYMBOL_CIRCLE_DEFINITION_PACKET_ID_V3_3;
00089    PacketSize = CIGI_SYMBOL_CIRCLE_DEFINITION_PACKET_ID_V3_3;
00090    Version = 3;
00091    MinorVersion = 3;
00092 
00093    VariableDataSize = 0;
00094 
00095    SymbolID = BaseIn.SymbolID;
00096    DrawingStyle = BaseIn.DrawingStyle;
00097    StipplePattern = BaseIn.StipplePattern;
00098    LineWidth = BaseIn.LineWidth;
00099    StipplePatternLen = BaseIn.StipplePatternLen;
00100 
00101    CigiCircleSymbolDataV3_3 *NewCircle = NULL;
00102    CigiCircleSymbolDataV3_3 *pCircle;
00103    vector<CigiBaseCircleSymbolData *>::const_iterator iCircle;
00104    for(iCircle=BaseIn.Circles.begin();iCircle!=BaseIn.Circles.end();iCircle++)
00105    {
00106       pCircle = (CigiCircleSymbolDataV3_3 *)*iCircle;
00107       if(pCircle != NULL)
00108       {
00109          NewCircle = new CigiCircleSymbolDataV3_3;
00110          *NewCircle = *pCircle;
00111          Circles.push_back((CigiBaseCircleSymbolData *)NewCircle);
00112          VariableDataSize += CIGI_CIRCLE_SYMBOL_DATA_SIZE_V3_3;
00113       }
00114    }
00115 }


Member Function Documentation

CigiBaseCircleSymbolData * CigiSymbolCircleDefV3_3::AddCircle ( void   )  [virtual]

A virtual Create Circle function. This will create a circle object and insert a pointer to the created circle object into the Circle Vector.

Returns:
The pointer to the new circle object. If the circle exceeds the maximum number of circles or the circle object cannot be created, this will return a NULL pointer.

Implements CigiBaseSymbolCircleDef.

Definition at line 285 of file CigiSymbolCircleDefV3_3.cpp.

References CIGI_CIRCLE_SYMBOL_DATA_SIZE_V3_3, CigiBaseSymbolCircleDef::Circles, and CigiBaseVariableSizePckt::VariableDataSize.

00286 {
00287    CigiCircleSymbolDataV3_3 *NewCircle = NULL;
00288    int Cnt = Circles.size();
00289 
00290    if(Cnt < 10)
00291    {
00292       NewCircle = new CigiCircleSymbolDataV3_3;
00293       Circles.push_back((CigiBaseCircleSymbolData *)NewCircle);
00294       VariableDataSize += CIGI_CIRCLE_SYMBOL_DATA_SIZE_V3_3;
00295    }
00296 
00297    return((CigiBaseCircleSymbolData *)NewCircle);
00298 }

CigiSymbolCircleDefV3_3 & CigiSymbolCircleDefV3_3::operator= ( const CigiSymbolCircleDefV3_3 BaseIn  ) 

Assignment operator

Definition at line 120 of file CigiSymbolCircleDefV3_3.cpp.

References CIGI_CIRCLE_SYMBOL_DATA_SIZE_V3_3, CIGI_SYMBOL_CIRCLE_DEFINITION_PACKET_ID_V3_3, CigiBaseSymbolCircleDef::Circles, CigiBaseSymbolCircleDef::DrawingStyle, CigiBaseSymbolCircleDef::LineWidth, CigiBasePacket::MinorVersion, CigiBasePacket::PacketID, CigiBasePacket::PacketSize, CigiBaseSymbolCircleDef::StipplePattern, CigiBaseSymbolCircleDef::StipplePatternLen, CigiBaseSymbolCircleDef::SymbolID, CigiBaseVariableSizePckt::VariableDataSize, and CigiBasePacket::Version.

00121 {
00122    PacketID = CIGI_SYMBOL_CIRCLE_DEFINITION_PACKET_ID_V3_3;
00123    PacketSize = CIGI_SYMBOL_CIRCLE_DEFINITION_PACKET_ID_V3_3;
00124    Version = 3;
00125    MinorVersion = 3;
00126 
00127    CigiBaseCircleSymbolData *pbCircle;
00128    vector<CigiBaseCircleSymbolData *>::iterator ibCircle;
00129    for(ibCircle=Circles.begin();ibCircle!=Circles.end();ibCircle++)
00130    {
00131       pbCircle = *ibCircle;
00132       if(pbCircle != NULL)
00133          delete pbCircle;
00134    }
00135    Circles.clear();
00136    VariableDataSize = 0;
00137 
00138    SymbolID = BaseIn.SymbolID;
00139    DrawingStyle = BaseIn.DrawingStyle;
00140    StipplePattern = BaseIn.StipplePattern;
00141    LineWidth = BaseIn.LineWidth;
00142    StipplePatternLen = BaseIn.StipplePatternLen;
00143 
00144    CigiCircleSymbolDataV3_3 *NewCircle = NULL;
00145    CigiCircleSymbolDataV3_3 *pCircle;
00146    vector<CigiBaseCircleSymbolData *>::const_iterator iCircle;
00147    for(iCircle=BaseIn.Circles.begin();iCircle!=BaseIn.Circles.end();iCircle++)
00148    {
00149       pCircle = (CigiCircleSymbolDataV3_3 *)*iCircle;
00150       if(pCircle != NULL)
00151       {
00152          NewCircle = new CigiCircleSymbolDataV3_3;
00153          *NewCircle = *pCircle;
00154          Circles.push_back((CigiBaseCircleSymbolData *)NewCircle);
00155          VariableDataSize += CIGI_CIRCLE_SYMBOL_DATA_SIZE_V3_3;
00156       }
00157    }
00158 
00159    return(*this);
00160 }

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

A virtual Pack function.

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.
Returns:
This returns CIGI_SUCCESS or an error code defined in CigiErrorCodes.h

Implements CigiBaseSymbolCircleDef.

Definition at line 171 of file CigiSymbolCircleDefV3_3.cpp.

References PackPointerUnion::c, CigiBaseSymbolCircleDef::Circles, CigiBaseSymbolCircleDef::DrawingStyle, PackPointerUnion::f, CigiBaseSymbolCircleDef::LineWidth, CigiCircleSymbolDataV3_3::Pack(), CigiBasePacket::PacketID, CigiBasePacket::PacketSize, PackPointerUnion::s, CigiBaseSymbolCircleDef::StipplePattern, CigiBaseSymbolCircleDef::StipplePatternLen, CigiBaseSymbolCircleDef::SymbolID, and CigiBaseVariableSizePckt::VariableDataSize.

00172 {
00173    PackPointer CDta;
00174 
00175    CigiSymbolCircleDefV3_3 * Data =
00176       ( CigiSymbolCircleDefV3_3 *)Base;
00177 
00178    CDta.c = Buff;
00179 
00180    *CDta.c++ = PacketID;
00181    *CDta.c++ = (PacketSize + Data->VariableDataSize);
00182 
00183    *CDta.s++ = Data->SymbolID;
00184 
00185    *CDta.c++ = (Data->DrawingStyle != 0) ? 1 : 0;
00186 
00187    *CDta.c++ = 0;
00188 
00189    *CDta.s++ = Data->StipplePattern;
00190    *CDta.f++ = Data->LineWidth;
00191    *CDta.f++ = Data->StipplePatternLen;
00192 
00193    int Cnt;
00194    CigiCircleSymbolDataV3_3 *pCircle;
00195    vector<CigiBaseCircleSymbolData *>::iterator iCircle;
00196    for(iCircle=Data->Circles.begin();iCircle!=Data->Circles.end();iCircle++)
00197    {
00198       pCircle = (CigiCircleSymbolDataV3_3 *)*iCircle;
00199       if(pCircle != NULL)
00200       {
00201          Cnt = pCircle->Pack((CigiBaseCircleSymbolData *)pCircle,CDta.c);
00202          CDta.c += Cnt;
00203       }
00204    }
00205 
00206    return(PacketSize + Data->VariableDataSize);
00207 
00208 }

int CigiSymbolCircleDefV3_3::RemoveCircle ( int  CircleIndex,
bool  bndchk = true 
) [virtual]

A virtual Remove Circle function. This will remove a Circle object from the Circle Vector.

Parameters:
CircleIndex - Specifies the index of the desired circle.
bndchk - Enables (true) or disables (false) bounds checking.
Returns:
This returns CIGI_SUCCESS or an error code defined in CigiErrorCodes.h

Implements CigiBaseSymbolCircleDef.

Definition at line 303 of file CigiSymbolCircleDefV3_3.cpp.

References CIGI_CIRCLE_SYMBOL_DATA_SIZE_V3_3, CIGI_ERROR_VALUE_OUT_OF_RANGE, CIGI_SUCCESS, CigiBaseSymbolCircleDef::Circles, and CigiBaseVariableSizePckt::VariableDataSize.

00304 {
00305    int stat = CIGI_SUCCESS;
00306 
00307    int Cnt = Circles.size();
00308 
00309    if((CircleIndex >= 0) && (CircleIndex < Cnt))
00310    {
00311       vector<CigiBaseCircleSymbolData *>::iterator iCircle = Circles.begin();
00312 
00313       iCircle += CircleIndex;
00314 
00315       CigiCircleSymbolDataV3_3 *pCircle =
00316          (CigiCircleSymbolDataV3_3 *)*iCircle;
00317       if(pCircle != NULL)
00318          delete pCircle;
00319 
00320       Circles.erase(iCircle);
00321 
00322       VariableDataSize -= CIGI_CIRCLE_SYMBOL_DATA_SIZE_V3_3;
00323       if(VariableDataSize < 0)
00324          VariableDataSize = 0;
00325 
00326    }
00327    else
00328    {
00329 #ifndef CIGI_NO_BND_CHK
00330       if(bndchk)
00331       {
00332 #ifndef CIGI_NO_EXCEPT
00333          throw CigiValueOutOfRangeException("CircleIndex", (int)CircleIndex,0,Cnt);
00334 #endif
00335          stat = CIGI_ERROR_VALUE_OUT_OF_RANGE;
00336       }
00337 #endif
00338    }
00339 
00340    return(stat);
00341 }

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

A virtual Unpack function.

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

Implements CigiBaseSymbolCircleDef.

Definition at line 213 of file CigiSymbolCircleDefV3_3.cpp.

References PackPointerUnion::c, CIGI_CIRCLE_SYMBOL_DATA_SIZE_V3_3, CIGI_SYMBOL_CIRCLE_DEFINITION_PACKET_SIZE_V3_3, CigiSwap2(), CigiSwap4(), CigiBaseSymbolCircleDef::Circles, CigiBaseSymbolCircleDef::DrawingStyle, PackPointerUnion::f, CigiBaseSymbolCircleDef::Fill, CigiBaseSymbolCircleDef::Line, CigiBaseSymbolCircleDef::LineWidth, CigiBasePacket::PacketSize, PackPointerUnion::s, CigiBaseSymbolCircleDef::StipplePattern, CigiBaseSymbolCircleDef::StipplePatternLen, CigiBaseSymbolCircleDef::SymbolID, CigiBaseCircleSymbolData::Unpack(), and CigiBaseVariableSizePckt::VariableDataSize.

00214 {
00215    PackPointer CDta;
00216    unsigned char HDta = 0;
00217 
00218    CDta.c = Buff;
00219 
00220    // Clear the current Circle Vector
00221    CigiBaseCircleSymbolData *pbCircle;
00222    vector<CigiBaseCircleSymbolData *>::iterator ibCircle;
00223    for(ibCircle=Circles.begin();ibCircle!=Circles.end();ibCircle++)
00224    {
00225       pbCircle = *ibCircle;
00226       if(pbCircle != NULL)
00227          delete pbCircle;
00228    }
00229    Circles.clear();
00230    VariableDataSize = 0;
00231 
00232    CDta.c++;  // Step over packet id
00233 
00234    // Determine variable data size;
00235    int PcktRemain = *CDta.c++;
00236    PcktRemain -= CIGI_SYMBOL_CIRCLE_DEFINITION_PACKET_SIZE_V3_3;
00237    VariableDataSize = PcktRemain;
00238 
00239    if(!Swap)
00240    {
00241       SymbolID = *CDta.s++;
00242       HDta = *CDta.c++;
00243       CDta.c++;
00244       StipplePattern = *CDta.s++;
00245       LineWidth = *CDta.f++;
00246       StipplePatternLen = *CDta.f++;
00247    }
00248    else
00249    {
00250       CigiSwap2(&SymbolID, CDta.s++);
00251       HDta = *CDta.c++;
00252       CDta.c++;
00253       CigiSwap2(&StipplePattern, CDta.s++);
00254       CigiSwap4(&LineWidth, CDta.f++);
00255       CigiSwap4(&StipplePatternLen, CDta.f++);
00256    }
00257 
00258    DrawingStyle = (HDta != 0) ? Fill : Line ;
00259 
00260    // Unpack Circles
00261    int cnt = 0;
00262    CigiCircleSymbolDataV3_3 *pCircle;
00263    while(PcktRemain >= CIGI_CIRCLE_SYMBOL_DATA_SIZE_V3_3)
00264    {
00265       pCircle = new CigiCircleSymbolDataV3_3;
00266       Circles.push_back((CigiBaseCircleSymbolData *)pCircle);
00267       cnt = pCircle->Unpack(CDta.c,Swap);
00268       PcktRemain -= cnt;
00269       CDta.c += cnt;
00270    }
00271 
00272    return(PacketSize + VariableDataSize);
00273 
00274 }


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