SoSelection(3IV)

SoSelection - manages a list of selected objects

As shipped in IRIX 6.5.22. Added in IRIX 6.5.22.

NAME
     SoSelection - manages a list of selected objects

INHERITS FROM
     SoBase > SoFieldContainer > SoNode > SoGroup > SoSeparator > SoSelection

SYNOPSIS
     #include <Inventor/nodes/SoSelection.h>

     typedef void        SoSelectionPathCB(void *userData, SoPath *path)
     typedef void        SoSelectionClassCB(void *userData, SoSelection *sel)
     typedef SoPath *    SoSelectionPickCB(void *userData, const SoPickedPoint
                              *pick)

     enum Policy {
          SoSelection::SINGLE  Left mouse pick on object clears selection,
                                    then selects object. Left mouse pick on
                                    nothing clears selection. Only one object
                                    may be selected at a time.
          SoSelection::TOGGLE  Left mouse pick on object toggles its selection
                                    status. Left mouse pick on nothing does
                                    nothing. Multiple objects may be selected.
          SoSelection::SHIFT   When shift key is down, selection policy is
                                    TOGGLE. When shift key is up, selection
                                    policy is SINGLE. Multiple objects may be
                                    selected.
     }

          Fields from class SoSelection:

     SoSFEnum            policy

          Fields from class SoSeparator:

     SoSFEnum            renderCaching
     SoSFEnum            boundingBoxCaching
     SoSFEnum            renderCulling
     SoSFEnum            pickCulling

          Methods from class SoSelection:

                         SoSelection()
                         SoSelection(int nChildren)
     static SoType       getClassTypeId()
     void                select(const SoPath *path)
     void                select(SoNode *node)
     void                deselect(const SoPath *path)
     void                deselect(int which)
     void                deselect(SoNode *node)
     void                toggle(const SoPath *path)
     void                toggle(SoNode *node)

     SbBool              isSelected(const SoPath *path) const
     SbBool              isSelected(SoNode *node) const
     void                deselectAll()
     int                 getNumSelected() const
     const SoPathList *  getList() const
     SoPath *            getPath(int index) const
     SoPath *            operator [](int i) const
     void                addSelectionCallback(SoSelectionPathCB *f, void
                              *userData = NULL)
     void                removeSelectionCallback(SoSelectionPathCB *f, void
                              *userData = NULL)
     void                addDeselectionCallback(SoSelectionPathCB *f, void
                              *userData = NULL)
     void                removeDeselectionCallback(SoSelectionPathCB *f, void
                              *userData = NULL)
     void                addStartCallback(SoSelectionClassCB *f, void
                              *userData = NULL)
     void                removeStartCallback(SoSelectionClassCB *f, void
                              *userData = NULL)
     void                addFinishCallback(SoSelectionClassCB *f, void
                              *userData = NULL)
     void                removeFinishCallback(SoSelectionClassCB *f, void
                              *userData = NULL)
     void                setPickFilterCallback(SoSelectionPickCB *f, void
                              *userData = NULL, SbBool callOnlyIfSelectable =
                              TRUE)
     void                setPickMatching(SbBool pickTwice)
     SbBool              getPickMatching() const

          Methods from class SoSeparator:

     static void         setNumRenderCaches(int howMany)
     static int          getNumRenderCaches()

          Methods from class SoGroup:

     void                addChild(SoNode *child)
     void                insertChild(SoNode *child, int newChildIndex)
     SoNode *            getChild(int index) const
     int                 findChild(const SoNode *child) const
     int                 getNumChildren() const
     void                removeChild(int index)
     void                removeChild(SoNode *child)
     void                removeAllChildren()
     void                replaceChild(int index, SoNode *newChild)
     void                replaceChild(SoNode *oldChild, SoNode *newChild)

          Methods from class SoNode:

     void                setOverride(SbBool state)
     SbBool              isOverride() const

     SoNode *            copy(SbBool copyConnections = FALSE) const
     virtual SbBool      affectsState() const
     static SoNode *     getByName(const SbName &name)
     static int          getByName(const SbName &name, SoNodeList &list)

          Methods from class SoFieldContainer:

     void                setToDefaults()
     SbBool              hasDefaultValues() const
     SbBool              fieldsAreEqual(const SoFieldContainer *fc) const
     void                copyFieldValues(const SoFieldContainer *fc, SbBool
                              copyConnections = FALSE)
     SbBool              set(const char *fieldDataString)
     void                get(SbString &fieldDataString)
     virtual int         getFields(SoFieldList &resultList) const
     virtual SoField *   getField(const SbName &fieldName) const
     SbBool              getFieldName(const SoField *field, SbName &fieldName)
                              const
     SbBool              isNotifyEnabled() const
     SbBool              enableNotify(SbBool flag)

          Methods from class SoBase:

     void                ref()
     void                unref() const
     void                unrefNoDelete() const
     void                touch()
     virtual SoType      getTypeId() const
     SbBool              isOfType(SoType type) const
     virtual void        setName(const SbName &name)
     virtual SbName      getName() const


DESCRIPTION
     SoSelection defines a node which can be inserted into a scene graph and
     will generate and manage a selection list from picks on any node in the
     subgraph below it. Nodes are selected based on a current selection
     policy.  Callback functions report back to the application when a path
     has been selected or deselected. The selection list can also be managed
     programmatically.

     When handling events, SoSelection makes sure that the mouse release event
     was over the same object as the mouse press event before changing the
     list of selected objects. This allows users to mouse down on an object,
     change their mind and move the cursor off the object, then release the
     mouse button without altering the selection.

     The selection can be highlighted automatically through the
     SoXtRenderArea, or the application can provide custom highlights. Please
     see the chapter "Creating a Selection Highlight Style" in the Inventor
     Toolmaker.

FIELDS
     SoSFEnum            policy
          Selection policy that is followed in response to user interaction.
          This can be set to SoSelection::SINGLE, SoSelection::TOGGLE, or
          SoSelection::SHIFT.


METHODS
                         SoSelection()
          Creates a selection node with the default settings.

                         SoSelection(int nChildren)
          Constructor that specifies the approximate number of children.

     static SoType       getClassTypeId()
          Return the type id for the SoSelection class.

     void                select(const SoPath *path)
          Select the passed path by adding it to the selection list. The
          selection node must lie in the path. The path is copied and
          truncated such that the selection node is the head of the path. If
          the selection node does not lie in the path, the selection list
          remains unchanged. This method ignores the current selection policy.

     void                select(SoNode *node)
          Select the passed node by creating a path to it, and adding the path
          to the selection list by calling select(path). If there is more than
          one instance of node beneath the selection node, the created path
          will be the first instance found.

     void                deselect(const SoPath *path)
          Deselect the passed path by removing it from the selection list.

     void                deselect(int which)
          Deselect a path by removing it from the selection list. The argument
          which specifies which path in the list to be removed.

     void                deselect(SoNode *node)
          Deselect the passed node by creating a path to it, and removing the
          node from the selection list by calling deselect(path). If there is
          more than one instance of node beneath the selection node, the
          created path will be the first instance found.

     void                toggle(const SoPath *path)
          Toggle the selection status of the passed path - if the path is in
          the selection list, it is removed; if not in the list, it is added.

     void                toggle(SoNode *node)
          Toggle the selection status of the passed node by creating a path to
          it, then calling toggle(path). If there is more than one instance of
          node beneath the selection node, the created path will be the first
          instance found.
     SbBool              isSelected(const SoPath *path) const
          Returns TRUE if the passed path is selected, that is, if it is in
          the selection list.

     SbBool              isSelected(SoNode *node) const
          Returns TRUE if the passed node is selected by creating a path to
          it, then calling isSelected(). If there is more than one instance of
          node beneath the selection node, the created path will be the first
          instance found.

     void                deselectAll()
          Deselect all paths in the selection list, that is, clear the list.

     int                 getNumSelected() const
          Return the number of paths in the selection list.

     const SoPathList *  getList() const
          Return the list of selected paths.

     SoPath *            getPath(int index) const
     SoPath *            operator [](int i) const
          Return the ith path in the selection list.

     void                addSelectionCallback(SoSelectionPathCB *f, void
                              *userData = NULL)
     void                removeSelectionCallback(SoSelectionPathCB *f, void
                              *userData = NULL)
          The selection callbacks are invoked every time an object is
          selected, whether it be from user interaction or from method call.
          The callbacks are invoked after the object has been added to the
          selection list.

     void                addDeselectionCallback(SoSelectionPathCB *f, void
                              *userData = NULL)
     void                removeDeselectionCallback(SoSelectionPathCB *f, void
                              *userData = NULL)
          The deselection callbacks are invoked every time an object is
          deselected, whether it be from user interaction or from method call.
          This is invoked after the object has been removed from the selection
          list.

     void                addStartCallback(SoSelectionClassCB *f, void
                              *userData = NULL)
     void                removeStartCallback(SoSelectionClassCB *f, void
                              *userData = NULL)
          The start callbacks are invoked when the user has initiated an
          interactive change to the selection list (by picking objects). This
          will be followed by invocations of the select and/or deselect
          callbacks, finally followed by each finish callback. A start
          callback can be used, for instance, to save the current selection
          for later restoration (e.g. undo/redo). The start callbacks are not
          called when the selection list is changed programmatically.
     void                addFinishCallback(SoSelectionClassCB *f, void
                              *userData = NULL)
     void                removeFinishCallback(SoSelectionClassCB *f, void
                              *userData = NULL)
          The finish callbacks are invoked when the user has finished
          interactively changing the selection list (by picking objects). This
          was preceded by an invocation of each start callback, and
          invocations of the select and/or deselect callbacks. The finish
          callbacks are not called when the selection list is changed
          programmatically.

     void                setPickFilterCallback(SoSelectionPickCB *f, void
                              *userData = NULL, SbBool callOnlyIfSelectable =
                              TRUE)
          The pick filter callback is invoked when a pick has occurred and the
          selection node is about to change the selection list. The callback
          function returns the path that the selection node should use when
          selecting and deselecting. If no pick callback is registered (the
          default), the selection node will use the path returned by
          SoPickedPoint::getPath() on the picked point associated with the
          event being processed. The returned path should not be ref'd -
          selection will ref() and unref() it. (See SoPath::unrefNoDelete().)

          Note that a picked object may or may not be a child of the selection
          node. A selection node will only select paths that pass through it.
          Possible return values from the callback:

          [a] NULL - selection behaves as if nothing was picked (i.e. for
          SINGLE and SHIFT policies, this clears the selection list). Handle
          event action traversal halts.

          [b] Path - this path will be selected/deselected according to the
          selection policy (it must lie under the selection node). Handle
          event action traversal halts.

          [c] Path containing only the selection node - apply the selection
          policy as if nothing was picked. Handle event action traversal
          continues.

          [d] Path not passing through the selection node - selection ignores
          this pick event and no change is made to the selection list. Handle
          event action traversal continues.

          A simple way to tell selection to ignore the pick is to return an
          SoPath with no nodes in it. (i.e. return new SoPath;) Selection will
          always ref the path returned by the callback, make a copy of the
          path, then unref the path.

          The callOnlyIfSelectable argument, when set to TRUE, means the pick
          callback function will only be invoked on picks which pass through
          the selection node. When FALSE, all picks will be passed to the
          callback whether they pass through the selection or not.
     void                setPickMatching(SbBool pickTwice)
     SbBool              getPickMatching() const
          SoSelection will pick once on mouse down and once on mouse up, and
          make sure the picks match before changing the selection list. This
          allows the user to pick down on an object, change their mind and
          drag off the object, release the mouse button and not affect the
          selection. Pass TRUE to enable this behavior. Pass FALSE to disable
          this, meaning whatever is picked on a mouse release is added
          to/removed from the selection list. Default is pick-matching on.


FILE FORMAT/DEFAULTS
     Selection {
          renderCaching       AUTO
          boundingBoxCaching  AUTO
          renderCulling       AUTO
          pickCulling         AUTO
          policy              SHIFT
     }

SEE ALSO
     SoEventCallback, SoXtRenderArea, SoBoxHighlightRenderAction,
     SoLineHighlightRenderAction