Beispiel #1
0
        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);
 }
Beispiel #3
0
        /// <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);
        }