マルチタッチデバイスで何点取れているか、IDの振り方を確認するC#アプリ。
Flashでも似たものを以前作っていて、役に立ってはいるのだが、それはFlashでちゃんと動くことを確認するツールであった。しかし挙動が予想どおりで無い場合、それがFlashの問題なのか否かを切り分ける必要があるので、MS推奨C#でも同様のツールを作ってみた。
特にチェックツールとしての工夫は無いし、細かい動作仕様は異なっているのだが、C#、AS双方で確認するということ自体が意味があるはずだと考えて作った。
ファイル一式
https://github.com/umhr/MultiTouchChecker
確認したタッチパネルはEIZOのT2351W(二点までの光学式)
参考
http://code.msdn.microsoft.com/CVBXAML-WPF-4-TouchDown-b1018a60/
Note: TouchDown イベントが発生する正確なタイミングは、指がタッチした際ではなく、タッチして移動を開始したときです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using System.Windows.Shapes; namespace WpfApplication1 { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private Dictionary<TouchDevice, Ellipse> ellipseList = new Dictionary<TouchDevice, Ellipse>(); private Dictionary<TouchDevice, Label> labelList = new Dictionary<TouchDevice, Label>(); private Dictionary<TouchDevice, Line> lineVList = new Dictionary<TouchDevice, Line>(); private Dictionary<TouchDevice, Line> lineHList = new Dictionary<TouchDevice, Line>(); private void Canvas1_TouchDown(object sender, TouchEventArgs e) { var pt = e.GetTouchPoint(Canvas1); // 縦線を作ります。 var lineV = new Line(); lineV.X1 = lineV.X2 = pt.Position.X; lineV.Y1 = 0; lineV.Y2 = ActualHeight; lineV.Stroke = Brushes.Red; Canvas1.Children.Add(lineV); lineVList[e.TouchDevice] = lineV; // 横線を作ります。 var lineH = new Line(); lineH.X1 = 0; lineH.X2 = ActualWidth; lineH.Y1 = lineH.Y2 = pt.Position.Y; lineH.Stroke = Brushes.Red; Canvas1.Children.Add(lineH); lineHList[e.TouchDevice] = lineH; // 円を作ります。 var ellipse = new Ellipse(); ellipse.Width = 50; ellipse.Height = 50; ellipse.Fill = Brushes.Blue; ellipse.RenderTransform = new TranslateTransform(pt.Position.X - ellipse.RenderSize.Width / 2, pt.Position.Y - ellipse.RenderSize.Height / 2); Canvas1.Children.Add(ellipse); ellipseList[e.TouchDevice] = ellipse; // idを表すラベルを作ります。 var label = new Label(); label.Foreground = Brushes.White; label.FontSize = 36; label.Content = e.TouchDevice.Id; label.RenderTransform = new TranslateTransform(pt.Position.X - label.RenderSize.Width / 2, pt.Position.Y - label.RenderSize.Height / 2); Canvas1.Children.Add(label); labelList[e.TouchDevice] = label; Canvas1.InvalidateVisual(); Canvas1.CaptureTouch(e.TouchDevice); } private void Canvas1_TouchMove(object sender, TouchEventArgs e) { if (e.TouchDevice.Captured == Canvas1) { var pt = e.GetTouchPoint(Canvas1); var ellipse1 = ellipseList[e.TouchDevice]; ellipse1.RenderTransform = new TranslateTransform(pt.Position.X - ellipse1.RenderSize.Width / 2,pt.Position.Y - ellipse1.RenderSize.Height / 2); var label = labelList[e.TouchDevice]; label.RenderTransform = new TranslateTransform(pt.Position.X - label.RenderSize.Width / 2, pt.Position.Y - label.RenderSize.Height / 2); var lineV = lineVList[e.TouchDevice]; lineV.X1 = lineV.X2 = pt.Position.X; var lineH = lineHList[e.TouchDevice]; lineH.Y1 = lineH.Y2 = pt.Position.Y; label1.Content = "CurrentTouchPoints:" + ellipseList.Count; } } private void Canvas1_TouchUp(object sender, TouchEventArgs e) { if (e.TouchDevice.Captured == Canvas1) { Canvas1.ReleaseTouchCapture(e.TouchDevice); Canvas1.Children.Remove(ellipseList[e.TouchDevice]); ellipseList.Remove(e.TouchDevice); Canvas1.Children.Remove(labelList[e.TouchDevice]); labelList.Remove(e.TouchDevice); Canvas1.Children.Remove(lineVList[e.TouchDevice]); lineVList.Remove(e.TouchDevice); Canvas1.Children.Remove(lineHList[e.TouchDevice]); lineHList.Remove(e.TouchDevice); label1.Content = "CurrentTouchPoints:" + ellipseList.Count; } } } } |
2 Comments
[…] MultiTouchChecker(C#) […]
[…] この後、同等機能のC#版のチェッカーアプリも使って確認をしました。 […]