// @(#)root/table:$Id$
// Author: Valery Fine(fine@mail.cern.ch)   24/04/99

/*************************************************************************
 * 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.             *
 *************************************************************************/
//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TPointsArray3D                                                       //
//                                                                      //
// A 3-D PolyLine.                                                      //
//                                                                      //
//////////////////////////////////////////////////////////////////////////
#ifndef ROOT_TPointsArray3D
#define ROOT_TPointsArray3D


#include "TPoints3DABC.h"

#ifndef ROOT_TString
#include "TString.h"
#endif


class TPointsArray3D : public TPoints3DABC {

protected:
   Int_t        fN;            // Number of points
   Float_t     *fP;            // Array of 3-D coordinates  (x,y,z)
   TString      fOption;       // options
   UInt_t       fGLList;       // The list number for OpenGL view
   Int_t        fLastPoint;    // The index of the last filled point

public:
   TPointsArray3D();
   TPointsArray3D(Int_t n, Option_t *option="");
   TPointsArray3D(Int_t n, Float_t *p, Option_t *option="");
   TPointsArray3D(Int_t n, Float_t *x, Float_t *y, Float_t *z, Option_t *option="");
   TPointsArray3D(const TPointsArray3D &points);
   virtual ~TPointsArray3D();

   virtual void      Copy(TObject &points) const;
   virtual Int_t     DistancetoPrimitive(Int_t px, Int_t py);
   virtual void      ExecuteEvent(Int_t event, Int_t px, Int_t py);
   virtual Int_t     GetLastPosition() const;
   virtual Int_t     GetN() const;
   virtual Float_t  *GetP() const;
   virtual Float_t   GetX(Int_t idx)  const;
   virtual Float_t   GetY(Int_t idx)  const;
   virtual Float_t   GetZ(Int_t idx)  const;
   virtual Float_t  *GetXYZ(Float_t *xyz,Int_t idx,Int_t num=1)  const;
   virtual const Float_t  *GetXYZ(Int_t idx);
   virtual Option_t *GetOption() const ;
   virtual Bool_t    Is3D() const;
   virtual void      ls(Option_t *option="") const;
   virtual void      PaintPoints(Int_t , Float_t *,Option_t *){;}
   virtual void      Print(Option_t *option="") const;
   virtual Int_t     SetLastPosition(Int_t idx);
   virtual void      SetOption(Option_t *option="");
   virtual Int_t     SetPoint(Int_t point, Float_t x, Float_t y, Float_t z); // *MENU*
   virtual Int_t     SetPoints(Int_t n, Float_t *p=0, Option_t *option="");
   virtual Int_t     Size() const;

   ClassDef(TPointsArray3D,1)  //A 3-D PolyLine
};


inline Int_t     TPointsArray3D::GetLastPosition()  const                   {return fLastPoint;}
inline Int_t     TPointsArray3D::GetN()  const                              {return fN;}
inline Float_t  *TPointsArray3D::GetP()  const                              {return fP;}
inline Float_t   TPointsArray3D::GetX(Int_t idx)  const                     {return fP[3*idx+0];}
inline Float_t   TPointsArray3D::GetY(Int_t idx)  const                     {return fP[3*idx+1];}
inline Float_t   TPointsArray3D::GetZ(Int_t idx)  const                     {return fP[3*idx+2];}
inline const Float_t  *TPointsArray3D::GetXYZ(Int_t idx)                    {return  &fP[3*idx+0];}
inline Float_t  *TPointsArray3D::GetXYZ(Float_t *xyz,Int_t idx,Int_t num)  const
                          {return (Float_t  *)memcpy(xyz,&fP[3*idx],3*num*sizeof(Float_t));}
inline Option_t *TPointsArray3D::GetOption() const                          {return fOption.Data();}
inline Bool_t    TPointsArray3D::Is3D() const                               {return kTRUE;}
inline void      TPointsArray3D::SetOption(Option_t *option)                {fOption = option;}

inline Int_t     TPointsArray3D::Size() const                               {return fLastPoint+1;}

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