12 #ifndef ROOT7_REveGeoPolyShape
13 #define ROOT7_REveGeoPolyShape
20 class TGeoCompositeShape;
24 namespace Experimental {
28 class REveGeoPolyShape :
public TGeoBBox
31 REveGeoPolyShape(
const REveGeoPolyShape&);
32 REveGeoPolyShape& operator=(
const REveGeoPolyShape&);
35 std::vector<Double_t> fVertices;
36 std::vector<Double_t> fNormals;
37 std::vector<Int_t> fPolyDesc;
40 virtual void FillBuffer3D(TBuffer3D &buffer, Int_t reqSections, Bool_t localFrame)
const;
42 void SetFromBuff3D(
const TBuffer3D &buffer);
44 Int_t CheckPoints(
const Int_t *source, Int_t *dest)
const;
46 static Bool_t Eq(
const Double_t *p1,
const Double_t *p2);
51 Edge_t(Int_t i, Int_t j)
53 if (i <= j) { fI = i; fJ = j; }
54 else { fI = j; fJ = i; }
57 bool operator<(
const Edge_t& e)
const
59 if (fI == e.fI)
return fJ < e.fJ;
60 else return fI < e.fI;
64 static Bool_t fgAutoEnforceTriangles;
65 static Bool_t fgAutoCalculateNormals;
68 REveGeoPolyShape() =
default;
70 virtual ~REveGeoPolyShape() =
default;
72 Int_t GetNumFaces()
const {
return fNbPols; }
74 void FillRenderData(REveRenderData &rd);
76 void BuildFromComposite(TGeoCompositeShape *cshp, Int_t n_seg = 60);
77 void BuildFromShape(TGeoShape *shape, Int_t n_seg = 60);
79 void EnforceTriangles();
80 void CalculateNormals();
82 virtual const TBuffer3D& GetBuffer3D(Int_t reqSections, Bool_t localFrame)
const;
83 virtual TBuffer3D *MakeBuffer3D()
const;
85 static void SetAutoEnforceTriangles(Bool_t f);
86 static Bool_t GetAutoEnforceTriangles();
87 static void SetAutoCalculateNormals(Bool_t f);
88 static Bool_t GetAutoCalculateNormals();
90 ClassDef(REveGeoPolyShape, 1);