API reference
API reference
Select your platform
No SDKs available
No versions available

IHand Interface

The Interaction SDK's fundamental concept of a tracked hand, exposing data such as wrist and tracked joint poses.
This interface encapsulates the core capabilities common to all hand tracking solutions supported by the Interaction SDK. Where possible, you should use this interface instead of concrete alternatives such as Hand, which are less general and portable.

Properties

Indicates whether the tracked hand is Handedness.Left- or Handedness.Right-handed.
Indicates whether hand tracking is available and has valid data.
Note that, because this reflects both the general availability and present validity of hand tracking data, this value can vary from frame to frame depending on whether the system is currently able to track the hand. This is a valid API to check in order to determine whether up-to-date hand tracking is available at a given moment.
Indicates whether the system has high confidence in the validity of its most recent hand tracking data.
In order for this value to be true, IsConnected and IsTrackedDataValid must also be true.
Indicates whether the current hand is the dominant hand.
The availability of this feature depends on whether or not the platform provides a way to determine whether the user is left- or right-handed.
Indicates the detected scale of the tracked hand relative to the default tracked hand size.
Checks whether a valid "pointer pose" is currently available.
See GetPointerPose(out Pose) for details on what a pointer pose is.
Indicates whether the hand is currently tracked such that tracking poses are available for the hand root and finger joints.
Note that this property being true does not necessarily mean that a valid pointer pose is available; IsPointerPoseValid may be false while valid tracking data is available.
Indicator which is incremented every time new tracked hand data becomes available.

Events

Event indicating that CurrentDataVersion has been incremented and thus the hand can be queried for potentially new data.

Member Functions

Checks whether a particular finger is considered to be pinching.
How a given finger is determined to be pinching is an implementation detail which can vary by finger/platform and is not part of the contract of this method, which merely provides a unified way to query for the semantic concept of a "pinch".
Parameters
finger
The finger to check for pinching behavior
Returns
Whether or not the requested finger is considered to be pinching
A convenience method to check for the most commonly-desired pinching behavior.
Calling this method is equivalent to calling GetFingerIsPinching(HandFinger) with the argument HandFinger.Index.
Returns
Whether or not the index finger is considered to be pinching
Attempts to return a valid "pointer pose" for the hand.
A "pointer pose" is a world-space pose (position and orientation) intended to be used as a directional input, conceptually comparable to "pointing at something." However, the nature of this pose and its relationship to the hand are not part of the contract of this method; it may or may not correspond to a "direction of pointing," and in many implementations it corresponds more closely to a "direction of reaching out." These details can vary, but in all cases this method provides a unified way to query for the semantic concept of a "pointer."
Parameters
pose
A valid world-space pointer pose if one could be calculated, identity otherwise
Returns
True if the pose argument was populated with a valid pointer pose, false otherwise
Attempts to return the world-space pose of the requested hand joint.
Parameters
handJointId
The joint for which the pose is being requested
pose
A valid world-space joint pose if one is available, identity otherwise
Returns
True if the pose argument was populated with a valid joint pose, false otherwise
Attempts to return the pose of the requested hand joint in "local" space.
This "local" space is loosely defined and can vary by platform (in some implementations, each joint is relative to a given parent joint), so the exact nature of what is returned by this method is not guaranteed. In general, it is recommended to use GetJointPose(HandJointId, out Pose) or GetJointPoseFromWrist(HandJointId, out Pose) instead where possible.
Parameters
handJointId
The joint for which the pose is being requested
pose
A valid "local" space joint pose if one is available, identity otherwise
Returns
True if the pose argument was populated with a valid joint pose, false otherwise
Retrieves all "local" space joint poses for this hand.
The values returned by this method are the same as those returned by calling GetJointPoseLocal(HandJointId, out Pose) repeatedly, but as a batched query this method can be more efficient if many joint poses are needed.
Parameters
localJointPoses
The array of all "local" joint poses if available, or an empty array otherwise
Returns
True if the poses collection was correctly populated, false otherwise
Attempts to return the pose of the requested hand joint in wrist space.
Wrist space is strongly defined as a transform space located and oriented according to HandJointId.HandWristRoot. This space is of uniform scale across hand sizes, meaning all tracked hands are the same size in wrist space, and wrist space itself must be multipled by Scale in order to correctly reflect the observed size of the tracked hands in world space.
Parameters
handJointId
The joint for which the pose is being requested
pose
A valid wrist space joint pose if available, false otherwise
Returns
True if the pose argument was populated with a valid joint pose, false otherwise
Retrieves all wrist space joint poses for this hand.
The values returned by this method are the same as those returned by calling GetJointPoseFromWrist(HandJointId, out Pose) repeatedly, but as a batched query this method can be more efficient if many joint poses are needed.
Parameters
jointPosesFromWrist
The array of all wrist space joint poses if available, or an empty array otherwise
Returns
True if the poses collection was correctly populated, false otherwise
Attempts to return the pose of the palm in "local" space.
This "local" space is loosely defined and can vary by platform; in some implementations, it can be considered for this method in particular to be synonymous with wrist space.
Parameters
pose
The "local" palm position and orientation if available, identity otherwise
Returns
True if the pose argument was populated with a valid palm pose, false otherwise
Queries whether the tracking data for a particular finger is high- or low-confidence.
Parameters
finger
The finger to be checked for high-confidence tracking data
Returns
True if the system is confident in its tracking data for the requested finger, false otherwise
Queries the strength with which a particular finger is considered to be pinching.
"Strength" in this case is an indication of how similar or different the finger's pose is to what could be considered a pinch; a finger with its tip far from the thumb will likely have a pinch strength at or near 0, while a finger with its tip touching the thumb will likely have a pinch strength at or near 1.
Parameters
finger
The finger to be checked for pinch strength
Returns
A number from 0 to 1 indicating how far or close, respectively, the finger is from pinching
Attempts to retrieve the pose of the wrist joint in world space.
This is a convenience method and is identical to calling GetJointPose(HandJointId, out Pose) with the argument HandJointId.HandWristRoot.
Parameters
pose
A void world space pose for the wrist joint if available, identity otherwise
Returns
True if the pose argument was populated with a valid joint pose, false otherwise
Did you find this page helpful?
Thumbs up icon
Thumbs down icon