BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EventDisplay/BesVisLib/include/BesVisLib/BesTView.h
Go to the documentation of this file.
1// @(#)root/base:$Name: BesVisLib-00-06-02 $:$Id: BesTView.h,v 1.11 2022/03/04 04:44:37 maqm
2// Exp $ Author: Rene Brun, Nenad Buncic, Evgueni Tcherniaev, Olivier Couet 18/08/95
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_BesTView
13#define ROOT_BesTView
14
15/////////////////////////////////////////////////////////////////////////
16// //
17// BesTView //
18// //
19/////////////////////////////////////////////////////////////////////////
20
21#ifndef ROOT_TView
22# include "TView.h"
23#endif
24
25class TSeqCollection;
26class TVirtualPad;
27
28class BesTView : public TView {
29
30protected:
31 Double_t fLatitude; // View angle latitude
32 Double_t fLongitude; // View angle longitude
33 Double_t fPsi; // View angle psi
34 Double_t fDview; // Distance from COP to COV
35 Double_t fDproj; // Distance from COP to projection plane
36 Double_t fUpix; // pad X size in pixels
37 Double_t fVpix; // pad Y size in pixels
38 Double_t fTN[16]; //
39 Double_t fTB[16]; //
40 Double_t fRmax[3]; // Upper limits of object
41 Double_t fRmin[3]; // Lower limits of object
42 Double_t fUVcoord[4]; // Viewing window limits
43 Double_t fTnorm[16]; // Transformation matrix
44 Double_t fTback[16]; // Back transformation matrix
45 Double_t fX1[3]; // First coordinate of X axis
46 Double_t fX2[3]; // Second coordinate of X axis
47 Double_t fY1[3]; // First coordinate of Y axis
48 Double_t fY2[3]; // Second coordinate of Y axis
49 Double_t fZ1[3]; // First coordinate of Z axis
50 Double_t fZ2[3]; // Second coordinate of Z axis
51 Int_t fSystem; // Coordinate system
52 TSeqCollection* fOutline; // Collection of outline's objects
53 Bool_t fDefaultOutline; // Set to TRUE if outline is default cube
54 Bool_t fAutoRange; // Set to TRUE if range computed automatically
55 Bool_t fChanged; //! Set to TRUE after ExecuteRotateView
56
57 BesTView( const BesTView& ); // Not implemented
58 BesTView& operator=( const BesTView& ); // Not implemented
59
60 void ResetView( Double_t longitude, Double_t latitude, Double_t psi, Int_t& irep );
61
62public:
63 // BesTView status bits
64 enum { kPerspective = BIT( 6 ) };
65
66 BesTView();
67 BesTView( Int_t system );
68 BesTView( const Float_t* rmin, const Float_t* rmax, Int_t system = 1 );
69 BesTView( const Double_t* rmin, const Double_t* rmax, Int_t system = 1 );
70 virtual ~BesTView();
71
72 virtual void AxisVertex( Double_t ang, Double_t* av, Int_t& ix1, Int_t& ix2, Int_t& iy1,
73 Int_t& iy2, Int_t& iz1, Int_t& iz2 );
74 virtual void DefinePerspectiveView();
75 virtual void DefineViewDirection( const Double_t* s, const Double_t* c, Double_t cosphi,
76 Double_t sinphi, Double_t costhe, Double_t sinthe,
77 Double_t cospsi, Double_t sinpsi, Double_t* tnorm,
78 Double_t* tback );
79 virtual void DrawOutlineCube( TList* outline, Double_t* rmin, Double_t* rmax );
80 virtual void ExecuteEvent( Int_t event, Int_t px, Int_t py );
81 virtual void ExecuteRotateView( Int_t event, Int_t px, Int_t py );
82 virtual void FindScope( Double_t* scale, Double_t* center, Int_t& irep );
83 virtual Int_t GetDistancetoAxis( Int_t axis, Int_t px, Int_t py, Double_t& ratio );
84 Double_t GetDview() const { return fDview; }
85 Double_t GetDproj() const { return fDproj; }
86 Double_t GetExtent() const;
87 Bool_t GetAutoRange() { return fAutoRange; }
88 Double_t GetLatitude() { return fLatitude; }
89 Double_t GetLongitude() { return fLongitude; }
90 Double_t GetPsi() { return fPsi; }
91 virtual void GetRange( Float_t* min, Float_t* max );
92 virtual void GetRange( Double_t* min, Double_t* max );
93 Double_t* GetRmax() { return fRmax; }
94 Double_t* GetRmin() { return fRmin; }
95 TSeqCollection* GetOutline() { return fOutline; }
96 Double_t* GetTback() { return fTback; }
97 Double_t* GetTN() { return fTN; }
98 Double_t* GetTnorm() { return fTnorm; }
99 Int_t GetSystem() { return fSystem; }
100 void GetWindow( Double_t& u0, Double_t& v0, Double_t& du, Double_t& dv ) const;
101 Double_t GetWindowWidth() const { return 0.5 * ( fUVcoord[1] - fUVcoord[0] ); }
102 Double_t GetWindowHeight() const { return 0.5 * ( fUVcoord[3] - fUVcoord[2] ); }
103 virtual void FindNormal( Double_t x, Double_t y, Double_t z, Double_t& zn );
104 virtual void FindPhiSectors( Int_t iopt, Int_t& kphi, Double_t* aphi, Int_t& iphi1,
105 Int_t& iphi2 );
106 virtual void FindThetaSectors( Int_t iopt, Double_t phi, Int_t& kth, Double_t* ath,
107 Int_t& ith1, Int_t& ith2 );
108 Bool_t IsClippedNDC( Double_t* p ) const;
109 Bool_t IsPerspective() const { return TestBit( kPerspective ); }
110 Bool_t IsViewChanged() const { return fChanged; }
111 virtual void NDCtoWC( const Float_t* pn, Float_t* pw );
112 virtual void NDCtoWC( const Double_t* pn, Double_t* pw );
113 virtual void NormalWCtoNDC( const Float_t* pw, Float_t* pn );
114 virtual void NormalWCtoNDC( const Double_t* pw, Double_t* pn );
115 virtual void PadRange( Int_t rback );
116 void ResizePad();
117 virtual void SetAutoRange( Bool_t autorange = kTRUE ) { fAutoRange = autorange; }
118 virtual void SetAxisNDC( const Double_t* x1, const Double_t* x2, const Double_t* y1,
119 const Double_t* y2, const Double_t* z1, const Double_t* z2 );
120 void SetDefaultWindow();
121 void SetDview( Double_t dview ) { fDview = dview; }
122 void SetDproj( Double_t dproj ) { fDproj = dproj; }
123 void SetLatitude( Double_t latitude ) { fLatitude = latitude; }
124 void SetLongitude( Double_t longitude ) { fLongitude = longitude; }
125 void SetPsi( Double_t psi ) { fPsi = psi; }
126 virtual void SetOutlineToCube();
127 virtual void SetParallel(); // *MENU*
128 virtual void SetPerspective(); // *MENU*
129 virtual void SetRange( const Double_t* min, const Double_t* max );
130 virtual void SetRange( Double_t x0, Double_t y0, Double_t z0, Double_t x1, Double_t y1,
131 Double_t z1, Int_t flag = 0 );
132 virtual void SetSystem( Int_t system ) { fSystem = system; }
133 virtual void SetView( Double_t longitude, Double_t latitude, Double_t psi, Int_t& irep );
134 void SetViewChanged( Bool_t flag = kTRUE ) { fChanged = flag; }
135 void SetWindow( Double_t u0, Double_t v0, Double_t du, Double_t dv );
136 virtual void WCtoNDC( const Float_t* pw, Float_t* pn );
137 virtual void WCtoNDC( const Double_t* pw, Double_t* pn );
138
139 //--
140 void MoveFocus( Double_t* center, Double_t dx, Double_t dy, Double_t dz, Int_t nsteps = 10,
141 Double_t dlong = 0, Double_t dlat = 0, Double_t dpsi = 0 );
142 virtual void MoveViewCommand( Char_t chCode, Int_t count = 1 );
143 void MoveWindow( Char_t option );
144
145 static void AdjustPad( TVirtualPad* pad = 0 );
146 virtual void AdjustScales( TVirtualPad* pad = 0 ); // *MENU*
147 virtual void Centered3DImages( TVirtualPad* pad = 0 );
148 virtual void Centered(); // *MENU*
149 virtual void FrontView( TVirtualPad* pad = 0 );
150 virtual void Front(); // *MENU*
151
152 virtual void ZoomIn(); // *MENU*
153 virtual void ZoomOut(); // *MENU*
154 virtual void ZoomView( TVirtualPad* pad = 0, Double_t zoomFactor = 1.25 );
155 virtual void UnzoomView( TVirtualPad* pad = 0, Double_t unZoomFactor = 1.25 );
156
157 virtual void RotateView( Double_t phi, Double_t theta, TVirtualPad* pad = 0 );
158 virtual void SideView( TVirtualPad* pad = 0 );
159 virtual void Side(); // *MENU*
160 virtual void TopView( TVirtualPad* pad = 0 );
161 virtual void Top(); // *MENU*
162
163 virtual void ToggleRulers( TVirtualPad* pad = 0 );
164 virtual void ShowAxis(); // *MENU*
165 virtual void ToggleZoom( TVirtualPad* pad = 0 );
166 virtual void ZoomMove(); // *MENU*
167 virtual void Zoom(); // *MENU*
168 virtual void UnZoom(); // *MENU*
169
170 ClassDef( BesTView, 2 ); // 3-D View
171};
172
173// Shortcuts for menus
175inline void BesTView::Front() { FrontView(); }
177inline void BesTView::Side() { SideView(); }
178inline void BesTView::Top() { TopView(); }
179inline void BesTView::ZoomMove() { ToggleZoom(); }
180inline void BesTView::Zoom() { ZoomView(); }
181inline void BesTView::UnZoom() { UnzoomView(); }
182
183#endif
#define min(a, b)
#define max(a, b)
DOUBLE_PRECISION count[3]
XmlRpcServer s
virtual void FrontView(TVirtualPad *pad=0)
virtual Int_t GetDistancetoAxis(Int_t axis, Int_t px, Int_t py, Double_t &ratio)
virtual void TopView(TVirtualPad *pad=0)
virtual void SetOutlineToCube()
virtual void WCtoNDC(const Float_t *pw, Float_t *pn)
virtual void UnzoomView(TVirtualPad *pad=0, Double_t unZoomFactor=1.25)
virtual void SetAxisNDC(const Double_t *x1, const Double_t *x2, const Double_t *y1, const Double_t *y2, const Double_t *z1, const Double_t *z2)
ClassDef(BesTView, 2)
Bool_t IsClippedNDC(Double_t *p) const
virtual void FindNormal(Double_t x, Double_t y, Double_t z, Double_t &zn)
Definition BesTView.cxx:875
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Definition BesTView.cxx:734
virtual void AdjustScales(TVirtualPad *pad=0)
virtual void FindPhiSectors(Int_t iopt, Int_t &kphi, Double_t *aphi, Int_t &iphi1, Int_t &iphi2)
Definition BesTView.cxx:892
void SetWindow(Double_t u0, Double_t v0, Double_t du, Double_t dv)
Double_t GetExtent() const
virtual void ToggleRulers(TVirtualPad *pad=0)
virtual void DefinePerspectiveView()
Definition BesTView.cxx:465
virtual void ToggleZoom(TVirtualPad *pad=0)
virtual void Centered3DImages(TVirtualPad *pad=0)
virtual void NDCtoWC(const Float_t *pn, Float_t *pw)
void ResizePad()
virtual void AxisVertex(Double_t ang, Double_t *av, Int_t &ix1, Int_t &ix2, Int_t &iy1, Int_t &iy2, Int_t &iz1, Int_t &iz2)
Definition BesTView.cxx:322
virtual void ZoomView(TVirtualPad *pad=0, Double_t zoomFactor=1.25)
virtual void SetRange(const Double_t *min, const Double_t *max)
virtual void RotateView(Double_t phi, Double_t theta, TVirtualPad *pad=0)
virtual void NormalWCtoNDC(const Float_t *pw, Float_t *pn)
BesTView(const BesTView &)
Set to TRUE after ExecuteRotateView.
Definition BesTView.cxx:50
static void AdjustPad(TVirtualPad *pad=0)
virtual void ZoomOut()
void MoveFocus(Double_t *center, Double_t dx, Double_t dy, Double_t dz, Int_t nsteps=10, Double_t dlong=0, Double_t dlat=0, Double_t dpsi=0)
virtual void PadRange(Int_t rback)
virtual void SetParallel()
void SetDefaultWindow()
virtual void GetRange(Float_t *min, Float_t *max)
void ResetView(Double_t longitude, Double_t latitude, Double_t psi, Int_t &irep)
virtual void SideView(TVirtualPad *pad=0)
virtual void DefineViewDirection(const Double_t *s, const Double_t *c, Double_t cosphi, Double_t sinphi, Double_t costhe, Double_t sinthe, Double_t cospsi, Double_t sinpsi, Double_t *tnorm, Double_t *tback)
Definition BesTView.cxx:596
virtual void SetView(Double_t longitude, Double_t latitude, Double_t psi, Int_t &irep)
virtual void ExecuteRotateView(Int_t event, Int_t px, Int_t py)
Definition BesTView.cxx:741
virtual void SetPerspective()
virtual void MoveViewCommand(Char_t chCode, Int_t count=1)
void MoveWindow(Char_t option)
virtual void ZoomIn()
virtual void DrawOutlineCube(TList *outline, Double_t *rmin, Double_t *rmax)
Definition BesTView.cxx:727
virtual void FindThetaSectors(Int_t iopt, Double_t phi, Int_t &kth, Double_t *ath, Int_t &ith1, Int_t &ith2)
Definition BesTView.cxx:965
void GetWindow(Double_t &u0, Double_t &v0, Double_t &du, Double_t &dv) const
virtual void FindScope(Double_t *scale, Double_t *center, Int_t &irep)
virtual void SetAutoRange(Bool_t autorange=kTRUE)
virtual ~BesTView()
Definition BesTView.cxx:130
BesTView & operator=(const BesTView &)
Definition BesTView.cxx:88