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
SceneInteractornode 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
SceneInteractorfor more details about the structure of the internal scene graph.
The SceneExaminer uses an instance ofSoCameraInteractorto 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 Classes Modifier and Type Class Description static classSceneExaminer.InteractionModeInteraction Mode (navigation or selection)static interfaceSceneExaminer.InteractionModeListenerListener interface to receive notifications of interaction mode changes.static classSceneExaminer.NavigationModeNavigation 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 voidaddInteractionModeListener(SceneExaminer.InteractionModeListener listener)Adds 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.SceneExaminer.InteractionModegetInteractionMode()Get the current interaction mode.SceneExaminer.NavigationModegetNavigationMode()Get the current navigation mode.booleanisOrbitEnabled()Return if camera orbiting is enabled.booleanisPanEnabled()Return if camera panning is enabled.booleanisRotateEnabled()Return if rotate is enabled.booleanisSeekEnabled()Return if seek is enabled.booleanisSelectionEnabled()Return if selection is enabled.booleanisZoomEnabled()Return if zoom is enabled.voidremoveInteractionModeListener(SceneExaminer.InteractionModeListener listener)Removes the specified listener so that it no longer receives notifications of interaction mode changes.voidsetCameraMode(SceneInteractor.CameraMode mode)Set camera mode to perspective or orthographic.voidsetInteractionMode(SceneExaminer.InteractionMode mode)Set interaction mode to navigation or selection.voidsetNavigationMode(SceneExaminer.NavigationMode mode)Set 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, dispose, 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
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:SceneInteractorSet camera mode to perspective or orthographic.- Overrides:
setCameraModein 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).
-
-