library: libCore #include "TView.h"

# TView

class description - source file - inheritance tree (.pdf)

## class TView : public TObject, public TAttLine

| Inheritance Chart:
`TObject`
`TAttLine`
| <- | `TView` |

        protected:

          void ResetView(Double_t longitude, Double_t latitude, Double_t psi, Int_t& irep)

        public:

                          TView()
                          TView(Int_t system)
                          TView(const Float_t* rmin, const Float_t* rmax, Int_t system = 1)
                          TView(const Double_t* rmin, const Double_t* rmax, Int_t system = 1)
                          TView(const TView&)
                  virtual ~TView()
              static void AdjustPad(TVirtualPad* pad = 0)
             virtual void AdjustScales(TVirtualPad* pad = 0)
             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)
             virtual void Centered()
             virtual void Centered3DImages(TVirtualPad* pad = 0)
           static TClass* Class()
             virtual void DefinePerspectiveView()
             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)
             virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
             virtual void ExecuteRotateView(Int_t event, Int_t px, Int_t py)
             virtual void FindNormal(Double_t x, Double_t y, Double_t z, Double_t& zn)
             virtual void FindPhiSectors(Int_t iopt, Int_t& kphi, Double_t* aphi, Int_t& iphi1, Int_t& iphi2)
             virtual void FindScope(Double_t* scale, Double_t* center, Int_t& irep)
             virtual void FindThetaSectors(Int_t iopt, Double_t phi, Int_t& kth, Double_t* ath, Int_t& ith1, Int_t& ith2)
             virtual void Front()
             virtual void FrontView(TVirtualPad* pad = 0)
                   Bool_t GetAutoRange()
            virtual Int_t GetDistancetoAxis(Int_t axis, Int_t px, Int_t py, Double_t& ratio)
                 Double_t GetDproj() const
                 Double_t GetDview() const
                 Double_t GetExtent() const
                 Double_t GetLatitude()
                 Double_t GetLongitude()
          TSeqCollection* GetOutline()
                 Double_t GetPsi()
             virtual void GetRange(Float_t* min, Float_t* max)
             virtual void GetRange(Double_t* min, Double_t* max)
                Double_t* GetRmax()
                Double_t* GetRmin()
                    Int_t GetSystem()
                Double_t* GetTback()
                Double_t* GetTN()
                Double_t* GetTnorm()
                     void GetWindow(Double_t& u0, Double_t& v0, Double_t& du, Double_t& dv) const
                 Double_t GetWindowHeight() const
                 Double_t GetWindowWidth() const
          virtual TClass* IsA() const
                   Bool_t IsClippedNDC(Double_t* p) const
                   Bool_t IsPerspective() const
                   Bool_t IsViewChanged() const
                     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 MoveViewCommand(Char_t chCode, Int_t count = 1)
                     void MoveWindow(Char_t option)
             virtual void NDCtoWC(const Float_t* pn, Float_t* pw)
             virtual void NDCtoWC(const Double_t* pn, Double_t* pw)
             virtual void NormalWCtoNDC(const Float_t* pw, Float_t* pn)
             virtual void NormalWCtoNDC(const Double_t* pw, Double_t* pn)
                   TView& operator=(const TView&)
             virtual void PadRange(Int_t rback)
                     void ResizePad()
             virtual void RotateView(Double_t phi, Double_t theta, TVirtualPad* pad = 0)
             virtual void SetAutoRange(Bool_t autorange = kTRUE)
             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)
                     void SetDefaultWindow()
                     void SetDproj(Double_t dproj)
                     void SetDview(Double_t dview)
                     void SetLatitude(Double_t latitude)
                     void SetLongitude(Double_t longitude)
             virtual void SetOutlineToCube()
             virtual void SetParallel()
             virtual void SetPerspective()
                     void SetPsi(Double_t psi)
             virtual void SetRange(const Double_t* min, const Double_t* max)
             virtual void SetRange(Double_t x0, Double_t y0, Double_t z0, Double_t x1, Double_t y1, Double_t z1, Int_t flag = 0)
             virtual void SetSystem(Int_t system)
             virtual void SetView(Double_t longitude, Double_t latitude, Double_t psi, Int_t& irep)
                     void SetViewChanged(Bool_t flag = kTRUE)
                     void SetWindow(Double_t u0, Double_t v0, Double_t du, Double_t dv)
             virtual void ShowAxis()
             virtual void ShowMembers(TMemberInspector& insp, char* parent)
             virtual void Side()
             virtual void SideView(TVirtualPad* pad = 0)
             virtual void Streamer(TBuffer& b)
                     void StreamerNVirtual(TBuffer& b)
             virtual void ToggleRulers(TVirtualPad* pad = 0)
             virtual void ToggleZoom(TVirtualPad* pad = 0)
             virtual void Top()
             virtual void TopView(TVirtualPad* pad = 0)
             virtual void UnZoom()
             virtual void UnzoomView(TVirtualPad* pad = 0, Double_t unZoomFactor = 1.25)
             virtual void WCtoNDC(const Float_t* pw, Float_t* pn)
             virtual void WCtoNDC(const Double_t* pw, Double_t* pn)
             virtual void Zoom()
             virtual void ZoomIn()
             virtual void ZoomMove()
             virtual void ZoomOut()
             virtual void ZoomView(TVirtualPad* pad = 0, Double_t zoomFactor = 1.25)

### Data Members

        protected:

                 Double_t fLatitude        View angle latitude
                 Double_t fLongitude       View angle longitude
                 Double_t fPsi             View angle psi
                 Double_t fDview           Distance from COP to COV
                 Double_t fDproj           Distance from COP to projection plane
                 Double_t fUpix            pad X size in pixels
                 Double_t fVpix            pad Y size in pixels
                 Double_t fTN[16]
                 Double_t fTB[16]
                 Double_t fRmax[3]         Upper limits of object
                 Double_t fRmin[3]         Lower limits of object
                 Double_t fUVcoord[4]      Viewing window limits
                 Double_t fTnorm[16]       Transformation matrix
                 Double_t fTback[16]       Back transformation matrix
                 Double_t fX1[3]           First coordinate of X axis
                 Double_t fX2[3]           Second coordinate of X axis
                 Double_t fY1[3]           First coordinate of Y axis
                 Double_t fY2[3]           Second coordinate of Y axis
                 Double_t fZ1[3]           First coordinate of Z axis
                 Double_t fZ2[3]           Second coordinate of Z axis
                    Int_t fSystem          Coordinate system
          TSeqCollection* fOutline         Collection of outline's objects
                   Bool_t fDefaultOutline  Set to TRUE if outline is default cube
                   Bool_t fAutoRange       Set to TRUE if range computed automatically
                   Bool_t fChanged         ! Set to TRUE after ExecuteRotateView

        public:

          static const enum TView:: kPerspective

## Class Description

    *-*-*-*-*-*-*-*-*-*-*-*-*The V I E W class*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                      =================                              *
    *-*                                                                     *
    *-*   This package was originally written by Evgueni Tcherniaev         *
    *-*   from IHEP/Protvino.                                               *
    *-*                                                                     *
    *-*   The original Fortran implementation was adapted to HIGZ/PAW       *
    *-*   by Olivier Couet and  Evgueni Tcherniaev.                         *
    *-*                                                                     *
    *-*   This View class is a subset of the original system                *
    *-*   It has been converted to a C++ class  by Rene Brun                *
    *-*                                                                     *
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

TView()

    *-*-*-*-*-*-*-*-*-*-*-*-*-*View default constructor*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                        ========================

~TView()

    *-*-*-*-*-*-*-*-*-*-*-*-*-*View default destructor*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                        =======================

TView(Int_t system)

    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*View constructor*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                            ================
    *-*    Creates a 3-D view in the current pad
    *-*    By default pad range in 3-D view is (-1,-1,1,1), so ...
    *-*
    *-*    Before drawing a 3-D object in a pad, a 3-D view must be created.
    *-*    Note that a view is automatically created when drawing legos or surfaces.
    *-*
    *-*   The coordinate system is selected via system:
    *-*    system = 1  Cartesian
    *-*    system = 2  Polar
    *-*    system = 3  Cylindrical
    *-*    system = 4  Spherical
    *-*    system = 5  PseudoRapidity/Phi
    *-*    system = 11 Perspective view
    *-*
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

TView(const Float_t *rmin, const Float_t *rmax, Int_t system)

    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*View constructor*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                            ================
    *-*    Creates a 3-D view in the current pad
    *-*  rmin[3], rmax[3] are the limits of the object depending on
    *-*  the selected coordinate system
    *-*
    *-*   Before drawing a 3-D object in a pad, a 3-D view must be created.
    *-*   Note that a view is automatically created when drawing legos or surfaces.
    *-*
    *-*   The coordinate system is selected via system:
    *-*    system = 1  Cartesian
    *-*    system = 2  Polar
    *-*    system = 3  Cylindrical
    *-*    system = 4  Spherical
    *-*    system = 5  PseudoRapidity/Phi
    *-*
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

TView(const Double_t *rmin, const Double_t *rmax, Int_t system)

    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*View constructor*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                            ================
    *-*    Creates a 3-D view in the current pad
    *-*  rmin[3], rmax[3] are the limits of the object depending on
    *-*  the selected coordinate system
    *-*
    *-*   Before drawing a 3-D object in a pad, a 3-D view must be created.
    *-*   Note that a view is automatically created when drawing legos or surfaces.
    *-*
    *-*   The coordinate system is selected via system:
    *-*    system = 1  Cartesian
    *-*    system = 2  Polar
    *-*    system = 3  Cylindrical
    *-*    system = 4  Spherical
    *-*    system = 5  PseudoRapidity/Phi
    *-*
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

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)

    *-*-*-*-*-*-*-*-*-*-*-*-*Define axis  vertices*-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                      =====================                          *
    *-*                                                                     *
    *-*    Input  ANG     - angle between X and Y axis                      *
    *-*                                                                     *
    *-*    Output: AV(3,8) - axis vertixes                                  *
    *-*            IX1     - 1st point of X-axis                            *
    *-*            IX2     - 2nd point of X-axis                            *
    *-*            IY1     - 1st point of Y-axis                            *
    *-*            IY2     - 2nd point of Y-axis                            *
    *-*            IZ1     - 1st point of Z-axis                            *
    *-*            IZ2     - 2nd point of Z-axis                            *
    *-*                                                                     *
    *-*                 8                        6                          *
    *-*                / \                      /|\                         *
    *-*             5 /   \ 7                5 / | \ 7                      *
    *-*              |\   /|                  |  |  |                       *
    *-*  THETA < 90  | \6/ |     THETA > 90   | /2\ |                       *
    *-*  (Top view)  |  |  |   (Bottom view)  |/   \|                       *
    *-*             1 \ | /3                 1 \   /3                       *
    *-*                \|/                      \ /                         *
    *-*                 2                        4                          *
    *-*                                                                     *
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void DefinePerspectiveView()

    *-*-*-*-*-*-*-*-*-*-*-*-*-*Define perspective view  *-*-*-*-*-*-*-*-*-*-*
    *-*              ================================================       *
    *-*                                                                     *
    *-*              Compute transformation matrix from world coordinates   *
    *-*              to normalised coordinates (-1 to +1)                   *
       Input :
          theta, phi - spherical angles giving the direction of projection
          psi - screen rotation angle
          cov[3] - center of view
          dview - distance from COV to COP (center of projection)
          umin, umax, vmin, vmax - view window in projection plane
          dproj - distance from COP to projection plane
          bcut, fcut - backward/forward range w.r.t projection plane (fcut<=0)
       Output :
          nper[16] - normalizing transformation
     compute tr+rot to get COV in origin, view vector parallel to -Z axis, up vector
     parallel to Y.
                          ^Yv   UP ^  proj. plane
                         |        |   /|
                        |        |  /  |
                       |   dproj  /  x--- center of window (COW)
                  COV |----------|--x--|------------> Zv
    		             /           | VRP'z
    	              /   --->      |
                 /     VPN       |
                Xv

       1 - translate COP to origin of MARS : Tper = T(-copx, -copy, -copz)
       2 - rotate VPN : R = Rz(-psi)*Rx(-theta)*Rz(-phi) (inverse Euler)
       3 - left-handed screen reference to right-handed one of MARS : Trl

       T12 = Tper*R*Trl

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)

    *-*-*-*-*-*-*-*-*Define view direction (in spherical coordinates)-*-*-*-*
    *-*              ================================================       *
    *-*                                                                     *
    *-*              Compute transformation matrix from world coordinates   *
    *-*              to normalised coordinates (-1 to +1)                   *
    *-*                                                                     *
    *-*    Input: S(3)    - scale factors                                   *
    *-*           C(3)    - centre of scope                                 *
    *-*           COSPHI  - longitude COS                                   *
    *-*           SINPHI  - longitude SIN                                   *
    *-*           COSTHE  - latitude COS (angle between +Z and view direc.) *
    *-*           SINTHE  - latitude SIN                                    *
    *-*           COSPSI  - screen plane rotation angle COS                 *
    *-*           SINPSI  - screen plane rotation angle SIN                 *
    *-*                                                                     *
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void ExecuteEvent(Int_t event, Int_t px, Int_t py)

    *-*-*-*-*-*-*-*-*Execute action corresponding to one event*-*-*-*-*-*-*-*-*

void ExecuteRotateView(Int_t event, Int_t px, Int_t py)

    *-*-*-*-*-*-*-*-*Execute action corresponding to one event*-*-*-*-*-*-*-*-*-*
    *-*              =========================================                    *
    *-*  This member function is called when a object is clicked with the locator *
    *-*                                                                           *
    *-*  If Left button clicked in the object area, while the button is kept down *
    *-*  the cube representing the surrounding frame for the corresponding        *
    *-*  new latitude and longitude position is drawn.                                         *
    *-*                                                                           *
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void FindNormal(Double_t x, Double_t y, Double_t z, Double_t &zn)

    *-*-*-*-*-*-*Find Z component of NORMAL in normalized coordinates-*-*-*-*
    *-*          ====================================================       *
    *-*                                                                     *
    *-*    Input: X - X-component of NORMAL                                 *
    *-*           Y - Y-component of NORMAL                                 *
    *-*           Z - Z-component of NORMAL                                 *
    *-*                                                                     *
    *-*    Output: ZN - Z-component of NORMAL in normalized coordinates     *
    *-*                                                                     *
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void FindPhiSectors(Int_t iopt, Int_t &kphi, Double_t *aphi, Int_t &iphi1, Int_t &iphi2)

    *-*-*-*-*-*-*-*-*-*-*-*-*Find critical PHI sectors*-*-*-*-*-*-*-*-*-*-*-*
    *-*                      =========================                      *
    *-*                                                                     *
    *-*    Input: IOPT    - options: 1 - from BACK to FRONT 'BF'            *
    *-*                              2 - from FRONT to BACK 'FB'            *
    *-*           KPHI    - number of phi sectors                           *
    *-*           APHI(*) - PHI separators (modified internally)            *
    *-*                                                                     *
    *-*    Output: IPHI1  - initial sector                                  *
    *-*            IPHI2  - final sector                                    *
    *-*                                                                     *
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void FindThetaSectors(Int_t iopt, Double_t phi, Int_t &kth, Double_t *ath, Int_t &ith1, Int_t &ith2)

    *-*-*-*-*-*-*-Find critical THETA sectors for given PHI sector*-*-*-*-*-*
    *-*           ================================================          *
    *-*                                                                     *
    *-*    Input: IOPT        - options: 1 - from BACK to FRONT 'BF'        *
    *-*                                  2 - from FRONT to BACK 'FB'        *
    *-*           PHI         - PHI sector                                  *
    *-*           KTH         - number of THETA sectors                     *
    *-*           ATH(*)      - THETA separators (modified internally)      *
    *-*                                                                     *
    *-*    Output: ITH1  - initial sector                                   *
    *-*            ITH2  - final sector                                     *
    *-*                                                                     *
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void FindScope(Double_t *scale, Double_t *center, Int_t &irep)

    *-*-*-*-*-*-*-*Find centre of a MIN-MAX scope and scale factors-*-*-*-*-*
    *-*            ================================================         *
    *-*                                                                     *
    *-*    Output: SCALE(3)  - scale factors                                *
    *-*            CENTER(3) - centre                                       *
    *-*            IREP      - reply (-1 if error in min-max)               *
    *-*                                                                     *
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Int_t GetDistancetoAxis(Int_t axis, Int_t px, Int_t py, Double_t &ratio)

    *-*-*-*-*-*-*-*-*-*-*-*-*Return distance to axis from point px,py*-*-*-*
    *-*                      ========================================
    *-*
    *-*
    *-*  Algorithm:
    *-*
    *-*    A(x1,y1)         P                             B(x2,y2)
    *-*    ------------------------------------------------
    *-*                     I
    *-*                     I
    *-*                     I
    *-*                     I
    *-*                    M(x,y)
    *-*
    *-*  Let us call  a = distance AM     A=a**2
    *-*               b = distance BM     B=b**2
    *-*               c = distance AB     C=c**2
    *-*               d = distance PM     D=d**2
    *-*               u = distance AP     U=u**2
    *-*               v = distance BP     V=v**2     c = u + v
    *-*
    *-*  D = A - U
    *-*  D = B - V  = B -(c-u)**2
    *-*     ==> u = (A -B +C)/2c
    *-*
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Double_t GetExtent() const

    *-*-*-*-*-*-*-*-*-*-*-*-*-*Get maximum view extent-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                        =======================
    *-*

void GetRange(Float_t *min, Float_t *max)

    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Get Range function-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                            ==================
    *-*

void GetRange(Double_t *min, Double_t *max)

    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Get Range function-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                            ==================
    *-*

void GetWindow(Double_t &u0, Double_t &v0, Double_t &du, Double_t &dv) const

     Get current window extent.

Bool_t IsClippedNDC(Double_t *p) const

    *-*-*-*-*-*-*Check if point is clipped in perspective view-*-*-*-*-*-*-*-*
    *-*          =============================================
    *-*

void NDCtoWC(const Float_t* pn, Float_t* pw)

    *-*-*-*-*-*-*Transfer point from normalized to world coordinates*-*-*-*-*
    *-*          ===================================================        *
    *-*                                                                     *
    *-*    Input: PN(3) - point in world coordinate system                  *
    *-*           PW(3) - point in normalized coordinate system             *
    *-*                                                                     *
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void NDCtoWC(const Double_t* pn, Double_t* pw)

    *-*-*-*-*-*-*Transfer point from normalized to world coordinates*-*-*-*-*
    *-*          ===================================================        *
    *-*                                                                     *
    *-*    Input: PN(3) - point in world coordinate system                  *
    *-*           PW(3) - point in normalized coordinate system             *
    *-*                                                                     *
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void NormalWCtoNDC(const Float_t *pw, Float_t *pn)

    *-*-*Transfer vector of NORMAL from word to normalized coodinates-*-*-*-*
    *-*  ============================================================
    *-*
    *-*    Input: PW(3) - vector of NORMAL in word coordinate system
    *-*           PN(3) - vector of NORMAL in normalized coordinate system
    *-*
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void NormalWCtoNDC(const Double_t *pw, Double_t *pn)

    *-*-*Transfer vector of NORMAL from word to normalized coodinates-*-*-*-*
    *-*  ============================================================
    *-*
    *-*    Input: PW(3) - vector of NORMAL in word coordinate system
    *-*           PN(3) - vector of NORMAL in normalized coordinate system
    *-*
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void PadRange(Int_t rback)

    *-*-*-*-*Set the correct window size for lego and surface plots*-*-*-*-*
    *-*      ======================================================
    *-*
    *-*  Set the correct window size for lego and surface plots.
    *-*  And draw the background if necessary.
    *-*
    *-*    Input parameters:
    *-*
    *-*   RBACK : Background colour
    *-*
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

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)

    *-*-*-*-*-*-*-*-*-*-*-*-*Store axis coordinates in the NDC system*-*-*-*
    *-*                      ========================================
    *-*

void SetDefaultWindow()

     Set default viewing window

void SetOutlineToCube()

    *-*-*-*-*-*-*This is a function which creates default outline*-*-*-*-*-*
    *-*          ================================================          *
    *-*                                                                    *
    *-*      x = fRmin[0]        X = fRmax[0]                              *
    *-*      y = fRmin[1]        Y = fRmax[1]                              *
    *-*      z = fRmin[2]        Z = fRmax[2]                              *
    *-*                                                                    *
    *-*                                                                    *
    *-*            (x,Y,Z) +---------+ (X,Y,Z)                             *
    *-*                   /         /|                                     *
    *-*                  /         / |                                     *
    *-*                 /         /  |                                     *
    *-*        (x,y,Z) +---------+   |                                     *
    *-*                |         |   + (X,Y,z)                             *
    *-*                |         |  /                                      *
    *-*                |         | /                                       *
    *-*                |         |/                                        *
    *-*                +---------+                                         *
    *-*             (x,y,z)   (X,y,z)                                      *
    *-*                                                                    *
    *-*                                                                    *
    *-*                                                                    *
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**

void SetParallel()

void SetPerspective()

void SetRange(const Double_t *min, const Double_t *max)

    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Set Range function-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                            ==================
    *-*

void SetRange(Double_t x0, Double_t y0, Double_t z0, Double_t x1, Double_t y1, Double_t z1, Int_t flag)

    *-*-*-*-*-*-*-*-*-*-*-*Set 3-D View range*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                    ==================
    *-*
    *-* Input:  x0, y0, z0 are minimum coordinates
    *-*         x1, y1, z1 are maximum coordinates
    *-*
    *-*         flag values are: 0 (set always) <- default
    *-*                          1 (shrink view)
    *-*                          2 (expand view)
    *-*

void SetWindow(Double_t u0, Double_t v0, Double_t du, Double_t dv)

     Set viewing window.

void SetView(Double_t longitude, Double_t latitude, Double_t psi, Int_t &irep)

void ResizePad()

     Recompute window for perspective view

void ResetView(Double_t longitude, Double_t latitude, Double_t psi, Int_t &irep)

    *-*-*-*-*-*-*-*-*Set view direction (in spherical coordinates)*-*-*-*-*-*
    *-*              =============================================          *
    *-*                                                                     *
    *-*    Input  PHI     - longitude                                       *
    *-*           THETA   - latitude (angle between +Z and view direction)  *
    *-*           PSI     - rotation in screen plane                        *
    *-*                                                                     *
    *-*    Output: IREP   - reply (-1 if error in min-max)                  *
    *-*                                                                     *
    *-*    Errors: error in min-max scope                                   *
    *-*                                                                     *
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void WCtoNDC(const Float_t *pw, Float_t *pn)

    *-*-*-*-*-*-*Transfer point from world to normalized coordinates*-*-*-*-*
    *-*          ===================================================        *
    *-*                                                                     *
    *-*    Input: PW(3) - point in world coordinate system                  *
    *-*           PN(3) - point in normalized coordinate system             *
    *-*                                                                     *
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void WCtoNDC(const Double_t *pw, Double_t *pn)

    *-*-*-*-*-*-*Transfer point from world to normalized coordinates*-*-*-*-*
    *-*          ===================================================        *
    *-*                                                                     *
    *-*    Input: PW(3) - point in world coordinate system                  *
    *-*           PN(3) - point in normalized coordinate system             *
    *-*                                                                     *
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void AdjustPad(TVirtualPad *pad)

     Force the current pad to be updated

void RotateView(Double_t phi, Double_t theta, TVirtualPad *pad)

     API to rotate view and adjust the pad provided it the current one.

void SideView(TVirtualPad *pad)

void FrontView(TVirtualPad *pad)

void TopView(TVirtualPad *pad)

void ToggleRulers(TVirtualPad *pad)

     Turn on /off 3D axis

void ToggleZoom(TVirtualPad *pad)

     Turn on /off the interactive option to
      Zoom / Move / Change attributes of 3D axis correspond this view

void AdjustScales(TVirtualPad *pad)

     Adjust all sides of view in respect of the biggest one

void Centered3DImages(TVirtualPad *pad)

     Move view into the center of the scene

void UnzoomView(TVirtualPad *pad,Double_t unZoomFactor )

     unZOOM this view

void ZoomView(TVirtualPad *pad,Double_t zoomFactor)

     ZOOM this view

void MoveFocus(Double_t *cov, Double_t dx, Double_t dy, Double_t dz, Int_t nsteps, Double_t dlong, Double_t dlat, Double_t dpsi)

     Move focus to a different box position and extent in nsteps. Perform rotation
     with dlat,dlong,dpsi at each step.

void MoveViewCommand(Char_t option, Int_t count)

    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*          'a' //*-*  increase  scale factor (clip cube borders)
    *-*          's' //*-*  decrease  scale factor (clip cube borders)
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void MoveWindow(Char_t option)

     Move view window :
     l,L - left
     h,H - right
     u,U - down
     i,I - up

void ZoomIn()

void ZoomOut()

void Streamer(TBuffer &R__b)

     Stream an object of class TView.

### Inline Functions

                   Double_t GetDview() const
                   Double_t GetDproj() const
                     Bool_t GetAutoRange()
                   Double_t GetLatitude()
                   Double_t GetLongitude()
                   Double_t GetPsi()
                  Double_t* GetRmax()
                  Double_t* GetRmin()
            TSeqCollection* GetOutline()
                  Double_t* GetTback()
                  Double_t* GetTN()
                  Double_t* GetTnorm()
                      Int_t GetSystem()
                   Double_t GetWindowWidth() const
                   Double_t GetWindowHeight() const
                     Bool_t IsPerspective() const
                     Bool_t IsViewChanged() const
                       void SetAutoRange(Bool_t autorange = kTRUE)
                       void SetDview(Double_t dview)
                       void SetDproj(Double_t dproj)
                       void SetLatitude(Double_t latitude)
                       void SetLongitude(Double_t longitude)
                       void SetPsi(Double_t psi)
                       void SetSystem(Int_t system)
                       void SetViewChanged(Bool_t flag = kTRUE)
                       void Centered()
                       void Front()
                       void Side()
                       void Top()
                       void ShowAxis()
                       void ZoomMove()
                       void Zoom()
                       void UnZoom()
                    TClass* Class()
                    TClass* IsA() const
                       void ShowMembers(TMemberInspector& insp, char* parent)
                       void StreamerNVirtual(TBuffer& b)
                      TView TView(const TView&)
                     TView& operator=(const TView&)

Author: Rene Brun, Nenad Buncic, Evgueni Tcherniaev, Olivier Couet 18/08/95
Last update: root/base:$Name: $:$Id: TView.cxx,v 1.27 2005/04/25 21:12:08 rdm Exp $
Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *