/usr/include/root/TGeoShape.h is in libroot-geom-dev 5.34.30-0ubuntu8.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 | // @(#)root/geom:$Id$
// Author: Andrei Gheata 31/01/02
/*************************************************************************
* 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_TGeoShape
#define ROOT_TGeoShape
#ifndef ROOT_TNamed
#include "TNamed.h"
#endif
// forward declarations
class TGeoBoolCombinator;
class TGeoBBox;
class TGeoMatrix;
class TGeoHMatrix;
class TGeoVolume;
class TBuffer3D;
////////////////////////////////////////////////////////////////////////////
// //
// TGeoShape - base class for geometric shapes. Provides virtual methods //
// for point and segment classification that has to be implemented by //
// all classes inheriting from it. //
// //
////////////////////////////////////////////////////////////////////////////
class TGeoShape : public TNamed
{
private:
static TGeoMatrix *fgTransform; // current transformation matrix that applies to shape
static Double_t fgEpsMch; // Machine round-off error
public:
enum EShapeType {
kBitMask32 = 0xffffffff,
kGeoNoShape = 0,
kGeoBad = BIT(0),
kGeoRSeg = BIT(1),
kGeoPhiSeg = BIT(2),
kGeoThetaSeg = BIT(3),
kGeoVisX = BIT(4),
kGeoVisY = BIT(5),
kGeoVisZ = BIT(6),
kGeoRunTimeShape = BIT(7),
kGeoInvalidShape = BIT(8),
kGeoTorus = BIT(9),
kGeoBox = BIT(10),
kGeoPara = BIT(11),
kGeoSph = BIT(12),
kGeoTube = BIT(13),
kGeoTubeSeg = BIT(14),
kGeoCone = BIT(15),
kGeoConeSeg = BIT(16),
kGeoPcon = BIT(17),
kGeoPgon = BIT(18),
kGeoArb8 = BIT(19),
kGeoEltu = BIT(20),
kGeoTrap = BIT(21),
kGeoCtub = BIT(22),
kGeoTrd1 = BIT(23),
kGeoTrd2 = BIT(24),
kGeoComb = BIT(25),
kGeoClosedShape = BIT(26),
kGeoXtru = BIT(27),
kGeoParaboloid = BIT(28),
kGeoHalfSpace = BIT(29),
kGeoHype = BIT(30),
kGeoSavePrimitive = BIT(20)
};
virtual void ClearThreadData() const {}
virtual void CreateThreadData(Int_t) {}
protected :
// data members
Int_t fShapeId; // shape id
UInt_t fShapeBits; // shape bits
// methods
virtual void FillBuffer3D(TBuffer3D & buffer, Int_t reqSections, Bool_t localFrame) const;
Int_t GetBasicColor() const;
void SetOnBoundary(Bool_t /*flag=kTRUE*/) {;}
void TransformPoints(Double_t *points, UInt_t NbPoints) const;
public:
// constructors
TGeoShape();
TGeoShape(const char *name);
// destructor
virtual ~TGeoShape();
// methods
static Double_t Big() {return 1.E30;}
static TGeoMatrix *GetTransform();
static void SetTransform(TGeoMatrix *matrix);
static Double_t Tolerance() {return 1.E-10;}
static Double_t ComputeEpsMch();
static Double_t EpsMch();
virtual void AfterStreamer() {};
virtual Double_t Capacity() const = 0;
void CheckShape(Int_t testNo, Int_t nsamples=10000, Option_t *option="");
virtual void ComputeBBox() = 0;
virtual void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm) = 0;
virtual void ComputeNormal_v(const Double_t *, const Double_t *, Double_t *, Int_t) {}
virtual Bool_t Contains(const Double_t *point) const = 0;
virtual void Contains_v(const Double_t *, Bool_t *, Int_t) const {}
virtual Bool_t CouldBeCrossed(const Double_t *point, const Double_t *dir) const = 0;
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py) = 0;
virtual Double_t DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact=1,
Double_t step=TGeoShape::Big(), Double_t *safe=0) const = 0;
virtual void DistFromInside_v(const Double_t *, const Double_t *, Double_t *, Int_t, Double_t *) const {}
virtual Double_t DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact=1,
Double_t step=TGeoShape::Big(), Double_t *safe=0) const = 0;
virtual void DistFromOutside_v(const Double_t *, const Double_t *, Double_t *, Int_t, Double_t *) const {}
static Double_t DistToPhiMin(const Double_t *point, const Double_t *dir, Double_t s1, Double_t c1, Double_t s2, Double_t c2,
Double_t sm, Double_t cm, Bool_t in=kTRUE);
virtual TGeoVolume *Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv,
Double_t start, Double_t step) = 0;
virtual void Draw(Option_t *option=""); // *MENU*
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
virtual const char *GetAxisName(Int_t iaxis) const = 0;
virtual Double_t GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const = 0;
virtual void GetBoundingCylinder(Double_t *param) const = 0;
virtual const TBuffer3D &GetBuffer3D(Int_t reqSections, Bool_t localFrame) const;
virtual Int_t GetByteCount() const = 0;
virtual Bool_t GetPointsOnSegments(Int_t npoints, Double_t *array) const = 0;
virtual Int_t GetFittingBox(const TGeoBBox *parambox, TGeoMatrix *mat, Double_t &dx, Double_t &dy, Double_t &dz) const = 0;
Int_t GetId() const {return fShapeId;}
virtual TGeoShape *GetMakeRuntimeShape(TGeoShape *mother, TGeoMatrix *mat) const = 0;
virtual void GetMeshNumbers(Int_t &/*nvert*/, Int_t &/*nsegs*/, Int_t &/*npols*/) const {;}
virtual const char *GetName() const;
virtual Int_t GetNmeshVertices() const {return 0;}
const char *GetPointerName() const;
virtual Bool_t IsAssembly() const {return kFALSE;}
virtual Bool_t IsComposite() const {return kFALSE;}
virtual Bool_t IsCylType() const = 0;
static Bool_t IsCloseToPhi(Double_t epsil, const Double_t *point, Double_t c1, Double_t s1, Double_t c2, Double_t s2);
static Bool_t IsCrossingSemiplane(const Double_t *point, const Double_t *dir, Double_t cphi, Double_t sphi, Double_t &snext, Double_t &rxy);
static Bool_t IsSameWithinTolerance(Double_t a, Double_t b);
static Bool_t IsSegCrossing(Double_t x1, Double_t y1, Double_t x2, Double_t y2,Double_t x3, Double_t y3,Double_t x4, Double_t y4);
static Bool_t IsInPhiRange(const Double_t *point, Double_t phi1, Double_t phi2);
virtual Bool_t IsReflected() const {return kFALSE;}
Bool_t IsRunTimeShape() const {return TestShapeBit(kGeoRunTimeShape);}
Bool_t IsValid() const {return !TestShapeBit(kGeoInvalidShape);}
virtual Bool_t IsValidBox() const = 0;
virtual void InspectShape() const = 0;
virtual TBuffer3D *MakeBuffer3D() const {return 0;}
static void NormalPhi(const Double_t *point, const Double_t *dir, Double_t *norm, Double_t c1, Double_t s1, Double_t c2, Double_t s2);
virtual void Paint(Option_t *option="");
virtual Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const = 0;
virtual void Safety_v(const Double_t *, const Bool_t *, Double_t *, Int_t) const {}
static Double_t SafetyPhi(const Double_t *point, Bool_t in, Double_t phi1, Double_t phi2);
static Double_t SafetySeg(Double_t r, Double_t z, Double_t r1, Double_t z1, Double_t r2, Double_t z2, Bool_t outer);
virtual void SetDimensions(Double_t *param) = 0;
void SetId(Int_t id) {fShapeId = id;}
virtual void SetPoints(Double_t *points) const = 0;
virtual void SetPoints(Float_t *points) const = 0;
virtual void SetSegsAndPols(TBuffer3D &buff) const = 0;
void SetRuntime(Bool_t flag=kTRUE) {SetShapeBit(kGeoRunTimeShape, flag);}
Int_t ShapeDistancetoPrimitive(Int_t numpoints, Int_t px, Int_t py) const;
virtual void Sizeof3D() const = 0;
//----- bit manipulation
void SetShapeBit(UInt_t f, Bool_t set);
void SetShapeBit(UInt_t f) { fShapeBits |= f & kBitMask32; }
void ResetShapeBit(UInt_t f) { fShapeBits &= ~(f & kBitMask32); }
Bool_t TestShapeBit(UInt_t f) const { return (Bool_t) ((fShapeBits & f) != 0); }
Int_t TestShapeBits(UInt_t f) const { return (Int_t) (fShapeBits & f); }
void InvertShapeBit(UInt_t f) { fShapeBits ^= f & kBitMask32; }
ClassDef(TGeoShape, 2) // base class for shapes
};
#endif
|