    // @(#)root/g3d:$Name:  $:$Id: TTRAP.cxx,v 1.1.1.1 2000/05/16 17:00:43 rdm Exp $
    // Author: Nenad Buncic   19/09/95

    /*************************************************************************
     * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
     * All rights reserved.                                                  *
     *                                                                       *
     * For the licensing terms see $ROOTSYS/LICENSE.                         *
     * For the list of contributors see $ROOTSYS/README/CREDITS.             *
     *************************************************************************/

    #include "TTRAP.h"
    #include "TNode.h"

    ClassImp(TTRAP)

    //______________________________________________________________________________
    //

    // TRAP is a general trapezoid. The faces perpendicular to z are trapezia and
    // their centres are not necessarily on a line parallel to the z axis.
    // This shape has 14 parameters.
    //
    //     - name       name of the shape
    //     - title      shape's title
    //     - material  (see TMaterial)
    //     - dz         half-length along the z axis
    //     - theta      polar angle of the line joining the centre of the face
    //                  at -DZ to the centre of the one at +DZ
    //     - phi        azimuthal angle of the line joining the centre of the face
    //                  at -DZ to the centre of the one at +DZ
    //     - h1         half-length along y of the face at -DZ
    //     - bl1        half-length along x of the side at -H1 in y of the face
    //                  at -DZ in z
    //     - tl1        half-length along x of the side at +H1 in y of the face
    //                  at -DZ in z
    //     - alpha1     angle with respect to the y axis from the centre of the
    //                  side at -H1 in y to the centre of the side at +H1 in y
    //                  of the face at -DZ in z
    //     - h2         half-length along y of the face at +DZ
    //     - bl2        half-length along x of the side at -H2 in y of the
    //                  face at +DZ in z
    //     - tl2        half-length along x of the side at +H2 in y of the face
    //                  at +DZ in z
    //     - alpha2     angle with respect to the y axis from the centre of the side
    //                  at -H2 in y to the centre of the side at +H2 in y of the
    //                  face at +DZ in z

    //______________________________________________________________________________
     TTRAP::TTRAP()
    {
    //*-*-*-*-*-*-*-*-*-*-*-*-*TRAP shape default constructor*-*-*-*-*-*-*-*-*-*-*-*
    //*-*                      ==============================

    }

    //______________________________________________________________________________
     TTRAP::TTRAP(const char *name, const char *title, const char *material, Float_t dz, Float_t theta, Float_t phi,
                 Float_t h1, Float_t bl1, Float_t tl1, Float_t alpha1, Float_t h2,
                 Float_t bl2, Float_t tl2, Float_t alpha2) : TBRIK(name, title,material,theta,phi,dz)
    {
    //*-*-*-*-*-*-*-*-*-*-*-*-*TRAP shape normal constructor*-*-*-*-*-*-*-*-*-*-*-*-*
    //*-*                      =============================

        fH1     = h1;
        fBl1    = bl1;
        fTl1    = tl1;
        fAlpha1 = alpha1;
        fH2     = h2;
        fBl2    = bl2;
        fTl2    = tl2;
        fAlpha2 = alpha2;
    }

    //______________________________________________________________________________
     TTRAP::~TTRAP()
    {
    //*-*-*-*-*-*-*-*-*-*-*-*-*TRAP shape default destructor*-*-*-*-*-*-*-*-*-*-*-*-*
    //*-*                      =============================

    }

    //______________________________________________________________________________
     void TTRAP::SetPoints(Float_t *buff)
    {
    //*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Create TRAP points*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    //*-*                            ==================

        const Float_t PI = Float_t (TMath::Pi());
        Float_t alpha1 = fAlpha1    * PI/180.0;
        Float_t alpha2 = fAlpha2    * PI/180.0;
        Float_t theta  = TBRIK::fDx * PI/180.0;
        Float_t phi    = TBRIK::fDy * PI/180.0;
        Float_t tth    = TMath::Tan(theta);
        Float_t tx     = tth*TMath::Cos(phi);
        Float_t ty     = tth*TMath::Sin(phi);
        Float_t tth1   = TMath::Tan(alpha1);
        Float_t tth2   = TMath::Tan(alpha2);

        if (buff) {
           buff[ 0] = -fDz*tx+tth1*fH1+fTl1; buff[ 1] =  fH1-fDz*ty; buff[ 2] = -fDz;
           buff[ 3] = -fDz*tx+tth1*fH1-fTl1; buff[ 4] =  fH1-fDz*ty; buff[ 5] = -fDz;
           buff[ 6] = -fDz*tx-tth1*fH1-fBl1; buff[ 7] = -fH1-fDz*ty; buff[ 8] = -fDz;
           buff[ 9] = -fDz*tx-tth1*fH1+fBl1; buff[10] = -fH1-fDz*ty; buff[11] = -fDz;
           buff[12] =  fDz*tx+tth2*fH2+fTl2; buff[13] =  fH2+fDz*ty; buff[14] = fDz;
           buff[15] =  fDz*tx+tth2*fH2-fTl2; buff[16] =  fH2+fDz*ty; buff[17] = fDz;
           buff[18] =  fDz*tx-tth2*fH2-fBl2; buff[19] = -fH2+fDz*ty; buff[20] = fDz;
           buff[21] =  fDz*tx-tth2*fH2+fBl2; buff[22] = -fH2+fDz*ty; buff[23] = fDz;
        }
    }