com.sun.j3d.utils.behaviors.vp
Class WandViewBehavior

java.lang.Object
  extended by javax.media.j3d.SceneGraphObject
      extended by javax.media.j3d.Node
          extended by javax.media.j3d.Leaf
              extended by javax.media.j3d.Behavior
                  extended by com.sun.j3d.utils.behaviors.vp.ViewPlatformBehavior
                      extended by com.sun.j3d.utils.behaviors.vp.WandViewBehavior

public class WandViewBehavior
extends ViewPlatformBehavior

Manipulates view platform transforms using a motion-tracked wand or mouse equipped with a six degree of freedom (6DOF) sensor. An optional two axis (2D) valuator sensor is also directly supported. Default operation is set up to enable both direct manipulation of the view transform and translation back and forth along the direction the 6DOF sensor is pointing; rotation is handled by the 2D valuator if available. An arbitrary number of sensors and action bindings can be customized by accessing this behavior's SensorEventAgent directly.

This behavior can be instantiated from the configuration file read by ConfiguredUniverse and fully configured using the ViewPlatformBehaviorProperties command to set the properties described below, but neither ConfiguredUniverse nor SimpleUniverse are required by this behavior. Conventional set and get accessors are provided for configuring this behavior directly; these methods have the same names as the properties but are prefixed with get and set. Property values are spelled with mixed case strings while the corresponding constant field names for the conventional accessors are spelled with upper case strings and underscores.

Sensor6D is the 6DOF sensor to use. This can also be set directly with the appropriate constructor. This sensor must generate 6 degree of freedom position and orientation reads relative to the tracker base in physical units. By default this behavior provides an echo for the 6DOF sensor which indicates its position and orientation in the virtual world; the echo attributes can be set by the EchoType, EchoSize, EchoColor, and EchoTransparency properties. See also the NominalSensorRotation property, and the setHotSpot method of the Sensor class.

Sensor2D is an optional 2D valuator to use in conjunction with the 6DOF sensor. This can be set directly with the appropriate constructor. The valuator should generate X and Y reads ranging from [-1.0 .. +1.0], with a nominal (deadzone) value of 0.0. The default configuration expects to find these values along the translation components of the read matrix, at indices 3 and 7, but these indices can be also be specified by the MatrixIndices2D property.

ButtonAction6D sets an action for a specific button on a 6DOF sensor. The actions available are:

ReadAction2D sets the action bound to 2D valuator reads; that is, non-zero values generated by the device when no buttons have been pressed. If the value is (0.0, 0.0) or below the threshold value set by Threshold2D, then this behavior does nothing; otherwise, the following actions can be performed:

ButtonAction2D sets an action for a specific button on the 2D valuator. The available actions are the same as for ReadAction2D. No actions are bound by default to the 2D valuator buttons.

The view transform may be reset to its home transform by pressing a number of buttons simultaneously on the 6DOF sensor. The minimum number of buttons that must be pressed is set by ResetViewButtonCount6D. This value must be greater than one; the default is three. This action may be disabled by setting the property value to None. The corresponding property for the 2D valuator is ResetViewButtonCount2D, with a default value of None. Note, however, that the reset view action will be ineffectual if an action which always modifies the view transform is bound to reads on the sensor used to reset the view, since the reset transform will get overwritten by the read action.

The special value None can in general be assigned to any button or read action to prevent any defaults from being bound to it.

Since:
Java 3D 1.3
See Also:
ConfiguredUniverse, SensorEventAgent

Nested Class Summary
 class WandViewBehavior.EchoReadListener6D
          Implements a 6DOF sensor read listener that updates the orientation and position of the sensor's echo in the virtual world.
 class WandViewBehavior.GrabViewListener6D
          Implements a 6DOF sensor button listener to directly manipulate the view platform transform.
 class WandViewBehavior.ListenerBase
          A base class for implementing some of this behavior's listeners.
 class WandViewBehavior.ResetViewListener
          Resets the view back to the home transform when a specified number of buttons are down simultaneously.
 class WandViewBehavior.RotationListener2D
          Implements a 2D valuator listener that rotates the view platform.
 class WandViewBehavior.RotationListener6D
          Implements a 6DOF sensor button listener that rotates the view platform about a Y axis.
 class WandViewBehavior.ScaleListener2D
          Implements a 2D valuator listener that scales the view platform.
 class WandViewBehavior.ScaleListener6D
          Implements a 6DOF sensor button listener that scales the view platform.
 class WandViewBehavior.TranslationListener2D
          Implements a 2D valuator listener that translates the view platform.
 class WandViewBehavior.TranslationListener6D
          Implements a 6DOF sensor button listener that translates the view platform along the direction the sensor is pointing.
 
Field Summary
static int BEAM
          Indicates that the echo type is a beam extending from the origin of the sensor's local coordinate system to its hotspot.
static int DEGREES
          Indicates that rotation speed should be in degrees.
static int ECHO
          Indicates that the 6DOF sensor read action should be bound to displaying the sensor's echo in the virtual world.
static int GNOMON
          Indicates that the echo type is a gnomon displaying the directions of the sensor's local coordinate system axes at the location of the sensor's hotspot.
static int GRAB_VIEW
          Indicates that a 6DOF sensor button action should be bound to grabbing the view.
static int HEAD
          Indicates that rotation should occur in head coordinates.
static int HOTSPOT
          Indicates that rotation or scale should be about a 6DOF sensor hotspot.
static int NONE
          Indicates a null configuration choice.
static int PER_FRAME
          Indicates that translation, rotation, or scaling speeds are per frame.
static int PER_SECOND
          Use to indicate that translation, rotation, or scaling speeds are per second.
static int PHYSICAL_METERS
          Indicates that translation speed is in physical world units (meters per second or per frame).
static int RADIANS
          Indicates that rotation speed should be in radians.
static int ROTATE_CCW
          Indicates that a 6DOF sensor button action should be bound to rotate the view plaform counter-clockwise about a Y axis.
static int ROTATE_CW
          Indicates that a 6DOF sensor button action should be bound to rotate the view platform clockwise about a Y axis.
static int ROTATION
          Indicates that a 2D sensor button or read action should be bound to rotation.
static int SCALE
          Indicates that a 2D sensor button or read action should be bound to scaling.
static int SCALE_DOWN
          Indicates that a 6DOF sensor button action should be bound to scaling the view platform smaller.
static int SCALE_UP
          Indicates that a 6DOF sensor button action should be bound to scaling the view platform larger.
static int SENSOR
          Indicates that rotation should occur in sensor coordinates.
static int TRANSLATE_BACKWARD
          Indicates that a 6DOF sensor button action should be bound to translating the view backward.
static int TRANSLATE_FORWARD
          Indicates that a 6DOF sensor button action should be bound to translating the view forward.
static int TRANSLATION
          Indicates that a 2D sensor button or read action should be bound to translation.
static int VIEW_PLATFORM
          Indicates that rotation should occur in view platform coordinates.
static int VIRTUAL_UNITS
          Indicates that translation speed is in virtual world units.
static int VWORLD_FIXED
          Indicates that rotation or scale should be about a fixed point in virtual world coordinates.
 
Fields inherited from class com.sun.j3d.utils.behaviors.vp.ViewPlatformBehavior
homeTransform, targetTG, vp
 
Fields inherited from class javax.media.j3d.Node
ALLOW_AUTO_COMPUTE_BOUNDS_READ, ALLOW_AUTO_COMPUTE_BOUNDS_WRITE, ALLOW_BOUNDS_READ, ALLOW_BOUNDS_WRITE, ALLOW_COLLIDABLE_READ, ALLOW_COLLIDABLE_WRITE, ALLOW_LOCAL_TO_VWORLD_READ, ALLOW_LOCALE_READ, ALLOW_PARENT_READ, ALLOW_PICKABLE_READ, ALLOW_PICKABLE_WRITE, ENABLE_COLLISION_REPORTING, ENABLE_PICK_REPORTING
 
Constructor Summary
WandViewBehavior()
          Parameterless constructor for this behavior.
WandViewBehavior(Sensor sensor6D, Sensor sensor2D, int echoType, double echoSize)
          Creates a new instance with the specified sensors and echo parameters.
WandViewBehavior(Sensor sensor6D, Sensor sensor2D, TransformGroup echo)
          Creates a new instance with the specified sensors and a 6DOF sensor echo parented by the specified TransformGroup.
WandViewBehavior(Sensor sensor6D, Sensor sensor2D, View view, TransformGroup viewTransform, Transform3D homeTransform, TransformGroup echo)
          Creates a new instance with the specified sensors and a 6DOF sensor echo parented by the specified TransformGroup.
 
Method Summary
 void AccelerationTime(java.lang.Object[] time)
          Property which sets the time interval for accelerating to the translation, rotation, or scale speeds and for transitioning between the normal and fast translation speeds.
 void ButtonAction2D(java.lang.Object[] action)
          Property which sets a button action for the 2D valuator.
 void ButtonAction6D(java.lang.Object[] action)
          Property which sets a button action for the 6DOF sensor.
protected  void configureEcho()
          Creates a 6DOF sensor echo according to configuration parameters.
protected  void configureSensorActions()
          Creates the sensor listeners for a 6DOF sensor and/or a 2D valuator sensor using the predefined button and read listeners and the configured action bindings.
 void ConstantSpeedTime(java.lang.Object[] time)
          Property which sets the time interval for which the translation occurs at the normal speed.
 void EchoColor(java.lang.Object[] color)
          Property which sets the color of the 6DOF sensor echo.
 void EchoSize(java.lang.Object[] echoSize)
          Property which sets the size of the 6DOF sensor echo in physical meters.
 void EchoTransparency(java.lang.Object[] transparency)
          Property which sets the 6DOF sensor echo transparency.
 void EchoType(java.lang.Object[] type)
          Property which sets the 6DOF sensor echo type.
 void FastSpeedFactor(java.lang.Object[] factor)
          Property which sets the fast translation speed factor.
 double getAccelerationTime()
          Gets the time interval for accelerating to normal speed and for transitioning between the normal and fast translation speeds.
 int getButtonAction2D(int button)
          Gets the action associated with the specified button on the 2D valuator.
 int getButtonAction6D(int button)
          Gets the action associated with the specified button on the 6DOF sensor.
 double getConstantSpeedTime()
          Gets the time interval for which the translation occurs at the normal speed.
 void getEchoColor(Color3f color)
          Gets the 6DOF sensor echo color.
 Shape3D getEchoGeometry()
          Gets the Shape3D defining the 6DOF sensor's echo geometry and appearance.
 double getEchoSize()
          Gets the size of the 6DOF sensor echo in meters.
 TransformGroup getEchoTransformGroup()
          Gets the transform group containing a 6DOF sensor's echo geometry.
 float getEchoTransparency()
          Gets the 6DOF sensor echo transparency value.
 int getEchoType()
          Gets the echo type.
 double getFastSpeedFactor()
          Gets the factor by which the normal translation speed is multiplied after the constant speed time interval.
 int getMatrixXIndex2D()
          Gets the index where the X value of a 2D valuator read matrix can be found.
 int getMatrixYIndex2D()
          Gets the index where the Y value of a 2D valuator read matrix can be found.
 void getNominalSensorRotation(Transform3D t3d)
          Gets the nominal sensor transform.
 int getReadAction2D()
          Gets the configured 2D valuator read action.
 int getReadAction6D()
          Gets the configured 6DOF sensor read action.
 int getResetViewButtonCount2D()
          Gets the number of buttons to be pressed simultaneously on the 2D valuator in order to reset the view back to the home transform.
 int getResetViewButtonCount6D()
          Gets the number of buttons to be pressed simultaneously on the 6DOF sensor in order to reset the view back to the home transform.
 int getRotationCoords()
          Gets the rotation coordinate system.
 double getRotationSpeed()
          Gets the rotation speed.
 int getRotationTimeBase()
          Gets the time base for rotation speed.
 int getRotationUnits()
          Gets the rotation speed units
 double getScaleSpeed()
          Gets the scaling speed.
 int getScaleTimeBase()
          Gets the time base for scaling speed.
 Sensor getSensor2D()
          Returns a reference to the 2D valuator used for manipulating the view platform.
 Sensor getSensor6D()
          Returns a reference to the 6DOF sensor used for manipulating the view platform.
 SensorEventAgent getSensorEventAgent()
          Gets the SensorEventAgent used by this behavior.
 double getThreshold2D()
          Gets the 2D valuator threshold.
 void getTransformCenter(Point3d center)
          Gets the rotation/scale center in virtual world coordinates.
 int getTransformCenterSource()
          Gets the rotation/scale center source.
 double getTranslationSpeed()
          Gets the normal speed at which to translate the view platform.
 int getTranslationTimeBase()
          Gets the time base for translation speed.
 int getTranslationUnits()
          Gets the translation speed units.
 void initialize()
          Initializes and configures this behavior.
 void MatrixIndices2D(java.lang.Object[] indices)
          Property which specifies where to find the X and Y values in the matrix read generated by a 2D valuator.
 void NominalSensorRotation(java.lang.Object[] matrix)
          Property which sets the nominal sensor rotation.
 void processStimulus(java.util.Enumeration criteria)
          Processes a stimulus meant for this behavior.
 void ReadAction2D(java.lang.Object[] action)
          Property which sets the action to be bound to 2D valuator reads.
 void ReadAction6D(java.lang.Object[] action)
          Property which sets the action to be bound to 6DOF sensor reads.
 void ResetViewButtonCount2D(java.lang.Object[] count)
          Property which sets the number of buttons to be pressed simultaneously on the 2D valuator in order to reset the view back to the home transform.
 void ResetViewButtonCount6D(java.lang.Object[] count)
          Property which sets the number of buttons to be pressed simultaneously on the 6DOF sensor in order to reset the view back to the home transform.
 void RotationCoords(java.lang.Object[] coords)
          Property which sets the rotation coordinate system.
 void RotationSpeed(java.lang.Object[] speed)
          Property which sets the rotation speed.
 void ScaleSpeed(java.lang.Object[] speed)
          Property which sets the scaling speed.
 void Sensor2D(java.lang.Object[] sensor)
          Property which sets a 2D sensor for manipulating the view platform.
 void Sensor6D(java.lang.Object[] sensor)
          Property which sets a 6DOF sensor for manipulating the view platform.
 void setAccelerationTime(double time)
          Sets the time interval for accelerating to the translation, rotation, or scale speeds and for transitioning between the normal and fast translation speeds.
 void setButtonAction2D(int button, int action)
          Sets a button action for the 2D valuator.
 void setButtonAction6D(int button, int action)
          Sets a button action for the 6DOF sensor.
 void setConstantSpeedTime(double time)
          Sets the time interval for which the translation occurs at the normal speed.
 void setEchoColor(Color3f color)
          Sets the color of the 6DOF sensor echo.
 void setEchoSize(double echoSize)
          Sets the size of the 6DOF sensor echo in physical meters.
 void setEchoTransformGroup(TransformGroup echo)
          Sets the transform group containing a 6DOF sensor's echo geometry.
 void setEchoTransparency(float transparency)
          Sets the 6DOF sensor echo transparency.
 void setEchoType(int type)
          Sets the 6DOF sensor echo type.
 void setEnable(boolean enable)
          Enables or disables this behavior.
 void setFastSpeedFactor(double factor)
          Sets the fast translation speed factor.
 void setMatrixIndices2D(int xIndex, int yIndex)
          Specifies where to find the X and Y values in the matrix read generated by a 2D valuator.
 void setNominalSensorRotation(Transform3D transform)
          Sets the nominal sensor transform.
 void setReadAction2D(int action)
          Sets the action to be bound to 2D valuator reads.
 void setReadAction6D(int action)
          Sets the action to be bound to 6DOF sensor reads.
 void setResetViewButtonCount2D(int count)
          Sets the number of buttons to be pressed simultaneously on the 2D valuator in order to reset the view back to the home transform.
 void setResetViewButtonCount6D(int count)
          Sets the number of buttons to be pressed simultaneously on the 6DOF sensor in order to reset the view back to the home transform.
 void setRotationCoords(int coords)
          Sets the rotation coordinate system.
 void setRotationSpeed(double speed, int units, int timeBase)
          Sets the rotation speed.
 void setScaleSpeed(double speed, int timeBase)
          Sets the scaling speed.
 void setThreshold2D(double threshold)
          Sets the threshold for 2D valuator reads.
 void setTransformCenter(Point3d center)
          Sets the center of rotation and scale if setTransformCenterSource is called with VWORLD_FIXED or if a 6DOF sensor is not specified.
 void setTransformCenterSource(int source)
          Sets the source of the center of rotation and scale.
 void setTranslationSpeed(double speed, int units, int timeBase)
          Sets the normal translation speed.
 void setViewingPlatform(ViewingPlatform vp)
          Sets the ViewingPlatform for this behavior.
 void Threshold2D(java.lang.Object[] threshold)
          Property which sets the threshold for 2D valuator reads.
 void TransformCenter(java.lang.Object[] center)
          Property which sets the center of rotation and scale if the TransformCenterSource property is VworldFixed or if a 6DOF sensor is not specified.
 void TransformCenterSource(java.lang.Object[] source)
          Property which sets the source of the center of rotation and scale.
 void TranslationSpeed(java.lang.Object[] speed)
          Property which sets the normal translation speed.
protected  void updateEcho(Sensor sensor, Transform3D sensorToVworld)
          Updates the echo position and orientation.
 
Methods inherited from class com.sun.j3d.utils.behaviors.vp.ViewPlatformBehavior
getHomeTransform, getViewingPlatform, goHome, setHomeTransform
 
Methods inherited from class javax.media.j3d.Behavior
getEnable, getNumSchedulingIntervals, getSchedulingBoundingLeaf, getSchedulingBounds, getSchedulingInterval, getView, getWakeupCondition, postId, setSchedulingBoundingLeaf, setSchedulingBounds, setSchedulingInterval, updateNodeReferences, wakeupOn
 
Methods inherited from class javax.media.j3d.Node
cloneNode, cloneTree, cloneTree, cloneTree, cloneTree, cloneTree, cloneTree, duplicateNode, getBounds, getBoundsAutoCompute, getCollidable, getLocale, getLocalToVworld, getLocalToVworld, getParent, getPickable, setBounds, setBoundsAutoCompute, setCollidable, setPickable
 
Methods inherited from class javax.media.j3d.SceneGraphObject
clearCapability, clearCapabilityIsFrequent, duplicateSceneGraphObject, getCapability, getCapabilityIsFrequent, getName, getUserData, isCompiled, isLive, setCapability, setCapabilityIsFrequent, setName, setUserData, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

NONE

public static final int NONE
Indicates a null configuration choice.

See Also:
Constant Field Values

GRAB_VIEW

public static final int GRAB_VIEW
Indicates that a 6DOF sensor button action should be bound to grabbing the view. The default is button 0.

See Also:
Constant Field Values

TRANSLATE_FORWARD

public static final int TRANSLATE_FORWARD
Indicates that a 6DOF sensor button action should be bound to translating the view forward. The default is button 1.

See Also:
Constant Field Values

TRANSLATE_BACKWARD

public static final int TRANSLATE_BACKWARD
Indicates that a 6DOF sensor button action should be bound to translating the view backward. The default is button 2.

See Also:
Constant Field Values

ROTATE_CCW

public static final int ROTATE_CCW
Indicates that a 6DOF sensor button action should be bound to rotate the view plaform counter-clockwise about a Y axis.

See Also:
Constant Field Values

ROTATE_CW

public static final int ROTATE_CW
Indicates that a 6DOF sensor button action should be bound to rotate the view platform clockwise about a Y axis.

See Also:
Constant Field Values

SCALE_UP

public static final int SCALE_UP
Indicates that a 6DOF sensor button action should be bound to scaling the view platform larger.

See Also:
Constant Field Values

SCALE_DOWN

public static final int SCALE_DOWN
Indicates that a 6DOF sensor button action should be bound to scaling the view platform smaller.

See Also:
Constant Field Values

TRANSLATION

public static final int TRANSLATION
Indicates that a 2D sensor button or read action should be bound to translation.

See Also:
Constant Field Values

SCALE

public static final int SCALE
Indicates that a 2D sensor button or read action should be bound to scaling.

See Also:
Constant Field Values

ROTATION

public static final int ROTATION
Indicates that a 2D sensor button or read action should be bound to rotation. The default is to bind rotation to the 2D sensor reads.

See Also:
Constant Field Values

PER_FRAME

public static final int PER_FRAME
Indicates that translation, rotation, or scaling speeds are per frame.

See Also:
Constant Field Values

PER_SECOND

public static final int PER_SECOND
Use to indicate that translation, rotation, or scaling speeds are per second. This is the default.

See Also:
Constant Field Values

VIRTUAL_UNITS

public static final int VIRTUAL_UNITS
Indicates that translation speed is in virtual world units.

See Also:
Constant Field Values

PHYSICAL_METERS

public static final int PHYSICAL_METERS
Indicates that translation speed is in physical world units (meters per second or per frame). This is the default.

See Also:
Constant Field Values

RADIANS

public static final int RADIANS
Indicates that rotation speed should be in radians.

See Also:
Constant Field Values

DEGREES

public static final int DEGREES
Indicates that rotation speed should be in degrees. This is the default.

See Also:
Constant Field Values

VIEW_PLATFORM

public static final int VIEW_PLATFORM
Indicates that rotation should occur in view platform coordinates.

See Also:
Constant Field Values

HEAD

public static final int HEAD
Indicates that rotation should occur in head coordinates.

See Also:
Constant Field Values

SENSOR

public static final int SENSOR
Indicates that rotation should occur in sensor coordinates. This is the default.

See Also:
Constant Field Values

VWORLD_FIXED

public static final int VWORLD_FIXED
Indicates that rotation or scale should be about a fixed point in virtual world coordinates.

See Also:
Constant Field Values

HOTSPOT

public static final int HOTSPOT
Indicates that rotation or scale should be about a 6DOF sensor hotspot. This is the default.

See Also:
Constant Field Values

ECHO

public static final int ECHO
Indicates that the 6DOF sensor read action should be bound to displaying the sensor's echo in the virtual world. This is the default.

See Also:
Constant Field Values

GNOMON

public static final int GNOMON
Indicates that the echo type is a gnomon displaying the directions of the sensor's local coordinate system axes at the location of the sensor's hotspot.

See Also:
Constant Field Values

BEAM

public static final int BEAM
Indicates that the echo type is a beam extending from the origin of the sensor's local coordinate system to its hotspot.

See Also:
Constant Field Values
Constructor Detail

WandViewBehavior

public WandViewBehavior()
Parameterless constructor for this behavior. This is called when this behavior is instantiated from a configuration file.

Syntax:
(NewViewPlatformBehavior <name> com.sun.j3d.utils.behaviors.vp.WandViewBehavior)


WandViewBehavior

public WandViewBehavior(Sensor sensor6D,
                        Sensor sensor2D,
                        int echoType,
                        double echoSize)
Creates a new instance with the specified sensors and echo parameters. At least one sensor must be non-null.

This constructor should only be used if either SimpleUniverse or ConfiguredUniverse is used to set up the view side of the scene graph, or if it is otherwise to be attached to a ViewingPlatform. If this behavior is not instantiated from a configuration file then it must then be explicitly attached to a ViewingPlatform instance with the ViewingPlatform.setViewPlatformBehavior method.

Parameters:
sensor6D - a six degree of freedom sensor which generates reads relative to the tracker base in physical units; may be null
sensor2D - 2D valuator which generates X and Y reads ranging from [-1.0 .. +1.0]; may be null
echoType - either GNOMON, BEAM, or NONE for the 6DOF sensor echo
echoSize - the width of the 6DOF sensor echo in physical meters; ignored if echoType is NONE

WandViewBehavior

public WandViewBehavior(Sensor sensor6D,
                        Sensor sensor2D,
                        TransformGroup echo)
Creates a new instance with the specified sensors and a 6DOF sensor echo parented by the specified TransformGroup. At least one sensor must be non-null.

This constructor should only be used if either SimpleUniverse or ConfiguredUniverse is used to set up the view side of the scene graph, or if it is otherwise to be attached to a ViewingPlatform. If this behavior is not instantiated from a configuration file then it must then be explicitly attached to a ViewingPlatform instance with the ViewingPlatform.setViewPlatformBehavior method.

If the echo TransformGroup is non-null, it will be added to a new BranchGroup and attached to the ViewingPlatform, where its transform will be updated in response to the sensor reads. Capabilities to allow writing its transform and to read, write, and extend its children will be set. The echo geometry is assumed to incorporate the position and orientation of the 6DOF sensor hotspot.

Parameters:
sensor6D - a six degree of freedom sensor which generates reads relative to the tracker base in physical units; may be null
sensor2D - 2D valuator which generates X and Y reads ranging from [-1.0 .. +1.0]; may be null
echo - a TransformGroup containing the visible echo which will track the 6DOF sensor's position and orientation, or null for no echo

WandViewBehavior

public WandViewBehavior(Sensor sensor6D,
                        Sensor sensor2D,
                        View view,
                        TransformGroup viewTransform,
                        Transform3D homeTransform,
                        TransformGroup echo)
Creates a new instance with the specified sensors and a 6DOF sensor echo parented by the specified TransformGroup. At least one sensor must be non-null.

This constructor should only be used if SimpleUniverse or ConfiguredUniverse is not used to set up the view side of the scene graph. The application must set up the view side itself and supply references to the View and the TransformGroup containing the view platform transform. ViewingPlatform.setViewPlatformBehavior must not be called, and this behavior must be explicitly added to the virtual universe by the application.

If the echo TransformGroup is non-null, it will only be used to update its associated transform with the position and orientation of a 6DOF sensor (if supplied). The application is responsible for adding the echo to the virtual universe. The echo geometry is assumed to incorporate the position and orientation of the 6DOF sensor hotspot.

Parameters:
sensor6D - a six degree of freedom sensor which generates reads relative to the tracker base in physical units; may be null
sensor2D - 2D valuator which generates X and Y reads ranging from [-1.0 .. +1.0]; may be null
view - a reference to the View attached to the ViewPlatform to be manipulated by this behavior
viewTransform - a TransformGroup containing the view platform transform; appropriate capabilities to update the transform must be set
homeTransform - a Transform3D containing the view transform to be used when the view is reset; may be null for identity
echo - a TransformGroup containing the visible echo which will track the 6DOF sensor's position and orientation, or null for no echo; appropriate capabilities to update the transform must be set
Method Detail

initialize

public void initialize()
Initializes and configures this behavior. NOTE: Applications should not call this method. It is called by the Java 3D behavior scheduler.

Specified by:
initialize in class Behavior

processStimulus

public void processStimulus(java.util.Enumeration criteria)
Processes a stimulus meant for this behavior. NOTE: Applications should not call this method. It is called by the Java 3D behavior scheduler.

Specified by:
processStimulus in class Behavior
Parameters:
criteria - an enumeration of triggered wakeup criteria for this behavior

setEnable

public void setEnable(boolean enable)
Enables or disables this behavior. The default state is enabled.

Overrides:
setEnable in class Behavior
Parameters:
enable - true or false to enable or disable this behavior

setViewingPlatform

public void setViewingPlatform(ViewingPlatform vp)
Sets the ViewingPlatform for this behavior. If a subclass overrides this method, it must call super.setViewingPlatform(vp). NOTE: Applications should not call this method. It is called by the ViewingPlatform.

Overrides:
setViewingPlatform in class ViewPlatformBehavior
Parameters:
vp - the target ViewingPlatform for this behavior

configureSensorActions

protected void configureSensorActions()
Creates the sensor listeners for a 6DOF sensor and/or a 2D valuator sensor using the predefined button and read listeners and the configured action bindings.

This is invoked the first time initialize is called. This method can be overridden by subclasses to modify the configured bindings or introduce other configuration parameters.


configureEcho

protected void configureEcho()
Creates a 6DOF sensor echo according to configuration parameters. This is done only if a 6DOF sensor has been specified, the 6DOF sensor read action has been set to echo the sensor position, the echo transform group has not already been set, and a ViewingPlatform is in use. This is invoked the first time initialize is called to set this behavior live, but before the echo transform group is added to a BranchGroup and made live. This method can be overridden to support other echo geometry.


updateEcho

protected void updateEcho(Sensor sensor,
                          Transform3D sensorToVworld)
Updates the echo position and orientation. The echo is placed at the sensor hotspot position if applicable. This implementation assumes the hotspot position and orientation have been incorporated into the echo geometry.

Parameters:
sensor - the sensor to be echoed
sensorToVworld - transform from sensor coordinates to virtual world coordinates
See Also:
setEchoType(int), setEchoSize(double), setReadAction6D(int), SensorGnomonEcho, SensorBeamEcho

Sensor6D

public void Sensor6D(java.lang.Object[] sensor)
Property which sets a 6DOF sensor for manipulating the view platform. This sensor must generate 6 degree of freedom orientation and position data in physical meters relative to the sensor's tracker base.

This property is set in the configuration file. The first command form assumes that a ViewingPlatform is being used and that the sensor name can be looked up from a ConfiguredUniverse reference retrieved from ViewingPlatform.getUniverse. The second form is preferred and accepts the Sensor reference directly.

Syntax:
(ViewPlatformBehaviorProperty <name> Sensor6D <sensorName>)

Alternative Syntax:
(ViewPlatformBehaviorProperty <name> Sensor6D (Sensor <sensorName>))

Parameters:
sensor - array of length 1 containing a String or a Sensor

getSensor6D

public Sensor getSensor6D()
Returns a reference to the 6DOF sensor used for manipulating the view platform.

Returns:
the 6DOF sensor

Sensor2D

public void Sensor2D(java.lang.Object[] sensor)
Property which sets a 2D sensor for manipulating the view platform. This is intended to support devices which incorporate a separate 2D valuator along with the 6DOF sensor. The X and Y values from the valuator should have a continuous range from -1.0 to +1.0, although rotation, translation, and scaling speeds can be scaled to compensate for a different range. The X and Y values are found in the sensor's read matrix at the indices specified by the MatrixIndices2D property, with defaults of 3 and 7 (the X and Y translation components) respectively.

This property is set in the configuration file. The first command form assumes that a ViewingPlatform is being used and that the sensor name can be looked up from a ConfiguredUniverse reference retrieved from ViewingPlatform.getUniverse. The second form is preferred and accepts the Sensor reference directly.

Syntax:
(ViewPlatformBehaviorProperty <name> Sensor2D <sensorName>)

Alternative Syntax:
(ViewPlatformBehaviorProperty <name> Sensor2D (Sensor <sensorName>))

Parameters:
sensor - array of length 1 containing a String or a Sensor

getSensor2D

public Sensor getSensor2D()
Returns a reference to the 2D valuator used for manipulating the view platform.

Returns:
the 2D valuator

ButtonAction6D

public void ButtonAction6D(java.lang.Object[] action)
Property which sets a button action for the 6DOF sensor. The choices are TranslateForward, TranslateBackward, GrabView, RotateCCW, RotateCW, ScaleUp, ScaleDown, or None. By default, button 0 is bound to GrabView, button 1 is bound to TranslateForward, and button 2 is bound to TranslateBackward. If there are fewer than three buttons available, then the default button actions with the lower button indices have precedence. A value of None indicates that no default action is to be associated with the specified button.

TranslateForward moves the view platform forward along the direction the sensor is pointing. TranslateBackward does the same, in the opposite direction. GrabView directly manipulates the view by moving it in inverse response to the sensor's position and orientation. RotateCCW and RotateCW rotate about a Y axis, while ScaleUp and ScaleDown scale the view platform larger and smaller.

Specifying a button index that is greater than that available with the 6DOF sensor will result in an ArrayOutOfBoundsException when the behavior is initialized or attached to a ViewingPlatform.

This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> ButtonAction6D <button index> [GrabView | TranslateForward | TranslateBackward | RotateCCW | RotateCW | ScaleUp | ScaleDown | None])

Parameters:
action - array of length 2 containing a Double and a String.
See Also:
setButtonAction6D(int, int), Sensor6D, TranslationSpeed, AccelerationTime, ConstantSpeedTime, FastSpeedFactor, RotationSpeed, RotationCoords, ScaleSpeed, TransformCenterSource, TransformCenter, WandViewBehavior.GrabViewListener6D, WandViewBehavior.TranslationListener6D, WandViewBehavior.RotationListener6D, WandViewBehavior.ScaleListener6D

setButtonAction6D

public void setButtonAction6D(int button,
                              int action)
Sets a button action for the 6DOF sensor. The choices are TRANSLATE_FORWARD, TRANSLATE_BACKWARD, GRAB_VIEW, ROTATE_CCW, ROTATE_CW, SCALE_UP, SCALE_DOWN, or NONE. By default, button 0 is bound to GRAB_VIEW, button 1 is bound to TRANSLATE_FORWARD, and button 2 is bound to TRANSLATE_BACKWARD. If there are fewer than three buttons available, then the default button actions with the lower button indices have precedence. A value of NONE indicates that no default action is to be associated with the specified button.

TRANSLATE_FORWARD moves the view platform forward along the direction the sensor is pointing. TRANSLATE_BACKWARD does the same, in the opposite direction. GRAB_VIEW directly manipulates the view by moving it in inverse response to the sensor's position and orientation. ROTATE_CCW and ROTATE_CW rotate about a Y axis, while SCALE_UP and SCALE_DOWN scale the view platform larger and smaller.

Specifying a button index that is greater that that available with the 6DOF sensor will result in an ArrayOutOfBoundsException when the behavior is initialized or attached to a ViewingPlatform.

This method only configures the button listeners pre-defined by this behavior. For complete control over the button actions, access the SensorEventAgent used by this behavior directly.

Parameters:
button - index of the button to bind
action - either TRANSLATE_FORWARD, TRANSLATE_BACKWARD, GRAB_VIEW, ROTATE_CCW, ROTATE_CW, SCALE_UP, SCALE_DOWN, or NONE
See Also:
setTranslationSpeed(double, int, int), setAccelerationTime(double), setConstantSpeedTime(double), setFastSpeedFactor(double), setRotationSpeed(double, int, int), setRotationCoords(int), setScaleSpeed(double, int), setTransformCenterSource(int), setTransformCenter(javax.vecmath.Point3d), getSensorEventAgent(), WandViewBehavior.GrabViewListener6D, WandViewBehavior.TranslationListener6D, WandViewBehavior.RotationListener6D, WandViewBehavior.ScaleListener6D

getButtonAction6D

public int getButtonAction6D(int button)
Gets the action associated with the specified button on the 6DOF sensor.

Returns:
the action associated with the button

ReadAction2D

public void ReadAction2D(java.lang.Object[] action)
Property which sets the action to be bound to 2D valuator reads. This action will be performed on each frame whenever no button actions have been invoked and the valuator read value is greater than the threshold range specified by the Threshold2D property.

The X and Y values from the valuator should have a continuous range from -1.0 to +1.0, although speeds can be scaled to compensate for a different range. The X and Y values are found in the sensor's read matrix at the indices specified by MatrixIndices2D, with defaults of 3 and 7 respectively.

The default property value of Rotation rotates the view platform in the direction the valuator is pushed. The rotation coordinate system is set by the RotationCoords property, with a default of Sensor. The rotation occurs about a point in the virtual world set by the TransformCenterSource and TransformCenter properties, with the default set to rotate about the hotspot of a 6DOF sensor, if one is available, or about the origin of the virtual world if not. The rotation speed is scaled by the valuator read value up to the maximum speed set with the RotationSpeed property; the default is 180 degrees per second.

A property value of Translation moves the view platform in the direction the valuator is pushed. The translation occurs along the X and Z basis vectors of either a 6DOF sensor or the view platform if a 6DOF sensor is not specified. The translation speed is scaled by the valuator read value up to a maximum set by the product of the TranslationSpeed and FastSpeedFactor property values.

If this property value is to Scale, then the view platform is scaled smaller or larger when the valuator is pushed forward or backward. The scaling occurs about a point in the virtual world set by the TransformCenterSource and TransformCenter properties. The scaling speed is set with the ScaleSpeed property, with a default scale factor of 2.0 per second at the extreme negative range of -1.0, and a factor of 0.5 per second at the extreme positive range of +1.0.

A value of None prevents Rotation from being bound to the 2D valuator reads.

This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> ReadAction2D [Rotation | Translation | Scale | None])

Parameters:
action - array of length 1 containing a String
See Also:
setReadAction2D(int), RotationCoords, RotationSpeed, TransformCenterSource, TransformCenter, TranslationSpeed, FastSpeedFactor, ScaleSpeed, MatrixIndices2D, WandViewBehavior.RotationListener2D, WandViewBehavior.TranslationListener2D, WandViewBehavior.ScaleListener2D

setReadAction2D

public void setReadAction2D(int action)
Sets the action to be bound to 2D valuator reads. This action will be performed on each frame whenever no button actions have been invoked and the valuator read value is greater than the threshold range specified by setThreshold2D.

The X and Y values from the valuator should have a continuous range from -1.0 to +1.0, although speeds can be scaled to compensate for a different range. The X and Y values are found in the sensor's read matrix at the indices specified by the setMatrixIndices2D method, with defaults of 3 and 7 respectively.

The default action of ROTATION rotates the view platform in the direction the valuator is pushed. The rotation coordinate system is set by setRotationCoords, with a default of SENSOR. The rotation occurs about a point in the virtual world set by setTransformCenterSource and setTransformCenter, with the default set to rotate about the hotspot of a 6DOF sensor, if one is available, or about the origin of the virtual world if not. The rotation speed is scaled by the valuator read value up to the maximum speed set with setRotationSpeed; the default is 180 degrees per second.

A value of TRANSLATION moves the view platform in the direction the valuator is pushed. The translation occurs along the X and Z basis vectors of either a 6DOF sensor or the view platform if a 6DOF sensor is not specified. The translation speed is scaled by the valuator read value up to a maximum set by the product of the setTranslationSpeed and setFastSpeedFactor values.

If the value is to SCALE, then the view platform is scaled smaller or larger when the valuator is pushed forward or backward. The scaling occurs about a point in the virtual world set by setTransformCenterSource and setTransformCenter. The scaling speed is set with setScaleSpeed, with a default scale factor of 2.0 per second at the extreme negative range of -1.0, and a factor of 0.5 per second at the extreme positive range of +1.0.

A value of NONE prevents ROTATION from being bound by default to the 2D valuator reads.

This method only configures the read listeners pre-defined by this behavior. For complete control over the read actions, access the SensorEventAgent used by this behavior directly.

Parameters:
action - either ROTATION, TRANSLATION, SCALE, or NONE
See Also:
setRotationCoords(int), setRotationSpeed(double, int, int), setTransformCenterSource(int), setTransformCenter(javax.vecmath.Point3d), setTranslationSpeed(double, int, int), setFastSpeedFactor(double), setScaleSpeed(double, int), setMatrixIndices2D(int, int), getSensorEventAgent(), WandViewBehavior.RotationListener2D, WandViewBehavior.TranslationListener2D, WandViewBehavior.ScaleListener2D

getReadAction2D

public int getReadAction2D()
Gets the configured 2D valuator read action.

Returns:
the action associated with the sensor read

ButtonAction2D

public void ButtonAction2D(java.lang.Object[] action)
Property which sets a button action for the 2D valuator. The possible values are Rotation, Translation, Scale, or None, with a default of None. These actions are the same as those for ReadAction2D.

Specifying a button index that is greater that that available with the 2D valuator will result in an ArrayOutOfBoundsException when the behavior is initialized or attached to a ViewingPlatform.

This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> ButtonAction2D <button index> [Rotation | Translation | Scale | None])

Parameters:
action - array of length 2 containing a Double and a String.
See Also:
setButtonAction2D(int, int), ReadAction2D, RotationCoords, RotationSpeed, TransformCenterSource, TransformCenter, TranslationSpeed, FastSpeedFactor, ScaleSpeed, MatrixIndices2D, WandViewBehavior.RotationListener2D, WandViewBehavior.TranslationListener2D, WandViewBehavior.ScaleListener2D

setButtonAction2D

public void setButtonAction2D(int button,
                              int action)
Sets a button action for the 2D valuator. The possible values are ROTATION, TRANSLATION, SCALE, or NONE, with a default of NONE. These actions are the same as those for setReadAction2D.

Specifying a button index that is greater that that available with the 2D valuator will result in an ArrayOutOfBoundsException when the behavior is initialized or attached to a ViewingPlatform.

This method only configures the button listeners pre-defined by this behavior. For complete control over the button actions, access the SensorEventAgent used by this behavior directly.

Parameters:
button - index of the button to bind
action - either ROTATION, TRANSLATION, SCALE, or NONE
See Also:
setReadAction2D(int), setRotationCoords(int), setRotationSpeed(double, int, int), setTransformCenterSource(int), setTransformCenter(javax.vecmath.Point3d), setTranslationSpeed(double, int, int), setFastSpeedFactor(double), setScaleSpeed(double, int), setMatrixIndices2D(int, int), getSensorEventAgent(), WandViewBehavior.RotationListener2D, WandViewBehavior.TranslationListener2D, WandViewBehavior.ScaleListener2D

getButtonAction2D

public int getButtonAction2D(int button)
Gets the action associated with the specified button on the 2D valuator.

Returns:
the action associated with the button

ReadAction6D

public void ReadAction6D(java.lang.Object[] action)
Property which sets the action to be bound to 6DOF sensor reads. This action will be performed every frame whenever a button action has not been invoked.

The default is Echo, which displays a geometric representation of the sensor's current position and orientation in the virtual world. A value of None indicates that no default action is to be applied to the sensor's read.

This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> ReadAction6D [Echo | None])

Parameters:
action - array of length 1 containing a String
See Also:
setReadAction6D(int), WandViewBehavior.EchoReadListener6D

setReadAction6D

public void setReadAction6D(int action)
Sets the action to be bound to 6DOF sensor reads. This action will be performed every frame whenever a button action has not been invoked.

The default is ECHO, which displays a geometric representation of the sensor's current position and orientation in the virtual world. A value of NONE indicates that no default action is to be associated with the sensor's read.

This method only configures the read listeners pre-defined by this behavior. For complete control over the read actions, access the SensorEventAgent used by this behavior directly.

Parameters:
action - either ECHO or NONE
See Also:
WandViewBehavior.EchoReadListener6D, getSensorEventAgent()

getReadAction6D

public int getReadAction6D()
Gets the configured 6DOF sensor read action.

Returns:
the configured 6DOF sensor read action

TranslationSpeed

public void TranslationSpeed(java.lang.Object[] speed)
Property which sets the normal translation speed. The default is 0.1 meters/second in physical units. This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> TranslationSpeed <speed> [PhysicalMeters | VirtualUnits] [PerFrame | PerSecond])

Parameters:
speed - array of length 3; first element is a Double for the speed, the second is a String for the units, and the third is a String for the time base
See Also:
setTranslationSpeed(double, int, int)

setTranslationSpeed

public void setTranslationSpeed(double speed,
                                int units,
                                int timeBase)
Sets the normal translation speed. The default is 0.1 physical meters/second.

Parameters:
speed - how fast to translate
units - either PHYSICAL_METERS or VIRTUAL_UNITS
timeBase - either PER_SECOND or PER_FRAME

getTranslationSpeed

public double getTranslationSpeed()
Gets the normal speed at which to translate the view platform.

Returns:
the normal translation speed

getTranslationUnits

public int getTranslationUnits()
Gets the translation speed units.

Returns:
the translation units

getTranslationTimeBase

public int getTranslationTimeBase()
Gets the time base for translation speed.

Returns:
the translation time base

AccelerationTime

public void AccelerationTime(java.lang.Object[] time)
Property which sets the time interval for accelerating to the translation, rotation, or scale speeds and for transitioning between the normal and fast translation speeds. The default is 1 second. This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> AccelerationTime <seconds>)

Parameters:
time - array of length 1 containing a Double
See Also:
setAccelerationTime(double)

setAccelerationTime

public void setAccelerationTime(double time)
Sets the time interval for accelerating to the translation, rotation, or scale speeds and for transitioning between the normal and fast translation speeds. The default is 1 second.

Parameters:
time - number of seconds to accelerate to normal or fast speed

getAccelerationTime

public double getAccelerationTime()
Gets the time interval for accelerating to normal speed and for transitioning between the normal and fast translation speeds.

Returns:
the acceleration time

ConstantSpeedTime

public void ConstantSpeedTime(java.lang.Object[] time)
Property which sets the time interval for which the translation occurs at the normal speed. The default is 8 seconds. This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> ConstantSpeedTime <seconds>)

Parameters:
time - array of length 1 containing a Double
See Also:
setConstantSpeedTime(double)

setConstantSpeedTime

public void setConstantSpeedTime(double time)
Sets the time interval for which the translation occurs at the normal speed. The default is 8 seconds.

Parameters:
time - number of seconds to translate at a constant speed

getConstantSpeedTime

public double getConstantSpeedTime()
Gets the time interval for which the translation occurs at the normal speed.

Returns:
the constant speed time

FastSpeedFactor

public void FastSpeedFactor(java.lang.Object[] factor)
Property which sets the fast translation speed factor. The default is 10 times the normal speed. This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> FastSpeedFactor <factor>)

Parameters:
factor - array of length 1 containing a Double
See Also:
setFastSpeedFactor(double)

setFastSpeedFactor

public void setFastSpeedFactor(double factor)
Sets the fast translation speed factor. The default is 10 times the normal speed.

Parameters:
factor - scale by which the normal translation speed is multiplied

getFastSpeedFactor

public double getFastSpeedFactor()
Gets the factor by which the normal translation speed is multiplied after the constant speed time interval.

Returns:
the fast speed factor

Threshold2D

public void Threshold2D(java.lang.Object[] threshold)
Property which sets the threshold for 2D valuator reads. The default is 0.0. It can be set higher to handle noisy valuators. This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> Threshold2D <threshold>)

Parameters:
threshold - array of length 1 containing a Double
See Also:
setThreshold2D(double)

setThreshold2D

public void setThreshold2D(double threshold)
Sets the threshold for 2D valuator reads. The default is 0.0. It can be set higher to handle noisy valuators.

Parameters:
threshold - if the absolute values of both the X and Y valuator reads are less than this value then the values are ignored

getThreshold2D

public double getThreshold2D()
Gets the 2D valuator threshold.

Returns:
the threshold value

MatrixIndices2D

public void MatrixIndices2D(java.lang.Object[] indices)
Property which specifies where to find the X and Y values in the matrix read generated by a 2D valuator. The defaults are along the translation components of the matrix, at indices 3 and 7. This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> MatrixIndices2D <X index> <Y index>)

Parameters:
indices - array of length 2 containing Doubles
See Also:
setMatrixIndices2D(int, int)

setMatrixIndices2D

public void setMatrixIndices2D(int xIndex,
                               int yIndex)
Specifies where to find the X and Y values in the matrix read generated by a 2D valuator. The defaults are along the translation components of the matrix, at indices 3 and 7.

Parameters:
xIndex - index of the X valuator value
yIndex - index of the Y valuator value

getMatrixXIndex2D

public int getMatrixXIndex2D()
Gets the index where the X value of a 2D valuator read matrix can be found.

Returns:
the X index in the read matrix

getMatrixYIndex2D

public int getMatrixYIndex2D()
Gets the index where the Y value of a 2D valuator read matrix can be found.

Returns:
the Y index in the read matrix

RotationSpeed

public void RotationSpeed(java.lang.Object[] speed)
Property which sets the rotation speed. The default is 180 degrees/second. This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> RotationSpeed <speed> [Degrees | Radians] [PerFrame | PerSecond])

Parameters:
speed - array of length 3; first element is a Double for the speed, the second is a String for the units, and the third is a String for the time base
See Also:
setRotationSpeed(double, int, int)

setRotationSpeed

public void setRotationSpeed(double speed,
                             int units,
                             int timeBase)
Sets the rotation speed. The default is 180 degrees/second.

Parameters:
speed - how fast to rotate
units - either DEGREES or RADIANS
timeBase - either PER_SECOND or PER_FRAME

getRotationSpeed

public double getRotationSpeed()
Gets the rotation speed.

Returns:
the rotation speed

getRotationUnits

public int getRotationUnits()
Gets the rotation speed units

Returns:
the rotation units

getRotationTimeBase

public int getRotationTimeBase()
Gets the time base for rotation speed.

Returns:
the rotation time base

RotationCoords

public void RotationCoords(java.lang.Object[] coords)
Property which sets the rotation coordinate system. The default is Sensor, which means that the rotation axis is parallel to the XY plane of the current orientation of a specified 6DOF sensor. A value of ViewPlatform means the rotation axis is parallel to the XY plane of the view platform. The latter is also the fallback if a 6DOF sensor is not specified. If the value is Head, then the rotation occurs in head coordinates.

This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> RotationCoords [Sensor | ViewPlatform | Head])

Parameters:
coords - array of length 1 containing a String
See Also:
setRotationCoords(int)

setRotationCoords

public void setRotationCoords(int coords)
Sets the rotation coordinate system. The default is SENSOR, which means that the rotation axis is parallel to the XY plane of the current orientation of a specified 6DOF sensor. A value of VIEW_PLATFORM means the rotation axis is parallel to the XY plane of the view platform. The latter is also the fallback if a 6DOF sensor is not specified. If the value is HEAD, then rotation occurs in head coordinates.

Parameters:
coords - either SENSOR, VIEW_PLATFORM, or HEAD

getRotationCoords

public int getRotationCoords()
Gets the rotation coordinate system.

Returns:
the rotation coordinate system

ScaleSpeed

public void ScaleSpeed(java.lang.Object[] speed)
Property which sets the scaling speed. The default is 2.0 per second, which means magnification doubles the apparent size of the virtual world every second, and minification halves the apparent size of the virtual world every second.

The scaling applied with each frame is Math.pow(scaleSpeed, frameTime), where frameTime is the time in seconds that the last frame took to render if the time base is PerSecond, or 1.0 if the time base is PerFrame. If scaling is performed with the 2D valuator, then the valuator's Y value as specified by MatrixIndices2D is an additional scale applied to the exponent. If scaling is performed by the 6DOF sensor, then the scale speed can be inverted with a negative exponent by using the appropriate listener constructor flag.

This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> ScaleSpeed <speed> [PerFrame | PerSecond])

Parameters:
speed - array of length 2; first element is a Double for the speed, and the second is a String for the time base
See Also:
setScaleSpeed(double, int)

setScaleSpeed

public void setScaleSpeed(double speed,
                          int timeBase)
Sets the scaling speed. The default is 2.0 per second, which means magnification doubles the apparent size of the virtual world every second, and minification halves the apparent size of the virtual world every second.

The scaling applied with each frame is Math.pow(scaleSpeed, frameTime), where frameTime is the time in seconds that the last frame took to render if the time base is PER_SECOND, or 1.0 if the time base is PER_FRAME. If scaling is performed with the 2D valuator, then the valuator's Y value as specified by setMatrixIndices2D is an additional scale applied to the exponent. If scaling is performed by the 6DOF sensor, then the scale speed can be inverted with a negative exponent by using the appropriate listener constructor flag.

Parameters:
speed - specifies the scale speed
timeBase - either PER_SECOND or PER_FRAME

getScaleSpeed

public double getScaleSpeed()
Gets the scaling speed.

Returns:
the scaling speed

getScaleTimeBase

public int getScaleTimeBase()
Gets the time base for scaling speed.

Returns:
the scaling time base

TransformCenterSource

public void TransformCenterSource(java.lang.Object[] source)
Property which sets the source of the center of rotation and scale. The default is Hotspot, which means the center of rotation or scale is a 6DOF sensor's current hotspot location. The alternative is VworldFixed, which uses the fixed virtual world coordinates specified by the TransformCenter property as the center. The latter is also the fallback if a 6DOF sensor is not specified. This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> TransformCenterSource [Hotspot | VworldFixed])

Parameters:
source - array of length 1 containing a String
See Also:
setTransformCenterSource(int)

setTransformCenterSource

public void setTransformCenterSource(int source)
Sets the source of the center of rotation and scale. The default is HOTSPOT, which means the center of rotation or scale is a 6DOF sensor's current hotspot location. The alternative is VWORLD_FIXED, which uses the fixed virtual world coordinates specified by setTransformCenter as the center. The latter is also the fallback if a 6DOF sensor is not specified.

The transform center source can be dynamically updated while the behavior is running.

Parameters:
source - either HOTSPOT or VWORLD_FIXED

getTransformCenterSource

public int getTransformCenterSource()
Gets the rotation/scale center source.

Returns:
the rotation/scale center source

TransformCenter

public void TransformCenter(java.lang.Object[] center)
Property which sets the center of rotation and scale if the TransformCenterSource property is VworldFixed or if a 6DOF sensor is not specified. The default is (0.0, 0.0, 0.0) in virtual world coordinates. This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> TransformCenter <Point3d>)

Parameters:
center - array of length 1 containing a Point3d
See Also:
setTransformCenter(javax.vecmath.Point3d)

setTransformCenter

public void setTransformCenter(Point3d center)
Sets the center of rotation and scale if setTransformCenterSource is called with VWORLD_FIXED or if a 6DOF sensor is not specified. The default is (0.0, 0.0, 0.0) in virtual world coordinates.

The transform center can be dynamically updated while the behavior is running.

Parameters:
center - point in virtual world coordinates about which to rotate and scale

getTransformCenter

public void getTransformCenter(Point3d center)
Gets the rotation/scale center in virtual world coordinates.

Parameters:
center - Point3d to receive a copy of the rotation/scale center

NominalSensorRotation

public void NominalSensorRotation(java.lang.Object[] matrix)
Property which sets the nominal sensor rotation. The default is the identity transform.

This behavior assumes that when a hand-held wand is pointed directly at a screen in an upright position, then its 6DOF sensor's local coordinate system axes (its basis vectors) are nominally aligned with the image plate basis vectors; specifically, that the sensor's -Z axis points toward the screen, the +Y axis points up, and the +X axis points to the right. The translation and rotation listeners provided by this behavior assume this orientation to determine the transforms to be applied to the view platform; for example, translation applies along the sensor Z axis, while rotation applies about axes defined in the sensor XY plane.

This nominal alignment may not hold true depending upon how the sensor is mounted and how the specific InputDevice supporting the sensor handles its orientation. The NominalSensorRotation property can be used to correct the alignment by specifying the rotation needed to transform vectors from the nominal sensor coordinate system, aligned with the image plate coordinate system as described above, to the sensor's actual local coordinate system.

NOTE: the nominal sensor transform applies only to the translation directions and rotation axes created by the listeners defined in this behavior; for compatibility with the core Java 3D API, sensor reads and the sensor hotspot location are still expressed in the sensor's local coordinate system.

This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> NominalSensorRotation [<Matrix4d> | <Matrix3d>])

Parameters:
matrix - array of length 1 containing a Matrix4d or Matrix3d
See Also:
setNominalSensorRotation(javax.media.j3d.Transform3D)

setNominalSensorRotation

public void setNominalSensorRotation(Transform3D transform)
Sets the nominal sensor transform. The default is the identity transform.

This behavior assumes that when a hand-held wand is pointed directly at a screen in an upright position, then its 6DOF sensor's local coordinate system axes (its basis vectors) are nominally aligned with the image plate basis vectors; specifically, that the sensor's -Z axis points toward the screen, the +Y axis points up, and the +X axis points to the right. The translation and rotation listeners provided by this behavior assume this orientation to determine the transforms to be applied to the view platform, in that translation applies along the sensor Z axis, and rotation applies about axes defined in the sensor XY plane.

This nominal alignment may not hold true depending upon how the sensor is mounted and how the specific InputDevice supporting the sensor handles its orientation. setNominalSensorRotation can be called to correct the alignment by specifying the rotation needed to transform vectors from the nominal sensor coordinate system, aligned with the image plate coordinate system as described above, to the sensor's actual local coordinate system.

NOTE: the nominal sensor transform applies only to the translation directions and rotation axes created by the listeners defined in this behavior; for compatibility with the core Java 3D API, sensor reads and the sensor hotspot location are still expressed in the sensor's local coordinate system.

Parameters:
transform - Rotates vectors from the nominal sensor coordinate system system to the sensor's local coordinate system; only the rotational components are used. May be set null for identity.

getNominalSensorRotation

public void getNominalSensorRotation(Transform3D t3d)
Gets the nominal sensor transform.

Parameters:
t3d - Transform3D to receive a copy of the nominal sensor transform

ResetViewButtonCount6D

public void ResetViewButtonCount6D(java.lang.Object[] count)
Property which sets the number of buttons to be pressed simultaneously on the 6DOF sensor in order to reset the view back to the home transform. The value must be greater than 1; the default is 3. A value of None disables this action. This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> ResetViewButtonCount6D [<count> | None])

Parameters:
count - array of length 1 containing a Double or String
See Also:
setResetViewButtonCount6D(int), ViewPlatformBehavior.setHomeTransform

setResetViewButtonCount6D

public void setResetViewButtonCount6D(int count)
Sets the number of buttons to be pressed simultaneously on the 6DOF sensor in order to reset the view back to the home transform. The value must be greater than 1; the default is 3. A value of NONE disables this action.

Parameters:
count - either NONE or button count > 1
See Also:
ViewPlatformBehavior.setHomeTransform

getResetViewButtonCount6D

public int getResetViewButtonCount6D()
Gets the number of buttons to be pressed simultaneously on the 6DOF sensor in order to reset the view back to the home transform. A value of NONE indicates this action is disabled.

Returns:
the number of buttons to press simultaneously for a view reset

ResetViewButtonCount2D

public void ResetViewButtonCount2D(java.lang.Object[] count)
Property which sets the number of buttons to be pressed simultaneously on the 2D valuator in order to reset the view back to the home transform. The value must be greater than 1; the default is None. A value of None disables this action. This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> ResetViewButtonCount2D [<count> | None])

Parameters:
count - array of length 1 containing a Double or String
See Also:
setResetViewButtonCount2D(int), ViewPlatformBehavior.setHomeTransform

setResetViewButtonCount2D

public void setResetViewButtonCount2D(int count)
Sets the number of buttons to be pressed simultaneously on the 2D valuator in order to reset the view back to the home transform. The value must be greater than 1; the default is NONE. A value of NONE disables this action.

Parameters:
count - either NONE or button count > 1
See Also:
ViewPlatformBehavior.setHomeTransform

getResetViewButtonCount2D

public int getResetViewButtonCount2D()
Gets the number of buttons to be pressed simultaneously on the 2D valuator in order to reset the view back to the home transform. A value of NONE indicates this action is disabled.

Returns:
the number of buttons to press simultaneously for a view reset

EchoType

public void EchoType(java.lang.Object[] type)
Property which sets the 6DOF sensor echo type. The default is Gnomon, which displays an object with points indicating the direction of each of the sensor's coordinate system axes at the location of the sensor's hotspot. The alternative is Beam, which displays a beam from the sensor's origin to the location of the sensor's hotspot; the hotspot must not be (0, 0, 0) or an IllegalArgumentException will result. The width of each of these echo types is specified by the EchoSize property. The EchoType property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> EchoType [Gnomon | Beam | None])

Parameters:
type - array of length 1 containing a String
See Also:
setEchoType(int)

setEchoType

public void setEchoType(int type)
Sets the 6DOF sensor echo type. The default is GNOMON, which displays an object with points indicating the direction of each of the sensor's coordinate axes at the location of the sensor's hotspot. The alternative is BEAM, which displays a beam from the sensor's origin to the location of the sensor's hotspot; the hotspot must not be (0, 0, 0) or an IllegalArgumentException will result. The width of each of these echo types is specified by setEchoSize.

Parameters:
type - GNOMON, BEAM, or NONE are recognized

getEchoType

public int getEchoType()
Gets the echo type.

Returns:
the echo type

EchoSize

public void EchoSize(java.lang.Object[] echoSize)
Property which sets the size of the 6DOF sensor echo in physical meters. This is used for the width of the gnomon and beam echoes. The default is 1 centimeter. This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> EchoSize <size>)

Parameters:
echoSize - array of length 1 containing a Double
See Also:
setEchoSize(double)

setEchoSize

public void setEchoSize(double echoSize)
Sets the size of the 6DOF sensor echo in physical meters. This is used for the width of the gnomon and beam echoes. The default is 1 centimeter.

Parameters:
echoSize - the size in meters

getEchoSize

public double getEchoSize()
Gets the size of the 6DOF sensor echo in meters.

Returns:
the echo size

EchoColor

public void EchoColor(java.lang.Object[] color)
Property which sets the color of the 6DOF sensor echo. The default is white. This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> EchoColor <red> <green> <blue>)

Parameters:
color - array of length 3 containing Doubles
See Also:
setEchoColor(javax.vecmath.Color3f)

setEchoColor

public void setEchoColor(Color3f color)
Sets the color of the 6DOF sensor echo. The default is white. This can be called to set the color before or after the echo geometry is created.

Parameters:
color - the echo color

getEchoColor

public void getEchoColor(Color3f color)
Gets the 6DOF sensor echo color.

Parameters:
color - the Color3f into which to copy the echo color

EchoTransparency

public void EchoTransparency(java.lang.Object[] transparency)
Property which sets the 6DOF sensor echo transparency. The default is opaque. A value of 0.0 is fully opaque and 1.0 is fully transparent. This property is set in the configuration file read by ConfiguredUniverse.

Syntax:
(ViewPlatformBehaviorProperty <name> EchoTransparency <transparency>)

Parameters:
transparency - array of length 1 containing a Double
See Also:
setEchoTransparency(float)

setEchoTransparency

public void setEchoTransparency(float transparency)
Sets the 6DOF sensor echo transparency. The default is opaque. A value of 0.0 is fully opaque and 1.0 is fully transparent. This can be called to set the transparency before or after the echo geometry is created.

Parameters:
transparency - the transparency value

getEchoTransparency

public float getEchoTransparency()
Gets the 6DOF sensor echo transparency value.

Returns:
the transparency value

setEchoTransformGroup

public void setEchoTransformGroup(TransformGroup echo)
Sets the transform group containing a 6DOF sensor's echo geometry. This is used to specify a custom echo. Its transform will be manipulated to represent the position and orientation of the 6DOF sensor. Capabilities to allow writing its transform and to read, write, and extend its children will be set.

This method must be called before the behavior is made live in order to have an effect.

Parameters:
echo - the TransformGroup containing the echo geometry

getEchoTransformGroup

public TransformGroup getEchoTransformGroup()
Gets the transform group containing a 6DOF sensor's echo geometry. Capabilities to write its transform and read, write, and extend its children are granted.

Returns:
the echo's transform group

getEchoGeometry

public Shape3D getEchoGeometry()
Gets the Shape3D defining the 6DOF sensor's echo geometry and appearance. The returned Shape3D allows appearance read and write. If a custom echo was supplied by providing the echo transform group directly then the return value will be null.

Returns:
the echo geometry, or null if a custom echo was supplied

getSensorEventAgent

public SensorEventAgent getSensorEventAgent()
Gets the SensorEventAgent used by this behavior. Sensor event generation is delegated to this agent. This can be accessed to manipulate the sensor button and read action bindings directly.

Returns:
the sensor event agent


Copyright (c) 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.