Add support for hierarchical positioning of TEveElements in any
specific scene. This allows for easier positioning of elements in
dynamic scenes when child elements are attached to their parent
elements and are supposed to follow their movements / rotations.
Several significant improvements in TEveCaloLego classes.
Calo classes now support individal tower selection. The
selection is properly maintained across all views (3D / RPhi / RhoZ
/ Lego). See screenshot below.
In top view draw cell values, if their screen size is above given limit.
New energy-scales drawn as overlay (in color and size mode). The
legend can be moved around the screen with the mouse.
Fix transition between orthographic and perspective camera in
TEveCaloLego event handler.
Use color-sets in overlays and axis in order to automatically
keep same contrast when changing background color.
In TEveTrackPropagator improve overall trajectory extrapolation
through the path-marks. Fix a problem with path-mark / boundary
approach with near-zero magnetic field.
Maximum R / Z of extrapolation that can be set in the object
editor can now be changed via static data-members
fgEditorMaxR and fgEditorMaxZ.
Generalization of selection from GL viewers to support internal
multiple selection from the elements.
Add support for selection of individual calorimeter towers in
TEveCalo classes.
Add support for 3D -> 3D projections. This also allows for
scaling (compression/extension) of certain space region as required by
NA62 to show the 200m long detector in a meaningful way.
Several generalizations of the projection infrastructure were
required:
TEveProjectable::ProjectedClass() takes an argument:
virtual TClass* ProjectedClass(const TEveProjection* p) const = 0;
thus allowing different projected classes for different projections.
All TEveProjection::ProjectPoint/Vector(...) functions have an
additional "depth" argument thus allowing the projected classes to
skip explicit setting of depth after the point has been projected
-- this could damage the 3rd component.
Pre-scaling now supports 3 dimensions.
Abstract TEveProjected::SetDepth() has been split into two parts:
It has been implemented in the base class where it checks for
the projection type (2d) before calling the local function;
Abstract SetDepthLocal() has been added to provide the same
functionality.
This allows for the 2d/3d check to be done in place only.
New projection class has been introduced: TEve3DProjection.
It performs pre-scaling and offsets the center.
To simplify the projection of lists TEveElementList has been made
projectable and corresponding TEveElementListProjected class
introduced. This also fixed the problem with render-state not being
propagated to projected classes.
The check whether to project a sub-tree of elements is still performed.
TEveGeoShapeProjected has been introduced to represent the 3D
projection of a TEveGeoShape (2D projection is handled by
TEvePolygonSetProjected).
Points, lines and tracks use the same projected class for both 2D
and 3D projections.
An example showing this functionality has been added as a new tab in
projection_prescale.C.
TEveManager now allows simultaneous usage of several objects
editors. Simply click on the top name-button in object editor to
create a standalone editor for this object in a separate window. This
facilitates operation when several objects need to be modifed in
parallel.
New tutorial alice_vsd.C has been added. It shows
how to read Visualization Summary Data files (VSD).
Code for operating three view configuration (3D / RPhi / Rhoz)
has been extracted from alice_esd.C tutorial
into MultiView.C tutorial. This is now also used
by alice_vsd.C and can serve as an example to those that
need to implement similar functionality.
Screenshot of calorimeters.C tutorial. Note the
individual tower selection propagated accross all the views.
Screenshot of alice_vsd.C tutorial also showing the
functionality of the MultiView class. New title is also
visible in the GUI editor.
Minor changes
Object editors in Eve now show the title as button.
Left mouse opens a floating editor that can be positioned
anywhere on the screen. This allows a user to have commonly used
editors always accessible. Maximum number of floating editors is
limited to 10.
Right mouse opens context menu for the object.
In TEveFrambox add support for drawing of back-polygons for 3D
frame-boxes. Those should be transparent, otherwise the things inside
are not visible.
TEveRGBAPalette - implement additional flag fFixColorRange specifying
how the palette color range gets mapped onto signal values:
true - LowLimit -> HighLimit
false - MinValue -> MaxValue.
Add signal emitting TEveRGBAPalette::MinMaxValChanged(). Ged
editor calls this after setting the min/max range.
OpenGL
Major changes
Add support for stereo rendering. This requires quad buffer
support from OpenGL driver and hardware as well as shutter
glasses. See tutorial eve/geom_cms_stereo.C.
Support for rendering into frame-buffer objects (FBO).
Using FBOs, it is now possible to save bitmap image formats at
any resolution and even when the GL window is not on screen.
Add support for global scaling of point-sizes, line-widths and font-sizes.
Generalize secondary-selection handling so that it is possible to
implement various handling schemes. For example see individual
calorimeter tower selection in TEveCalo-classes.
Generalize handling of highlight feedback -- this is now done via
a virtual TGLLogicalShape::DrawHighlight(...) so that it can be
changed by sub-classes.
The stand-alone GL viewer now supports hiding of menu-bar. It
collapses into a narrow band on top of the viewer that expands when
mouse pointer enters its area. This allows for better utilization of
the screen while still providing the controls available from the menu.
Editor for "gl5d" option was improved.
TGLTH3Composition class to combine several TH3s in one plot.
Minor changes
Use Diagonal() instead of Volume() to determine if a bounding-box
is empty and also for sorting of the scene-elements by size. The
previous implementation caused problems with 2D and 1D objects.
Several improvements in camera configuration and handling.
Improve mouse-button handling. After a button goes down, other
buttons do not interfere with user interaction until the first button
is released.
When initializing TGLClipPlane for the first time, place it in
the center of the scene's bounding-box. Before that, plane was always
positioned at (0,0,0) which lead to unexpected behaviour when scene
was not centered at the origin.
Add virtual function TGLClip::Setup(const TGLVector3&, const
TGLVector3&) and implement it for plane and box clipping objects. See
function documentation for
TGLClipPlane
and
TGLClipBox.