// @(#)root/g3d:$Id$
// Author: Nenad Buncic   17/09/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_TShape
#define ROOT_TShape


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TShape                                                               //
//                                                                      //
// Basic shape class                                                    //
//                                                                      //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TNamed.h"
#include "TMaterial.h"
#include "TAttLine.h"
#include "TAttFill.h"
#include "TAtt3D.h"
#include "X3DBuffer.h"

class TBuffer3D;
class TNode;

class TShape : public TNamed, public TAttLine, public TAttFill, public TAtt3D {

protected:
   Int_t           fNumber;      //Shape number
   Int_t           fVisibility;  //Visibility flag
   TMaterial      *fMaterial;    //Pointer to material

   virtual void    FillBuffer3D(TBuffer3D & buffer, Int_t reqSections) const;
   Int_t           GetBasicColor() const;

   Int_t           ShapeDistancetoPrimitive(Int_t numPoints, Int_t px, Int_t py);


public:
   TShape();
   TShape(const char *name, const char *title, const char *material);
   TShape(const TShape&);
   TShape& operator=(const TShape&);
   virtual         ~TShape();

   virtual const   TBuffer3D &GetBuffer3D(Int_t reqSections) const;
   TMaterial      *GetMaterial()  const {return fMaterial;}
   virtual Int_t   GetNumber()     const {return fNumber;}
   Int_t           GetVisibility() const {return fVisibility;}
   virtual void    Paint(Option_t *option="");
   virtual void    SetName(const char *name);
   virtual void    SetPoints(Double_t *points) const ;
   virtual void    SetVisibility(Int_t vis) {fVisibility = vis;} // *MENU*
   void            TransformPoints(Double_t *points, UInt_t NbPnts) const;

   ClassDef(TShape,2)  //Basic shape
};

R__EXTERN TNode *gNode;

inline void TShape::SetName(const char *) { }

#endif
