Class SceneExaminer
- All Implemented Interfaces:
SafeDisposable
The SceneExaminer is an extension of the SceneInteractor
node that
allows providing the camera and headlight manipulations like panning, zooming
and orbiting. The 'headlight', i.e. an SoDirectionalLight node, is
automatically aligned with the camera's view direction.
It also provides a touch event handler that allows manipulating a scene on a
touch device.
See parent class SceneInteractor
for more details about the structure
of the internal scene graph.
The SceneExaminer uses an instance of SoCameraInteractor
to
manipulate the camera in response to OpenInventor events.
Notes:
- Window system integration
The SceneExaminer needs a component that integrates the Open Inventor 3D rendering window with the native window system. System dependent tasks include creating a window, placing the window in the application's user interface, initializing OpenGL and processing the native event/message loop. System independent support for this is provided by theSoRenderAreaCore
class. Example components are provided for AWT and SWT toolkits. - Event handling
The SceneExaminer needs a component that builds OpenInventor events (SoEvent) from native system events. System independent support for this is provided by theSoEventBuilder
class. Example components are provided for AWT and SWT toolkits: AWTEventToSoEvent and SWTEventToSoEvent. - Library
A basic version of SceneExaminer is a supported part of the Open Inventor API and a prebuilt jar is provided. - Source code
The basic version of SceneExaminer is also provided as source code in the sources folder to allow applications to customize and build their own interactive tool class.
See $OIVJHOME/source/com/openinventor/inventor/viewercomponents/nodes. - Interaction Modes
SceneExaminer can be either inSceneExaminer.InteractionMode.NAVIGATION
mode (the default, similar to viewing mode) orSceneExaminer.InteractionMode.SELECTION
mode. The user must press the ESC key to toggle between interaction modes. (Of course this behavior can be modified or replaced by implementing an alternate version of SceneExaminer.) In navigation mode, Open Inventor events are automatically handled to modify the camera according to the current navigation mode,SceneExaminer.NavigationMode.ORBIT
(the default) orSceneExaminer.NavigationMode.PLANE
, as defined in the Usage section below. Events that are defined in this section are not sent to the application scene graph, but all other events are sent to the application scene graph. Also specific viewing behaviors can be disabled as needed (see for exampleenableZoom(boolean)
). In selection mode, all events are sent to the application scene graph. - Scene graph
The application scene graph should be the last child of the SceneExaminer. The initial application scene graph can be added by simply calling the inherited method addChild(). But note that if you need to replace the application scene graph, for example loading a new data set, do not call removeAllChildren(). That would also remove the SceneExaminer's camera, headlight and event handler nodes. Add an SoSeparator to the SceneExaminer to serve as the "scene graph holder", then add and remove the application scene graph from this node. - Clip planes
SceneExaminer automatically adjusts the 'near' and 'far' clipping planes when events modifying the camera are handled. This adjustment, based on the bounding box of the scene, ensures that shapes will not be clipped as the camera orbits and also that depth buffer precision is maximized. This adjustment is only done in InteractionMode NAVIGATION and can be disabled by setting the environment variable "OIV_SCENE_EXAMINER_AUTO_CLIPPING_PLANES" to false.
Note: Updating clipping planes after a camera move can be not sufficient. If the scene graph is modified or if a dragger or a rendered shape is moved, they can disappear or become partially clipped. A classic implementation of a render area must adjust clipping planes before each rendering by calling the provided methodSceneInteractor.adjustClippingPlanes(SbViewportRegion)
. See render area's implementations available in $OIVJHOME/examples/inventor/viewercomponents/awt and $OIVJHOME/examples/inventor/viewercomponents/swt folders for examples ofadjustClippingPlanes
use.
Compatibility
Please note that some interaction behaviors are different than the classic
Open Inventor viewer classes :
- In Orbit mode: Left Mouse + Shift: now : Zoom in/out.
- In Plane mode: Left Mouse + Middle Mouse or Left Mouse + Shift: now : Roll the scene.
- Mouse wheel in both modes performs a dolly relative to the cursor position , not the center of the viewport.
- The classic Alt key behavior is not implemented. This key is reserved for application use.
- The Right Mouse button does not display a popup menu. This button is reserved for application use.
Usage:
- Orbit mode:
- With a mouse
- Left Mouse: Rotate the scene or seek to point if seek mode is activated.
- Middle Mouse or Left Mouse + Ctrl: Pan the scene.
- Left Mouse + Middle Mouse or Middle Mouse + Ctrl or Left Mouse + Shift: Zoom in/out the scene.
- Mouse Wheel: Zoom in/out (zoom center is the mouse cursor location).
- Escape key: Switch between navigation mode and selection mode.
- S key: Activate/Deactivate seek mode.
- With a touchscreen
- 1 finger: Rotate the scene.
- 2 fingers: Rotate the scene on the screen plan, zoom in/out and pan (rotation and zoom center are located between the two fingers).
- Double tap: Seek to the point located by the finger.
- Long tap: Enable/Disable selection mode.
- Plane mode:
- With a mouse
- Left Mouse: Zoom in/out or seek to point if seek mode is activated.
- Middle Mouse or Left Mouse + Ctrl: Pan the scene.
- Left Mouse + Middle Mouse or Middle Mouse + Ctrl or Left Mouse + Shift: Roll the scene.
- Mouse Wheel: Zoom in/out (zoom center is the mouse cursor location).
- Escape key: Switch between navigation mode and selection mode.
- S key: Activate/Deactivate seek mode.
- With a touchscreen
- 1 finger: Pan the scene.
- 2 fingers: Rotate the scene on the screen plan, zoom in/out and pan (rotation and zoom center are located between the two fingers).
- Double tap: Seek to the point located by the finger.
- Long tap: Enable/Disable selection mode.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enum
Interaction Mode (navigation or selection)static interface
Listener interface to receive notifications of interaction mode changes.static enum
Navigation ModeNested classes/interfaces inherited from class com.openinventor.inventor.viewercomponents.nodes.SceneInteractor
SceneInteractor.CameraMode
Nested classes/interfaces inherited from class com.openinventor.inventor.nodes.SoSeparator
SoSeparator.Cachings, SoSeparator.FastEditings, SoSeparator.RenderUnitIds
Nested classes/interfaces inherited from class com.openinventor.inventor.nodes.SoNode
SoNode.RenderModes
Nested classes/interfaces inherited from class com.openinventor.inventor.Inventor
Inventor.ConstructorCommand
-
Field Summary
Fields inherited from class com.openinventor.inventor.nodes.SoSeparator
boundingBoxCaching, fastEditing, pickCulling, renderCaching, renderCulling, renderUnitId
Fields inherited from class com.openinventor.inventor.nodes.SoGroup
boundingBoxIgnoring
Fields inherited from class com.openinventor.inventor.Inventor
VERBOSE_LEVEL, ZeroHandle
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
Adds a listener to receive notifications of interaction mode changes.void
enableOrbit
(boolean enabled) Enable or disable camera orbiting.void
enablePan
(boolean enabled) Enable or disable camera panning.void
enableRotate
(boolean enabled) Enable or disable camera rotate.void
enableSeek
(boolean enabled) Enable or disable seek.void
enableSelection
(boolean enabled) Enable or disable selection mode.void
enableZoom
(boolean enabled) Enable or disable zoom.Get the current interaction mode.Get the current navigation mode.boolean
Return if camera orbiting is enabled.boolean
Return if camera panning is enabled.boolean
Return if rotate is enabled.boolean
Return if seek is enabled.boolean
Return if selection is enabled.boolean
Return if zoom is enabled.void
Removes the specified listener so that it no longer receives notifications of interaction mode changes.void
Set camera mode to perspective or orthographic.void
Set interaction mode to navigation or selection.void
Set navigation mode.void
setSeekMode
(boolean onOrOff) Set the interaction into or out off seek mode (default is off).Methods inherited from class com.openinventor.inventor.viewercomponents.nodes.SceneInteractor
adjustClippingPlanes, enableHeadlight, getCamera, getCameraInteractor, getCameraMode, getRenderEngineMode, isHeadlightEnabled, viewAll, viewAxis
Methods inherited from class com.openinventor.inventor.nodes.SoGroup
addChild, findChild, getChild, getNumChildren, insertChild, removeAllChildren, removeChild, removeChild, replaceChild, replaceChild
Methods inherited from class com.openinventor.inventor.nodes.SoNode
affectsState, callback, copy, copy, distribute, doAction, getAlternateRep, getBoundingBox, getByName, getMatrix, getPrimitiveCount, getRenderUnitID, GLRender, GLRenderBelowPath, GLRenderInPath, GLRenderOffPath, grabEventsCleanup, grabEventsSetup, handleEvent, isBoundingBoxIgnoring, isOverride, pick, rayPick, search, setOverride, touch, write
Methods inherited from class com.openinventor.inventor.fields.SoFieldContainer
copyFieldValues, copyFieldValues, enableNotify, fieldsAreEqual, get, getAllFields, getEventIn, getEventOut, getField, getFieldName, hasDefaultValues, isNotifyEnabled, set, setToDefaults
Methods inherited from class com.openinventor.inventor.misc.SoBase
dispose, getName, isDisposable, isSynchronizable, setName, setSynchronizable
Methods inherited from class com.openinventor.inventor.Inventor
getNativeResourceHandle
-
Constructor Details
-
SceneExaminer
public SceneExaminer()
-
-
Method Details
-
setCameraMode
Description copied from class:SceneInteractor
Set camera mode to perspective or orthographic.- Overrides:
setCameraMode
in classSceneInteractor
-
getInteractionMode
Get the current interaction mode. -
setInteractionMode
Set interaction mode to navigation or selection. -
addInteractionModeListener
Adds a listener to receive notifications of interaction mode changes. -
removeInteractionModeListener
Removes the specified listener so that it no longer receives notifications of interaction mode changes. -
enableSelection
public void enableSelection(boolean enabled) Enable or disable selection mode. -
isSelectionEnabled
public boolean isSelectionEnabled()Return if selection is enabled. -
enableZoom
public void enableZoom(boolean enabled) Enable or disable zoom. -
isZoomEnabled
public boolean isZoomEnabled()Return if zoom is enabled. -
enableRotate
public void enableRotate(boolean enabled) Enable or disable camera rotate. -
isRotateEnabled
public boolean isRotateEnabled()Return if rotate is enabled. -
enableSeek
public void enableSeek(boolean enabled) Enable or disable seek. -
isSeekEnabled
public boolean isSeekEnabled()Return if seek is enabled. -
enablePan
public void enablePan(boolean enabled) Enable or disable camera panning. -
isPanEnabled
public boolean isPanEnabled()Return if camera panning is enabled. -
enableOrbit
public void enableOrbit(boolean enabled) Enable or disable camera orbiting. -
isOrbitEnabled
public boolean isOrbitEnabled()Return if camera orbiting is enabled. -
setSeekMode
public void setSeekMode(boolean onOrOff) Set the interaction into or out off seek mode (default is off).
-