00001 
00039 #if !defined(_CIGI_BASE_SYMBOL_LINE_DEF_INCLUDED_)
00040 #define _CIGI_BASE_SYMBOL_LINE_DEF_INCLUDED_
00041 
00042 
00043 #include "CigiBaseVariableSizePckt.h"
00044 #include "CigiBaseVertexSymbolData.h"
00045 #include <vector>
00046 
00047 
00048 
00049 
00050 
00051 
00052 #define CIGI_SYMBOL_LINE_DEFINITION_PACKET_ID_V3_3 32
00053 #define CIGI_SYMBOL_LINE_DEFINITION_PACKET_SIZE_V3_3 16
00054 
00055 
00056 class CigiSymbolLineDefV3_3;
00057 
00058 
00059 
00062 class CIGI_SPEC CigiBaseSymbolLineDef :
00063    public CigiBaseVariableSizePckt
00064 {
00065 
00066    friend class CigiSymbolLineDefV3_3;
00067 
00068 public:
00069 
00070 
00071    
00075    enum PrimitiveGrp
00076    {
00077       Points=0,
00078       Lines=1,
00079       LineStrip=2,
00080       LineLoop=3,
00081       Triangles=4,
00082       TriangleStrip=5,
00083       TriangleFan=6
00084    };
00085 
00086 
00087    
00088 
00089    
00092    CigiBaseSymbolLineDef(void);
00093 
00094    
00097    virtual ~CigiBaseSymbolLineDef(void);
00098 
00099    
00102    CigiBaseSymbolLineDef(const CigiBaseSymbolLineDef &BaseIn);
00103 
00104    
00107    CigiBaseSymbolLineDef & operator=(const CigiBaseSymbolLineDef &BaseIn);
00108 
00109 
00110    
00111 
00112    
00123    virtual int Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const=0;
00124 
00125    
00135    virtual int Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec) =0;
00136 
00137    
00145         virtual int GetTruePacketSize(CigiBaseVariableSizePckt &refPacket)
00146    { return(PacketSize + refPacket.GetVariableDataSize()); }
00147 
00148    
00160         virtual int GetCnvt(CigiVersionID &CnvtVersion,
00161                        CigiCnvtInfoType::Type &CnvtInfo);
00162 
00163 
00164 
00165    
00166 
00167    
00168 
00169    
00176    int SetSymbolID(const Cigi_uint16 SymbolIDIn, bool bndchk=true)
00177    {
00178       SymbolID = SymbolIDIn;
00179       return(CIGI_SUCCESS);
00180    }
00181 
00182    
00186    Cigi_uint16 GetSymbolID(void) const { return(SymbolID); }
00187    
00188 
00189    
00190 
00191    
00200    int SetPrimitive(const PrimitiveGrp PrimitiveIn, bool bndchk=true);
00201 
00202    
00208    PrimitiveGrp GetPrimitive(void) const { return(Primitive); }
00209 
00210 
00211    
00212 
00213    
00221    int SetStipplePattern(const Cigi_uint16 StipplePatternIn, bool bndchk=true)
00222    {
00223       StipplePattern = StipplePatternIn;
00224       return(CIGI_SUCCESS);
00225    }
00226 
00227    
00231    Cigi_uint16 GetStipplePattern(void) const { return(StipplePattern); }
00232 
00233 
00234    
00235 
00236    
00244    int SetLineWidth(const float LineWidthIn, bool bndchk=true);
00245 
00246    
00251    float GetLineWidth(void) const { return(LineWidth); }
00252 
00253 
00254    
00255 
00256    
00265    int SetStipplePatternLen(const float StipplePatternLenIn, bool bndchk=true);
00266 
00267    
00272    float GetStipplePatternLen(void) const { return(StipplePatternLen); }
00273 
00274 
00275    
00276 
00277    
00282    int GetVertexCount(void);
00283 
00284    
00294    virtual CigiBaseVertexSymbolData * AddVertex(void) =0;
00295 
00296    
00306    virtual int RemoveVertex(int VertexIndex, bool bndchk=true) =0;
00307 
00308    
00315    CigiBaseVertexSymbolData * GetVertex(int VertexIndex, bool bndchk=true);
00316 
00317    
00320    void ClearVertices(void);
00321 
00322 
00323 
00324 protected:
00325 
00326    
00327 
00328    
00332    Cigi_uint16 SymbolID;
00333 
00334    
00345    PrimitiveGrp Primitive;
00346 
00347    
00351    Cigi_uint16 StipplePattern;
00352 
00353    
00357    float LineWidth;
00358 
00359    
00364    float StipplePatternLen;
00365 
00366    
00370    std::vector<CigiBaseVertexSymbolData *> Vertices;
00371 
00372 
00373 };
00374 
00375 
00376 
00377 #endif   //  #if !defined(_CIGI_BASE_SYMBOL_LINE_DEF_INCLUDED_)
00378