Routines (alphabetical) > Object Classes > Miscellaneous Object Classes > TrackBall::Update

# TrackBall::Update

Syntax | Arguments | Keywords | Example | Version History

The TrackBall::Update function method updates the state of the TrackBall object based on the information contained in the input widget event structure. The return value is nonzero if a transformation matrix is calculated as a result of the event, or zero otherwise.

## Syntax

Result = Obj->[TrackBall::]Update( sEvent [, MOUSE={1 | 2 | 4}] [, TRANSFORM=variable] [, /TRANSLATE] )

## Arguments

### sEvent

The widget event structure.

## Keywords

### MOUSE

Set this keyword to an integer value to indicate which mouse button to honor for trackball events. Valid values include:

- 1 = Left mouse button (the default)
- 2 = Middle mouse button
- 4 = Right mouse button

### TRANSFORM

Set this keyword to a named variable that will contain a 4 x 4 element floating-point array if a new transformations matrix is calculated as a result of the widget event.

### TRANSLATE

Set this keyword to indicate that the trackball movement should be constrained to translation in the X-Y plane rather than rotation about an axis.

## Example

The example code below provides a skeleton for a widget-based application that uses the TrackBall object to interactively change the orientation of graphics.

Create a trackball centered on a 512x512 pixel drawable area, and a view containing the model to be manipulated:

xdim = 512

ydim = 512

wBase = WIDGET_BASE()

wDraw = WIDGET_DRAW(wBase, XSIZE=xdim, YSIZE=ydim, $

GRAPHICS_LEVEL=2, /BUTTON_EVENTS, $

/MOTION_EVENTS, /EXPOSE_EVENTS, RETAIN=0 )

WIDGET_CONTROL, wBase, /REALIZE

WIDGET_CONTROL, wDraw, GET_VALUE=oWindow

oTrackball = OBJ_NEW('Trackball', [xdim/2.,ydim/2.], xdim/2.)

oView = OBJ_NEW('IDLgrView')

oModel = OBJ_NEW('IDLgrModel')

oView->Add, oModel

XMANAGER, 'TrackEx', wBase

You must handle the trackball updates in the widget event-handling code. As the trackball transformation changes, update the transformation for the model object, and redraw the view:

PRO TrackEx_Event, sEvent

...

bHaveXform = oTrackball->Update( sEvent, TRANSFORM=TrackXform )

IF (bHaveXform) THEN BEGIN

oModel->GetProperty, TRANSFORM=ModelXform

oModel->SetProperty, TRANSFORM=ModelXform # TrackXform

oWindow->Draw, oView

ENDIF

...

END

For a complete example, see the file `surf_track.pro`, located in the `examples/doc/objects` subdirectory of the IDL distribution. Run the example procedure by entering `surf_track` at the IDL command prompt or view the file in an IDL Editor window by entering `.EDIT surf_track.pro`.

The SURF_TRACK procedure uses IDL widgets to create a graphical user interface to an object tree, creates a surface object from user-specified data (or from default data, if none is specified), and places the surface object in an IDL draw widget. The SURF_TRACK interface allows the user to specify several attributes of the object hierarchy via pulldown menus.

## Version History

5.0 | Introduced