Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-01-06 10:28:05

0001 // @(#)root/geom:$Id$
0002 // Author: Andrei Gheata   11/01/02
0003 
0004 /*************************************************************************
0005  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
0006  * All rights reserved.                                                  *
0007  *                                                                       *
0008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
0009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
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; // Pointer to class painter
0034 
0035 public:
0036    enum EGeoVisLevel { kGeoVisLevel = 0 };
0037    enum EGeoVisOption {
0038       kGeoVisDefault = 0, // default visualization - everything visible 3 levels down
0039       kGeoVisLeaves = 1,  // only last leaves are visible
0040       kGeoVisOnly = 2,    // only current volume is drawn
0041       kGeoVisBranch = 3,  // only a given branch is drawn
0042       kGeoVisChanged = 4  // visibility changed
0043    };
0044    enum EGeoBombOption {
0045       kGeoNoBomb = 0,  // default - no bomb
0046       kGeoBombXYZ = 1, // explode view in cartesian coordinates
0047       kGeoBombCyl = 2, // explode view in cylindrical coordinates (R, Z)
0048       kGeoBombSph = 3  // explode view in spherical coordinates (R)
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 /*tmin*/, Double_t /*tmax*/, 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 & /*longitude*/, Double_t & /*latitude*/, Double_t & /*psi*/) {}
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) // Abstract interface for geometry painters
0118 };
0119 
0120 #endif