13#include "TGLIncludes.h"
61#define GL_BGRA GL_BGRA_EXT
101 fContextMenu(nullptr),
113 fCurrentCamera(&fPerspectiveCameraXOZ),
114 fAutoRotator(nullptr),
118 fStereoZeroParallax (0.03f),
119 fStereoEyeOffsetFac (1.0f),
120 fStereoFrustumAsymFac (1.0f),
124 fSelectedPShapeRef (nullptr),
125 fCurrentOvlElm (nullptr),
127 fEventHandler(nullptr),
129 fPShapeWrap(nullptr),
130 fPushAction(kPushStd), fDragAction(
kDragNone),
131 fRedrawTimer(nullptr),
132 fMaxSceneDrawTimeHQ(5000),
133 fMaxSceneDrawTimeLQ(100),
134 fPointScale (1), fLineScale(1), fSmoothPoints(
kFALSE), fSmoothLines(
kFALSE),
136 fAxesDepthTest(
kTRUE),
138 fReferencePos(0.0, 0.0, 0.0),
139 fDrawCameraCenter(
kFALSE),
140 fCameraOverlay(nullptr),
144 fPictureFileName(
"viewer.jpg"),
149 fIgnoreSizesOnUpdate(
kFALSE),
150 fResetCamerasOnUpdate(
kTRUE),
151 fResetCamerasOnNextUpdate(
kFALSE)
167 fContextMenu(nullptr),
179 fCurrentCamera(&fPerspectiveCameraXOZ),
180 fAutoRotator(nullptr),
184 fStereoZeroParallax (0.03f),
185 fStereoEyeOffsetFac (1.0f),
186 fStereoFrustumAsymFac (1.0f),
190 fSelectedPShapeRef (nullptr),
191 fCurrentOvlElm (nullptr),
193 fEventHandler(nullptr),
195 fPShapeWrap(nullptr),
196 fPushAction(kPushStd), fDragAction(
kDragNone),
197 fRedrawTimer(nullptr),
198 fMaxSceneDrawTimeHQ(5000),
199 fMaxSceneDrawTimeLQ(100),
200 fPointScale (1), fLineScale(1), fSmoothPoints(
kFALSE), fSmoothLines(
kFALSE),
202 fAxesDepthTest(
kTRUE),
204 fReferencePos(0.0, 0.0, 0.0),
205 fDrawCameraCenter(
kFALSE),
206 fCameraOverlay(nullptr),
210 fPictureFileName(
"viewer.jpg"),
213 fGLDevice(fPad->GetGLDevice()),
215 fIgnoreSizesOnUpdate(
kFALSE),
216 fResetCamerasOnUpdate(
kTRUE),
217 fResetCamerasOnNextUpdate(
kFALSE)
231 Int_t viewport[4] = {0};
233 SetViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
309 scenepad =
dynamic_cast<TGLScenePad*
>((*si)->GetScene());
310 if (scenepad && scenepad->
GetPad() == pad)
314 if (scenepad ==
nullptr)
376 if (!
box.IsEmpty()) {
411 glEnable(GL_LIGHTING);
412 glEnable(GL_DEPTH_TEST);
413 glEnable(GL_CULL_FACE);
415 glClearColor(0.f, 0.f, 0.f, 0.f);
417 glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
418 glEnable(GL_COLOR_MATERIAL);
419 glMaterialf(GL_BACK, GL_SHININESS, 0.0);
420 glPolygonMode(GL_FRONT, GL_FILL);
423 glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,
GL_TRUE);
424 Float_t lmodelAmb[] = {0.5f, 0.5f, 1.f, 1.f};
425 glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodelAmb);
426 glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,
GL_FALSE);
428 glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
429 glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
452 Info(
"TGLViewer::RequestDraw",
"viewer locked - requesting another draw.");
460 gROOT->ProcessLineFast(
Form(
"((TGLViewer *)0x%zx)->DoDraw()", (
size_t)
this));
496 if (
fSmoothPoints) glEnable(GL_POINT_SMOOTH);
else glDisable(GL_POINT_SMOOTH);
497 if (
fSmoothLines) glEnable(GL_LINE_SMOOTH);
else glDisable(GL_LINE_SMOOTH);
500 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
529 glClear(GL_DEPTH_BUFFER_BIT);
570 Info(
"TGLViewer::DoDraw()",
"zero surface area, draw skipped.");
576 Int_t viewport[4] = {};
578 SetViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
604 Info(
"TGLViewer::DoDraw()",
"Took %f msec", timer.
End());
662 Float_t gl_near, gl_far, zero_p_dist;
664 Float_t x_len_at_zero_parallax;
673 glDrawBuffer(GL_BACK_LEFT);
678 glEnable(GL_SCISSOR_TEST);
683 gl_near =
c.GetNearClip();
684 gl_far =
c.GetFarClip();
690 x_len_at_zero_parallax = 2.0f * w_half * zero_p_dist / gl_near;
696 abs_trans *=
c.RefCamTrans();
699 glTranslatef(stereo_offset*left_vec[0], stereo_offset*left_vec[1], stereo_offset*left_vec[2]);
701 glMatrixMode(GL_PROJECTION);
703 glFrustum(-w_half + frustum_asym, w_half + frustum_asym,
704 -h_half, h_half, gl_near, gl_far);
705 glMatrixMode(GL_MODELVIEW);
725 glDrawBuffer(GL_BACK_RIGHT);
738 glTranslatef(-stereo_offset*left_vec[0], -stereo_offset*left_vec[1], -stereo_offset*left_vec[2]);
740 glMatrixMode(GL_PROJECTION);
742 glFrustum(-w_half - frustum_asym, w_half - frustum_asym,
743 -h_half, h_half, gl_near, gl_far);
744 glMatrixMode(GL_MODELVIEW);
769 glDrawBuffer(GL_BACK);
773 glDisable(GL_SCISSOR_TEST);
815 if (GLEW_EXT_framebuffer_object &&
gEnv->
GetValue(
"OpenGL.SavePicturesViaFBO", 1))
836 static const TString eh(
"TGLViewer::SavePictureUsingBB");
841 Warning(eh,
"file %s cannot be saved with this extension.", fileName.
Data());
846 Error(eh,
"viewer locked - try later.");
856 gROOT->ProcessLineFast(
Form(
"((TGLViewer *)0x%zx)->DoDraw(kFALSE)", (
size_t)
this));
862 glReadBuffer(GL_BACK);
865 glPixelStorei(GL_PACK_ALIGNMENT, 1);
867 GL_BGRA, GL_UNSIGNED_BYTE, xx);
871 image->WriteImage(fileName);
894 static const TString eh(
"TGLViewer::SavePictureUsingFBO");
899 Warning(eh,
"file %s cannot be saved with this extension.", fileName.
Data());
904 Error(eh,
"viewer locked - try later.");
917 catch (std::runtime_error& exc)
919 Error(eh,
"%s",exc.what());
920 if (
gEnv->
GetValue(
"OpenGL.SavePictureFallbackToBB", 1)) {
921 Info(eh,
"Falling back to saving image via back-buffer. Window must be fully visible.");
923 Warning(eh,
"Back-buffer does not support image scaling, window size will be used.");
934 if (pixel_object_scale != 0)
946 gROOT->ProcessLineFast(
Form(
"((TGLViewer *)0x%zx)->DoDraw(kFALSE)", (
size_t)
this));
957 glPixelStorei(GL_PACK_ALIGNMENT, 1);
959 GL_BGRA, GL_UNSIGNED_BYTE, xx);
963 image->WriteImage(fileName);
969 if (pixel_object_scale != 0)
987 static const TString eh(
"TGLViewer::GetPictureUsingBB");
990 Error(eh,
"viewer locked - try later.");
1000 gROOT->ProcessLineFast(
Form(
"((TGLViewer *)0x%zx)->DoDraw(kFALSE)", (
size_t)
this));
1006 glReadBuffer(GL_BACK);
1009 glPixelStorei(GL_PACK_ALIGNMENT, 1);
1011 GL_BGRA, GL_UNSIGNED_BYTE, xx);
1034 static const TString eh(
"TGLViewer::GetPictureUsingFBO");
1037 Error(eh,
"viewer locked - try later.");
1050 catch (std::runtime_error& exc)
1052 Error(eh,
"%s",exc.what());
1053 if (
gEnv->
GetValue(
"OpenGL.GetPictureFallbackToBB", 1)) {
1054 Info(eh,
"Falling back to saving image via back-buffer. Window must be fully visible.");
1056 Warning(eh,
"Back-buffer does not support image scaling, window size will be used.");
1067 if (pixel_object_scale != 0)
1079 gROOT->ProcessLineFast(
Form(
"((TGLViewer *)0x%zx)->DoDraw(kFALSE)", (
size_t)
this));
1090 glPixelStorei(GL_PACK_ALIGNMENT, 1);
1092 GL_BGRA, GL_UNSIGNED_BYTE, xx);
1100 if (pixel_object_scale != 0)
1117 Bool_t pixel_object_scale)
1131 Bool_t pixel_object_scale)
1145 Bool_t pixel_object_scale)
1161 glDisable(GL_DEPTH_TEST);
1167 glDisable(GL_DEPTH_TEST);
1169 const UChar_t rgba[4] = { 0, 255, 255, 255 };
1175 glEnable(GL_DEPTH_TEST);
1180 glDisable(GL_DEPTH_TEST);
1185 glEnable(GL_DEPTH_TEST);
1195 glDisable(GL_LIGHTING);
1199 glColor3d(0.0, 1.0, 0.0);
1203 glDisable(GL_DEPTH_TEST);
1208 glEnable(GL_DEPTH_TEST);
1210 glEnable(GL_LIGHTING);
1227 color->
GetRGB(rgb[0], rgb[1], rgb[2]);
1229 rgb[0] = rgb[1] = rgb[2] = 0.0f;
1231 glClearColor(rgb[0], rgb[1], rgb[2], 0.0f);
1234 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
1254 static const Float_t z = -1.0f;
1256 glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity();
1257 glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity();
1262 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
1265 glVertex3f(-1, -1, z); glVertex3f( 1, -1, z);
1266 glVertex3f( 1, 1, z); glVertex3f(-1, 1, z);
1270 glMatrixMode(GL_PROJECTION); glPopMatrix();
1271 glMatrixMode(GL_MODELVIEW); glPopMatrix();
1316 return Bool_t(
gROOT->ProcessLineFast(
Form(
"((TGLViewer *)0x%zx)->DoSelect(%d, %d)", (
size_t)
this,
x,
y)));
1344 glRenderMode(GL_SELECT);
1350 Int_t nHits = glRenderMode(GL_RENDER);
1354 if (
gDebug > 0)
Info(
"TGLViewer::DoSelect",
"Primary select nHits=%d.", nHits);
1389 return Bool_t(
gROOT->ProcessLineFast(
Form(
"((TGLViewer *)0x%zx)->DoSecondarySelect(%d, %d)", (
size_t)
this,
x,
y)));
1414 Info(
"TGLViewer::SecondarySelect",
"Skipping secondary selection "
1415 "(sinfo=0x%zx, pshape=0x%zx).\n",
1428 foo.push_back(sinfo);
1432 glRenderMode(GL_SELECT);
1439 glPushName(pshp->
ID());
1447 Int_t nSecHits = glRenderMode(GL_RENDER);
1451 if (
gDebug > 0)
Info(
"TGLViewer::DoSelect",
"Secondary select nSecHits=%d.", nSecHits);
1499 return Bool_t(
gROOT->ProcessLineFast(
Form(
"((TGLViewer *)0x%zx)->DoOverlaySelect(%d, %d)", (
size_t)
this,
x,
y)));
1524 glRenderMode(GL_SELECT);
1530 Int_t nHits = glRenderMode(GL_RENDER);
1584 delete this;
return;
1599 "TGLFaderHelper",
this,
"MakeFadeStep()");
1637 Info(
"SwitchColorSet()",
"Global color-set is in use, switch not supported.");
1746 Info(
"TGLViewer::SetViewport",
"updated - corner %d,%d dimensions %d,%d",
x,
y,
width,
height);
1767 switch(cameraType) {
1791 Error(
"TGLViewer::SetCurrentCamera",
"invalid camera type");
1858 Error(
"TGLViewer::SetCurrentCamera",
"invalid camera type");
1938 Error(
"TGLViewer::SetOrthoCamera",
"invalid camera type");
1986 Error(
"TGLViewer::SetPerspectiveCamera",
"invalid camera type");
2118 Emit(
"MouseOver(TGLPhysicalShape*,UInt_t)", args);
2129 Emit(
"MouseOver(TObject*,UInt_t)", args);
2140 Emit(
"ReMouseOver(TObject*,UInt_t)", args);
2152 Emit(
"UnMouseOver(TObject*,UInt_t)", args);
2172 Emit(
"Clicked(TObject*,UInt_t,UInt_t)", args);
2185 Emit(
"ReClicked(TObject*,UInt_t,UInt_t)", args);
2197 Emit(
"UnClicked(TObject*,UInt_t,UInt_t)", args);
2206 static UInt_t oldx = 0, oldy = 0;
2208 if (oldx != posx || oldy != posy) {
2212 Emit(
"MouseIdle(TGLPhysicalShape*,UInt_t,UInt_t)", args);
2229 gPad->SetSelected(
this);
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
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
R__EXTERN TVirtualMutex * gROOTMutex
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
#define R__LOCKGUARD(mutex)
virtual Color_t GetFillColor() const
Return the fill area color.
virtual Color_t GetLineColor() const
Return the line color.
The color creation and management class.
virtual void GetRGB(Float_t &r, Float_t &g, Float_t &b) const
static Int_t GetColor(const char *hexcolor)
Static method returning color number for color specified by hex color string of form: "#rrggbb",...
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
Automatically rotates GL camera.
void Start()
Start the auto-rotator.
TGLCamera * GetCamera() const
void Stop()
Stop the auto-rotator.
Concrete class describing an orientated (free) or axis aligned box of 8 vertices.
TGLVector3 Extents() const
TGLVertex3 Center() const
void Draw(Bool_t solid=kFALSE) const
Draw the bounding box as either wireframe (default) of solid using current GL color.
A GL overlay element which displays camera furstum.
Abstract base camera class - concrete classes for orthographic and perspective cameras derive from it...
virtual Bool_t IsPerspective() const
TGLVector3 ViewportDeltaToWorld(const TGLVertex3 &worldRef, Double_t viewportXDelta, Double_t viewportYDelta, TGLMatrix *modviewMat=nullptr) const
Apply a 2D viewport delta (shift) to the projection of worldRef onto viewport, returning the resultan...
Double_t * GetCenterVec()
void DrawDebugAids() const
Draw out some debugging aids for the camera:
virtual void Setup(const TGLBoundingBox &box, Bool_t reset=kTRUE)=0
void SetViewport(const TGLRect &viewport)
Set viewport extents from passed 'viewport' rect.
A collection of concrete TGLClip objects to be selected from.
TGLClip * GetCurrentClip() const
void SetupCurrentClip(const TGLBoundingBox &sceneBBox)
Setup current clipping object for given scene bounding box.
void SetupCurrentClipIfInvalid(const TGLBoundingBox &sceneBBox)
Setup current clipping object for given scene bounding box.
Class encapsulating a set of colors used throughout standard rendering.
void StdLightBackground()
Set defaults for light (white) background.
void SetColor(Int_t r, Int_t g, Int_t b, Int_t a=255)
Set color with Int_t values.
Color_t GetColorIndex() const
Returns color-index representing the color.
Identifier of a shared GL-context.
void DeleteGLResources()
Delete GL resources registered for destruction.
void Release(TGLContext *ctx)
Remove context ctx from the list of references.
void AddRef(TGLContext *ctx)
Add context ctx to the list of references.
void Unbind()
Unbind the frame-buffer object.
void Init(int w, int h, int ms_samples=0)
Acquire GL resources for given width, height and number of multi-sampling samples.
void Bind()
Bind the frame-buffer object.
void MakeFadeStep()
Make one fading step and request redraw.
Encapsulates a set of lights for OpenGL.
void StdSetupLights(const TGLBoundingBox &bbox, const TGLCamera &camera, Bool_t debug=kFALSE)
Setup lights for current given bounding box and camera.
Bool_t TakeLock(ELock lock) const
Lock the object in mode 'lock'.
ELock CurrentLock() const
Bool_t ReleaseLock(ELock lock) const
Release current lock, make sure it the same as the 'lock' argument.
static const char * LockName(ELock lock)
Return name-string for given lock-type.
Bool_t IsDrawOrSelectLock() const
virtual Bool_t SupportsSecondarySelect() const
Combine all available manipulators in a collection.
void SetDrawBBox(Bool_t bb)
void SetPShape(TGLPhysicalShape *shape) override
Set phys-shape, override of virtual from TGLPShapeRef.
16 component (4x4) transform matrix - column MAJOR as per GL.
TGLVector3 GetBaseVec(Int_t b) const
TGLVector3 GetTranslation() const
Return the translation component of matrix.
void Set(const TGLVertex3 &origin, const TGLVector3 &zAxis, const TGLVector3 &xAxis=nullptr)
Set matrix which when applied puts local origin at 'origin' and the local Z axis in direction 'z'.
Orthographic projection camera.
void Setup(const TGLBoundingBox &box, Bool_t reset=kTRUE) override
Setup camera limits suitable to view the world volume defined by 'box' and call Reset() to initialise...
void Configure(Double_t zoom, Double_t dolly, Double_t center[3], Double_t hRotate, Double_t vRotate) override
Configure the camera state.
static Bool_t Capture(TGLViewer &viewer, EFormat format, const char *filePath=nullptr)
Capture viewer to file.
virtual Bool_t MouseEnter(TGLOvlSelectRecord &selRec)
Mouse has entered this element.
virtual Bool_t MouseStillInside(TGLOvlSelectRecord &selRec)
virtual void MouseLeave()
Mouse has left the element.
void Reset() override
Reinitialise all data to null values.
TGLOverlayElement * GetOvlElement() const
Wrap TGLPysicalShape into TObject so that it can be edited using GED.
TGLPhysicalShape * fPShape
TGLPhysicalShape * GetPShape() const
Perspective projection camera - with characteristic foreshortening.
void Setup(const TGLBoundingBox &box, Bool_t reset=kTRUE) override
Setup camera limits suitable to view the world volume defined by 'box' and call Reset() to initialise...
void Configure(Double_t fov, Double_t dolly, Double_t center[3], Double_t hRotate, Double_t vRotate) override
Configure the camera state.
Concrete physical shape - a GL drawable.
virtual void Draw(TGLRnrCtx &rnrCtx) const
Draw physical shape, using LOD flags, potential from display list cache.
Viewport (pixel base) 2D rectangle class.
void Set(Int_t x, Int_t y, Int_t width, Int_t height)
void RequestDraw(Int_t milliSec, Short_t redrawLOD)
void SetRenderScale(Float_t s)
void SetSceneInfo(TGLSceneInfo *si)
TGLColorSet * ChangeBaseColorSet(TGLColorSet *set)
Change the default/bottom color-set.
void SetRenderTimeOut(Double_t tout)
void SetShapeLOD(Short_t LOD)
void BeginSelection(Int_t x, Int_t y, Int_t r=3)
Setup context for running selection.
Short_t SelectTransparents() const
Float_t GetRenderScale() const
void SetSecSelection(Bool_t secSel)
TGLColorSet * GetBaseColorSet()
Returns the current base color-set.
TGLSelectBuffer * GetSelectBuffer() const
void SetGLCtxIdentity(TGLContextIdentity *cid)
void SetGrabImage(Bool_t gi)
TGLColorSet & ColorSet()
Return reference to current color-set (top of the stack).
Bool_t GetGrabImage() const
void StartStopwatch()
Start the stopwatch.
void StopStopwatch()
Stop the stopwatch.
void EndSelection(Int_t glResult)
End selection.
void SetDrawPass(Short_t dpass)
Scene base-class – provides basic interface expected by the TGLViewer or its sub-classes:
virtual void PostRender(TGLRnrCtx &rnrCtx)
Perform post-render clean-up.
virtual void PreRender(TGLRnrCtx &rnrCtx)
Perform pre-render initialization - fill rnrCtx with values stored during PreDraw().
Base class for extended scene context.
TGLSceneBase * GetScene() const
Implements VirtualViewer3D interface and fills the base-class visualization structures from pad conte...
virtual void PadPaintFromViewer(TGLViewer *viewer)
Entry point for requesting update of scene's contents from gl-viewer.
TVirtualPad * GetPad() const
UInt_t * RawRecord(Int_t i)
void SetRawOnly(UInt_t *data)
Setup the record from raw buffer.
Standard selection record including information about containing scene and details ob out selected ob...
static Bool_t AreSameSelectionWise(const TGLSelectRecord &r1, const TGLSelectRecord &r2)
Check if the records imply the same selection result, that is, their secondary members are all equal.
void Reset() override
Reinitialise all data to null values.
Bool_t GetTransparent() const
TGLLogicalShape * GetLogShape() const
TGLPhysicalShape * GetPhysShape() const
void Print()
Print contents of the select record to stdout.
TGLSceneInfo * GetSceneInfo() const
Stopwatch object for timing GL work.
void Start()
Start timing.
Double_t End()
End timing, return total time since Start(), in milliseconds.
Wrapper class for various misc static functions - error checking, draw helpers etc.
static void DrawSphere(const TGLVertex3 &position, Double_t radius, const UChar_t rgba[4])
Draw sphere, centered on vertex 'position', with radius 'radius', color 'rgba'.
static const UChar_t fgWhite[4]
static void SetLineWidthScale(Float_t scale)
Set global line-width scale.
static void DrawReferenceMarker(const TGLCamera &camera, const TGLVertex3 &pos, Float_t radius=3, const UChar_t *rgba=nullptr)
Draw a sphere- marker on world-coordinate 'pos' with pixel radius 'radius'.
static Int_t CheckError(const char *loc)
Check current GL error state, outputting details via ROOT Error method if one.
static void ColorAlpha(const TGLColor &color, UChar_t alpha)
Set color from TGLColor and alpha value.
static Int_t GetPickingRadius()
Returns picking radius.
static void SetPointSizeScale(Float_t scale)
Set global point-size scale.
static const UChar_t fgGreen[4]
static void DrawSimpleAxes(const TGLCamera &camera, const TGLBoundingBox &bbox, Int_t axesType, Float_t labelScale=1)
Draw simple xyz-axes for given bounding-box.
static void PointToViewport(Int_t &x, Int_t &y)
Convert from point/screen coordinates to GL viewport coordinates.
3 component (x/y/z) vector class.
3 component (x/y/z) vertex class.
void Set(Double_t x, Double_t y, Double_t z)
virtual void PreRenderOverlaySelection()
Perform minimal initialization for overlay selection.
Bool_t FindClosestOpaqueRecord(TGLSelectRecord &rec, Int_t &recIdx)
Find next select record that can be resolved and whose result is not transparent, starting from posit...
virtual void ResetSceneInfos()
Force rebuild of view-dependent scene-info structures.
TGLSceneInfo * AddScene(TGLSceneBase *scene)
Add new scene, appropriate scene-info is created.
virtual void RemoveOverlayElement(TGLOverlayElement *el)
Remove overlay element.
virtual void RenderOverlay(Int_t state, Bool_t selection)
Render overlay objects.
virtual void Render()
Render all scenes.
virtual void PostRenderOverlaySelection()
Perform cleanup after overlay selection.
virtual void PreRender()
Initialize render-context, setup camera, GL, render-area.
virtual void PostRender()
Function called after rendering is finished.
Bool_t FindClosestOverlayRecord(TGLOvlSelectRecord &rec, Int_t &recIdx)
Find next overlay-select record that can be resolved, starting from position 'recIdx'.
virtual void MergeSceneBBoxes(TGLBoundingBox &bbox)
Merge bounding-boxes of all active registered scenes.
TGLBoundingBox fOverallBoundingBox
std::list< TGLSceneInfo * > SceneInfoList_t
virtual void RenderSelectedForHighlight()
Render selected objects from all scenes for highlight.
SceneInfoList_t::iterator SceneInfoList_i
virtual void AddOverlayElement(TGLOverlayElement *el)
Add overlay element.
Bool_t FindClosestRecord(TGLSelectRecord &rec, Int_t &recIdx)
Find next select record that can be resolved, starting from position 'recIdx'.
Base GL viewer object - used by both standalone and embedded (in pad) GL.
TGLRedrawTimer * fRedrawTimer
virtual void MouseOver(TGLPhysicalShape *)
Emit MouseOver signal.
void SetDrawCameraCenter(Bool_t x)
Draw camera look at and rotation point.
TGLAutoRotator * fAutoRotator
Float_t fLineScale
size scale for points
void FadeView(Float_t alpha)
Draw a rectangle (background color and given alpha) across the whole viewport.
Bool_t SavePictureScale(const TString &fileName, Float_t scale, Bool_t pixel_object_scale=kTRUE)
Save picture with given scale to current window size.
TGLCamera * fCurrentCamera
TGLCameraOverlay * fCameraOverlay
reference marker on?
virtual void RefreshPadEditor(TObject *obj=nullptr)
Update GED editor if it is set.
Bool_t fAxesDepthTest
axes type
virtual void SetEventHandler(TGEventHandler *handler)
Set the event-handler.
TGLPerspectiveCamera fPerspectiveCameraYOZ
void PrintObjects() override
Pass viewer for print capture by TGLOutput.
TGLOrthoCamera fOrthoXOYCamera
TGLSelectRecord fSelRec
select record in use as selected
virtual void ReMouseOver(TObject *obj, UInt_t state)
Emit MouseOver signal.
TImage * GetPictureUsingFBO(Int_t w, Int_t h, Float_t pixel_object_scale=0)
Returns current image.
TGLOrthoCamera fOrthoXnOZCamera
static TGLColorSet & GetDefaultColorSet()
Returns reference to the default color-set.
void InitGL()
Initialise GL state.
void SetAutoRotator(TGLAutoRotator *ar)
Set the auto-rotator for this viewer. The old rotator is deleted.
virtual void Clicked(TObject *obj)
Emit Clicked signal.
void MakeCurrent() const
Make GL context current.
Bool_t fIsPrinting
debug mode (forced rebuild + draw scene/frustum/interest boxes)
static TGLColorSet fgDefaultColorSet
fade the view (0 - no fade/default, 1 - full fade/no rendering done)
void SetupClipObject() override
allow simple guide axes labels to be scaled relative to scene units
TGEventHandler * fEventHandler
select record from last overlay select
TGLPerspectiveCamera fPerspectiveCameraXOY
TGLOrthoCamera fOrthoZnOYCamera
TGLRect fViewport
max time for scene rendering at high LOD (in ms)
virtual void SelectionChanged()
Update GUI components for embedded viewer selection change.
void ExecuteEvent(Int_t event, Int_t px, Int_t py) override
Process event of type 'event' - one of EEventType types, occurring at window location px,...
virtual void UnClicked(TObject *obj, UInt_t button, UInt_t state)
Emit UnClicked signal with button id and modifier state.
void SetPerspectiveCamera(ECameraType camera, Double_t fov, Double_t dolly, Double_t center[3], Double_t hRotate, Double_t vRotate)
Set a perspective camera to supplied configuration - note this does not need to be the current camera...
TGLVertex3 fReferencePos
reference marker on?
void PreRender() override
Initialize objects that influence rendering.
Bool_t RequestOverlaySelect(Int_t x, Int_t y)
Post request for secondary selection rendering of selected object around the window point (x,...
static Bool_t IsUsingDefaultColorSetForNewViewers()
Returns the value of the static flag that determines if new viewers should use the default color-set.
virtual void MouseIdle(TGLPhysicalShape *, UInt_t, UInt_t)
Emit MouseIdle signal.
Bool_t SavePictureWidth(const TString &fileName, Int_t width, Bool_t pixel_object_scale=kTRUE)
Save picture with given width (height scaled proportionally).
void DoDrawStereo(Bool_t swap_buffers)
Draw out in stereoscopic mode.
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...
void SetGuideState(Int_t axesType, Bool_t axesDepthTest, Bool_t referenceOn, const Double_t *referencePos)
Set the state of guides (axes & reference markers) from arguments.
void DoDraw(Bool_t swap_buffers=kTRUE)
Draw out the viewer.
TGLOrthoCamera fOrthoZOYCamera
void SwitchColorSet()
Switch between dark and light colorsets.
TGLPShapeObj * fPShapeWrap
GED editor.
TGLSelectRecord fSecSelRec
select record from last select (should go to context)
~TGLViewer() override
Destroy viewer object.
void DrawDebugInfo()
If in debug mode draw camera aids and overall bounding box.
void AutoFade(Float_t fade, Float_t time=1, Int_t steps=10)
Animate fading from current value to fade over given time (sec) and number of steps.
Bool_t fReferenceOn
remove guides hidden-lines
TGLCamera & CurrentCamera() const
void SetCurrentCamera(ECameraType camera)
Set current active camera - 'cameraType' one of: kCameraPerspX, kCameraPerspY, kCameraPerspZ,...
void SetupCameras(Bool_t reset)
Setup cameras for current bounding box.
Bool_t fResetCamerasOnUpdate
Int_t fAxesType
smooth line edge rendering
void SetStereo(Bool_t stereo, Bool_t quad_buf=kTRUE)
Enable stereo rendering.
TImage * GetPictureUsingBB()
Returns current image.
TGLCamera & RefCamera(ECameraType camera)
Return camera reference by type.
TContextMenu * fContextMenu
external pad - remove replace with signal
void UseLightColorSet()
Use the light color-set.
Bool_t IsUsingDefaultColorSet() const
Check if the viewer is using the default color set.
Bool_t DoSelect(Int_t x, Int_t y)
Perform GL selection, picking objects overlapping WINDOW area described by 'rect'.
void PreDraw()
Perform GL work which must be done before each draw.
Float_t fStereoZeroParallax
draw quad buffer or left/right stereo in left/right half of window
virtual void PostSceneBuildSetup(Bool_t resetCameras)
Perform post scene-build setup.
Float_t fStereoEyeOffsetFac
position of zero-parallax plane: 0 - near clipping plane, 1 - far clipping plane
Bool_t SavePictureUsingBB(const TString &fileName)
Save current image in various formats (gif, gif+, jpg, png).
Bool_t SavePicture()
Save current image using the default file name which can be set via SetPictureFileName() and defaults...
Float_t fFader
default file-name for SavePicture()
void UpdateScene(Bool_t redraw=kTRUE)
Force update of pad-scenes.
TGLOrthoCamera fOrthoZOXCamera
Bool_t SavePictureUsingFBO(const TString &fileName, Int_t w, Int_t h, Float_t pixel_object_scale=0)
Save current image in various formats (gif, gif+, jpg, png).
friend class TGLAutoRotator
static void SetAxisLabelScale(Float_t als)
Sets static scaling facor that allows simple guide axies to have label values scaled relative to actu...
TGLOrthoCamera fOrthoXOZCamera
Bool_t GetClipAutoUpdate() const
virtual void OverlayDragFinished()
An overlay operation can result in change to an object.
Bool_t SavePictureHeight(const TString &fileName, Int_t height, Bool_t pixel_object_scale=kTRUE)
Save picture with given height (width scaled proportionally).
void SetOrthoCamera(ECameraType camera, Double_t zoom, Double_t dolly, Double_t center[3], Double_t hRotate, Double_t vRotate)
Set an orthographic camera to supplied configuration - note this does not need to be the current came...
void DrawGuides()
Draw reference marker and coordinate axes.
void UseDefaultColorSet(Bool_t x)
Set usage of the default color set.
Float_t fMaxSceneDrawTimeHQ
timer for triggering redraws
Bool_t RequestSecondarySelect(Int_t x, Int_t y)
Request secondary select.
TGedEditor * fGedEditor
event handler
void SetViewport(Int_t x, Int_t y, Int_t width, Int_t height)
Set viewer viewport (window area) with bottom/left at (x,y), with dimensions 'width'/'height'.
Float_t fPointScale
color-set with light background
TGLColorSet fLightColorSet
color-set with dark background
virtual void UnMouseOver(TObject *obj, UInt_t state)
Emit UnMouseOver signal.
void PadPaint(TVirtualPad *pad) override
Entry point for updating viewer contents via VirtualViewer3D interface.
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
Calculate and return pixel distance to nearest viewer object from window location px,...
virtual void ReClicked(TObject *obj, UInt_t button, UInt_t state)
Emit ReClicked signal with button id and modifier state.
Bool_t fResetCamerasOnNextUpdate
Bool_t fSmoothPoints
width scale for lines
TGLOrthoCamera fOrthoZnOXCamera
Float_t fMaxSceneDrawTimeLQ
max time for scene rendering at high LOD (in ms)
Bool_t fSmoothLines
smooth point edge rendering
TGLManipSet * fSelectedPShapeRef
select record from last secondary select (should go to context)
void ClearCurrentOvlElm()
Reset current overlay-element to zero, eventually notifying the old one that the mouse has left.
void ApplySelection()
Process result from last selection (in fSelRec) and extract a new current selection from it.
TGLColorSet fDarkColorSet
viewport - drawn area
void InitSecondaryObjects()
Common initialization.
Bool_t DoSecondarySelect(Int_t x, Int_t y)
Secondary selection.
void UseDarkColorSet()
Use the dark color-set.
Bool_t RequestSelect(Int_t x, Int_t y)
Post request for selection render pass viewer, picking objects around the window point (x,...
void SetClearColor(Color_t col)
Set background method.
static Float_t fgAxisLabelScale
name says it all
Bool_t DoOverlaySelect(Int_t x, Int_t y)
Perform GL selection, picking overlay objects only.
Bool_t fDrawCameraCenter
reference position
void ReinitializeCurrentCamera(const TGLVector3 &hAxis, const TGLVector3 &vAxis, Bool_t redraw=kTRUE)
Change base-vectors defining the camera-base transformation of current camera.
Bool_t IsColorSetDark() const
Returns true if current color set is dark.
void PostDraw()
Perform GL work which must be done after each draw.
TGLAutoRotator * GetAutoRotator()
Get the auto-rotator for this viewer.
TGLPerspectiveCamera fPerspectiveCameraXOZ
void Render() override
Normal rendering, used by mono and stereo rendering.
const TGLPhysicalShape * GetSelected() const
Return selected physical shape.
Float_t fStereoFrustumAsymFac
Bool_t fDebugMode
cache logicals during scene rebuilds
TGLOrthoCamera fOrthoXnOYCamera
static Bool_t fgUseDefaultColorSetForNewViewers
a shared, default color-set
void GetGuideState(Int_t &axesType, Bool_t &axesDepthTest, Bool_t &referenceOn, Double_t *referencePos) const
Fetch the state of guides (axes & reference markers) into arguments.
void RemoveOverlayElement(TGLOverlayElement *el) override
Remove overlay element.
TGLSelectRecord fCurrentSelRec
TGLViewer(const TGLViewer &)=delete
void DoDrawMono(Bool_t swap_buffers)
Draw out in monoscopic mode.
Bool_t fStereoQuadBuf
use stereo rendering
TGLContextIdentity * fGLCtxId
for embedded gl viewer
void PostRender() override
Restore state set in PreRender().
static void UseDefaultColorSetForNewViewers(Bool_t x)
Sets static flag that determines if new viewers should use the default color-set.
TGLOvlSelectRecord fOvlSelRec
current overlay element
TGLOverlayElement * fCurrentOvlElm
void SwapBuffers() const
Swap GL buffers.
void ResetCurrentCamera()
Resets position/rotation of current camera to default values.
virtual Bool_t IsMapped()
Returns kTRUE if window is mapped on screen, kFALSE otherwise.
virtual void SetModel(TVirtualPad *pad, TObject *obj, Int_t event, Bool_t force=kFALSE)
Activate object editors according to the selected object.
virtual TObject * GetModel() const
An abstract interface to image processing library.
static TImage * Create()
Create an image.
virtual void FromGLBuffer(UChar_t *, UInt_t, UInt_t)
Mother of all ROOT objects.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute action corresponding to an event at (px,py).
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
void Emit(const char *signal, const T &arg)
Activate signal with single parameter.
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
const char * Data() const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
static void SingleShot(Int_t milliSec, const char *receiver_class, void *receiver, const char *method)
This static function calls a slot after a given time interval.
TVirtualPad is an abstract base class for the Pad and Canvas classes.
virtual void ReleaseViewer3D(Option_t *type="")=0
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Int_t Nint(T x)
Round to nearest integer. Rounds half integers to the nearest even integer.
constexpr Double_t DegToRad()
Conversion from degree to radian: .
Int_t CeilNint(Double_t x)
Returns the nearest integer of TMath::Ceil(x).
Double_t Tan(Double_t)
Returns the tangent of an angle of x radians.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.