Logo ROOT   6.14/05
Reference Guide
TGeoTubeEditor.cxx
Go to the documentation of this file.
1 // @(#):$Id$
2 // Author: M.Gheata
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2002, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 /** \class TGeoTubeEditor
13 \ingroup Geometry_builder
14 
15 Editor for a TGeoTube.
16 
17 \image html geom_tube_pic.png
18 
19 \image html geom_tube_ed.png
20 
21 */
22 
23 #include "TGeoTubeEditor.h"
24 #include "TGeoTabManager.h"
25 #include "TGeoTube.h"
26 #include "TGeoManager.h"
27 #include "TVirtualGeoPainter.h"
28 #include "TPad.h"
29 #include "TView.h"
30 #include "TGTab.h"
31 #include "TMath.h"
32 #include "TGComboBox.h"
33 #include "TGButton.h"
34 #include "TGTextEntry.h"
35 #include "TGNumberEntry.h"
36 #include "TGLabel.h"
37 #include "TGDoubleSlider.h"
38 
40 
44 };
45 
46 ////////////////////////////////////////////////////////////////////////////////
47 /// Constructor for tube editor
48 
50  Int_t height, UInt_t options, Pixel_t back)
51  : TGeoGedFrame(p, width, height, options | kVerticalFrame, back)
52 {
53  fShape = 0;
54  fRmini = fRmaxi = fDzi = 0.0;
55  fNamei = "";
58 
59  // TextEntry for shape name
60  MakeTitle("Name");
61  fShapeName = new TGTextEntry(this, new TGTextBuffer(50), kTUBE_NAME);
63  fShapeName->SetToolTipText("Enter the box name");
64  fShapeName->Associate(this);
65  AddFrame(fShapeName, new TGLayoutHints(kLHintsLeft, 3, 1, 2, 5));
66 
67  TGTextEntry *nef;
68  MakeTitle("Tube dimensions");
69  TGCompositeFrame *compxyz = new TGCompositeFrame(this, 118, 30, kVerticalFrame | kRaisedFrame);
70  // Number entry for rmin
72  f1->AddFrame(new TGLabel(f1, "Rmin"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
73  fERmin = new TGNumberEntry(f1, 0., 5, kTUBE_RMIN);
76  nef->SetToolTipText("Enter the inner radius");
77  fERmin->Associate(this);
79  f1->AddFrame(fERmin, new TGLayoutHints(kLHintsRight , 2, 2, 2, 2));
80  compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 0, 0));
81 
82  // Number entry for Rmax
83  f1 = new TGCompositeFrame(compxyz, 155, 30, kHorizontalFrame | kFixedWidth);
84  f1->AddFrame(new TGLabel(f1, "Rmax"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
85  fERmax = new TGNumberEntry(f1, 0., 5, kTUBE_RMAX);
88  nef->SetToolTipText("Enter the outer radius");
89  fERmax->Associate(this);
91  f1->AddFrame(fERmax, new TGLayoutHints(kLHintsRight , 2, 2, 2, 2));
92  compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 0, 0));
93 
94  // Number entry for dz
95  f1 = new TGCompositeFrame(compxyz, 155, 30, kHorizontalFrame | kFixedWidth);
96  f1->AddFrame(new TGLabel(f1, "DZ"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
97  fEDz = new TGNumberEntry(f1, 0., 5, kTUBE_Z);
99  nef = (TGTextEntry*)fEDz->GetNumberEntry();
100  nef->SetToolTipText("Enter the tube half-lenth in Z");
101  fEDz->Associate(this);
102  fEDz->Resize(100,fEDz->GetDefaultHeight());
103  f1->AddFrame(fEDz, new TGLayoutHints(kLHintsRight , 2, 2, 2, 2));
104  compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 0, 0));
105 
106 // compxyz->Resize(150,30);
107  AddFrame(compxyz, new TGLayoutHints(kLHintsLeft, 6, 6, 4, 4));
108 
109  // Delayed draw
111  fDelayed = new TGCheckButton(fDFrame, "Delayed draw");
112  fDFrame->AddFrame(fDelayed, new TGLayoutHints(kLHintsLeft , 2, 2, 4, 4));
113  AddFrame(fDFrame, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
114 
115  // Buttons
116  fBFrame = new TGCompositeFrame(this, 155, 10, kHorizontalFrame | kFixedWidth);
117  fApply = new TGTextButton(fBFrame, "Apply");
118  fBFrame->AddFrame(fApply, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
119  fApply->Associate(this);
120  fUndo = new TGTextButton(fBFrame, "Undo");
121  fBFrame->AddFrame(fUndo, new TGLayoutHints(kLHintsRight , 2, 2, 4, 4));
122  fUndo->Associate(this);
123  AddFrame(fBFrame, new TGLayoutHints(kLHintsLeft, 6, 6, 4, 4));
125 }
126 
127 ////////////////////////////////////////////////////////////////////////////////
128 /// Destructor
129 
131 {
132  TGFrameElement *el;
133  TIter next(GetList());
134  while ((el = (TGFrameElement *)next())) {
135  if (el->fFrame->IsComposite())
137  }
138  Cleanup();
139 }
140 
141 ////////////////////////////////////////////////////////////////////////////////
142 /// Connect signals to slots.
143 
145 {
146  fApply->Connect("Clicked()", "TGeoTubeEditor", this, "DoApply()");
147  fUndo->Connect("Clicked()", "TGeoTubeEditor", this, "DoUndo()");
148  fShapeName->Connect("TextChanged(const char *)", "TGeoTubeEditor", this, "DoModified()");
149  fERmin->Connect("ValueSet(Long_t)", "TGeoTubeEditor", this, "DoRmin()");
150  fERmax->Connect("ValueSet(Long_t)", "TGeoTubeEditor", this, "DoRmax()");
151  fEDz->Connect("ValueSet(Long_t)", "TGeoTubeEditor", this, "DoDz()");
152  fERmin->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoTubeEditor", this, "DoRmin()");
153  fERmax->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoTubeEditor", this, "DoRmax()");
154  fEDz->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoTubeEditor", this, "DoDz()");
155  fInit = kFALSE;
156 }
157 
158 
159 ////////////////////////////////////////////////////////////////////////////////
160 /// Connect to the selected object.
161 
163 {
164  if (obj == 0 || (obj->IsA()!=TGeoTube::Class())) {
165  SetActive(kFALSE);
166  return;
167  }
168  fShape = (TGeoTube*)obj;
169  fRmini = fShape->GetRmin();
170  fRmaxi = fShape->GetRmax();
171  fDzi = fShape->GetDz();
172  fNamei = fShape->GetName();
176  fEDz->SetNumber(fDzi);
179 
181  SetActive();
182 }
183 
184 ////////////////////////////////////////////////////////////////////////////////
185 /// Check if shape drawing is delayed.
186 
188 {
189  return (fDelayed->GetState() == kButtonDown);
190 }
191 
192 ////////////////////////////////////////////////////////////////////////////////
193 /// Perform name change.
194 
196 {
197  DoModified();
198 }
199 
200 ////////////////////////////////////////////////////////////////////////////////
201 /// Slot for applying modifications.
202 
204 {
205  const char *name = fShapeName->GetText();
206  if (strcmp(name,fShape->GetName())) fShape->SetName(name);
207  Double_t rmin = fERmin->GetNumber();
208  Double_t rmax = fERmax->GetNumber();
209  Double_t dz = fEDz->GetNumber();
210  fShape->SetTubeDimensions(rmin, rmax, dz);
211  fShape->ComputeBBox();
212  fUndo->SetEnabled();
214  if (fPad) {
216  fShape->Draw();
217  fPad->GetView()->ShowAxis();
218  } else Update();
219  }
220 }
221 
222 ////////////////////////////////////////////////////////////////////////////////
223 /// Slot for signaling modifications.
224 
226 {
227  fApply->SetEnabled();
228 }
229 
230 ////////////////////////////////////////////////////////////////////////////////
231 /// Slot for undoing last operation.
232 
234 {
237  fEDz->SetNumber(fDzi);
238  DoApply();
241 }
242 
243 ////////////////////////////////////////////////////////////////////////////////
244 /// Slot for rmin.
245 
247 {
248  Double_t rmin = fERmin->GetNumber();
249  Double_t rmax = fERmax->GetNumber();
250  if (rmax<rmin+1.e-10) {
251  rmin = rmax - 0.1;
252  fERmin->SetNumber(rmin);
253  }
254  DoModified();
255  if (!IsDelayed()) DoApply();
256 }
257 
258 ////////////////////////////////////////////////////////////////////////////////
259 /// Slot for rmax.
260 
262 {
263  Double_t rmin = fERmin->GetNumber();
264  Double_t rmax = fERmax->GetNumber();
265  if (rmax <= 0.) {
266  rmax = 0.1;
267  fERmax->SetNumber(rmax);
268  }
269  if (rmax<rmin+1.e-10) {
270  rmax = rmin + 0.1;
271  fERmax->SetNumber(rmax);
272  }
273  DoModified();
274  if (!IsDelayed()) DoApply();
275 }
276 
277 ////////////////////////////////////////////////////////////////////////////////
278 /// Slot for dz.
279 
281 {
282  Double_t dz = fEDz->GetNumber();
283  if (dz<=0) {
284  dz = 0.1;
285  fEDz->SetNumber(dz);
286  }
287  DoModified();
288  if (!IsDelayed()) DoApply();
289 }
290 
291 /** \class TGeoTubeSegEditor
292 \ingroup Geometry_builder
293 
294 Editor for a TGeoTubeSeg.
295 
296 \image html geom_tubs_pic.png
297 
298 \image html geom_tubs_ed.png
299 
300 */
301 
303 
306 };
307 
308 ////////////////////////////////////////////////////////////////////////////////
309 /// Constructor for tube segment editor
310 
312  Int_t height, UInt_t options, Pixel_t back)
313  : TGeoTubeEditor(p, width, height, options | kVerticalFrame, back)
314 {
315  fLock = kFALSE;
316  MakeTitle("Phi range");
317  TGTextEntry *nef;
319  // Vertical slider
320  fSPhi = new TGDoubleVSlider(compxyz,100);
321  fSPhi->SetRange(0.,720.);
322  fSPhi->Resize(fSPhi->GetDefaultWidth(), 100);
323  compxyz->AddFrame(fSPhi, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
324  TGCompositeFrame *f1 = new TGCompositeFrame(compxyz, 135, 100, kVerticalFrame | kFixedHeight);
325  f1->AddFrame(new TGLabel(f1, "Phi min."), new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 0, 6, 0));
326  fEPhi1 = new TGNumberEntry(f1, 0., 5, kTUBESEG_PHI1);
329  nef = (TGTextEntry*)fEPhi1->GetNumberEntry();
330  nef->SetToolTipText("Enter the phi1 value");
331  fEPhi1->Associate(this);
332  f1->AddFrame(fEPhi1, new TGLayoutHints(kLHintsTop | kLHintsRight, 2, 2, 2, 2));
333 
334  fEPhi2 = new TGNumberEntry(f1, 0., 5, kTUBESEG_PHI2);
337  nef = (TGTextEntry*)fEPhi2->GetNumberEntry();
338  nef->SetToolTipText("Enter the phi2 value");
339  fEPhi2->Associate(this);
340  f1->AddFrame(fEPhi2, new TGLayoutHints(kLHintsBottom | kLHintsRight, 2, 2, 2, 2));
341  f1->AddFrame(new TGLabel(f1, "Phi max."), new TGLayoutHints(kLHintsBottom, 0, 0, 6, 2));
342  compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
343 
344 // compxyz->Resize(150,150);
345  AddFrame(compxyz, new TGLayoutHints(kLHintsLeft, 6, 6, 4, 4));
348 }
349 
350 ////////////////////////////////////////////////////////////////////////////////
351 /// Destructor
352 
354 {
355  TGFrameElement *el;
356  TIter next(GetList());
357  while ((el = (TGFrameElement *)next())) {
358  if (el->fFrame->IsComposite())
360  }
361  Cleanup();
362 }
363 
364 ////////////////////////////////////////////////////////////////////////////////
365 /// Connect signals to slots.
366 
368 {
370  Disconnect(fApply, "Clicked()",(TGeoTubeEditor*)this, "DoApply()");
371  Disconnect(fUndo, "Clicked()",(TGeoTubeEditor*)this, "DoUndo()");
372  fApply->Connect("Clicked()", "TGeoTubeSegEditor", this, "DoApply()");
373  fUndo->Connect("Clicked()", "TGeoTubeSegEditor", this, "DoUndo()");
374  fEPhi1->Connect("ValueSet(Long_t)", "TGeoTubeSegEditor", this, "DoPhi1()");
375  fEPhi2->Connect("ValueSet(Long_t)", "TGeoTubeSegEditor", this, "DoPhi2()");
376 // fEPhi1->GetNumberEntry()->Connect("TextChanged(const char *)","TGeoTubeSegEditor", this, "DoPhi1()");
377 // fEPhi2->GetNumberEntry()->Connect("TextChanged(const char *)","TGeoTubeSegEditor", this, "DoPhi2()");
378  fSPhi->Connect("PositionChanged()","TGeoTubeSegEditor", this, "DoPhi()");
379 }
380 
381 ////////////////////////////////////////////////////////////////////////////////
382 /// Connect to the selected object.
383 
385 {
386  if (obj == 0 || (obj->IsA()!=TGeoTubeSeg::Class())) {
387  SetActive(kFALSE);
388  return;
389  }
390  fShape = (TGeoTube*)obj;
391  fRmini = fShape->GetRmin();
392  fRmaxi = fShape->GetRmax();
393  fDzi = fShape->GetDz();
394  fNamei = fShape->GetName();
395  fPmini = ((TGeoTubeSeg*)fShape)->GetPhi1();
396  fPmaxi = ((TGeoTubeSeg*)fShape)->GetPhi2();
403  fEDz->SetNumber(fDzi);
406 
408  SetActive();
409 }
410 
411 ////////////////////////////////////////////////////////////////////////////////
412 /// Slot for phi1.
413 
415 {
416  Double_t phi1 = fEPhi1->GetNumber();
417  Double_t phi2 = fEPhi2->GetNumber();
418  if (phi1 > 360-1.e-10) {
419  phi1 = 0.;
420  fEPhi1->SetNumber(phi1);
421  }
422  if (phi2<phi1+1.e-10) {
423  phi1 = phi2 - 0.1;
424  fEPhi1->SetNumber(phi1);
425  }
426  if (!fLock) {
427  DoModified();
428  fLock = kTRUE;
429  fSPhi->SetPosition(phi1,phi2);
430  } else fLock = kFALSE;
431  if (!IsDelayed()) DoApply();
432 }
433 
434 ////////////////////////////////////////////////////////////////////////////////
435 /// Slot for phi2.
436 
438 {
439  Double_t phi1 = fEPhi1->GetNumber();
440  Double_t phi2 = fEPhi2->GetNumber();
441  if (phi2-phi1 > 360.) {
442  phi2 -= 360.;
443  fEPhi2->SetNumber(phi2);
444  }
445  if (phi2<phi1+1.e-10) {
446  phi2 = phi1 + 0.1;
447  fEPhi2->SetNumber(phi2);
448  }
449  if (!fLock) {
450  DoModified();
451  fLock = kTRUE;
452  fSPhi->SetPosition(phi1,phi2);
453  } else fLock = kFALSE;
454  if (!IsDelayed()) DoApply();
455 }
456 
457 ////////////////////////////////////////////////////////////////////////////////
458 /// Slot for phi slider.
459 
461 {
462  if (!fLock) {
463  DoModified();
464  fLock = kTRUE;
466  fLock = kTRUE;
468  } else fLock = kFALSE;
469  if (!IsDelayed()) DoApply();
470 }
471 
472 ////////////////////////////////////////////////////////////////////////////////
473 /// Slot for applying modifications.
474 
476 {
478  const char *name = fShapeName->GetText();
479  if (strcmp(name,fShape->GetName())) fShape->SetName(name);
480  Double_t rmin = fERmin->GetNumber();
481  Double_t rmax = fERmax->GetNumber();
482  if (rmin<0 || rmax<rmin) return;
483  Double_t dz = fEDz->GetNumber();
484  Double_t phi1 = fEPhi1->GetNumber();
485  Double_t phi2 = fEPhi2->GetNumber();
486  if ((phi2-phi1) > 360.001) {
487  phi1 = 0.;
488  phi2 = 360.;
489  fEPhi1->SetNumber(phi1);
490  fEPhi2->SetNumber(phi2);
491  fLock = kTRUE;
492  fSPhi->SetPosition(phi1,phi2);
493  fLock = kFALSE;
494  }
495  ((TGeoTubeSeg*)fShape)->SetTubsDimensions(rmin, rmax, dz, phi1, phi2);
496  fShape->ComputeBBox();
497  fUndo->SetEnabled();
498  if (fPad) {
500  fShape->Draw();
501  fPad->GetView()->ShowAxis();
502  } else Update();
503  }
504 }
505 
506 ////////////////////////////////////////////////////////////////////////////////
507 /// Slot for undoing last operation.
508 
510 {
513  fEDz->SetNumber(fDzi);
517  DoApply();
520 }
521 
522 /** \class TGeoCtubEditor
523 \ingroup Geometry_builder
524 
525 Editor for a TGeoCtub.
526 
527 \image html geom_ctub_pic.png
528 
529 \image html geom_ctub_ed.png
530 
531 */
532 
534 
537 };
538 
539 ////////////////////////////////////////////////////////////////////////////////
540 /// Constructor for cut tube editor
541 
543  Int_t height, UInt_t options, Pixel_t back)
544  : TGeoTubeSegEditor(p, width, height, options, back)
545 {
546  MakeTitle("Theta/phi low");
547  TGTextEntry *nef;
548  // Number entry for theta/phi of the lower normal
549  TGCompositeFrame *compxyz = new TGCompositeFrame(this, 118, 30, kVerticalFrame | kRaisedFrame);
551  f1->AddFrame(new TGLabel(f1, "TH_LO"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
552  fEThlo = new TGNumberEntry(f1, 0., 5, kCTUB_THLO);
554  nef = (TGTextEntry*)fEThlo->GetNumberEntry();
555  nef->SetToolTipText("Enter the theta angle of the lower plane normal");
556  fEThlo->Associate(this);
557  fEThlo->Connect("ValueSet(Long_t)", "TGeoCtubEditor", this, "DoThlo()");
558  nef->Connect("TextChanged(const char *)","TGeoCtubEditor", this, "DoModified()");
560  f1->AddFrame(fEThlo, new TGLayoutHints(kLHintsRight , 2, 2, 2, 2));
561  compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 0, 0));
562 
563  f1 = new TGCompositeFrame(compxyz, 155, 30, kHorizontalFrame | kFixedWidth);
564  f1->AddFrame(new TGLabel(f1, "PH_LO"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
565  fEPhlo = new TGNumberEntry(f1, 0., 5, kCTUB_PHLO);
567  nef = (TGTextEntry*)fEPhlo->GetNumberEntry();
568  nef->SetToolTipText("Enter the phi angle of the lower plane normal");
569  fEPhlo->Associate(this);
570  fEPhlo->Connect("ValueSet(Long_t)", "TGeoCtubEditor", this, "DoPhlo()");
571  nef->Connect("TextChanged(const char *)","TGeoCtubEditor", this, "DoModified()");
573  f1->AddFrame(fEPhlo, new TGLayoutHints(kLHintsRight , 2, 2, 2, 2));
574  compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 0, 0));
575  AddFrame(compxyz, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
576 
577  // Number entry for theta/phi of the lower normal
578  MakeTitle("Theta/phi high");
579  compxyz = new TGCompositeFrame(this, 118, 30, kVerticalFrame | kRaisedFrame);
580  f1 = new TGCompositeFrame(compxyz, 155, 30, kHorizontalFrame | kFixedWidth);
581  f1->AddFrame(new TGLabel(f1, "TH_HI"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
582  fEThhi = new TGNumberEntry(f1, 0., 5, kCTUB_THHI);
584  nef = (TGTextEntry*)fEThhi->GetNumberEntry();
585  nef->SetToolTipText("Enter the theta angle of the upper plane normal");
586  fEThhi->Associate(this);
587  fEThhi->Connect("ValueSet(Long_t)", "TGeoCtubEditor", this, "DoThhi()");
588  nef->Connect("TextChanged(const char *)","TGeoCtubEditor", this, "DoModified()");
590  f1->AddFrame(fEThhi, new TGLayoutHints(kLHintsRight , 2, 2, 2, 2));
591  compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 0, 0));
592 
593  f1 = new TGCompositeFrame(compxyz, 155, 30, kHorizontalFrame | kFixedWidth);
594  f1->AddFrame(new TGLabel(f1, "PH_HI"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
595  fEPhhi = new TGNumberEntry(f1, 0., 5, kCTUB_PHHI);
597  nef = (TGTextEntry*)fEPhhi->GetNumberEntry();
598  nef->SetToolTipText("Enter the phi angle of the upper plane normal");
599  fEPhhi->Associate(this);
600  fEPhhi->Connect("ValueSet(Long_t)", "TGeoCtubEditor", this, "DoPhhi()");
601  nef->Connect("TextChanged(const char *)","TGeoCtubEditor", this, "DoModified()");
603  f1->AddFrame(fEPhhi, new TGLayoutHints(kLHintsRight , 2, 2, 4, 4));
604  compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 4, 4));
605  AddFrame(compxyz, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
608 }
609 
610 ////////////////////////////////////////////////////////////////////////////////
611 /// Destructor
612 
614 {
615  TGFrameElement *el;
616  TIter next(GetList());
617  while ((el = (TGFrameElement *)next())) {
618  if (el->fFrame->IsComposite())
620  }
621  Cleanup();
622 }
623 
624 ////////////////////////////////////////////////////////////////////////////////
625 /// Connect to the selected object.
626 
628 {
629  if (obj == 0 || (obj->IsA()!=TGeoCtub::Class())) {
630  SetActive(kFALSE);
631  return;
632  }
633  fShape = (TGeoTube*)obj;
634  fRmini = fShape->GetRmin();
635  fRmaxi = fShape->GetRmax();
636  fDzi = fShape->GetDz();
637  fNamei = fShape->GetName();
638  fPmini = ((TGeoTubeSeg*)fShape)->GetPhi1();
639  fPmaxi = ((TGeoTubeSeg*)fShape)->GetPhi2();
640  const Double_t *nlo = ((TGeoCtub*)fShape)->GetNlow();
641  const Double_t *nhi = ((TGeoCtub*)fShape)->GetNhigh();
642  fThlo = TMath::RadToDeg() * TMath::ACos(nlo[2]);
643  fPhlo = TMath::RadToDeg() * TMath::ATan2(nlo[1], nlo[0]);
644  fThhi = TMath::RadToDeg() * TMath::ACos(nhi[2]);
645  fPhhi = TMath::RadToDeg() * TMath::ATan2(nhi[1], nhi[0]);
646 
653  fEDz->SetNumber(fDzi);
660 
662  SetActive();
663 }
664 
665 ////////////////////////////////////////////////////////////////////////////////
666 /// Slot for phi1.
667 
669 {
670  Double_t thlo = fEThlo->GetNumber();
671  if (thlo <= 90.) {thlo = 91.; fEThlo->SetNumber(thlo);}
672  if (thlo > 180.) {thlo = 180.; fEThlo->SetNumber(thlo);}
673  DoModified();
674  if (!IsDelayed()) DoApply();
675 }
676 
677 ////////////////////////////////////////////////////////////////////////////////
678 /// Slot for phi1.
679 
681 {
682  Double_t phlo = fEPhlo->GetNumber();
683  if (phlo >= 360.) {
684  phlo = 0.;
685  fEPhlo->SetNumber(phlo);
686  }
687  DoModified();
688  if (!IsDelayed()) DoApply();
689 }
690 
691 ////////////////////////////////////////////////////////////////////////////////
692 /// Slot for phi1.
693 
695 {
696  Double_t thhi = fEThhi->GetNumber();
697  if (thhi >= 90.) {thhi = 89.; fEThhi->SetNumber(thhi);}
698  DoModified();
699  if (!IsDelayed()) DoApply();
700 }
701 
702 ////////////////////////////////////////////////////////////////////////////////
703 /// Slot for phi1.
704 
706 {
707  Double_t phhi = fEPhhi->GetNumber();
708  if (phhi >= 360.) {
709  phhi = 0.;
710  fEPhhi->SetNumber(phhi);
711  }
712  DoModified();
713  if (!IsDelayed()) DoApply();
714 }
715 
716 ////////////////////////////////////////////////////////////////////////////////
717 /// Slot for applying modifications.
718 
720 {
722  const char *name = fShapeName->GetText();
723  if (strcmp(name,fShape->GetName())) fShape->SetName(name);
724  Double_t rmin = fERmin->GetNumber();
725  Double_t rmax = fERmax->GetNumber();
726  if (rmin<0 || rmax<rmin) return;
727  Double_t dz = fEDz->GetNumber();
728  Double_t phi1 = fEPhi1->GetNumber();
729  Double_t phi2 = fEPhi2->GetNumber();
730  if ((phi2-phi1) > 360.001) {
731  phi1 = 0.;
732  phi2 = 360.;
733  fEPhi1->SetNumber(phi1);
734  fEPhi2->SetNumber(phi2);
735  fLock = kTRUE;
736  fSPhi->SetPosition(phi1,phi2);
737  fLock = kFALSE;
738  }
743  Double_t lx = TMath::Sin(thlo)*TMath::Cos(phlo);
744  Double_t ly = TMath::Sin(thlo)*TMath::Sin(phlo);
745  Double_t lz = TMath::Cos(thlo);
746  Double_t tx = TMath::Sin(thhi)*TMath::Cos(phhi);
747  Double_t ty = TMath::Sin(thhi)*TMath::Sin(phhi);
748  Double_t tz = TMath::Cos(thhi);
749  ((TGeoCtub*)fShape)->SetCtubDimensions(rmin, rmax, dz, phi1, phi2, lx,ly,lz,tx,ty,tz);
750  fShape->ComputeBBox();
751  fUndo->SetEnabled();
752  if (fPad) {
754  fShape->Draw();
755  fPad->GetView()->ShowAxis();
756  } else Update();
757  }
758 }
759 
760 ////////////////////////////////////////////////////////////////////////////////
761 /// Slot for undoing last operation.
762 
764 {
767  fEDz->SetNumber(fDzi);
775 
776  DoApply();
779 }
virtual Float_t GetMinPosition() const
virtual void Resize(UInt_t w=0, UInt_t h=0)
Resize the frame.
Definition: TGFrame.cxx:587
Bool_t fIsShapeEditable
TGeoTubeEditor(const TGWindow *p=0, Int_t width=140, Int_t height=30, UInt_t options=kChildFrame, Pixel_t back=GetDefaultFrameBackground())
Constructor for tube editor.
Cylindrical tube class.
Definition: TGeoTube.h:17
TGNumberEntry * fEPhi2
virtual ~TGeoCtubEditor()
Destructor.
virtual Float_t GetMaxPosition() const
virtual void ComputeBBox()
compute bounding box of the tube
Definition: TGeoTube.cxx:210
TGNumberEntry * fERmax
void DoPhi1()
Slot for phi1.
Bool_t IsDelayed() const
Check if shape drawing is delayed.
void DoPhi()
Slot for phi slider.
void DoThlo()
Slot for phi1.
image html pict1_TGaxis_012 png width
Define new text attributes for the label number "labNum".
Definition: TGaxis.cxx:2551
TVirtualGeoPainter * GetPainter() const
Definition: TGeoManager.h:191
virtual void SetToolTipText(const char *text, Long_t delayms=500)
Set tool tip text associated with this text entry.
virtual void DoUndo()
Slot for undoing last operation.
virtual void SetName(const char *name)
Set the name of the TNamed.
Definition: TNamed.cxx:140
virtual void SetNumber(Double_t val)
virtual Bool_t IsPaintingShape() const =0
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
TGTextEntry * fShapeName
virtual Bool_t IsComposite() const
Definition: TGFrame.h:259
virtual void SetRange(Float_t min, Float_t max)
void DoThhi()
Slot for phi1.
TGeoCtubEditor(const TGWindow *p=0, Int_t width=140, Int_t height=30, UInt_t options=kChildFrame, Pixel_t back=GetDefaultFrameBackground())
Constructor for cut tube editor.
void DoPhi2()
Slot for phi2.
static void Cleanup(TGCompositeFrame *frame)
Static method to cleanup hierarchically all daughters of a composite frame.
virtual Double_t GetRmax() const
Definition: TGeoTube.h:67
virtual void DoApply()
Slot for applying modifications.
TGNumberEntry * fEThhi
TGeoTubeSegEditor(const TGWindow *p=0, Int_t width=140, Int_t height=30, UInt_t options=kChildFrame, Pixel_t back=GetDefaultFrameBackground())
Constructor for tube segment editor.
ULong_t Pixel_t
Definition: GuiTypes.h:39
void Class()
Definition: Class.C:29
void DoModified()
Slot for signaling modifications.
virtual void SetActive(Bool_t active=kTRUE)
Set active GUI attribute frames related to the selected object.
constexpr Double_t DegToRad()
Conversion from degree to radian: .
Definition: TMath.h:82
TGCompositeFrame(const TGCompositeFrame &)
TGTextButton * fUndo
virtual TList * GetList() const
Definition: TGFrame.h:369
Double_t ATan2(Double_t, Double_t)
Definition: TMath.h:678
ETGeoCtubSegWid
virtual EButtonState GetState() const
Definition: TGButton.h:112
ETGeoTubeSegWid
TGCompositeFrame * fDFrame
virtual TView * GetView() const =0
virtual void SetModel(TObject *obj)
Connect to the selected object.
virtual const char * GetName() const
Get the shape name.
Definition: TGeoShape.cxx:248
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Non-static method is used to connect from the signal of this object to the receiver slot...
Definition: TQObject.cxx:867
virtual void Associate(const TGWindow *w)
Make w the window that will receive the generated messages.
virtual ~TGeoTubeSegEditor()
Destructor.
virtual void SetSize(const TGDimension &s)
Definition: TGFrame.h:299
virtual void Associate(const TGWindow *w)
Definition: TGWidget.h:84
unsigned int UInt_t
Definition: RtypesCore.h:42
TGeoTube * fShape
TGNumberEntry * fEPhlo
TGFrame * fFrame
Definition: TGLayout.h:119
virtual void ShowAxis()=0
virtual UInt_t GetDefaultWidth() const
Definition: TGFrame.h:237
Double_t ACos(Double_t)
Definition: TMath.h:667
virtual void DoApply()
Slot for applying modifications.
static void MoveFrame(TGCompositeFrame *fr, TGCompositeFrame *p)
Move frame fr at the end of the list of parent p.
Editor for a TGeoTube.
void SetNumAttr(EAttribute attr=kNEAAnyNumber)
TGCheckButton * fDelayed
Double_t Cos(Double_t)
Definition: TMath.h:640
const Bool_t kFALSE
Definition: RtypesCore.h:88
TGDimension GetSize() const
Definition: TGFrame.h:277
const char * GetText() const
Definition: TGTextEntry.h:134
A tube segment cut with 2 planes.
Definition: TGeoTube.h:168
virtual UInt_t GetDefaultHeight() const
Definition: TGFrame.h:238
void DoRmax()
Slot for rmax.
ETGeoTubeWid
virtual ~TGeoTubeEditor()
Destructor.
Editor for a TGeoTubeSeg.
#define ClassImp(name)
Definition: Rtypes.h:359
R__EXTERN TGeoManager * gGeoManager
Definition: TGeoManager.h:562
double Double_t
Definition: RtypesCore.h:55
void DoDz()
Slot for dz.
virtual void SetEnabled(Bool_t e=kTRUE)
Set enabled or disabled state of button.
Definition: TGButton.cxx:409
virtual Double_t GetNumber() const
Bool_t Disconnect(const char *signal=0, void *receiver=0, const char *slot=0)
Disconnects signal of this object from slot of receiver.
Definition: TQObject.cxx:1025
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
Definition: TRolke.cxx:630
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=0)
Add frame to the composite frame using the specified layout hints.
Definition: TGFrame.cxx:1099
virtual void DoApply()
Slot for applying modifications.
TGNumberEntry * fEPhi1
TGNumberEntry * fERmin
TGTextButton * fApply
Mother of all ROOT objects.
Definition: TObject.h:37
virtual void SetModel(TObject *obj)
Connect to the selected object.
constexpr Double_t RadToDeg()
Conversion from radian to degree: .
Definition: TMath.h:74
TGDoubleVSlider * fSPhi
Bool_t fInit
Definition: TGedFrame.h:53
TGNumberEntryField * GetNumberEntry() const
virtual Double_t GetRmin() const
Definition: TGeoTube.h:66
void DoPhlo()
Slot for phi1.
TGNumberEntry * fEDz
virtual void ConnectSignals2Slots()
Connect signals to slots.
Double_t Sin(Double_t)
Definition: TMath.h:636
TGCompositeFrame * fBFrame
TF1 * f1
Definition: legend1.C:11
void DoPhhi()
Slot for phi1.
virtual void SetPosition(Float_t min, Float_t max)
virtual void Update()
Override Update from TGedFrame as fGedEditor can be null.
virtual void SetModel(TObject *obj)
Connect to the selected object.
virtual void SetText(const char *text, Bool_t emit=kTRUE)
Sets text entry to text, clears the selection and moves the cursor to the end of the line...
void DoRmin()
Slot for rmin.
TVirtualPad * fPad
Definition: TGeoGedFrame.h:18
virtual void Cleanup()
Cleanup and delete all objects contained in this composite frame.
Definition: TGFrame.cxx:949
virtual void Draw(Option_t *option="")
Draw this shape.
Definition: TGeoShape.cxx:721
TGNumberEntry * fEThlo
const Bool_t kTRUE
Definition: RtypesCore.h:87
virtual void MakeTitle(const char *title)
Create attribute frame title.
Definition: TGedFrame.cxx:96
Editor for a TGeoCtub.
virtual void ConnectSignals2Slots()
Connect signals to slots.
void DoName()
Perform name change.
void SetTubeDimensions(Double_t rmin, Double_t rmax, Double_t dz)
Set tube dimensions.
Definition: TGeoTube.cxx:910
virtual Double_t GetDz() const
Definition: TGeoTube.h:68
char name[80]
Definition: TGX11.cxx:109
UInt_t GetDefaultHeight() const
Common base class for geombuilder editors.
Definition: TGeoGedFrame.h:13
virtual void DoUndo()
Slot for undoing last operation.
TGNumberEntry * fEPhhi
virtual void DoUndo()
Slot for undoing last operation.
A phi segment of a tube.
Definition: TGeoTube.h:88