A versatile 3D OpenGL viewer based on QGLWidget. More...
#include <QGLViewer/qglviewer.h>
Classes | |
struct | ClickActionPrivate |
struct | MouseActionPrivate |
class | TileRegion |
Signals | |
void | animateNeeded () |
void | axisIsDrawnChanged (bool drawn) |
void | cameraIsEditedChanged (bool edited) |
void | drawFinished (bool automatic) |
void | drawNeeded () |
void | FPSIsDisplayedChanged (bool displayed) |
void | gridIsDrawnChanged (bool drawn) |
void | helpRequired () |
void | mouseGrabberChanged (qglviewer::MouseGrabber *mouseGrabber) |
void | pointSelected (const QMouseEvent *e) |
void | stereoChanged (bool on) |
void | textIsEnabledChanged (bool enabled) |
void | viewerInitialized () |
Public Member Functions | |
QGLViewer (QWidget *parent=NULL, const char *name=0, const QGLWidget *shareWidget=0, Qt::WindowFlags flags=0) | |
QGLViewer (const QGLFormat &format, QWidget *parent=0, const char *name=0, const QGLWidget *shareWidget=0, Qt::WindowFlags flags=0) | |
QGLViewer (QGLContext *context, QWidget *parent, const char *name=0, const QGLWidget *shareWidget=0, Qt::WindowFlags flags=0) | |
virtual | ~QGLViewer () |
Private Slots | |
void | delayedFullScreen () |
void | hideMessage () |
Private Member Functions | |
QString | cameraPathKeysString () const |
void | connectAllCameraKFIInterpolatedSignals (bool connection=true) |
void | defaultConstructor () |
QImage | frameBufferSnapshot () |
void | handleKeyboardAction (KeyboardAction id) |
void | initializeSnapshotFormats () |
QGLViewer & | operator= (const QGLViewer &v) |
void | performClickAction (ClickAction ca, const QMouseEvent *const e) |
QGLViewer (const QGLViewer &v) | |
void | setDefaultMouseBindings () |
void | setDefaultShortcuts () |
Static Private Member Functions | |
static QString | formatClickActionPrivate (ClickActionPrivate cap) |
Private Attributes | |
Qt::KeyboardModifiers | addKeyFrameKeyboardModifiers_ |
int | animationPeriod_ |
bool | animationStarted_ |
int | animationTimerId_ |
bool | axisIsDrawn_ |
QColor | backgroundColor_ |
int | bufferTextureHeight_ |
GLuint | bufferTextureId_ |
float | bufferTextureMaxU_ |
float | bufferTextureMaxV_ |
int | bufferTextureWidth_ |
qglviewer::Camera * | camera_ |
bool | cameraIsEdited_ |
QMap< ClickActionPrivate, ClickAction > | clickBinding_ |
QMap< size_t, bool > | disabledMouseGrabbers_ |
bool | displayMessage_ |
float | f_p_s_ |
QColor | foregroundColor_ |
unsigned int | fpsCounter_ |
bool | FPSIsDisplayed_ |
QString | fpsString_ |
QTime | fpsTime_ |
bool | fullScreen_ |
bool | gridIsDrawn_ |
QTabWidget * | helpWidget_ |
QMap< KeyboardAction, QString > | keyboardActionDescription_ |
QMap< KeyboardAction, unsigned int > | keyboardBinding_ |
QMap< int, QString > | keyDescription_ |
qglviewer::ManipulatedFrame * | manipulatedFrame_ |
bool | manipulatedFrameIsACamera_ |
QString | message_ |
QTimer | messageTimer_ |
QMap< int, MouseActionPrivate > | mouseBinding_ |
QMap< ClickActionPrivate, QString > | mouseDescription_ |
qglviewer::MouseGrabber * | mouseGrabber_ |
bool | mouseGrabberIsAManipulatedCameraFrame_ |
bool | mouseGrabberIsAManipulatedFrame_ |
QMap< Qt::Key, int > | pathIndex_ |
Qt::KeyboardModifiers | playPathKeyboardModifiers_ |
unsigned int | previousBufferTextureFormat_ |
int | previousBufferTextureInternalFormat_ |
float | previousCameraZClippingCoefficient_ |
int | previousPathId_ |
QPoint | prevPos_ |
GLuint * | selectBuffer_ |
int | selectBufferSize_ |
int | selectedObjectId_ |
int | selectRegionHeight_ |
int | selectRegionWidth_ |
int | snapshotCounter_ |
QString | snapshotFileName_ |
QString | snapshotFormat_ |
int | snapshotQuality_ |
QString | stateFileName_ |
bool | stereo_ |
bool | textIsEnabled_ |
TileRegion * | tileRegion_ |
bool | updateGLOK_ |
int | visualHint_ |
QMap< Qt::KeyboardModifiers, MouseActionPrivate > | wheelBinding_ |
Static Private Attributes | |
static QPtrList< QGLViewer > | QGLViewerPool_ |
Display of visual hints | |
bool | axisIsDrawn () const |
bool | gridIsDrawn () const |
bool | FPSIsDisplayed () const |
bool | textIsEnabled () const |
bool | cameraIsEdited () const |
void | setAxisIsDrawn (bool draw=true) |
void | setGridIsDrawn (bool draw=true) |
void | setFPSIsDisplayed (bool display=true) |
void | setTextIsEnabled (bool enable=true) |
void | setCameraIsEdited (bool edit=true) |
void | toggleAxisIsDrawn () |
void | toggleGridIsDrawn () |
void | toggleFPSIsDisplayed () |
void | toggleTextIsEnabled () |
void | toggleCameraIsEdited () |
Viewer's colors | |
QColor | backgroundColor () const |
QColor | foregroundColor () const |
void | setBackgroundColor (const QColor &color) |
void | setForegroundColor (const QColor &color) |
Scene dimensions | |
float | sceneRadius () const |
qglviewer::Vec | sceneCenter () const |
virtual void | setSceneRadius (float radius) |
virtual void | setSceneCenter (const qglviewer::Vec ¢er) |
void | setSceneBoundingBox (const qglviewer::Vec &min, const qglviewer::Vec &max) |
void | showEntireScene () |
Associated objects | |
qglviewer::Camera * | camera () const |
qglviewer::ManipulatedFrame * | manipulatedFrame () const |
void | setCamera (qglviewer::Camera *const camera) |
void | setManipulatedFrame (qglviewer::ManipulatedFrame *frame) |
Mouse grabbers | |
qglviewer::MouseGrabber * | mouseGrabber () const |
void | setMouseGrabberIsEnabled (const qglviewer::MouseGrabber *const mouseGrabber, bool enabled=true) |
bool | mouseGrabberIsEnabled (const qglviewer::MouseGrabber *const mouseGrabber) |
void | setMouseGrabber (qglviewer::MouseGrabber *mouseGrabber) |
State of the viewer | |
float | aspectRatio () const |
float | currentFPS () |
bool | isFullScreen () const |
bool | displaysInStereo () const |
virtual QSize | sizeHint () const |
void | setFullScreen (bool fullScreen=true) |
void | setStereoDisplay (bool stereo=true) |
void | toggleFullScreen () |
void | toggleStereoDisplay () |
void | toggleCameraMode () |
bool | cameraIsInRevolveMode () const |
Display methods | |
virtual void | startScreenCoordinatesSystem (bool upward=false) const |
virtual void | stopScreenCoordinatesSystem () const |
void | drawText (int x, int y, const QString &text, const QFont &fnt=QFont()) |
void | displayMessage (const QString &message, int delay=2000) |
void | displayFPS () |
void | drawVectorial () |
static void | drawArrow (float length=1.0f, float radius=-1.0f, int nbSubdivisions=12) |
static void | drawArrow (const qglviewer::Vec &from, const qglviewer::Vec &to, float radius=-1.0f, int nbSubdivisions=12) |
static void | drawAxis (float length=1.0f) |
static void | drawGrid (float size=1.0f, int nbSubdivisions=10) |
virtual void | drawLight (GLenum light, float scale=1.0f) const |
void | drawVectorial (void *param) |
Snapshots | |
virtual QImage | grabFrameBuffer (bool withAlpha=false) |
const QString & | snapshotFileName () const |
const QString & | snapshotFilename () const |
const QString & | snapshotFormat () const |
int | snapshotCounter () const |
int | snapshotQuality () |
QFont | scaledFont (const QFont &font) const |
void | saveSnapshot (bool automatic=true, bool overwrite=false) |
void | saveSnapshot (const QString &fileName, bool overwrite=false) |
void | setSnapshotFileName (const QString &name) |
void | setSnapshotFormat (const QString &format) |
void | setSnapshotCounter (int counter) |
void | setSnapshotQuality (int quality) |
bool | openSnapshotFormatDialog () |
void | snapshotToClipboard () |
bool | saveImageSnapshot (const QString &fileName) |
Buffer to texture | |
GLuint | bufferTextureId () const |
float | bufferTextureMaxU () const |
float | bufferTextureMaxV () const |
void | copyBufferToTexture (GLint internalFormat, GLenum format=GL_NONE) |
Animation | |
bool | animationIsStarted () const |
int | animationPeriod () const |
void | setAnimationPeriod (int period) |
virtual void | startAnimation () |
virtual void | stopAnimation () |
virtual void | animate () |
void | toggleAnimation () |
Help window | |
virtual QString | helpString () const |
virtual QString | mouseString () const |
virtual QString | keyboardString () const |
virtual QString | mouseBindingsString () const |
virtual QString | shortcutBindingsString () const |
virtual void | help () |
virtual void | aboutQGLViewer () |
QTabWidget * | helpWidget () |
Drawing methods | |
virtual void | resizeGL (int width, int height) |
virtual void | initializeGL () |
virtual void | init () |
virtual void | paintGL () |
virtual void | preDraw () |
virtual void | preDrawStereo (bool leftBuffer=true) |
virtual void | draw () |
virtual void | fastDraw () |
virtual void | postDraw () |
Mouse, keyboard and event handlers | |
virtual void | mousePressEvent (QMouseEvent *) |
virtual void | mouseMoveEvent (QMouseEvent *) |
virtual void | mouseReleaseEvent (QMouseEvent *) |
virtual void | mouseDoubleClickEvent (QMouseEvent *) |
virtual void | wheelEvent (QWheelEvent *) |
virtual void | keyPressEvent (QKeyEvent *) |
virtual void | timerEvent (QTimerEvent *) |
virtual void | closeEvent (QCloseEvent *) |
Object selection | |
int | selectedName () const |
int | selectBufferSize () const |
int | selectRegionWidth () const |
int | selectRegionHeight () const |
GLuint * | selectBuffer () |
virtual void | select (const QMouseEvent *event) |
virtual void | select (const QPoint &point) |
void | setSelectBufferSize (int size) |
void | setSelectRegionWidth (int width) |
void | setSelectRegionHeight (int height) |
void | setSelectedName (int id) |
virtual void | beginSelection (const QPoint &point) |
virtual void | drawWithNames () |
virtual void | endSelection (const QPoint &point) |
virtual void | postSelection (const QPoint &point) |
Keyboard customization | |
enum | KeyboardAction { DRAW_AXIS, DRAW_GRID, DISPLAY_FPS, ENABLE_TEXT, EXIT_VIEWER, SAVE_SCREENSHOT, CAMERA_MODE, FULL_SCREEN, STEREO, ANIMATION, HELP, EDIT_CAMERA, MOVE_CAMERA_LEFT, MOVE_CAMERA_RIGHT, MOVE_CAMERA_UP, MOVE_CAMERA_DOWN, INCREASE_FLYSPEED, DECREASE_FLYSPEED, SNAPSHOT_TO_CLIPBOARD } |
unsigned int | shortcut (KeyboardAction action) const |
int | keyboardAccelerator (KeyboardAction action) const |
Qt::Key | keyFrameKey (int index) const |
Qt::KeyboardModifiers | playKeyFramePathStateKey () const |
Qt::KeyboardModifiers | addKeyFrameStateKey () const |
Qt::KeyboardModifiers | playPathStateKey () const |
Qt::Key | pathKey (int index) const |
Qt::KeyboardModifiers | addKeyFrameKeyboardModifiers () const |
Qt::KeyboardModifiers | playPathKeyboardModifiers () const |
void | setShortcut (KeyboardAction action, unsigned int key) |
void | setKeyboardAccelerator (KeyboardAction action, int key) |
void | setKeyDescription (int key, QString description) |
virtual void | setKeyFrameKey (int index, int key) |
virtual void | setPlayKeyFramePathStateKey (int buttonState) |
virtual void | setPlayPathStateKey (int buttonState) |
virtual void | setAddKeyFrameStateKey (int buttonState) |
virtual void | setPathKey (int key, int index=0) |
virtual void | setPlayPathKeyboardModifiers (Qt::KeyboardModifiers modifiers) |
virtual void | setAddKeyFrameKeyboardModifiers (Qt::KeyboardModifiers modifiers) |
Mouse customization | |
enum | MouseHandler { CAMERA, FRAME } |
enum | ClickAction { NO_CLICK_ACTION, ZOOM_ON_PIXEL, ZOOM_TO_FIT, SELECT, RAP_FROM_PIXEL, RAP_IS_CENTER, CENTER_FRAME, CENTER_SCENE, SHOW_ENTIRE_SCENE, ALIGN_FRAME, ALIGN_CAMERA } |
enum | MouseAction { NO_MOUSE_ACTION, ROTATE, ZOOM, TRANSLATE, MOVE_FORWARD, LOOK_AROUND, MOVE_BACKWARD, SCREEN_ROTATE, ROLL, DRIVE, SCREEN_TRANSLATE, ZOOM_ON_REGION } |
MouseAction | mouseAction (int state) const |
int | mouseHandler (int state) const |
int | mouseButtonState (MouseHandler handler, MouseAction action, bool withConstraint=true) const |
ClickAction | clickAction (int state, bool doubleClick, Qt::MouseButtons buttonsBefore) const |
void | getClickButtonState (ClickAction action, int &state, bool &doubleClick, Qt::MouseButtons &buttonsBefore) const |
MouseAction | wheelAction (Qt::KeyboardModifiers modifiers) const |
int | wheelHandler (Qt::KeyboardModifiers modifiers) const |
int | wheelButtonState (MouseHandler handler, MouseAction action, bool withConstraint=true) const |
void | setMouseBinding (int state, ClickAction action, bool doubleClick=false, Qt::MouseButtons buttonsBefore=Qt::NoButton) |
void | setMouseBinding (int state, MouseHandler handler, MouseAction action, bool withConstraint=true) |
void | setMouseBindingDescription (int state, QString description, bool doubleClick=false, Qt::MouseButtons buttonsBefore=Qt::NoButton) |
void | setWheelBinding (Qt::KeyboardModifiers modifiers, MouseHandler handler, MouseAction action, bool withConstraint=true) |
void | setHandlerKeyboardModifiers (MouseHandler handler, Qt::KeyboardModifiers modifiers) |
void | setHandlerStateKey (MouseHandler handler, int buttonState) |
void | setMouseStateKey (MouseHandler handler, int buttonState) |
static QString | mouseActionString (QGLViewer::MouseAction ma) |
static QString | clickActionString (QGLViewer::ClickAction ca) |
State persistence | |
QString | stateFileName () const |
virtual QDomElement | domElement (const QString &name, QDomDocument &document) const |
virtual void | initFromDOMElement (const QDomElement &element) |
virtual void | saveStateToFile () |
virtual bool | restoreStateFromFile () |
void | setStateFileName (const QString &name) |
void | saveToFile (const QString &fileName=QString::null) |
bool | restoreFromFile (const QString &fileName=QString::null) |
static void | saveStateToFileForAllViewers () |
QGLViewer pool | |
static const QPtrList < QGLViewer > & | QGLViewerPool () |
static int | QGLViewerIndex (const QGLViewer *const viewer) |
Visual hints | |
virtual void | setVisualHintsMask (int mask, int delay=2000) |
virtual void | drawVisualHints () |
virtual void | resetVisualHints () |
A versatile 3D OpenGL viewer based on QGLWidget.
It features many classical viewer functionalities, such as a camera trackball, manipulated objects, snapshot saving and much more. Its main goal is to ease the development of new 3D applications.
New users should read the introduction page to get familiar with important notions such as sceneRadius(), sceneCenter() and the world coordinate system. Try the numerous simple examples to discover the possibilities and understand how it works.
To use a QGLViewer, derive you viewer class from the QGLViewer and overload its draw() virtual method. See the simpleViewer example for an illustration.
An other option is to connect your drawing methods to the signals emitted by the QGLViewer (Qt's callback mechanism). See the callback example for a complete implementation.
Definition at line 70 of file qglviewer.h.
enum QGLViewer::ClickAction [protected] |
Defines the possible actions that can be binded to a mouse click using setMouseBinding(int,ClickAction,bool,int).
See the mouse page for details.
NO_CLICK_ACTION | |
ZOOM_ON_PIXEL | |
ZOOM_TO_FIT | |
SELECT | |
RAP_FROM_PIXEL | |
RAP_IS_CENTER | |
CENTER_FRAME | |
CENTER_SCENE | |
SHOW_ENTIRE_SCENE | |
ALIGN_FRAME | |
ALIGN_CAMERA |
Definition at line 980 of file qglviewer.h.
enum QGLViewer::KeyboardAction [protected] |
Defines the different actions that can be associated with a keyboard shortcut using setShortcut().
See the keyboard page for details.
Definition at line 926 of file qglviewer.h.
Defines the possible actions that can be binded to a mouse motion (a click, followed by a mouse displacement).
These actions may be binded to the camera() or to the manipulatedFrame() (see QGLViewer::MouseHandler) using setMouseBinding().
NO_MOUSE_ACTION | |
ROTATE | |
ZOOM | |
TRANSLATE | |
MOVE_FORWARD | |
LOOK_AROUND | |
MOVE_BACKWARD | |
SCREEN_ROTATE | |
ROLL | |
DRIVE | |
SCREEN_TRANSLATE | |
ZOOM_ON_REGION |
Definition at line 993 of file qglviewer.h.
enum QGLViewer::MouseHandler [protected] |
Defines the different mouse handlers: camera() or manipulatedFrame().
Used by setMouseBinding(), setMouseBinding(int, ClickAction, bool, int) and setWheelBinding() to define which handler receives the mouse events.
Definition at line 974 of file qglviewer.h.
QGLViewer::QGLViewer | ( | QWidget * | parent = NULL , |
const char * | name = 0 , |
||
const QGLWidget * | shareWidget = 0 , |
||
Qt::WindowFlags | flags = 0 |
||
) | [inline, explicit] |
Definition at line 78 of file qglviewer.h.
QGLViewer::QGLViewer | ( | const QGLFormat & | format, |
QWidget * | parent = 0 , |
||
const char * | name = 0 , |
||
const QGLWidget * | shareWidget = 0 , |
||
Qt::WindowFlags | flags = 0 |
||
) | [inline, explicit] |
Definition at line 82 of file qglviewer.h.
QGLViewer::QGLViewer | ( | QGLContext * | context, |
QWidget * | parent, | ||
const char * | name = 0 , |
||
const QGLWidget * | shareWidget = 0 , |
||
Qt::WindowFlags | flags = 0 |
||
) | [inline] |
Definition at line 86 of file qglviewer.h.
QGLViewer::~QGLViewer | ( | ) | [virtual] |
Virtual destructor.
The viewer is replaced by NULL
in the QGLViewerPool() (in order to preserve other viewer's indexes) and allocated memory is released. The camera() is deleted and should be copied before if it is shared by an other viewer.
Definition at line 220 of file qglviewer.cpp.
QGLViewer::QGLViewer | ( | const QGLViewer & | v | ) | [private] |
void QGLViewer::aboutQGLViewer | ( | ) | [virtual, slot] |
Displays the help window "About" tab. See help() for details.
Definition at line 2293 of file qglviewer.cpp.
Qt::KeyboardModifiers QGLViewer::addKeyFrameKeyboardModifiers | ( | ) | const |
Returns the keyboard modifiers that must be pressed with a pathKey() to add the current camera position to a KeyFrame path.
It can be Qt::NoModifier
, Qt::ControlModifier
, Qt::ShiftModifier
, Qt::AltModifier
, Qt::MetaModifier
or a combination of these (using the bitwise '|' operator).
Default value is Qt::AltModifier. Defined using setAddKeyFrameKeyboardModifiers().
See also playPathKeyboardModifiers().
Qt::KeyboardModifiers
is actually a Qt::ButtonState
. The Modifier
postfix is replaced by Button
in the enums' names (Qt::ControlButton
, Qt::AltButton
, ...). Definition at line 2706 of file qglviewer.cpp.
Qt::KeyboardModifiers QGLViewer::addKeyFrameStateKey | ( | ) | const |
Definition at line 2730 of file qglviewer.cpp.
virtual void QGLViewer::animate | ( | ) | [inline, virtual, slot] |
Scene animation method.
When animationIsStarted(), this method is in charge of the scene update before each draw(). Overload it to define how your scene evolves over time. The time should either be regularly incremented in this method (frame-rate independent animation) or computed from actual time (for instance using QTime::elapsed()) for real-time animations.
Note that KeyFrameInterpolator (which regularly updates a Frame) does not use this method to animate a Frame, but rather rely on a QTimer signal-slot mechanism.
See the animation example for an illustration.
Definition at line 652 of file qglviewer.h.
void QGLViewer::animateNeeded | ( | ) | [signal] |
bool QGLViewer::animationIsStarted | ( | ) | const [inline] |
Return true
when the animation loop is started.
During animation, an infinite loop calls animate() and draw() and then waits for animationPeriod() milliseconds before calling animate() and draw() again. And again.
Use startAnimation(), stopAnimation() or toggleAnimation() to change this value.
See the animation example for illustration.
Definition at line 619 of file qglviewer.h.
int QGLViewer::animationPeriod | ( | ) | const [inline] |
The animation loop period, in milliseconds.
When animationIsStarted(), this is delay waited after draw() to call animate() and draw() again. Default value is 40 milliseconds (25 Hz).
This value will define the currentFPS() when animationIsStarted() (provided that your animate() and draw() methods are fast enough).
If you want to know the maximum possible frame rate of your machine on a given scene, setAnimationPeriod() to 0
, and startAnimation() (keyboard shortcut is Enter
). The display will then be updated as often as possible, and the frame rate will be meaningful.
Definition at line 634 of file qglviewer.h.
float QGLViewer::aspectRatio | ( | ) | const [inline] |
Returns the aspect ratio of the viewer's widget (width() / height()).
Definition at line 326 of file qglviewer.h.
bool QGLViewer::axisIsDrawn | ( | ) | const [inline] |
Returns true
if the world axis is drawn by the viewer.
Set by setAxisIsDrawn() or toggleAxisIsDrawn(). Default value is false
.
Definition at line 112 of file qglviewer.h.
void QGLViewer::axisIsDrawnChanged | ( | bool | drawn | ) | [signal] |
This signal is emitted whenever axisIsDrawn() changes value.
QColor QGLViewer::backgroundColor | ( | ) | const [inline] |
Returns the background color of the viewer.
This method is provided for convenience since the background color is an OpenGL state variable set with glClearColor()
. However, this internal representation has the advantage that it is saved (resp. restored) with saveStateToFile() (resp. restoreStateFromFile()).
Use setBackgroundColor() to define and activate a background color.
glClearColor()
which are in the 0.0-1.0 range. Default value is (51, 51, 51) (dark gray). You may have to change foregroundColor() accordingly.glGet()
does. Instead, it returns the QGLViewer internal variable. If you directly use glClearColor()
or qglClearColor()
instead of setBackgroundColor(), the two results will differ. Definition at line 183 of file qglviewer.h.
void QGLViewer::beginSelection | ( | const QPoint & | point | ) | [protected, virtual] |
This method should prepare the selection. It is called by select() before drawWithNames().
The default implementation uses the GL_SELECT
mode to perform a selection. It uses selectBuffer() and selectBufferSize() to define a glSelectBuffer()
. The GL_PROJECTION
is then set using gluPickMatrix()
, with a window selection size defined by selectRegionWidth() and selectRegionHeight(). Finally, the GL_MODELVIEW
matrix is set to the world coordinate system using qglviewer::Camera::loadModelViewMatrix(). See the gluPickMatrix() documentation for details.
You should not need to redefine this method (if you use the GL_SELECT
mode to perform your selection), since this code is fairly classical and can be tuned. You are more likely to overload endSelection() if you want to use a more complex select buffer structure.
Definition at line 1247 of file qglviewer.cpp.
GLuint QGLViewer::bufferTextureId | ( | ) | const |
Returns the texture id of the texture created by copyBufferToTexture().
Use glBindTexture() to use this texture. Note that this is already done by copyBufferToTexture().
Returns 0
is copyBufferToTexture() was never called or if the texure was deleted using glDeleteTextures() since then.
Definition at line 4099 of file qglviewer.cpp.
float QGLViewer::bufferTextureMaxU | ( | ) | const [inline] |
Returns the texture coordinate corresponding to the u extremum of the bufferTexture.
The bufferTexture is created by copyBufferToTexture(). The texture size has powers of two dimensions and the buffer image hence only fills a part of it. This value corresponds to the u coordinate of the extremum right side of the buffer image.
Use (0,0) to (bufferTextureMaxU(), bufferTextureMaxV()) texture coordinates to map the entire texture on a quad.
Definition at line 601 of file qglviewer.h.
float QGLViewer::bufferTextureMaxV | ( | ) | const [inline] |
Same as bufferTextureMaxU(), but for the v texture coordinate.
Definition at line 603 of file qglviewer.h.
qglviewer::Camera* QGLViewer::camera | ( | ) | const [inline] |
Returns the associated qglviewer::Camera, never NULL
.
Definition at line 265 of file qglviewer.h.
bool QGLViewer::cameraIsEdited | ( | ) | const [inline] |
Returns true
if the camera() is being edited in the viewer.
Set by setCameraIsEdited() or toggleCameraIsEdited(). Default value is false
.
The current implementation is limited: the defined camera() paths (see qglviewer::Camera::keyFrameInterpolator()) are simply displayed using qglviewer::Camera::drawAllPaths(). Actual camera and path edition will be implemented in the future.
Definition at line 138 of file qglviewer.h.
void QGLViewer::cameraIsEditedChanged | ( | bool | edited | ) | [signal] |
This signal is emitted whenever cameraIsEdited() changes value..
bool QGLViewer::cameraIsInRevolveMode | ( | ) | const [private] |
This function should be used in conjunction with toggleCameraMode(). It returns true
when at least one mouse button is binded to the REVOLVE
mouseAction. This is crude way of determining which "mode" the camera is in.
Definition at line 3188 of file qglviewer.cpp.
QString QGLViewer::cameraPathKeysString | ( | ) | const [private] |
Definition at line 2148 of file qglviewer.cpp.
QGLViewer::ClickAction QGLViewer::clickAction | ( | int | state, |
bool | doubleClick, | ||
Qt::MouseButtons | buttonsBefore | ||
) | const |
Same as mouseAction(), but for the ClickAction set using setMouseBinding().
Definition at line 3153 of file qglviewer.cpp.
QString QGLViewer::clickActionString | ( | QGLViewer::ClickAction | ca | ) | [static, private] |
Definition at line 1903 of file qglviewer.cpp.
void QGLViewer::closeEvent | ( | QCloseEvent * | e | ) | [protected, virtual] |
Overloading of the QWidget
method.
Saves the viewer state using saveStateToFile() and then calls QGLWidget::closeEvent().
Definition at line 1126 of file qglviewer.cpp.
void QGLViewer::connectAllCameraKFIInterpolatedSignals | ( | bool | connection = true | ) | [private] |
Definition at line 731 of file qglviewer.cpp.
void QGLViewer::copyBufferToTexture | ( | GLint | internalFormat, |
GLenum | format = GL_NONE |
||
) | [slot] |
Makes a copy of the current buffer into a texture.
Creates a texture (when needed) and uses glCopyTexSubImage2D() to directly copy the buffer in it.
Use internalFormat
and format
to define the texture format and hence which and how components of the buffer are copied into the texture. See the glTexImage2D() documentation for details.
When format
is c GL_NONE (default), its value is set to internalFormat
, which fits most cases. Typical internalFormat
(and format
) values are GL_DEPTH_COMPONENT
and GL_RGBA
. Use GL_LUMINANCE
as the internalFormat
and GL_RED
, GL_GREEN
or GL_BLUE
as format
to capture a single color component as a luminance (grey scaled) value. Note that GL_STENCIL
is not supported as a format.
The texture has dimensions which are powers of two. It is as small as possible while always being larger or equal to the current size of the widget. The buffer image hence does not entirely fill the texture: it is stuck to the lower left corner (corresponding to the (0,0) texture coordinates). Use bufferTextureMaxU() and bufferTextureMaxV() to get the upper right corner maximum u and v texture coordinates. Use bufferTextureId() to retrieve the id of the created texture.
Here is how to display a grey-level image of the z-buffer:
copyBufferToTexture(GL_DEPTH_COMPONENT); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glEnable(GL_TEXTURE_2D); startScreenCoordinatesSystem(true); glBegin(GL_QUADS); glTexCoord2f(0.0, 0.0); glVertex2i(0, 0); glTexCoord2f(bufferTextureMaxU(), 0.0); glVertex2i(width(), 0); glTexCoord2f(bufferTextureMaxU(), bufferTextureMaxV()); glVertex2i(width(), height()); glTexCoord2f(0.0, bufferTextureMaxV()); glVertex2i(0, height()); glEnd(); stopScreenCoordinatesSystem(); glDisable(GL_TEXTURE_2D);
Use glReadBuffer() to select which buffer is copied into the texture. See also glPixelTransfer()
, glPixelZoom()
and glCopyPixel()
for pixel color transformations during copy.
Call makeCurrent() before this method to make the OpenGL context active if needed.
GL_DEPTH_COMPONENT
format may not be supported by all hardware. It may sometimes be emulated in software, resulting in poor performances.Definition at line 4042 of file qglviewer.cpp.
float QGLViewer::currentFPS | ( | ) | [inline] |
Returns the current averaged viewer frame rate.
This value is computed and averaged over 20 successive frames. It only changes every 20 draw() (previously computed value is otherwise returned).
This method is useful for true real-time applications that may adapt their computational load accordingly in order to maintain a given frequency.
This value is meaningful only when draw() is regularly called, either using a QTimer
, when animationIsStarted() or when the camera is manipulated with the mouse.
Definition at line 337 of file qglviewer.h.
void QGLViewer::defaultConstructor | ( | ) | [private] |
Definition at line 90 of file qglviewer.cpp.
void QGLViewer::delayedFullScreen | ( | ) | [inline, private, slot] |
Definition at line 1121 of file qglviewer.h.
void QGLViewer::displayFPS | ( | ) | [private] |
Displays the averaged currentFPS() frame rate in the upper left corner of the widget.
updateGL() should be called in a loop in order to have a meaningful value (this is the case when you continuously move the camera using the mouse or when animationIsStarted()). setAnimationPeriod(0) to make this loop as fast as possible in order to reach and measure the maximum available frame rate.
When FPSIsDisplayed() is true
(default is false
), this method is called by postDraw() to display the currentFPS(). Use QApplication::setFont() to define the font (see drawText()).
Definition at line 1026 of file qglviewer.cpp.
void QGLViewer::displayMessage | ( | const QString & | message, |
int | delay = 2000 |
||
) |
Briefly displays a message in the lower left corner of the widget. Convenient to provide feedback to the user.
message
is displayed during delay
milliseconds (default is 2 seconds) using drawText().
This method should not be called in draw(). If you want to display a text in each draw(), use drawText() instead.
If this method is called when a message is already displayed, the new message replaces the old one. Use setTextIsEnabled() (default shortcut is '?') to enable or disable text (and hence messages) display.
Definition at line 992 of file qglviewer.cpp.
bool QGLViewer::displaysInStereo | ( | ) | const [inline] |
Returns true
if the viewer displays in stereo.
The QGLViewer object must be created with a stereo format to handle stereovision:
The hardware needs to support stereo display. Try the stereoViewer example to check.
Set by setStereoDisplay() or toggleStereoDisplay(). Default value is false
.
Stereo is performed using the Parallel axis asymmetric frustum perspective projection method. See Camera::loadProjectionMatrixStereo() and Camera::loadModelViewMatrixStereo().
The stereo parameters are defined by the camera(). See qglviewer::Camera::setIODistance(), qglviewer::Camera::setPhysicalScreenWidth() and qglviewer::Camera::setFocusDistance().
Definition at line 364 of file qglviewer.h.
QDomElement QGLViewer::domElement | ( | const QString & | name, |
QDomDocument & | document | ||
) | const [virtual] |
Returns an XML QDomElement
that represents the QGLViewer.
Used by saveStateToFile(). restoreStateFromFile() uses initFromDOMElement() to restore the QGLViewer state from the resulting QDomElement
.
name
is the name of the QDomElement tag. doc
is the QDomDocument
factory used to create QDomElement.
The created QDomElement contains state values (axisIsDrawn(), FPSIsDisplayed(), isFullScreen()...), viewer geometry, as well as camera() (see qglviewer::Camera::domElement()) and manipulatedFrame() (if defined, see qglviewer::ManipulatedFrame::domElement()) states.
Overload this method to add your own attributes to the state file:
QDomElement Viewer::domElement(const QString& name, QDomDocument& document) const { // Creates a custom node for a light QDomElement de = document.createElement("Light"); de.setAttribute("state", (lightIsOn()?"on":"off")); // Note the include of the ManipulatedFrame domElement method. de.appendChild(lightManipulatedFrame()->domElement("LightFrame", document)); // Get default state domElement and append custom node QDomElement res = QGLViewer::domElement(name, document); res.appendChild(de); return res; }
See initFromDOMElement() for the associated restoration code.
Definition at line 3784 of file qglviewer.cpp.
virtual void QGLViewer::draw | ( | ) | [inline, protected, virtual] |
The core method of the viewer, that draws the scene.
If you build a class that inherits from QGLViewer, this is the method you want to overload. See the simpleViewer example for an illustration.
The camera modelView matrix set in preDraw() converts from the world to the camera coordinate systems. Vertices given in draw() can then be considered as being given in the world coordinate system. The camera is moved in this world using the mouse. This representation is much more intuitive than the default camera-centric OpenGL standard.
GL_PROJECTION
matrix should not be modified by this method, to correctly display visual hints (axis, grid, FPS...) in postDraw(). Use push/pop or call camera()->loadProjectionMatrix() at the end of draw() if you need to change the projection matrix (unlikely). On the other hand, the GL_MODELVIEW
matrix can be modified and left in a arbitrary state. Reimplemented in octomap::ViewerWidget.
Definition at line 805 of file qglviewer.h.
void QGLViewer::drawArrow | ( | float | length = 1.0f , |
float | radius = -1.0f , |
||
int | nbSubdivisions = 12 |
||
) | [static] |
Draws a 3D arrow along the positive Z axis.
length
, radius
and nbSubdivisions
define its geometry. If radius
is negative (default), it is set to 0.05 * length
.
Use drawArrow(const Vec& from, const Vec& to, float radius, int nbSubdivisions) or change the ModelView
matrix to place the arrow in 3D.
Uses current color and does not modify the OpenGL state.
Definition at line 3419 of file qglviewer.cpp.
void QGLViewer::drawArrow | ( | const qglviewer::Vec & | from, |
const qglviewer::Vec & | to, | ||
float | radius = -1.0f , |
||
int | nbSubdivisions = 12 |
||
) | [static] |
Draws a 3D arrow between the 3D point from
and the 3D point to
, both defined in the current ModelView coordinates system.
See drawArrow(float length, float radius, int nbSubdivisions) for details.
Definition at line 3439 of file qglviewer.cpp.
void QGLViewer::drawAxis | ( | float | length = 1.0f | ) | [static] |
Draws an XYZ axis, with a given size (default is 1.0).
The axis position and orientation matches the current modelView matrix state: three arrows (red, green and blue) of length length
are drawn along the positive X, Y and Z directions.
Use the following code to display the current position and orientation of a qglviewer::Frame:
glPushMatrix(); glMultMatrixd(frame.matrix()); QGLViewer::drawAxis(sceneRadius() / 5.0); // Or any scale glPopMatrix();
The current color and line width are used to draw the X, Y and Z characters at the extremities of the three arrows. The OpenGL state is not modified by this method.
axisIsDrawn() uses this method to draw a representation of the world coordinate system. See also QGLViewer::drawArrow() and QGLViewer::drawGrid().
Definition at line 3467 of file qglviewer.cpp.
void QGLViewer::drawFinished | ( | bool | automatic | ) | [signal] |
Signal emitted at the end of the QGLViewer::paintGL() method, when frame is drawn.
Can be used to notify an image grabbing process that the image is ready. A typical example is to connect this signal to the saveSnapshot() method, so that a (numbered) snapshot is generated after each new display, in order to create a movie:
connect(viewer, SIGNAL(drawFinished(bool)), SLOT(saveSnapshot(bool)));
The automatic
bool variable is always true
and has been added so that the signal can be connected to saveSnapshot() with an automatic
value set to true
.
void QGLViewer::drawGrid | ( | float | size = 1.0f , |
int | nbSubdivisions = 10 |
||
) | [static] |
Draws a grid in the XY plane, centered on (0,0,0) (defined in the current coordinate system).
size
(OpenGL units) and nbSubdivisions
define its geometry. Set the GL_MODELVIEW
matrix to place and orientate the grid in 3D space (see the drawAxis() documentation).
The OpenGL state is not modified by this method.
Definition at line 3535 of file qglviewer.cpp.
void QGLViewer::drawLight | ( | GLenum | light, |
float | scale = 1.0f |
||
) | const [protected, virtual] |
Draws a representation of light
.
Called in draw(), this method is useful to debug or display your light setup. Light drawing depends on the type of light (point, spot, directional).
The method retrieves the light setup using glGetLightfv
. Position and define your lights before calling this method.
Light is drawn using its diffuse color. Disabled lights are not displayed.
Drawing size is proportional to sceneRadius(). Use scale
to rescale it.
See the drawLight example for an illustration.
GL_COLOR_MATERIAL
before calling this method. glColor
is set to the light diffuse color. Definition at line 763 of file qglviewer.cpp.
void QGLViewer::drawNeeded | ( | ) | [signal] |
Signal emitted by the default draw() method.
Connect this signal to your main drawing method or overload draw(). See the callback example for an illustration.
void QGLViewer::drawText | ( | int | x, |
int | y, | ||
const QString & | text, | ||
const QFont & | fnt = QFont() |
||
) |
Draws text
at position x
, y
(expressed in screen coordinates pixels, origin in the upper left corner of the widget).
The default QApplication::font() is used to render the text when no fnt
is specified. Use QApplication::setFont() to define this default font.
You should disable GL_LIGHTING
and GL_DEPTH_TEST
before this method so that colors are properly rendered.
This method can be used in conjunction with the qglviewer::Camera::projectedCoordinatesOf() method to display a text attached to an object. In your draw() method use:
qglviewer::Vec screenPos = camera()->projectedCoordinatesOf(myFrame.position()); drawText((int)screenPos[0], (int)screenPos[1], "My Object");
See the screenCoordSystem example for an illustration.
Text is displayed only when textIsEnabled() (default). This mechanism allows the user to conveniently remove all the displayed text with a single keyboard shortcut.
See also displayMessage() to drawText() for only a short amount of time.
Use QGLWidget::renderText(x,y,z, text) instead (Qt version >= 3.1) if you want to draw a text located at a specific 3D position instead of 2D screen coordinates (fixed size text, facing the camera).
The GL_MODELVIEW
and GL_PROJECTION
matrices are not modified by this method.
listBase
parameter (or overload fontDisplayListBase
with Qt4).fnt
parameter is not taken into account to prevent a crash. It is replaced by a fixed font that should be compatible with the qtconfig
anti-aliased font configuration (disable this option otherwise).fnt
size attribute (set with QFont::setPixelSize() or QFont::setPointSize()) is taken into account. Also note that in that case each call to drawText() changes the camera projection matrix and restores it back (using startScreenCoordinatesSystem() and stopScreenCoordinatesSystem()). If you call this method several times and it slows down your frame rate, consider factorizing the context changes. Definition at line 860 of file qglviewer.cpp.
void QGLViewer::drawVectorial | ( | ) | [inline, private] |
Vectorial rendering callback method.
Definition at line 403 of file qglviewer.h.
void QGLViewer::drawVisualHints | ( | ) | [virtual] |
Draws viewer related visual hints.
Displays the new qglviewer::Camera::revolveAroundPoint() when it is changed. See the mouse page for details. Also draws a line between qglviewer::Camera::revolveAroundPoint() and mouse cursor when the camera is rotated around the camera Z axis.
See also setVisualHintsMask() and resetVisualHints(). The hint color is foregroundColor().
Limitation : One needs to have access to visualHint_ to overload this method.
Removed from the documentation for this reason.
Definition at line 3317 of file qglviewer.cpp.
virtual void QGLViewer::drawWithNames | ( | ) | [inline, protected, virtual] |
This method is called by select() and should draw selectable entities.
Default implementation is empty. Overload and draw the different elements of your scene you want to be able to select. The default select() implementation relies on the GL_SELECT
, and requires that each selectable element is drawn within a glPushName()
- glPopName()
block. A typical usage would be (see the select example):
void Viewer::drawWithNames() { for (int i=0; i<nbObjects; ++i) { glPushName(i); object(i)->draw(); glPopName(); } }
The resulting selected name is computed by endSelection(), which setSelectedName() to the integer id pushed by this method (a value of -1 means no selection). Use selectedName() to update your selection, probably in the postSelection() method.
glBegin(GL_POINTS)
; and glVertex3fv()
in the above draw()
method (not compatible with raster mode): use glRasterPos3fv()
instead. Reimplemented in octomap::ViewerWidget.
Definition at line 906 of file qglviewer.h.
void QGLViewer::endSelection | ( | const QPoint & | point | ) | [protected, virtual] |
This method is called by select() after scene elements were drawn by drawWithNames(). It should analyze the selection result to determine which object is actually selected.
The default implementation relies on GL_SELECT
mode (see beginSelection()). It assumes that names were pushed and popped in drawWithNames(), and analyzes the selectBuffer() to find the name that corresponds to the closer (z min) object. It then setSelectedName() to this value, or to -1 if the selectBuffer() is empty (no object drawn in selection region). Use selectedName() (probably in the postSelection() method) to retrieve this value and update your data structure accordingly.
This default implementation, although sufficient for many cases is however limited and you may have to overload this method. This will be the case if drawWithNames() uses several push levels in the name heap. A more precise depth selection, for instance privileging points over edges and triangles to avoid z precision problems, will also require an overloading. A typical implementation will look like:
glFlush(); // Get the number of objects that were seen through the pick matrix frustum. // Resets GL_RENDER mode. GLint nbHits = glRenderMode(GL_RENDER); if (nbHits <= 0) setSelectedName(-1); else { // Interpret results: each object created values in the selectBuffer(). // See the glSelectBuffer() man page for details on the buffer structure. // The following code depends on your selectBuffer() structure. for (int i=0; i<nbHits; ++i) if ((selectBuffer())[i*4+1] < zMin) setSelectedName((selectBuffer())[i*4+3]) }
See the multiSelect example for a multi-object selection implementation of this method.
Definition at line 1307 of file qglviewer.cpp.
void QGLViewer::fastDraw | ( | ) | [protected, virtual] |
Draws a simplified version of the scene to guarantee interactive camera displacements.
This method is called instead of draw() when the qglviewer::Camera::frame() is qglviewer::ManipulatedCameraFrame::isManipulated(). Default implementation simply calls draw().
Overload this method if your scene is too complex to allow for interactive camera manipulation. See the fastDraw example for an illustration.
Definition at line 519 of file qglviewer.cpp.
QColor QGLViewer::foregroundColor | ( | ) | const [inline] |
Returns the foreground color used by the viewer.
This color is used when FPSIsDisplayed(), gridIsDrawn(), to display the camera paths when the cameraIsEdited().
glColor3f()
which are in the range 0-1. Default value is (180, 180, 180) (light gray).Use qglColor
(foregroundColor()) to set the current OpenGL color to the foregroundColor().
See also backgroundColor().
Definition at line 197 of file qglviewer.h.
QString QGLViewer::formatClickActionPrivate | ( | ClickActionPrivate | cap | ) | [static, private] |
Definition at line 1922 of file qglviewer.cpp.
bool QGLViewer::FPSIsDisplayed | ( | ) | const [inline] |
Returns true
if the viewer displays the current frame rate (Frames Per Second).
Use QApplication::setFont() to define the display font (see drawText()).
Set by setFPSIsDisplayed() or toggleFPSIsDisplayed(). Use currentFPS() to get the current FPS. Default value is false
.
Definition at line 123 of file qglviewer.h.
void QGLViewer::FPSIsDisplayedChanged | ( | bool | displayed | ) | [signal] |
This signal is emitted whenever FPSIsDisplayed() changes value.
QImage QGLViewer::frameBufferSnapshot | ( | ) | [private] |
Definition at line 735 of file saveSnapshot.cpp.
void QGLViewer::getClickButtonState | ( | ClickAction | ca, |
int & | state, | ||
bool & | doubleClick, | ||
Qt::MouseButtons & | buttonsBefore | ||
) | const |
Similar to mouseButtonState(), but for ClickAction.
The results of the query are returned in the state
, doubleClick
and buttonsBefore
parameters. If the ClickAction is not associated to any mouse button, Qt::NoButton
is returned in state
. If several mouse buttons trigger in the ClickAction, one of them is returned.
Definition at line 3171 of file qglviewer.cpp.
QImage QGLViewer::grabFrameBuffer | ( | bool | withAlpha = false | ) | [virtual] |
Definition at line 782 of file saveSnapshot.cpp.
bool QGLViewer::gridIsDrawn | ( | ) | const [inline] |
Returns true
if a XY grid is drawn by the viewer.
Set by setGridIsDrawn() or toggleGridIsDrawn(). Default value is false
.
Definition at line 116 of file qglviewer.h.
void QGLViewer::gridIsDrawnChanged | ( | bool | drawn | ) | [signal] |
This signal is emitted whenever gridIsDrawn() changes value.
void QGLViewer::handleKeyboardAction | ( | KeyboardAction | id | ) | [private] |
Definition at line 2520 of file qglviewer.cpp.
void QGLViewer::help | ( | ) | [virtual, slot] |
Opens a modal help window that includes four tabs, respectively filled with helpString(), keyboardString(), mouseString() and about libQGLViewer.
Rich html-like text can be used (see the QStyleSheet documentation). This method is called when the user presses the QGLViewer::HELP key (default is 'H').
You can use helpWidget() to access to the help widget (to add/remove tabs, change layout...).
The helpRequired() signal is emitted.
Definition at line 2312 of file qglviewer.cpp.
void QGLViewer::helpRequired | ( | ) | [signal] |
Signal emitted by the default QGLViewer::help() method.
Connect this signal to your own help method or overload help().
virtual QString QGLViewer::helpString | ( | ) | const [inline, virtual] |
Returns the QString displayed in the help() window main tab.
Overload this method to define your own help string, which should shortly describe your application and explain how it works. Rich-text (HTML) tags can be used (see QStyleSheet() documentation for available tags):
QString myViewer::helpString() const { QString text("<h2>M y V i e w e r</h2>"); text += "Displays a <b>Scene</b> using OpenGL. Move the camera using the mouse."; return text; }
See also mouseString() and keyboardString().
Reimplemented in octomap::ViewerWidget.
Definition at line 735 of file qglviewer.h.
QTabWidget* QGLViewer::helpWidget | ( | ) | [inline, protected] |
Returns a pointer to the help widget.
Use this only if you want to directly modify the help widget. Otherwise use helpString(), setKeyDescription() and setMouseBindingDescription() to customize the text displayed in the help window tabs.
Definition at line 757 of file qglviewer.h.
void QGLViewer::hideMessage | ( | ) | [private, slot] |
Definition at line 1009 of file qglviewer.cpp.
virtual void QGLViewer::init | ( | ) | [inline, protected, virtual] |
Initializes the viewer OpenGL context.
This method is called before the first drawing and should be overloaded to initialize some of the OpenGL flags. The default implementation is empty. See initializeGL().
Typical usage include camera() initialization (showEntireScene()), previous viewer state restoration (restoreStateFromFile()), OpenGL state modification and display list creation.
Note that initializeGL() modifies the standard OpenGL context. These values can be restored back in this method.
Reimplemented in octomap::ViewerWidget.
Definition at line 784 of file qglviewer.h.
void QGLViewer::initFromDOMElement | ( | const QDomElement & | element | ) | [virtual, slot] |
Restores the QGLViewer state from a QDomElement
created by domElement().
Used by restoreStateFromFile() to restore the QGLViewer state from a file.
Overload this method to retrieve custom attributes from the QGLViewer state file. This code corresponds to the one given in the domElement() documentation:
void Viewer::initFromDOMElement(const QDomElement& element) { // Restore standard state QGLViewer::initFromDOMElement(element); QDomElement child=element.firstChild().toElement(); while (!child.isNull()) { if (child.tagName() == "Light") { if (child.hasAttribute("state")) setLightOn(child.attribute("state").lower() == "on"); // Assumes there is only one child. Otherwise you need to parse child's children recursively. QDomElement lf = child.firstChild().toElement(); if (!lf.isNull() && lf.tagName() == "LightFrame") lightManipulatedFrame()->initFromDomElement(lf); } child = child.nextSibling().toElement(); } }
See also qglviewer::Camera::initFromDOMElement(), qglviewer::ManipulatedFrame::initFromDOMElement().
element
values. Definition at line 3870 of file qglviewer.cpp.
void QGLViewer::initializeGL | ( | ) | [protected, virtual] |
Initializes the QGLViewer OpenGL context and then calls user-defined init().
This method is automatically called once, before the first call to paintGL().
Overload init() instead of this method to modify viewer specific OpenGL state or to create display lists.
To make beginners' life easier and to simplify the examples, this method slightly modifies the standard OpenGL state:
glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); glEnable(GL_DEPTH_TEST); glEnable(GL_COLOR_MATERIAL);
If you port an existing application to QGLViewer and your display changes, you probably want to disable these flags in init() to get back to a standard OpenGL state.
Definition at line 314 of file qglviewer.cpp.
void QGLViewer::initializeSnapshotFormats | ( | ) | [private] |
Definition at line 117 of file saveSnapshot.cpp.
bool QGLViewer::isFullScreen | ( | ) | const [inline] |
Returns true
if the viewer is in fullScreen mode.
Default value is false
. Set by setFullScreen() or toggleFullScreen().
Note that if the QGLViewer is embedded in an other QWidget, it returns true
when the top level widget is in full screen mode.
Definition at line 344 of file qglviewer.h.
int QGLViewer::keyboardAccelerator | ( | KeyboardAction | action | ) | const |
Definition at line 2630 of file qglviewer.cpp.
QString QGLViewer::keyboardString | ( | ) | const [virtual] |
Returns a QString that describes the application keyboard shortcut bindings, and that will be displayed in the help() window Keyboard
tab.
Default value is a table that describes the custom shortcuts defined using setKeyDescription() as well as the standard QGLViewer::KeyboardAction shortcuts (defined using setShortcut()). See the keyboard page for details on key customization.
See also helpString() and mouseString().
Definition at line 2239 of file qglviewer.cpp.
Qt::Key QGLViewer::keyFrameKey | ( | int | index | ) | const |
Definition at line 2753 of file qglviewer.cpp.
void QGLViewer::keyPressEvent | ( | QKeyEvent * | e | ) | [protected, virtual] |
Overloading of the QWidget
method.
Default keyboard shortcuts are defined using setShortcut(). Overload this method to implement a specific keyboard binding. Call the original method if you do not catch the event to preserve the viewer default key bindings:
void Viewer::keyPressEvent(QKeyEvent *e) { // Defines the Alt+R shortcut. if ((e->key() == Qt::Key_R) && (e->modifiers() == Qt::AltModifier)) { myResetFunction(); updateGL(); // Refresh display } else QGLViewer::keyPressEvent(e); } // With Qt 2 or 3, you would retrieve modifiers keys using : // const Qt::ButtonState modifiers = (Qt::ButtonState)(e->state() & Qt::KeyButtonMask);
When you define a new keyboard shortcut, use setKeyDescription() to provide a short description which is displayed in the help() window Keyboard tab. See the keyboardAndMouse example for an illustration.
See also QGLWidget::keyReleaseEvent().
Definition at line 2437 of file qglviewer.cpp.
qglviewer::ManipulatedFrame* QGLViewer::manipulatedFrame | ( | ) | const [inline] |
Returns the viewer's qglviewer::ManipulatedFrame.
This qglviewer::ManipulatedFrame can be moved with the mouse when the associated mouse bindings are used (default is when pressing the Control
key with any mouse button). Use setMouseBinding() to define new bindings.
See the manipulatedFrame example for a complete implementation.
Default value is NULL
, meaning that no qglviewer::ManipulatedFrame is set.
Definition at line 277 of file qglviewer.h.
QGLViewer::MouseAction QGLViewer::mouseAction | ( | int | state | ) | const |
Returns the MouseAction associated with the state
mouse button(s) and keyboard modifiers. Returns QGLViewer::NO_MOUSE_ACTION if no action is associated.
For instance, to know which motion corresponds to Alt+LeftButton, do:
QGLViewer::MouseAction ma = mouseAction(Qt::ALT + Qt::LeftButton); if (ma != QGLViewer::NO_MOUSE_ACTION) ...
Use mouseHandler() to know which object (QGLViewer::CAMERA or QGLViewer::FRAME) will perform this action.
Definition at line 3061 of file qglviewer.cpp.
QString QGLViewer::mouseActionString | ( | QGLViewer::MouseAction | ma | ) | [static, private] |
Definition at line 1883 of file qglviewer.cpp.
virtual QString QGLViewer::mouseBindingsString | ( | ) | const [inline, virtual] |
This method is deprecated, use mouseString() instead.
Definition at line 742 of file qglviewer.h.
int QGLViewer::mouseButtonState | ( | MouseHandler | handler, |
MouseAction | action, | ||
bool | withConstraint = true |
||
) | const |
Returns the mouse buttons and keyboard modifiers (if any) that have to be used to activate action
on handler
(with constraint or not).
If no state triggers the action, returns Qt::NoButton which is an impossible case since at least one mouse button has to be specified in setMouseBinding().
To know which keys and mouse buttons have to be pressed to translate the camera, use tests like:
int bs = mouseButtonState(QGLViewer::CAMERA, QGLViewer::TRANSLATE); if (bs & Qt::RightButton) ... // Right button needed to translate the camera if (bs & Qt::AltModifier) ... // Alt key needed (use AltModifier with Qt version 2 or 3) if (bs & Qt::KeyboardModifierMask == Qt::NoButton) ... // No keyboard modifier needed
Note that mouse bindings are displayed in the 'Mouse' help window tab.
See also mouseAction() and mouseHandler().
Definition at line 3106 of file qglviewer.cpp.
void QGLViewer::mouseDoubleClickEvent | ( | QMouseEvent * | e | ) | [protected, virtual] |
Overloading of the QWidget
method.
The behavior of the mouse double click depends on the mouse binding. See setMouseBinding() and the mouse page.
Definition at line 1729 of file qglviewer.cpp.
qglviewer::MouseGrabber* QGLViewer::mouseGrabber | ( | ) | const [inline] |
Returns the current qglviewer::MouseGrabber, or NULL
if no qglviewer::MouseGrabber currently grabs mouse events.
When qglviewer::MouseGrabber::grabsMouse(), the different mouse events are sent to the mouseGrabber() instead of their usual targets (camera() or manipulatedFrame()).
See the qglviewer::MouseGrabber documentation for details on MouseGrabber's mode of operation.
In order to use MouseGrabbers, you need to enable mouse tracking (so that mouseMoveEvent() is called even when no mouse button is pressed). Add this line in init() or in your viewer constructor:
setMouseTracking(true);
Note that mouse tracking is disabled by default. Use QWidget::hasMouseTracking() to retrieve current state.
Definition at line 304 of file qglviewer.h.
void QGLViewer::mouseGrabberChanged | ( | qglviewer::MouseGrabber * | mouseGrabber | ) | [signal] |
Signal emitted by setMouseGrabber() when the mouseGrabber() is changed.
mouseGrabber
is a pointer to the new MouseGrabber. Note that this signal is emitted with a NULL
parameter each time a MouseGrabber stops grabbing mouse.
bool QGLViewer::mouseGrabberIsEnabled | ( | const qglviewer::MouseGrabber *const | mouseGrabber | ) | [inline] |
Returns true
if mouseGrabber
is enabled.
Default value is true
for all MouseGrabbers. When set to false
using setMouseGrabberIsEnabled(), the specified mouseGrabber
will never become the mouseGrabber() of this QGLViewer. This is useful when you use several viewers: some MouseGrabbers may only have a meaning for some specific viewers and should not be selectable in others.
You can also use qglviewer::MouseGrabber::removeFromMouseGrabberPool() to completely disable a MouseGrabber in all the QGLViewers.
Definition at line 316 of file qglviewer.h.
int QGLViewer::mouseHandler | ( | int | state | ) | const |
Returns the MouseHandler associated with the state
. If no action is associated, returns -1
.
For instance, to know which handler receives the Alt+LeftButton, do:
int mh = mouseHandler(Qt::ALT + Qt::LeftButton); if (mh == QGLViewer::CAMERA) ...
Use mouseAction() to know which action (see the MouseAction enum) will be perform on this handler.
Definition at line 3080 of file qglviewer.cpp.
void QGLViewer::mouseMoveEvent | ( | QMouseEvent * | e | ) | [protected, virtual] |
Overloading of the QWidget
method.
Mouse move event is sent to the mouseGrabber() (if any) or to the camera() or the manipulatedFrame(), depending on mouse bindings (see setMouseBinding()).
If you want to define your own mouse behavior, do something like this:
void Viewer::mousePressEvent(QMouseEvent* e) { // Qt version 2 or 3 : use Qt::KeyButtonMask and Qt::MouseButtonMask to separate the modifiers // (Qt::ControlButton/Qt::AltButton/Qt::ShiftButton/Qt::MetaButton) from the mouse buttons // (Qt::LeftButton/Qt::MidButton/Qt::RightButton) in state(). if ( ((e->state() & Qt::KeyButtonMask) == myModifiers) && ((e->state() & Qt::MouseButtonMask) == myButton) ) // With Qt 4, use instead : if ((e->button() == myButton) && (e->modifiers() == myModifiers)) myMouseBehavior = true; else QGLViewer::mousePressEvent(e); } void Viewer::mouseMoveEvent(QMouseEvent *e) { if (myMouseBehavior) // Use e->x() and e->y() as you want... else QGLViewer::mouseMoveEvent(e); } void Viewer::mouseReleaseEvent(QMouseEvent* e) { if (myMouseBehavior) myMouseBehavior = false; else QGLViewer::mouseReleaseEvent(e); }
Definition at line 1546 of file qglviewer.cpp.
void QGLViewer::mousePressEvent | ( | QMouseEvent * | e | ) | [protected, virtual] |
Overloading of the QWidget
method.
When the user clicks on the mouse:
Mouse bindings customization can be achieved using setMouseBinding() and setWheelBinding(). See the mouse page for a complete description of mouse bindings.
See the mouseMoveEvent() documentation for an example of more complex mouse behavior customization using overloading.
Definition at line 1414 of file qglviewer.cpp.
void QGLViewer::mouseReleaseEvent | ( | QMouseEvent * | e | ) | [protected, virtual] |
Overloading of the QWidget
method.
Calls the mouseGrabber(), camera() or manipulatedFrame mouseReleaseEvent
method.
See the mouseMoveEvent() documentation for an example of mouse behavior customization.
Definition at line 1609 of file qglviewer.cpp.
QString QGLViewer::mouseString | ( | ) | const [virtual] |
Returns a QString that describes the application mouse bindings, displayed in the help() window Mouse
tab.
Result is a table that describes custom application mouse binding descriptions defined using setMouseBindingDescription() as well as standard mouse bindings (defined using setMouseBinding() and setWheelBinding()). See the mouse page for details on mouse bindings.
See also helpString() and keyboardString().
Definition at line 2009 of file qglviewer.cpp.
bool QGLViewer::openSnapshotFormatDialog | ( | ) | [slot] |
Opens a dialog that displays the different available snapshot formats.
Then calls setSnapshotFormat() with the selected one (unless the user cancels).
Returns false
if the user presses the Cancel button and true
otherwise.
Definition at line 97 of file saveSnapshot.cpp.
void QGLViewer::paintGL | ( | ) | [protected, virtual] |
Main paint method, inherited from QGLWidget
.
Calls the following methods, in that order:
Definition at line 355 of file qglviewer.cpp.
Qt::Key QGLViewer::pathKey | ( | int | index | ) | const |
Returns the keyboard key associated to camera Key Frame path index
.
Default values are F1..F12 for indexes 1..12.
addKeyFrameKeyboardModifiers() (resp. playPathKeyboardModifiers()) define the state key(s) that must be pressed with this key to add a KeyFrame to (resp. to play) the associated Key Frame path. If you quickly press twice the pathKey(), the path is reset (resp. deleted).
Use camera()->keyFrameInterpolator( index
) to retrieve the KeyFrameInterpolator that defines the path.
If several keys are binded to a given index
(see setPathKey()), one of them is returned. Returns 0
if no key is associated with this index.
See also the keyboard page.
Definition at line 2654 of file qglviewer.cpp.
void QGLViewer::performClickAction | ( | ClickAction | ca, |
const QMouseEvent *const | e | ||
) | [private] |
Definition at line 1347 of file qglviewer.cpp.
Qt::KeyboardModifiers QGLViewer::playKeyFramePathStateKey | ( | ) | const |
Definition at line 2759 of file qglviewer.cpp.
Qt::KeyboardModifiers QGLViewer::playPathKeyboardModifiers | ( | ) | const |
Returns the keyboard modifiers that must be pressed with a pathKey() to play a camera KeyFrame path.
It can be Qt::NoModifier
, Qt::ControlModifier
, Qt::ShiftModifier
, Qt::AltModifier
, Qt::MetaModifier
or a combination of these (using the bitwise '|' operator).
Default value is Qt::NoModifier. Defined using setPlayPathKeyboardModifiers().
See also addKeyFrameKeyboardModifiers().
Qt::KeyboardModifiers
is actually a Qt::ButtonState
. The Modifier
postfix is replaced by Button
in the enums' names (Qt::ControlButton
, Qt::AltButton
, ...). Definition at line 2723 of file qglviewer.cpp.
Qt::KeyboardModifiers QGLViewer::playPathStateKey | ( | ) | const |
Definition at line 2735 of file qglviewer.cpp.
void QGLViewer::pointSelected | ( | const QMouseEvent * | e | ) | [signal] |
Signal emitted by select().
Connect this signal to your selection method or overload select(), or more probably simply drawWithNames().
void QGLViewer::postDraw | ( | ) | [protected, virtual] |
Called after draw() to draw viewer visual hints.
Default implementation displays axis, grid, FPS... when the respective flags are sets.
See the multiSelect and thumbnail examples for an overloading illustration.
The GLContext (color, LIGHTING, BLEND...) is not modified by this method, so that in draw(), the user can rely on the OpenGL context he defined. Respect this convention (by pushing/popping the different attributes) if you overload this method.
Reimplemented in octomap::ViewerWidget.
Definition at line 421 of file qglviewer.cpp.
virtual void QGLViewer::postSelection | ( | const QPoint & | point | ) | [inline, protected, virtual] |
This method is called at the end of the select() procedure. It should finalize the selection process and update the data structure/interface/computation/display... according to the newly selected entity.
The default implementation is empty. Overload this method if needed, and use selectedName() to retrieve the selected entity name (returns -1 if no object was selected). See the select example for an illustration.
Reimplemented in octomap::ViewerWidget.
Definition at line 915 of file qglviewer.h.
void QGLViewer::preDraw | ( | ) | [protected, virtual] |
Sets OpenGL state before draw().
Default behavior clears screen and sets the projection and modelView matrices:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); camera()->loadProjectionMatrix(); camera()->loadModelViewMatrix();
Emits the drawNeeded() signal once this is done (see the callback example).
Definition at line 399 of file qglviewer.cpp.
void QGLViewer::preDrawStereo | ( | bool | leftBuffer = true | ) | [protected, virtual] |
Called before draw() (instead of preDraw()) when viewer displaysInStereo().
Same as preDraw() except that the glDrawBuffer() is set to GL_BACK_LEFT
or GL_BACK_RIGHT
depending on leftBuffer
, and it uses qglviewer::Camera::loadProjectionMatrixStereo() and qglviewer::Camera::loadModelViewMatrixStereo() instead.
Definition at line 492 of file qglviewer.cpp.
static int QGLViewer::QGLViewerIndex | ( | const QGLViewer *const | viewer | ) | [inline, static] |
Returns the index of the QGLViewer viewer
in the QGLViewerPool(). This index in unique and can be used to identify the different created QGLViewers (see stateFileName() for an application example).
When a QGLViewer is deleted, the QGLViewers' indexes are preserved and NULL is set for that index. When a QGLViewer is created, it is placed in the first available position in that list. Returns -1 if the QGLViewer could not be found (which should not be possible).
Definition at line 1103 of file qglviewer.h.
static const QPtrList<QGLViewer>& QGLViewer::QGLViewerPool | ( | ) | [inline, static] |
Returns a QList
that contains pointers to all the created QGLViewers. Note that this list may contain NULL
pointers if the associated viewer has been deleted.
Can be useful to apply a method or to connect a signal to all the viewers:
foreach (QGLViewer* viewer, QGLViewer::QGLViewerPool()) connect(myObject, SIGNAL(IHaveChangedSignal()), viewer, SLOT(updateGL()));
QPtrList
instead. Use a QPtrListIterator
to iterate on the list instead. Definition at line 1089 of file qglviewer.h.
void QGLViewer::resetVisualHints | ( | ) | [virtual, slot] |
Reset the mask used by drawVisualHints(). Called by setVisualHintsMask() after 2 seconds to reset the display.
Definition at line 3400 of file qglviewer.cpp.
void QGLViewer::resizeGL | ( | int | width, |
int | height | ||
) | [protected, virtual] |
Callback method used when the widget size is modified.
If you overload this method, first call the inherited method. Also called when the widget is created, before its first display.
Definition at line 2567 of file qglviewer.cpp.
bool QGLViewer::restoreFromFile | ( | const QString & | fileName = QString::null | ) | [slot] |
This function is deprecated since version 1.3.9-5. Use restoreStateFromFile() and setStateFileName() instead.
Definition at line 3979 of file qglviewer.cpp.
bool QGLViewer::restoreStateFromFile | ( | ) | [virtual, slot] |
Restores the QGLViewer state from the stateFileName() file using initFromDOMElement().
States are saved using saveStateToFile(), which is automatically called on viewer exit.
Returns true
when the restoration is successful. Possible problems are an non existing or unreadable stateFileName() file, an empty stateFileName() or an XML syntax error.
A manipulatedFrame() should be defined before calling this method, so that its state can be restored. Initialization code put after this function will override saved values:
void Viewer::init() { // Default initialization goes here (including the declaration of a possible manipulatedFrame). if (!restoreStateFromFile()) showEntireScene(); // Previous state cannot be restored: fit camera to scene. // Specific initialization that overrides file savings goes here. }
Definition at line 3706 of file qglviewer.cpp.
bool QGLViewer::saveImageSnapshot | ( | const QString & | fileName | ) | [private] |
Definition at line 386 of file saveSnapshot.cpp.
void QGLViewer::saveSnapshot | ( | bool | automatic = true , |
bool | overwrite = false |
||
) | [slot] |
Saves a snapshot of the current image displayed by the widget.
Options are set using snapshotFormat(), snapshotFileName() and snapshotQuality(). For non vectorial image formats, the image size is equal to the current viewer's dimensions (see width() and height()). See snapshotFormat() for details on supported formats.
If automatic
is false
(or if snapshotFileName() is empty), a file dialog is opened to ask for the file name.
When automatic
is true
, the file name is set to NAME-NUMBER
, where NAME
is snapshotFileName() and NUMBER
is snapshotCounter(). The snapshotCounter() is automatically incremented after each snapshot saving. This is useful to create videos from your application:
void Viewer::init() { resize(720, 576); // PAL DV format (use 720x480 for NTSC DV) connect(this, SIGNAL(drawFinished(bool)), SLOT(saveSnapshot(bool))); }
Then call draw() in a loop (for instance using animate() and/or a camera() KeyFrameInterpolator replay) to create your image sequence.
If you want to create a Quicktime VR panoramic sequence, simply use code like this:
void Viewer::createQuicktime() { const int nbImages = 36; for (int i=0; i<nbImages; ++i) { camera()->setOrientation(2.0*M_PI/nbImages, 0.0); // Theta-Phi orientation showEntireScene(); updateGL(); // calls draw(), which emits drawFinished(), which calls saveSnapshot() } }
If snapshotCounter() is negative, no number is appended to snapshotFileName() and the snapshotCounter() is not incremented. This is useful to force the creation of a file, overwriting the previous one.
When overwrite
is set to false
(default), a window asks for confirmation if the file already exists. In automatic
mode, the snapshotCounter() is incremented (if positive) until a non-existing file name is found instead. Otherwise the file is overwritten without confirmation.
The VRender library was written by Cyril Soler (Cyril dot Soler at imag dot fr). If the generated PS or EPS file is not properly displayed, remove the anti-aliasing option in your postscript viewer.
Definition at line 641 of file saveSnapshot.cpp.
void QGLViewer::saveSnapshot | ( | const QString & | fileName, |
bool | overwrite = false |
||
) | [slot] |
Same as saveSnapshot(), except that it uses fileName
instead of snapshotFileName().
If fileName
is empty, opens a file dialog to select the name.
Snapshot settings are set from snapshotFormat() and snapshotQuality().
Asks for confirmation when fileName
already exists and overwrite
is false
(default).
fileName
is a char* (as is "myFile.jpg"), it may be casted into a bool
, and the other saveSnapshot() method may be used instead. Pass QString("myFile.jpg") as a parameter to prevent this. Definition at line 758 of file saveSnapshot.cpp.
void QGLViewer::saveStateToFile | ( | ) | [virtual, slot] |
Saves in stateFileName() an XML representation of the QGLViewer state, obtained from domElement().
Use restoreStateFromFile() to restore this viewer state.
This method is automatically called when a viewer is closed (using Escape or using the window's upper right x
close button). setStateFileName() to QString::null
to prevent this.
Definition at line 3629 of file qglviewer.cpp.
void QGLViewer::saveStateToFileForAllViewers | ( | ) | [static, private] |
saveStateToFile() is called on all the QGLViewers using the QGLViewerPool().
Definition at line 3562 of file qglviewer.cpp.
void QGLViewer::saveToFile | ( | const QString & | fileName = QString::null | ) | [slot] |
This method is deprecated since version 1.3.9-5. Use saveStateToFile() and setStateFileName() instead.
Definition at line 3968 of file qglviewer.cpp.
QFont QGLViewer::scaledFont | ( | const QFont & | font | ) | const [inline] |
Return a possibly scaled version of font
, used for snapshot rendering.
From a user's point of view, this method simply returns font
and can be used transparently.
However when internally rendering a screen snapshot using saveSnapshot(), it returns a scaled version of the font, so that the size of the rendered text on the snapshot is identical to what is displayed on screen, even if the snapshot uses image tiling to create an image of dimensions different from those of the current window. This scaled version will only be used when saveSnapshot() calls your draw() method to generate the snapshot.
All your calls to QGLWidget::renderText() function hence should use this method.
renderText(x, y, z, "My Text", scaledFont(QFont()));
will guarantee that this text will be properly displayed on arbitrary sized snapshots.
Note that this method is not needed if you use drawText() which already calls it internally.
Definition at line 570 of file qglviewer.h.
qglviewer::Vec QGLViewer::sceneCenter | ( | ) | const [inline] |
Returns the scene center, defined in world coordinates.
See sceneRadius() for details.
Default value is (0,0,0). Simply a wrapper for camera()->sceneCenter(). Set using setSceneCenter().
Do not mismatch this value (that only depends on the scene) with the qglviewer::Camera::revolveAroundPoint().
Definition at line 230 of file qglviewer.h.
float QGLViewer::sceneRadius | ( | ) | const [inline] |
Returns the scene radius.
The entire displayed scene should be included in a sphere of radius sceneRadius(), centered on sceneCenter().
This approximate value is used by the camera() to set qglviewer::Camera::zNear() and qglviewer::Camera::zFar(). It is also used to showEntireScene() or to scale the world axis display..
Default value is 1.0. This method is equivalent to camera()->sceneRadius(). See setSceneRadius().
Definition at line 221 of file qglviewer.h.
void QGLViewer::select | ( | const QMouseEvent * | event | ) | [virtual, slot] |
Simple wrapper method: calls select
(event->pos()).
Emits pointSelected(e)
which is useful only if you rely on the Qt signal-slot mechanism and you did not overload QGLViewer. If you choose to derive your own viewer class, simply overload select() (or probably simply drawWithNames(), see the select example) to implement your selection mechanism.
This method is called when you use the QGLViewer::SELECT mouse binding(s) (default is Shift + left button). Use setMouseBinding() to change this.
Definition at line 1171 of file qglviewer.cpp.
void QGLViewer::select | ( | const QPoint & | point | ) | [virtual, slot] |
This method performs a selection in the scene from pixel coordinates.
It is called when the user clicks on the QGLViewer::SELECT QGLViewer::ClickAction binded button(s) (default is Shift + LeftButton).
This template method successively calls four other methods:
beginSelection(point); drawWithNames(); endSelection(point); postSelection(point);
The default implementation of these methods is as follows (see the methods' documentation for more details):
GL_SELECT
mode with the appropriate picking matrices. A rectangular frustum (of size defined by selectRegionWidth() and selectRegionHeight()) centered on point
is created.glPushName()
/ glPopName()
to tag the object with an integer id.GL_RENDER
mode and analyzes the selectBuffer() to set in selectedName() the id of the object that was drawn in the region. If several object are in the region, the closest one in the depth buffer is chosen. If no object has been drawn under cursor, selectedName() is set to -1.See the glSelectBuffer()
man page for details on this GL_SELECT
mechanism.
This default implementation is quite limited: only the closer object is selected, and only one level of names can be pushed. However, this reveals sufficient in many cases and you usually only have to overload drawWithNames() to implement a simple object selection process. See the select example for an illustration.
If you need a more complex selection process (such as a point, edge or triangle selection, which is easier with a 2 or 3 levels selectBuffer() heap, and which requires a finer depth sorting to privilege point over edge and edges over triangles), overload the endSelection() method. Use setSelectRegionWidth(), setSelectRegionHeight() and setSelectBufferSize() to tune the select buffer configuration. See the multiSelect example for an illustration.
point
is the center pixel (origin in the upper left corner) of the selection region. Use qglviewer::Camera::convertClickToLine() to transform these coordinates in a 3D ray if you want to perform an analytical intersection.
GL_SELECT
mode seems to report wrong results when used in conjunction with backface culling. If you encounter problems try to glDisable(GL_CULL_FACE)
. Definition at line 1228 of file qglviewer.cpp.
GLuint* QGLViewer::selectBuffer | ( | ) | [inline] |
Returns a pointer to an array of GLuint
.
This buffer is used by the GL_SELECT
mode in select() to perform object selection. The buffer size can be modified using setSelectBufferSize(). If you overload endSelection(), you will analyze the content of this buffer. See the glSelectBuffer()
man page for details.
Definition at line 865 of file qglviewer.h.
int QGLViewer::selectBufferSize | ( | ) | const [inline] |
Returns the selectBuffer() size.
See the select() documentation for details. Use setSelectBufferSize() to change this value.
Default value is 4000 (i.e. 1000 objects in selection region, since each object pushes 4 values). This size should be over estimated to prevent a buffer overflow when many objects are drawn under the mouse cursor.
Definition at line 841 of file qglviewer.h.
int QGLViewer::selectedName | ( | ) | const [inline] |
Returns the name (an integer value) of the entity that was last selected by select(). This value is set by endSelection(). See the select() documentation for details.
As a convention, this method returns -1 if the selectBuffer() was empty, meaning that no object was selected.
Return value is -1 before the first call to select(). This value is modified using setSelectedName().
Definition at line 833 of file qglviewer.h.
int QGLViewer::selectRegionHeight | ( | ) | const [inline] |
See the selectRegionWidth() documentation. Default value is 3 pixels.
Definition at line 858 of file qglviewer.h.
int QGLViewer::selectRegionWidth | ( | ) | const [inline] |
Returns the width (in pixels) of a selection frustum, centered on the mouse cursor, that is used to select objects.
The height of the selection frustum is defined by selectRegionHeight().
The objects that will be drawn in this region by drawWithNames() will be recorded in the selectBuffer(). endSelection() then analyzes this buffer and setSelectedName() to the name of the closest object. See the gluPickMatrix() documentation for details.
The default value is 3, which is adapted to standard applications. A smaller value results in a more precise selection but the user has to be careful for small feature selection.
See the multiSelect example for an illustration.
Definition at line 856 of file qglviewer.h.
void QGLViewer::setAddKeyFrameKeyboardModifiers | ( | Qt::KeyboardModifiers | modifiers | ) | [virtual, slot] |
Sets the addKeyFrameKeyboardModifiers() value.
Definition at line 2688 of file qglviewer.cpp.
void QGLViewer::setAddKeyFrameStateKey | ( | int | buttonState | ) | [virtual, slot] |
Definition at line 2741 of file qglviewer.cpp.
void QGLViewer::setAnimationPeriod | ( | int | period | ) | [inline, slot] |
Sets the animationPeriod(), in milliseconds.
Definition at line 638 of file qglviewer.h.
void QGLViewer::setAxisIsDrawn | ( | bool | draw = true | ) | [inline, slot] |
Sets the state of axisIsDrawn(). Emits the axisIsDrawnChanged() signal. See also toggleAxisIsDrawn().
Definition at line 143 of file qglviewer.h.
void QGLViewer::setBackgroundColor | ( | const QColor & | color | ) | [inline, slot] |
Sets the backgroundColor() of the viewer and calls qglClearColor()
. See also setForegroundColor().
Definition at line 201 of file qglviewer.h.
void QGLViewer::setCamera | ( | qglviewer::Camera *const | camera | ) | [slot] |
Associates a new qglviewer::Camera to the viewer.
You should only use this method when you derive a new class from qglviewer::Camera and want to use one of its instances instead of the original class.
It you simply want to save and restore Camera positions, use qglviewer::Camera::addKeyFrameToPath() and qglviewer::Camera::playPath() instead.
This method silently ignores NULL
camera
pointers. The calling method is responsible for deleting the previous camera pointer in order to prevent memory leaks if needed.
The sceneRadius() and sceneCenter() of camera
are set to the current QGLViewer values.
All the camera
qglviewer::Camera::keyFrameInterpolator() qglviewer::KeyFrameInterpolator::interpolated() signals are connected to the viewer updateGL() slot. The connections with the previous viewer's camera are removed.
Definition at line 707 of file qglviewer.cpp.
void QGLViewer::setCameraIsEdited | ( | bool | edit = true | ) | [slot] |
Starts (edit
= true
, default) or stops (edit=
the edition of the camera().false
)
Current implementation is limited to paths display. Get current state using cameraIsEdited().
edit
is true
, so that the Camera paths (see qglviewer::Camera::keyFrameInterpolator()) are not clipped. It restores the previous value when edit
is false
. Definition at line 531 of file qglviewer.cpp.
void QGLViewer::setDefaultMouseBindings | ( | ) | [private] |
Definition at line 617 of file qglviewer.cpp.
void QGLViewer::setDefaultShortcuts | ( | ) | [private] |
Definition at line 550 of file qglviewer.cpp.
void QGLViewer::setForegroundColor | ( | const QColor & | color | ) | [inline, slot] |
Sets the foregroundColor() of the viewer, used to draw visual hints. See also setBackgroundColor().
Definition at line 203 of file qglviewer.h.
void QGLViewer::setFPSIsDisplayed | ( | bool | display = true | ) | [inline, slot] |
Sets the state of FPSIsDisplayed(). Emits the FPSIsDisplayedChanged() signal. See also toggleFPSIsDisplayed().
Definition at line 147 of file qglviewer.h.
void QGLViewer::setFullScreen | ( | bool | fullScreen = true | ) | [slot] |
Sets the isFullScreen() state.
If the QGLViewer is embedded in an other QWidget (see QWidget::topLevelWidget()), this widget is displayed in full screen instead.
Definition at line 1787 of file qglviewer.cpp.
void QGLViewer::setGridIsDrawn | ( | bool | draw = true | ) | [inline, slot] |
Sets the state of gridIsDrawn(). Emits the gridIsDrawnChanged() signal. See also toggleGridIsDrawn().
Definition at line 145 of file qglviewer.h.
void QGLViewer::setHandlerKeyboardModifiers | ( | MouseHandler | handler, |
Qt::KeyboardModifiers | modifiers | ||
) | [slot] |
Associates keyboard modifiers to MouseHandler handler
.
The modifiers
parameter is Qt::AltModifier
, Qt::ShiftModifier
, Qt::ControlModifier
, Qt::MetaModifier
or a combination of these using the '|' bitwise operator. Some shorter names are also available: Qt::ALT
, Qt::CTRL
, Qt::SHIFT
or QT::META
.
All the handler's
associated bindings will then need the specified modifiers
key(s) to be activated.
With this code,
setHandlerKeyboardModifiers(QGLViewer::CAMERA, Qt::AltModifier); setHandlerKeyboardModifiers(QGLViewer::FRAME, Qt::NoModifier);
you will have to press the Alt
key while pressing mouse buttons in order to move the camera(), while no key will be needed to move the manipulatedFrame().
This method has a very basic implementation: every action binded to handler
has its keyboard modifier replaced by modifiers
. If handler
had some actions binded to different modifiers, these settings will be lost. You should hence consider using setMouseBinding() for finer tuning.
The default binding associates Qt::ControlModifier
to all the QGLViewer::FRAME actions and Qt::NoModifier
to all QGLViewer::CAMERA actions. See mouse page for details.
// Associate FRAME with Alt (temporary value) setHandlerKeyboardModifiers(QGLViewer::FRAME, Qt::AltModifier); // Control is associated with CAMERA setHandlerKeyboardModifiers(QGLViewer::CAMERA, Qt::ControlModifier); // And finally, FRAME can be associated with NoModifier setHandlerKeyboardModifiers(QGLViewer::FRAME, Qt::NoModifier);
modifiers
is actually a Qt::ButtonState
. The Modifier
sufix is replaced by Button
in the enums' names (Qt::ControlButton
, Qt::AltButton
, Qt::ShiftButton
and Qt::MetaButton
). Definition at line 2822 of file qglviewer.cpp.
void QGLViewer::setHandlerStateKey | ( | MouseHandler | handler, |
int | buttonState | ||
) | [slot] |
Definition at line 2878 of file qglviewer.cpp.
void QGLViewer::setKeyboardAccelerator | ( | KeyboardAction | action, |
int | key | ||
) | [slot] |
Definition at line 2624 of file qglviewer.cpp.
void QGLViewer::setKeyDescription | ( | int | key, |
QString | description | ||
) | [slot] |
Defines a custom keyboard shortcut description, that will be displayed in the help() window Keyboard
tab.
The key
definition is given as an int
using Qt enumerated values. Set an empty description
to remove a shortcut description:
setKeyDescription(Qt::Key_W, "Toggles wireframe display"); setKeyDescription(Qt::CTRL+Qt::Key_L, "Loads a new scene"); // Removes a description setKeyDescription(Qt::CTRL+Qt::Key_C, "");
See the keyboardAndMouse example for illustration and the keyboard page for details.
Definition at line 2122 of file qglviewer.cpp.
void QGLViewer::setKeyFrameKey | ( | int | index, |
int | key | ||
) | [virtual, slot] |
Definition at line 2765 of file qglviewer.cpp.
void QGLViewer::setManipulatedFrame | ( | qglviewer::ManipulatedFrame * | frame | ) | [slot] |
Sets the viewer's manipulatedFrame().
Several objects can be manipulated simultaneously, as is done the multiSelect example.
Defining the own viewer's camera()->frame() as the manipulatedFrame() is possible and will result in a classical camera manipulation. See the luxo example for an illustration.
Note that a qglviewer::ManipulatedCameraFrame can be set as the manipulatedFrame(): it is possible to manipulate the camera of a first viewer in a second viewer.
Definition at line 3269 of file qglviewer.cpp.
void QGLViewer::setMouseBinding | ( | int | state, |
MouseHandler | handler, | ||
MouseAction | action, | ||
bool | withConstraint = true |
||
) | [slot] |
Associates a MouseAction to any mouse button and keyboard modifiers state
combination. The receiver of the mouse events is a MouseHandler (QGLViewer::CAMERA or QGLViewer::FRAME).
The parameters should read: when the state
mouse button and keyboard modifiers are pressed, activate action
on handler
. If withConstraint
is true
(default), the qglviewer::Frame::constraint() associated with the Frame will be enforced during motion.
Use the '|' bitwise operator or '+' to combine keys and buttons:
// Left and right buttons together make a camera zoom: emulates a mouse third button if needed. setMouseBinding(Qt::LeftButton + Qt::RightButton, CAMERA, ZOOM); // Alt + Shift + Left button rotates the manipulatedFrame(). setMouseBinding(Qt::ALT + Qt::SHIFT + Qt::LeftButton, FRAME, ROTATE);
The list of all possible MouseAction, some binding examples and default bindings are provided in the mouse page.
See the keyboardAndMouse example for an illustration.
If no mouse button is specified in state
, the binding is ignored. If an action was previously associated with this state
, it is silently overwritten (call mouseAction() before to know if this state
is already binded).
To remove a specific mouse binding, use code like:
setMouseBinding(myButtonAndModifiersCombo, myHandler, NO_MOUSE_ACTION);
See also setMouseBinding(int, ClickAction, bool, int) and setWheelBinding().
Definition at line 2922 of file qglviewer.cpp.
void QGLViewer::setMouseBinding | ( | int | state, |
ClickAction | action, | ||
bool | doubleClick = false , |
||
Qt::MouseButtons | buttonsBefore = Qt::NoButton |
||
) |
Associates a ClickAction to any mouse buttons and keyboard modifiers combination.
This method has been deprecated in version 3. Use setMouseBinding(Qt::KeyboardModifiers, Qt::MouseButtons, ClickAction, bool, Qt::MouseButtons) instead. Replace the int state
by a combination of Qt::KeyboardModifiers and Qt::MouseButtons.
For instance
The parameters should read: when the state
mouse button(s) is (are) pressed (possibly with Alt, Control or Shift modifiers or any combination of these), and possibly with a doubleClick
, perform action
.
If buttonsBefore
is specified (valid only when doubleClick
is true
), then this mouse button(s) has to be pressed before the double click occurs in order to perform action
.
The list of all possible ClickAction, some binding examples and default bindings are listed in the mouse page. See also the setMouseBinding() documentation.
See the keyboardAndMouse example for an illustration.
The binding is ignored if no mouse button is specified in state
.
buttonsBefore
parameter is actually a Qt::ButtonState. Definition at line 2984 of file qglviewer.cpp.
void QGLViewer::setMouseBindingDescription | ( | int | state, |
QString | description, | ||
bool | doubleClick = false , |
||
Qt::MouseButtons | buttonsBefore = Qt::NoButton |
||
) | [slot] |
Provides a custom mouse binding description, displayed in the help() window Mouse tab.
state
is a combination of Qt::KeyboardModifiers (Qt::ControlModifier
, Qt::AltModifier
, Qt::ShiftModifier
, Qt::MetaModifier
) and Qt::MouseButtons (Qt::LeftButton
, Qt::MidButton
and Qt::RightButton
), combined using the "|"
bitwise operator or simply "+". One can also use the shorter Qt::ALT
, Qt::CTRL
, Qt::SHIFT
or QT::META
.
doubleClick
indicates whether or not the user has to double click this button to perform the described action.
Set an empty description
to remove a mouse binding description.
// Left and Right button together simulate a middle button setMouseBindingDescription(Qt::LeftButton + Qt::RightButton, "Emulates a middle button"); // A left button double click toggles full screen setMouseBindingDescription(Qt::LeftButton, "Toggles full screen mode", true); // Removes the description of Ctrl+Right button setMouseBindingDescription(Qt::ControlModifier + Qt::RightButton, "");
Overload mouseMoveEvent() and friends to implement your custom mouse behavior (see the mouseMoveEvent() documentation for an example). See the keyboardAndMouse example for an illustration.
Use setMouseBinding() and setWheelBinding() to change the standard mouse action bindings.
Modifier
postfix should be replaced by Button
in the examples above (Qt::ControlButton
, Qt::AltButton
, ...).buttonsBefore
parameter type is actually a Qt::ButtonState. Definition at line 1968 of file qglviewer.cpp.
void QGLViewer::setMouseGrabber | ( | qglviewer::MouseGrabber * | mouseGrabber | ) | [slot] |
Directly defines the mouseGrabber().
You should not call this method directly as it bypasses the qglviewer::MouseGrabber::checkIfGrabsMouse() test performed by mouseMoveEvent().
If the MouseGrabber is disabled (see mouseGrabberIsEnabled()), this method silently does nothing.
Definition at line 1816 of file qglviewer.cpp.
void QGLViewer::setMouseGrabberIsEnabled | ( | const qglviewer::MouseGrabber *const | mouseGrabber, |
bool | enabled = true |
||
) |
Sets the mouseGrabberIsEnabled() state.
Definition at line 1830 of file qglviewer.cpp.
void QGLViewer::setMouseStateKey | ( | MouseHandler | handler, |
int | buttonState | ||
) | [slot] |
Definition at line 2884 of file qglviewer.cpp.
void QGLViewer::setPathKey | ( | int | key, |
int | index = 0 |
||
) | [virtual, slot] |
Sets the pathKey() associated with the camera Key Frame path index
.
Several keys can be binded to the same index
. Use a negated key
value to delete the binding (the index
value is then ignored):
// Press 'space' to play/pause/add/delete camera path of index 0. setPathKey(Qt::Key_Space, 0); // Remove this binding setPathKey(-Qt::Key_Space);
Definition at line 2673 of file qglviewer.cpp.
void QGLViewer::setPlayKeyFramePathStateKey | ( | int | buttonState | ) | [virtual, slot] |
Definition at line 2771 of file qglviewer.cpp.
void QGLViewer::setPlayPathKeyboardModifiers | ( | Qt::KeyboardModifiers | modifiers | ) | [virtual, slot] |
Sets the playPathKeyboardModifiers() value.
Definition at line 2682 of file qglviewer.cpp.
void QGLViewer::setPlayPathStateKey | ( | int | buttonState | ) | [virtual, slot] |
Definition at line 2747 of file qglviewer.cpp.
void QGLViewer::setSceneBoundingBox | ( | const qglviewer::Vec & | min, |
const qglviewer::Vec & | max | ||
) | [inline, slot] |
Convenient way to call setSceneCenter() and setSceneRadius() from a (world axis aligned) bounding box of the scene.
This is equivalent to:
setSceneCenter((min+max) / 2.0); setSceneRadius((max-min).norm() / 2.0);
Reimplemented in octomap::ViewerWidget.
Definition at line 252 of file qglviewer.h.
virtual void QGLViewer::setSceneCenter | ( | const qglviewer::Vec & | center | ) | [inline, virtual, slot] |
Sets the sceneCenter(), defined in world coordinates.
Definition at line 243 of file qglviewer.h.
virtual void QGLViewer::setSceneRadius | ( | float | radius | ) | [inline, virtual, slot] |
Sets the sceneRadius().
The camera() qglviewer::Camera::flySpeed() is set to 1% of this value by this method. Simple wrapper around camera()->setSceneRadius().
Definition at line 237 of file qglviewer.h.
void QGLViewer::setSelectBufferSize | ( | int | size | ) | [slot] |
Sets the selectBufferSize().
The previous selectBuffer() is deleted and a new one is created.
Definition at line 1339 of file qglviewer.cpp.
void QGLViewer::setSelectedName | ( | int | id | ) | [inline, slot] |
Set the selectedName() value.
Used in endSelection() during a selection. You should only call this method if you overload the endSelection() method.
Definition at line 880 of file qglviewer.h.
void QGLViewer::setSelectRegionHeight | ( | int | height | ) | [inline, slot] |
Sets the selectRegionHeight().
Definition at line 875 of file qglviewer.h.
void QGLViewer::setSelectRegionWidth | ( | int | width | ) | [inline, slot] |
Sets the selectRegionWidth().
Definition at line 873 of file qglviewer.h.
void QGLViewer::setShortcut | ( | KeyboardAction | action, |
unsigned int | key | ||
) | [slot] |
Defines the shortcut() that triggers a given QGLViewer::KeyboardAction.
Here are some examples:
// Press 'Q' to exit application setShortcut(EXIT_VIEWER, Qt::Key_Q); // Alt+M toggles camera mode setShortcut(CAMERA_MODE, Qt::ALT + Qt::Key_M); // The DISPLAY_FPS action is disabled setShortcut(DISPLAY_FPS, 0);
Only one shortcut can be assigned to a given QGLViewer::KeyboardAction (new bindings replace previous ones). If several KeyboardAction are binded to the same shortcut, only one of them is active.
Definition at line 2595 of file qglviewer.cpp.
void QGLViewer::setSnapshotCounter | ( | int | counter | ) | [inline, slot] |
Sets the snapshotCounter().
Definition at line 534 of file qglviewer.h.
void QGLViewer::setSnapshotFileName | ( | const QString & | name | ) | [slot] |
Sets snapshotFileName().
Definition at line 74 of file saveSnapshot.cpp.
void QGLViewer::setSnapshotFormat | ( | const QString & | format | ) | [inline, slot] |
Sets the snapshotFormat().
Definition at line 532 of file qglviewer.h.
void QGLViewer::setSnapshotQuality | ( | int | quality | ) | [inline, slot] |
Sets the snapshotQuality().
Definition at line 536 of file qglviewer.h.
void QGLViewer::setStateFileName | ( | const QString & | name | ) | [inline, slot] |
Defines the stateFileName() used by saveStateToFile() and restoreStateFromFile().
The file name can have an optional prefix directory (no prefix meaning current directory). If the directory does not exist, it will be created by saveStateToFile().
// Name depends on the displayed 3D model. Saved in current directory. setStateFileName(3DModelName() + ".xml"); // Files are stored in a dedicated directory under user's home directory. setStateFileName(QDir::homeDirPath + "/.config/myApp.xml");
Definition at line 1060 of file qglviewer.h.
void QGLViewer::setStereoDisplay | ( | bool | stereo = true | ) | [slot] |
Sets the state of displaysInStereo(). See also toggleStereoDisplay().
First checks that the display is able to handle stereovision using QGLWidget::format(). Opens a warning message box in case of failure. Emits the stereoChanged() signal otherwise.
Definition at line 1758 of file qglviewer.cpp.
void QGLViewer::setTextIsEnabled | ( | bool | enable = true | ) | [inline, slot] |
Sets the state of textIsEnabled(). Emits the textIsEnabledChanged() signal. See also toggleTextIsEnabled().
Definition at line 149 of file qglviewer.h.
void QGLViewer::setVisualHintsMask | ( | int | mask, |
int | delay = 2000 |
||
) | [virtual] |
Defines the mask that will be used to drawVisualHints(). The only available mask is currently 1, corresponding to the display of the qglviewer::Camera::revolveAroundPoint(). resetVisualHints() is automatically called after delay
milliseconds (default is 2 seconds).
Definition at line 3393 of file qglviewer.cpp.
void QGLViewer::setWheelBinding | ( | Qt::KeyboardModifiers | modifiers, |
MouseHandler | handler, | ||
MouseAction | action, | ||
bool | withConstraint = true |
||
) | [slot] |
Associates a MouseAction and a MouseHandler to a mouse wheel event.
This method is very similar to setMouseBinding(), but specific to the wheel.
In the current implementation only QGLViewer::ZOOM can be associated with QGLViewer::FRAME, while QGLViewer::CAMERA can receive QGLViewer::ZOOM and QGLViewer::MOVE_FORWARD.
The difference between QGLViewer::ZOOM and QGLViewer::MOVE_FORWARD is that QGLViewer::ZOOM speed depends on the distance to the object, while QGLViewer::MOVE_FORWARD moves at a constant speed defined by qglviewer::Camera::flySpeed().
Definition at line 3020 of file qglviewer.cpp.
unsigned int QGLViewer::shortcut | ( | KeyboardAction | action | ) | const |
Returns the keyboard shortcut associated to a given QGLViewer::KeyboardAction.
Result is an unsigned
int
defined using Qt enumerated values, as in Qt::Key_Q
or Qt::CTRL
+ Qt::Key_X. Use Qt::MODIFIER_MASK to separate the key from the state keys. Returns 0
if the KeyboardAction is disabled (not binded). Set using setShortcut().
If you want to define keyboard shortcuts for custom actions (say, open a scene file), overload keyPressEvent() and then setKeyDescription().
These shortcuts and their descriptions are automatically included in the help() window Keyboard
tab.
See the keyboard page for details and default values and the keyboardAndMouse example for a practical illustration.
Definition at line 2615 of file qglviewer.cpp.
virtual QString QGLViewer::shortcutBindingsString | ( | ) | const [inline, virtual] |
This method is deprecated, use keyboardString() instead.
Definition at line 744 of file qglviewer.h.
void QGLViewer::showEntireScene | ( | ) | [inline, slot] |
Moves the camera so that the entire scene is visible.
Simple wrapper around qglviewer::Camera::showEntireScene().
Definition at line 257 of file qglviewer.h.
virtual QSize QGLViewer::sizeHint | ( | ) | const [inline, virtual] |
Returns the recommended size for the QGLViewer. Default value is 600x400 pixels.
Definition at line 366 of file qglviewer.h.
int QGLViewer::snapshotCounter | ( | ) | const [inline] |
Returns the value of the counter used to name snapshots in saveSnapshot() when automatic
is true
.
Set using setSnapshotCounter(). Default value is 0, and it is incremented after each automatic
snapshot. See saveSnapshot() for details.
Definition at line 511 of file qglviewer.h.
const QString& QGLViewer::snapshotFileName | ( | ) | const [inline] |
Returns the snapshot file name used by saveSnapshot().
This value is used in automatic
mode (see saveSnapshot()). A dialog is otherwise popped-up to set it.
You can also directly provide a file name using saveSnapshot(const QString&, bool).
If the file name is relative, the current working directory at the moment of the method call is used. Set using setSnapshotFileName().
Definition at line 473 of file qglviewer.h.
const QString & QGLViewer::snapshotFilename | ( | ) | const |
Definition at line 84 of file saveSnapshot.cpp.
const QString& QGLViewer::snapshotFormat | ( | ) | const [inline] |
Returns the snapshot file format used by saveSnapshot().
This value is used when saveSnapshot() is passed the automatic
flag. It is defined using a saveAs pop-up dialog otherwise.
The available formats are those handled by Qt. Classical values are "JPEG"
, "PNG"
, "PPM"
, "BMP"
. Use the following code to get the actual list:
QList<QByteArray> formatList = QImageReader::supportedImageFormats();
// or with Qt version 2 or 3:
QStringList formatList = QImage::outputFormatList();
If the library was compiled with the vectorial rendering option (default), three additional vectorial formats are available: "EPS"
, "PS"
and "XFIG"
. "SVG"
and "PDF"
formats should soon be available. The VRender library was created by Cyril Soler.
Note that the VRender library has some limitations: vertex shader effects are not reproduced and PASS_THROUGH
tokens are not handled so one can not change point and line size in the middle of a drawing.
Default value is the first supported among "JPEG, PNG, EPS, PS, PPM, BMP", in that order.
This value is set using setSnapshotFormat() or with openSnapshotFormatDialog().
Definition at line 505 of file qglviewer.h.
int QGLViewer::snapshotQuality | ( | ) | [inline] |
Defines the image quality of the snapshots produced with saveSnapshot().
Values must be in the range -1..100. Use 0 for lowest quality and 100 for highest quality (and larger files). -1 means use Qt default quality. Default value is 95.
Set using setSnapshotQuality(). See also the QImage::save() documentation.
Definition at line 520 of file qglviewer.h.
void QGLViewer::snapshotToClipboard | ( | ) | [slot] |
Takes a snapshot of the current display and pastes it to the clipboard.
This action is activated by the KeyboardAction::SNAPSHOT_TO_CLIPBOARD enum, binded to Ctrl+C
by default.
Definition at line 773 of file saveSnapshot.cpp.
void QGLViewer::startAnimation | ( | ) | [virtual, slot] |
Starts the animation loop. See animationIsStarted().
Definition at line 1109 of file qglviewer.cpp.
void QGLViewer::startScreenCoordinatesSystem | ( | bool | upward = false | ) | const [virtual] |
Modify the projection matrix so that drawing can be done directly with 2D screen coordinates.
Once called, the x
and y
coordinates passed to glVertex
are expressed in pixels screen coordinates. The origin (0,0) is in the upper left corner of the widget by default. This follows the Qt standards, so that you can directly use the pos()
provided by for instance QMouseEvent
. Set upward
to true
to place the origin in the lower left corner, thus following the OpenGL and mathematical standards. It is always possible to switch between the two representations using newY
= height() - y
.
You need to call stopScreenCoordinatesSystem() at the end of the drawing block to restore the previous camera matrix.
In practice, this method should be used in draw(). It sets an appropriate orthographic projection matrix and then sets glMatrixMode
to GL_MODELVIEW
.
See the screenCoordSystem, multiSelect and backgroundImage examples for an illustration.
You may want to disable GL_LIGHTING
, to enable GL_LINE_SMOOTH
or GL_BLEND
to draw when this method is used.
If you want to link 2D drawings to 3D objects, use qglviewer::Camera::projectedCoordinatesOf() to compute the 2D projection on screen of a 3D point (see the screenCoordSystem example). See also drawText().
In this mode, you should use z values that are in the [0.0, 1.0[ range (0.0 corresponding to the near clipping plane and 1.0 being just beyond the far clipping plane). This interval matches the values that can be read from the z-buffer. Note that if you use the convenient glVertex2i()
to provide coordinates, the implicit 0.0 z coordinate will make your drawings appear on top of the rest of the scene.
Definition at line 1062 of file qglviewer.cpp.
QString QGLViewer::stateFileName | ( | ) | const |
Returns the state file name. Default value is .qglviewer.xml.
This is the name of the XML file where saveStateToFile() saves the viewer state (camera state, widget geometry, display flags... see domElement()) on exit. Use restoreStateFromFile() to restore this state later (usually in your init() method).
Setting this value to QString::null
will disable the automatic state file saving that normally occurs on exit.
If more than one viewer are created by the application, this function will return a numbered file name (as in ".qglviewer1.xml", ".qglviewer2.xml"... using QGLViewer::QGLViewerIndex()) for extra viewers. Each viewer will then read back its own information in restoreStateFromFile(), provided that the viewers are created in the same order, which is usually the case.
Definition at line 3594 of file qglviewer.cpp.
void QGLViewer::stereoChanged | ( | bool | on | ) | [signal] |
This signal is emitted whenever displaysInStereo() changes value.
void QGLViewer::stopAnimation | ( | ) | [virtual, slot] |
Stops animation. See animationIsStarted().
Definition at line 1116 of file qglviewer.cpp.
void QGLViewer::stopScreenCoordinatesSystem | ( | ) | const [virtual] |
Stops the pixel coordinate drawing block started by startScreenCoordinatesSystem().
The GL_MODELVIEW
and GL_PROJECTION
matrices modified in startScreenCoordinatesSystem() are restored. glMatrixMode
is set to GL_MODELVIEW
.
Definition at line 1087 of file qglviewer.cpp.
bool QGLViewer::textIsEnabled | ( | ) | const [inline] |
Returns true
if text display (see drawText()) is enabled.
Set by setTextIsEnabled() or toggleTextIsEnabled(). This feature conveniently removes all the possibly displayed text, cleaning display. Default value is true
.
Definition at line 128 of file qglviewer.h.
void QGLViewer::textIsEnabledChanged | ( | bool | enabled | ) | [signal] |
This signal is emitted whenever textIsEnabled() changes value.
void QGLViewer::timerEvent | ( | QTimerEvent * | ) | [protected, virtual] |
Overloading of the QObject
method.
If animationIsStarted(), calls animate() and draw().
Definition at line 1099 of file qglviewer.cpp.
void QGLViewer::toggleAnimation | ( | ) | [inline, slot] |
Calls startAnimation() or stopAnimation(), depending on animationIsStarted().
Definition at line 654 of file qglviewer.h.
void QGLViewer::toggleAxisIsDrawn | ( | ) | [inline, slot] |
Toggles the state of axisIsDrawn(). See also setAxisIsDrawn().
Definition at line 153 of file qglviewer.h.
void QGLViewer::toggleCameraIsEdited | ( | ) | [inline, slot] |
Toggles the state of cameraIsEdited(). See also setCameraIsEdited().
Definition at line 161 of file qglviewer.h.
void QGLViewer::toggleCameraMode | ( | ) | [slot] |
Swaps between two predefined camera mouse bindings.
The first mode makes the camera observe the scene while revolving around the qglviewer::Camera::revolveAroundPoint(). The second mode is designed for walkthrough applications and simulates a flying camera.
Practically, the three mouse buttons are respectively binded to:
The current mode is determined by checking if a mouse button is binded to QGLViewer::ROTATE for the QGLViewer::CAMERA (using mouseButtonState()). The state key that was previously used to move the camera is preserved.
Definition at line 3207 of file qglviewer.cpp.
void QGLViewer::toggleFPSIsDisplayed | ( | ) | [inline, slot] |
Toggles the state of FPSIsDisplayed(). See also setFPSIsDisplayed().
Definition at line 157 of file qglviewer.h.
void QGLViewer::toggleFullScreen | ( | ) | [inline, slot] |
Toggles the state of isFullScreen(). See also setFullScreen().
Definition at line 372 of file qglviewer.h.
void QGLViewer::toggleGridIsDrawn | ( | ) | [inline, slot] |
Toggles the state of gridIsDrawn(). See also setGridIsDrawn().
Definition at line 155 of file qglviewer.h.
void QGLViewer::toggleStereoDisplay | ( | ) | [inline, slot] |
Toggles the state of displaysInStereo(). See setStereoDisplay().
Definition at line 374 of file qglviewer.h.
void QGLViewer::toggleTextIsEnabled | ( | ) | [inline, slot] |
Toggles the state of textIsEnabled(). See also setTextIsEnabled().
Definition at line 159 of file qglviewer.h.
void QGLViewer::viewerInitialized | ( | ) | [signal] |
QGLViewer::MouseAction QGLViewer::wheelAction | ( | Qt::KeyboardModifiers | modifiers | ) | const |
Same as mouseAction(), but for the wheel action.
modifiers
is actually a Qt::ButtonState
. The Modifier
postfix is replaced by Button
in the enums' names (Qt::ControlButton
, Qt::AltButton
, Qt::ShiftButton, Qt::MetaButton). Definition at line 3120 of file qglviewer.cpp.
int QGLViewer::wheelButtonState | ( | MouseHandler | handler, |
MouseAction | action, | ||
bool | withConstraint = true |
||
) | const |
Same as mouseButtonState(), but for the wheel.
handler/
action/
withConstraint
combination (mouseButtonState() would return Qt::NoButton instead). Definition at line 3143 of file qglviewer.cpp.
void QGLViewer::wheelEvent | ( | QWheelEvent * | e | ) | [protected, virtual] |
Overloading of the QWidget
method.
If defined, the wheel event is sent to the mouseGrabber(). It is otherwise sent according to wheel bindings (see setWheelBinding()).
Definition at line 1658 of file qglviewer.cpp.
int QGLViewer::wheelHandler | ( | Qt::KeyboardModifiers | modifiers | ) | const |
Same as mouseHandler() but for the wheel action. See also wheelAction().
Definition at line 3130 of file qglviewer.cpp.
void drawVectorial | ( | void * | param | ) | [friend] |
Definition at line 239 of file saveSnapshot.cpp.
Qt::KeyboardModifiers QGLViewer::addKeyFrameKeyboardModifiers_ [private] |
Definition at line 1198 of file qglviewer.h.
int QGLViewer::animationPeriod_ [private] |
Definition at line 1156 of file qglviewer.h.
bool QGLViewer::animationStarted_ [private] |
Definition at line 1155 of file qglviewer.h.
int QGLViewer::animationTimerId_ [private] |
Definition at line 1157 of file qglviewer.h.
bool QGLViewer::axisIsDrawn_ [private] |
Definition at line 1146 of file qglviewer.h.
QColor QGLViewer::backgroundColor_ [private] |
Definition at line 1143 of file qglviewer.h.
int QGLViewer::bufferTextureHeight_ [private] |
Definition at line 1203 of file qglviewer.h.
GLuint QGLViewer::bufferTextureId_ [private] |
Definition at line 1201 of file qglviewer.h.
float QGLViewer::bufferTextureMaxU_ [private] |
Definition at line 1202 of file qglviewer.h.
float QGLViewer::bufferTextureMaxV_ [private] |
Definition at line 1202 of file qglviewer.h.
int QGLViewer::bufferTextureWidth_ [private] |
Definition at line 1203 of file qglviewer.h.
qglviewer::Camera* QGLViewer::camera_ [private] |
Definition at line 1136 of file qglviewer.h.
bool QGLViewer::cameraIsEdited_ [private] |
Definition at line 1137 of file qglviewer.h.
QMap<ClickActionPrivate, ClickAction> QGLViewer::clickBinding_ [private] |
Definition at line 1246 of file qglviewer.h.
QMap<size_t, bool> QGLViewer::disabledMouseGrabbers_ [private] |
Definition at line 1178 of file qglviewer.h.
bool QGLViewer::displayMessage_ [private] |
Definition at line 1167 of file qglviewer.h.
float QGLViewer::f_p_s_ [private] |
Definition at line 1163 of file qglviewer.h.
QColor QGLViewer::foregroundColor_ [private] |
Definition at line 1143 of file qglviewer.h.
unsigned int QGLViewer::fpsCounter_ [private] |
Definition at line 1161 of file qglviewer.h.
bool QGLViewer::FPSIsDisplayed_ [private] |
Definition at line 1148 of file qglviewer.h.
QString QGLViewer::fpsString_ [private] |
Definition at line 1162 of file qglviewer.h.
QTime QGLViewer::fpsTime_ [private] |
Definition at line 1160 of file qglviewer.h.
bool QGLViewer::fullScreen_ [private] |
Definition at line 1151 of file qglviewer.h.
bool QGLViewer::gridIsDrawn_ [private] |
Definition at line 1147 of file qglviewer.h.
QTabWidget* QGLViewer::helpWidget_ [private] |
Definition at line 1266 of file qglviewer.h.
QMap<KeyboardAction, QString> QGLViewer::keyboardActionDescription_ [private] |
Definition at line 1192 of file qglviewer.h.
QMap<KeyboardAction, unsigned int> QGLViewer::keyboardBinding_ [private] |
Definition at line 1193 of file qglviewer.h.
QMap<int, QString> QGLViewer::keyDescription_ [private] |
Definition at line 1194 of file qglviewer.h.
Definition at line 1171 of file qglviewer.h.
bool QGLViewer::manipulatedFrameIsACamera_ [private] |
Definition at line 1172 of file qglviewer.h.
QString QGLViewer::message_ [private] |
Definition at line 1166 of file qglviewer.h.
QTimer QGLViewer::messageTimer_ [private] |
Definition at line 1168 of file qglviewer.h.
QMap<int, MouseActionPrivate> QGLViewer::mouseBinding_ [private] |
Definition at line 1244 of file qglviewer.h.
QMap<ClickActionPrivate, QString> QGLViewer::mouseDescription_ [private] |
Definition at line 1240 of file qglviewer.h.
qglviewer::MouseGrabber* QGLViewer::mouseGrabber_ [private] |
Definition at line 1175 of file qglviewer.h.
bool QGLViewer::mouseGrabberIsAManipulatedCameraFrame_ [private] |
Definition at line 1177 of file qglviewer.h.
bool QGLViewer::mouseGrabberIsAManipulatedFrame_ [private] |
Definition at line 1176 of file qglviewer.h.
QMap<Qt::Key, int> QGLViewer::pathIndex_ [private] |
Definition at line 1197 of file qglviewer.h.
Qt::KeyboardModifiers QGLViewer::playPathKeyboardModifiers_ [private] |
Definition at line 1198 of file qglviewer.h.
unsigned int QGLViewer::previousBufferTextureFormat_ [private] |
Definition at line 1204 of file qglviewer.h.
int QGLViewer::previousBufferTextureInternalFormat_ [private] |
Definition at line 1205 of file qglviewer.h.
float QGLViewer::previousCameraZClippingCoefficient_ [private] |
Definition at line 1138 of file qglviewer.h.
int QGLViewer::previousPathId_ [private] |
Definition at line 1139 of file qglviewer.h.
QPoint QGLViewer::prevPos_ [private] |
Definition at line 1152 of file qglviewer.h.
QPtrList< QGLViewer > QGLViewer::QGLViewerPool_ [static, private] |
Definition at line 1259 of file qglviewer.h.
GLuint* QGLViewer::selectBuffer_ [private] |
Definition at line 1183 of file qglviewer.h.
int QGLViewer::selectBufferSize_ [private] |
Definition at line 1182 of file qglviewer.h.
int QGLViewer::selectedObjectId_ [private] |
Definition at line 1184 of file qglviewer.h.
int QGLViewer::selectRegionHeight_ [private] |
Definition at line 1181 of file qglviewer.h.
int QGLViewer::selectRegionWidth_ [private] |
Definition at line 1181 of file qglviewer.h.
int QGLViewer::snapshotCounter_ [private] |
Definition at line 1252 of file qglviewer.h.
QString QGLViewer::snapshotFileName_ [private] |
Definition at line 1251 of file qglviewer.h.
QString QGLViewer::snapshotFormat_ [private] |
Definition at line 1251 of file qglviewer.h.
int QGLViewer::snapshotQuality_ [private] |
Definition at line 1252 of file qglviewer.h.
QString QGLViewer::stateFileName_ [private] |
Definition at line 1263 of file qglviewer.h.
bool QGLViewer::stereo_ [private] |
Definition at line 1150 of file qglviewer.h.
bool QGLViewer::textIsEnabled_ [private] |
Definition at line 1149 of file qglviewer.h.
TileRegion* QGLViewer::tileRegion_ [private] |
Definition at line 1253 of file qglviewer.h.
bool QGLViewer::updateGLOK_ [private] |
Definition at line 1269 of file qglviewer.h.
int QGLViewer::visualHint_ [private] |
Definition at line 1187 of file qglviewer.h.
QMap<Qt::KeyboardModifiers, MouseActionPrivate> QGLViewer::wheelBinding_ [private] |
Definition at line 1245 of file qglviewer.h.