/// <summary> /// Synthesizes mouse motion and button clicks. Function of same name was superseded by SendInput. /// Use as described by: http://msdn.microsoft.com/en-us/library/ms646260%28v=vs.85%29.aspx /// </summary> public static void MouseEvent(int dwFlags, int dx, int dy, int dwData) { SendInputClass.INPUT input = new SendInputClass.INPUT(); input.mi.dwFlags = dwFlags; input.mi.dx = dx; input.mi.dy = dy; input.mi.dwData = dwData; SendInputClass.INPUT[] inputArr = { input }; SendInputClass.SendInput(1, inputArr, Marshal.SizeOf(input)); }
/// <summary> /// Calibrated inertial/magnetic data received event to update objects. /// </summary> static void xIMUserial_CalInertialMagneticDataReceived(object sender, x_IMU_API.CalInertialAndMagneticData e) { ballTracking.Gyroscope = new float[] { (e.Gyroscope[0] / 360) * (float)(2 * Math.PI), (e.Gyroscope[1] / 360) * (float)(2 * Math.PI), (e.Gyroscope[2] / 360) * (float)(2 * Math.PI) }; ballTracking.Update(); if (form_3Dcuboid != null) { form_3Dcuboid.TranslationVector = new float[] { ballTracking.Position[0], ballTracking.Position[1], 0.0f }; form_3Dcuboid.RotationMatrix = ballTracking.RotationMatrix; } else { SendInputClass.MouseEvent((int)(SendInputClass.MOUSEEVENTF.MOVE), (int)(ballTracking.Velocity[0] * 25.0), (int)(ballTracking.Velocity[1] * -25.0f), 0); if (Math.Sqrt(e.Accelerometer[0] * e.Accelerometer[0] + e.Accelerometer[1] * e.Accelerometer[1] + e.Accelerometer[2] * e.Accelerometer[2]) > 5.0) // if accelerometer magnitude > 5 g { SendInputClass.MouseEvent((int)SendInputClass.MOUSEEVENTF.LEFTDOWN, 0, 0, 0); SendInputClass.MouseEvent((int)SendInputClass.MOUSEEVENTF.LEFTUP, 0, 0, 0); } } }