]>
Commit | Line | Data |
---|---|---|
ef42d733 | 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 | Revision 1.8 2000/07/12 08:56:32 fca | |
19 | Coding convention correction and warning removal | |
20 | ||
21 | Revision 1.7 2000/06/28 21:27:45 morsch | |
22 | Most coding rule violations corrected. | |
23 | Still to do: Split the file (on file per class) ? Avoid the global variables. | |
24 | Copy constructors and assignment operators (dummy ?) | |
25 | ||
26 | Revision 1.6 2000/04/14 11:07:46 morsch | |
27 | Correct volume to medium assignment in case several media are asigned to the | |
28 | same material. | |
29 | ||
30 | Revision 1.5 2000/03/20 15:11:03 fca | |
31 | Mods to make the code compile on HP | |
32 | ||
33 | Revision 1.4 2000/01/18 16:12:08 morsch | |
34 | Bug in calculation of number of volume divisions and number of positionings corrected | |
35 | Browser for Material and Media properties added | |
36 | ||
37 | Revision 1.3 1999/11/14 14:31:14 fca | |
38 | Correct small error and remove compilation warnings on HP | |
39 | ||
40 | Revision 1.2 1999/11/10 16:53:35 fca | |
41 | The new geometry viewer from A.Morsch | |
42 | ||
43 | */ | |
44 | ||
45 | /* | |
46 | * Version: 0 | |
47 | * Written by Andreas Morsch | |
48 | * | |
49 | * | |
50 | * | |
51 | * For questions critics and suggestions to this part of the code | |
52 | * contact andreas.morsch@cern.ch | |
53 | * | |
54 | **************************************************************************/ | |
55 | ||
56 | #include "AliDrawVolume.h" | |
57 | ||
58 | ClassImp(AliDrawVolume) | |
59 | ||
60 | AliDrawVolume::AliDrawVolume(char* name) | |
61 | { | |
62 | // Constructor | |
63 | fName = name; | |
64 | fTheta = 30; | |
65 | fPhi = 30; | |
66 | fPsi = 0; | |
67 | fU = 10; | |
68 | fV = 10; | |
69 | fUscale = 0.01; | |
70 | fVscale = 0.01; | |
71 | fHide=0; | |
72 | fShadow=0; | |
73 | fFill=1; | |
74 | fSeen=1; | |
75 | fClip=0; | |
76 | fClipXmin=0.; | |
77 | fClipXmax=2000.; | |
78 | fClipYmin=0.; | |
79 | fClipYmax=2000.; | |
80 | fClipZmin=0.; | |
81 | fClipZmax=2000.; | |
82 | } | |
83 | ||
84 | char* AliDrawVolume::Name() | |
85 | { | |
86 | // | |
87 | // Return volume name | |
88 | return fName; | |
89 | } | |
90 | ||
91 | ||
92 | void AliDrawVolume::Streamer(TBuffer &) | |
93 | { | |
94 | // Dummy Streamer | |
95 | ; | |
96 | } | |
97 | ||
98 | ||
99 | ||
100 | void AliDrawVolume::Draw(Option_t *) | |
101 | { | |
102 | // Wraps the geant Gdraw | |
103 | gMC->Gsatt(fName,"seen", fSeen); | |
104 | ||
105 | if (fHide) { | |
106 | gMC->Gdopt("hide", "on"); | |
107 | } else { | |
108 | gMC->Gdopt("hide", "off"); | |
109 | } | |
110 | ||
111 | if (fShadow) { | |
112 | gMC->Gdopt("shad", "on"); | |
113 | gMC->Gsatt("*", "fill", fFill); | |
114 | } else { | |
115 | gMC->Gdopt("shad", "off"); | |
116 | } | |
117 | ||
118 | gMC->SetClipBox("."); | |
119 | if (fClip) { | |
120 | gMC->SetClipBox("*", fClipXmin, fClipXmax, | |
121 | fClipYmin, fClipYmax, fClipZmin, fClipZmax); | |
122 | } else { | |
123 | gMC->SetClipBox("."); | |
124 | } | |
125 | ||
126 | ||
127 | gMC->Gdraw(fName, fTheta, fPhi, fPsi, fU, fV, fUscale, fVscale); | |
128 | THIGZ *higz = (THIGZ*)gROOT->GetListOfCanvases()->FindObject("higz"); | |
129 | if (higz) higz->Update(); | |
130 | } | |
131 | ||
132 | void AliDrawVolume::DrawSpec() | |
133 | { | |
134 | // Wraps the Geant DrawSpec | |
135 | gMC->Gsatt(fName,"seen", fSeen); | |
136 | ||
137 | if (fHide) { | |
138 | gMC->Gdopt("hide", "on"); | |
139 | } else { | |
140 | gMC->Gdopt("hide", "off"); | |
141 | } | |
142 | ||
143 | if (fShadow) { | |
144 | gMC->Gdopt("shad", "on"); | |
145 | gMC->Gsatt("*", "fill", fFill); | |
146 | } else { | |
147 | gMC->Gdopt("shad", "off"); | |
148 | } | |
149 | ||
150 | gMC->SetClipBox("."); | |
151 | if (fClip) { | |
152 | gMC->SetClipBox("*", fClipXmin, fClipXmax, fClipYmin, fClipYmax, fClipZmin, fClipZmax); | |
153 | } else { | |
154 | gMC->SetClipBox("."); | |
155 | } | |
156 | ||
157 | ||
158 | ((TGeant3*) gMC)->DrawOneSpec(fName); | |
159 | THIGZ *higz = (THIGZ*)gROOT->GetListOfCanvases()->FindObject("higz"); | |
160 | if (higz) higz->Update(); | |
161 | } | |
162 | ||
163 | void AliDrawVolume::SetParam(Int_t ip, Float_t param) | |
164 | { | |
165 | // Set drawing parameters | |
166 | switch (ip) { | |
167 | case kTheta: | |
168 | fTheta=param; | |
169 | break; | |
170 | case kPhi: | |
171 | fPhi=param; | |
172 | break; | |
173 | case kPsi: | |
174 | fPsi=param; | |
175 | break; | |
176 | case kU: | |
177 | fU=param; | |
178 | break; | |
179 | case kV: | |
180 | fV=param; | |
181 | break; | |
182 | case kUscale: | |
183 | fUscale=param; | |
184 | break; | |
185 | case kVscale: | |
186 | fVscale=param; | |
187 | break; | |
188 | case kHide: | |
189 | fHide=Int_t(param); | |
190 | break; | |
191 | case kShadow: | |
192 | fShadow=Int_t(param); | |
193 | break; | |
194 | case kFill: | |
195 | fFill=Int_t(param); | |
196 | break; | |
197 | case kSeen: | |
198 | fSeen=Int_t(param); | |
199 | break; | |
200 | case kClip: | |
201 | fClip=Int_t(param); | |
202 | break; | |
203 | case kClipXmin: | |
204 | fClipXmin=param; | |
205 | break; | |
206 | case kClipXmax: | |
207 | fClipXmax=param; | |
208 | break; | |
209 | case kClipYmin: | |
210 | fClipYmin=param; | |
211 | break; | |
212 | case kClipYmax: | |
213 | fClipYmax=param; | |
214 | break; | |
215 | case kClipZmin: | |
216 | fClipZmin=param; | |
217 | break; | |
218 | case kClipZmax: | |
219 | fClipZmax=param; | |
220 | break; | |
221 | } | |
222 | } | |
223 | ||
224 | Float_t AliDrawVolume::GetParam(Int_t ip) | |
225 | { | |
226 | // Get drawing parameters | |
227 | switch (ip) { | |
228 | case kTheta: | |
229 | return fTheta; | |
230 | case kPhi: | |
231 | return fPhi; | |
232 | case kPsi: | |
233 | return fPsi; | |
234 | case kU: | |
235 | return fU; | |
236 | case kV: | |
237 | return fV; | |
238 | case kUscale: | |
239 | return fUscale; | |
240 | case kVscale: | |
241 | return fVscale; | |
242 | case kHide: | |
243 | return Float_t(fHide); | |
244 | case kShadow: | |
245 | return Float_t(fShadow); | |
246 | case kFill: | |
247 | return Float_t(fFill); | |
248 | case kSeen: | |
249 | return Float_t(fSeen); | |
250 | case kClip: | |
251 | return Float_t(fClip); | |
252 | case kClipXmin: | |
253 | return fClipXmin; | |
254 | case kClipXmax: | |
255 | return fClipXmax; | |
256 | case kClipYmin: | |
257 | return fClipYmin; | |
258 | case kClipYmax: | |
259 | return fClipYmax; | |
260 | case kClipZmin: | |
261 | return fClipZmin; | |
262 | case kClipZmax: | |
263 | return fClipZmax; | |
264 | default: | |
265 | return 0.; | |
266 | } | |
267 | return 0.; | |
268 | } | |
269 | ||
270 |