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 theSoRenderAreaCoreclass. 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 theSoEventBuilderclass. 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.NAVIGATIONmode (the default, similar to viewing mode) orSceneExaminer.InteractionMode.SELECTIONmode. 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 ofadjustClippingPlanesuse.
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 enumInteraction Mode (navigation or selection)static interfaceListener interface to receive notifications of interaction mode changes.static enumNavigation ModeNested classes/interfaces inherited from class com.openinventor.inventor.viewercomponents.nodes.SceneInteractor
SceneInteractor.CameraModeNested classes/interfaces inherited from class com.openinventor.inventor.nodes.SoSeparator
SoSeparator.Cachings, SoSeparator.FastEditings, SoSeparator.RenderUnitIdsNested classes/interfaces inherited from class com.openinventor.inventor.nodes.SoNode
SoNode.RenderModesNested 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, renderUnitIdFields inherited from class com.openinventor.inventor.nodes.SoGroup
boundingBoxIgnoringFields inherited from class com.openinventor.inventor.Inventor
VERBOSE_LEVEL, ZeroHandle -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidAdds a listener to receive notifications of interaction mode changes.voidenableOrbit(boolean enabled) Enable or disable camera orbiting.voidenablePan(boolean enabled) Enable or disable camera panning.voidenableRotate(boolean enabled) Enable or disable camera rotate.voidenableSeek(boolean enabled) Enable or disable seek.voidenableSelection(boolean enabled) Enable or disable selection mode.voidenableZoom(boolean enabled) Enable or disable zoom.Get the current interaction mode.Get the current navigation mode.booleanReturn if camera orbiting is enabled.booleanReturn if camera panning is enabled.booleanReturn if rotate is enabled.booleanReturn if seek is enabled.booleanReturn if selection is enabled.booleanReturn if zoom is enabled.voidRemoves the specified listener so that it no longer receives notifications of interaction mode changes.voidSet camera mode to perspective or orthographic.voidSet interaction mode to navigation or selection.voidSet navigation mode.voidsetSeekMode(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, viewAxisMethods inherited from class com.openinventor.inventor.nodes.SoGroup
addChild, findChild, getChild, getNumChildren, insertChild, removeAllChildren, removeChild, removeChild, replaceChild, replaceChildMethods 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, writeMethods inherited from class com.openinventor.inventor.fields.SoFieldContainer
copyFieldValues, copyFieldValues, enableNotify, fieldsAreEqual, get, getAllFields, getEventIn, getEventOut, getField, getFieldName, hasDefaultValues, isNotifyEnabled, set, setToDefaultsMethods inherited from class com.openinventor.inventor.misc.SoBase
dispose, getName, isDisposable, isSynchronizable, setName, setSynchronizableMethods inherited from class com.openinventor.inventor.Inventor
getNativeResourceHandle
-
Constructor Details
-
SceneExaminer
public SceneExaminer()
-
-
Method Details
-
setCameraMode
Description copied from class:SceneInteractorSet camera mode to perspective or orthographic.- Overrides:
setCameraModein 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).
-