[root] / trunk / core / base / inc / TVirtualViewer3D.h Repository:
ViewVC logotype

Log of /trunk/core/base/inc/TVirtualViewer3D.h

Parent Directory Parent Directory


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

Revision 22961 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Apr 3 13:32:57 2008 UTC (6 years, 9 months ago) by rdm
File length: 3562 byte(s)
Diff to previous 20877
move the directories:
  base clib cont meta metautils newdelete pcre rint thread unix utils
  winnt zip
under the new core meta directory.

Revision 20877 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Nov 19 11:17:07 2007 UTC (7 years, 2 months ago) by rdm
Original Path: trunk/base/inc/TVirtualViewer3D.h
File length: 3562 byte(s)
Diff to previous 20292
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 20292 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Oct 10 14:08:48 2007 UTC (7 years, 3 months ago) by brun
Original Path: trunk/base/inc/TVirtualViewer3D.h
File length: 3562 byte(s)
Diff to previous 19826
From Matevz & Alja

	* base/inc/TVirtualViewer3D.h:
	Add function virtual void ObjectPaint(TObject*, Option_t*).


/**************************************************************************/

	* ged/src/TGedEditor.cxx:
	When adding top-level TGFrame for the extra tabs specify layout
	hints with kLHintsExpandX.


/**************************************************************************/

	* gl/inc/TGLScenePad.h:
	* gl/src/TGLScenePad.cxx:
	Implement virtual TVirtualViewer3D::ObjectPaint().

	* gl/src/TGLCamera.cxx:
	* gl/inc/TGLCamera.h:	
	* gl/src/TGLPerspectiveCamera.cxx:
	* gl/inc/TGLPerspectiveCamera.h:	
	* gl/src/TGLOrthoCamera.cxx:
	* gl/inc/TGLOrthoCamera.h:
	Introduce two transformation matrices to clearly define movement
	of camera around the center point. The first transformation matrix
	fCamBase defines the coordinate system placed at the camera center
	point with camera up-vector as the third base vector. The second
	transformation matrix fCamTrans defines the camera transformation
	relative to fCamBase.

        Implement a common Truck(), Rotate() and Dolly() function for
	orthographic and perspective camera.

	Implement an option to define camera center point
	externally. Center can also be determined via picking.

	* gl/src/TGLUtil.cxx:
	* gl/inc/TGLUtil.h:
	TGLMatrix: add new functions to get/set the base vectors
	directly.

	TGLUtil: add member UInt_t fgDefaultDrawQuality.

	TGLRect: bugfix in Diagonal(), integer calculation overflowed.

	* gl/src/TGLViewer.cxx:
	* gl/inc/TGLViewer.h:
	Make interface to draw camera center point.
	Add option to disable/enable depth test when drawing axis guides. 

	* gl/src/TGLViewerEditor.cxx:
	* gl/inc/TGLViewerEditor.h:
	Add GUI to manipulate camera center and to disable/enable depth
	test when drawing axis guides.

	* gl/src/TGLClipSetEditor.cxx:
	Change layout of labeled number entries.

	* gl/src/TGLLightSet.cxx:
	Fix positioning of front light. White-space consolidation.

	* gl/src/TGLLightSetEditor.cxx:
	* gl/inc/TGLLightSetEditor.h:
        Put GUI for the 6 lights in two columns.


/**************************************************************************/

	* tutorials/gl/glViewerExercise.C:
	Follow-up on changes in TGLCamera. Enable rotation on
	orthographic camera.

	* tutorials/gl/glViewerLOD.C:
	Workourond for cint bug with switch statements.

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/base/inc/TVirtualViewer3D.h
File length: 3502 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/base/inc/TVirtualViewer3D.h
File length: 3559 byte(s)
Diff to previous 19150
remove :$ from tag line

Revision 19150 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sat Jun 23 21:21:37 2007 UTC (7 years, 7 months ago) by brun
Original Path: trunk/base/inc/TVirtualViewer3D.h
File length: 3569 byte(s)
Diff to previous 19000
From Matevz:
Added virtual functions Bool_t CanLoopOnPrimitives() and void
PadPaint(TVirtualPad*) that allow 3d-viewers to perform their own loop
on pad primitives.

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/base/inc/TVirtualViewer3D.h
File length: 3286 byte(s)
Diff to previous 18024
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 18024 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Feb 19 18:51:48 2007 UTC (7 years, 11 months ago) by brun
Original Path: trunk/base/inc/TVirtualViewer3D.h
File length: 3374 byte(s)
Diff to previous 17996
Undo all the changes excluding functions from the abstract interface
to be visible from CINT.
Too many side-effects and not enough energy to solve the problem.
a real pity: we are waisting 1 MByte of real memory with ROOT Core.

Revision 17996 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sun Feb 18 14:56:42 2007 UTC (7 years, 11 months ago) by brun
Original Path: trunk/base/inc/TVirtualViewer3D.h
File length: 3397 byte(s)
Diff to previous 16090
For abstract interfaces, generate the CINT stub functions only for
the strict minimum of functions.
Keep only one pure function known to CINT such that CINT can
recognize that the class is abstract and has pure functions.
This optimization gains about one megabyte of generated code.

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/base/inc/TVirtualViewer3D.h
File length: 3374 byte(s)
Diff to previous 14203
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 14203 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Mar 8 21:09:43 2006 UTC (8 years, 10 months ago) by brun
Original Path: trunk/base/inc/TVirtualViewer3D.h
File length: 3291 byte(s)
Diff to previous 13954
From Timur Pocheptsov:

-TGLPixmap - removed and replaced by TGLViewer (most of the TGLViewer
    functionality is available in pad now);
-TGLHistPainter - zooming/panning added for legoes/surfaces;
-TGLViewerEditor - TGLViewer's editor for pad (lights/clipping/guides
    manipulation).

-TRootCanvas :
  minor changes to support mouse wheel event in gl viewer in a pad

-TCanvas :
  a)changes to process keyboard events correctly
  b)changes to process mouse will events

-TVirtualViewer3D :
  changes in interface for TGLManager (win32 implementation of TGLManager
  requires some functions and cannot be dependant from TGLViewer)

-Added class TVirtualGLManipulator - base for TGLManip - again, required
 mostly by TGWin32GL.

Revision 13954 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Jan 30 17:42:06 2006 UTC (8 years, 11 months ago) by rdm
Original Path: trunk/base/inc/TVirtualViewer3D.h
File length: 3154 byte(s)
Diff to previous 13822
fix cvs ident line that was missing trailing $.

Revision 13822 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Jan 12 16:56:08 2006 UTC (9 years ago) by couet
Original Path: trunk/base/inc/TVirtualViewer3D.h
File length: 3185 byte(s)
Diff to previous 12495
- gl2ps is now used to render in PostScript the GL part of TPads (GL in pad).
  na49view.C can be tried as example.

Revision 12495 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Aug 17 09:10:44 2005 UTC (9 years, 5 months ago) by brun
Original Path: trunk/base/inc/TVirtualViewer3D.h
File length: 3147 byte(s)
Diff to previous 12459
From Timur:
In view of the coming GL-in-TPad new features, I have changes in
several modules and want to add them step by step. This is the first
update, these classes are auxiliary stuff. I'm planning to add other stuff
tomorrow (and modification in pad and canvas, which will enable
gl-in-pad).

TGLManager is a base abstract class, responsible for
window creation, gl-context/glpixmap and context creation,
manipulation with gl-context and gl-pixmap.

TGWin32GLManager - concrete implementation for Win32
TGX11GLManager - concrete implementation for X11.

Revision 12459 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Aug 10 16:26:36 2005 UTC (9 years, 5 months ago) by brun
Original Path: trunk/base/inc/TVirtualViewer3D.h
File length: 3055 byte(s)
Diff to previous 11866
From Richard:
make TVirtualViewer TObject derv. so TPad can use without modifications.
Also removed last parts of TVirtualGL unrelated to context/draws so it
can be replaced with new TGLManager.

Added:

TGLSAViewer & TGLSAFrame - standalone viewer + GUI main frame.
TGLOutput for containing capture (pdf/eps output).

TX3DFrame (x3d mod) to avoid diamond TObject inheritance from GUI +
TVV3D interface

Removed: TViewerOpenGL

Revision 11866 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed May 25 14:25:17 2005 UTC (9 years, 8 months ago) by brun
Original Path: trunk/base/inc/TVirtualViewer3D.h
File length: 2933 byte(s)
Diff to previous 11473
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.

Revision 11473 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Apr 1 13:53:18 2005 UTC (9 years, 9 months ago) by brun
Original Path: trunk/base/inc/TVirtualViewer3D.h
File length: 2930 byte(s)
Diff to previous 11272
First attempt to introduce new Timur's code supporting composite shapes.
This code must still be validated on non Linux platforms.

Revision 11272 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Mar 9 18:19:27 2005 UTC (9 years, 10 months ago) by brun
Original Path: trunk/base/inc/TVirtualViewer3D.h
File length: 2744 byte(s)
Diff to previous 9718
From Richard Maunder:

Changes to viewer infrastructure (TBuffer3D,TVirtualViewer3D) to
support:

i) Proper shape specific (sphere, tube, etc) descriptions in TBuffer3D
derived classes - c.f. abuse of raw tesselation blocks before.
ii) On demand filling of buffer sections as required by viewer.
iii) Support for local/master frame shapes descriptions & child object
rejection.
iv) Template/placed shapes ids - enabling viewer to detect/receive
common shapes once and just obtain the new position and id of the
duplicate.

Cleans up all producer (g3d/geom) code so no longer has an viewer
specific knowledge - Paint() methods replaced with
GetBuffer3D/FillBuffer3D methods which complete requested sections of
the buffer.

All viewer specific code now sits on the viewer implementation side of
TVirtualViewer3D. Added a TViewer3DPad class for performing the 3D draws
into pad. In future this should be merged with TView/TView3D possibly.

TBuffer3D is now stripped of functional code (aside from memory
management) and various viewer passback options there previously.
Enforced one way passing a const & to viewer.

Buffers (various types) are held as single static inside producer
function e.g. TGeoShape::GetBuffer3D (c.f. single generic buffer type
fetched from pad previously).

For g3d and geom shapes the top level geometry painter (TNode /
TGeoPainter) controlls painting process, requesting shapes to fill
buffer and passing to 3D viewer.

Exceptions are g3d's TPolyLine3D, TPolyMarker3D & TMarker3DBox. These
are 'standalone' shapes - no controlling 'painter' object. They still
implement Paint(), fill buffer and add to viewer directly.

3D viewer still held / created by pad - and pad has it's own viewer
object (TViewer3DPad).

NOTE:

1. Current scheme supports one 3D viewer only - pad, x3d or OpenGL. This
means that pad goes blank when x3d/OGL is spawned, and is updated again
when it is closed. To be revisited - need to support multiple viewers,
of multiple types - which implies explicit naming or pad controlling
enumeration.

2. OGL viewer now responds correct to modifications in pad, without
having to be reinvoked (as previously). x3d is still decoupled (as
previously) so does not rebuild - too difficult to get working.

Revision 9718 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Tue Aug 10 21:53:47 2004 UTC (10 years, 5 months ago) by rdm
Original Path: trunk/base/inc/TVirtualViewer3D.h
File length: 2022 byte(s)
Diff to previous 9665
small corrections in comments and use Info() instead of printf().

Revision 9665 - (view) (download) (as text) (annotate) - [select for diffs]
Added Tue Aug 3 16:01:19 2004 UTC (10 years, 5 months ago) by brun
Original Path: trunk/base/inc/TVirtualViewer3D.h
File length: 1932 byte(s)
From Olivier, Timur Pocheptsov , Andrei Gheata and Rene
Mega patch to introduce the new 3-d interface (to be described later).
The new interface has been tested with both X3D and OpenGL under Linux.
Being tested under Windows.
Note that several changes are expected in these classes (OpenGL in particular)
in the coming days.

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