static public bool TryGetDataFromSource(TrackedPoseDriver.TrackedPose poseSource, out Pose resultPose) { switch (poseSource) { case TrackedPoseDriver.TrackedPose.RemotePose: { if (!TryGetNodePoseData(XR.XRNode.RightHand, out resultPose)) { return(TryGetNodePoseData(XR.XRNode.LeftHand, out resultPose)); } return(true); } case TrackedPoseDriver.TrackedPose.LeftEye: { return(TryGetNodePoseData(XR.XRNode.LeftEye, out resultPose)); } case TrackedPoseDriver.TrackedPose.RightEye: { return(TryGetNodePoseData(XR.XRNode.RightEye, out resultPose)); } case TrackedPoseDriver.TrackedPose.Head: { return(TryGetNodePoseData(XR.XRNode.Head, out resultPose)); } case TrackedPoseDriver.TrackedPose.Center: { return(TryGetNodePoseData(XR.XRNode.CenterEye, out resultPose)); } case TrackedPoseDriver.TrackedPose.LeftPose: { return(TryGetNodePoseData(XR.XRNode.LeftHand, out resultPose)); } case TrackedPoseDriver.TrackedPose.RightPose: { return(TryGetNodePoseData(XR.XRNode.RightHand, out resultPose)); } case TrackedPoseDriver.TrackedPose.ColorCamera: { if (!TryGetTangoPose(out resultPose)) { // We fall back to CenterEye because we can't currently extend the XRNode structure, nor are we ready to replace it. return(TryGetNodePoseData(XR.XRNode.CenterEye, out resultPose)); } return(true); } } resultPose = Pose.identity; return(false); }
public bool SetPoseSource(TrackedPoseDriver.DeviceType deviceType, TrackedPoseDriver.TrackedPose pose) { if (deviceType < (TrackedPoseDriver.DeviceType)TrackedPoseDriverDataDescription.DeviceData.Count) { TrackedPoseDriverDataDescription.PoseData poseData = TrackedPoseDriverDataDescription.DeviceData[(int)deviceType]; for (int i = 0; i < poseData.Poses.Count; i++) { if (poseData.Poses[i] == pose) { this.poseSource = pose; return(true); } } } return(false); }
/// <summary> /// <signature><![CDATA[GetDataFromSource(TrackedPose,Pose)]]></signature> /// <summary>The GetDatafromSource method is used to query data from the XRNode subsystem based on the provided pose source.</summary> /// <param name = "poseSource" > The pose source to request data for.</param> /// <param name = "resultPose" > The resulting pose data. This function will return the Center Eye pose if the Color Camera pose is not available. </param> /// <returns>Retuns a bitflag which represents which data has been retrieved from the provided pose source</returns> static public PoseDataFlags GetDataFromSource(TrackedPoseDriver.TrackedPose poseSource, out Pose resultPose) { #if ENABLE_VR switch (poseSource) { case TrackedPoseDriver.TrackedPose.RemotePose: { PoseDataFlags retFlags = GetNodePoseData(XR.XRNode.RightHand, out resultPose); if (retFlags == PoseDataFlags.NoData) { return(GetNodePoseData(XR.XRNode.LeftHand, out resultPose)); } return(retFlags); } case TrackedPoseDriver.TrackedPose.LeftEye: { return(GetNodePoseData(XR.XRNode.LeftEye, out resultPose)); } case TrackedPoseDriver.TrackedPose.RightEye: { return(GetNodePoseData(XR.XRNode.RightEye, out resultPose)); } case TrackedPoseDriver.TrackedPose.Head: { return(GetNodePoseData(XR.XRNode.Head, out resultPose)); } case TrackedPoseDriver.TrackedPose.Center: { return(GetNodePoseData(XR.XRNode.CenterEye, out resultPose)); } case TrackedPoseDriver.TrackedPose.LeftPose: { return(GetNodePoseData(XR.XRNode.LeftHand, out resultPose)); } case TrackedPoseDriver.TrackedPose.RightPose: { return(GetNodePoseData(XR.XRNode.RightHand, out resultPose)); } case TrackedPoseDriver.TrackedPose.ColorCamera: { PoseDataFlags retFlags = TryGetTangoPose(out resultPose); if (retFlags == PoseDataFlags.NoData) { // We fall back to CenterEye because we can't currently extend the XRNode structure, nor are we ready to replace it. return(GetNodePoseData(XR.XRNode.CenterEye, out resultPose)); } return(retFlags); } default: { Debug.LogWarningFormat("Unable to retrieve pose data for poseSource: {0}", poseSource.ToString()); break; } } #endif resultPose = Pose.identity; return(PoseDataFlags.NoData); }
/// <summary> /// <signature><![CDATA[TryGetDataFromSource(TrackedPose,Pose)]]></signature> /// <summary>The GetDatafromSource method is used to query data from the XRNode subsystem based on the provided pose source.</summary> /// <param name = "poseSource" > The pose source to request data for.</param> /// <param name = "resultPose" > The resulting pose data.</param> /// <returns>True, if the pose source is valid, otherwise false.</returns> static public bool TryGetDataFromSource(TrackedPoseDriver.TrackedPose poseSource, out Pose resultPose) { return(GetDataFromSource(poseSource, out resultPose) == (PoseDataFlags.Position | PoseDataFlags.Rotation)); }
private bool GetDataFromSource(TrackedPoseDriver.DeviceType device, TrackedPoseDriver.TrackedPose poseSource, out Pose resultPose) { bool result; switch (poseSource) { case TrackedPoseDriver.TrackedPose.LeftEye: resultPose.position = InputTracking.GetLocalPosition(XRNode.LeftEye); resultPose.rotation = InputTracking.GetLocalRotation(XRNode.LeftEye); result = true; break; case TrackedPoseDriver.TrackedPose.RightEye: resultPose.position = InputTracking.GetLocalPosition(XRNode.RightEye); resultPose.rotation = InputTracking.GetLocalRotation(XRNode.RightEye); result = true; break; case TrackedPoseDriver.TrackedPose.Center: resultPose.position = InputTracking.GetLocalPosition(XRNode.CenterEye); resultPose.rotation = InputTracking.GetLocalRotation(XRNode.CenterEye); result = true; break; case TrackedPoseDriver.TrackedPose.Head: resultPose.position = InputTracking.GetLocalPosition(XRNode.Head); resultPose.rotation = InputTracking.GetLocalRotation(XRNode.Head); result = true; break; case TrackedPoseDriver.TrackedPose.LeftPose: resultPose.position = InputTracking.GetLocalPosition(XRNode.LeftHand); resultPose.rotation = InputTracking.GetLocalRotation(XRNode.LeftHand); result = true; break; case TrackedPoseDriver.TrackedPose.RightPose: resultPose.position = InputTracking.GetLocalPosition(XRNode.RightHand); resultPose.rotation = InputTracking.GetLocalRotation(XRNode.RightHand); result = true; break; case TrackedPoseDriver.TrackedPose.ColorCamera: result = this.TryGetTangoPose(CoordinateFrame.CameraColor, out resultPose); break; case TrackedPoseDriver.TrackedPose.DepthCamera: result = this.TryGetTangoPose(CoordinateFrame.CameraDepth, out resultPose); break; case TrackedPoseDriver.TrackedPose.FisheyeCamera: result = this.TryGetTangoPose(CoordinateFrame.CameraFisheye, out resultPose); break; case TrackedPoseDriver.TrackedPose.Device: result = this.TryGetTangoPose(CoordinateFrame.Device, out resultPose); break; case TrackedPoseDriver.TrackedPose.RemotePose: resultPose.position = InputTracking.GetLocalPosition(XRNode.RightHand); resultPose.rotation = InputTracking.GetLocalRotation(XRNode.RightHand); result = true; break; default: resultPose = Pose.identity; result = false; break; } return(result); }