示例#1
0
文件: Fubi.cs 项目: user-mfp/IMI
        public static void updateTrackingData(uint userId, FubiTrackingData data, FubiAccelerationData accelData = null)
        {
            GCHandle hSkeleton = new GCHandle();
            GCHandle hAccel = new GCHandle();
            IntPtr skelPointer = new IntPtr(0);
            IntPtr accelPointer = new IntPtr(0);
            double timeStamp = -1;

            if (data != null)
            {
                float[] skeletonArray = data.getArray();
                hSkeleton = GCHandle.Alloc(skeletonArray, GCHandleType.Pinned);
                skelPointer = hSkeleton.AddrOfPinnedObject();
                timeStamp = data.timeStamp;
            }
            if (accelData != null)
            {
                float[] accelArray = accelData.getArray();
                hAccel = GCHandle.Alloc(accelArray, GCHandleType.Pinned);
                accelPointer = hAccel.AddrOfPinnedObject();
                if (timeStamp < 0)
                    timeStamp = accelData.timeStamp;
            }

            FubiInternal.updateTrackingData(userId, skelPointer, timeStamp, accelPointer);

            if (hSkeleton.IsAllocated)
                hSkeleton.Free();
            if (hAccel.IsAllocated)
                hAccel.Free();
        }