/usr/include/root/TGeoXtru.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 | // @(#)root/geom:$Id$
// Author: Mihaela Gheata 24/01/04
/*************************************************************************
* 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_TGeoXtru
#define ROOT_TGeoXtru
#ifndef ROOT_TGeoBBox
#include "TGeoBBox.h"
#endif
class TGeoPolygon;
////////////////////////////////////////////////////////////////////////////
// //
// TGeoXtru - An extrusion with fixed outline shape in x-y and a sequence //
// of z extents (segments). The overall scale of the outline scales //
// linearly between z points and the center can have an x-y offset. //
// //
// Based on the initial implementation of R. Hatcher //
// //
////////////////////////////////////////////////////////////////////////////
class TGeoXtru : public TGeoBBox
{
public:
struct ThreadData_t
{
Int_t fSeg; // !current segment [0,fNvert-1]
Int_t fIz; // !current z plane [0,fNz-1]
Double_t *fXc; // ![fNvert] current X positions for polygon vertices
Double_t *fYc; // ![fNvert] current Y positions for polygon vertices
TGeoPolygon *fPoly; // !polygon defining section shape
ThreadData_t();
~ThreadData_t();
};
ThreadData_t& GetThreadData() const;
virtual void ClearThreadData() const;
virtual void CreateThreadData(Int_t nthreads);
protected:
// data members
Int_t fNvert; // number of vertices of the 2D polygon (at least 3)
Int_t fNz; // number of z planes (at least two)
Double_t fZcurrent; // current Z position
Double_t *fX; //[fNvert] X positions for polygon vertices
Double_t *fY; //[fNvert] Y positions for polygon vertices
Double_t *fZ; //[fNz] array of Z planes positions
Double_t *fScale; //[fNz] array of scale factors (for each Z)
Double_t *fX0; //[fNz] array of X offsets (for each Z)
Double_t *fY0; //[fNz] array of Y offsets (for each Z)
mutable std::vector<ThreadData_t*> fThreadData; //! Navigation data per thread
mutable Int_t fThreadSize; //! size of thread-specific array
TGeoXtru(const TGeoXtru&);
TGeoXtru& operator=(const TGeoXtru&);
// methods
Double_t DistToPlane(const Double_t *point, const Double_t *dir, Int_t iz, Int_t ivert, Double_t stepmax, Bool_t in) const;
void GetPlaneVertices(Int_t iz, Int_t ivert, Double_t *vert) const;
void GetPlaneNormal(const Double_t *vert, Double_t *norm) const;
Bool_t IsPointInsidePlane(const Double_t *point, Double_t *vert, Double_t *norm) const;
Double_t SafetyToSector(const Double_t *point, Int_t iz, Double_t safmin, Bool_t in);
void SetIz(Int_t iz);
void SetSeg(Int_t iseg);
public:
// constructors
TGeoXtru();
TGeoXtru(Int_t nz);
TGeoXtru(Double_t *param);
// destructor
virtual ~TGeoXtru();
// methods
virtual Double_t Capacity() const;
virtual void ComputeBBox();
virtual void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm);
virtual void ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize);
virtual Bool_t Contains(const Double_t *point) const;
virtual void Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const;
Bool_t DefinePolygon(Int_t nvert, const Double_t *xv, const Double_t *yv);
virtual void DefineSection(Int_t snum, Double_t z, Double_t x0=0., Double_t y0=0., Double_t scale=1.);
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;
virtual void DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) 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;
virtual void DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const;
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
void DrawPolygon(Option_t *option="");
virtual const TBuffer3D &GetBuffer3D(Int_t reqSections, Bool_t localFrame) const;
// virtual Int_t GetByteCount() const {return 60+12*fNz;}
Int_t GetNz() const {return fNz;}
Int_t GetNvert() const {return fNvert;}
Double_t GetX(Int_t i) const {return (i<fNvert&&i>-1 &&fX!=0) ? fX[i] : -1.0E10;}
Double_t GetY(Int_t i) const {return (i<fNvert&&i>-1 &&fY!=0) ? fY[i] : -1.0E10;}
Double_t GetXOffset(Int_t i) const {return (i<fNz&&i>-1 && fX0!=0) ? fX0[i] : 0.0;}
Double_t GetYOffset(Int_t i) const {return (i<fNz&&i>-1 && fY0!=0) ? fY0[i] : 0.0;}
Double_t GetScale(Int_t i) const {return (i<fNz&&i>-1 && fScale!=0) ? fScale[i] : 1.0;}
Double_t *GetZ() const {return fZ;}
Double_t GetZ(Int_t ipl) const;
virtual TGeoShape *GetMakeRuntimeShape(TGeoShape * /*mother*/, TGeoMatrix * /*mat*/) const {return 0;}
virtual void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const;
virtual Int_t GetNmeshVertices() const;
virtual void InspectShape() const;
virtual TBuffer3D *MakeBuffer3D() const;
Double_t &Z(Int_t ipl) {return fZ[ipl];}
virtual Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const;
virtual void Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const;
virtual void SavePrimitive(std::ostream &out, Option_t *option = "");
void SetCurrentZ(Double_t z, Int_t iz);
void SetCurrentVertices(Double_t x0, Double_t y0, Double_t scale);
virtual void SetDimensions(Double_t *param);
virtual void SetPoints(Double_t *points) const;
virtual void SetPoints(Float_t *points) const;
virtual void SetSegsAndPols(TBuffer3D &buff) const;
virtual void Sizeof3D() const;
ClassDef(TGeoXtru, 3) // extruded polygon class
};
#endif
|