#ifndef ROOT_TSPHE
#define ROOT_TSPHE

//+SEQ,CopyRight,T=NOINCLUDE.

////////////////////////////////////////////////////////////////////////////
//                                                                        //
// TSPHE                                                                  //
//                                                                        //
// SPHE is Sphere. Not implemented yet.                                   //
//                                                                        //
////////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TBRIK
//*KEEP,TShape.
#include "TShape.h"
//*KEND.
#endif

// const Int_t kDiv = 30;               //default number of z segments for semi-sphere

class TSPHE : public TShape {

    private:
       Double_t   *fSiTab;     // Table of sin(fPhimin) .... sin(Phi)
       Double_t   *fCoTab;     // Table of cos(fPhimin) .... cos(Phi)
       Double_t   *fCoThetaTab;// Table of sin(gThemin) .... cos(Theta)
       Int_t      fNdiv;       // number of divisions
       Int_t      fNz;         // number of sections
       Float_t    fAspectRatio;// Relation between asumth and grid size (by default 1.0)


    protected:
        Float_t fRmin;    // minimum radius
        Float_t fRmax;    // maximum radius
        Float_t fThemin;  // minimum theta
        Float_t fThemax;  // maximum theta
        Float_t fPhimin;  // minimum phi
        Float_t fPhimax;  // maximum phi
        Float_t faX;      // Coeff along Ox
        Float_t faY;      // Coeff along Oy
        Float_t faZ;      // Coeff along Oz
        virtual void    MakeTableOfCoSin();  // Create the table of the fSiTab; fCoTab
        virtual void    PaintGLPoints(Float_t *vertex);



    public:
        TSPHE();
        TSPHE(Text_t *name, Text_t *title, Text_t *material, Float_t rmin, Float_t rmax, Float_t themin,
              Float_t themax, Float_t phimin, Float_t phimax);
        TSPHE(Text_t *name, Text_t *title, Text_t *material, Float_t rmax);
        virtual ~TSPHE();
        virtual Int_t   DistancetoPrimitive(Int_t px, Int_t py);
        virtual Float_t GetRmin() {return fRmin;}
        virtual Float_t GetRmax() {return fRmax;}
        virtual Float_t GetThemin() {return fThemin;}
        virtual Float_t GetThemax() {return fThemax;}
        virtual Float_t GetPhimin() {return fPhimin;}
        virtual Float_t GetPhimax() {return fPhimax;}
        virtual Float_t GetAspectRatio(){ return fAspectRatio;}
        virtual Int_t   GetNumberOfDivisions () const {if (fNdiv) return fNdiv; else return 0; /*kDiv;*/}
        virtual void    Paint(Option_t *option);
        virtual void    SetAspectRatio(Float_t factor=1.0){ fAspectRatio = factor; MakeTableOfCoSin();}
        virtual void    SetEllipse(Float_t *factors);
        virtual void    SetNumberOfDivisions (Int_t p);
        virtual void    SetPoints  (Float_t *buff);
        virtual void    Sizeof3D() const;

        ClassDef(TSPHE,2)  //SPHE shape
};

#endif