質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

3521閲覧

視線計測装置eye tribe trackerについて

tomorrowny

総合スコア19

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2015/01/13 03:15

私は現在視線計測装置eye tribe trackerというものを使って視線計測を行うプログラムを作っています(言語はC#です)。その際に視線の位置を丸で表示したいと思って、いろいろ調べてみたのですが、ほかにその装置を使っている方は視線の位置に円形のウィンドウを表示させているということでした。

そこで質問なのですが、どうすれば視線の座標上に円型のウィンドウを表示させることができるのでしょうか?
ちなみに現在下のようなプログラムで視線の座標を取ることはできています。

public void OnGazeUpdate(GazeData gazeData)
{
double gX = gazeData.SmoothedCoordinates.X;
double gY = gazeData.SmoothedCoordinates.Y;

// Move point, do hit-testing, log coordinates etc. Console.WriteLine("{0}, {1}", gX, gY); }

プログラムに関してはかなり初心者なのでできれば詳細に教えていただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

マウスを追っかける円を実装してみました。
AllowsTransparency="true"で背景を透明にしています。
ReactiveExtensionを利用し、100ms 毎にイベント生成し、マウスの座標からwindowの位置を設定しています。
マウスの座標取得する箇所をOnGazeUpdateに置き換えてやれば動作すると思います。

lang

1#MainWindow.xaml 2<Window x:Class="Maru.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 Title="MainWindow" WindowStyle="None" AllowsTransparency="true" WindowState="Normal" Topmost="True"> 6 <Grid> 7 <Ellipse Stroke="Red" Width="60" Height="60" Name="maru" /> 8 </Grid> 9 <Window.Background> 10 <SolidColorBrush /> 11 </Window.Background> 12</Window>

lang

1using System; 2// https://rx.codeplex.com/ 3using System.Reactive.Linq; 4using System.Runtime.InteropServices; 5using System.Windows; 6 7namespace Maru 8{ 9 public partial class MainWindow : Window 10 { 11 #region マウス座標取得 12 [DllImport("user32.dll")] 13 [return: MarshalAs(UnmanagedType.Bool)] 14 internal static extern bool GetCursorPos(ref Win32Point pt); 15 16 [StructLayout(LayoutKind.Sequential)] 17 internal struct Win32Point 18 { 19 public Int32 X; 20 public Int32 Y; 21 }; 22 public static Point GetMousePosition() 23 { 24 Win32Point w32Mouse = new Win32Point(); 25 GetCursorPos(ref w32Mouse); 26 return new Point(w32Mouse.X, w32Mouse.Y); 27 } 28 #endregion 29 30 public MainWindow() 31 { 32 InitializeComponent(); 33 // 100ms 毎にイベント生成 34 var mouseMove = Observable.Timer(TimeSpan.Zero, TimeSpan.FromMilliseconds(100)); 35 36 // イベント発生毎に丸の位置を設定 37 mouseMove.Subscribe(l => SetCircle(GetMousePosition())); 38 } 39 40 public void SetCircle(Point p) 41 { 42 // Dispatcherを使いUI更新 43 this.Dispatcher.BeginInvoke( 44 new Action(() => 45 { 46 this.Top = p.Y - this.Height / 2; 47 this.Left = p.X - this.Width / 2; 48 })); 49 } 50 51 } 52}

投稿2015/01/13 12:25

sho_cs

総合スコア3541

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問