CigiSymbolLineDefV3_3 Class Reference

#include <CigiSymbolLineDefV3_3.h>

Inheritance diagram for CigiSymbolLineDefV3_3:

CigiBaseSymbolLineDef CigiBaseVariableSizePckt CigiBasePacket List of all members.

Public Member Functions

 CigiSymbolLineDefV3_3 (void)
virtual ~CigiSymbolLineDefV3_3 (void)
 CigiSymbolLineDefV3_3 (const CigiSymbolLineDefV3_3 &BaseIn)
CigiSymbolLineDefV3_3operator= (const CigiSymbolLineDefV3_3 &BaseIn)
virtual int Pack (CigiBasePacket *Base, Cigi_uint8 *Buff, void *Spec) const
virtual int Unpack (Cigi_uint8 *Buff, bool Swap, void *Spec)
virtual CigiBaseVertexSymbolDataAddVertex (void)
virtual int RemoveVertex (int VertexIndex, bool bndchk=true)

Detailed Description

The base class for all packets.

Definition at line 51 of file CigiSymbolLineDefV3_3.h.


Constructor & Destructor Documentation

CigiSymbolLineDefV3_3::CigiSymbolLineDefV3_3 ( void   ) 

General Constructor

Definition at line 56 of file CigiSymbolLineDefV3_3.cpp.

References CIGI_SYMBOL_LINE_DEFINITION_PACKET_ID_V3_3, CIGI_SYMBOL_LINE_DEFINITION_PACKET_SIZE_V3_3, CigiBaseSymbolLineDef::LineWidth, CigiBasePacket::MinorVersion, CigiBasePacket::PacketID, CigiBasePacket::PacketSize, CigiBaseSymbolLineDef::Points, CigiBaseSymbolLineDef::Primitive, CigiBaseSymbolLineDef::StipplePattern, CigiBaseSymbolLineDef::StipplePatternLen, CigiBaseSymbolLineDef::SymbolID, CigiBaseVariableSizePckt::VariableDataSize, and CigiBasePacket::Version.

00057 {
00058    PacketID = CIGI_SYMBOL_LINE_DEFINITION_PACKET_ID_V3_3;
00059    PacketSize = CIGI_SYMBOL_LINE_DEFINITION_PACKET_SIZE_V3_3;
00060    Version = 3;
00061    MinorVersion = 3;
00062    VariableDataSize = 0;
00063 
00064    SymbolID = 0;
00065    Primitive = Points;
00066    StipplePattern = 0;
00067    LineWidth = 0.0f;
00068    StipplePatternLen = 0.0f;
00069 
00070 }

CigiSymbolLineDefV3_3::~CigiSymbolLineDefV3_3 ( void   )  [virtual]

General Destructor

Definition at line 75 of file CigiSymbolLineDefV3_3.cpp.

00076 {
00077 }

CigiSymbolLineDefV3_3::CigiSymbolLineDefV3_3 ( const CigiSymbolLineDefV3_3 BaseIn  ) 

Copy Constructor

Definition at line 82 of file CigiSymbolLineDefV3_3.cpp.

References CIGI_SYMBOL_LINE_DEFINITION_PACKET_ID_V3_3, CIGI_VERTEX_SYMBOL_DATA_SIZE_V3_3, CigiBaseSymbolLineDef::LineWidth, CigiBasePacket::MinorVersion, CigiBasePacket::PacketID, CigiBasePacket::PacketSize, CigiBaseSymbolLineDef::Primitive, CigiBaseSymbolLineDef::StipplePattern, CigiBaseSymbolLineDef::StipplePatternLen, CigiBaseSymbolLineDef::SymbolID, CigiBaseVariableSizePckt::VariableDataSize, CigiBasePacket::Version, and CigiBaseSymbolLineDef::Vertices.

00083 : CigiBaseSymbolLineDef((CigiBaseSymbolLineDef &)BaseIn)
00084 {
00085    PacketID = CIGI_SYMBOL_LINE_DEFINITION_PACKET_ID_V3_3;
00086    PacketSize = CIGI_SYMBOL_LINE_DEFINITION_PACKET_ID_V3_3;
00087    Version = 3;
00088    MinorVersion = 3;
00089 
00090    VariableDataSize = 0;
00091 
00092    SymbolID = BaseIn.SymbolID;
00093    Primitive = BaseIn.Primitive;
00094    StipplePattern = BaseIn.StipplePattern;
00095    LineWidth = BaseIn.LineWidth;
00096    StipplePatternLen = BaseIn.StipplePatternLen;
00097 
00098    CigiVertexSymbolDataV3_3 *NewVertex = NULL;
00099    CigiVertexSymbolDataV3_3 *pVtx;
00100    vector<CigiBaseVertexSymbolData *>::const_iterator iVtx;
00101    for(iVtx=BaseIn.Vertices.begin();iVtx!=BaseIn.Vertices.end();iVtx++)
00102    {
00103       pVtx = (CigiVertexSymbolDataV3_3 *)*iVtx;
00104       if(pVtx != NULL)
00105       {
00106          NewVertex = new CigiVertexSymbolDataV3_3;
00107          *NewVertex = *pVtx;
00108          Vertices.push_back((CigiBaseVertexSymbolData *)NewVertex);
00109          VariableDataSize += CIGI_VERTEX_SYMBOL_DATA_SIZE_V3_3;
00110       }
00111    }
00112 }


Member Function Documentation

CigiBaseVertexSymbolData * CigiSymbolLineDefV3_3::AddVertex ( void   )  [virtual]

A virtual Create Vertex function. This will create a Vertex object and insert a pointer to that created vertex into the Vertex Vector.

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

Implements CigiBaseSymbolLineDef.

Definition at line 282 of file CigiSymbolLineDefV3_3.cpp.

References CIGI_VERTEX_SYMBOL_DATA_SIZE_V3_3, CigiBaseVariableSizePckt::VariableDataSize, and CigiBaseSymbolLineDef::Vertices.

00283 {
00284    CigiVertexSymbolDataV3_3 *NewVertex = NULL;
00285    int Cnt = Vertices.size();
00286 
00287    if(Cnt < 29)
00288    {
00289       NewVertex = new CigiVertexSymbolDataV3_3;
00290       Vertices.push_back((CigiBaseVertexSymbolData *)NewVertex);
00291       VariableDataSize += CIGI_VERTEX_SYMBOL_DATA_SIZE_V3_3;
00292    }
00293 
00294    return((CigiBaseVertexSymbolData *)NewVertex);
00295 }

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

Assignment operator

Definition at line 117 of file CigiSymbolLineDefV3_3.cpp.

References CIGI_SYMBOL_LINE_DEFINITION_PACKET_ID_V3_3, CIGI_VERTEX_SYMBOL_DATA_SIZE_V3_3, CigiBaseSymbolLineDef::LineWidth, CigiBasePacket::MinorVersion, CigiBasePacket::PacketID, CigiBasePacket::PacketSize, CigiBaseSymbolLineDef::Primitive, CigiBaseSymbolLineDef::StipplePattern, CigiBaseSymbolLineDef::StipplePatternLen, CigiBaseSymbolLineDef::SymbolID, CigiBaseVariableSizePckt::VariableDataSize, CigiBasePacket::Version, and CigiBaseSymbolLineDef::Vertices.

00118 {
00119    PacketID = CIGI_SYMBOL_LINE_DEFINITION_PACKET_ID_V3_3;
00120    PacketSize = CIGI_SYMBOL_LINE_DEFINITION_PACKET_ID_V3_3;
00121    Version = 3;
00122    MinorVersion = 3;
00123 
00124    CigiBaseVertexSymbolData *pbVertex;
00125    vector<CigiBaseVertexSymbolData *>::iterator ibVertex;
00126    for(ibVertex=Vertices.begin();ibVertex!=Vertices.end();ibVertex++)
00127    {
00128       pbVertex = *ibVertex;
00129       if(pbVertex != NULL)
00130          delete pbVertex;
00131    }
00132    Vertices.clear();
00133    VariableDataSize = 0;
00134 
00135    SymbolID = BaseIn.SymbolID;
00136    Primitive = BaseIn.Primitive;
00137    StipplePattern = BaseIn.StipplePattern;
00138    LineWidth = BaseIn.LineWidth;
00139    StipplePatternLen = BaseIn.StipplePatternLen;
00140 
00141    CigiVertexSymbolDataV3_3 *NewVertex = NULL;
00142    CigiVertexSymbolDataV3_3 *pVtx;
00143    vector<CigiBaseVertexSymbolData *>::const_iterator iVtx;
00144    for(iVtx=BaseIn.Vertices.begin();iVtx!=BaseIn.Vertices.end();iVtx++)
00145    {
00146       pVtx = (CigiVertexSymbolDataV3_3 *)*iVtx;
00147       if(pVtx != NULL)
00148       {
00149          NewVertex = new CigiVertexSymbolDataV3_3;
00150          *NewVertex = *pVtx;
00151          Vertices.push_back((CigiBaseVertexSymbolData *)NewVertex);
00152          VariableDataSize += CIGI_VERTEX_SYMBOL_DATA_SIZE_V3_3;
00153       }
00154    }
00155 
00156    return(*this);
00157 }

int CigiSymbolLineDefV3_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 CigiBaseSymbolLineDef.

Definition at line 168 of file CigiSymbolLineDefV3_3.cpp.

References PackPointerUnion::c, PackPointerUnion::f, CigiBaseSymbolLineDef::LineWidth, CigiVertexSymbolDataV3_3::Pack(), CigiBasePacket::PacketID, CigiBasePacket::PacketSize, CigiBaseSymbolLineDef::Primitive, PackPointerUnion::s, CigiBaseSymbolLineDef::StipplePattern, CigiBaseSymbolLineDef::StipplePatternLen, CigiBaseSymbolLineDef::SymbolID, CigiBaseVariableSizePckt::VariableDataSize, and CigiBaseSymbolLineDef::Vertices.

00169 {
00170    PackPointer CDta;
00171 
00172    CigiSymbolLineDefV3_3 * Data =
00173       ( CigiSymbolLineDefV3_3 *)Base;
00174 
00175    CDta.c = Buff;
00176 
00177    *CDta.c++ = PacketID;
00178    *CDta.c++ = (PacketSize + Data->VariableDataSize);
00179 
00180    *CDta.s++ = Data->SymbolID;
00181 
00182    *CDta.c++ = (Cigi_uint8)(Data->Primitive & 0x0f);
00183 
00184    *CDta.c++ = 0;
00185 
00186    *CDta.s++ = Data->StipplePattern;
00187    *CDta.f++ = Data->LineWidth;
00188    *CDta.f++ = Data->StipplePatternLen;
00189 
00190    int Cnt;
00191    CigiVertexSymbolDataV3_3 *pVtx;
00192    vector<CigiBaseVertexSymbolData *>::iterator iVtx;
00193    for(iVtx=Data->Vertices.begin();iVtx!=Data->Vertices.end();iVtx++)
00194    {
00195       pVtx = (CigiVertexSymbolDataV3_3 *)*iVtx;
00196       if(pVtx != NULL)
00197       {
00198          Cnt = pVtx->Pack((CigiBaseVertexSymbolData *)pVtx,CDta.c);
00199          CDta.c += Cnt;
00200       }
00201    }
00202 
00203    return(PacketSize + Data->VariableDataSize);
00204 
00205 }

int CigiSymbolLineDefV3_3::RemoveVertex ( int  VertexIndex,
bool  bndchk = true 
) [virtual]

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

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

Implements CigiBaseSymbolLineDef.

Definition at line 300 of file CigiSymbolLineDefV3_3.cpp.

References CIGI_ERROR_VALUE_OUT_OF_RANGE, CIGI_SUCCESS, CIGI_VERTEX_SYMBOL_DATA_SIZE_V3_3, CigiBaseVariableSizePckt::VariableDataSize, and CigiBaseSymbolLineDef::Vertices.

00301 {
00302    int stat = CIGI_SUCCESS;
00303 
00304    int Cnt = Vertices.size();
00305 
00306    if((VertexIndex >= 0) && (VertexIndex < Cnt))
00307    {
00308       vector<CigiBaseVertexSymbolData *>::iterator iVtx = Vertices.begin();
00309 
00310       iVtx += VertexIndex;
00311 
00312       CigiVertexSymbolDataV3_3 *pVtx =
00313          (CigiVertexSymbolDataV3_3 *)*iVtx;
00314       if(pVtx != NULL)
00315          delete pVtx;
00316 
00317       Vertices.erase(iVtx);
00318 
00319       VariableDataSize -= CIGI_VERTEX_SYMBOL_DATA_SIZE_V3_3;
00320       if(VariableDataSize < 0)
00321          VariableDataSize = 0;
00322 
00323    }
00324    else
00325    {
00326 #ifndef CIGI_NO_BND_CHK
00327       if(bndchk)
00328       {
00329 #ifndef CIGI_NO_EXCEPT
00330          throw CigiValueOutOfRangeException("VertexIndex", (int)VertexIndex,0,Cnt);
00331 #endif
00332          stat = CIGI_ERROR_VALUE_OUT_OF_RANGE;
00333       }
00334 #endif
00335    }
00336 
00337    return(stat);
00338 }

int CigiSymbolLineDefV3_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 CigiBaseSymbolLineDef.

Definition at line 210 of file CigiSymbolLineDefV3_3.cpp.

References PackPointerUnion::c, CIGI_SYMBOL_LINE_DEFINITION_PACKET_SIZE_V3_3, CIGI_VERTEX_SYMBOL_DATA_SIZE_V3_3, CigiSwap2(), CigiSwap4(), PackPointerUnion::f, CigiBaseSymbolLineDef::LineWidth, CigiBasePacket::PacketSize, CigiBaseSymbolLineDef::Primitive, PackPointerUnion::s, CigiBaseSymbolLineDef::StipplePattern, CigiBaseSymbolLineDef::StipplePatternLen, CigiBaseSymbolLineDef::SymbolID, CigiBaseVertexSymbolData::Unpack(), CigiBaseVariableSizePckt::VariableDataSize, and CigiBaseSymbolLineDef::Vertices.

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


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