#ifndef ROOT_TPolyMarker3D
#define ROOT_TPolyMarker3D

//+SEQ,CopyRight,T=NOINCLUDE.

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TPolyMarker3D                                                        //
//                                                                      //
// An array of 3-D points with the same marker.                         //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TObject
//*KEEP,TObject.
#include "TObject.h"
//*KEND.
#endif
#ifndef ROOT_TAttMarker
//*KEEP,TAttMarker.
#include "TAttMarker.h"
//*KEND.
#endif
#ifndef ROOT_TAtt3D
//*KEEP,TAtt3D.
#include "TAtt3D.h"
//*KEND.
#endif
#ifndef ROOT_X3DBuffer
//*KEEP,X3DBuffer,T=C.
#include "X3DBuffer.h"
//*KEND.
#endif

class TH1;

class TPolyMarker3D : public TObject, public TAttMarker, public TAtt3D {

protected:
        Int_t            fN;            //number of points
        Float_t         *fP;            //Array of X,Y,Z coordinates
        TString          fOption;       //options
        UInt_t           fGLList;       // The list number for OpenGL view
        Int_t            fLastPoint;    // The index of the last filled point

public:
                          TPolyMarker3D();
                          TPolyMarker3D(Int_t n, Marker_t marker=1, Option_t *option="");
                          TPolyMarker3D(Int_t n, Float_t *p, Marker_t marker=1, Option_t *option="");
                          TPolyMarker3D(const TPolyMarker3D &polymarker);
        virtual          ~TPolyMarker3D();

        virtual void      Copy(TObject &polymarker);
        Int_t             DistancetoPrimitive(Int_t px, Int_t py);
        virtual void      Draw(Option_t *option="");
        virtual void      DrawPolyMarker(Int_t n, Float_t *p, Marker_t marker, Option_t *option="");
        virtual void      ExecuteEvent(Int_t event, Int_t px, Int_t py);
        virtual Int_t     GetN(){ return fN;}
        virtual Float_t  *GetP(){ return fP;}
        Option_t         *GetOption() const {return fOption.Data();}
        virtual void      ls(Option_t *option="");
        virtual void      Paint(Option_t *option="");
        static  void      PaintH3(TH1 *h, Option_t *option);
        virtual void      PaintPolyMarker(Int_t n, Float_t *p, Marker_t marker, Option_t *option="");
        virtual void      Print(Option_t *option="");
        virtual void      SavePrimitive(ofstream &out, Option_t *option);
        void              SetPoint(Int_t n, Float_t x, Float_t y, Float_t z); // *MENU*
        virtual void      SetPolyMarker(Int_t n, Float_t *p, Marker_t marker, Option_t *option="");
        virtual Int_t     SetNextPoint(Float_t x, Float_t y, Float_t z); // *MENU*
        virtual void      Sizeof3D() const;
        static  void      SizeofH3(TH1 *h);
        virtual Int_t     Size() const {return fLastPoint+1;}

        ClassDef(TPolyMarker3D,1)  //An array of 3-D points with the same marker
};

R__EXTERN Size3D gSize3D;

#endif