Class SceneExaminer
- java.lang.Object
-
- com.openinventor.inventor.Inventor
-
- com.openinventor.inventor.misc.SoBase
-
- com.openinventor.inventor.fields.SoFieldContainer
-
- com.openinventor.inventor.nodes.SoNode
-
- com.openinventor.inventor.nodes.SoGroup
-
- com.openinventor.inventor.nodes.SoSeparator
-
- com.openinventor.inventor.viewercomponents.nodes.SceneInteractor
-
- com.openinventor.inventor.viewercomponents.nodes.SceneExaminer
-
- All Implemented Interfaces:
SafeDisposable
public class SceneExaminer extends SceneInteractor
Tool class for easily building a basic interactive OpenInventor application without using existing viewer classes.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 ofSoCameraInteractor
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 Classes Modifier and Type Class Description static class
SceneExaminer.InteractionMode
Interaction Mode (navigation or selection)static interface
SceneExaminer.InteractionModeListener
Listener interface to receive notifications of interaction mode changes.static class
SceneExaminer.NavigationMode
Navigation Mode-
Nested 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 Constructor Description SceneExaminer()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addInteractionModeListener(SceneExaminer.InteractionModeListener listener)
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.SceneExaminer.InteractionMode
getInteractionMode()
Get the current interaction mode.SceneExaminer.NavigationMode
getNavigationMode()
Get the current navigation mode.boolean
isOrbitEnabled()
Return if camera orbiting is enabled.boolean
isPanEnabled()
Return if camera panning is enabled.boolean
isRotateEnabled()
Return if rotate is enabled.boolean
isSeekEnabled()
Return if seek is enabled.boolean
isSelectionEnabled()
Return if selection is enabled.boolean
isZoomEnabled()
Return if zoom is enabled.void
removeInteractionModeListener(SceneExaminer.InteractionModeListener listener)
Removes the specified listener so that it no longer receives notifications of interaction mode changes.void
setCameraMode(SceneInteractor.CameraMode mode)
Set camera mode to perspective or orthographic.void
setInteractionMode(SceneExaminer.InteractionMode mode)
Set interaction mode to navigation or selection.void
setNavigationMode(SceneExaminer.NavigationMode mode)
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
-
-
-
-
Method Detail
-
setCameraMode
public void setCameraMode(SceneInteractor.CameraMode mode)
Description copied from class:SceneInteractor
Set camera mode to perspective or orthographic.- Overrides:
setCameraMode
in classSceneInteractor
-
getNavigationMode
public SceneExaminer.NavigationMode getNavigationMode()
Get the current navigation mode.
-
setNavigationMode
public void setNavigationMode(SceneExaminer.NavigationMode mode)
Set navigation mode.
-
getInteractionMode
public SceneExaminer.InteractionMode getInteractionMode()
Get the current interaction mode.
-
setInteractionMode
public void setInteractionMode(SceneExaminer.InteractionMode mode)
Set interaction mode to navigation or selection.
-
addInteractionModeListener
public void addInteractionModeListener(SceneExaminer.InteractionModeListener listener)
Adds a listener to receive notifications of interaction mode changes.
-
removeInteractionModeListener
public void removeInteractionModeListener(SceneExaminer.InteractionModeListener listener)
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).
-
-