Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGLViewerEditor.cxx
Go to the documentation of this file.
1// @(#)root/gl:$Id$
2// Author: Alja Mrak-Tadel, Matevz Tadel, Timur Pocheptsov 08/03/2006
3
4/*************************************************************************
5 * Copyright (C) 1995-2006, 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#include <cstring>
13
14#include "TGedEditor.h"
15#include "TGNumberEntry.h"
16#include "TGButtonGroup.h"
17#include "TGColorSelect.h"
18#include "TGTextEntry.h"
19#include "TVirtualGL.h"
20#include "TG3DLine.h"
21#include "TGButton.h"
22#include "TColor.h"
23#include "TString.h"
24#include "TGLabel.h"
25#include "TGComboBox.h"
26#include "TError.h"
27
28#include "TGLViewerEditor.h"
29#include "TGLViewer.h"
30#include "TGLLightSetEditor.h"
31#include "TGLClipSetEditor.h"
32#include "TGLUtil.h"
33#include "TGLCameraOverlay.h"
34#include "TGLAutoRotator.h"
35
36/** \class TGLViewerEditor
37\ingroup opengl
38GUI editor for TGLViewer.
39*/
40
41namespace {
42
43void SetLabeledNEntryState(TGNumberEntry *entry, Bool_t enabled);
44
45}
46
48
50 TGedFrame(p, width, height, options | kVerticalFrame, back),
51 fGuidesFrame(nullptr),
52 fClipFrame(nullptr),
53 fClearColor(nullptr),
54 fIgnoreSizesOnUpdate(nullptr),
55 fResetCamerasOnUpdate(nullptr),
56 fUpdateScene(nullptr),
57 fCameraHome(nullptr),
58 fMaxSceneDrawTimeHQ(nullptr),
59 fMaxSceneDrawTimeLQ(nullptr),
60 fPointSizeScale(nullptr), fLineWidthScale(nullptr),
61 fPointSmooth(nullptr), fLineSmooth(nullptr),
62 fWFLineWidth(nullptr), fOLLineWidth(nullptr),
63
64 fCameraCenterExt(nullptr),
65 fCaptureCenter(nullptr),
66 fCameraCenterX(nullptr),
67 fCameraCenterY(nullptr),
68 fCameraCenterZ(nullptr),
70 fAxesType(0),
71 fAxesContainer(nullptr),
72 fAxesNone(nullptr),
73 fAxesEdge(nullptr),
74 fAxesOrigin(nullptr),
75 fAxesDepthTest(nullptr),
76 fRefContainer(nullptr),
77 fReferenceOn(nullptr),
78 fReferencePosX(nullptr),
79 fReferencePosY(nullptr),
80 fReferencePosZ(nullptr),
81 fCamContainer(nullptr),
82 fCamMode(nullptr),
83 fCamOverlayOn(nullptr),
84 fClipSet(nullptr),
85 fARotDt(nullptr), fARotWPhi(nullptr), fARotATheta(nullptr), fARotWTheta(nullptr), fARotADolly(nullptr), fARotWDolly(nullptr),
88 fViewer(nullptr),
90{
91 // Constructor.
92
97}
98
99//______________________________________________________________________________
100
102{
103 // Destructor.
104
105}
106
107////////////////////////////////////////////////////////////////////////////////
108/// Connect signals to slots.
109
111{
112 fClearColor->Connect("ColorSelected(Pixel_t)", "TGLViewerEditor", this, "DoClearColor(Pixel_t)");
113 fIgnoreSizesOnUpdate->Connect("Toggled(Bool_t)", "TGLViewerEditor", this, "DoIgnoreSizesOnUpdate()");
114 fResetCamerasOnUpdate->Connect("Toggled(Bool_t)", "TGLViewerEditor", this, "DoResetCamerasOnUpdate()");
115 fUpdateScene->Connect("Pressed()", "TGLViewerEditor", this, "DoUpdateScene()");
116 fCameraHome->Connect("Pressed()", "TGLViewerEditor", this, "DoCameraHome()");
117 fMaxSceneDrawTimeHQ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateMaxDrawTimes()");
118 fMaxSceneDrawTimeLQ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateMaxDrawTimes()");
119 fPointSizeScale->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdatePointLineStuff()");
120 fLineWidthScale->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdatePointLineStuff()");
121 fPointSmooth->Connect("Clicked()", "TGLViewerEditor", this, "UpdatePointLineStuff()");
122 fLineSmooth ->Connect("Clicked()", "TGLViewerEditor", this, "UpdatePointLineStuff()");
123 fWFLineWidth->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdatePointLineStuff()");
124 fOLLineWidth->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdatePointLineStuff()");
125
126 fCameraCenterExt->Connect("Clicked()", "TGLViewerEditor", this, "DoCameraCenterExt()");
127 fCaptureCenter->Connect("Clicked()", "TGLViewerEditor", this, "DoCaptureCenter()");
128 fDrawCameraCenter->Connect("Clicked()", "TGLViewerEditor", this, "DoDrawCameraCenter()");
129 fCameraCenterX->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateCameraCenter()");
130 fCameraCenterY->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateCameraCenter()");
131 fCameraCenterZ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateCameraCenter()");
132
133 fCaptureAnnotate->Connect("Clicked()", "TGLViewerEditor", this, "DoAnnotation()");
134
135 fAxesContainer->Connect("Clicked(Int_t)", "TGLViewerEditor", this, "UpdateViewerAxes(Int_t)");
136
137 fReferenceOn->Connect("Clicked()", "TGLViewerEditor", this, "UpdateViewerReference()");
138 fReferencePosX->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateViewerReference()");
139 fReferencePosY->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateViewerReference()");
140 fReferencePosZ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateViewerReference()");
141
142 fCamMode->Connect("Selected(Int_t)", "TGLViewerEditor", this, "DoCameraOverlay()");
143 fCamOverlayOn->Connect("Clicked()", "TGLViewerEditor", this, "DoCameraOverlay()");
144
145 //
146 fRotateSceneOn->Connect("Clicked()", "TGLViewerEditor", this, "SetRotatorMode()");
147
148 fSceneRotDt->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateRotator()");
149 fARotDt ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateRotator()");
150 fARotWPhi ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateRotator()");
151 fARotATheta->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateRotator()");
152 fARotWTheta->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateRotator()");
153 fARotADolly->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateRotator()");
154 fARotWDolly->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateRotator()");
155
156 fASavImageGUIBaseName->Connect("TextChanged(char*", "TGLViewerEditor", this, "DoASavImageGUIBaseName(char*)");
157 fASavImageGUIOutMode->Connect("Clicked(Int_t)", "TGLViewerEditor", this, "DoASavImageGUIOutMode(Int_t)");
158
159 fStereoZeroParallax ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateStereo()");
160 fStereoEyeOffsetFac ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateStereo()");
161 fStereoFrustumAsymFac->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateStereo()");
162 fStereoZeroParallax ->Connect("ValueChanged(Long_t)", "TGLViewerEditor", this, "UpdateStereo()");
163 fStereoEyeOffsetFac ->Connect("ValueChanged(Long_t)", "TGLViewerEditor", this, "UpdateStereo()");
164 fStereoFrustumAsymFac->Connect("ValueChanged(Long_t)", "TGLViewerEditor", this, "UpdateStereo()");
165
166 fInit = kFALSE;
167}
168
169////////////////////////////////////////////////////////////////////////////////
170/// Initiate redraw of the viewer.
171
173{
174 if (gGLManager && fIsInPad)
175 gGLManager->MarkForDirectCopy(fViewer->GetDev(), kTRUE);
176 fViewer->RequestDraw();
177}
178
179////////////////////////////////////////////////////////////////////////////////
180/// Sets model or disables/hides viewer.
181
183{
184 fViewer = nullptr;
185
186 fViewer = static_cast<TGLViewer *>(obj);
187 fIsInPad = (fViewer->GetDev() != -1);
188
189 SetGuides();
190
191 if (fInit)
193
194 fLightSet->SetModel(fViewer->GetLightSet());
195 fClipSet->SetModel(fViewer->GetClipSet());
196
197 // style tab
198 fClearColor->SetColor(TColor::Number2Pixel(fViewer->RnrCtx().ColorSet().Background().GetColorIndex()), kFALSE);
199 fClearColor->Enable(!fViewer->IsUsingDefaultColorSet());
200 fIgnoreSizesOnUpdate->SetState(fViewer->GetIgnoreSizesOnUpdate() ? kButtonDown : kButtonUp);
201 fResetCamerasOnUpdate->SetState(fViewer->GetResetCamerasOnUpdate() ? kButtonDown : kButtonUp);
202 fMaxSceneDrawTimeHQ->SetNumber(fViewer->GetMaxSceneDrawTimeHQ());
203 fMaxSceneDrawTimeLQ->SetNumber(fViewer->GetMaxSceneDrawTimeLQ());
204 fPointSizeScale->SetNumber(fViewer->GetPointScale());
205 fLineWidthScale->SetNumber(fViewer->GetLineScale ());
206 fPointSmooth->SetState(fViewer->GetSmoothPoints() ? kButtonDown : kButtonUp);
207 fLineSmooth ->SetState(fViewer->GetSmoothLines () ? kButtonDown : kButtonUp);
208 fWFLineWidth->SetNumber(fViewer->WFLineW());
209 fOLLineWidth->SetNumber(fViewer->OLLineW());
210 //camera look at
211 TGLCamera & cam = fViewer->CurrentCamera();
212 fCameraCenterExt->SetDown(cam.GetExternalCenter());
213 fDrawCameraCenter->SetDown(fViewer->GetDrawCameraCenter());
214 Double_t* la = cam.GetCenterVec();
215 fCameraCenterX->SetNumber(la[0]);
216 fCameraCenterY->SetNumber(la[1]);
217 fCameraCenterZ->SetNumber(la[2]);
218 fCameraCenterX->SetState(fCameraCenterExt->IsDown());
219 fCameraCenterY->SetState(fCameraCenterExt->IsDown());
220 fCameraCenterZ->SetState(fCameraCenterExt->IsDown());
221
222 // push action
223 fCaptureCenter->SetTextColor((fViewer->GetPushAction() == TGLViewer::kPushCamCenter) ? 0xa03060 : 0x000000);
224 fCaptureAnnotate->SetDown( (fViewer->GetPushAction() == TGLViewer::kPushAnnotate), kFALSE);
225
226 {
227 TGLAutoRotator *r = fViewer->GetAutoRotator();
228
229 fSceneRotDt->SetNumber(r->GetDeltaPhi());
230 fARotDt ->SetNumber(r->GetDt());
231 fARotWPhi ->SetNumber(r->GetWPhi());
232 fARotATheta->SetNumber(r->GetATheta());
233 fARotWTheta->SetNumber(r->GetWTheta());
234 fARotADolly->SetNumber(r->GetADolly());
235 fARotWDolly->SetNumber(r->GetWDolly());
236
237 fASavImageGUIBaseName->SetText(r->GetImageGUIBaseName());
238 fASavImageGUIOutMode ->SetButton(r->GetImageGUIOutMode());
239
240 Bool_t rotate_standard = ! fViewer->GetAutoRotator()->GetRotateScene();
241 fRotateSceneOn->SetState(rotate_standard ? kButtonUp : kButtonDown);
242 SetLabeledNEntryState(fSceneRotDt, ! rotate_standard);
243 SetLabeledNEntryState(fARotDt, rotate_standard);
244 SetLabeledNEntryState(fARotWPhi, rotate_standard);
245 SetLabeledNEntryState(fARotATheta, rotate_standard);
246 SetLabeledNEntryState(fARotWTheta, rotate_standard);
247 SetLabeledNEntryState(fARotADolly, rotate_standard);
248 SetLabeledNEntryState(fARotWDolly, rotate_standard);
249 }
250
251 if (fViewer->GetStereo())
252 {
253 fStereoZeroParallax ->SetNumber(fViewer->GetStereoZeroParallax());
254 fStereoEyeOffsetFac ->SetNumber(fViewer->GetStereoEyeOffsetFac());
255 fStereoFrustumAsymFac->SetNumber(fViewer->GetStereoFrustumAsymFac());
256 fStereoFrame->MapWindow();
257 }
258 else
259 {
260 fStereoFrame->UnmapWindow();
261 }
262}
263
264////////////////////////////////////////////////////////////////////////////////
265/// Clear-color was changed.
266
268{
269 fViewer->RnrCtx().ColorSet().Background().SetColor(Color_t(TColor::GetColor(color)));
270 ViewerRedraw();
271}
272
273////////////////////////////////////////////////////////////////////////////////
274/// ResetCamerasOnUpdate was toggled.
275
277{
278 fViewer->SetIgnoreSizesOnUpdate(fIgnoreSizesOnUpdate->IsOn());
279 if (fIgnoreSizesOnUpdate->IsOn())
280 fViewer->UpdateScene();
281}
282
283////////////////////////////////////////////////////////////////////////////////
284/// ResetCamerasOnUpdate was toggled.
285
287{
288 fViewer->SetResetCamerasOnUpdate(fResetCamerasOnUpdate->IsOn());
289}
290
291////////////////////////////////////////////////////////////////////////////////
292/// UpdateScene was clicked.
293
295{
296 fViewer->UpdateScene();
297}
298
299////////////////////////////////////////////////////////////////////////////////
300/// CameraHome was clicked.
301
303{
304 fViewer->ResetCurrentCamera();
305 ViewerRedraw();
306}
307
308////////////////////////////////////////////////////////////////////////////////
309/// Slot for fMaxSceneDrawTimeHQ and fMaxSceneDrawTimeLQ.
310
312{
313 fViewer->SetMaxSceneDrawTimeHQ(fMaxSceneDrawTimeHQ->GetNumber());
314 fViewer->SetMaxSceneDrawTimeLQ(fMaxSceneDrawTimeLQ->GetNumber());
315}
316
317////////////////////////////////////////////////////////////////////////////////
318/// Slot for point-sizes and line-widths.
319
321{
322 fViewer->SetPointScale(fPointSizeScale->GetNumber());
323 fViewer->SetLineScale (fLineWidthScale->GetNumber());
324 fViewer->SetSmoothPoints(fPointSmooth->IsDown());
325 fViewer->SetSmoothLines (fLineSmooth->IsDown());
326 fViewer->SetWFLineW(fWFLineWidth->GetNumber());
327 fViewer->SetOLLineW(fOLLineWidth->GetNumber());
328 ViewerRedraw();
329}
330
331////////////////////////////////////////////////////////////////////////////////
332/// Update viewer with GUI state.
333
335{
336 TGLCameraOverlay* co = fViewer->GetCameraOverlay();
337
338 if (fViewer->CurrentCamera().IsPerspective())
339 {
340 co->SetShowPerspective(fCamOverlayOn->IsDown());
342 }
343 else
344 {
345 co->SetShowOrthographic(fCamOverlayOn->IsDown());
347 }
348 ViewerRedraw();
349}
350
351////////////////////////////////////////////////////////////////////////////////
352/// Set external camera center.
353
355{
356 TGLCamera& cam = fViewer->CurrentCamera();
357 cam.SetExternalCenter(fCameraCenterExt->IsDown());
358
359 fCameraCenterX->SetState(fCameraCenterExt->IsDown());
360 fCameraCenterY->SetState(fCameraCenterExt->IsDown());
361 fCameraCenterZ->SetState(fCameraCenterExt->IsDown());
362
363 ViewerRedraw();
364}
365
366////////////////////////////////////////////////////////////////////////////////
367/// Capture camera-center via picking.
368
370{
371 fViewer->PickCameraCenter();
372 ViewerRedraw();
373}
374
375////////////////////////////////////////////////////////////////////////////////
376/// Draw camera center.
377
379{
380 fViewer->SetDrawCameraCenter(fDrawCameraCenter->IsDown());
381 ViewerRedraw();
382}
383
384////////////////////////////////////////////////////////////////////////////////
385/// Update current camera with GUI state.
386
388{
389 TGLCamera& cam = fViewer->CurrentCamera();
390 cam.SetCenterVec(fCameraCenterX->GetNumber(), fCameraCenterY->GetNumber(), fCameraCenterZ->GetNumber());
391 ViewerRedraw();
392}
393
394////////////////////////////////////////////////////////////////////////////////
395/// Create annotation via picking.
396
398{
399 fViewer->PickAnnotate();
400}
401
402////////////////////////////////////////////////////////////////////////////////
403/// Update viewer with GUI state.
404
406{
407 if(id < 4)
408 {
409 fAxesType = id -1;
410 for (Int_t i = 1; i < 4; i++) {
411 TGButton * button = fAxesContainer->GetButton(i);
412 if (i == id)
413 button->SetDown(kTRUE);
414 else
415 button->SetDown(kFALSE);
416 }
417 }
418 Bool_t axdt = fAxesContainer->GetButton(4)->IsDown();
419 const Double_t refPos[] = {fReferencePosX->GetNumber(), fReferencePosY->GetNumber(), fReferencePosZ->GetNumber()};
420 fViewer->SetGuideState(fAxesType, axdt, fReferenceOn->IsDown(), refPos);
422}
423
424////////////////////////////////////////////////////////////////////////////////
425/// Update viewer with GUI state.
426
428{
429 const Double_t refPos[] = {fReferencePosX->GetNumber(), fReferencePosY->GetNumber(), fReferencePosZ->GetNumber()};
430 fViewer->SetGuideState(fAxesType, fAxesContainer->GetButton(4)->IsDown(), fReferenceOn->IsDown(), refPos);
432}
433
434////////////////////////////////////////////////////////////////////////////////
435/// Helper function to create fixed width TGLabel and TGNumberEntry in same row.
436
438 Int_t labelw,Int_t nd, Int_t style)
439{
441 TGHorizontalFrame *labfr = new TGHorizontalFrame(rfr, labelw, 20, kFixedSize);
442 TGLabel *lab = new TGLabel(labfr, name);
443 labfr->AddFrame(lab, new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0, 0, 0) );
444 rfr->AddFrame(labfr, new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0, 0, 0));
445
446 TGNumberEntry* ne = new TGNumberEntry(rfr, 0.0f, nd, -1, (TGNumberFormat::EStyle)style);
448
449 p->AddFrame(rfr, new TGLayoutHints(kLHintsLeft, 0, 0, 1, 0));
450 return ne;
451}
452
453////////////////////////////////////////////////////////////////////////////////
454/// Creates "Style" tab.
455
457{
458 MakeTitle("Update behaviour");
459 fIgnoreSizesOnUpdate = new TGCheckButton(this, "Ignore sizes");
460 fIgnoreSizesOnUpdate->SetToolTipText("Ignore bounding-box sizes on scene update");
462 fResetCamerasOnUpdate = new TGCheckButton(this, "Reset on update");
463 fResetCamerasOnUpdate->SetToolTipText("Reset camera on scene update");
465
466 TGCompositeFrame* af = this;
467 fUpdateScene = new TGTextButton(af, "Update Scene", 130);
469 fCameraHome = new TGTextButton(af, "Camera Home", 130);
471 fMaxSceneDrawTimeHQ = MakeLabeledNEntry(af, "Max HQ draw time:", 120, 6, TGNumberFormat::kNESInteger);
473 fMaxSceneDrawTimeHQ->GetNumberEntry()->SetToolTipText("Maximum time spent in scene drawing\nin high-quality mode [ms].");
474 fMaxSceneDrawTimeLQ = MakeLabeledNEntry(af, "Max LQ draw time:", 120, 6, TGNumberFormat::kNESInteger);
476 fMaxSceneDrawTimeLQ->GetNumberEntry()->SetToolTipText("Maximum time spent in scene drawing\nin low-quality mode (during rotation etc).");
477
478 TGHorizontalFrame* hf = new TGHorizontalFrame(this);
479 TGLabel* lab = new TGLabel(hf, "Clear Color");
480 hf->AddFrame(lab, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 4, 8, 3));
481 fClearColor = new TGColorSelect(hf, 0, -1);
482 hf->AddFrame(fClearColor, new TGLayoutHints(kLHintsLeft, 1, 1, 8, 1));
483 AddFrame(hf, new TGLayoutHints(kLHintsLeft, 2, 1, 1, 1));
484
485 // LightSet
487 fLightSet->Connect("Changed()", "TGLViewerEditor", this, "ViewerRedraw()");
489
490 // Point-sizes / line-widths.
491 hf = new TGHorizontalFrame(af);
492 fPointSizeScale = MakeLabeledNEntry(hf, "Point-size scale:", 116, 4, TGNumberFormat::kNESRealOne);
494 fPointSmooth = new TGCheckButton(hf);
495 fPointSmooth->SetToolTipText("Use smooth points.");
496 hf->AddFrame(fPointSmooth, new TGLayoutHints(kLHintsNormal, 3, 0, 3, 0));
497 af->AddFrame(hf);
498 hf = new TGHorizontalFrame(af);
499 fLineWidthScale = MakeLabeledNEntry(hf, "Line-width scale:", 116, 4, TGNumberFormat::kNESRealOne);
501 fLineSmooth = new TGCheckButton(hf);
502 fLineSmooth->SetToolTipText("Use smooth lines.");
503 hf->AddFrame(fLineSmooth, new TGLayoutHints(kLHintsNormal, 3, 0, 3, 0));
504 af->AddFrame(hf);
505 fWFLineWidth = MakeLabeledNEntry(af, "Wireframe line-width:", 116, 4, TGNumberFormat::kNESRealOne);
507 fOLLineWidth = MakeLabeledNEntry(af, "Outline line-width:", 116, 4, TGNumberFormat::kNESRealOne);
509}
510
511////////////////////////////////////////////////////////////////////////////////
512/// Create "Guides" tab.
513
515{
517
518 // external camera look at point
519 TGGroupFrame* grf = new TGGroupFrame(fGuidesFrame, "Camera center:", kVerticalFrame);
520 fDrawCameraCenter = new TGCheckButton(grf, "Show", 50);
522 fCameraCenterExt = new TGCheckButton(grf, "External", 50);
523 grf->AddFrame(fCameraCenterExt, new TGLayoutHints(kLHintsLeft, 0, 0, 1, 0));
524 fGuidesFrame->AddFrame(grf, new TGLayoutHints(kLHintsTop| kLHintsLeft | kLHintsExpandX, 2, 3, 3, 0));
525 Int_t labw = 20;
529 fCaptureCenter = new TGTextButton(grf, " Pick center ");
530 grf->AddFrame(fCaptureCenter, new TGLayoutHints(kLHintsNormal, labw + 2, 0, 2, 0));
531
532 // annotate
533 TGGroupFrame* annf = new TGGroupFrame(fGuidesFrame, "Annotation");
534 fGuidesFrame->AddFrame(annf, new TGLayoutHints(kLHintsTop | kLHintsCenterX | kLHintsExpandX, 2, 3, 0, 0));
535 fCaptureAnnotate = new TGCheckButton(annf, "Pick annotation");
537
538 // reference container
539 fRefContainer = new TGGroupFrame(fGuidesFrame, "Reference marker");
546
547 // axes
549 fAxesNone = new TGRadioButton(fAxesContainer, "None", 1);
550 fAxesEdge = new TGRadioButton(fAxesContainer, "Edge", 2);
551 fAxesOrigin = new TGRadioButton(fAxesContainer, "Origin", 3);
552 fAxesDepthTest = new TGCheckButton(fAxesContainer, "DepthTest",4);
554
555 // camera overlay
556 fCamContainer = new TGGroupFrame(fGuidesFrame, "Camera overlay");
561 TGLabel* lab = new TGLabel(chf, "Mode");
562 chf->AddFrame(lab, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 4, 1, 2));
563 fCamMode = new TGComboBox(chf);
565 fCamMode->AddEntry("Bar", TGLCameraOverlay::kBar);
566 fCamMode->AddEntry("Axis", TGLCameraOverlay::kAxis);
567 fCamMode->AddEntry("Grid Front", TGLCameraOverlay::kGridFront);
568 fCamMode->AddEntry("Grid Back", TGLCameraOverlay::kGridBack);
569 TGListBox* lb = fCamMode->GetListBox();
570 lb->Resize(lb->GetWidth(), 5*18);
571 fCamMode->Resize(90, 20);
572 chf->AddFrame(fCamMode, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
573 fCamContainer->AddFrame(chf);
574}
575
576////////////////////////////////////////////////////////////////////////////////
577/// Create GUI controls - clip type (none/plane/box) and plane/box properties.
578
580{
582
584 fClipSet->Connect("Changed()", "TGLViewerEditor", this, "ViewerRedraw()");
585 fClipFrame->AddFrame(fClipSet, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 0, 0, 0));
586}
587
588////////////////////////////////////////////////////////////////////////////////
589/// Create Extra Tab controls - camera rotator and stereo.
590
592{
593 Int_t labw = 80;
594
595 TGCompositeFrame *tab = CreateEditorTabSubFrame("Extras"), *p = nullptr;
596
597 // ----- Auto rotator -----
598
599 p = new TGGroupFrame(tab, "Auto rotator", kVerticalFrame);
600
601 //
602 fRotateSceneOn = new TGCheckButton(p, "Rotate all objects");
603 fRotateSceneOn->SetToolTipText("This covers a very specific use-case and is most likely not what you need.\nProceed at your own risk. Sorry about that.");
604 p->AddFrame(fRotateSceneOn, new TGLayoutHints(kLHintsLeft, 4, 1, 1, 1));
605
607 fSceneRotDt->SetLimits(TGNumberFormat::kNELLimitMinMax, 0.005, 0.06);
608
610 fARotDt->SetLimits(TGNumberFormat::kNELLimitMinMax, 0.001, 1);
611
612 fARotWPhi = MakeLabeledNEntry(p, "Omega Phi:", labw, 5, TGNumberFormat::kNESRealTwo);
613 fARotWPhi->SetLimits(TGNumberFormat::kNELLimitMinMax, -10, 10);
614
616 fARotATheta->SetLimits(TGNumberFormat::kNELLimitMinMax, 0.01, 1);
617
618 fARotWTheta = MakeLabeledNEntry(p, "Omega Theta:", labw, 5, TGNumberFormat::kNESRealTwo);
619 fARotWTheta->SetLimits(TGNumberFormat::kNELLimitMinMax, -10, 10);
620
622 fARotADolly->SetLimits(TGNumberFormat::kNELLimitMinMax, 0.01, 1);
623
624 fARotWDolly = MakeLabeledNEntry(p, "Omega Dolly:", labw, 5, TGNumberFormat::kNESRealTwo);
625 fARotWDolly->SetLimits(TGNumberFormat::kNELLimitMinMax, -10, 10);
626
627 {
629
630 TGTextButton *b = new TGTextButton(l, "Start");
631 b->Connect("Clicked()", "TGLViewerEditor", this, "DoRotatorStart()");
632 l->AddFrame(b, new TGLayoutHints(kLHintsLeft | kLHintsExpandX));
633
634 b = new TGTextButton(l, "Stop");
635 b->Connect("Clicked()", "TGLViewerEditor", this, "DoRotatorStop()");
636 l->AddFrame(b, new TGLayoutHints(kLHintsLeft | kLHintsExpandX));
637
638 p->AddFrame(l, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0, 0, 4, 0));
639 }
640
642
643 // ----- Auto Save Images -----
644
645 p = new TGGroupFrame(tab, "Auto save images", kVerticalFrame);
646
648 fASavImageGUIBaseName->SetDefaultSize(160, 0);
649 p->AddFrame(fASavImageGUIBaseName, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0, 0, 4, 0));
650
653 new TGRadioButton(fASavImageGUIOutMode, "PNG set ");
654 fASavImageGUIOutMode->SetLayoutHints(new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0, 0, 2, -10));
656
657 {
659
660 TGTextButton *b = new TGTextButton(l, "Start");
661 b->Connect("Clicked()", "TGLViewerEditor", this, "DoASavImageStart()");
662 l->AddFrame(b, new TGLayoutHints(kLHintsLeft | kLHintsExpandX));
663
664 b = new TGTextButton(l, "Stop");
665 b->Connect("Clicked()", "TGLViewerEditor", this, "DoASavImageStop()");
666 l->AddFrame(b, new TGLayoutHints(kLHintsLeft | kLHintsExpandX));
667
668 p->AddFrame(l, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0, 0, 4, 0));
669 }
670
672
673 // ----- Stereo -----
674
675 fStereoFrame = p = new TGGroupFrame(tab, "Stereo", kVerticalFrame);
676
677 // Int_t labw = 80;
678
681
684
687
689}
690
691
692////////////////////////////////////////////////////////////////////////////////
693/// Enable/disable reference position (x/y/z) number edits based on
694/// reference check box.
695
697{
698 fReferencePosX->SetState(fReferenceOn->IsDown());
699 fReferencePosY->SetState(fReferenceOn->IsDown());
700 fReferencePosZ->SetState(fReferenceOn->IsDown());
701}
702
703////////////////////////////////////////////////////////////////////////////////
704/// Configuration of guides GUI called from SetModel().
705
707{
708 Bool_t axesDepthTest = kFALSE;
709 Bool_t referenceOn = kFALSE;
710 Double_t referencePos[3] = {0.};
711 fViewer->GetGuideState(fAxesType, axesDepthTest, referenceOn, referencePos);
712
713 for (Int_t i = 1; i < 4; i++) {
714 TGButton * btn = fAxesContainer->GetButton(i);
715 if (fAxesType+1 == i)
716 btn->SetDown(kTRUE);
717 else
718 btn->SetDown(kFALSE);
719 }
720 fAxesContainer->GetButton(4)->SetOn(axesDepthTest, kFALSE);
721
722 fReferenceOn->SetDown(referenceOn);
723 fReferencePosX->SetNumber(referencePos[0]);
724 fReferencePosY->SetNumber(referencePos[1]);
725 fReferencePosZ->SetNumber(referencePos[2]);
727
728 // overlay
729 TGLCameraOverlay* co = fViewer->GetCameraOverlay();
730 TGCompositeFrame *fr = (TGCompositeFrame*)((TGFrameElement*) fCamContainer->GetList()->Last() )->fFrame;
731
732 if (fViewer->CurrentCamera().IsOrthographic())
733 {
734 fCamOverlayOn->SetDown(co->GetShowOrthographic());
735 fr->ShowFrame(fCamMode);
736
737
738 if (! fr->IsMapped()) {
739 fr->MapSubwindows();
740 fr->MapWindow();
741 fCamContainer->MapWindow();
742 fCamContainer->MapWindow();
743 fCamMode->Select(co->GetOrthographicMode(), kFALSE);
744 }
745 }
746 else
747 {
748 fCamOverlayOn->SetDown(co->GetShowPerspective());
749
750 // only mode implemented for perspective camera
751 fCamMode->Select(co->GetPerspectiveMode(), kFALSE);
752 fr->HideFrame(fCamMode);
753 if (fr->IsMapped())
754 fr->UnmapWindow();
755 }
756}
757
758////////////////////////////////////////////////////////////////////////////////
759
761{
762 if (TGLAutoRotator * const r = fViewer->GetAutoRotator()) {
763 r->Stop();
764
765 if (fRotateSceneOn->IsOn()) {
766 r->SetDeltaPhi(fSceneRotDt->GetNumber());
767
768 SetLabeledNEntryState(fSceneRotDt, kTRUE);
769 SetLabeledNEntryState(fARotDt, kFALSE);
770 SetLabeledNEntryState(fARotWPhi, kFALSE);
771 SetLabeledNEntryState(fARotATheta, kFALSE);
772 SetLabeledNEntryState(fARotWTheta, kFALSE);
773 SetLabeledNEntryState(fARotADolly, kFALSE);
774 SetLabeledNEntryState(fARotWDolly, kFALSE);
775 } else {
776 SetLabeledNEntryState(fSceneRotDt, kFALSE);
777 SetLabeledNEntryState(fARotDt, kTRUE);
778 SetLabeledNEntryState(fARotWPhi, kTRUE);
779 SetLabeledNEntryState(fARotATheta, kTRUE);
780 SetLabeledNEntryState(fARotWTheta, kTRUE);
781 SetLabeledNEntryState(fARotADolly, kTRUE);
782 SetLabeledNEntryState(fARotWDolly, kTRUE);
783 }
784
785 r->SetRotateScene(fRotateSceneOn->IsOn());
786 }
787}
788
789////////////////////////////////////////////////////////////////////////////////
790/// Update rotator related variables.
791
793{
794 TGLAutoRotator *r = fViewer->GetAutoRotator();
795 if (fRotateSceneOn->IsOn()) {
796 r->SetDeltaPhi(fSceneRotDt->GetNumber());
797 } else {
798 r->SetDt (fARotDt->GetNumber());
799 r->SetWPhi (fARotWPhi->GetNumber());
800 r->SetATheta(fARotATheta->GetNumber());
801 r->SetWTheta(fARotWTheta->GetNumber());
802 r->SetADolly(fARotADolly->GetNumber());
803 r->SetWDolly(fARotWDolly->GetNumber());
804 }
805}
806
807////////////////////////////////////////////////////////////////////////////////
808/// Start auto-rotator.
809
811{
812 TGLAutoRotator *r = fViewer->GetAutoRotator();
813 if (!r->IsRunning())
814 r->SetRotateScene(fRotateSceneOn->IsOn());
815
816 r->Start();
817}
818
819////////////////////////////////////////////////////////////////////////////////
820/// Stop auto-rotator.
821
823{
824 fViewer->GetAutoRotator()->Stop();
825}
826
827////////////////////////////////////////////////////////////////////////////////
828/// Update base-name.
829
831{
832 TGLAutoRotator *r = fViewer->GetAutoRotator();
833 r->SetImageGUIBaseName(t);
834}
835
836////////////////////////////////////////////////////////////////////////////////
837/// Update output mode.
838
840{
841 TGLAutoRotator *r = fViewer->GetAutoRotator();
842 r->SetImageGUIOutMode(m);
843}
844
845////////////////////////////////////////////////////////////////////////////////
846/// Start auto-rotator image auto-save.
847
849{
850 TGLAutoRotator *r = fViewer->GetAutoRotator();
851 if (r->GetImageAutoSave())
852 {
853 Warning("DoASavImageStart", "AutoSave in progress.");
854 return;
855 }
856
857 r->StartImageAutoSaveWithGUISettings();
858}
859
860////////////////////////////////////////////////////////////////////////////////
861/// Stop auto-rotator image auto-save.
862
864{
865 TGLAutoRotator *r = fViewer->GetAutoRotator();
866 if (!r->GetImageAutoSave())
867 {
868 Warning("DoASavImageStop", "AutoSave not in progress.");
869 return;
870 }
871
872 r->StopImageAutoSave();
873}
874
875////////////////////////////////////////////////////////////////////////////////
876/// Update stereo related variables.
877
879{
880 fViewer->SetStereoZeroParallax (fStereoZeroParallax->GetNumber());
881 fViewer->SetStereoEyeOffsetFac (fStereoEyeOffsetFac->GetNumber());
882 fViewer->SetStereoFrustumAsymFac(fStereoFrustumAsymFac->GetNumber());
883 ViewerRedraw();
884}
885
886//Aux. functions that do not have to be members.
887
888namespace {
889
890//Here's how we create a number entry and its label:
891
892// TGHorizontalFrame *rfr = new TGHorizontalFrame(p);
893// TGHorizontalFrame *labfr = new TGHorizontalFrame(rfr, labelw, 20, kFixedSize);
894// TGLabel *lab = new TGLabel(labfr, name);
895// labfr->AddFrame(lab, new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0, 0, 0) );
896// rfr->AddFrame(labfr, new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0, 0, 0));
897//
898// TGNumberEntry* ne = new TGNumberEntry(rfr, 0.0f, nd, -1, (TGNumberFormat::EStyle)style);
899// rfr->AddFrame(ne, new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsBottom, 2, 0, 0));
900//
901// p->AddFrame(rfr, new TGLayoutHints(kLHintsLeft, 0, 0, 1, 0));
902
903////////////////////////////////////////////////////////////////////////////////
904
905TGLabel *FindLabelForNEntry(TGNumberEntry *entry)
906{
907 if (!entry) {
908 //I would prefer an assert here.
909 ::Error("FindLabelForNEntry", "parameter 'entry' is null");
910 return nullptr;
911 }
912
913 TGLabel *label = nullptr;
914
915 if (const TGHorizontalFrame * const grandpa = dynamic_cast<const TGHorizontalFrame *>(entry->GetParent())) {
916 if (TList * const parents = grandpa->GetList()) {
917 TIter next1(parents);
918 while (TGFrameElement * const frameElement = dynamic_cast<TGFrameElement *>(next1())) {
919 if (TGHorizontalFrame * const parent = dynamic_cast<TGHorizontalFrame *>(frameElement->fFrame)) {
920 if (TList * const children = parent->GetList()) {
921 TIter next2(children);
922 while (TGFrameElement * const candidate = dynamic_cast<TGFrameElement *>(next2())) {
923 if ((label = dynamic_cast<TGLabel *>(candidate->fFrame)))
924 break;
925 }
926 }
927 }
928
929 if (label)
930 break;
931 }
932 }
933 }
934
935 return label;
936}
937
938////////////////////////////////////////////////////////////////////////////////
939///This is quite an ugly hack but still not as ugly as having 5-6 additional
940///TGLabels as data members.
941
942void SetLabeledNEntryState(TGNumberEntry *entry, Bool_t enabled)
943{
944 if (!entry) {
945 //I would prefer an assert here.
946 ::Error("SetLabeledNEntryState", "parameter 'entry' is null");
947 return;
948 }
949
950 entry->SetState(enabled);
951 if (TGLabel * const label = FindLabelForNEntry(entry))
952 //Wah!
953 label->Disable(!enabled);
954}
955
956}
@ kChildFrame
Definition GuiTypes.h:379
@ kVerticalFrame
Definition GuiTypes.h:381
@ kHorizontalFrame
Definition GuiTypes.h:382
@ kFixedSize
Definition GuiTypes.h:390
ULong_t Pixel_t
Pixel value.
Definition GuiTypes.h:40
#define b(i)
Definition RSha256.hxx:100
bool Bool_t
Definition RtypesCore.h:63
int Int_t
Definition RtypesCore.h:45
short Color_t
Definition RtypesCore.h:92
unsigned int UInt_t
Definition RtypesCore.h:46
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
double Double_t
Definition RtypesCore.h:59
constexpr Bool_t kTRUE
Definition RtypesCore.h:100
#define ClassImp(name)
Definition Rtypes.h:377
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
Definition TError.cxx:185
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
Definition TError.cxx:229
@ kButtonDown
Definition TGButton.h:54
@ kButtonUp
Definition TGButton.h:53
@ kLHintsLeft
Definition TGLayout.h:24
@ kLHintsNormal
Definition TGLayout.h:32
@ kLHintsCenterX
Definition TGLayout.h:25
@ kLHintsBottom
Definition TGLayout.h:29
@ kLHintsTop
Definition TGLayout.h:27
@ kLHintsExpandX
Definition TGLayout.h:30
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t width
Option_t Option_t style
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t height
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t button
char name[80]
Definition TGX11.cxx:110
Int_t i
#define gGLManager
Definition TVirtualGL.h:159
static ULong_t Number2Pixel(Int_t ci)
Static method that given a color index number, returns the corresponding pixel value.
Definition TColor.cxx:2320
static Int_t GetColor(const char *hexcolor)
Static method returning color number for color specified by hex color string of form: "#rrggbb",...
Definition TColor.cxx:1839
Organizes TGButton widgets in a group.
A button abstract base class.
Definition TGButton.h:68
virtual void SetDown(Bool_t on=kTRUE, Bool_t emit=kFALSE)
Definition TGButton.cxx:310
Selects different options.
Definition TGButton.h:264
Like a checkbutton but instead of the check mark there is color area with a little down arrow.
A combobox (also known as a drop down listbox) allows the selection of one item out of a list of item...
Definition TGComboBox.h:47
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=nullptr)
Add frame to the composite frame using the specified layout hints.
Definition TGFrame.cxx:1117
void MapSubwindows() override
Map all sub windows that are part of the composite frame.
Definition TGFrame.cxx:1164
TGCompositeFrame(const TGCompositeFrame &)=delete
virtual void ShowFrame(TGFrame *f)
Show sub frame.
Definition TGFrame.cxx:1204
virtual void HideFrame(TGFrame *f)
Hide sub frame.
Definition TGFrame.cxx:1190
void MapWindow() override
map window
Definition TGFrame.h:204
void UnmapWindow() override
unmap window
Definition TGFrame.h:206
UInt_t GetWidth() const
Definition TGFrame.h:224
A composite frame with a border and a title.
Definition TGFrame.h:522
A composite frame that layout their children in horizontal way.
Definition TGFrame.h:385
Automatically rotates GL camera.
A GL overlay element which displays camera furstum.
void SetShowPerspective(Bool_t x)
Int_t GetPerspectiveMode() const
void SetShowOrthographic(Bool_t x)
Int_t GetOrthographicMode() const
Bool_t GetShowPerspective() const
Bool_t GetShowOrthographic() const
void SetPerspectiveMode(EMode m)
void SetOrthographicMode(EMode m)
Abstract base camera class - concrete classes for orthographic and perspective cameras derive from it...
Definition TGLCamera.h:44
Double_t * GetCenterVec()
Definition TGLCamera.h:157
Bool_t GetExternalCenter()
Definition TGLCamera.h:153
void SetExternalCenter(Bool_t x)
Set camera center diffrent than scene center, if enable is kTRUE.
void SetCenterVec(Double_t x, Double_t y, Double_t z)
Set camera center vector.
GUI sub-editor for TGLClipSet.
Sub-editor for TGLLightSet.
GUI editor for TGLViewer.
TGButtonGroup * fAxesContainer
void DoDrawCameraCenter()
Draw camera center.
void DoUpdateScene()
UpdateScene was clicked.
TGCompositeFrame * fGuidesFrame
void DoCameraHome()
CameraHome was clicked.
void DoCaptureCenter()
Capture camera-center via picking.
void DoCameraCenterExt()
Set external camera center.
void DoASavImageGUIBaseName(const char *t)
Update base-name.
TGLLightSetSubEditor * fLightSet
static TGNumberEntry * MakeLabeledNEntry(TGCompositeFrame *p, const char *name, Int_t labelw, Int_t nd=7, Int_t s=5)
Helper function to create fixed width TGLabel and TGNumberEntry in same row.
void UpdateCameraCenter()
Update current camera with GUI state.
TGLViewer * fViewer
TGNumberEntry * fPointSizeScale
void DoClearColor(Pixel_t color)
Clear-color was changed.
void UpdatePointLineStuff()
Slot for point-sizes and line-widths.
TGCompositeFrame * fClipFrame
TGCheckButton * fPointSmooth
TGCheckButton * fReferenceOn
TGComboBox * fCamMode
TGNumberEntry * fARotWDolly
TGNumberEntry * fCameraCenterY
void SetGuides()
Configuration of guides GUI called from SetModel().
void DoRotatorStart()
Start auto-rotator.
TGNumberEntry * fStereoEyeOffsetFac
void UpdateViewerReference()
Update viewer with GUI state.
void CreateClippingTab()
Create GUI controls - clip type (none/plane/box) and plane/box properties.
TGCheckButton * fLineSmooth
void SetModel(TObject *obj) override
Sets model or disables/hides viewer.
TGNumberEntry * fMaxSceneDrawTimeLQ
TGCheckButton * fRotateSceneOn
void DoRotatorStop()
Stop auto-rotator.
TGNumberEntry * fARotATheta
TGCheckButton * fDrawCameraCenter
TGNumberEntry * fSceneRotDt
void UpdateStereo()
Update stereo related variables.
void UpdateMaxDrawTimes()
Slot for fMaxSceneDrawTimeHQ and fMaxSceneDrawTimeLQ.
TGNumberEntry * fReferencePosY
TGGroupFrame * fRefContainer
void UpdateReferencePosState()
Enable/disable reference position (x/y/z) number edits based on reference check box.
TGCheckButton * fResetCamerasOnUpdate
TGLClipSetSubEditor * fClipSet
TGCheckButton * fIgnoreSizesOnUpdate
TGCheckButton * fCameraCenterExt
TGNumberEntry * fCameraCenterX
TGNumberEntry * fReferencePosZ
TGRadioButton * fAxesEdge
TGNumberEntry * fCameraCenterZ
void DoIgnoreSizesOnUpdate()
ResetCamerasOnUpdate was toggled.
void DoASavImageGUIOutMode(Int_t m)
Update output mode.
TGNumberEntry * fARotADolly
TGLViewerEditor(const TGLViewerEditor &)
TGCheckButton * fCamOverlayOn
TGTextButton * fUpdateScene
void CreateExtrasTab()
Create Extra Tab controls - camera rotator and stereo.
TGCompositeFrame * fStereoFrame
void DoASavImageStop()
Stop auto-rotator image auto-save.
void CreateGuidesTab()
Create "Guides" tab.
void CreateStyleTab()
Creates "Style" tab.
TGButtonGroup * fASavImageGUIOutMode
TGNumberEntry * fReferencePosX
TGRadioButton * fAxesOrigin
void DoAnnotation()
Create annotation via picking.
virtual void ViewerRedraw()
Initiate redraw of the viewer.
TGNumberEntry * fOLLineWidth
TGNumberEntry * fARotWPhi
TGRadioButton * fAxesNone
void DoCameraOverlay()
Update viewer with GUI state.
TGColorSelect * fClearColor
TGNumberEntry * fARotDt
TGNumberEntry * fMaxSceneDrawTimeHQ
TGCheckButton * fCaptureAnnotate
TGNumberEntry * fWFLineWidth
void DoASavImageStart()
Start auto-rotator image auto-save.
void DoResetCamerasOnUpdate()
ResetCamerasOnUpdate was toggled.
TGGroupFrame * fCamContainer
TGNumberEntry * fStereoFrustumAsymFac
TGTextButton * fCameraHome
~TGLViewerEditor() override
TGNumberEntry * fARotWTheta
void UpdateViewerAxes(Int_t id)
Update viewer with GUI state.
TGNumberEntry * fLineWidthScale
TGCheckButton * fAxesDepthTest
TGTextEntry * fASavImageGUIBaseName
TGNumberEntry * fStereoZeroParallax
void UpdateRotator()
Update rotator related variables.
void ConnectSignals2Slots()
Connect signals to slots.
TGTextButton * fCaptureCenter
Base GL viewer object - used by both standalone and embedded (in pad) GL.
Definition TGLViewer.h:55
@ kPushCamCenter
Definition TGLViewer.h:126
@ kPushAnnotate
Definition TGLViewer.h:126
This class handles GUI labels.
Definition TGLabel.h:24
virtual void Disable(Bool_t on=kTRUE)
Definition TGLabel.h:89
This class describes layout hints used by the layout classes.
Definition TGLayout.h:50
A listbox is a box, possibly with scrollbar, containing entries.
Definition TGListBox.h:221
void Resize(UInt_t w, UInt_t h) override
Resize the listbox widget.
TGNumberEntry is a number entry input widget with up/down buttons.
virtual void SetState(Bool_t enable=kTRUE)
Set the active state.
@ kNESRealOne
Fixed fraction real, one digit.
@ kNESRealThree
Fixed fraction real, three digit.
@ kNESInteger
Style of number entry field.
@ kNESRealTwo
Fixed fraction real, two digit.
@ kNELLimitMin
Lower limit only.
@ kNELLimitMinMax
Both lower and upper limits.
Selects different options.
Definition TGButton.h:321
Yield an action as soon as it is clicked.
Definition TGButton.h:142
A TGTextEntry is a one line text input widget.
Definition TGTextEntry.h:24
ROOT GUI Window base class.
Definition TGWindow.h:23
const TGWindow * GetParent() const
Definition TGWindow.h:83
virtual Bool_t IsMapped()
Returns kTRUE if window is mapped on screen, kFALSE otherwise.
Definition TGWindow.cxx:295
virtual TGVerticalFrame * CreateEditorTabSubFrame(const char *name)
Create a vertical frame to be used by 'owner' in extra tab 'name'.
TGedFrame(const TGedFrame &)=delete
Bool_t fInit
init flag for setting signals/slots
Definition TGedFrame.h:47
virtual void MakeTitle(const char *title)
Create attribute frame title.
Definition TGedFrame.cxx:95
A doubly linked list.
Definition TList.h:38
Mother of all ROOT objects.
Definition TObject.h:41
TMarker m
Definition textangle.C:8
TLine l
Definition textangle.C:4