OpenTracker

An Open Architecture for Reconfigurable Tracking based on XML | Contact

Node Reference

ButtonFilter

The Button Filter allows the user to filter and re-map the individual buttons of an event.

WATCH OUT !! Button bits are leastsignificant first invert (10000000) with buttonin(00000000) will result in (00000001) !! sequence : validtrans, radiobuttons, invertstr, buttonmask, buttonmap

The element has the following attributes :

An example element looks like this :
 <ButtonFilter buttonmask="11110000" buttonmap="32107777" invert="00100000">
 <ParButtonSource dev="0x378" DEF="buttons"/>
 </ButtonFilter>
outputs buttons 0-3 in reverse order, ignoring the others. (note that button 7 is never TRUE because buttons 4-7 are masked out.

ButtonHoldFilter

ButtonHoldFilter simulates an time delayed release of a buttonsource. It was necessary to introduce this filter to filter out short drops when using a radio transmission. The filter will hold the "on" event even if there is a drop of "n" off's. After "n" off's have pssed through the filter it will change the event to off. If there is a "on" in between, the count will start again. Please notice that there will be a delay in the button-release action due to this filter.

Example_ for one bit(n=3) - over time)

 input : 11110111001101000011111
 output: 11111111111111111011111
 
Example_ for one bit(n=1) - over time)
 input : 11110111001101000011111
 output: 11111111101111100011111
 

Example usage/defaults:

 \<ButtonHoldFilter offDuration="2" >
 ... (any Event Source)
 \</ButtonHoldFilter>
 

ButtonOp

The ButtonOp node implements a boolean operation on the button events of its two input ports. It saves the last button events from each input and outputs either the logical AND or OR result of the two events, whenever a new event from either input is received.

The element has the following attributes :

An example element looks like this :
 <ButtonOp op="OR">
 <Arg1>
 <any event generator ...>
 </Arg1>
 <Arg2>
 <any event generator ...>
 </Arg2>
 </ButtonOp>

Callback Node

The Callback node is a simple EventObserver / EventGenerator that passes events on and calls a registered callback function everytime it receives a new event with the passed event. It has the following attributes : An example element looks like this :
 <Callback name="cb1">
 <Any EventGenerator element type>
 </Callback>

ConfidenceFilter

A ConfidenceFilter nodes filters and throws away incoming events based on their confidence value. It works either in high or low pass mode and has a configurable treshhold value. In high pass mode it only passes events to its parent that have a confidence equal or greater than the treshhold value, and vice versa in low pass mode. It has the following attributes : An example element using all wrapper elements looks like this :
 <ConfidenceFilter treshhold="0.8" type="high" >
 ...any event node
 </ConfidenceFilter>

ConfidenceSelect

The ConfidenceSelect node will filter events based on their confidence value relative to confidence values seen before. It can be used to select the event with the highest confidence value within a short time interval. It is a simple EventGenerator node.

It will store the confidence value of an event received and filter out any events that arrive within a certain time span set by the timeout parameter and that have a confidence value below ( or higher ) than the stored one. After the timeout it will again store the next event received. If an event passes the test, the events confidence value is stored and the timeout starts again. Two modes are possible : high filters out lower values and low filters out higher values. The element has the following attributes :

An example element looks like this :
 <ConfidenceSelect timeout="100" type="high" >
 ...any event node
 </ConfidenceFilter>

ConsoleSink

The ConsoleSink node is a simple EventObserver / EventGenerator that passes events on and stores a copy of the last one. It is polled in regular intervalls by the ConsoleModule and its event is printed out to the console. It has the following attributes : An example element looks like this :
 <ConsoleSink comment="my Console node">
 <Any EventGenerator element type>
 </ConsoleSink>

ConsoleSource

The ConsoleSource node is a simple EventGenerator that generates new tracking events for one station based on keyboard input to the console. Each ConsoleSource node has a station number that can be selected via the keyboard. There can be only one node per station. It is also managed and driven by the ConsoleModule.

It has the following attributes :

An example element looks like this :
 <ConsoleSource number="2"/>

ElasticFilter

ElasticFilter simulates an elastic connection between the incoming tracking data and the data that is sent out to the parent nodes. It also interpolates the values between two updates from the source, so this is also useful if you have a low update rate from your tracking and still want smooth animation.

Example usage/defaults:

 \<ElasticFilter force="0.02" damp="0.5" frequency="1" offset="0">
 ... (any Event Source)
 \</ElasticFilter>
 

EventQueue

The EventQueueNode stores a queue of events of fixed size. The size is set by the attribute length. It stores the last events it received from its EventGenerator child and also passes on events via the EventGenerator interface. It has the following attributes : An example element looks like this :
 <EventQueue length="10">
 <Any EventGenerator element type>
 </EventQueue>

EventUtility

The EventUtilityNode provides the possibility to rename, discard, or add attributes to every event passed to this node.

The element has the following attributes:

An example element looks like this:
 <EventUtilityNode rename="position pos" discard="confidence" create="double doubleAttribute 7.4">
 <Any EventGenerator element type>
 </EventUtilityNode>

FileSink

The FileSink node writes incoming event data to an output file. It is created and controlled by the FileModule. It associates its output stream with a station number, that is written into the file to multiplex different sinks into one file. There may be more then one FileSink using the same station number and / or output file. However the file may only be used for output. It has the following attributes : An example element looks like this :
 <FileSink file="test.out" station="0">
 <Any EventGenerator element type>
 </FileSink>

FileSource

The FileSource node reads event data from an input file and passes new events into the graph. It is created and controlled by the FileModule. It associates its input stream with a station number, that is contained in the input file to demultiplex different input streams from one file. There may be more then one FileSource using the same input file, however they need to use different station numbers. Moreover the file may only be used for input.

The event data is processed in the order appearing in the file. During each cycle, each source fires at most once. Data that has a station number which is not used by any FileSource is dropped.

A FileSource has the following attributes :

An example element looks like this :
 <FileSource file="name" station="0" localtime="false"/>

Filter

The Filter node implements a simple linear averaging over a number of events. The events are stored in an EventQueueNode that is the required child of this node. Everytime it receives a new event from the EventQueueNode it computes the weighted average of the events stored in the EventQueueNode. It implements an Event interface.

The position is calculated as the weighted average of the last events positions. No normalization is done, so one can use this filter to calculate gain != 1. The rotation is calculated in exponential space of the unit sphere of quaternions. Here the average is normalized to stay within the result space. Confidence values are also averaged and not normalized.

The element has the following attributes :

An example element looks like this :
 <Filter weight="0.5 0.5 0.5" type="all">
 <EventQueue>...</EventQueue>
 </Filter>

GroupGate

The GroupGate element is a node within a adjacency graph of other nodes within a group. Per default all nodes are deactived. The Override element has to be used to activate at least one node. This node is managed by a dedicated GroupGateModule.

A GroupGate only generates an event if the node itself or its neighbors are active.

The GroupGate element has the following attributes :

The Override element is used to activate a node within a group. See also the ActiveGate element that outputs the currently active GroupGate of a given group.

example: elements for a cyclic three noded graph looks like this

 <GroupGate DEF="Node1" group="CyclicGraph" neighbors="Node3">
 <Override>
 <...incomming events...>
 </Override>
 <...incomming events...>
 </GroupGate>
 <GroupGate DEF="Node2" group="CyclicGraph" neighbors="Node1">
 <...incomming events...>
 </GroupGate>
 <GroupGate DEF="Node3" group="CyclicGraph" neighbors="Node2">
 <...incomming events...>
 </GroupGate>
 <ActiveGate group="CyclicGraph"/>

ActiveGate

The ActiveGate node is used to determine the currently active GroupGate of a group. It returns a numeric value in the button field of the event structure The value is used to call the getGroupGateName() method of GroupGateModule to return the name of the GroupGate. See the GroupGate element for an example of the ActiveGate element. It has the following attributes :

Merge

A Merge node is an EventGenerator node that listens to several other EventGenerator nodes and merges data from these. It has several inputs that are marked with different wrapper tags. It stores an internal event and updates it with parts of the data depending on the type of input. Then it generates an event of its own. Timestamps are treated specially. If no child node is connected to the MergeTime input, then the timestamp of the new event equals the timestamp of the last received event. Otherwise it behaves like other inputs. The following list shows the possible inputs :

The MergeNode also provides the possibility to adjust the confidence value of the resulting event depending on how regularly events are coming in from the different inputs (MergeAttribut elements). If an agingFactor is defined for the MergeNode, the confidence of each input will be multiplied by this factor whenever a new event comes in (except for the input that generated the new event of course). The overall confidence of the resulting event is then calculated depending on the confidenceCalculation flag. If this flag is 'min', the resulting confidence is the minimum of all confidences. If the flag is 'max', it is the maximum. If the flag is set to 'multiply', the overall confidence is calculated as the product of all inputs' confidence values. Thus, the confidence of the resulting event will decrease, if events are just coming from one sole generator or a subset of generators all the time.

An example element using all wrapper elements looks like this :

 <Merge agingFactor="0.8" confidenceCalculation="multiply">
 <MergeDefault>
 <Exactly one EventGenerator element type>
 </MergeDefault>
 <MergeTime>
 <One or more of any EventGenerator element type>
 </MergeTime>
 <MergeTrigger>
 <One or more of any EventGenerator element type>
 </MergeTrigger>
 <MergeAttribute attributeName="someAttribute">
 <One or more of any EventGenerator element type>
 </MergeAttribute>
 </Merge>

PositionFilter

The PositionFilterNode node filters updates according to the position information.
See also:
RangeFilterNode It is configured with a min and max attribute that define the minimum and maximum of position data to be passed through (like a BoundingBox). Other events are dropped
The element has the following attributes : An example element looks like this :
 <PositionFilter min="-1 -1 -1" max="1 1 1">
 <Any EventGenerator element type>
 </PositionFilter>

RangeFilter

The RangeFilter node filters updates according to the length of the position value. It is configured with a min and max attribute that define the range of lengths of events to be passed through. Other events are dropped

The element has the following attributes :

An example element looks like this :
 <RangeFilter min="0.1" max="2.5">
 <Any EventGenerator element type>
 </RangeFilter>

Selection

A Selection node is an EventGenerator node that listens to two other EventGenerator nodes and selects preferred data by the following algorithm. Data from the preferred input is always passed through. Moreover, the node also remembers the timestamp of the last preferred event. If an event arrives from the other input within a certain timeout period to the last preferred event, it is not passed on. This way a stream of preferred events, with intermittend pauses smaller then the timeout will not be mixed with data from the default source. The preferred input EventGenerator is marked with wrapper tags. It has the following attributes : and following inputs An example element using all wrapper elements looks like this :
 <Selection timeout="100">
 <Select>
 <One of any EventGenerator element type>
 </Select>
 <One of any EventGenerator element type>
 </Selection>

ThresholdFilter

The ThresholdFilter implements a filter that allows only events that differ sufficiently from the last event passed through the filter. It computes the 2-norm distance between the positions of the new event and the last stored and the angle between the two quaternions representing the rotations. The angle is computed in radiants. Then they are compared against the two intervals given in the elements attributes. If one of them lies within the given interval, the event passes and is used as the new reference value.

The element has the following attributes :

An example element looks like this :
 <ThresholdFilter positionmin="0.1" positionmax="3" rotationmin="0" rotationmax="3">
 <Any EventGenerator element type>
 </ThresholdFilter>

TimeGate

This node acts as a gate for an event flow. It will only let events through, if there was an event received through the Gate input some time before. The exact time intervall is given by the attribute timeframe (in milliseconds). It also works the opposite way by blocking all events coming in within the time frame. In contrast to the Selection , it does not pass on event data from the Gate. It has the following attributes : and following inputs An example element using all wrapper elements looks like this :
 <TimeGate timeframe="100" mode="pass">
 <Gate>
 <One of any EventGenerator element type>
 </Gate>
 <One of any EventGenerator element type>
 </TimeGate>

Ref

A Ref element allows to use the output of a node in another place in the data flow graph. Every element can have a DEF attribute specified that contains a unique id. This id can then be referenced in a Ref element specifing the node the Ref element should mimik. The Ref node will then resemble the referenced node in any way.

However it cannot have any children, as the referenced node would have no information about these children. The Ref node is simply a way to reuse the output of a node somewhere else. It has the following attribute :

An example element looks like this :
 <Ref USE="id"/>

TestSource

The TestSource node is a simple EventGenerator that fires in fixed intervals standard events. The events can be customized to have other then the default values.

It also supports simulation of noisy data. The parameter noise defines the size of a uniform distribution used to perturb the given default position and orientation. In addition to that it also defines the probability that the orientation representation is using the negative representation.

Moreover, the TestSource provides some multi-modal attributes of type int, char, double, and float. These attributes can either be renamed by an EventUtilityNode and used as test data for the implementation of new nodes, or you can add more or different attributes in the same way to get test data for your implementation.

The node has the following elements : @

An example element looks like this :
 <TestSource frequency="10" offset="5" />

ARTDataTrackerSource

The ARTDataTrackerSource node is a simple EventGenerator that inputs the data from the ART Data Tracker. An example element looks like this :
 <ARTDataTrackerSource number="0"/>

ARToolKitMultiMarkerSource

The ARToolKitMultiMarkerSource node is a simple EventGenerator that inserts events from tracking a visual multi-marker in a video image by using the ARToolKitPlus library. See the ARToolKitPlusModule for information about how to configure the module as a whole. It has the following elements : An example element looks like this :
 <ARToolKitMultiMarkerSource cfg-file="test_setup.cfg" />

ARToolKitSource

The ARToolKitSource node is a simple EventGenerator that inserts events from tracking a visual marker in a video image by using the ARToolKit library. See the ARToolKitModule for information about how to configure the module as a whole. It has the following elements : An example element looks like this :
 <ARToolKitSource tag-file="pip.tag" center="0,0" size="40" />

CyberMouseSource

The CyberMouseSource node is a simple EventGenerator that outputs the current position and button event of the CyberMouse. It is driven by the CyberMouseModule. If the mouse does not seem to work, press a button. This should initialize it and it will work. The mouse buttons are mapped to button numbers in the following way : the middle button sets the LSB to 1 and the second button sets the second to 1.

An example element looks like this :

 <CyberMouseSource/>

DynaSightSource

The DynaSightSource node is a simple EventGenerator that inserts events from the DynaSightSource into the tracker tree. The DynaSightSource element has the following attribute: An example element looks like this :
 <DynaSightSource target="0" />

FastTrakSource

The FastTrakSource node is a simple EventGenerator that inserts events generated from the tracker-device data into the tracker tree. The FastTrakSource element has the following attributes : An example element looks like this :
 <FastTrakSource number="1"/>

FOBSource

This is a source node for the Flock of Birds magnetic tracking system. It is instantiated and managed by the FOBModule (Flock of Birds). The number given in the attribute number specifies the bird to use. An example element looks like this :
 <FOBSource number="1"/>

GPSDirectionSource

The GPSDirectionSource node is a simple EventGenerator that outputs GPS direction and velocity data. The direction is encoded in the orientation field as a mathematically positive rotation around the Y axis starting from the X axis. The velocity is encoded in the X component of the position field in meters / second. It is managed by the GPSModule, see there for more information on how to configure GPS support.

An example element looks like this :

 <GPSDirectionSource/>

GPSGarminAltitude

The GPSGarminAltitude node is a simple EventGenerator that outputs GPS altitude data from a Garmin device interpreting the propriatory $PGRMZ string. The altitude is given as a vector with the altitude encoded in the positive Y direction in meters. It is managed by the GPSModule, see there for more information on how to configure GPS support.

An example element looks like this :

 <GPSGarminAltitude/>

GPSGarminCompass

The GPSGarminCompass node is a simple EventGenerator that outputs GPS direction data from a magnetic compass of a Garmin receiver like the eTrex. It parses the Garmin NMEA string $HCHDG. The direction is encoded in the orientation field as a mathematically positive rotation around the Y axis starting from the X axis. It is managed by the GPSModule, see there for more information on how to configure GPS support.

An example element looks like this :

 <GPSGarminCompass/>

GPSInfoSource

The GPSInfoSource node is a simple EventGenerator that outputs additional status data on the GPS signal. It encodes the type of fix in the first entry of the position, the number of satellites in the second and the hdop value in the third. It will always fire even if no there is no position fix. The fix type is 0 for no fix, 1 for uncorrected and 2 for corrected position.

An example element looks like this :

 <GPSInfoSource/>

GPSSource

The GPSSource node is a simple EventGenerator that outputs GPS position data encoded in the position part of the event. This data is in Latitue, Longitute, Height in the WGS84 coordinate system. The confidence value is the inverse of the PDOP value. It is managed by the GPSModule, see there for more information on how to configure GPS support. Use a filter after that to transform the data into your local coordinate system. The node has no further attributes besides the ID attribute.

An example element looks like this :

 <GPSSource/>

InterSenseSource

The InterSenseSource node is a simple EventGenerator that generates events for an InterSense tracker. It only outputs data that is available from the tracker, for example an InterTrax device will not generate position data. It is associated with a tracker configuration element from the InterSenseModule via the id attribute. See the InterSenseModule for details on the reported position and orientation data. The element has the following attributes : An example element looks like this :
 <InterSenseSource id="IS600" station="1"/>

JoystickSource

The JoystickSource node is a simple EventGenerator that inserts events generated from the joystick input data into the tracker tree. The JoystcikSource element has the following attributes : An example element looks like this :
 <JoystickSource id="1"/>

Linmousesource

The Linmouse node is a simple EventGenerator that outputs the current position and button event of the LinmouseModule. It is driven by the linmousemodule.

An example element looks like this :

 <Linmousesource/>

MagicYSource

The MagicYSource node is a simple EventGenerator that inserts events from the MagicYSource into the tracker tree. The MagicYSource element has the following attribute: An example element looks like this :
<MagicYSource number="0" average="false"/>

MulticastInputSource

The MulticastInputSource node is a simple EventGenerator that inputs the data from the ART Data Tracker. An example element looks like this :
 <MulticastInputSource number="0"/>

P5GloveSource

The P5GloveSource node is an EventGenerator that outputs the current position of the glove and bending information for each finger. It is driven by the P5GloveModule. Note that at this time it only outputs whether the index finger is bent more the 50 degrees. This is the same for all fingers !

It has the following attributes

An example element looks like this :
 <P5GloveSource finger="1"/>

ParButtonSource

This element reads button values from the parallel port. It will only generate events, when the status changes. It works only on some hardware that has a bidirectional parallel port. This includes Indigo2, O2, and most modern PCs. There may be only one source per parallel port. The port itself is defined by the device name or the base port address, depending on the operating system. Both types of parameters are written into the dev attribute.

An example element looks like this :

 <ParButtonSource dev="0x378"/>

See the ParButtonModule (Parallel Button Input) for information on how to get it to work on different operating systems.

SpaceMouseSource

The SpaceMouseSource node is a simple EventGenerator that outputs the current position and button event of the SpaceMouse. It is driven by the SpaceMouseModule. [Hints to be filled in...]

An example element looks like this :

 <SpaceMouseSource/>

SpeechRecoSource

The SpeechRecoSource node pushes speech events. It is instantiated and managed by the SpeechModule. A speech event is coded into an attribute called 'commandId' as configured in the opentracker XML config file. The speech set ID is hold by an attribute called 'speechSetId'. The attributes 'commandName' and 'speechSetName' also encode the according command string and speech set description, respectively.

This node always pushes 2 events, one speech "start" event, and one speech "end" event. This is used for button press/release actions. The start is coded as button 0 pressed, end as button 0 released. The source only fires events when a command is successfully recognised. It has the following attributes :

An example element looks like this:
 <SpeechRecoSource name="numberset" set="CmdSet1"/>

Targussource

The Targussource node is a simple EventGenerator that outputs the current position and button event of the TargusModule. It is driven by the LinmouseModule. If the mouse does not seem to work, press a button. This should initialize it and it will work. The mouse buttons are mapped to button numbers in the following way : the middle button sets the LSB to 1 and the second button sets the second to 1.

An example element looks like this :

 <Targussource/>

UbisenseSource

The UbisenseSource node is a simple EventGenerator that inserts events by making use of the Ubisense API. See the UbisenseModule for information about how to configure the module as a whole. It has the following elements : An example element looks like this :
 <UbisenseSource object="Person" />

UltraTrakSource

The UltraTrakSource node is a simple EventGenerator that inserts events from the UltraTrak into the tracker tree. The UltraTrakSource element has the following attribute: An example element looks like this :
 <UltraTrakSource number="1" />

WacomGraphireSource

The WacomGraphireSource node is a simple EventGenerator that outputs the the position of the pen on the tablet in the first two coordinates of the position value and the button status of the used input device. The node itself can be configured to report the position of a particular device, such as pen, eraser or puck. It has the following attributes : An example element looks like this :
 <WacomGraphireSource device="1" />

XSensSource

The XSensSource node is a simple EventGenerator that outputs orientation data from a single XSens MT9-B orientation tracker. See the XSensModule for more information. The configuration element has the following attributes : An example element looks like this :
 <XSensSource comport="1"/>

The coordinate system of the orientation data is as follows. X and Y form the horizontal plane and Z is upwards. The measurement cube itself has a similar body system and reports orientations from the body system into the global system. To convert the readings into an Open Inventor like system use the following configuration. Then X and Z form the horizontal plane and Y is upwards for both global and body system.

 <EventTransform rotationtype="matrix" rotation="1 0 0 0 0 1 0 -1 0">
 <EventVirtualTransform rotationtype="matrix" rotation="1 0 0 0 0 -1 0 1 0">
 <Ref USE="xsens"/>
 </EventVirtualTransform>
 </EventTransform>

FileSink

The CORBASink node is a CORBA object that exposes a setEvent method. It has the following attributes : An example element looks like this :
<CORBASink name="CORBANodes.Context/Sink001.Object/">

TestSource

The TestSource node is a simple EventGenerator that fires in fixed intervals standard events. The events can be customized to have other then the default values.

It also supports simulation of noisy data. The parameter noise defines the size of a uniform distribution used to perturb the given default position and orientation. In addition to that it also defines the probability that the orientation representation is using the negative representation.

The node has the following elements :

An example element looks like this :
<TestSource frequency="10" offset="5" />

DwarfSink

An example element looks like this :
 <DwarfSink frequency="10" offset="5" />

DwarfSource

An example element looks like this :
 <DwarfSource frequency="10" offset="5" />

NetworkSink

The NetworkSink node is a simple EventObserver / EventGenerator that passes events on and stores a copy of the last one. The NetworkSinkModule checks on each pass, whether a NetworkSink node stored a new event and sends that data as the specified station to the network. The NetworkSink element has the following attributes : An example element looks like this :
 <NetworkSink mode="unicast" name="station name" number="0" port="54321">
 <Any EventGenerator element type>
 </NetworkSink>
 <NetworkSink mode="multicast" name="station name" number="1" multicast-address="224.0.0.10" port="12345" interface="192.168.2.100">
 <Any EventGenerator element type>
 </NetworkSink>

NetworkSource

The NetworkSource node is a simple EventGenerator that inserts events from the network into the tracker tree. The NetworkSource element has the following attributes :

TCPSink

The TCPSink node is a simple sink for the TCPModule module. It resembles a single station in the stream of data that is served to clients by the TCPModule module. The node has the following elements : An example element looks like this :
 <TCPSink station="0" position="on" rotation="off" >
 <Any EventGenerator element type>
 </TCPSink>

VRPNSink

The VRPNSink node acts as a single tracking server device using VRPN. It provides its data via a single connection setup by the VRPNModule. Therefore a single VRPNSink node is identifyable by the name attribute that specifies the device name of the node. The type field selects the type of device to be, either a tracker for 6DOF information or a button with up to 8 buttons. The values correspond to the OpenTracker event type. See http://www.vrpn.org/ for details on VRPN.

It has the following attributes :

An example element looks like this :
<VRPNSink name="tracker3" type="tracker" station="2">
 <Any EventGenerator element type>
 </VRPNSink>

VRPNSource

The VRPNSource node acts as a client for a VRPN server. It supports receiving either a single tracker station or a button server with up to 8 buttons. The attribute type selects between the two modes. The station attribute selects the tracker station to report on. The most important attribute is

QtAppScreen

This configuration node is associated with QtMouseEventModule. Consists of XML attributes, which determine the spatial location and extent of the Qt target desktop screen relative to the position and orientation of the ASPD (dedicated 6-DOF tracked device mounted on the the desktop screen). The attribute values can be generated with the OTQt calibration tool (see Configuration of the OTQt manual).

Has the following XML attributes:

An example element looks like this:

<QtAppScreen
  ASHeightVec="0.0000 -0.9999 0.0000"
  ASWidthVec="0.9999 0.0000 0.0000"
  CSOrientationQuat="0.0000 0.0000 -0.7071 0.7071"
  CSRoot2ScreenRootVec="-0.9999 -0.9999 0.0000"
/>

See also:
class ot::QtAppScreen description

QtAppScreenPosSink

Provides the QtMouseEventModule module with position and orientation data, used to calculate the spatial location of the target desktop screen (display of the target Qt application). Designed to be linked with a 6-DOF tracked input device, the so-called Application Screen Position Device (ASPD).

Has the following XML attributes:

An example element looks like this:

<QtAppScreenPosSink PosThreshRadiusInMeter="0.001" OrientThreshAngle="0.1" consume-events="false" >
  <Any EventGenerator element type>
</QtAppScreenPosSink>

See also:
class ot::QtAppScreenPosSink description

QtMouseButtonSink

Provides the QtMouseEventModule module with input device button states, used to compute Qt application mouse button events. Designed to be linked with the so-called Mouse Button Device (MBD).

Destination sink of the MBD.

Provides button state values either enabled or disabled for each button at a time, at least the left, right and middle mouse button (see ButtonId enum).

The mapping between the event button string (see class member State::button) and Qt buttons implemented in the MBS looks the following:

Slot           Qt Button Id

0              Qt::LeftButton
1              Qt::RightButton
2              Qt::MidButton
3-7            not used

A button is considered as "pressed" if the corresponding slot bit is equal to 1 (true/enabled), otherwise the button is considered as "released".

See also:
class QtMouseEventSinkBase description

Has the following XML attributes:

An example element looks like this:

<QtMouseButtonSink consume-events="true">
  <Any EventGenerator element type>
</QtMouseButtonSink>

QtMousePosSink

Provides the QtMouseEventModule module with 3D position data, used to calculate the desktop mouse cursor position. Designed to be linked with a 3-DOF tracked input device, the so-called Mouse Position Device (MPD).

Has the following XML attributes:

An example element looks like this:

<QtMousePosSink PosThreshRadiusInMeter="0.001" consume-events="true">
  <Any EventGenerator element type>
</QtMousePosSink>

See also:
class ot::QtMousePosSink description

QtMouseWheelSink

Provides the QtMouseEventModule module with input device wheel states, used to compute Qt application mouse wheel events. Designed to be linked with the so-called Mouse Wheel Device (MWD).

Destination sink of the MWD.

Provides wheel state values either enabled or disabled for wheel forward and backward rotation.

The MWS uses he button member of the OpenTracker State event class and maps slots to wheel events as follows. A wheel move is indicated by a binary slot value of 1 (true/enabled).

Slot           Wheel Event

0              Wheel Forward Move
1              Wheel Backward Move
2-7            not used

Provides methods indicating wheel forward (see wheelForwardMove()) and wheel backward (see wheelBackwardMove()) moves.

Has the following XML attributes:

An example element looks like this:

<QtMouseWheelSink consume-events="false" >
  <Any EventGenerator element type>
</QtMouseWheelSink>

copyright (c) 2006 Graz University of Technology