Viewer component which uses a virtual trackball to view the data. More...
#include <Inventor/Win/viewers/SoWinExaminerViewer.h>
Classes | |
class | SoViewingDolly |
Viewing Function: Dolly (move forward and backward) to get closer to or further away from the point of interest. More... | |
class | SoViewingEmpty |
Viewing Function: Does nothing. More... | |
class | SoViewingFunction |
Viewing Function: Abstract base class for viewing function classes. More... | |
class | SoViewingReverseDolly |
Viewing Function: Reverse Dolly (move backward and forward) to get further to or closer away from the point of interest. More... | |
class | SoViewingRotationX |
Viewing Function: Rotates the object around the X axis. More... | |
class | SoViewingRotationXViewer |
Viewing Function: Rotates the object around the screen X axis. More... | |
class | SoViewingRotationY |
Viewing Function: Rotates the object around the Y axis. More... | |
class | SoViewingRotationYViewer |
Viewing Function: Rotates the object around the screen Y axis. More... | |
class | SoViewingRotationZ |
Viewing Function: Rotates the object around the Z axis. More... | |
class | SoViewingRotationZViewer |
Viewing Function: Rotates the object around the screen Z axis. More... | |
class | SoViewingSeek |
Viewing Function: Seek (to quickly move the camera to a desired object or point). More... | |
class | SoViewingSphericalRotation |
Viewing Function: Rotates the view around a point of interest using a virtual trackball. More... | |
class | SoViewingTranslation |
Viewing Function: Translates the camera in the viewer plane. More... | |
Public Types | |
enum | ViewingMode { VIEWING_MODE_SPIN, VIEWING_MODE_SPIN_CONSTRAINED, VIEWING_MODE_PAN, VIEWING_MODE_ZOOM } |
enum | ConstrainedViewingMode { NONE, CONSTRAINED_VIEWING_MODE_X, CONSTRAINED_VIEWING_MODE_Y, CONSTRAINED_VIEWING_MODE_Z } |
Public Member Functions | |
SoWinExaminerViewer (SoWidget parent=NULL, const char *name=NULL, SbBool buildInsideParent=TRUE, SoWinFullViewer::BuildFlag flag=SoWinFullViewer::BUILD_ALL, SoWinViewer::Type type=SoWinViewer::BROWSER) | |
~SoWinExaminerViewer () | |
void | setViewingMode (ViewingMode viewingMode) |
ViewingMode | getViewingMode () const |
void | setConstrainedViewingMode (ConstrainedViewingMode mode) |
ConstrainedViewingMode | getConstrainedViewingMode () const |
virtual void | addFunctionKeyBinding (SoKeyboardEvent::Key key, const SoViewingFunction *viewingFunc) |
virtual void | removeFunctionKeyBinding (SoKeyboardEvent::Key functionKey) |
virtual void | addViewingMouseBinding (SoKeyboardEvent::Key *keys=NULL, int numKey=0, SoMouseButtonEvent::Button *mouseBtn=NULL, int numMouseBtn=0, const SoViewingFunction *viewingFunc=NULL) |
virtual void | removeViewingMouseBinding (SoKeyboardEvent::Key *keys=NULL, int numKeys=0, SoMouseButtonEvent::Button *mouseBtn=NULL, int numMouseBtn=0) |
void | setFeedbackVisibility (SbBool onOrOff) |
SbBool | isFeedbackVisible () const |
void | setFeedbackSize (int newSize) |
int | getFeedbackSize () const |
void | setAnimationEnabled (SbBool onOrOff) |
SbBool | isAnimationEnabled () |
void | stopAnimating () |
SbBool | isAnimating () |
virtual void | viewAll () |
virtual void | resetToHomePosition () |
virtual void | setCamera (SoCamera *cam) |
virtual void | setViewing (SbBool onOrOff) |
virtual void | setCursorEnabled (SbBool onOrOff) |
virtual void | setSeekMode (SbBool onOrOff) |
virtual void | activateSpinning (const SbVec2s &newLocator) |
virtual void | activatePanning (const SbVec2s &newLocator) |
virtual void | activateDolly (const SbVec2s &newLocator) |
virtual void | activateRoll (const SbVec2s &newLocator) |
virtual void | rollCamera (const SbVec2s &newLocator) |
virtual void | spinCamera (const SbVec2f &newLocator) |
virtual void | spinConstrainedCamera (const SbVec2f &newLocator, int axisIndex) |
virtual void | dollyCamera (const SbVec2s &newLocator) |
virtual void | reverseDollyCamera (const SbVec2s &newLocator) |
virtual void | panCamera (const SbVec2f &newLocator) |
The Examiner viewer component allows you to rotate the view around a point of interest using a virtual trackball. The viewer uses the camera focalDistance field to figure out the point of rotation, which is usually set to be at the center of the scene. In addition to allowing you to rotate the camera around the point of interest, this viewer also allows you to translate the camera in the viewer plane, as well as dolly (move forward and backward) to get closer to or further away from the point of interest. The viewer also supports seek to quickly move the camera to a desired object or point.
Focal point:
SoCamera* camera = viewer->getCamera(); SbMatrix mx; // Note constructor does not accept SbRotation mx = camera->orientation.getValue(); // Assignment converts SbRotation to SbMatrix SbVec3f viewVec(-mx[2][0], -mx[2][1], -mx[2][2]); SbVec3f camPos = camera->position.getValue(); float focDist = camera->focalDistance.getValue(); SbVec3f focalPt = camPos + (focDist * viewVec);
Customize behaviors:
Viewer components:
Left Mouse: Rotate the virtual trackball.
Middle Mouse or
Ctrl + Left Mouse: Translate up, down, left, right.
Ctrl + Middle Mouse or
Left + Middle Mouse: Dolly in and out (gets closer to and further away from the object) (Perspective camera) or zoom in and out (Orthographic camera).
<s> + Left Mouse: Alternative to the Seek button. Press (but do not hold down) the <s> key, then click on a target object.
Right Mouse: Open the popup menu.
ALT: When the viewer is in selection (a.k.a. pick) mode, pressing and holding the ALT key temporarily switches the viewer to viewing mode. When the ALT key is released, the viewer returns to selection mode. Note: If any of the mouse buttons are currently depressed, the ALT key has no effect.
Mouse Wheel: Dolly/zoom camera
Rotating the mouse wheel does a camera "dolly" operation on a perspective camera (moving the camera closer or farther away from the scene, which visually zoom) or a camera "zoom" operation on an orthographic camera (changing the view volume height).
Note that many users find the default dolly speed with the mouse wheel to be too slow. The user can hold down the Shift key to make the mouse wheel dolly go 2X faster. To increase the base speed set the environment variable OIV_WHEEL_DELTA. Mouse wheel events contain a "delta" that is a multiple of 120. The viewer divides this value by OIV_WHEEL_DELTA to compute the camera dolly increment. The default value for OIV_WHEEL_DELTA is 120. So, for example, setting OIV_WHEEL_DELTA to 12 makes the mouse wheel dolly go 10X faster.
SoWinFullViewer, SoWinViewer, SoWinComponent, SoWinRenderArea, SoWinWalkViewer, SoWinFlyViewer, SoWinPlaneViewer
Viewing mode.
SoWinExaminerViewer::SoWinExaminerViewer | ( | SoWidget | parent = NULL , |
|
const char * | name = NULL , |
|||
SbBool | buildInsideParent = TRUE , |
|||
SoWinFullViewer::BuildFlag | flag = SoWinFullViewer::BUILD_ALL , |
|||
SoWinViewer::Type | type = SoWinViewer::BROWSER | |||
) |
Constructor which specifies the viewer type.
Please refer to SoWinViewer for a description of the viewer types.
SoWinExaminerViewer::~SoWinExaminerViewer | ( | ) |
Destructor.
virtual void SoWinExaminerViewer::activateDolly | ( | const SbVec2s & | newLocator | ) | [virtual] |
Sets the start locator for dolly camera animation.
This method should be called fisrt, before to start a dolly camera animation.
newLocator | The start mouse position in pixels. The coordinates must be defined with x in the range [0,window width] and y in the range [0,window height] with min y at the bottom and min x on the left. |
virtual void SoWinExaminerViewer::activatePanning | ( | const SbVec2s & | newLocator | ) | [virtual] |
Sets the start locator for pan camera animation.
This method should be called fisrt, before to start a pan camera animation.
newLocator | The start mouse position in pixels. The coordinates must be defined with x in the range [0,window width] and y in the range [0,window height] with min y at the bottom and min x on the left. |
virtual void SoWinExaminerViewer::activateRoll | ( | const SbVec2s & | newLocator | ) | [virtual] |
Sets the start locator for roll camera animation.
This method should be called fisrt, before to start a roll camera animation.
newLocator | The start mouse position in pixels. The coordinates must be defined with x in the range [0,window width] and y in the range [0,window height] with min y at the bottom and min x on the left. |
virtual void SoWinExaminerViewer::activateSpinning | ( | const SbVec2s & | newLocator | ) | [virtual] |
Sets the start locator for spin camera animation.
This method should be called fisrt, before to start a spin camera animation.
newLocator | The start mouse position in pixels. The coordinates must be defined with x in the range [0,window width] and y in the range [0,window height] with min y at the bottom and min x on the left. |
virtual void SoWinExaminerViewer::addFunctionKeyBinding | ( | SoKeyboardEvent::Key | key, | |
const SoViewingFunction * | viewingFunc | |||
) | [virtual] |
Adds a new function key binding to the viewer.
This method allows you to associate a keyboard key with a viewing function, such as rotation or translation. The specified viewing function replaces any viewing function currently associated with the specified key. Any key may be used, not just "function keys".
A key cannot be associated with more than one viewing function at a time. However, more than one key can be associated with a single viewing function. For example, the S and T keys could each be used to invoke the seek operation.
virtual void SoWinExaminerViewer::addViewingMouseBinding | ( | SoKeyboardEvent::Key * | keys = NULL , |
|
int | numKey = 0 , |
|||
SoMouseButtonEvent::Button * | mouseBtn = NULL , |
|||
int | numMouseBtn = 0 , |
|||
const SoViewingFunction * | viewingFunc = NULL | |||
) | [virtual] |
Adds a new mouse binding to the viewer.
This method allows you to associate an array of modifier keys (of length numKey) and an array of mouse buttons (of length numMouseBtn) with a viewing operation, such as rotation or translation. The specified viewing function replaces the viewing function currently associated with the specified key and mouse button sequence.
Modifier keys (CTRL, SHIFT, CTRL+SHIFT...) can be specified in addition to the mouse buttons chosen. There is no error for specifying non-modifier keys, but they have no effect. The order of the keys and the mouse buttons is important. For example, CTRL+SHIFT+BT1 is different from SHIFT+CTRL+BT1. Likewise, CTRL+BT1+BT2 is different from CTRL+BT2+BT1.
A key and mouse button sequence cannot be associated with more than one viewing function at a time. However, more than one key and mouse button sequence can be associated with a single viewing function.
Notes:
Limitations:
virtual void SoWinExaminerViewer::dollyCamera | ( | const SbVec2s & | newLocator | ) | [virtual] |
Move the camera on the z axis based on cursor motion.
This corresponds to pressing left and middle mouse buttons, pressing control + shift + left mouse button or using the mouse wheel.
newLocator | The new cursor position. The coordinates are in pixels with x in the range [0,window width-1] and y in the range [0,window height-1] with min y at the bottom and min x on the left. |
ConstrainedViewingMode SoWinExaminerViewer::getConstrainedViewingMode | ( | ) | const [inline] |
Returns the current constrained viewing mode.
int SoWinExaminerViewer::getFeedbackSize | ( | ) | const [inline] |
Returns the point of rotation feedback size in pixels.
ViewingMode SoWinExaminerViewer::getViewingMode | ( | ) | const [inline] |
Gets the current viewing mode.
SbBool SoWinExaminerViewer::isAnimating | ( | ) | [inline] |
Queries if the viewer is currently animating.
SbBool SoWinExaminerViewer::isAnimationEnabled | ( | ) | [inline] |
Returns whether spin animation is enabled.
SbBool SoWinExaminerViewer::isFeedbackVisible | ( | ) | const [inline] |
Returns the rotation feedback flag.
virtual void SoWinExaminerViewer::panCamera | ( | const SbVec2f & | newLocator | ) | [virtual] |
Pans the camera based on cursor motion.
newLocator | The new cursor position. The coordinates are in normalized device coordinates with x and y in the range [0,1] with min y at the bottom and min x on the left. |
virtual void SoWinExaminerViewer::removeFunctionKeyBinding | ( | SoKeyboardEvent::Key | functionKey | ) | [virtual] |
Removes the specified function key binding (if it exists).
virtual void SoWinExaminerViewer::removeViewingMouseBinding | ( | SoKeyboardEvent::Key * | keys = NULL , |
|
int | numKeys = 0 , |
|||
SoMouseButtonEvent::Button * | mouseBtn = NULL , |
|||
int | numMouseBtn = 0 | |||
) | [virtual] |
Removes a mouse binding (if it exists).
The key and button order is important. For example, CTRL+SHIFT+BT1 is different from SHIFT+CTRL+BT1. Likewise, CTRL+BT1+BT2 is different from CTRL+BT2+BT1.
virtual void SoWinExaminerViewer::resetToHomePosition | ( | ) | [virtual] |
Restores the camera values.
Reimplemented from SoWinViewer.
virtual void SoWinExaminerViewer::reverseDollyCamera | ( | const SbVec2s & | newLocator | ) | [virtual] |
Same as dollyCamera but reversed.
newLocator | The new cursor position. The coordinates are in pixels with x in the range [0,window width-1] and y in the range [0,window height-1] with min y at the bottom and min x on the left. |
virtual void SoWinExaminerViewer::rollCamera | ( | const SbVec2s & | newLocator | ) | [virtual] |
Roll the camera based on cursor motion.
newLocator | The new cursor position. The coordinates are in pixels with x in the range [0,window width-1] and y in the range [0,window height-1] with min y at the bottom and min x on the left. |
void SoWinExaminerViewer::setAnimationEnabled | ( | SbBool | onOrOff | ) |
Enables/disables the spin animation feature of the viewer (enabled by default).
The default value can be set using the environment variable OIV_VIEWER_ANIMATION (0 = OFF, 1 = ON).
virtual void SoWinExaminerViewer::setCamera | ( | SoCamera * | cam | ) | [virtual] |
Sets the edited camera.
Setting the camera is only needed if the first camera found in the scene when setting the scene graph isn't the one the user really wants to edit.
Reimplemented from SoWinFullViewer.
void SoWinExaminerViewer::setConstrainedViewingMode | ( | ConstrainedViewingMode | mode | ) |
Sets the constrained viewing mode.
This method is useful to associate a key combination with a constrained mode. Notes:
virtual void SoWinExaminerViewer::setCursorEnabled | ( | SbBool | onOrOff | ) | [virtual] |
Sets whether the viewer is allowed to change the cursor over the renderArea window.
When disabled, the cursor is undefined by the viewer and will not change as the mode of the viewer changes. When re-enabled, the viewer will reset it to the appropriate icon.
Disabling the cursor enables the application to set the cursor directly on the viewer window or on any parent widget of the viewer. This can be used when setting a busy cursor on the application shell.
Reimplemented from SoWinViewer.
void SoWinExaminerViewer::setFeedbackSize | ( | int | newSize | ) |
Sets the point of rotation feedback size in pixels (default 20 pix).
void SoWinExaminerViewer::setFeedbackVisibility | ( | SbBool | onOrOff | ) |
Shows/hides the point of rotation feedback, which only appears while in viewing mode (default is off).
virtual void SoWinExaminerViewer::setSeekMode | ( | SbBool | onOrOff | ) | [virtual] |
Externally set the viewer into/out off seek mode (default OFF).
Actual seeking will not happen until the viewer decides to (ex: mouse click).
Note: setting the viewer out of seek mode while the camera is being animated will stop the animation to the current location.
Reimplemented from SoWinViewer.
virtual void SoWinExaminerViewer::setViewing | ( | SbBool | onOrOff | ) | [virtual] |
Sets whether the viewer is turned on or off.
When turned on, messages are consumed by the viewer. When viewing is off, messages are processed by the viewer's render area. This means messages will be sent down to the scene graph for processing (i.e. picking can occur). Note that if the application has registered a message callback , it will be invoked on every message, whether viewing is turned on or not. However, the return value of this callback (which specifies whether the callback handled the message or not) is ignored when viewing is on. That is, the viewer will process the message even if the callback already did. This is to ensure that the viewing paradigm is not broken (default viewing is on).
Reimplemented from SoWinFullViewer.
void SoWinExaminerViewer::setViewingMode | ( | ViewingMode | viewingMode | ) |
Sets the viewing mode.
This method specifies what is the viewing behavior when the left mouse is pressed. The default value is SPIN_VIEWING_MODE.
virtual void SoWinExaminerViewer::spinCamera | ( | const SbVec2f & | newLocator | ) | [virtual] |
Spin the camera based on cursor motion.
newLocator | The new cursor position. The coordinates are in normalized device coordinates with x and y in the range [0,1] with min y at the bottom and min x on the left. |
virtual void SoWinExaminerViewer::spinConstrainedCamera | ( | const SbVec2f & | newLocator, | |
int | axisIndex | |||
) | [virtual] |
Spin the constrained camera based on cursor motion.
newLocator | The new cursor position. The coordinates are in normalized device coordinates with x and y in the range [0,1] with min y at the bottom and min x on the left. | |
axisIndex | the axis index:
|
void SoWinExaminerViewer::stopAnimating | ( | ) |
Stops animation, if it is occurring.
virtual void SoWinExaminerViewer::viewAll | ( | ) | [virtual] |
Changes the camera position to view the entire scene (the camera zoom or orientation isn't changed).
The viewer applies an SoGetBoundingBoxAction to the scene graph to get bounding box of the entire scene. The bounding box will only include shapes that are actually traversed. For example the bounding box will not include shapes under an SoSwitch with whichChild set to SO_SWITCH_NONE. The action does not consider the visibility of shapes that are traversed. In other words the bounding box will include shapes that are invisible (SoDrawStyle), shapes that are clipped (SoClipPlane), etc. Use an SoBBox node to exclude shapes from the bounding box computation. Bounding boxes are automatically cached at SoSeparator nodes, so getting the bounding box is very fast when the scene graph has not been changed.
See all SoCamera::viewAll(). This method allows the application to adjust the camera based on a specific sub-graph or path in the scene graph.
Reimplemented from SoWinViewer.