23#include "TGLIncludes.h"
42 fNContours(kNContours)
68 Info(
"TGL5DPainter::AddSurface",
"Building the mesh ...");
79 Info(
"TGL5DPainter::AddSurface",
"Mesh has %d vertices",
Int_t(
mesh.fVerts.size() / 3));
81 if (!
mesh.fVerts.size())
88 fIsos.front().fRange = range;
91 fIsos.front().fColor = ci;
119 if (surf ==
fIsos.end()) {
120 Error(
"TGL5DPainter::RemoveSurface",
"Invalid iterator, surface does not exist.");
132 static char mess[] = {
"gl5d"};
166 const Double_t min = isString ? v4R.first : mean - 3 * rms;
172 Info(
"InitGeometry",
"min = %g, mean = %g, rms = %g, dx = %g", min, mean, rms,
d);
176 Info(
"TGL5DPainter::InitGeometry",
"Iso-level %g, range is %g ...", isoLevel, range);
177 const Color_t color = j * 6 + 1;
178 AddSurface(isoLevel, color, 0.125, 0.05, range);
252 Info(
"ProcessEvent",
"Cut box does not work in high color, please, switch to true color");
262 gROOT->ProcessLineFast(
Form(
"((TGLPlotPainter *)0x%zx)->Paint()", (
size_t)
this));
280 Warning(
"SetAlpha",
"Alpha is not required for string data (your 4-th dimension is string).");
289 Warning(
"SetNContours",
"Bad number of contours: %d",
n);
317 Info(
"TGL5DPainter::ResetGeometryRanges",
"Building the mesh ...");
331 Info(
"TGL5DPainter::AddSurface",
"Mesh has %d vertices",
Int_t(
mesh.fVerts.size() / 3));
342 return fIsos.begin();
358 glEnable(GL_LIGHTING);
360 glEnable(GL_DEPTH_TEST);
361 glDisable(GL_CULL_FACE);
362 glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,
GL_TRUE);
370 glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,
GL_FALSE);
371 glDisable(GL_CULL_FACE);
372 glDisable(GL_DEPTH_TEST);
373 glDisable(GL_LIGHT0);
374 glDisable(GL_LIGHTING);
396 if (it->fAlpha != 100) {
397 needSecondPass =
kTRUE;
402 glEnable(GL_POLYGON_OFFSET_FILL);
403 glPolygonOffset(1.f, 1.f);
405 glDisable(GL_POLYGON_OFFSET_FILL);
410 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
411 glColor4d(1., 0.4, 0., 0.5);
416 if (needSecondPass) {
418 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
422 if (it->fAlpha == 100)
427 glEnable(GL_POLYGON_OFFSET_FILL);
428 glPolygonOffset(1.f, 1.f);
430 glDisable(GL_POLYGON_OFFSET_FILL);
434 glColor4d(1., 0.4, 0., it->fAlpha / 150.);
452 Float_t rgba[] = {0.f, 0.f, 0.f,
static_cast<Float_t>(it->fAlpha / 100.)};
455 glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, rgba);
456 const Float_t specColor[] = {1.f, 1.f, 1.f, 1.f};
457 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specColor);
458 glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 20.f);
469 glColor3d(0.4, 0., 1.);
void Info(const char *location, const char *msgfmt,...)
Use this function for informational messages.
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
void BuildMesh(const DataSource *src, const TGridGeometry< ValueType > &geom, MeshType_t *mesh, ValueType iso)
Build iso-mesh using marching cubes.
void SelectPoints(Double_t v4Level, Double_t range)
"Select" sub-range from source data
UInt_t SelectedSize() const
Size of selected sub-range.
void ProcessEvent(Int_t event, Int_t px, Int_t py) override
void SetSurfaceColor(ConstSurfIter_t surf) const
Set the color for iso-surface.
void DrawMesh(ConstSurfIter_t surf) const
Draw one iso-surface.
char * GetPlotInfo(Int_t px, Int_t py) override
Return info for plot part under cursor.
void StartPan(Int_t px, Int_t py) override
User clicks right mouse button (in a pad).
void SetNContours(Int_t num)
Set the number of predefined contours.
void InitGL() const override
Initialize OpenGL state variables.
void ResetGeometryRanges()
No need to create or delete meshes, number of meshes (iso-levels) are the same, but meshes must be re...
SurfList_t::iterator SurfIter_t
SurfIter_t SurfacesBegin()
std::list::begin.
void RemoveSurface(SurfIter_t surf)
Remove iso-surface.
Rgl::Mc::TMeshBuilder< TKDEFGT, Float_t > fMeshBuilder
SurfIter_t SurfacesEnd()
std::list::end.
void DrawPlot() const override
Draw a set of meshes.
void SetAlpha(Double_t newAlpha)
Set selection range parameter.
void DrawCloud() const
Draw full cloud of points.
void Pan(Int_t px, Int_t py) override
Mouse events handler.
SurfIter_t AddSurface(Double_t v4, Color_t ci, Double_t isoVal=1., Double_t sigma=1., Double_t range=1e-3, Int_t lowNumOfPoints=kNLowPts)
Try to add new iso-surface.
SurfList_t::const_iterator ConstSurfIter_t
Bool_t InitGeometry() override
Create mesh.
void DeInitGL() const override
Return some gl states to original values.
void DrawSubCloud(Double_t v4, Double_t range, Color_t ci) const
Draw cloud for selected iso-surface.
void AddOption(const TString &option) override
No additional options for TGL5DPainter.
TGL5DPainter(TGL5DDataSet *data, TGLPlotCamera *camera, TGLPlotCoordinates *coord)
Constructor.
std::vector< Double_t >::size_type size_type
void MoveBox(Int_t px, Int_t py, Int_t axisID)
Move box cut along selected direction.
void DrawBox(Bool_t selectionPass, Int_t selected) const
Draw cut as a semi-transparent box.
void TurnOnOff()
Turn the box cut on/off.
void StartMovement(Int_t px, Int_t py)
Start cut's movement.
void ResetBoxGeometry()
Set geometry using plot's back box.
void SetPlotBox(const Rgl::Range_t &xRange, const Rgl::Range_t &yRange, const Rgl::Range_t &zRange)
Set up a frame box.
const TGLVertex3 * Get3DBox() const
Get 3D box.
void DrawBox(Int_t selectedPart, Bool_t selectionPass, const std::vector< Double_t > &zLevels, Bool_t highColor) const
Draw back box for a plot.
Camera for TGLPlotPainter and sub-classes.
void StartPan(Int_t px, Int_t py)
User clicks somewhere (px, py).
void Apply(Double_t phi, Double_t theta) const
Applies rotations and translations before drawing.
void SetCamera() const
Viewport and projection.
void Pan(Int_t px, Int_t py)
Pan camera.
Int_t GetHeight() const
viewport[3]
void SetViewVolume(const TGLVertex3 *box)
'box' is the TGLPlotPainter's back box's coordinates.
Helper class for plot-painters holding information about axis ranges, numbers of bins and flags if ce...
Bool_t SetRanges(const TH1 *hist, Bool_t errors=kFALSE, Bool_t zBins=kFALSE)
Set bin ranges, ranges.
Double_t GetYScale() const
const Rgl::Range_t & GetXRangeScaled() const
Scaled range.
const Rgl::Range_t & GetYRangeScaled() const
Scaled range.
void SetCoordType(EGLCoordType type)
If coord type was changed, plot must reset sections (if any), set fModified.
Double_t GetXScale() const
Double_t GetZScale() const
const Rgl::Range_t & GetZRangeScaled() const
Scaled range.
Base class for plot-painters that provide GL rendering of various 2D and 3D histograms,...
std::vector< Double_t > fZLevels
void RestoreModelviewMatrix() const
TGLPlotCoordinates * fCoord
void Paint() override
Draw lego/surf/whatever you can.
void SaveProjectionMatrix() const
void SaveModelviewMatrix() const
void RestoreProjectionMatrix() const
void BuildModel(const std::vector< Double_t > &sources, Double_t sigma=1., UInt_t dim=3, UInt_t p=8, UInt_t k=0)
Calculate coefficients for FGT.
void ExtractRGBA(Color_t colorIndex, Float_t *rgba)
void ObjectIDToColor(Int_t objectID, Bool_t highColor)
Object id encoded as rgb triplet.
std::pair< Double_t, Double_t > Range_t
void DrawMesh(const std::vector< Float_t > &vs, const std::vector< Float_t > &ns, const std::vector< UInt_t > &ts)
Call function-template.
Double_t RMS(Long64_t n, const T *a, const Double_t *w=nullptr)
Returns the Standard Deviation of an array a with length n.
Double_t Mean(Long64_t n, const T *a, const Double_t *w=nullptr)
Returns the weighted mean of an array a with length n.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.