Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

SoDragger Class Reference

The SoDragger class is the base class for all draggers. More...

#include <Inventor/draggers/SoDragger.h>

Inheritance diagram for SoDragger::

SoInteractionKit SoBaseKit SoNode SoFieldContainer SoBase SoCenterballDragger SoDirectionalLightDragger SoDragPointDragger SoHandleBoxDragger SoJackDragger SoPointLightDragger SoRotateCylindricalDragger SoRotateDiscDragger SoRotateSphericalDragger SoScale1Dragger SoScale2Dragger SoScale2UniformDragger SoScaleUniformDragger SoSpotLightDragger SoTabBoxDragger SoTabPlaneDragger SoTrackballDragger SoTransformBoxDragger SoTransformerDragger SoTranslate1Dragger SoTranslate2Dragger List of all members.

Public Types

enum  ProjectorFrontSetting { FRONT, BACK, USE_PICK }

Public Methods

virtual void callback (SoCallbackAction *action)
virtual void GLRender (SoGLRenderAction *action)
virtual void getMatrix (SoGetMatrixAction *action)
virtual void rayPick (SoRayPickAction *action)
virtual void search (SoSearchAction *action)
virtual void write (SoWriteAction *action)
virtual void getPrimitiveCount (SoGetPrimitiveCountAction *action)
void addStartCallback (SoDraggerCB *func, void *data=NULL)
void removeStartCallback (SoDraggerCB *func, void *data=NULL)
void addMotionCallback (SoDraggerCB *func, void *data=NULL)
void removeMotionCallback (SoDraggerCB *func, void *data=NULL)
void addFinishCallback (SoDraggerCB *func, void *data=NULL)
void removeFinishCallback (SoDraggerCB *func, void *data=NULL)
void addValueChangedCallback (SoDraggerCB *func, void *data=NULL)
void removeValueChangedCallback (SoDraggerCB *func, void *data=NULL)
void setMinGesture (int pixels)
int getMinGesture (void) const
SbBool enableValueChangedCallbacks (SbBool newval)
const SbMatrixgetMotionMatrix (void)
void addOtherEventCallback (SoDraggerCB *func, void *data=NULL)
void removeOtherEventCallback (SoDraggerCB *func, void *data=NULL)
void registerChildDragger (SoDragger *child)
void unregisterChildDragger (SoDragger *child)
void registerChildDraggerMovingIndependently (SoDragger *child)
void unregisterChildDraggerMovingIndependently (SoDragger *child)
SbMatrix getLocalToWorldMatrix (void)
SbMatrix getWorldToLocalMatrix (void)
SbVec3f getLocalStartingPoint (void)
SbVec3f getWorldStartingPoint (void)
void getPartToLocalMatrix (const SbName &partname, SbMatrix &parttolocalmatrix, SbMatrix &localtopartmatrix)
void transformMatrixLocalToWorld (const SbMatrix &frommatrix, SbMatrix &tomatrix)
void transformMatrixWorldToLocal (const SbMatrix &frommatrix, SbMatrix &tomatrix)
void transformMatrixToLocalSpace (const SbMatrix &frommatrix, SbMatrix &tomatrix, const SbName &fromspacepartname)
void setMotionMatrix (const SbMatrix &newmatrix)
void valueChanged (void)
const SbMatrixgetStartMotionMatrix (void)
virtual void saveStartParameters (void)
const SoPathgetPickPath (void) const
const SoEventgetEvent (void) const
SoPathcreatePathToThis (void)
const SoPathgetSurrogatePartPickedOwner (void) const
const SbNamegetSurrogatePartPickedName (void) const
const SoPathgetSurrogatePartPickedPath (void) const
void setStartingPoint (const SoPickedPoint *newpoint)
void setStartingPoint (const SbVec3f &newpoint)
const SbViewVolumegetViewVolume (void)
void setViewVolume (const SbViewVolume &vol)
const SbViewportRegiongetViewportRegion (void)
void setViewportRegion (const SbViewportRegion &reg)
SoHandleEventActiongetHandleEventAction (void) const
void setHandleEventAction (SoHandleEventAction *newAction)
void setTempPathToThis (const SoPath *somethingclose)
virtual void grabEventsSetup (void)
virtual void grabEventsCleanup (void)
void workFieldsIntoTransform (SbMatrix &mtx)
void setFrontOnProjector (ProjectorFrontSetting newval)
ProjectorFrontSetting getFrontOnProjector (void) const

Static Public Methods

void setMinScale (float newminscale)
float getMinScale (void)
void workValuesIntoTransform (SbMatrix &mtx, const SbVec3f *translationptr, const SbRotation *rotationptr, const SbVec3f *scalefactorptr, const SbRotation *scaleorientationptr, const SbVec3f *centerptr)
void getTransformFast (SbMatrix &mtx, SbVec3f &translation, SbRotation &rotation, SbVec3f &scalefactor, SbRotation &scaleorientation, const SbVec3f &center)
void getTransformFast (SbMatrix &mtx, SbVec3f &translation, SbRotation &rotation, SbVec3f &scalefactor, SbRotation &scaleorientation)
SbMatrix appendTranslation (const SbMatrix &mtx, const SbVec3f &translation, const SbMatrix *conversion=NULL)
SbMatrix appendScale (const SbMatrix &mtx, const SbVec3f &scale, const SbVec3f &scalecenter, const SbMatrix *conversion=NULL)
SbMatrix appendRotation (const SbMatrix &mtx, const SbRotation &rot, const SbVec3f &rotcenter, const SbMatrix *conversion=NULL)
void initClass (void)
void initClasses (void)

Public Attributes

SoSFBool isActive

Protected Methods

 SoDragger (void)
virtual ~SoDragger ()
SbVec2f getNormalizedLocaterPosition (void)
SbVec2s getLocaterPosition (void)
SbVec2s getStartLocaterPosition (void) const
void setStartLocaterPosition (SbVec2s p)
SbBool isAdequateConstraintMotion (void)
virtual SbBool shouldGrabBasedOnSurrogate (const SoPath *pickpath, const SoPath *surrogatepath)
void setCameraInfo (SoAction *action)
virtual void handleEvent (SoHandleEventAction *ha)
void transferMotion (SoDragger *child)
void setIgnoreInBbox (SbBool newval)
SbBool isIgnoreInBbox (void)
virtual void getBoundingBox (SoGetBoundingBoxAction *action)
void setActiveChildDragger (SoDragger *newchilddragger)
SoDragger * getActiveChildDragger (void) const
virtual void setDefaultOnNonWritingFields (void)
void updateDraggerCache (const SoPath *path)

Static Protected Methods

void childTransferMotionAndValueChangedCB (void *, SoDragger *)
void childValueChangedCB (void *, SoDragger *)
void childStartCB (void *, SoDragger *)
void childMotionCB (void *, SoDragger *)
void childFinishCB (void *, SoDragger *)
void childOtherEventCB (void *, SoDragger *)

Detailed Description

The SoDragger class is the base class for all draggers.

It holds the motion matrix, and offers lots of convenience methods for subdraggers.

The motion matrix is used to modify the model matrix during traversal, and all draggers should update this during dragging.


Member Enumeration Documentation

enum SoDragger::ProjectorFrontSetting
 

Holds various settings for projectors, which might affect cylindrical and spherical based draggers. Specifies whether dragging should be based on the front or back of the sphere / cylinder, or if the picked point should be used to decide this.

Enumeration values:
FRONT   Always use front of projector.
BACK   Always use back of projector.
USE_PICK   Use picked point to decide front or back of projector.


Constructor & Destructor Documentation

SoDragger::SoDragger void [protected]
 

A protected constructor for this abstract superclass for all Coin draggers.

SoDragger::~SoDragger [protected, virtual]
 

Virtual protected destructor.


Member Function Documentation

void SoDragger::callback SoCallbackAction * action [virtual]
 

Action method for SoCallbackAction.

Simply updates the state according to how the node behaves for the render action, so the application programmer can use the SoCallbackAction for extracting information about the scene graph.

Reimplemented from SoBaseKit.

void SoDragger::GLRender SoGLRenderAction * action [virtual]
 

Action method for the SoGLRenderAction.

This is called during rendering traversals. Nodes influencing the rendering state in any way or who wants to throw geometry primitives at OpenGL overrides this method.

Reimplemented from SoBaseKit.

Reimplemented in SoTabPlaneDragger.

void SoDragger::getMatrix SoGetMatrixAction * action [virtual]
 

Action method for SoGetMatrixAction.

Updates action by accumulating with the transformation matrix of this node (if any).

Reimplemented from SoBaseKit.

Reimplemented in SoCenterballDragger.

void SoDragger::rayPick SoRayPickAction * action [virtual]
 

Action method for SoRayPickAction.

Checks the ray specification of the action and tests for intersection with the data of the node.

Nodes influencing relevant state variables for how picking is done also overrides this method.

Reimplemented from SoBaseKit.

void SoDragger::search SoSearchAction * action [virtual]
 

Action method for SoSearchAction.

Compares the search criteria from the action to see if this node is a match. Searching is done by matching up all criteria set up in the SoSearchAction -- if any of the requested criteria is a miss, the search is not deemed successful for the node.

See also:
SoSearchAction

Reimplemented from SoBaseKit.

void SoDragger::write SoWriteAction * action [virtual]
 

Action method for SoWriteAction.

Writes out a node object, and any connected nodes, engines etc, if necessary.

Reimplemented from SoBaseKit.

void SoDragger::getPrimitiveCount SoGetPrimitiveCountAction * action [virtual]
 

Action method for the SoGetPrimitiveCountAction.

Calculates the number of triangle, line segment and point primitives for the node and adds these to the counters of the action.

Nodes influencing how geometry nodes calculates their primitive count also overrides this method to change the relevant state variables.

Reimplemented from SoBaseKit.

void SoDragger::addStartCallback SoDraggerCB * func,
void * data = NULL
 

Adds a callback which is called at the start of a drag, after the mouse button 1 is pressed, and dragger is picked.

void SoDragger::removeStartCallback SoDraggerCB * func,
void * data = NULL
 

Removes a previously registered start callback.

See also:
addStartCallback()

void SoDragger::addMotionCallback SoDraggerCB * func,
void * data = NULL
 

Adds a callback which is called for each mouse movement during dragging.

void SoDragger::removeMotionCallback SoDraggerCB * func,
void * data = NULL
 

Removes a previously registered motion callback.

See also:
addMotionCallback()

void SoDragger::addFinishCallback SoDraggerCB * func,
void * data = NULL
 

Adds a callback which is called after dragging is finished.

void SoDragger::removeFinishCallback SoDraggerCB * func,
void * data = NULL
 

Removes a finish callback.

See also:
addFinishCallback()

void SoDragger::addValueChangedCallback SoDraggerCB * func,
void * data = NULL
 

Adds a callback which is called after a dragger has changed a field. It is not called if the SoDragger::isActive field is changed.

See also:
enableValueChangedCallback()

void SoDragger::removeValueChangedCallback SoDraggerCB * func,
void * data = NULL
 

Removes a value changed callback.

See also:
addValueChangedCallback()

void SoDragger::setMinGesture int pixels
 

Sets the number of pixel movement needed to trigger a constraint gesture. Default is 8 pixels.

int SoDragger::getMinGesture void const
 

Returns the gesture pixels threshold value.

See also:
setMinGesture()

SbBool SoDragger::enableValueChangedCallbacks SbBool val
 

Enable or disable "value changed" callbacks.

See also:
addValueChangedCallback()

const SbMatrix & SoDragger::getMotionMatrix void
 

Returns the motion matrix for this dragger.

void SoDragger::addOtherEventCallback SoDraggerCB * func,
void * data = NULL
 

Adds an event callback for events other then drag events. As soon as dragging starts, the dragger grabs all events (until mouse button is released). This method can be used to handle other events during dragging.

void SoDragger::removeOtherEventCallback SoDraggerCB * func,
void * data = NULL
 

Removes a other event callback.

See also:
addOtherEventCallback()

void SoDragger::registerChildDragger SoDragger * child
 

Should be called by compound draggers to register child draggers.

void SoDragger::unregisterChildDragger SoDragger * child
 

Should be called by compound draggers to unregister child draggers.

void SoDragger::registerChildDraggerMovingIndependently SoDragger * child
 

Should be called by compund draggers to register child draggers that should move independently of their parent.

void SoDragger::unregisterChildDraggerMovingIndependently SoDragger * child
 

Should be called by compund draggers to unregister child draggers.

See also:
registerChildDraggerMovingIndependently()

SbMatrix SoDragger::getLocalToWorldMatrix void
 

Returns a matrix that converts from local to world space.

SbMatrix SoDragger::getWorldToLocalMatrix void
 

Returns a matrix that converts from world to local space.

SbVec3f SoDragger::getLocalStartingPoint void
 

Returns the drag starting point in the local coordinate system.

SbVec3f SoDragger::getWorldStartingPoint void
 

Returns the drag starting point in the world coordinate system.

void SoDragger::getPartToLocalMatrix const SbName & partname,
SbMatrix & parttolocalmatrix,
SbMatrix & localtopartmatrix
 

Returns matrices that will convert between local space and the space in which partname lies in.

void SoDragger::transformMatrixLocalToWorld const SbMatrix & frommatrix,
SbMatrix & tomatrix
 

Convenience method that transforms the local frommatrix to a world coordinate systems matrix.

void SoDragger::transformMatrixWorldToLocal const SbMatrix & frommatrix,
SbMatrix & tomatrix
 

Convenience method that transforms the world frommatrix to a local coordinate systems matrix.

void SoDragger::transformMatrixToLocalSpace const SbMatrix & frommatrix,
SbMatrix & tomatrix,
const SbName & fromspacepartname
 

Transforms a matrix that lies in the frompartname coordinate system into the local coordinate system.

void SoDragger::setMotionMatrix const SbMatrix & matrix
 

Sets the motion matrix. Triggers value changes callbacks if matrix != oldmatrix.

void SoDragger::valueChanged void
 

Can be called by subclasses to trigger value changed callbacks. This might be needed if a field is changed without changing the motion matrix.

const SbMatrix & SoDragger::getStartMotionMatrix void
 

Returns the motion matrix as it was when saveStartParameters() was called.

void SoDragger::saveStartParameters void [virtual]
 

This is invoked to save start parameters, to enable draggers to calculate relative motion.

Default method in superclass SoDragger just saves the motion matrix, but subclasses should overload this method if other data needs to be saved.

Reimplemented in SoCenterballDragger.

const SoPath * SoDragger::getPickPath void const
 

Returns the picked path.

const SoEvent * SoDragger::getEvent void const
 

Returns the current event.

SoPath * SoDragger::createPathToThis void
 

Creates a new path to this dragger. Don't forget to ref() and unref() since this method creates a fresh copy for you.

const SoPath * SoDragger::getSurrogatePartPickedOwner void const
 

Returns the path to the SoInteractionKit that holds the current surrogate path.

const SbName & SoDragger::getSurrogatePartPickedName void const
 

Returns the name of the path in the SoInteractionKit that holds the current surrogate path.

const SoPath * SoDragger::getSurrogatePartPickedPath void const
 

Returns the current surrogate path.

void SoDragger::setStartingPoint const SoPickedPoint * point
 

Sets the staring point for the drag. point is usually a picked point from a SoRayPickAction.

void SoDragger::setStartingPoint const SbVec3f & point
 

Sets the starting point for a drag.

const SbViewVolume & SoDragger::getViewVolume void
 

Return the current view volume.

void SoDragger::setViewVolume const SbViewVolume & vv
 

Sets the current view volume.

const SbViewportRegion & SoDragger::getViewportRegion void
 

Returns the current viewport region.

void SoDragger::setViewportRegion const SbViewportRegion & vp
 

Sets the current viewport region.

SoHandleEventAction * SoDragger::getHandleEventAction void const
 

Return the current (most recent) SoHandleEventAction.

void SoDragger::setHandleEventAction SoHandleEventAction * action
 

Stores a handle event action.

void SoDragger::setTempPathToThis const SoPath * somethingclose
 

This function is part of the original SGI Inventor 2.1 API, but has not been implemented in Coin as it looks like a function which should probably have been private in Open Inventor.

void SoDragger::grabEventsSetup void [virtual]
 

Called when dragger starts grabbing events (mouse button down). Overload if you need to do something extra in your dragger.

See also:
grabEventCleanup()

Reimplemented from SoNode.

void SoDragger::grabEventsCleanup void [virtual]
 

Called when dragger stops grabbing events (mouse button up).

See also:
grabEventSetup()

Reimplemented from SoNode.

void SoDragger::workFieldsIntoTransform SbMatrix & matrix
 

Examines the fields of the dragger, changes the matrix according to those fields and leaves the rest of the matrix as it was. The following field names are supported: translation, scaleFactor, rotation and scaleOrientation.

void SoDragger::setFrontOnProjector ProjectorFrontSetting val
 

Controls the behaviour of the SbProjector.

SoDragger::ProjectorFrontSetting SoDragger::getFrontOnProjector void const
 

Returns the behaviour of the SbProjector.

void SoDragger::setMinScale float minscale [static]
 

Sets the minimum scale value all scale factors are clamped against. This is used in workFieldsIntoTransform(). The default value is 0.01

float SoDragger::getMinScale void [static]
 

Returns the minimum scale value.

See also:
setMinScale()

void SoDragger::workValuesIntoTransform SbMatrix & matrix,
const SbVec3f * translationptr,
const SbRotation * rotationptr,
const SbVec3f * scalefactorptr,
const SbRotation * scaleorientationptr,
const SbVec3f * centerptr
[static]
 

Same as above, but pointers to values are supplied. If a pointer is NULL, the matrix value for that argument is used when reconstructing the matrix.

void SoDragger::getTransformFast SbMatrix & matrix,
SbVec3f & translation,
SbRotation & rotation,
SbVec3f & scalefactor,
SbRotation & scaleorientation,
const SbVec3f & center
[static]
 

Can be used when there is no scaleorientation. Faster than SoDragger::workValuesIntoTransform().

void SoDragger::getTransformFast SbMatrix & matrix,
SbVec3f & translation,
SbRotation & rotation,
SbVec3f & scalefactor,
SbRotation & scaleorientation
[static]
 

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

SbMatrix SoDragger::appendTranslation const SbMatrix & matrix,
const SbVec3f & translation,
const SbMatrix * conversion = NULL
[static]
 

Returns matrix after translation has been appended. If conversion != NULL it is used to transform translation into the space matrix is defined.

SbMatrix SoDragger::appendScale const SbMatrix & matrix,
const SbVec3f & scale,
const SbVec3f & scalecenter,
const SbMatrix * conversion = NULL
[static]
 

Returns matrix after scale and scalecenter has been appended. If conversion != NULL it is used to transform scale into the space matrix is defined.

SbMatrix SoDragger::appendRotation const SbMatrix & matrix,
const SbRotation & rot,
const SbVec3f & rotcenter,
const SbMatrix * conversion = NULL
[static]
 

Appends rot, around rotcenter, to matrix. If conversion is != NULL, this is used to move the rotation into that coordinate systems before appending the rotation.

void SoDragger::initClass void [static]
 

Initializes type system for this dragger class.

Application programmers should usually not have to invoke this method, see documentation of SoInteraction::initClass().

Reimplemented from SoInteractionKit.

Reimplemented in SoCenterballDragger, SoDirectionalLightDragger, SoDragPointDragger, SoHandleBoxDragger, SoJackDragger, SoPointLightDragger, SoRotateCylindricalDragger, SoRotateDiscDragger, SoRotateSphericalDragger, SoScale1Dragger, SoScale2Dragger, SoScale2UniformDragger, SoScaleUniformDragger, SoSpotLightDragger, SoTabBoxDragger, SoTabPlaneDragger, SoTrackballDragger, SoTransformBoxDragger, SoTransformerDragger, SoTranslate1Dragger, and SoTranslate2Dragger.

void SoDragger::initClasses void [static]
 

Initializes all built-in draggers.

Reimplemented from SoNode.

SbVec2f SoDragger::getNormalizedLocaterPosition void [protected]
 

Returns the position of the locater.

SbVec2s SoDragger::getLocaterPosition void [protected]
 

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

SbVec2s SoDragger::getStartLocaterPosition void const [protected]
 

Returns the position when mouse button 1 was pressed.

void SoDragger::setStartLocaterPosition SbVec2s pos [protected]
 

The start locater position is automatically set when mouse button 1 goes down, but subclasses can use this method to reset the value.

SbBool SoDragger::isAdequateConstraintMotion void [protected]
 

Checks if the mouse pointer has been moved enough after the end-user hit a constraint mode key (which is typically SHIFT, sometimes also CTRL for the built-in draggers) that we should act upon and decide which direction the constraint should be set to.

SbBool SoDragger::shouldGrabBasedOnSurrogate const SoPath * pickpath,
const SoPath * surrogatepath
[protected, virtual]
 

Checks if pickpath contains surrogatepath and returns TRUE if the tail of surrogatepath is before any dragger in pickpath.

void SoDragger::setCameraInfo SoAction * action [protected]
 

Store data about the current camera in the given action.

void SoDragger::handleEvent SoHandleEventAction * action [protected, virtual]
 

Overloaded to detect picks on dragger.

Reimplemented from SoBaseKit.

void SoDragger::transferMotion SoDragger * child [protected]
 

For internal use only.

void SoDragger::setIgnoreInBbox SbBool val [protected]
 

Sets whether dragger geometry should be ignored when calculating bbox.

SbBool SoDragger::isIgnoreInBbox void [protected]
 

Returns whether dragger geometry should be ignored when calculating bbox.

void SoDragger::getBoundingBox SoGetBoundingBoxAction * action [protected, virtual]
 

Overloaded to ignore dragger bounding box if SoDragger::isIgnoreInBbox() is TRUE.

Reimplemented from SoBaseKit.

Reimplemented in SoCenterballDragger.

void SoDragger::setActiveChildDragger SoDragger * childdragger [protected]
 

For internal use only.

SoDragger * SoDragger::getActiveChildDragger void const [protected]
 

For internal use only.

void SoDragger::setDefaultOnNonWritingFields void [protected, virtual]
 

(Be aware that this method is unlikely to be of interest to the application programmer who does not want to extend the library with new custom nodekits or draggers. If you indeed are writing extensions, see the information in the SoBaseKit class documentation.)

A virtual method that should call SoField::setDefault() with argument TRUE on part fields that should not be written upon scenegraph export operations.

This is typically done when:

  1. field value is NULL and part is NULL by default

  2. it is a leaf SoGroup or SoSeparator node with no children

  3. it is a leaf listpart with no children and a SoGroup or SoSeparator container

  4. it is a non-leaf part and it's of SoGroup type and all fields are at their default values

Subclasses should usually override this to do additional settings for new member fields. From the subclass, do remember to call "upwards" to your superclass' setDefaultOnNonWritingFields() method.

Reimplemented from SoInteractionKit.

Reimplemented in SoCenterballDragger, SoDirectionalLightDragger, SoDragPointDragger, SoHandleBoxDragger, SoJackDragger, SoPointLightDragger, SoSpotLightDragger, SoTabBoxDragger, SoTabPlaneDragger, SoTrackballDragger, SoTransformBoxDragger, and SoTransformerDragger.

void SoDragger::childTransferMotionAndValueChangedCB void * data,
SoDragger * child
[static, protected]
 

For internal use only.

void SoDragger::childValueChangedCB void * data,
SoDragger * child
[static, protected]
 

For internal use only.

void SoDragger::childStartCB void * data,
SoDragger * child
[static, protected]
 

For internal use only.

void SoDragger::childMotionCB void * data,
SoDragger * child
[static, protected]
 

For internal use only.

void SoDragger::childFinishCB void * data,
SoDragger * child
[static, protected]
 

For internal use only.

void SoDragger::childOtherEventCB void * data,
SoDragger * child
[static, protected]
 

For internal use only.

void SoDragger::updateDraggerCache const SoPath * path [protected]
 

For internal use only.


Member Data Documentation

SoSFBool SoDragger::isActive
 

Is TRUE whenever the user is interacting with the dragger.


The documentation for this class was generated from the following files:
Generated at Tue Mar 5 03:31:23 2002 for Coin by doxygen1.2.9 written by Dimitri van Heesch, © 1997-2001