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(); }
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; }
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; }
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; }
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; } }
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; } } }
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; } } }
public static extern bool FTGetData(ref FreeTrackData data);
private static extern bool FTGetData(ref FreeTrackData data);