Logo ROOT   6.12/07
Reference Guide
TGeoTorusEditor.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 TGeoTorusEditor
13 \ingroup Geometry_builder
14 
15 Editor for a TGeoTorus.
16 
17 \image html geom_torus_pic.png
18 
19 \image html geom_torus_ed.png
20 
21 */
22 
23 #include "TGeoTorusEditor.h"
24 #include "TGeoTabManager.h"
25 #include "TGeoTorus.h"
26 #include "TGeoManager.h"
27 #include "TVirtualGeoPainter.h"
28 #include "TPad.h"
29 #include "TView.h"
30 #include "TGTab.h"
31 #include "TGComboBox.h"
32 #include "TGButton.h"
33 #include "TGTextEntry.h"
34 #include "TGNumberEntry.h"
35 #include "TGLabel.h"
36 
38 
42 };
43 
44 ////////////////////////////////////////////////////////////////////////////////
45 /// Constructor for torus editor
46 
48  Int_t height, UInt_t options, Pixel_t back)
49  : TGeoGedFrame(p, width, height, options | kVerticalFrame, back)
50 {
51  fShape = 0;
52  fRi = fRmini = fRmaxi = fPhi1i = fDphii = 0.0;
53  fNamei = "";
56 
57  // TextEntry for shape name
58  MakeTitle("Name");
59  fShapeName = new TGTextEntry(this, new TGTextBuffer(50), kTORUS_NAME);
61  fShapeName->SetToolTipText("Enter the torus name");
62  fShapeName->Associate(this);
63  AddFrame(fShapeName, new TGLayoutHints(kLHintsLeft, 3, 1, 2, 5));
64 
65  TGTextEntry *nef;
66  MakeTitle("Dimensions");
67  // Number entry for R.
69  f1->AddFrame(new TGLabel(f1, "R"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
70  fER = new TGNumberEntry(f1, 0., 5, kTORUS_R);
72  fER->Resize(100, fER->GetDefaultHeight());
73  nef = (TGTextEntry*)fER->GetNumberEntry();
74  nef->SetToolTipText("Enter the axial radius R");
75  fER->Associate(this);
76  f1->AddFrame(fER, new TGLayoutHints(kLHintsRight, 2, 2, 4, 4));
77  AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
78 
79  // Number entry for rmin.
80  f1 = new TGCompositeFrame(this, 155, 10, kHorizontalFrame | kFixedWidth);
81  f1->AddFrame(new TGLabel(f1, "Rmin"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
82  fERmin = new TGNumberEntry(f1, 0., 5, kTORUS_RMIN);
86  nef->SetToolTipText("Enter the inner radius Rmin");
87  fERmin->Associate(this);
88  f1->AddFrame(fERmin, new TGLayoutHints(kLHintsRight, 2, 2, 4, 4));
89  AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
90 
91  // Number entry for rmax
92  f1 = new TGCompositeFrame(this, 155, 10, kHorizontalFrame | kFixedWidth);
93  f1->AddFrame(new TGLabel(f1, "Rmax"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
94  fERmax = new TGNumberEntry(f1, 0., 5, kTORUS_RMAX);
98  nef->SetToolTipText("Enter the outer radius Rmax");
99  fERmax->Associate(this);
100  f1->AddFrame(fERmax, new TGLayoutHints(kLHintsRight, 2, 2, 4, 4));
101  AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
102 
103  // Number entry for Phi1
104  f1 = new TGCompositeFrame(this, 155, 10, kHorizontalFrame | kFixedWidth);
105  f1->AddFrame(new TGLabel(f1, "Phi1"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
106  fEPhi1 = new TGNumberEntry(f1, 0., 5, kTORUS_PHI1);
109  nef = (TGTextEntry*)fEPhi1->GetNumberEntry();
110  nef->SetToolTipText("Enter the starting phi angle[deg]");
111  fEPhi1->Associate(this);
112  f1->AddFrame(fEPhi1, new TGLayoutHints(kLHintsRight, 2, 2, 4, 4));
113  AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
114 
115  // Number entry for Dphi
116  f1 = new TGCompositeFrame(this, 155, 10, kHorizontalFrame | kFixedWidth);
117  f1->AddFrame(new TGLabel(f1, "Dphi"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
118  fEDphi = new TGNumberEntry(f1, 0., 5, kTORUS_DPHI);
121  nef = (TGTextEntry*)fEDphi->GetNumberEntry();
122  nef->SetToolTipText("Enter the extent phi Dphi [deg]");
123  fEDphi->Associate(this);
124  f1->AddFrame(fEDphi, new TGLayoutHints(kLHintsRight, 2, 2, 4, 4));
125  AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
126 
127  // Delayed draw
128  f1 = new TGCompositeFrame(this, 155, 10, kHorizontalFrame | kFixedWidth | kSunkenFrame);
129  fDelayed = new TGCheckButton(f1, "Delayed draw");
130  f1->AddFrame(fDelayed, new TGLayoutHints(kLHintsLeft , 2, 2, 4, 4));
131  AddFrame(f1, new TGLayoutHints(kLHintsLeft, 6, 6, 4, 4));
132 
133  // Buttons
134  f1 = new TGCompositeFrame(this, 155, 10, kHorizontalFrame | kFixedWidth);
135  fApply = new TGTextButton(f1, "Apply");
136  f1->AddFrame(fApply, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
137  fApply->Associate(this);
138  fUndo = new TGTextButton(f1, "Undo");
139  f1->AddFrame(fUndo, new TGLayoutHints(kLHintsRight , 2, 2, 4, 4));
140  fUndo->Associate(this);
141  AddFrame(f1, new TGLayoutHints(kLHintsLeft, 6, 6, 4, 4));
143 }
144 
145 ////////////////////////////////////////////////////////////////////////////////
146 /// Destructor
147 
149 {
150  TGFrameElement *el;
151  TIter next(GetList());
152  while ((el = (TGFrameElement *)next())) {
153  if (el->fFrame->IsComposite())
155  }
156  Cleanup();
157 }
158 
159 ////////////////////////////////////////////////////////////////////////////////
160 /// Connect signals to slots.
161 
163 {
164  fApply->Connect("Clicked()", "TGeoTorusEditor", this, "DoApply()");
165  fUndo->Connect("Clicked()", "TGeoTorusEditor", this, "DoUndo()");
166  fShapeName->Connect("TextChanged(const char *)", "TGeoTorusEditor", this, "DoModified()");
167  fER->Connect("ValueSet(Long_t)", "TGeoTorusEditor", this, "DoR()");
168  fERmin->Connect("ValueSet(Long_t)", "TGeoTorusEditor", this, "DoRmin()");
169  fERmax->Connect("ValueSet(Long_t)", "TGeoTorusEditor", this, "DoRmax()");
170  fEPhi1->Connect("ValueSet(Long_t)", "TGeoTorusEditor", this, "DoPhi1()");
171  fEDphi->Connect("ValueSet(Long_t)", "TGeoTorusEditor", this, "DoDphi()");
172  fER->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoTorusEditor", this, "DoModified()");
173  fERmin->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoTorusEditor", this, "DoModified()");
174  fERmax->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoTorusEditor", this, "DoModified()");
175  fEPhi1->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoTorusEditor", this, "DoModified()");
176  fEDphi->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoTorusEditor", this, "DoModified()");
177  fInit = kFALSE;
178 }
179 
180 
181 ////////////////////////////////////////////////////////////////////////////////
182 /// Connect to the selected object.
183 
185 {
186  if (obj == 0 || (obj->IsA()!=TGeoTorus::Class())) {
187  SetActive(kFALSE);
188  return;
189  }
190  fShape = (TGeoTorus*)obj;
191  fRi = fShape->GetR();
192  fRmini = fShape->GetRmin();
193  fRmaxi = fShape->GetRmax();
194  fPhi1i = fShape->GetPhi1();
195  fDphii = fShape->GetDphi();
196  const char *sname = fShape->GetName();
197  if (!strcmp(sname, fShape->ClassName())) fShapeName->SetText("-no_name");
198  else {
199  fShapeName->SetText(sname);
200  fNamei = sname;
201  }
202  fER->SetNumber(fRi);
209 
211  SetActive();
212 }
213 
214 ////////////////////////////////////////////////////////////////////////////////
215 /// Check if shape drawing is delayed.
216 
218 {
219  return (fDelayed->GetState() == kButtonDown);
220 }
221 
222 ////////////////////////////////////////////////////////////////////////////////
223 /// Slot for name.
224 
226 {
227  DoModified();
228 }
229 
230 ////////////////////////////////////////////////////////////////////////////////
231 /// Slot for applying current settings.
232 
234 {
235  const char *name = fShapeName->GetText();
236  if (strcmp(name,fShape->GetName())) fShape->SetName(name);
237  Double_t r = fER->GetNumber();
238  Double_t rmax = fERmax->GetNumber();
239  Double_t rmin = fERmin->GetNumber();
240  Double_t phi = fEPhi1->GetNumber();
241  Double_t dphi = fEDphi->GetNumber();
242  Double_t param[5];
243  param[0] = r;
244  param[1] = rmin;
245  param[2] = rmax;
246  param[3] = phi;
247  param[4] = dphi;
248  fShape->SetDimensions(param);
249  fShape->ComputeBBox();
250  fUndo->SetEnabled();
252  if (fPad) {
254  TView *view = fPad->GetView();
255  if (!view) {
256  fShape->Draw();
257  fPad->GetView()->ShowAxis();
258  } else {
259  view->SetRange(-fShape->GetDX(), -fShape->GetDY(), -fShape->GetDZ(),
260  fShape->GetDX(), fShape->GetDY(), fShape->GetDZ());
261  Update();
262  }
263  } else Update();
264  }
265 }
266 
267 ////////////////////////////////////////////////////////////////////////////////
268 /// Slot for notifying modifications.
269 
271 {
272  fApply->SetEnabled();
273 }
274 
275 ////////////////////////////////////////////////////////////////////////////////
276 /// Slot for undoing last operation.
277 
279 {
280  fER->SetNumber(fRi);
285  DoApply();
288 }
289 
290 ////////////////////////////////////////////////////////////////////////////////
291 /// Slot for R.
292 
294 {
295  Double_t r = fER->GetNumber();
296  Double_t rmax = fERmax->GetNumber();
297  if (r<rmax) {
298  r = rmax;
299  fER->SetNumber(r);
300  }
301  DoModified();
302  if (!IsDelayed()) DoApply();
303 }
304 
305 ////////////////////////////////////////////////////////////////////////////////
306 /// Slot for Rmin.
307 
309 {
310  Double_t rmin = fERmin->GetNumber();
311  Double_t rmax = fERmax->GetNumber();
312  if (rmin>rmax) {
313  rmin = rmax-0.1;
314  fERmin->SetNumber(rmin);
315  }
316  DoModified();
317  if (!IsDelayed()) DoApply();
318 }
319 
320 ////////////////////////////////////////////////////////////////////////////////
321 /// Slot for Rmax.
322 
324 {
325  Double_t r = fER->GetNumber();
326  Double_t rmin = fERmin->GetNumber();
327  Double_t rmax = fERmax->GetNumber();
328  if (rmax<=rmin) {
329  rmax = rmin+0.1;
330  fERmax->SetNumber(rmax);
331  }
332  if (rmax>r) {
333  rmax = r;
334  fERmax->SetNumber(rmax);
335  }
336  DoModified();
337  if (!IsDelayed()) DoApply();
338 }
339 
340 ////////////////////////////////////////////////////////////////////////////////
341 /// Slot for phi.
342 
344 {
345  Double_t phi = fEPhi1->GetNumber();
346  if (phi<0 || phi>360) {
347  phi = 0;
348  fEPhi1->SetNumber(phi);
349  }
350  DoModified();
351  if (!IsDelayed()) DoApply();
352 }
353 
354 ////////////////////////////////////////////////////////////////////////////////
355 /// Slot for Dphi.
356 
358 {
359  Double_t dphi = fEDphi->GetNumber();
360  if (dphi<=0 || dphi>360) {
361  dphi = 1;
362  fEDphi->SetNumber(dphi);
363  }
364  DoModified();
365  if (!IsDelayed()) DoApply();
366 }
367 
virtual void Resize(UInt_t w=0, UInt_t h=0)
Resize the frame.
Definition: TGFrame.cxx:587
TGCheckButton * fDelayed
Double_t GetDphi() const
Definition: TGeoTorus.h:73
TGTextButton * fApply
void DoDphi()
Slot for Dphi.
void DoApply()
Slot for applying current settings.
void DoUndo()
Slot for undoing last operation.
virtual Double_t GetDX() const
Definition: TGeoBBox.h:70
TVirtualGeoPainter * GetPainter() const
Definition: TGeoManager.h:190
virtual void SetToolTipText(const char *text, Long_t delayms=500)
Set tool tip text associated with this text entry.
virtual void SetName(const char *name)
Set the name of the TNamed.
Definition: TNamed.cxx:140
Double_t GetR() const
Definition: TGeoTorus.h:69
virtual void SetNumber(Double_t val)
See TView3D.
Definition: TView.h:25
Double_t GetRmin() const
Definition: TGeoTorus.h:70
Torus segment class.
Definition: TGeoTorus.h:17
virtual void SetRange(const Double_t *min, const Double_t *max)=0
virtual Bool_t IsPaintingShape() const =0
TGNumberEntry * fERmin
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
Editor for a TGeoTorus.
TGeoTorusEditor(const TGWindow *p=0, Int_t width=140, Int_t height=30, UInt_t options=kChildFrame, Pixel_t back=GetDefaultFrameBackground())
Constructor for torus editor.
virtual Bool_t IsComposite() const
Definition: TGFrame.h:259
TGNumberEntry * fEPhi1
virtual void ConnectSignals2Slots()
Connect signals to slots.
static void Cleanup(TGCompositeFrame *frame)
Static method to cleanup hierarchically all daughters of a composite frame.
TGNumberEntry * fERmax
virtual const char * ClassName() const
Returns name of class to which the object belongs.
Definition: TObject.cxx:128
ULong_t Pixel_t
Definition: GuiTypes.h:39
void Class()
Definition: Class.C:29
void DoR()
Slot for R.
virtual void SetActive(Bool_t active=kTRUE)
Set active GUI attribute frames related to the selected object.
TGCompositeFrame(const TGCompositeFrame &)
void DoModified()
Slot for notifying modifications.
virtual TList * GetList() const
Definition: TGFrame.h:369
virtual ~TGeoTorusEditor()
Destructor.
virtual EButtonState GetState() const
Definition: TGButton.h:112
TGeoTorus * fShape
virtual TView * GetView() const =0
void DoPhi1()
Slot for phi.
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.
void DoRmin()
Slot for Rmin.
TGNumberEntry * fER
virtual void SetSize(const TGDimension &s)
Definition: TGFrame.h:299
ROOT::R::TRInterface & r
Definition: Object.C:4
Bool_t IsDelayed() const
Check if shape drawing is delayed.
TGTextButton * fUndo
virtual void Associate(const TGWindow *w)
Definition: TGWidget.h:84
unsigned int UInt_t
Definition: RtypesCore.h:42
TGFrame * fFrame
Definition: TGLayout.h:119
virtual void ShowAxis()=0
virtual Double_t GetDY() const
Definition: TGeoBBox.h:71
void SetNumAttr(EAttribute attr=kNEAAnyNumber)
const Bool_t kFALSE
Definition: RtypesCore.h:88
TGDimension GetSize() const
Definition: TGFrame.h:277
const char * GetText() const
Definition: TGTextEntry.h:134
virtual UInt_t GetDefaultHeight() const
Definition: TGFrame.h:238
Double_t GetRmax() const
Definition: TGeoTorus.h:71
#define ClassImp(name)
Definition: Rtypes.h:359
R__EXTERN TGeoManager * gGeoManager
Definition: TGeoManager.h:559
double Double_t
Definition: RtypesCore.h:55
virtual void SetModel(TObject *obj)
Connect to the selected object.
virtual void SetEnabled(Bool_t e=kTRUE)
Set enabled or disabled state of button.
Definition: TGButton.cxx:409
virtual Double_t GetNumber() const
virtual void SetDimensions(Double_t *param)
Set torus dimensions starting from a list.
Definition: TGeoTorus.cxx:785
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=0)
Add frame to the composite frame using the specified layout hints.
Definition: TGFrame.cxx:1099
Mother of all ROOT objects.
Definition: TObject.h:37
Double_t GetPhi1() const
Definition: TGeoTorus.h:72
virtual void ComputeBBox()
Compute bounding box of the torus.
Definition: TGeoTorus.cxx:124
Bool_t fInit
Definition: TGedFrame.h:53
TGNumberEntryField * GetNumberEntry() const
TGNumberEntry * fEDphi
TF1 * f1
Definition: legend1.C:11
void DoRmax()
Slot for Rmax.
virtual void Update()
Override Update from TGedFrame as fGedEditor can be null.
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...
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
const Bool_t kTRUE
Definition: RtypesCore.h:87
TGTextEntry * fShapeName
virtual void MakeTitle(const char *title)
Create attribute frame title.
Definition: TGedFrame.cxx:96
void DoName()
Slot for name.
char name[80]
Definition: TGX11.cxx:109
UInt_t GetDefaultHeight() const
Common base class for geombuilder editors.
Definition: TGeoGedFrame.h:13
virtual Double_t GetDZ() const
Definition: TGeoBBox.h:72
ETGeoTorusWid