画面に並んだ写真が指の動きに反応して回転するLeap Motionプログラムを作る
2013年12月5日(木)
リスト4 MainWindow_Loadedメソッド
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded xmldoc = XElement.Load("forest.xml") ' XMLファイルの読み込み For Each result In From c In xmldoc.Descendants("画像名") Select c ' 新しいImageのインスタンスmyImageを作成してSourceプロパティにImageフォルダ ' 内の画像を指定する myImage = New Image With myImage .Width = 320 .Height = 240 .Stretch = Stretch.Uniform .Source = New BitmapImage(New Uri("Images/" & result.Value, UriKind.Relative)) End With ' ListBoxに表示された画像の上にマウスカーソルが乗ると、 ' 画像がY軸を中心に回転する処理 AddHandler myImage.MouseEnter, Sub(mySender As Object, myArgs As MouseEventArgs) Dim _myImage = DirectCast(mySender, Image) Dim myStoryboard As New Storyboard Dim myScale As New ScaleTransform(1.0, 1.0) _myImage.RenderTransformOrigin = New Point(0.5, 0.5) _myImage.RenderTransform = myScale ' 以下アニメーション処理 Dim myDoubleAnimation As New DoubleAnimation myDoubleAnimation.Duration = TimeSpan.FromMilliseconds(300) myDoubleAnimation.From = 1 myDoubleAnimation.To = -1 myStoryboard.Children.Add(myDoubleAnimation) Storyboard.SetTargetProperty(myDoubleAnimation, New PropertyPath("RenderTransform.ScaleX")) Storyboard.SetTarget(myDoubleAnimation, _myImage) Dim myDoubleAnimation2 As New DoubleAnimation myDoubleAnimation2.Duration = TimeSpan.FromMilliseconds(1000) myDoubleAnimation2.From = -1 myDoubleAnimation2.To = 1 myStoryboard.Children.Add(myDoubleAnimation2) Storyboard.SetTargetProperty(myDoubleAnimation2, New PropertyPath("RenderTransform.ScaleX")) Storyboard.SetTarget(myDoubleAnimation2, _myImage) myStoryboard.Begin() End Sub ListBox1.Items.Add(myImage) Next ・・・・以下4回目と同じコードのため省略・・・・ End Sub
Updateメソッドの処理
4回と同じにつき割愛します、4回を参照してください。
今回は、常にタッチした処理を維持し、ホバーやタッチの区別は行っていませんが、一応、ホバーとタッチのイメージを載せておきます、次の図3のようなイメージです。
Updateメソッドの処理(タッチ・ポイントが画像の上に乗った時の処理)
手前側が「ホバー状態(hovering)」、奥側が「タッチ状態(touching)」を表します。空間の範囲は前後「1」~「-1」となっています。
今回は、常にタッチした処理を維持し、ホバーやタッチの区別は行っていません。タッチ・ポイントが画像の上に入ればY軸を中心に回転させています(リスト5)。
リスト5 (MainWindow.xaml.vb)
For Each Pointable As Pointable In leap.Frame.Pointables Dim normalizedPosition As Leap.Vector = interactionBox.NormalizePoint(Pointable.StabilizedTipPosition) ……コード略(4回と同じ)…… touchIndicator.Color = Colors.Red x = touchPoint.X y = touchPoint.Y SetCursorPos(x, y) ' タッチ・ポイントマウスカーソルの位置を合わせる apimouse_event(MOUSEEVENTF_MOVE, 0, 0, 0, 0) ' Mouse Moverイベントを発生させる Next End Sub
※注意
サンプルをダウンロードして動かす場合は、「LeapCSharp.NET4.0.dll」や「LeapCSharp.dll」、「Leap.dll」を読者自身のフォルダ内にあるDLLファイルに指定し直さなければ動かない可能性があるので、動かない場合は再指定してください。
画面に並んだ写真が指の動きに反応して回転するLeap Motionプログラム
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。
全文検索エンジンによるおすすめ記事
- 写真を突っついて一覧から削除、並び替えするLeap Motionプログラムを作る
- Leap Motionのスクリーン・タップを使った音声の再生と画像の表示
- TabControlでの画像の切り替えとRichTextBoxの利用
- 好きな写真を指で選んで順番に拡大表示するLeap Motionプログラムを作る
- 張子の虎をキー・タップすると頭が上下に動くLeap Motionプログラムを作る
- Leap Motionで画像のトリミングと保存を行うためのサンプルプログラムを作る
- ストーリーボードでアニメーションを実装する
- Kinect v2の音声認識で「仮面」を選んで変身してみる
- マウス・カーソルで指定した画像の一部を拡大表示するLeap Motionプログラム
- 選択した画像を指の動きに合わせて回転させるLeap Motionプログラムを作る