// @(#)root/g3d:$Id$
// Author: Nenad Buncic   21/08/95

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TPolyMarker3D
#define ROOT_TPolyMarker3D


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

#ifndef ROOT_TObject
#include "TObject.h"
#endif
#ifndef ROOT_TAttMarker
#include "TAttMarker.h"
#endif
#ifndef ROOT_TAtt3D
#include "TAtt3D.h"
#endif
#ifndef ROOT_TString
#include "TString.h"
#endif

class TH1;
class TCollection;

class TPolyMarker3D : public TObject, public TAttMarker, public TAtt3D
{
protected:
   Int_t            fN;            //Number of allocated points
   Float_t         *fP;            //[3*fN] Array of X,Y,Z coordinates
   TString          fOption;       //Options
   Int_t            fLastPoint;    //The index of the last filled point
   TString          fName;         //Name of polymarker

   TPolyMarker3D& operator=(const TPolyMarker3D&);
   
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(Int_t n, Double_t *p, Marker_t marker=1, Option_t *option="");
   TPolyMarker3D(const TPolyMarker3D &p);
   virtual ~TPolyMarker3D();

   virtual void      Copy(TObject &polymarker) const;
   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     GetLastPoint() const { return fLastPoint;}
   virtual const char  *GetName() const {return fName.Data();}
   virtual Int_t     GetN() const { return fN;}
   virtual Float_t  *GetP() const { return fP;}
   virtual void      GetPoint(Int_t n, Float_t &x, Float_t &y, Float_t &z) const;
   virtual void      GetPoint(Int_t n, Double_t &x, Double_t &y, Double_t &z) const;
   Option_t         *GetOption() const {return fOption.Data();}
   virtual void      ls(Option_t *option="") const;
   virtual Int_t     Merge(TCollection *list);
   virtual void      Paint(Option_t *option="");
   virtual void      Print(Option_t *option="") const;
   virtual void      SavePrimitive(std::ostream &out, Option_t *option = "");
   virtual void      SetName(const char *name); // *MENU*
   void              SetPoint(Int_t n, Double_t x, Double_t y, Double_t z); // *MENU*
   virtual void      SetPolyMarker(Int_t n, Float_t *p, Marker_t marker, Option_t *option="");
   virtual void      SetPolyMarker(Int_t n, Double_t *p, Marker_t marker, Option_t *option="");
   virtual Int_t     SetNextPoint(Double_t x, Double_t y, Double_t z); // *MENU*
   virtual Int_t     Size() const {return fLastPoint+1;}

   static  void      PaintH3(TH1 *h, Option_t *option);

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

#endif
 TPolyMarker3D.h:1
 TPolyMarker3D.h:2
 TPolyMarker3D.h:3
 TPolyMarker3D.h:4
 TPolyMarker3D.h:5
 TPolyMarker3D.h:6
 TPolyMarker3D.h:7
 TPolyMarker3D.h:8
 TPolyMarker3D.h:9
 TPolyMarker3D.h:10
 TPolyMarker3D.h:11
 TPolyMarker3D.h:12
 TPolyMarker3D.h:13
 TPolyMarker3D.h:14
 TPolyMarker3D.h:15
 TPolyMarker3D.h:16
 TPolyMarker3D.h:17
 TPolyMarker3D.h:18
 TPolyMarker3D.h:19
 TPolyMarker3D.h:20
 TPolyMarker3D.h:21
 TPolyMarker3D.h:22
 TPolyMarker3D.h:23
 TPolyMarker3D.h:24
 TPolyMarker3D.h:25
 TPolyMarker3D.h:26
 TPolyMarker3D.h:27
 TPolyMarker3D.h:28
 TPolyMarker3D.h:29
 TPolyMarker3D.h:30
 TPolyMarker3D.h:31
 TPolyMarker3D.h:32
 TPolyMarker3D.h:33
 TPolyMarker3D.h:34
 TPolyMarker3D.h:35
 TPolyMarker3D.h:36
 TPolyMarker3D.h:37
 TPolyMarker3D.h:38
 TPolyMarker3D.h:39
 TPolyMarker3D.h:40
 TPolyMarker3D.h:41
 TPolyMarker3D.h:42
 TPolyMarker3D.h:43
 TPolyMarker3D.h:44
 TPolyMarker3D.h:45
 TPolyMarker3D.h:46
 TPolyMarker3D.h:47
 TPolyMarker3D.h:48
 TPolyMarker3D.h:49
 TPolyMarker3D.h:50
 TPolyMarker3D.h:51
 TPolyMarker3D.h:52
 TPolyMarker3D.h:53
 TPolyMarker3D.h:54
 TPolyMarker3D.h:55
 TPolyMarker3D.h:56
 TPolyMarker3D.h:57
 TPolyMarker3D.h:58
 TPolyMarker3D.h:59
 TPolyMarker3D.h:60
 TPolyMarker3D.h:61
 TPolyMarker3D.h:62
 TPolyMarker3D.h:63
 TPolyMarker3D.h:64
 TPolyMarker3D.h:65
 TPolyMarker3D.h:66
 TPolyMarker3D.h:67
 TPolyMarker3D.h:68
 TPolyMarker3D.h:69
 TPolyMarker3D.h:70
 TPolyMarker3D.h:71
 TPolyMarker3D.h:72
 TPolyMarker3D.h:73
 TPolyMarker3D.h:74
 TPolyMarker3D.h:75
 TPolyMarker3D.h:76
 TPolyMarker3D.h:77
 TPolyMarker3D.h:78
 TPolyMarker3D.h:79
 TPolyMarker3D.h:80
 TPolyMarker3D.h:81
 TPolyMarker3D.h:82
 TPolyMarker3D.h:83
 TPolyMarker3D.h:84
 TPolyMarker3D.h:85
 TPolyMarker3D.h:86
 TPolyMarker3D.h:87
 TPolyMarker3D.h:88