コード例 #1
0
        public void Context()
        {
            var reset = new AutoResetEvent(false);
            var count = 0;
            var rand  = new Random();

            ThreadPool.QueueUserWorkItem(o =>
            {
                using (var memoryMappedFile = MemoryMappedFile.CreateOrOpen("FT_SharedMem", Marshal.SizeOf(typeof(FreeTrackData))))
                {
                    using (var accessor = memoryMappedFile.CreateViewAccessor())
                    {
                        while (run)
                        {
                            count++;
                            var model = new FreeTrackData
                            {
                                DataID = count,
                                Yaw    = rand.Next(0, 5),
                                Pitch  = rand.Next(5, 10),
                                Roll   = rand.Next(10, 15),
                                X      = rand.Next(15, 20),
                                Y      = rand.Next(20, 25),
                                Z      = rand.Next(25, 30)
                            };

                            accessor.Write(0, ref model);

                            reset.Set();
                        }
                    }
                }
            });
            reset.WaitOne();
        }
コード例 #2
0
ファイル: UM_FreeTrack.cs プロジェクト: NoxWings/UniMotion
 public UM_FreeTrack()
     : base()
 {
     SetDeviceInfo(UM_Device.UM_FREETRACK,
                   UM_Capabilities.UM_ORIENTATION_AUTO |
                   UM_Capabilities.UM_POSITION_DIRECTIONAL);
     ftData = new FreeTrackData();
     resetOrientation = Quaternion.identity;
 }
コード例 #3
0
	public Vector3d GetPosition()
	{
		Vector3d pos = new Vector3d(0, 0, 0);
		FreeTrackData trackData = new FreeTrackData();
		if (FTGetData(ref trackData))
		{
			pos.x = trackData.X / 100;
			pos.y = trackData.Y / 100;
			pos.z = trackData.Z / 100;
		}
		return pos;
	}
コード例 #4
0
	public Vector3d GetRotation()
	{
		Vector3d rot = new Vector3d(0, 0, 0);
		FreeTrackData trackData = new FreeTrackData();
		if (FTGetData(ref trackData))
		{
			rot.x = trackData.Pitch * 100;
			rot.y = trackData.Yaw * 100;
			rot.z = trackData.Roll * 100;
		}
		return rot;
	}
コード例 #5
0
 public void GetData(ref Vector3 rot, ref Vector3 pos)
 {
     FreeTrackData trackData = new FreeTrackData();
     if (FTGetData(ref trackData))
     {
         rot.x = trackData.Pitch * 100;
         rot.y = trackData.Yaw * 100;
         rot.z = trackData.Roll * 100;
         pos.x = trackData.X / 100;
         pos.y = trackData.Y / 100;
         pos.z = trackData.Z / 100;
     }
 }
コード例 #6
0
 private void GetRawData()
 {
     FreeTrackData trackData = new FreeTrackData();
     if (FTGetData(ref trackData))
     {
         // FaceTrackNoIR occasionally returns values of all zero, causing jumping.
         // Ignore zeroed values.
         if (!(trackData.RawPitch == 0 && trackData.RawRoll == 0 && trackData.RawYaw == 0))
         {
             rotationState.x = trackData.Pitch * 100;
             rotationState.y = trackData.Yaw * 100;
             rotationState.z = trackData.Roll * 100;
             positionState.x = trackData.X / 100;
             positionState.y = trackData.Y / 100;
             positionState.z = trackData.Z / 100;
         }
     }
 }
コード例 #7
0
    private void GetRawData()
    {
        FreeTrackData trackData = new FreeTrackData();

        if (FTGetData(ref trackData))
        {
            // FaceTrackNoIR occasionally returns values of all zero, causing jumping.
            // Ignore zeroed values.
            if (!(trackData.RawPitch == 0 && trackData.RawRoll == 0 && trackData.RawYaw == 0))
            {
                rotationState.x = trackData.Pitch * 100;
                rotationState.y = trackData.Yaw * 100;
                rotationState.z = trackData.Roll * 100;
                positionState.x = trackData.X / 1000;
                positionState.y = trackData.Y / 1000;
                positionState.z = trackData.Z / 1000;
            }
        }
    }
コード例 #8
0
 public static extern bool FTGetData(ref FreeTrackData data);
コード例 #9
0
 public static extern bool FTGetData(ref FreeTrackData data);
コード例 #10
0
ファイル: UM_FreeTrack.cs プロジェクト: NoxWings/UniMotion
 private static extern bool FTGetData(ref FreeTrackData data);