Proximity Toolkit Data
The root of the data hierarchy is a ProximitySpace object, which contains information about the dimensions of the capture area, and establishes the 3D coordinate system.
The Proximity Space deals with 4 different concepts of presence, that are specializations of the PresenceBase class:
- TrackedPresences (aka. Presences) - Detectable artifacts that can be changed or manipulated.
- DisplayPlanes - Rectangular areas that represent screens or monitors. Usually these are fixed in place, however the DisplayDecorator supports mobile displays on devices such as tablets or phones, which appear as sub-nodes of their TrackedPresence anchor.
- Volumes - Shapes that represent surfaces or solid objects such as furniture, or hollow regions of interest.
- CaptureDevices - Spacial information about input sensors that may be required for Input Modules to represent their collected data in the common coordinate space.
PresencesObjects can contain any of the following data decorators (discussed in detail above), as specializations of the DecoratorBase class:
- LocationDecorator - An absolute position in 3D space that is representative of the whole presence.
- MotionDecorator - Details about movement in 3D space that is representative of the whole presence.
- OrientationDecorator - Details about where a presence is facing, and what way up.
- RotationDecorator - Details about the rotation of the presence.
- CollisionDecorator - Details about the physical volume of the presence (currently under development).
- MarkerDecorator - A set of detectable points that are subparts of the presence.
- PointerDecorator - A set of defined rays that point in directions of interest from the presence.
- DisplayDecorator - The details of a display that is attached to a presence (useful for phones/tablets).
The ViconInputModule extends the collection of possible decorators:
- PoseDecorator - The skeleton of a presence with movable parts, representing bones and joints.
TrackedPresences require decorators because their set of proximity information may vary depending on the capabilities of the input technology used. Fixed objects such as DisplayPlane, Volume, and CaptureDevice do not contain decorators because their set of properties are calibrated manually.
Each of the above PresenceBase and DecoratorBase specializations implement a common interface called IPresenceNode. These objects form a traversable data tree that goes from the ProximitySpace root, right down to the individual data properties of PresenceBase and DecoratorBase objects. The IPresenceNode.Parent property holds the parent node in the tree structure, while the IPresenceNode.Nodes structure holds the list of child nodes. Data for any subtree can be accessed by using an indexer on a node, and a dot-separated path string as follows:
object data = Node["NodeName.NodeName"]
OR, if a particular data type is expected:
DataType data = Node.GetValue<DataType>("NodeName.NodeName")