pfvSelector(3pf) OpenGL Performer 3.2.2 libpfv C++ Reference Pages
NAMEpfvSelector - Manage Object selection and user interaction for a scene or
a subset of a scene
FUNCTION SPECIFICATION
#include <Performer/pfv/pfvPicker.h>
virtual int pfvSelector::startSelection( pfvPicker* p, int event );
virtual int pfvSelector::updateSelection( pfvPicker* p, int event,
pfvPickerRequest* req );
virtual void pfvSelector::endSelection( pfvPicker* p );
virtual int pfvSelector::startManip( pfvPicker* p, int event );
virtual int pfvSelector::updateManip( pfvPicker* p, int event,
pfvPickerRequest* req );
virtual int pfvSelector::getPermissions( pfvPicker* p,
pfvInteractor* ia, int event, int reason );
int pfvSelector::isSelecting();
int pfvSelector::isManipulating();
virtual int pfvSelector::toggleSelection( pfvPicker* p,
pfvSelector* slave );
virtual int pfvSelector::joinSelection( pfvPicker* p,
pfvSelector* master, int ev );
virtual int pfvSelector::manageSelection( pfvPicker* p,
pfList* slaves );
pfvSelector* pfvSelector::getMaster();
pfList* pfvSelector::getSlaves();
DESCRIPTION
The pfvSelector class extends the pfvInteractor class and is used in
conjunction with pfvPicker objects in implementing application-specific
user-interaction. pfvSelectors differ from pfvInteractors in that they
are able to request and enter SELECT state. when a pfvSelector is in
SELECT state, it is referred to as the picker's current selector and
plays a major role in the control of all user interaction.
Instances of pfvSelector objects are not expected to be created by
applications; instead applications should derive their own classes from
pfvSelector, and implement specific interaction through the
implementation of pfvSelector's virtual methods.
Page 1
pfvSelector(3pf) OpenGL Performer 3.2.2 libpfv C++ Reference Pages
pfvSelector::startSelection is called by the picker to offer selector the
chance to accept SELECT state. Usually this will happen in response to a
request made by selector itself through methods updateHlite or
specialFocus. Alternatively, this can happen if method
pfvPicker::setState or pfvPicker::grantRequest were called with request
state including PFPICKER_SELECT, and a pointer to this selector as the
requested selector.
Once in SELECT mode, selector will receive calls to
pfvSelector::updateSelection at least once every time pfvPicker::update
is called (usually once per frame). If events have been collected by
picker, they will be sent to selector as the event parameter to
pfvSelector::updateSelection. The req parameter points to a
pfvPickerRequest structure initialized to picker's current state, which
can be modified by selector in order to request a new picker state.
Note that while in SELECT state, selector can also allow other
pfvInteractors to enter HLITE state, or to respond to FOCUS_EVENTS, and
even to enter INTERACT state without selector losing its SELECT state.
pfvSelector::endSelection is called by the picker to notify selector that
it must exit its SELECT state. This will happen if method
pfvPicker::setState or pfvPicker::grantRequest were called, requesting a
deselection, or the selection of a different pfvSelector.
pfvSelector::startManip is called by the picker in order to offer
selector a chance to accept MANIP state. Usually this will happen in
response to a request made by selector itself through methods
updateHlite, specialFocus or updateSelection. Alternatively, this can
happen if method pfvPicker::setState or pfvPicker::grantRequest were
called with request state including PFPICKER_MANIP, and a pointer to this
selector as requested selector.
pfvSelector::updateManip is called by picker instead of updateSelection
while selector is in MANIP state. MANIP state for a pfvSelector is much
like the INTERACT state for an pfvInteractor and it is usually associated
with carrying out an interaction over a number of frames, such as
dragging a slider.
While in MANIP state, no other interactor is allowed to interfere with
selector, thus HLITE or FOCUS_EVENT states will not be allowed.
pfvSelector::getPermissions is called by the picker when selector is in
SELECT state in order to obtain a permission mask that will be passed on
to other pfvInteractors. Picker calls pfvSelector::getPermissions in
several situations: When picker is about to offer HLITE state to the
interactor associated with the geometry under current focus, when picker
is about to call pfvInteractor::updateHlite or
pfvInteractor::updateInteraction for picker's current interactor, when
picker is about to call pfvInteractor::specialFocus in order to offer an
event to interactor associated with the geometry under current focus.
Page 2
pfvSelector(3pf) OpenGL Performer 3.2.2 libpfv C++ Reference Pages
pfvSelector::isSelecting returns 1 if selector is in SELECT or MANIP
state, 0 otherwise.
pfvSelector::isManipulating returns 1 if selector is in MANIP state, 0
otherwise.
The following methods are intended to make it possible to join multiple
pfvSelector objects in multiple-selections. However, the use of these
methods is not recommended as they are likely to be modified or
eliminated in future releases:
pfvSelector::toggleSelection, pfvSelector::joinSelection,
pfvSelector::manageSelection, pfvSelector::getMaster,
pfvSelector::getSlaves
NOTES
For examples of uses of the pfvPicker API, look at the sample code in
/usr/share/Performer/src/pguide/libpfv/picker and the README file
contained in that directory.
SEE ALSO
pfvPicker, pfvInteractor, pfvmPicker
Page 3