Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGeoPainter.h
Go to the documentation of this file.
1// Author: Andrei Gheata 05/03/02
2
3/*************************************************************************
4 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
5 * All rights reserved. *
6 * *
7 * For the licensing terms see $ROOTSYS/LICENSE. *
8 * For the list of contributors see $ROOTSYS/README/CREDITS. *
9 *************************************************************************/
10#ifndef ROOT_TGeoPainter
11#define ROOT_TGeoPainter
12
13//////////////////////////////////////////////////////////////////////////
14// //
15// TGeoPainter //
16// //
17// Painter class utility TGeo geometries. Interfaces visualization //
18// queries with the viewers. //
19// //
20//////////////////////////////////////////////////////////////////////////
21
22#include "TVirtualGeoPainter.h"
23
24#include "TGeoManager.h"
25
26class TString;
27class TGeoHMatrix;
28class TGeoNode;
29class TGeoVolume;
30class TGeoShape;
33class TGeoChecker;
34class TGeoOverlap;
35class TH2F;
36class TGeoBatemanSol;
37class TGeoPolygon;
38
40private:
41 Double_t fBombX; // bomb factor on X
42 Double_t fBombY; // bomb factor on Y
43 Double_t fBombZ; // bomb factor on Z
44 Double_t fBombR; // bomb factor on radius (cyl or sph)
45 Double_t fCheckedBox[6]; // bounding box of checked node
46 Double_t fMat[9]; // view rotation matrix
47 Int_t fNsegments; // number of segments approximating circles
48 Int_t fNVisNodes; // number of visible nodes
49 Int_t fVisLevel; // depth for drawing
50 Int_t fVisOption; // global visualization option
51 Int_t fExplodedView; // type of exploding current view
52 Bool_t fVisLock; // lock for adding visible volumes
53 Bool_t fTopVisible; // set top volume visible
54 Bool_t fPaintingOverlaps; // lock overlaps painting
55 Bool_t fIsRaytracing; // raytracing flag
56 Bool_t fIsPaintingShape; // flag for shape painting
57 TString fVisBranch; // drawn branch
58 TString fVolInfo; // volume info
59 TGeoNode *fCheckedNode; // checked node
60 TGeoOverlap *fOverlap; // current overlap
61 TGeoHMatrix *fGlobal; // current global matrix
62 TBuffer3D *fBuffer; // buffer used for painting
63 TGeoManager *fGeoManager; // geometry to which applies
64 TGeoChecker *fChecker; // geometry checker
65 TGeoShape *fClippingShape; // clipping shape
66 TGeoVolume *fTopVolume; // top drawn volume
67 TGeoVolume *fLastVolume; // last drawn volume
68 TGeoIteratorPlugin *fPlugin; // User iterator plugin for changing pain volume properties
69 TObjArray *fVisVolumes; // list of visible volumes
70 Bool_t fIsEditable; // flag that geometry is editable
71
72 void DefineColors() const;
73 void LocalToMasterVect(const Double_t *local, Double_t *master) const;
74
75protected:
77
78public:
79 TGeoPainter(TGeoManager *manager);
80 ~TGeoPainter() override;
81
82 void AddSize3D(Int_t numpoints, Int_t numsegs, Int_t numpolys) override;
83 TVirtualGeoTrack *AddTrack(Int_t id, Int_t pdgcode, TObject *part) override;
84 void AddTrackPoint(Double_t *point, Double_t *box, Bool_t reset = kFALSE) override;
85 void BombTranslation(const Double_t *tr, Double_t *bombtr) override;
86 void CheckBoundaryErrors(Int_t ntracks = 1000000, Double_t radius = -1.) override;
87 void CheckBoundaryReference(Int_t icheck = -1) override;
88 void CheckGeometryFull(Bool_t checkoverlaps = kTRUE, Bool_t checkcrossings = kTRUE, Int_t nrays = 10000,
89 const Double_t *vertex = nullptr) override;
90 void CheckGeometry(Int_t nrays, Double_t startx, Double_t starty, Double_t startz) const override;
91 void CheckEdit();
92 void CheckPoint(Double_t x = 0, Double_t y = 0, Double_t z = 0, Option_t *option = "") override;
93 void CheckShape(TGeoShape *shape, Int_t testNo, Int_t nsamples, Option_t *option) override;
94 void CheckOverlaps(const TGeoVolume *vol, Double_t ovlp = 0.1, Option_t *option = "") const override;
95 Int_t CountNodes(TGeoVolume *vol, Int_t level) const;
96 Int_t CountVisibleNodes() override;
97 void DefaultAngles() override;
98 void DefaultColors() override;
99 Int_t DistanceToPrimitiveVol(TGeoVolume *vol, Int_t px, Int_t py) override;
100 void Draw(Option_t *option = "") override;
101 void DrawBatemanSol(TGeoBatemanSol *sol, Option_t *option = "") override;
102 void DrawOverlap(void *ovlp, Option_t *option = "") override;
103 void DrawCurrentPoint(Int_t color) override;
104 void DrawOnly(Option_t *option = "") override;
105 void DrawPanel() override;
106 void DrawPath(const char *path, Option_t *option = "") override;
107 void DrawPolygon(const TGeoPolygon *poly) override;
108 void DrawShape(TGeoShape *shape, Option_t *option = "") override;
109 void DrawVolume(TGeoVolume *vol, Option_t *option = "") override;
110 void EditGeometry(Option_t *option = "") override;
111 void EstimateCameraMove(Double_t tmin, Double_t tmax, Double_t *start, Double_t *end) override;
112 void ExecuteManagerEvent(TGeoManager *geom, Int_t event, Int_t px, Int_t py) override;
113 void ExecuteShapeEvent(TGeoShape *shape, Int_t event, Int_t px, Int_t py) override;
114 void ExecuteVolumeEvent(TGeoVolume *volume, Int_t event, Int_t px, Int_t py) override;
115 const char *GetVolumeInfo(const TGeoVolume *volume, Int_t px, Int_t py) const override;
116 void GetBombFactors(Double_t &bombx, Double_t &bomby, Double_t &bombz, Double_t &bombr) const override
117 {
118 bombx = fBombX;
119 bomby = fBombY;
120 bombz = fBombZ;
121 bombr = fBombR;
122 }
123 Int_t GetBombMode() const override { return fExplodedView; }
126 Int_t GetColor(Int_t base, Float_t light) const override;
127 const char *GetDrawPath() const override { return fVisBranch.Data(); }
128 TGeoVolume *GetDrawnVolume() const override;
129 TGeoVolume *GetTopVolume() const override { return fTopVolume; }
130 Int_t GetVisLevel() const override { return fVisLevel; }
131 Int_t GetVisOption() const override { return fVisOption; }
132 Int_t GetNsegments() const override { return fNsegments; }
133 void GrabFocus(Int_t nfr = 0, Double_t dlong = 0, Double_t dlat = 0, Double_t dpsi = 0) override;
134 Double_t *GetViewBox() override { return &fCheckedBox[0]; }
135 void GetViewAngles(Double_t &longitude, Double_t &latitude, Double_t &psi) override;
136 Bool_t IsExplodedView() const override { return (fExplodedView == kGeoVisDefault) ? kFALSE : kTRUE; }
137 Bool_t IsRaytracing() const override { return fIsRaytracing; }
138 Bool_t IsPaintingShape() const override { return fIsPaintingShape; }
139 TH2F *LegoPlot(Int_t ntheta = 60, Double_t themin = 0., Double_t themax = 180., Int_t nphi = 90,
140 Double_t phimin = 0., Double_t phimax = 360., Double_t rmin = 0., Double_t rmax = 9999999,
141 Option_t *option = "") override;
142 void Lock(Bool_t flag = kTRUE) { fVisLock = flag; }
143 void ModifiedPad(Bool_t update = kFALSE) const override;
144 void OpProgress(const char *opname, Long64_t current, Long64_t size, TStopwatch *watch = nullptr,
145 Bool_t last = kFALSE, Bool_t refresh = kFALSE, const char *msg = "") override;
146 void Paint(Option_t *option = "") override;
147 void PaintNode(TGeoNode *node, Option_t *option = "", TGeoMatrix *global = nullptr) override;
148 Bool_t PaintShape(const TGeoShape &shape, Option_t *option) const;
149 void PaintShape(TGeoShape *shape, Option_t *option = "") override;
150 void PaintOverlap(void *ovlp, Option_t *option = "") override;
151 void PaintVolume(TGeoVolume *vol, Option_t *option = "", TGeoMatrix *global = nullptr) override;
152 void PrintOverlaps() const override;
154 void RandomPoints(const TGeoVolume *vol, Int_t npoints, Option_t *option = "") override;
155 void RandomRays(Int_t nrays, Double_t startx, Double_t starty, Double_t startz, const char *target_vol = nullptr,
156 Bool_t check_norm = kFALSE) override;
157 void Raytrace(Option_t *option = "") override;
158 TGeoNode *SamplePoints(Int_t npoints, Double_t &dist, Double_t epsil, const char *g3path) override;
159 void SetBombFactors(Double_t bombx = 1.3, Double_t bomby = 1.3, Double_t bombz = 1.3, Double_t bombr = 1.3) override;
160 void SetClippingShape(TGeoShape *shape) override { fClippingShape = shape; }
161 void SetExplodedView(Int_t iopt = 0) override;
162 void SetNsegments(Int_t nseg = 20) override;
163 void SetNmeshPoints(Int_t npoints) override;
164 void SetGeoManager(TGeoManager *geom) override { fGeoManager = geom; }
166 {
167 fPlugin = plugin;
168 ModifiedPad();
169 }
170 void SetCheckedNode(TGeoNode *node) override;
171 void SetRaytracing(Bool_t flag = kTRUE) override { fIsRaytracing = flag; }
172 void SetTopVisible(Bool_t vis = kTRUE) override;
173 void SetTopVolume(TGeoVolume *vol) override { fTopVolume = vol; }
174 void SetVisLevel(Int_t level = 3) override;
175 void SetVisOption(Int_t option = 0) override;
176 Int_t ShapeDistancetoPrimitive(const TGeoShape *shape, Int_t numpoints, Int_t px, Int_t py) const override;
177 void Test(Int_t npoints, Option_t *option) override;
178 void TestOverlaps(const char *path) override;
179 Bool_t TestVoxels(TGeoVolume *vol) override;
180 void UnbombTranslation(const Double_t *tr, Double_t *bombtr) override;
181 Double_t Weight(Double_t precision, Option_t *option = "v") override;
182
183 ClassDefOverride(TGeoPainter, 0) // geometry painter
184};
185
186#endif
static void update(gsl_integration_workspace *workspace, double a1, double b1, double area1, double error1, double a2, double b2, double area2, double error2)
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
bool Bool_t
Definition RtypesCore.h:63
int Int_t
Definition RtypesCore.h:45
float Float_t
Definition RtypesCore.h:57
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
double Double_t
Definition RtypesCore.h:59
long long Long64_t
Definition RtypesCore.h:80
constexpr Bool_t kTRUE
Definition RtypesCore.h:100
const char Option_t
Definition RtypesCore.h:66
#define ClassDefOverride(name, id)
Definition Rtypes.h:341
Option_t Option_t option
Generic 3D primitive description class.
Definition TBuffer3D.h:18
Geometry checking package.
Definition TGeoChecker.h:37
Matrix class used for computing global transformations Should NOT be used for node definition.
Definition TGeoMatrix.h:458
The manager class for any TGeo geometry.
Definition TGeoManager.h:44
Geometrical transformation package.
Definition TGeoMatrix.h:38
A node represent a volume positioned inside another.They store links to both volumes and to the TGeoM...
Definition TGeoNode.h:39
Base class describing geometry overlaps.
Definition TGeoOverlap.h:37
Class implementing all draw interfaces for a generic 3D viewer using TBuffer3D mechanism.
Definition TGeoPainter.h:39
TVirtualGeoTrack * AddTrack(Int_t id, Int_t pdgcode, TObject *part) override
Create a primary TGeoTrack.
void PaintOverlap(void *ovlp, Option_t *option="") override
Paint an overlap.
Double_t fBombZ
Definition TGeoPainter.h:43
void EstimateCameraMove(Double_t tmin, Double_t tmax, Double_t *start, Double_t *end) override
Estimate camera movement between tmin and tmax for best track display.
TObjArray * fVisVolumes
Definition TGeoPainter.h:69
TGeoIteratorPlugin * fPlugin
Definition TGeoPainter.h:68
Double_t fMat[9]
Definition TGeoPainter.h:46
TGeoNode * SamplePoints(Int_t npoints, Double_t &dist, Double_t epsil, const char *g3path) override
Shoot npoints randomly in a box of 1E-5 around current point.
const char * GetDrawPath() const override
void PrintOverlaps() const override
Print overlaps (see TGeoChecker::PrintOverlaps())
Int_t GetBombMode() const override
TBuffer3D * fBuffer
Definition TGeoPainter.h:62
void RandomRays(Int_t nrays, Double_t startx, Double_t starty, Double_t startz, const char *target_vol=nullptr, Bool_t check_norm=kFALSE) override
Shoot nrays in the current drawn geometry.
void BombTranslation(const Double_t *tr, Double_t *bombtr) override
Get the new 'bombed' translation vector according current exploded view mode.
Int_t GetNsegments() const override
void Paint(Option_t *option="") override
Paint current geometry according to option.
void EditGeometry(Option_t *option="") override
Start the geometry editor.
void GetViewAngles(Double_t &longitude, Double_t &latitude, Double_t &psi) override
Get the current view angles.
void SetGeoManager(TGeoManager *geom) override
TGeoManager * fGeoManager
Definition TGeoPainter.h:63
TH2F * LegoPlot(Int_t ntheta=60, Double_t themin=0., Double_t themax=180., Int_t nphi=90, Double_t phimin=0., Double_t phimax=360., Double_t rmin=0., Double_t rmax=9999999, Option_t *option="") override
Generate a lego plot fot the top volume, according to option.
void Raytrace(Option_t *option="") override
Raytrace current drawn geometry.
TGeoNode * GetCheckedNode()
Bool_t IsPaintingShape() const override
TString fVisBranch
Definition TGeoPainter.h:57
TGeoVolume * fTopVolume
Definition TGeoPainter.h:66
TGeoChecker * GetChecker()
Create/return geometry checker.
~TGeoPainter() override
Default destructor.
void SetVisOption(Int_t option=0) override
Set drawing mode :
Bool_t IsExplodedView() const override
Bool_t fIsPaintingShape
Definition TGeoPainter.h:56
Double_t fBombR
Definition TGeoPainter.h:44
void TestOverlaps(const char *path) override
Geometry overlap checker based on sampling.
void CheckGeometryFull(Bool_t checkoverlaps=kTRUE, Bool_t checkcrossings=kTRUE, Int_t nrays=10000, const Double_t *vertex=nullptr) override
Geometry checking method (see: TGeoManager::CheckGeometry())
Int_t ShapeDistancetoPrimitive(const TGeoShape *shape, Int_t numpoints, Int_t px, Int_t py) const override
Returns distance between point px,py on the pad an a shape.
Int_t CountVisibleNodes() override
Count total number of visible nodes.
void DefineColors() const
Define 100 colors with increasing light intensities for each basic color (1-7) Register these colors ...
void SetExplodedView(Int_t iopt=0) override
Set type of exploding view.
void ExecuteManagerEvent(TGeoManager *geom, Int_t event, Int_t px, Int_t py) override
Execute mouse actions on a given volume.
void SetTopVolume(TGeoVolume *vol) override
void SetRaytracing(Bool_t flag=kTRUE) override
TGeoVolume * fLastVolume
Definition TGeoPainter.h:67
void SetNmeshPoints(Int_t npoints) override
Set number of points to be generated on the shape outline when checking for overlaps.
Int_t DistanceToPrimitiveVol(TGeoVolume *vol, Int_t px, Int_t py) override
Compute the closest distance of approach from point px,py to a volume.
void UnbombTranslation(const Double_t *tr, Double_t *bombtr) override
Get the new 'unbombed' translation vector according current exploded view mode.
Bool_t fVisLock
Definition TGeoPainter.h:52
void PaintNode(TGeoNode *node, Option_t *option="", TGeoMatrix *global=nullptr) override
Paint recursively a node and its content according to visualization options.
void DefaultAngles() override
Set default angles for the current view.
TGeoShape * fClippingShape
Definition TGeoPainter.h:65
Bool_t PaintShape(const TGeoShape &shape, Option_t *option) const
Paint the supplied shape into the current 3D viewer.
Bool_t fIsEditable
Definition TGeoPainter.h:70
Int_t CountNodes(TGeoVolume *vol, Int_t level) const
Count number of visible nodes down to a given level.
Double_t fCheckedBox[6]
Definition TGeoPainter.h:45
void DrawShape(TGeoShape *shape, Option_t *option="") override
Draw a shape.
void DrawOnly(Option_t *option="") override
Draw only one volume.
TGeoOverlap * fOverlap
Definition TGeoPainter.h:60
void CheckGeometry(Int_t nrays, Double_t startx, Double_t starty, Double_t startz) const override
Geometry checking method (see TGeoChecker).
Double_t fBombY
Definition TGeoPainter.h:42
Bool_t fPaintingOverlaps
Definition TGeoPainter.h:54
void CheckOverlaps(const TGeoVolume *vol, Double_t ovlp=0.1, Option_t *option="") const override
Check overlaps for the top volume of the geometry, within a limit OVLP.
void SetBombFactors(Double_t bombx=1.3, Double_t bomby=1.3, Double_t bombz=1.3, Double_t bombr=1.3) override
Set cartesian and radial bomb factors for translations.
void DefaultColors() override
Set default volume colors according to tracking media.
void CheckEdit()
Check if Ged library is loaded and load geometry editor classe.
Int_t GetVisLevel() const override
void CheckBoundaryErrors(Int_t ntracks=1000000, Double_t radius=-1.) override
Check pushes and pulls needed to cross the next boundary with respect to the position given by FindNe...
void ClearVisibleVolumes()
Clear the list of visible volumes reset the kVisOnScreen bit for volumes previously in the list.
Int_t GetColor(Int_t base, Float_t light) const override
Get index of a base color with given light intensity (0,1)
void LocalToMasterVect(const Double_t *local, Double_t *master) const
Convert a local vector according view rotation matrix.
void DrawVolume(TGeoVolume *vol, Option_t *option="") override
Draw method.
TGeoVolume * GetDrawnVolume() const override
Get currently drawn volume.
void DrawPolygon(const TGeoPolygon *poly) override
Draw a polygon in 3D.
Int_t fNsegments
Definition TGeoPainter.h:47
void Test(Int_t npoints, Option_t *option) override
Check time of finding "Where am I" for n points.
void PaintVolume(TGeoVolume *vol, Option_t *option="", TGeoMatrix *global=nullptr) override
Paint recursively a node and its content according to visualization options.
TString fVolInfo
Definition TGeoPainter.h:58
void CheckShape(TGeoShape *shape, Int_t testNo, Int_t nsamples, Option_t *option) override
Test for shape navigation methods.
void SetIteratorPlugin(TGeoIteratorPlugin *plugin) override
void RandomPoints(const TGeoVolume *vol, Int_t npoints, Option_t *option="") override
Draw random points in the bounding box of a volume.
Bool_t fTopVisible
Definition TGeoPainter.h:53
TGeoVolume * GetTopVolume() const override
TGeoHMatrix * fGlobal
Definition TGeoPainter.h:61
void GetBombFactors(Double_t &bombx, Double_t &bomby, Double_t &bombz, Double_t &bombr) const override
Int_t fVisLevel
Definition TGeoPainter.h:49
void Lock(Bool_t flag=kTRUE)
void SetNsegments(Int_t nseg=20) override
Set number of segments to approximate circles.
void CheckBoundaryReference(Int_t icheck=-1) override
Check the boundary errors reference file created by CheckBoundaryErrors method.
void AddTrackPoint(Double_t *point, Double_t *box, Bool_t reset=kFALSE) override
Average center of view of all painted tracklets and compute view box.
void GrabFocus(Int_t nfr=0, Double_t dlong=0, Double_t dlat=0, Double_t dpsi=0) override
Move focus to current volume.
void DrawOverlap(void *ovlp, Option_t *option="") override
Draw an overlap.
void SetVisLevel(Int_t level=3) override
Set default level down to which visualization is performed.
void AddSize3D(Int_t numpoints, Int_t numsegs, Int_t numpolys) override
Add numpoints, numsegs, numpolys to the global 3D size.
TGeoNode * fCheckedNode
Definition TGeoPainter.h:59
void PaintPhysicalNode(TGeoPhysicalNode *node, Option_t *option="")
Paints a physical node associated with a path.
Int_t fNVisNodes
Definition TGeoPainter.h:48
Int_t fExplodedView
Definition TGeoPainter.h:51
const char * GetVolumeInfo(const TGeoVolume *volume, Int_t px, Int_t py) const override
Get some info about the current selected volume.
void SetClippingShape(TGeoShape *shape) override
void CheckPoint(Double_t x=0, Double_t y=0, Double_t z=0, Option_t *option="") override
Check current point in the geometry.
void DrawCurrentPoint(Int_t color) override
Draw current point in the same view.
void DrawPath(const char *path, Option_t *option="") override
Draw all volumes for a given path.
void OpProgress(const char *opname, Long64_t current, Long64_t size, TStopwatch *watch=nullptr, Bool_t last=kFALSE, Bool_t refresh=kFALSE, const char *msg="") override
Text progress bar.
void SetCheckedNode(TGeoNode *node) override
Select a node to be checked for overlaps.
void DrawBatemanSol(TGeoBatemanSol *sol, Option_t *option="") override
Draw the time evolution of a radionuclide.
TGeoChecker * fChecker
Definition TGeoPainter.h:64
Bool_t IsRaytracing() const override
Bool_t fIsRaytracing
Definition TGeoPainter.h:55
void ExecuteShapeEvent(TGeoShape *shape, Int_t event, Int_t px, Int_t py) override
Execute mouse actions on a given shape.
Double_t * GetViewBox() override
Double_t Weight(Double_t precision, Option_t *option="v") override
Compute weight [kg] of the current volume.
void ExecuteVolumeEvent(TGeoVolume *volume, Int_t event, Int_t px, Int_t py) override
Execute mouse actions on a given volume.
Double_t fBombX
Definition TGeoPainter.h:41
void ModifiedPad(Bool_t update=kFALSE) const override
Check if a pad and view are present and send signal "Modified" to pad.
void SetTopVisible(Bool_t vis=kTRUE) override
Set top geometry volume as visible.
void DrawPanel() override
Int_t GetVisOption() const override
Int_t fVisOption
Definition TGeoPainter.h:50
Bool_t TestVoxels(TGeoVolume *vol) override
Check voxels efficiency per volume.
Physical nodes are the actual 'touchable' objects in the geometry, representing a path of positioned ...
An arbitrary polygon defined by vertices.
Definition TGeoPolygon.h:19
Base abstract class for all shapes.
Definition TGeoShape.h:25
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Definition TGeoVolume.h:43
2-D histogram with a float per channel (see TH1 documentation)}
Definition TH2.h:258
An array of TObjects.
Definition TObjArray.h:31
Mother of all ROOT objects.
Definition TObject.h:41
Stopwatch class.
Definition TStopwatch.h:28
Basic string class.
Definition TString.h:139
const char * Data() const
Definition TString.h:380
Abstract class for geometry painters.
Base class for user-defined tracks attached to a geometry.
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Definition fillpatterns.C:1
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17
th1 Draw()