[root] / trunk / graf3d / gl / inc / TGLLogicalShape.h Repository:
ViewVC logotype

Log of /trunk/graf3d/gl/inc/TGLLogicalShape.h

Parent Directory Parent Directory


Links to HEAD: (view) (download) (as text) (annotate)
Sticky Revision:

Revision 46373 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sat Oct 6 03:47:30 2012 UTC (2 years, 3 months ago) by matevz
File length: 4716 byte(s)
Diff to previous 46372
Fix compilation error on windows.

Revision 46372 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sat Oct 6 03:18:11 2012 UTC (2 years, 3 months ago) by matevz
File length: 4757 byte(s)
Diff to previous 33124
* TGLMatrix:
  Add function Bool_t IsScalingForRender() that returns true if length of base
  vectors is significantly different than unity.

* TGLPhysicalShape:
  Cache state of fTransform.IsScalingForRender() in a bool member.
  When this is true, enable automatic scaling of normals during rendering.

* TGLLogicalShape:
  Add static Bool_t fgIgnoreSizeForCameraInterest allowing a user to prevent
  RGL from hiding very small objects - at least a pixel is always drawn. One
  should invoke:
    TGLLogicalShape::SetIgnoreSizeForCameraInterest(kTRUE);

Revision 33124 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Apr 21 20:04:42 2010 UTC (4 years, 9 months ago) by matevz
File length: 4565 byte(s)
Diff to previous 30811
Implement central infractructure to allow eve-elements to support
internal multiple selection and highlightning of their sub-parts.

Use this in TEveDigitSet and its sub-classes TEveQuadSet and
TEveBoxSet.

Extend GL rendering and event-handling to support these operations.


eve/
====

* TEveElement - Add 3 new functions:
    virtual TString  GetHighlightTooltip();
    virtual void     UnSelected();
    virtual void     UnHighlighted();

* TEveSecondarySelectable - New secondary base-class for elements
  supporting internal multiple selection / highlight.

* TEveDigitSet, TEveQuadSet, TEveBoxSet
  - Sub-class TEveDigitSet from TEveSecondarySelectable.
  - Implement functions needed for internal selection.
  - Add common base-class TEveDigitSetGL for quad and box-set GL rendering.

* TEveChunkManager - Add support for restricted iteration.
  TEveChunkManager::iterator accepts set<Int_t> for that purpose.

* TEveViewer - Add functions to handle additional mouse-hover signals
  from TGLViewer.

* Other classes (all GL renderers) - Changes for additional argument
  to TGLLogicalShape::DrawHighlight().


gl/
===

* TGLObject - Take AlwaysSecondarySelect() into account when deciding
  whether to use DL caching for given draw-pass.

* TGLLogicalShape - Add a new (optional) argument to DrawHighlight()
  specifying kind of outline to use (selected or highlighted). This
  allows classes with internal selection to properly render outlines
  when sub-parts of an object are both selected and highlighted.


* TGLEventHandler - Proparly handle objects with internal selection /
  highlight.

* TGLSelectRecord - Add flag to separate GL-selection for selection
  and for highlight. This is really used by record handlers.

* TGLViewer - Add two new signal-emitting functions to properly notify
  clients about changes in internal object selection:
    virtual void ReMouseOver(TObject *obj, UInt_t state); // *SIGNAL*
    virtual void UnMouseOver(TObject *obj, UInt_t state); // *SIGNAL*


tutorials/eve
=============

Add instructions for activation of internal selection in
TEveQuad/BoxSet.

Revision 30811 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Oct 19 13:22:46 2009 UTC (5 years, 3 months ago) by matevz
File length: 4551 byte(s)
Diff to previous 30752
TGLViewer.cxx:
Rename member in enum ESecSelType from kAutomatic to kAlways.

TGLEventHandler, TGLLogicalShape:
Add an interface in TGLLogicalShape to define if secondary selection
is always active on mouse click.

Revision 30752 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Oct 15 18:55:34 2009 UTC (5 years, 3 months ago) by matevz
File length: 4482 byte(s)
Diff to previous 26250
From Alja & Matevz.

Make highlightning configurable on per class basis by introducing a
new virtual function in TGLLogicalShape:
   virtual void DrawHighlight(TGLRnrCtx& rnrCtx, const TGLPhysicalShape* pshp) const;

The main use of this functionality will be to support individual
selection of calo towers and potentially other container elements that
support secondary selection.

For now it is used in TEvePolygonSetProjected to highlight only
outline of the polygon.

Revision 26250 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Nov 17 20:56:44 2008 UTC (6 years, 2 months ago) by matevz
File length: 4402 byte(s)
Diff to previous 23140
TGLContext, TGLWidget
---------------------
Add method ClearCurrent() to set current GL context to 0.

TGLLogicalShape
---------------
Change how number of required display-lists per object is handled:
before it was a virtual function, now it is a data member.
Fixes a severe memory leak due wrong number of released display-lists
when called from the destructor, which was calling a virtual function
to determine their number.

Fix accordingly the following classes: TGLSphere, TGLCylinder,
TEveCaloLegoGL and TEveBoxSetGL.

Revision 23140 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Apr 11 11:01:39 2008 UTC (6 years, 9 months ago) by rdm
File length: 4335 byte(s)
Diff to previous 21252
move the following directories to "graf2d":

asimage, freetype, gpad, graf, postscript, qt, win32gdk, x11, x11ttf

move the following directories to "graf3d":

eve, ftgl, g3d, gl, x3d

Revision 21252 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Dec 7 01:39:32 2007 UTC (7 years, 1 month ago) by matevz
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4335 byte(s)
Diff to previous 20882
Changes for marking of top-level objects in GL window.
- TGLLogicalShape: move DirectDraw() from protected to public.
- Implement color-locking for object rendering.
- Wrap all calls to glColor() to go via TGLUtil::Color().

Revision 20882 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Nov 19 11:31:26 2007 UTC (7 years, 2 months ago) by rdm
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4332 byte(s)
Diff to previous 19826
Set property svn:eol-style LF on all source and Makefiles. This should avoid
problems with Win32 line endings ending up in the repository. All MS tools
support LF eols fine.

Revision 19826 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Sep 19 19:56:11 2007 UTC (7 years, 4 months ago) by rdm
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4332 byte(s)
Diff to previous 19825
imported svn:keywords Id property

Revision 19825 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Sep 19 19:49:10 2007 UTC (7 years, 4 months ago) by rdm
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4388 byte(s)
Diff to previous 19429
remove :$ from tag line

Revision 19429 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Jul 23 15:04:09 2007 UTC (7 years, 6 months ago) by rdm
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4398 byte(s)
Diff to previous 19049
From Matevz:
Support internal creation of ID-object when external ID is not set
during creation via TBuffer3D.

Revision 19049 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Jun 18 07:02:16 2007 UTC (7 years, 7 months ago) by brun
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4318 byte(s)
Diff to previous 19000
From Matev and Timur:
Timur:
1. Allow unique identification of shared GL contexts via
TGLContextIdentity class.

Matevz:
1. Improved overlay selection handling.
2. Perform GL context check before rendering, possibly invalidating
   registered display-lists.
3. Minimize updates for window expose and resize events.

Revision 19000 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Jun 11 19:56:34 2007 UTC (7 years, 7 months ago) by brun
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4357 byte(s)
Diff to previous 16090
From Matevz:

Major restructuring of GL viewer-scene relationship (Matevz)
===================================================

The main idea was to generalize current GL infrustructure so that the
following features can be done in the future:

1. Full pad rendering via GL including 3D histo/func painters and 2D graphics.

2. Implementation of GL canvas (with independent viewers serving as pads).

3. Multi-view event-visualization front-end.

4. Inclusion of external scenes (non-ROOT-gl) in ROOT viewer.
   Rendering of ROOT scenes in external GL frameworks.


Changes on the code level
-------------------------

0. Extend current scene/viewer classes into a 2-level class hierarchy.
   New classes TGLViewerBase and TGLSceneBase.

1. Allow scenes to be shared among viewers. View-specific scene-cache
   needs to be kept at the viewer side.

2. Viewer now manages a list of scenes. It is possible to put together
   a combination of scenes (e.g. one showing geometry, another one tracks
   and yet another clusters). Each scene can define its own clipping object.

3. Provide API for fine-grained control over rendered object removal,
   creation and update. This allows for efficient scene-updates.

4. Disentangle selection, clipping and other markup objects from
   within viewer-scene singleton.
   New classes TGLClipSet, TGLManipSet.

6. Disentangle selection management.

7. Separate overlay rendering to allow any number of active GL-GUI
   elements (like manipulators are now).
   New classes TGLOverlayElement.

8. Trailing white space has been removed in all files.


Restructure low-level interface to OpenGL (Timur)
=========================================

1. Allow sharing GL resources among viewers.

2. Do not bind GL-output (windowed or offscreen) to ROOT GUI.

New classes TGLContext, TGLFormat, TGLWidget.

This oboletes TGLKernel and TVirtualGL classes.

Revision 16090 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Aug 23 14:39:40 2006 UTC (8 years, 5 months ago) by brun
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4766 byte(s)
Diff to previous 15134
From Matevz Tadel:

        1) Implementation of two-level (secondary) selection

        Rendering objects can provide a new level of interactivity, for
        example a TPointSet3D holding a set of clusters can attach a pointer
        to original cluster to each point and receive notifications when a
        specified cluster was clicked.

        Secondary selection is activated by Control-Left clicking into the
        GL window.

        2) Improve control over camera-reset behaviour

        Allow user to prevent camera reset on scene update and
        double-click.

        3) Improvements in TPointSet3D(GL)

        Detailed ChangeLog
        ==================

        * base/inc/TVirtualViewer3D.h:
        Added virtual methods 'void ResetCameras(){}' and 'void
        ResetCamerasAfterNextUpdate(){}'.

        * gl/inc/TGLScene.h:
        * gl/src/TGLScene.cxx:
        Implemented two-level selection. It is enabled for next selection
        pass by calling ActivateSecSelect().

        DoSelect() does not change the selected object but only indicates
        which object has been selected by setting new member
        'TGLPhysicalShape *fSelectionResult'. Caller (TGLViewer) must call
        new method 'void ApplySelection()' to actually change the selected
        object to the last selection result.

        Changed declaration of selection buffer from being a static varable
        within DoSelect() to data-member. This allows post-processing of
        selection records needed by two-level selection.

        * gl/inc/TGLCamera.h:
        * gl/inc/TGLOrthoCamera.h:
        * gl/inc/TGLPerspectiveCamera.h:
        * gl/src/TGLCamera.cxx:
        * gl/src/TGLOrthoCamera.cxx:
        * gl/src/TGLPerspectiveCamera.cxx:
        Added Bool_t argument with default value to:
        virtual void TGLCamera::Setup(const TGLBoundingBox & box, Bool_t
        reset=kTRUE) = 0;
        By setting it to false one can change camera parameters for new
        scene bounding-box without repositioning the camera.

        Added 'Bool_t checkSize' argument to OfInterest().
        This is relevant for marker-classes which can have small
        volume/length but are still visible as they are rendered in
        pixel-coordinates. Value of this argument is needed in TGLScene
        (DestroyPhysicals) and TGLViewer (AddObject). It is obtained by
        calling virtual method TGLLogicalShape::IgnoreSizeForOfInterest().
        This method returns false by defalut and is overriden in
        TGLPolyMarker and TPointSet3DGL.

        * gl/inc/TGLViewer.h:
        * gl/src/TGLViewer.cxx:
        Added controls for camera-reset behaviour.
        Data-members: 'Bool_t fResetCamerasOnUpdate', 'Bool_t
        fResetCamerasOnNextUpdate', 'Bool_t fResetCameraOnDoubleClick'.
        Methods: 'ResetCameras()', 'ResetCamerasAfterNextUpdate()',
        'ResetCurrentCamera()'.
        Added an argument to 'void PostSceneBuildSetup(Bool_t resetCameras).

        Added Bool_t return-value to RequestSelect(). It returns true if
        result of the selection is different then fSelectedPhysical.

        Added method ApplySelection() to interface with TGLScene
        selection state. This is called from event-handling functions in
        TGLViewer.

        Added key-binding for 'Home': ResetCurrentCamera().

        * gl/inc/TGLSAViewer.h:
        * gl/src/TGLSAViewer.cxx:
        Added description of new functionality to fgHelpText.

        MSVC was complaining about fgHelpText being too long: I split it
        into fgHelpText1 and fgHelpText2.

        * gl/inc/TGLDrawFlags.h:
        * gl/src/TGLDrawFlags.cxx:
        Added members 'Bool_t fSelection' and 'Bool_t
        fSecSelection' allowing passing of current selection state to
        renderers. This is needed to allow different render-paths during
        (secondary) selection.

        We should consider passing TGLScene* and/or TGLViewer* down to
        DirectDraw() of individual renderers.

        * gl/src/TGLDrawable.cxx:
        In ShouldCache() return false if secondary selection is in progress.

        * gl/src/TGLPhysicalShape.cxx:
        Handle new members in TGLDrawFlags.

        * gl/inc/TGLLogicalShape.h:
        * gl/src/TGLLogicalShape.cxx:
        Added three new functions:

        1) virtual Bool_t SupportsSecondarySelect() const { return kFALSE; }
        This is called by TGLScene::DoSelect() to check is object that was
        the result of primary selection supports secondary selection.

        2) virtual void ProcessSelection(UInt_t* ptr, TGLViewer*, TGLScene*);
        It is called back from TGLViewer after successful secondary
        selection. As the object that does the rendering is the only one
        that actually knows how the object sub-parts were named it has
        to interpret the results.

        Both of these should be overriden in classes that support
        secondary selection, for example see TPointSet3DGL.

        3) virtual Bool_t IgnoreSizeForOfInterest() const { return kFALSE; }
        Signals to TGLScene and TGLViewer that volume/lenght of this
        class' bounding box should not be considered when checking if
        objects of this class are of interest to current camera.

        * gl/inc/TGLObject.h:
        * gl/src/TGLObject.cxx:
        Changed second argument of function:
        Bool_t SetModelCheckClass(TObject* obj, const Text_t* classname);
        to 'TClass* cls'. This is much more efficient.

        * g3d/inc/TPointSet3D.h:
        * g3d/src/TPointSet3D.cxx:
        Added support for per-point designations (one TObject* per point;
        via casting it can be set to anything).
        New virtual method 'void PointSelected(Int_t n)' that is called
        back after successful secondary selection in TGLViewer (via
        virtual TGLLogicalShape::ProcessSelection()).

        * gl/inc/TPointSet3DGL.h:
        * gl/src/TPointSet3DGL.cxx:
        Added support for per-point selection. Point-sizes are taken into
        account during selection (by modifying the projection
        matrix).
        Implemented 'virtual Bool_t TGLDrawable::ShouldCache()' to disable
        caching when in primary selection (point-size improvements).
        Cross-like marker types are now supported to some extent.
        Improved structure of rendering code.
        Override 'virtual Bool_t TGLLogicalShape::IgnoreSizeForOfInterest()'
        to return true.
        Multiply TAttMarker::GetMarkerSize() by 5 before applying.

        * gl/inc/TGLPolyMarker.h:
        Override 'virtual Bool_t TGLLogicalShape::IgnoreSizeForOfInterest()'
        to return true.

Revision 15134 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Tue May 23 04:47:42 2006 UTC (8 years, 8 months ago) by brun
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4433 byte(s)
Diff to previous 15047
From Federico Carminati:

"I have implemented all copy and equal operators needed to silence all
warnings in AliRoot, as requested. I have implemented shallow copies as
would do the default operators synthetized by the compiler.
Most operators are protected. If users complain, you just have to move
them into the public area, but class derivation is of course supported.
It has been a terrible job, I have modified 278 files, but the changes
are backward compabile, and this goes a long way to permitting user to
use the effc++ flag with root headers."

Revision 15047 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon May 15 11:01:14 2006 UTC (8 years, 8 months ago) by rdm
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4434 byte(s)
Diff to previous 15044
coding conventions (put methods after data members, after Fed's changes).

Revision 15044 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon May 15 07:43:34 2006 UTC (8 years, 8 months ago) by brun
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4440 byte(s)
Diff to previous 14754
From Federico:
headers modified to support the gcc option effc++

Revision 14754 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Apr 19 10:58:47 2006 UTC (8 years, 9 months ago) by rdm
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4334 byte(s)
Diff to previous 14580
fix compiler warning, members were out of order in intializer list.

Revision 14580 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Apr 7 08:43:59 2006 UTC (8 years, 9 months ago) by brun
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4334 byte(s)
Diff to previous 14213
From Matevz Tadel:
Introduce a new set of classes dedicated to event visualisation.
TGLObject:	base-class for direct GL renderers

TAttBBox:	interface, helps maintain/calculate bounding-box
		needed for TGLObject (see TPointSet3D and TPointSet3DGL)
TPointSet3D:	a demo class for direct GL rendering
TPointSet3DGL:

Mods in existing classes to interface the new classes

Revision 14213 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Mar 9 16:53:04 2006 UTC (8 years, 10 months ago) by brun
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4186 byte(s)
Diff to previous 14064
From Timur,
Implement the "Apply to Family" widget/functionality.

Revision 14064 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Feb 20 11:02:19 2006 UTC (8 years, 11 months ago) by brun
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4133 byte(s)
Diff to previous 13316
From Richard:
Cleanup of shape code:

i) Remaining minodr code from TGLSceneObject moved to TGLLogicalShape or
derv. shape classes.

ii) Remove obsolete TGLSceneObject class.

iii) Move shape classes (TGLFaceSet etc) to own .h/.cxx + now derv. from
TGLogicalShape directly

Plus other minor tidying up.

WARNING!!
if you check-out from CVS, do
rm gl/src/G_*, gl/src/*.o
make

Revision 13316 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Tue Nov 22 18:05:46 2005 UTC (9 years, 2 months ago) by brun
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 4059 byte(s)
Diff to previous 13286
From Richard:
 Second part of general tidy for coding conventions violations -
mainly commenting. Code under my name should be clear now.

Revision 13286 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Nov 18 20:26:44 2005 UTC (9 years, 2 months ago) by brun
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 2634 byte(s)
Diff to previous 12892
From Richard:
 First part of coding conventions fixes for GL - mainly code
commenting.

Revision 12892 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Oct 3 15:19:35 2005 UTC (9 years, 3 months ago) by brun
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 2091 byte(s)
Diff to previous 11905
From Richard:
First implementation for interactive clipping, using OpenGL clip planes.
Initially we have plane & box - others later. See Help for description.

Known Bugs/Issues:

All in GUI:

i) Edit box takes keyboard focus and does not return to viewer pane when
clicked in. Hence all keys in viewer break - an existing general viewer
problem.
ii) Initial layout does not correctly hide the plane/box properties
panels, or scale for V side scroll bar.

Missing Features:

iii) CSG final pass and/or solid cappings.
iv) Can't rotate the box - need a TGLRotManip class soon.
v) Should be able to show and manipulate plane in similar fashion as
box.
vi) Trans/scale/rotate manipulators should be availible for any selected
object.

Revision 11905 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sat May 28 12:21:00 2005 UTC (9 years, 7 months ago) by rdm
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 1626 byte(s)
Diff to previous 11880
fix compile error on AMD64: never cast an object pointer to an int!

Revision 11880 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu May 26 12:29:50 2005 UTC (9 years, 8 months ago) by rdm
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 1576 byte(s)
Diff to previous 11878
Added missing cvs tag lines.

Revision 11878 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu May 26 10:24:45 2005 UTC (9 years, 8 months ago) by brun
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 1550 byte(s)
Diff to previous 11866
Cleanup files from Richard generated under windows with CRTL/M characters

Revision 11866 - (view) (download) (as text) (annotate) - [select for diffs]
Added Wed May 25 14:25:17 2005 UTC (9 years, 8 months ago) by brun
Original Path: trunk/gl/inc/TGLLogicalShape.h
File length: 1597 byte(s)
From Richard Maunder:
Major changes to GL viewer to support:

i) Logical/Physical shape pairings
ii) Level of detail (LOD) scheme (TGLSphere only using at present)
iii) Common display list cache
iv) Scene rebuilds for large geometries
v) Some basic interactivity improvements - draw timeouts, drop low LOD
shapes etc
vi) New camara interactions:

Left Mouse: Rotate
Middle Mouse: Truck (pan parallel to camera film plane)
Right Mouse: Side-side drag dolly/zoom
Double click any button to reset the camera.

The previous pan with arrow keys, and zoom on mouse wheel are still
supported.

Camera interaction is default in viewer. These extra camera modes mean
there are not enough mouse buttons for previous right context/select.
To select / invoke context menu use Shift+Left Button and Shift+Right
Button respectively.

This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, enter a numeric revision.

  Diffs between and
  Type of Diff should be a

Sort log by:

Subversion Admin
ViewVC Help
Powered by ViewVC 1.0.9