File indexing completed on 2026-01-06 10:28:05
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef ROOT_TVirtualGeoPainter
0013 #define ROOT_TVirtualGeoPainter
0014
0015 #include "TObject.h"
0016
0017 class TGeoVolume;
0018 class TGeoNode;
0019 class TGeoShape;
0020 class TGeoMatrix;
0021 class TGeoHMatrix;
0022 class TGeoManager;
0023 class TVirtualGeoTrack;
0024 class TParticle;
0025 class TObjArray;
0026 class TGeoBatemanSol;
0027 class TGeoIteratorPlugin;
0028 class TGeoPolygon;
0029
0030 class TVirtualGeoPainter : public TObject {
0031
0032 protected:
0033 static TVirtualGeoPainter *fgGeoPainter;
0034
0035 public:
0036 enum EGeoVisLevel { kGeoVisLevel = 0 };
0037 enum EGeoVisOption {
0038 kGeoVisDefault = 0,
0039 kGeoVisLeaves = 1,
0040 kGeoVisOnly = 2,
0041 kGeoVisBranch = 3,
0042 kGeoVisChanged = 4
0043 };
0044 enum EGeoBombOption {
0045 kGeoNoBomb = 0,
0046 kGeoBombXYZ = 1,
0047 kGeoBombCyl = 2,
0048 kGeoBombSph = 3
0049 };
0050
0051 public:
0052 TVirtualGeoPainter(TGeoManager *manager);
0053 ~TVirtualGeoPainter() override;
0054
0055 virtual void AddSize3D(Int_t numpoints, Int_t numsegs, Int_t numpolys) = 0;
0056 virtual TVirtualGeoTrack *AddTrack(Int_t id, Int_t pdgcode, TObject *particle) = 0;
0057 virtual void AddTrackPoint(Double_t *point, Double_t *box, Bool_t reset = kFALSE) = 0;
0058 virtual void BombTranslation(const Double_t *tr, Double_t *bombtr) = 0;
0059 virtual Int_t CountVisibleNodes() = 0;
0060 virtual void DefaultAngles() = 0;
0061 virtual void DefaultColors() = 0;
0062 virtual Int_t DistanceToPrimitiveVol(TGeoVolume *vol, Int_t px, Int_t py) = 0;
0063 virtual void DrawBatemanSol(TGeoBatemanSol *sol, Option_t *option = "") = 0;
0064 virtual void DrawShape(TGeoShape *shape, Option_t *option = "") = 0;
0065 virtual void DrawOnly(Option_t *option = "") = 0;
0066 virtual void DrawOverlap(void *ovlp, Option_t *option = "") = 0;
0067 virtual void DrawCurrentPoint(Int_t color) = 0;
0068 virtual void DrawPanel() = 0;
0069 virtual void DrawPath(const char *path, Option_t *option = "") = 0;
0070 virtual void DrawPolygon(const TGeoPolygon *poly) = 0;
0071 virtual void DrawVolume(TGeoVolume *vol, Option_t *option = "") = 0;
0072 virtual void EditGeometry(Option_t *option = "") = 0;
0073 virtual void EstimateCameraMove(Double_t , Double_t , Double_t *, Double_t *) {}
0074 virtual void ExecuteShapeEvent(TGeoShape *shape, Int_t event, Int_t px, Int_t py) = 0;
0075 virtual void ExecuteManagerEvent(TGeoManager *geom, Int_t event, Int_t px, Int_t py) = 0;
0076 virtual void ExecuteVolumeEvent(TGeoVolume *volume, Int_t event, Int_t px, Int_t py) = 0;
0077 virtual Int_t GetColor(Int_t base, Float_t light) const = 0;
0078 virtual Int_t GetNsegments() const = 0;
0079 virtual void GetBombFactors(Double_t &bombx, Double_t &bomby, Double_t &bombz, Double_t &bombr) const = 0;
0080 virtual Int_t GetBombMode() const = 0;
0081 virtual const char *GetDrawPath() const = 0;
0082 virtual TGeoVolume *GetDrawnVolume() const = 0;
0083 virtual TGeoVolume *GetTopVolume() const = 0;
0084 virtual void GetViewAngles(Double_t & , Double_t & , Double_t & ) {}
0085 virtual Int_t GetVisLevel() const = 0;
0086 virtual Int_t GetVisOption() const = 0;
0087 virtual const char *GetVolumeInfo(const TGeoVolume *volume, Int_t px, Int_t py) const = 0;
0088 virtual void GrabFocus(Int_t nfr = 0, Double_t dlong = 0, Double_t dlat = 0, Double_t dpsi = 0) = 0;
0089 virtual Double_t *GetViewBox() = 0;
0090 virtual Bool_t IsPaintingShape() const = 0;
0091 virtual Bool_t IsRaytracing() const = 0;
0092 virtual Bool_t IsExplodedView() const = 0;
0093 virtual void ModifiedPad(Bool_t update = kFALSE) const = 0;
0094 void Paint(Option_t *option = "") override = 0;
0095 virtual void PaintNode(TGeoNode *node, Option_t *option = "", TGeoMatrix *global = nullptr) = 0;
0096 virtual void PaintShape(TGeoShape *shape, Option_t *option = "") = 0;
0097 virtual void PaintOverlap(void *ovlp, Option_t *option = "") = 0;
0098 virtual void PaintVolume(TGeoVolume *vol, Option_t *option = "", TGeoMatrix *global = nullptr) = 0;
0099 virtual void Raytrace(Option_t *option = "") = 0;
0100 virtual void
0101 SetBombFactors(Double_t bombx = 1.3, Double_t bomby = 1.3, Double_t bombz = 1.3, Double_t bombr = 1.3) = 0;
0102 virtual void SetClippingShape(TGeoShape *shape) = 0;
0103 virtual void SetExplodedView(Int_t iopt = 0) = 0;
0104 virtual void SetGeoManager(TGeoManager *geom) = 0;
0105 virtual void SetIteratorPlugin(TGeoIteratorPlugin *plugin) = 0;
0106 virtual void SetNsegments(Int_t nseg = 20) = 0;
0107 virtual void SetRaytracing(Bool_t flag = kTRUE) = 0;
0108 static TVirtualGeoPainter *GeoPainter();
0109 static void SetPainter(const TVirtualGeoPainter *painter);
0110 virtual void SetTopVisible(Bool_t vis = kTRUE) = 0;
0111 virtual void SetTopVolume(TGeoVolume *vol) = 0;
0112 virtual void SetVisLevel(Int_t level = 3) = 0;
0113 virtual void SetVisOption(Int_t option = 0) = 0;
0114 virtual Int_t ShapeDistancetoPrimitive(const TGeoShape *shape, Int_t numpoints, Int_t px, Int_t py) const = 0;
0115 virtual void UnbombTranslation(const Double_t *tr, Double_t *bombtr) = 0;
0116
0117 ClassDefOverride(TVirtualGeoPainter, 0)
0118 };
0119
0120 #endif