// @(#)root/eve:$Id$
// Author: Matevz Tadel 2007

/*************************************************************************
 * Copyright (C) 1995-2007, 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_TEveGeoPolyShape
#define ROOT_TEveGeoPolyShape

#include "TGeoBBox.h"

class TBuffer3D;
class TGLFaceSet;
class TGeoCompositeShape;

class TEveGeoPolyShape : public TGeoBBox
{
   friend class TEveGeoPolyShapeGL;

private:
   TEveGeoPolyShape(const TEveGeoPolyShape&);            // Not implemented
   TEveGeoPolyShape& operator=(const TEveGeoPolyShape&); // Not implemented

protected:
   std::vector<Double_t> fVertices;
   std::vector<Int_t>    fPolyDesc;
   UInt_t                fNbPols;

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

   struct Edge_t
   {
      Int_t fI, fJ;
      Edge_t(Int_t i, Int_t j)
      {
         if (i <= j) { fI = i; fJ = j; }
         else        { fI = j; fJ = i; }
      }

      bool operator<(const Edge_t& e) const
      {
         if (fI == e.fI)
            return fJ < e.fJ;
         else
            return fI < e.fI;
      }
   };

public:
   TEveGeoPolyShape();
   virtual ~TEveGeoPolyShape() {}

   static TEveGeoPolyShape* Construct(TGeoCompositeShape *cshp, Int_t n_seg);

   void SetFromFaceSet(TGLFaceSet* fs);

   virtual const TBuffer3D& GetBuffer3D(Int_t reqSections, Bool_t localFrame) const;
   virtual       TBuffer3D* MakeBuffer3D() const;

   ClassDef(TEveGeoPolyShape, 1); // A shape with arbitrary tesselation for visualization of CSG shapes.
};

#endif
 TEveGeoPolyShape.h:1
 TEveGeoPolyShape.h:2
 TEveGeoPolyShape.h:3
 TEveGeoPolyShape.h:4
 TEveGeoPolyShape.h:5
 TEveGeoPolyShape.h:6
 TEveGeoPolyShape.h:7
 TEveGeoPolyShape.h:8
 TEveGeoPolyShape.h:9
 TEveGeoPolyShape.h:10
 TEveGeoPolyShape.h:11
 TEveGeoPolyShape.h:12
 TEveGeoPolyShape.h:13
 TEveGeoPolyShape.h:14
 TEveGeoPolyShape.h:15
 TEveGeoPolyShape.h:16
 TEveGeoPolyShape.h:17
 TEveGeoPolyShape.h:18
 TEveGeoPolyShape.h:19
 TEveGeoPolyShape.h:20
 TEveGeoPolyShape.h:21
 TEveGeoPolyShape.h:22
 TEveGeoPolyShape.h:23
 TEveGeoPolyShape.h:24
 TEveGeoPolyShape.h:25
 TEveGeoPolyShape.h:26
 TEveGeoPolyShape.h:27
 TEveGeoPolyShape.h:28
 TEveGeoPolyShape.h:29
 TEveGeoPolyShape.h:30
 TEveGeoPolyShape.h:31
 TEveGeoPolyShape.h:32
 TEveGeoPolyShape.h:33
 TEveGeoPolyShape.h:34
 TEveGeoPolyShape.h:35
 TEveGeoPolyShape.h:36
 TEveGeoPolyShape.h:37
 TEveGeoPolyShape.h:38
 TEveGeoPolyShape.h:39
 TEveGeoPolyShape.h:40
 TEveGeoPolyShape.h:41
 TEveGeoPolyShape.h:42
 TEveGeoPolyShape.h:43
 TEveGeoPolyShape.h:44
 TEveGeoPolyShape.h:45
 TEveGeoPolyShape.h:46
 TEveGeoPolyShape.h:47
 TEveGeoPolyShape.h:48
 TEveGeoPolyShape.h:49
 TEveGeoPolyShape.h:50
 TEveGeoPolyShape.h:51
 TEveGeoPolyShape.h:52
 TEveGeoPolyShape.h:53
 TEveGeoPolyShape.h:54
 TEveGeoPolyShape.h:55
 TEveGeoPolyShape.h:56
 TEveGeoPolyShape.h:57
 TEveGeoPolyShape.h:58
 TEveGeoPolyShape.h:59
 TEveGeoPolyShape.h:60
 TEveGeoPolyShape.h:61
 TEveGeoPolyShape.h:62
 TEveGeoPolyShape.h:63
 TEveGeoPolyShape.h:64
 TEveGeoPolyShape.h:65
 TEveGeoPolyShape.h:66
 TEveGeoPolyShape.h:67
 TEveGeoPolyShape.h:68