9 Bool_t raytracing = kTRUE;
15 gSystem->Load(
"libGeom");
16 TControlBar* bar =
new TControlBar(
"vertical",
"TGeo composite shapes",20,20);
17 bar->AddButton(
"How to run ",
"help()",
"Instructions ");
18 bar->AddButton(
"Union ",
"s_union()",
"A + B ");
19 bar->AddButton(
"Intersection ",
"s_intersection()",
"A * B ");
20 bar->AddButton(
"Difference ",
"s_difference()",
"A - B ");
22 bar->AddButton(
"Complex composite",
"complex_1()",
"(A * B) + (C - D)");
31 gGeoManager->GetGeomPainter()->SetRaytracing(kFALSE);
39 gROOT->GetListOfCanvases()->Delete();
40 TCanvas *c =
new TCanvas(
"composite shape",
"Union boolean operation", 700, 1000);
44 gPad->SetPad(0,0,1,0.4);
46 gPad->SetPad(0,0.4,1,1);
48 if (gGeoManager)
delete gGeoManager;
50 new TGeoManager(
"xtru",
"poza12");
51 TGeoMaterial *mat =
new TGeoMaterial(
"Al", 26.98,13,2.7);
52 TGeoMedium *med =
new TGeoMedium(
"MED",1,mat);
53 TGeoVolume *top = gGeoManager->MakeBox(
"TOP",med,100,100,100);
54 gGeoManager->SetTopVolume(top);
57 TGeoPgon *pgon =
new TGeoPgon(
"pg",0.,360.,6,2);
58 pgon->DefineSection(0,0,0,20);
59 pgon->DefineSection(1, 30,0,20);
61 TGeoSphere *sph =
new TGeoSphere(
"sph", 40., 45., 5., 175., 0., 340.);
63 TGeoTranslation *tr =
new TGeoTranslation(0., 0., 45.);
66 tr->RegisterYourself();
68 TGeoCompositeShape *cs =
new TGeoCompositeShape(
"mir",
"sph:tr + pg");
70 TGeoVolume *vol =
new TGeoVolume(
"COMP1",cs);
72 gGeoManager->CloseGeometry();
73 gGeoManager->SetNsegments(100);
78 TPaveText *pt =
new TPaveText(0.01,0.01,0.99,0.99);
80 TText *text = pt->AddText(
"TGeoCompositeShape - composite shape class");
81 text->SetTextColor(2);
82 pt->AddText(
"----- It's an example of boolean union operation : A + B");
83 pt->AddText(
"----- A == part of sphere (5-175, 0-340), B == pgon");
85 pt->SetAllWith(
"-----",
"color",4);
86 pt->SetAllWith(
"-----",
"font",72);
87 pt->SetAllWith(
"-----",
"size",0.04);
89 pt->SetTextSize(.044);
96 gROOT->GetListOfCanvases()->Delete();
97 TCanvas *c =
new TCanvas(
"composite shape",
"Intersection boolean operation", 700, 1000);
101 gPad->SetPad(0,0,1,0.4);
103 gPad->SetPad(0,0.4,1,1);
105 if (gGeoManager)
delete gGeoManager;
107 new TGeoManager(
"xtru",
"poza12");
108 TGeoMaterial *mat =
new TGeoMaterial(
"Al", 26.98,13,2.7);
109 TGeoMedium *med =
new TGeoMedium(
"MED",1,mat);
110 TGeoVolume *top = gGeoManager->MakeBox(
"TOP",med,100,100,100);
111 gGeoManager->SetTopVolume(top);
114 TGeoBBox *box =
new TGeoBBox(
"bx", 40., 40., 40.);
115 TGeoSphere *sph =
new TGeoSphere(
"sph", 40., 45.);
117 TGeoTranslation *tr =
new TGeoTranslation(0., 0., 45.);
120 tr->RegisterYourself();
122 TGeoCompositeShape *cs =
new TGeoCompositeShape(
"mir",
"sph:tr * bx");
124 TGeoVolume *vol =
new TGeoVolume(
"COMP2",cs);
126 gGeoManager->CloseGeometry();
127 gGeoManager->SetNsegments(100);
133 TPaveText *pt =
new TPaveText(0.01,0.01,0.99,0.99);
137 TText *text = pt->AddText(
"TGeoCompositeShape - composite shape class");
139 text->SetTextColor(2);
140 pt->AddText(
"----- Here is an example of boolean intersection operation : A * B");
141 pt->AddText(
"----- A == sphere (with inner radius non-zero), B == box");
143 pt->SetAllWith(
"-----",
"color",4);
144 pt->SetAllWith(
"-----",
"font",72);
145 pt->SetAllWith(
"-----",
"size",0.04);
146 pt->SetTextAlign(12);
147 pt->SetTextSize(0.044);
154 gROOT->GetListOfCanvases()->Delete();
155 TCanvas *c =
new TCanvas(
"composite shape",
"Difference boolean operation", 700, 1000);
159 gPad->SetPad(0,0,1,0.4);
161 gPad->SetPad(0,0.4,1,1);
163 if (gGeoManager)
delete gGeoManager;
165 new TGeoManager(
"xtru",
"poza12");
166 TGeoMaterial *mat =
new TGeoMaterial(
"Al", 26.98,13,2.7);
167 TGeoMedium *med =
new TGeoMedium(
"MED",1,mat);
168 TGeoVolume *top = gGeoManager->MakeBox(
"TOP",med,100,100,100);
169 gGeoManager->SetTopVolume(top);
172 TGeoTorus *tor =
new TGeoTorus(
"tor", 45., 15., 20., 45., 145.);
173 TGeoSphere *sph =
new TGeoSphere(
"sph", 20., 45., 0., 180., 0., 270.);
175 TGeoCompositeShape *cs =
new TGeoCompositeShape(
"mir",
"sph - tor");
177 TGeoVolume *vol =
new TGeoVolume(
"COMP3",cs);
179 gGeoManager->CloseGeometry();
180 gGeoManager->SetNsegments(60);
186 TPaveText *pt =
new TPaveText(.01, .01, .99, .99);
190 TText *text = pt->AddText(
"TGeoCompositeShape - composite shape class");
192 text->SetTextColor(2);
194 pt->AddText(
"----- It's an example of boolean difference: A - B");
195 pt->AddText(
"----- A == part of sphere (0-180, 0-270), B == partial torus (45-145)");
197 pt->SetAllWith(
"-----",
"color",4);
198 pt->SetAllWith(
"-----",
"font",72);
199 pt->SetAllWith(
"-----",
"size",0.04);
200 pt->SetTextAlign(12);
201 pt->SetTextSize(0.044);
208 gROOT->GetListOfCanvases()->Delete();
209 TCanvas *c =
new TCanvas(
"composite shape",
"A * B - C", 700, 1000);
213 gPad->SetPad(0,0,1,0.4);
215 gPad->SetPad(0,0.4,1,1);
217 if (gGeoManager)
delete gGeoManager;
219 new TGeoManager(
"xtru",
"poza12");
220 TGeoMaterial *mat =
new TGeoMaterial(
"Al", 26.98,13,2.7);
221 TGeoMedium *med =
new TGeoMedium(
"MED",1,mat);
222 TGeoVolume *top = gGeoManager->MakeBox(
"TOP",med,100,100,100);
223 gGeoManager->SetTopVolume(top);
226 TGeoBBox *box =
new TGeoBBox(
"box", 20., 20., 20.);
227 TGeoBBox *box1 =
new TGeoBBox(
"box1", 5., 5., 5.);
228 TGeoSphere *sph =
new TGeoSphere(
"sph", 5., 25.);
229 TGeoSphere *sph1 =
new TGeoSphere(
"sph1", 1., 15.);
231 TGeoTranslation *tr =
new TGeoTranslation(0., 30., 0.);
232 TGeoTranslation *tr1 =
new TGeoTranslation(0., 40., 0.);
233 TGeoTranslation *tr2 =
new TGeoTranslation(0., 30., 0.);
234 TGeoTranslation *tr3 =
new TGeoTranslation(0., 30., 0.);
240 tr->RegisterYourself();
241 tr1->RegisterYourself();
242 tr2->RegisterYourself();
243 tr3->RegisterYourself();
245 TGeoCompositeShape *cs =
new TGeoCompositeShape(
"mir",
"(sph * box) + (sph1:tr - box1:tr1)");
247 TGeoVolume *vol =
new TGeoVolume(
"COMP4",cs);
250 gGeoManager->CloseGeometry();
251 gGeoManager->SetNsegments(80);
256 TPaveText *pt =
new TPaveText(0.01,0.01,0.99,0.99);
258 TText *text = pt->AddText(
"TGeoCompositeShape - composite shape class");
259 text->SetTextColor(2);
260 pt->AddText(
"----- (sphere * box) + (sphere - box) ");
263 pt->SetAllWith(
"-----",
"color",4);
264 pt->SetAllWith(
"-----",
"font",72);
265 pt->SetAllWith(
"-----",
"size",0.04);
266 pt->SetTextAlign(12);
267 pt->SetTextSize(0.044);
274 void AddText(TPaveText *pave,
const char *datamember, Double_t value,
const char *comment)
277 for (Int_t i=0; i<128; i++) line[i] =
' ';
278 memcpy(&line[0], datamember, strlen(datamember));
281 sprintf(number,
"%5.2f", value);
282 memcpy(&line[12], number, strlen(number));
285 sprintf(&line[30],
"%s",comment);
286 TText *text = pave->AddText(line);
287 text->SetTextAlign(12);
291 void AddText(TPaveText *pave,
const char *datamember, Int_t value,
const char *comment)
294 for (Int_t i=0; i<128; i++) line[i] =
' ';
295 memcpy(&line[0], datamember, strlen(datamember));
298 sprintf(number,
"%5i", value);
299 memcpy(&line[12], number, strlen(number));
302 sprintf(&line[30],
"%s",comment);
303 TText *text = pave->AddText(line);
304 text->SetTextAlign(12);
308 void AddText(TPaveText *pave, TObject *pf, Int_t iaxis)
311 TGeoPatternFinder *finder = (TGeoPatternFinder*)pf;
312 if (!pave || !pf)
return;
313 for (Int_t i=0; i<128; i++) line[i] =
' ';
314 TGeoVolume *volume = finder->GetVolume();
315 TGeoShape *sh = volume->GetShape();
316 sprintf(line,
"Division of %s on axis %d (%s)", volume->GetName(), iaxis,sh->GetAxisName(iaxis));
317 TText *text = pave->AddText(line);
318 text->SetTextColor(3);
319 text->SetTextAlign(12);
320 AddText(pave,
"fNdiv",finder->GetNdiv(),
"number of divisions");
321 AddText(pave,
"fStart",finder->GetStart(),
"start divisioning position");
322 AddText(pave,
"fStep",finder->GetStep(),
"division step");
327 if (!gGeoManager)
return;
329 TVirtualGeoPainter *painter = gGeoManager->GetGeomPainter();
331 if (!painter)
return;
333 painter->SetRaytracing(raytracing);
345 new TCanvas(
"chelp",
"Help to run demos",200,10,700,600);
347 TPaveText* welcome =
new TPaveText(.1,.8,.9,.97);
348 welcome->AddText(
"Welcome to the new geometry package");
349 welcome->SetTextFont(32);
350 welcome->SetTextColor(4);
351 welcome->SetFillColor(24);
354 TPaveText* hdemo =
new TPaveText(.05,.05,.95,.7);
355 hdemo->SetTextAlign(12);
356 hdemo->SetTextFont(52);
357 hdemo->AddText(
"- Demo for building TGeo composite shapes");
359 hdemo->SetAllWith(
"....",
"color",2);
360 hdemo->SetAllWith(
"....",
"font",72);
361 hdemo->SetAllWith(
"....",
"size",0.03);