Logo ROOT  
Reference Guide
TGLPShapeObjEditor.cxx
Go to the documentation of this file.
1// @(#)root/gl:$Id$
2// Author: Matevz Tadel 25/09/2006
3
4#include <cstring>
5
7#include "TGLPShapeObj.h"
8#include "TGedEditor.h"
9
10#include "TG3DLine.h"
11#include "TGButton.h"
12#include "TGButtonGroup.h"
13#include "TString.h"
14#include "TGLabel.h"
15#include "TGSlider.h"
16#include "TGNumberEntry.h"
17#include "TROOT.h"
18#include "TVirtualMutex.h"
19
20#include "TVirtualX.h"
21#include "TGLViewer.h"
22#include "TGLUtil.h"
23#include "TGLPhysicalShape.h"
24#include "TGLWidget.h"
25#include "TGLIncludes.h"
26
27#include "Buttons.h"
28
29/** \class TGLPShapeObjEditor
30\ingroup opengl
31GUI editor for TGLPShapeObj.
32*/
33
35
43 kTot
44};
45
53};
54
63 kNEat
64};
65
66////////////////////////////////////////////////////////////////////////////////
67/// Constructor of TGLPhysicalShape editor GUI.
68
70 : TGedFrame(p, width, height, options | kVerticalFrame, back),
71 fLb(kLHintsTop | kLHintsCenterX | kLHintsExpandX, 2, 2, 3, 3), //button
72 fLe(kLHintsTop | kLHintsCenterX | kLHintsExpandX, 0, 0, 3, 3), //entries
73 fLl(kLHintsLeft, 0, 8, 6, 0), // labels
74 fLs(kLHintsTop | kLHintsCenterX, 2, 2, 0, 0), ///sliders
75 fGeoFrame(0),fGeoApplyButton(0),
76 fColorFrame(0),
77 fRedSlider(0), fGreenSlider(0), fBlueSlider(0), fAlphaSlider(0), fShineSlider(0),
78 fColorApplyButton(0), fColorApplyFamily(0),
79 fRGBA(),
80 fPShapeObj(0)
81{
82 fRGBA[12] = fRGBA[13] = fRGBA[14] = 0.0f;
83 fRGBA[15] = 1.0f;
84 fRGBA[16] = 60.0f;
85
88}
89
90////////////////////////////////////////////////////////////////////////////////
91/// Destroy color editor GUI component.
92/// Done automatically.
93
95{
96}
97
98////////////////////////////////////////////////////////////////////////////////
99/// Shape has changed.
100/// Check if set to zero and make sure we're no longer in editor.
101
103{
105 if (shape == 0 && fGedEditor->GetModel() == fPShapeObj)
107}
108
109////////////////////////////////////////////////////////////////////////////////
110/// Shape has been modified.
111/// Update editor if we're still shown. Otherwise unref.
112
114{
117 else
118 SetPShape(0);
119}
120
121////////////////////////////////////////////////////////////////////////////////
122/// Sets model or disables/hides viewer.
123
125{
126 fPShapeObj = 0;
127
128 fPShapeObj = static_cast<TGLPShapeObj *>(obj);
130
135}
136
137////////////////////////////////////////////////////////////////////////////////
138/// Set internal center data from 3 component 'c'.
139
141{
145}
146
147////////////////////////////////////////////////////////////////////////////////
148/// Set internal scale data from 3 component 'c'.
149
151{
155}
156
157////////////////////////////////////////////////////////////////////////////////
158/// Process 'Apply' - update the viewer object from GUI.
159
161{
162 TGLVertex3 trans;
163 TGLVector3 scale;
164 GetObjectData(trans.Arr(), scale.Arr());
165 if (fPShape) {
166 fPShape->SetTranslation(trans);
167 fPShape->Scale(scale);
168 }
171}
172
173////////////////////////////////////////////////////////////////////////////////
174/// Extract the GUI object data, return center in 3 component 'center'
175/// scale in 3 component 'scale'.
176
178{
179 center[0] = fGeomData[kCenterX]->GetNumber();
180 center[1] = fGeomData[kCenterY]->GetNumber();
181 center[2] = fGeomData[kCenterZ]->GetNumber();
182 scale[0] = fGeomData[kScaleX]->GetNumber();
183 scale[1] = fGeomData[kScaleY]->GetNumber();
184 scale[2] = fGeomData[kScaleZ]->GetNumber();
185}
186
187////////////////////////////////////////////////////////////////////////////////
188/// Process setting of value in edit box - activate 'Apply' button.
189
191{
194}
195
196////////////////////////////////////////////////////////////////////////////////
197/// Create GUI for setting scale and position.
198
200{
202
203 TGLabel *label=0;
204
205 // Postion container
206 TGGroupFrame* container = new TGGroupFrame(fGeoFrame, "Object position:");
208 fGeoFrame->AddFrame(container, new TGLayoutHints(kLHintsTop | kLHintsCenterX | kLHintsExpandX, 8, 8, 3, 3));//-
210
212
213 hf = new TGHorizontalFrame(container);
214 label = new TGLabel(hf, "X:");
215 hf->AddFrame(label, new TGLayoutHints(fLl));
216 fGeomData[kCenterX] = new TGNumberEntry(hf, 0.0, 8, kNExc);
218 fGeomData[kCenterX]->Connect("ValueSet(Long_t)", "TGLPShapeObjEditor",
219 this, "GeoValueSet(Long_t)");
220 container->AddFrame(hf, new TGLayoutHints(lh));
221
222 hf = new TGHorizontalFrame(container);
223 label = new TGLabel(hf, "Y:");
224 hf->AddFrame(label, new TGLayoutHints(fLl));
225 fGeomData[kCenterY] = new TGNumberEntry(hf, 0.0, 8, kNEyc);
227 fGeomData[kCenterY]->Connect("ValueSet(Long_t)", "TGLPShapeObjEditor",
228 this, "GeoValueSet(Long_t)");
229 container->AddFrame(hf, new TGLayoutHints(lh));
230
231 hf = new TGHorizontalFrame(container);
232 hf->AddFrame(new TGLabel(hf, "Z:"), new TGLayoutHints(fLl));
233 fGeomData[kCenterZ] = new TGNumberEntry(hf, 1.0, 8, kNEzc);
235 fGeomData[kCenterZ]->Connect("ValueSet(Long_t)", "TGLPShapeObjEditor",
236 this, "GeoValueSet(Long_t)");
237 container->AddFrame(hf, new TGLayoutHints(lh));
238
239 // Scale container
240 TGGroupFrame* osf = new TGGroupFrame(fGeoFrame, "Object scale:", kLHintsTop | kLHintsCenterX);
243
244 hf = new TGHorizontalFrame(osf);
245 hf->AddFrame(new TGLabel(hf, "X:"),new TGLayoutHints(fLl));
246 fGeomData[kScaleX] = new TGNumberEntry(hf, 1.0, 5, kNExs);
248 fGeomData[kScaleX]->Connect("ValueSet(Long_t)", "TGLPShapeObjEditor",
249 this, "GeoValueSet(Long_t)");
250 osf->AddFrame(hf, new TGLayoutHints(lh));
251
252 hf = new TGHorizontalFrame(osf);
253 hf->AddFrame(new TGLabel(hf, "Y:"),new TGLayoutHints(fLl));
254 fGeomData[kScaleY] = new TGNumberEntry(hf, 1.0, 5, kNEys);
256 fGeomData[kScaleY]->Connect("ValueSet(Long_t)", "TGLPShapeObjEditor",
257 this, "GeoValueSet(Long_t)");
258 osf->AddFrame(hf, new TGLayoutHints(lh));
259
260 hf = new TGHorizontalFrame(osf);
261 hf->AddFrame(new TGLabel(hf, "Z:"),new TGLayoutHints(fLl));
262 fGeomData[kScaleZ] = new TGNumberEntry(hf, 1.0, 5, kNEzs);
264 fGeomData[kScaleZ]->Connect("ValueSet(Long_t)", "TGLPShapeObjEditor",
265 this, "GeoValueSet(Long_t)");
266 osf->AddFrame(hf, new TGLayoutHints(lh));
267
268 hf = new TGHorizontalFrame(osf);
272 osf->AddFrame(hf, new TGLayoutHints(lh));
273
274 // Modify button
275 fGeoApplyButton = new TGTextButton(fGeoFrame, "Modify object");
278 fGeoApplyButton->Connect("Pressed()", "TGLPShapeObjEditor", this, "DoGeoButton()");
279}
280
281////////////////////////////////////////////////////////////////////////////////
282/// Set color sliders from 17 component 'rgba'.
283
285{
288
289 for (Int_t i = 0; i < 17; ++i) fRGBA[i] = rgba[i];
290
292 fGreenSlider->SetPosition(Int_t(fRGBA[fLMode * 4 + 1] * 100));
293 fBlueSlider->SetPosition(Int_t(fRGBA[fLMode * 4 + 2] * 100));
295
296 DrawSphere();
297}
298
299////////////////////////////////////////////////////////////////////////////////
300/// Process slider movement.
301
303{
304 TGSlider *frm = (TGSlider *)gTQSender;
305
306 if (frm) {
307 Int_t wid = frm->WidgetId();
308
309 switch (wid) {
310 case kHSr:
311 fRGBA[fLMode * 4] = val / 100.f;
312 break;
313 case kHSg:
314 fRGBA[fLMode * 4 + 1] = val / 100.f;
315 break;
316 case kHSb:
317 fRGBA[fLMode * 4 + 2] = val / 100.f;
318 break;
319 case kHSa:
320 fRGBA[fLMode * 4 + 3] = val / 100.f;
321 break;
322 case kHSs:
323 fRGBA[16] = val;
324 break;
325 }
326
329 DrawSphere();
330 }
331}
332
333////////////////////////////////////////////////////////////////////////////////
334/// Process button action.
335
337{
338 TGButton *btn = (TGButton *) gTQSender;
339 Int_t id = btn->WidgetId();
340
341 switch (id) {
342 case kCPd:
346 break;
347 case kCPa:
351 break;
352 case kCPs:
356 break;
357 case kCPe:
361 break;
362 case kTBa:
365 if (fPShape) {
367 }
369 break;
370 case kTBaf:
373 if (fPShape) {
375 }
377 break;
378 }
379}
380
381////////////////////////////////////////////////////////////////////////////////
382/// Create Diffuse/Ambient/Specular/Emissive radio buttons and sub-frames.
383
385{
386 TGGroupFrame *partFrame = new TGGroupFrame(fColorFrame, "Color components:", kLHintsTop | kLHintsCenterX);
387 fColorFrame->AddFrame(partFrame, new TGLayoutHints(kLHintsTop | kLHintsCenterX, 2, 0, 2, 2));
388
390 TGMatrixLayout *ml = new TGMatrixLayout(partFrame, 0, 1, 10);
391 partFrame->SetLayoutManager(ml);
392
393 // partFrame will delete the layout manager ml for us so don't add to fTrash
394 fLightTypes[kDiffuse] = new TGRadioButton(partFrame, "Diffuse", kCPd);
395 fLightTypes[kDiffuse]->Connect("Pressed()", "TGLPShapeObjEditor", this, "DoColorButton()");
396 fLightTypes[kDiffuse]->SetToolTipText("Diffuse component of color");
397 partFrame->AddFrame(fLightTypes[kDiffuse]);
398
399 fLightTypes[kAmbient] = new TGRadioButton(partFrame, "Ambient", kCPa);
400 fLightTypes[kAmbient]->Connect("Pressed()", "TGLPShapeObjEditor", this, "DoColorButton()");
401 fLightTypes[kAmbient]->SetToolTipText("Ambient component of color");
402 partFrame->AddFrame(fLightTypes[kAmbient]);
403
404 fLightTypes[kSpecular] = new TGRadioButton(partFrame, "Specular", kCPs);
405 fLightTypes[kSpecular]->Connect("Pressed()", "TGLPShapeObjEditor", this, "DoColorButton()");
406 fLightTypes[kSpecular]->SetToolTipText("Specular component of color");
407 partFrame->AddFrame(fLightTypes[kSpecular]);
408
409 fLightTypes[kEmission] = new TGRadioButton(partFrame, "Emissive", kCPe);
410 fLightTypes[kEmission]->Connect("Pressed()", "TGLPShapeObjEditor", this, "DoColorButton()");
411 fLightTypes[kEmission]->SetToolTipText("Emissive component of color");
412 partFrame->AddFrame(fLightTypes[kEmission]);
413
416}
417
418////////////////////////////////////////////////////////////////////////////////
419/// Create GUI for setting light color.
420
422{
423 UInt_t sw = 120; //fColorFrame->GetDefalutWidth();,
424
425 // Create Red/Green/BlueAlpha/Shine sliders
426 fColorFrame->AddFrame(new TGLabel(fColorFrame, "Red :"), new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 0, 0, 0));
428 fRedSlider->Connect("PositionChanged(Int_t)", "TGLPShapeObjEditor", this, "DoColorSlider(Int_t)");
429 fRedSlider->SetRange(0, 100);
430 fRedSlider->SetPosition(Int_t(fRGBA[0] * 100));
432
433
434 fColorFrame->AddFrame(new TGLabel(fColorFrame, "Green :"), new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 0, 0, 0));
436 fGreenSlider->Connect("PositionChanged(Int_t)", "TGLPShapeObjEditor", this, "DoColorSlider(Int_t)");
437 fGreenSlider->SetRange(0, 100);
440
441
442 fColorFrame->AddFrame(new TGLabel(fColorFrame, "Blue :"), new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 0, 0, 0));
444 fBlueSlider->Connect("PositionChanged(Int_t)", "TGLPShapeObjEditor", this, "DoColorSlider(Int_t)");
445 fBlueSlider->SetRange(0, 100);
448
449 fColorFrame->AddFrame(new TGLabel(fColorFrame, "Shine :"), new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 0, 0, 0));
451 fShineSlider->Connect("PositionChanged(Int_t)", "TGLPShapeObjEditor", this, "DoColorSlider(Int_t)");
452 fShineSlider->SetRange(0, 128);
454}
455
456////////////////////////////////////////////////////////////////////////////////
457/// Update GUI sliders from internal data.
458
460{
462 fGreenSlider->SetPosition(Int_t(fRGBA[fLMode * 4 + 1] * 100));
463 fBlueSlider->SetPosition(Int_t(fRGBA[fLMode * 4 + 2] * 100));
464 // fAlphaSlider->SetPosition(Int_t(fRGBA[fLMode * 4 + 3] * 100));
465
466 if (fRGBA[16] >= 0.f)
468}
469
470////////////////////////////////////////////////////////////////////////////////
471/// Redraw widget. Render sphere and pass to base-class.
472
474{
475 DrawSphere();
477}
478
479////////////////////////////////////////////////////////////////////////////////
480
481namespace {
482 GLUquadric *GetQuadric()
483 {
484 // GLU quadric.
485
486 static struct Init {
487 Init()
488 {
489 fQuad = gluNewQuadric();
490 if (!fQuad) {
491 Error("GetQuadric::Init", "could not create quadric object");
492 } else {
493 gluQuadricOrientation(fQuad, (GLenum)GLU_OUTSIDE);
494 gluQuadricDrawStyle(fQuad, (GLenum)GLU_FILL);
495 gluQuadricNormals(fQuad, (GLenum)GLU_FLAT);
496 }
497 }
498 ~Init()
499 {
500 if(fQuad)
501 gluDeleteQuadric(fQuad);
502 }
503 GLUquadric *fQuad;
504 }singleton;
505
506 return singleton.fQuad;
507 }
508
509}
510
511////////////////////////////////////////////////////////////////////////////////
512/// Draw local sphere reflecting current color options.
513
515{
516 if (!gVirtualX->IsCmdThread()) {
517 gROOT->ProcessLineFast(Form("((TGLPShapeObjEditor *)0x%zx)->DrawSphere()", (size_t)this));
518 return;
519 }
520
522
524 glViewport(0, 0, fMatView->GetWidth(), fMatView->GetHeight());
525 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
526
527 glEnable(GL_LIGHTING);
528 glEnable(GL_LIGHT0);
529 glEnable(GL_DEPTH_TEST);
530 glEnable(GL_CULL_FACE);
531 glCullFace(GL_BACK);
532 glMatrixMode(GL_PROJECTION);
533 glLoadIdentity();
534 glFrustum(-0.5, 0.5, -0.5, 0.5, 1., 10.);
535 glMatrixMode(GL_MODELVIEW);
536 glLoadIdentity();
537 Float_t ligPos[] = {0.f, 0.f, 0.f, 1.f};
538 glLightfv(GL_LIGHT0, GL_POSITION, ligPos);
539 glTranslated(0., 0., -3.);
540
541 const Float_t whiteColor[] = {1.f, 1.f, 1.f, 1.f};
542 const Float_t nullColor[] = {0.f, 0.f, 0.f, 1.f};
543
544 if (fRGBA[16] < 0.f) {
545 glLightfv(GL_LIGHT0, GL_DIFFUSE, fRGBA);
546 glLightfv(GL_LIGHT0, GL_AMBIENT, fRGBA + 4);
547 glLightfv(GL_LIGHT0, GL_SPECULAR, fRGBA + 8);
548 glMaterialfv(GL_FRONT, GL_DIFFUSE, whiteColor);
549 glMaterialfv(GL_FRONT, GL_AMBIENT, nullColor);
550 glMaterialfv(GL_FRONT, GL_SPECULAR, whiteColor);
551 glMaterialfv(GL_FRONT, GL_EMISSION, nullColor);
552 glMaterialf(GL_FRONT, GL_SHININESS, 60.f);
553 } else {
554 glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteColor);
555 glLightfv(GL_LIGHT0, GL_AMBIENT, nullColor);
556 glLightfv(GL_LIGHT0, GL_SPECULAR, whiteColor);
557 glMaterialfv(GL_FRONT, GL_DIFFUSE, fRGBA);
558 glMaterialfv(GL_FRONT, GL_AMBIENT, fRGBA + 4);
559 glMaterialfv(GL_FRONT, GL_SPECULAR, fRGBA + 8);
560 glMaterialfv(GL_FRONT, GL_EMISSION, fRGBA + 12);
561 glMaterialf(GL_FRONT, GL_SHININESS, fRGBA[16]);
562 }
563
564 glEnable(GL_BLEND);
565 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
566 GLUquadric * quad = GetQuadric();
567 if (quad) {
568 glRotated(-90., 1., 0., 0.);
569 gluSphere(quad, 1., 100, 100);
570 }
571 glDisable(GL_BLEND);
572
574}
575
576////////////////////////////////////////////////////////////////////////////////
577/// Create widgets to chose colors component and its RGBA values on fGedEditor
578/// model or family it belongs to.
579
581{
582 fColorFrame = this;
583
586
588
590
591 //apply button creation
595 fColorApplyButton->Connect("Pressed()", "TGLPShapeObjEditor", this, "DoColorButton()");
596 //apply to family button creation
597 fColorApplyFamily = new TGTextButton(fColorFrame, "Apply to family", kTBaf);
600 fColorApplyFamily->Connect("Pressed()", "TGLPShapeObjEditor", this, "DoColorButton()");
601}
@ kButton1Down
Definition: Buttons.h:17
#define GLU_OUTSIDE
Definition: GL_glu.h:203
#define GLU_FLAT
Definition: GL_glu.h:199
unsigned int GLenum
Definition: GL_glu.h:266
#define GLU_FILL
Definition: GL_glu.h:191
@ kVerticalFrame
Definition: GuiTypes.h:381
ULong_t Pixel_t
Pixel value.
Definition: GuiTypes.h:40
#define c(i)
Definition: RSha256.hxx:101
int Int_t
Definition: RtypesCore.h:45
unsigned int UInt_t
Definition: RtypesCore.h:46
const Bool_t kFALSE
Definition: RtypesCore.h:101
long Long_t
Definition: RtypesCore.h:54
double Double_t
Definition: RtypesCore.h:59
float Float_t
Definition: RtypesCore.h:57
const Bool_t kTRUE
Definition: RtypesCore.h:100
#define ClassImp(name)
Definition: Rtypes.h:364
include TDocParser_001 C image html pict1_TDocParser_001 png width
Definition: TDocParser.cxx:121
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
Definition: TError.cxx:187
@ kButtonDown
Definition: TGButton.h:54
@ kButtonDisabled
Definition: TGButton.h:56
@ kButtonUp
Definition: TGButton.h:53
EApplyButtonIds
@ kTBEndOfList
EGLEditorIdent
@ kCenterY
@ kCenterX
@ kCenterZ
@ kLHintsLeft
Definition: TGLayout.h:24
@ kLHintsCenterX
Definition: TGLayout.h:25
@ kLHintsTop
Definition: TGLayout.h:27
@ kLHintsExpandX
Definition: TGLayout.h:30
@ kScaleBoth
Definition: TGSlider.h:36
@ kSlider1
Definition: TGSlider.h:30
R__EXTERN void * gTQSender
Definition: TQObject.h:44
R__EXTERN TVirtualMutex * gROOTMutex
Definition: TROOT.h:61
#define gROOT
Definition: TROOT.h:404
char * Form(const char *fmt,...)
#define R__LOCKGUARD(mutex)
#define gVirtualX
Definition: TVirtualX.h:338
A button abstract base class.
Definition: TGButton.h:68
virtual void SetToolTipText(const char *text, Long_t delayms=400)
Set tool tip text associated with this button.
Definition: TGButton.cxx:445
virtual EButtonState GetState() const
Definition: TGButton.h:112
virtual void SetState(EButtonState state, Bool_t emit=kFALSE)
Set button state.
Definition: TGButton.cxx:235
virtual void SetLayoutManager(TGLayoutManager *l)
Set the layout manager for the composite frame.
Definition: TGFrame.cxx:1000
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=0)
Add frame to the composite frame using the specified layout hints.
Definition: TGFrame.cxx:1117
virtual void DoRedraw()
Redraw the frame.
Definition: TGFrame.cxx:430
UInt_t GetHeight() const
Definition: TGFrame.h:225
UInt_t GetWidth() const
Definition: TGFrame.h:224
A composite frame with a border and a title.
Definition: TGFrame.h:523
virtual void SetTitlePos(ETitlePos pos=kLeft)
Definition: TGFrame.h:565
Concrete class for horizontal slider.
Definition: TGSlider.h:128
A composite frame that layout their children in horizontal way.
Definition: TGFrame.h:386
GUI editor for TGLPShapeObj.
TGButton * fColorApplyFamily
void SetColorSlidersPos()
Update GUI sliders from internal data.
void CreateColorSliders()
Create GUI for setting light color.
TGCompositeFrame * fColorFrame
TGButton * fLightTypes[4]
void CreateGeoControls()
Create GUI for setting scale and position.
TGNumberEntry * fGeomData[6]
void GeoValueSet(Long_t unusedVal)
Process setting of value in edit box - activate 'Apply' button.
virtual void PShapeModified()
Shape has been modified.
~TGLPShapeObjEditor()
Destroy color editor GUI component.
void SetScale(const Double_t *scale)
Set internal scale data from 3 component 'c'.
TGLPShapeObj * fPShapeObj
TGButton * fColorApplyButton
TGLPShapeObjEditor(const TGWindow *p=0, Int_t width=140, Int_t height=30, UInt_t options=kChildFrame, Pixel_t back=GetDefaultFrameBackground())
Constructor of TGLPhysicalShape editor GUI.
void DoColorButton()
Process button action.
void DrawSphere() const
Draw local sphere reflecting current color options.
virtual void DoRedraw()
Redraw widget. Render sphere and pass to base-class.
void CreateColorControls()
Create widgets to chose colors component and its RGBA values on fGedEditor model or family it belongs...
virtual void SetPShape(TGLPhysicalShape *shape)
Shape has changed.
TGCompositeFrame * fGeoFrame
virtual void SetModel(TObject *obj)
Sets model or disables/hides viewer.
const Float_t * GetRGBA() const
void SetRGBA(const Float_t *rgba)
Set color sliders from 17 component 'rgba'.
void CreateColorRadioButtons()
Create Diffuse/Ambient/Specular/Emissive radio buttons and sub-frames.
void SetCenter(const Double_t *center)
Set internal center data from 3 component 'c'.
void DoGeoButton()
Process 'Apply' - update the viewer object from GUI.
void GetObjectData(Double_t *shift, Double_t *scale)
Extract the GUI object data, return center in 3 component 'center' scale in 3 component 'scale'.
void DoColorSlider(Int_t val)
Process slider movement.
Wrap TGLPysicalShape into TObject so that it can be edited using GED.
Definition: TGLPShapeObj.h:21
TGLViewer * fViewer
Definition: TGLPShapeObj.h:24
TGLPhysicalShape * fPShape
Definition: TGLPShapeObj.h:23
virtual void SetPShape(TGLPhysicalShape *shape)
Set the shape.
TGLPhysicalShape * fPShape
Definition: TGLPShapeRef.h:29
Concrete physical shape - a GL drawable.
void Scale(const TGLVector3 &scale)
const Float_t * Color() const
TGLVector3 GetScale() const
void SetColor(const Float_t rgba[17])
Set full color attributes - see OpenGL material documentation for full description.
TGLVertex3 GetTranslation() const
void SetColorOnFamily(const Float_t rgba[17])
Set full color attributes to all physicals sharing the same logical with this object.
void SetTranslation(const TGLVertex3 &translation)
3 component (x/y/z) vector class.
Definition: TGLUtil.h:248
3 component (x/y/z) vertex class.
Definition: TGLUtil.h:84
Double_t * Arr()
Definition: TGLUtil.h:127
const Double_t * CArr() const
Definition: TGLUtil.h:126
void RequestDraw(Short_t LOD=TGLRnrCtx::kLODMed)
Post request for redraw of viewer at level of detail 'LOD' Request is directed via cross thread gVirt...
Definition: TGLViewer.cxx:437
Bool_t MakeCurrent()
Make the gl-context current.
Definition: TGLWidget.cxx:201
static TGLWidget * Create(const TGWindow *parent, Bool_t selectInput, Bool_t shareDefault, const TGLPaintDevice *shareDevice, UInt_t width, UInt_t height)
Static constructor for creating widget with default pixel format.
Definition: TGLWidget.cxx:83
void SwapBuffers()
Swap buffers.
Definition: TGLWidget.cxx:217
This class handles GUI labels.
Definition: TGLabel.h:24
This class describes layout hints used by the layout classes.
Definition: TGLayout.h:50
This layout managers does not make use of TGLayoutHints.
Definition: TGLayout.h:269
TGNumberEntry is a number entry input widget with up/down buttons.
virtual void SetLimits(ELimit limits=TGNumberFormat::kNELNoLimits, Double_t min=0, Double_t max=1)
virtual Double_t GetNumber() const
virtual void SetNumber(Double_t val, Bool_t emit=kTRUE)
@ kNELLimitMin
Lower limit only.
Definition: TGNumberEntry.h:48
Selects different options.
Definition: TGButton.h:322
Slider widgets allow easy selection of a range.
Definition: TGSlider.h:40
virtual void SetPosition(Int_t pos)
Definition: TGSlider.h:79
virtual void SetRange(Int_t min, Int_t max)
Definition: TGSlider.h:75
Yield an action as soon as it is clicked.
Definition: TGButton.h:142
Int_t WidgetId() const
Definition: TGWidget.h:68
ROOT GUI Window base class.
Definition: TGWindow.h:23
virtual void SetModel(TVirtualPad *pad, TObject *obj, Int_t event, Bool_t force=kFALSE)
Activate object editors according to the selected object.
Definition: TGedEditor.cxx:345
virtual TVirtualPad * GetPad() const
Definition: TGedEditor.h:78
virtual TObject * GetModel() const
Definition: TGedEditor.h:79
Base frame for implementing GUI - a service class.
Definition: TGedFrame.h:27
TGedEditor * fGedEditor
manager of this frame
Definition: TGedFrame.h:48
virtual TGVerticalFrame * CreateEditorTabSubFrame(const char *name)
Create a vertical frame to be used by 'owner' in extra tab 'name'.
Definition: TGedFrame.cxx:122
Mother of all ROOT objects.
Definition: TObject.h:37
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:869
void Init(TClassEdit::TInterpreterLookupHelper *helper)
Definition: TClassEdit.cxx:154
static constexpr double s