12 #ifndef ROOT_TEveProjections
13 #define ROOT_TEveProjections
29 enum EPType_e { kPT_Unknown, kPT_RPhi, kPT_RhoZ, kPT_3D, kPT_End };
30 enum EPProc_e { kPP_Plane, kPP_Distort, kPP_Full };
31 enum EGeoMode_e { kGM_Unknown, kGM_Polygons, kGM_Segments };
33 struct PreScaleEntry_t
40 fMin(0), fMax(0), fOffset(0), fScale(1) {}
41 PreScaleEntry_t(Float_t min, Float_t max, Float_t off, Float_t scale) :
42 fMin(min), fMax(max), fOffset(off), fScale(scale) {}
44 virtual ~PreScaleEntry_t() {}
46 ClassDef(PreScaleEntry_t, 0);
49 typedef std::vector<PreScaleEntry_t> vPreScale_t;
50 typedef std::vector<PreScaleEntry_t>::iterator vPreScale_i;
62 vPreScale_t fPreScales[3];
71 Float_t fPastFixRScale;
72 Float_t fPastFixZScale;
73 Float_t fMaxTrackStep;
75 void PreScaleVariable(Int_t dim, Float_t& v);
79 virtual ~TEveProjection() {}
81 virtual Bool_t Is2D()
const = 0;
82 virtual Bool_t Is3D()
const = 0;
84 virtual void ProjectPoint(Float_t& x, Float_t& y, Float_t& z, Float_t d, EPProc_e p = kPP_Full) = 0;
86 void ProjectPointfv(Float_t* v, Float_t d);
87 void ProjectPointdv(Double_t* v, Float_t d);
88 void ProjectVector(TEveVector& v, Float_t d);
90 void ProjectPointfv(
const TEveTrans* t,
const Float_t* p, Float_t* v, Float_t d);
91 void ProjectPointdv(
const TEveTrans* t,
const Double_t* p, Double_t* v, Float_t d);
92 void ProjectVector(
const TEveTrans* t, TEveVector& v, Float_t d);
94 const Char_t* GetName()
const {
return fName.Data(); }
95 void SetName(
const Char_t* txt) { fName = txt; }
97 const TEveVector& RefCenter()
const {
return fCenter; }
98 virtual void SetCenter(TEveVector& v) { fCenter = v; }
99 virtual Float_t* GetProjectedCenter();
101 void SetDisplaceOrigin(
bool);
102 Bool_t GetDisplaceOrigin()
const {
return fDisplaceOrigin; }
104 void SetType(EPType_e t) { fType = t; }
105 EPType_e GetType()
const {
return fType; }
107 void SetGeoMode(EGeoMode_e m) { fGeoMode = m; }
108 EGeoMode_e GetGeoMode()
const {
return fGeoMode; }
110 Bool_t GetUsePreScale()
const {
return fUsePreScale; }
111 void SetUsePreScale(Bool_t x) { fUsePreScale = x; }
113 void PreScalePoint(Float_t& x, Float_t& y);
114 void PreScalePoint(Float_t& x, Float_t& y, Float_t& z);
115 void AddPreScaleEntry(Int_t coord, Float_t max_val, Float_t scale);
116 void ChangePreScaleEntry(Int_t coord, Int_t entry, Float_t new_scale);
117 void ClearPreScales();
119 void SetDistortion(Float_t d);
120 Float_t GetDistortion()
const {
return fDistortion; }
121 Float_t GetFixR()
const {
return fFixR; }
122 Float_t GetFixZ()
const {
return fFixZ; }
123 void SetFixR(Float_t x);
124 void SetFixZ(Float_t x);
125 Float_t GetPastFixRFac()
const {
return fPastFixRFac; }
126 Float_t GetPastFixZFac()
const {
return fPastFixZFac; }
127 void SetPastFixRFac(Float_t x);
128 void SetPastFixZFac(Float_t x);
129 Float_t GetMaxTrackStep()
const {
return fMaxTrackStep; }
130 void SetMaxTrackStep(Float_t x) { fMaxTrackStep = TMath::Max(x, 1.0f); }
132 virtual Bool_t HasSeveralSubSpaces()
const {
return kFALSE; }
133 virtual Bool_t AcceptSegment(TEveVector&, TEveVector&, Float_t )
const {
return kTRUE; }
134 virtual Int_t SubSpaceId(
const TEveVector&)
const {
return 0; }
135 virtual Bool_t IsOnSubSpaceBoundrary(
const TEveVector&)
const {
return kFALSE; }
136 virtual void BisectBreakPoint(TEveVector& vL, TEveVector& vR, Float_t eps_sqr);
137 virtual void BisectBreakPoint(TEveVector& vL, TEveVector& vR, Bool_t project_result=kFALSE, Float_t depth=0);
138 virtual void SetDirectionalVector(Int_t screenAxis, TEveVector& vec);
141 TEveVector GetOrthogonalCenter(
int idx, TEveVector& out);
142 virtual Float_t GetValForScreenPos(Int_t ax, Float_t value);
143 virtual Float_t GetScreenVal(Int_t ax, Float_t value);
144 Float_t GetScreenVal(Int_t i, Float_t x, TEveVector& dirVec, TEveVector& oCenter);
145 Float_t GetLimit(Int_t i, Bool_t pos);
148 static Float_t fgEps;
149 static Float_t fgEpsSqr;
151 ClassDef(TEveProjection, 0);
159 class TEveRhoZProjection:
public TEveProjection
162 TEveVector fProjectedCenter;
165 TEveRhoZProjection();
166 virtual ~TEveRhoZProjection() {}
168 virtual Bool_t Is2D()
const {
return kTRUE; }
169 virtual Bool_t Is3D()
const {
return kFALSE; }
171 virtual void ProjectPoint(Float_t& x, Float_t& y, Float_t& z, Float_t d, EPProc_e proc = kPP_Full);
173 virtual void SetCenter(TEveVector& v);
174 virtual Float_t* GetProjectedCenter() {
return fProjectedCenter.Arr(); }
176 virtual Bool_t HasSeveralSubSpaces()
const {
return kTRUE; }
177 virtual Bool_t AcceptSegment(TEveVector& v1, TEveVector& v2, Float_t tolerance)
const;
178 virtual Int_t SubSpaceId(
const TEveVector& v)
const;
179 virtual Bool_t IsOnSubSpaceBoundrary(
const TEveVector& v)
const;
180 virtual void SetDirectionalVector(Int_t screenAxis, TEveVector& vec);
182 ClassDef(TEveRhoZProjection, 0);
190 class TEveRPhiProjection :
public TEveProjection
193 TEveRPhiProjection();
194 virtual ~TEveRPhiProjection() {}
196 virtual Bool_t Is2D()
const {
return kTRUE; }
197 virtual Bool_t Is3D()
const {
return kFALSE; }
199 virtual void ProjectPoint(Float_t& x, Float_t& y, Float_t& z, Float_t d, EPProc_e proc = kPP_Full);
201 ClassDef(TEveRPhiProjection, 0);
209 class TEve3DProjection :
public TEveProjection
213 virtual ~TEve3DProjection() {}
215 virtual Bool_t Is2D()
const {
return kFALSE; }
216 virtual Bool_t Is3D()
const {
return kTRUE; }
218 virtual void ProjectPoint(Float_t& x, Float_t& y, Float_t& z, Float_t d, EPProc_e proc = kPP_Full);
220 ClassDef(TEve3DProjection, 0);
224 #define TEVEPROJECTIONS_DISPLACE_ORIGIN_MODE