Introduction of the Copyright and cvs Log
[u/mrichter/AliRoot.git] / GEODB / AliGCone.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /*
17 $Log$
18 */
19
20 // -*- C++ -*-
21 // 
22 // 1998/10/19
23 // ---------------------------------------------------------------------------
24 //
25 // AliGCone Class
26 //
27 // This file is part of the ALICE Geometry Database .
28 //
29 // By:  Joana E. Santo & David Collados
30 //
31 // ---------------------------------------------------------------------------
32
33 #include <TView.h>
34 #include <TVirtualPad.h>
35 #include <iostream.h>
36 #include <TGLKernelABC.h>
37 #include <TCanvas.h>
38 #include "AliGCone.h"
39 #include "TROOT.h"
40
41 ClassImp(AliGCone)
42
43 AliGCone::AliGCone() : AliGTube()
44 {
45     /* Default Constructor */
46     fRmax2 = 0.;      // outside radius at the high z limit
47     fRmin2 = 0.;      // inside radius at the high z limit
48
49     //SetLineColor(5);  // Yellow
50 }
51
52 //-------------------------------------------------------------------------
53
54 AliGCone::AliGCone(Text_t *name, Text_t *title, Float_t dz, Float_t rmin1, Float_t rmax1, Float_t rmin2, Float_t rmax2) : AliGTube(name, title, rmin1, rmax1, dz)
55 {
56     /* Constructor */
57     fRmax2 = rmax2;
58     fRmin2 = rmin2;
59
60     //SetLineColor(5); // Yellow
61 }
62
63 //-------------------------------------------------------------------------
64
65 AliGCone::AliGCone(AliGCone *cone) 
66 {
67     /* Copy Constructor */
68     fRmax2 = cone->fRmax2;
69     fRmin2 = cone->fRmin2;
70     fColor = cone->fColor;
71     
72     //SetLineColor(5); // Yellow
73 }
74
75 //-------------------------------------------------------------------------
76
77 AliGCone::AliGCone(Text_t *name, Text_t *title, Float_t dz, Float_t rmax1, Float_t rmax2) : AliGTube(name, title, 0, rmax1, dz)
78 {
79     /* Simplified Constructor */
80     fRmin2 = 0;
81     fRmax2 = rmax2;
82
83     //SetLineColor(5); // Yellow
84 }
85
86 //-------------------------------------------------------------------------
87
88 AliGCone::~AliGCone() {
89     /* Destructor */
90 }
91
92 //-------------------------------------------------------------------------
93
94 void AliGCone::DrawShape(Option_t *option)
95 {
96     Draw(option);
97     gPad->Update();
98 }
99
100 //-------------------------------------------------------------------------
101
102 void AliGCone::Draw(Option_t *option)
103 {
104     cout << " Entra en " << this->GetName() << "::Draw " << endl;
105     TString opt = option;
106     opt.ToLower();
107
108     if( !gPad ) {
109       //TCanvas* Cone = new TCanvas("AliGCone","AliGCone",0,0,400,300);
110         gPad = new TCanvas("AliGCone","AliGCone",0,0,400,300);
111         gPad->Range(0,0,1,1);
112         gPad->SetFillColor(32); // Light Green
113         gPad->SetBorderSize(3);
114         gPad->SetBorderMode(0); // -1 (down) 0 (no) 1 (up)
115     }
116     else {
117         if( !opt.Contains("same") ) {
118             gPad->Clear();
119             gPad->SetName("AliGCone");
120             gPad->SetTitle("AliGCone");
121         }
122         else {
123             gPad->SetName("AliShapes");
124             gPad->SetTitle("AliShapes"); 
125         }
126     }
127
128     AppendPad(option);
129     TView *view = gPad->GetView();
130
131     if (!view)
132         view = new TView(1);
133
134     view->SetAutoRange(kTRUE);
135     Paint(option);
136     view->SetAutoRange(kFALSE);
137     cout << " Sale de " << this->GetName() << "::Draw " << endl;
138 }
139
140 //-------------------------------------------------------------------------
141
142 void AliGCone::SetPoints(Float_t *buff)
143 {
144 //*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Create CONE points*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
145 //*-*                            ==================
146
147     //cout << " Entra en " << this->GetName() << "::Paint " << endl;
148     SetLineColor( GetCol() );
149
150     Float_t rmin1, rmax1, dz;
151     Int_t j, n;
152
153     n = GetNumberOfDivisions();
154
155     rmin1 = AliGTube::fRmin;
156     rmax1 = AliGTube::fRmax;
157     dz    = AliGTube::fDz;
158
159     Int_t indx = 0;
160
161 //*-* We've to checxk whether the table does exist and create it
162 //*-* since fCoTab/fSiTab are not saved with any TShape::Streamer function
163     if (!fCoTab)   MakeTableOfCoSin();
164
165     if (buff) {
166         for (j = 0; j < n; j++) {
167             buff[indx++] = rmin1 * fCoTab[j];
168             buff[indx++] = rmin1 * fSiTab[j];
169             buff[indx++] = -dz;
170         }
171         for (j = 0; j < n; j++) {
172
173             buff[indx++] = rmax1 * fCoTab[j];
174             buff[indx++] = rmax1 * fSiTab[j];
175             buff[indx++] = -dz;
176         }
177
178         for (j = 0; j < n; j++) {
179             buff[indx++] = fRmin2 * fCoTab[j];
180             buff[indx++] = fRmin2 * fSiTab[j];
181             buff[indx++] = dz;
182         }
183
184         for (j = 0; j < n; j++) {
185             buff[indx++] = fRmax2 * fCoTab[j];
186             buff[indx++] = fRmax2 * fSiTab[j];
187             buff[indx++] = dz;
188         }
189     }
190
191     //cout << " Sale de " << this->GetName() << "::Paint " << endl;   
192 }
193
194 //-------------------------------------------------------------------------
195
196