WPFのinkCanvasで手書きでなく直線や円の描画方法 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 質問  (学生)
投稿日時
2010/2/2 18:59:02
魔界の仮面弁士さん
ご回答ありがとうございます。
大変参考になりました。
円や四角などはどのようにすればよいでしょうか?
又、マウスアップで描画されるのではなく、マウスの軌跡を追いながら直線、円、四角を描画する
ことを最終的に実現したいと思いますが、MouseMoveにご回答頂いた記述を入れてみて試行錯誤
していますが、マウスの軌跡にそった描画になり直線になってくれません。
ご回答ありがとうございます。
大変参考になりました。
円や四角などはどのようにすればよいでしょうか?
又、マウスアップで描画されるのではなく、マウスの軌跡を追いながら直線、円、四角を描画する
ことを最終的に実現したいと思いますが、MouseMoveにご回答頂いた記述を入れてみて試行錯誤
していますが、マウスの軌跡にそった描画になり直線になってくれません。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2010/2/2 05:21:35
> マウスダウンからアップに合わしたinkCanvas上の描画方法が分かりません。
スタイラスペンではなく、マウスを使って操作しているのですね。
であれば、こんな感じでいかがでしょう。
スタイラスペンではなく、マウスを使って操作しているのですね。
であれば、こんな感じでいかがでしょう。
Private Sub Window1_Loaded( _
ByVal sender As Object, _
ByVal e As System.Windows.RoutedEventArgs _
) Handles Me.Loaded
inkCanvas1.EditingMode = InkCanvasEditingMode.None
End Sub
Private mouseSpc As StylusPointCollection
Private Sub inkCanvas1_MouseDown( _
ByVal sender As System.Object, _
ByVal e As System.Windows.Input.MouseButtonEventArgs _
) Handles inkCanvas1.MouseDown
mouseSpc = New StylusPointCollection()
Dim p As Point = e.GetPosition(inkCanvas1)
mouseSpc.Add(New StylusPoint(p.X, p.Y))
End Sub
Private Sub inkCanvas1_MouseUp( _
ByVal sender As Object, _
ByVal e As System.Windows.Input.MouseButtonEventArgs _
) Handles inkCanvas1.MouseUp
If mouseSpc IsNot Nothing Then
Dim p As Point = e.GetPosition(inkCanvas1)
mouseSpc.Add(New StylusPoint(p.X, p.Y))
inkCanvas1.Strokes.Add(New System.Windows.Ink.Stroke(mouseSpc))
mouseSpc = Nothing
End If
End Sub
投稿者 質問  (学生)
投稿日時
2010/2/1 18:39:43
VB2008とXAMLでinkCanvasを使って簡単に手書き描画は行えましたが、
直線や円や四角などをマウスダウンからアップに合わしたinkCanvas上の描画方法が分かりません。
お分かりの方おられましたら、参考になるサイトや記述方法など教えていただけないでしょうか?
よろしくお願いいたします。
直線や円や四角などをマウスダウンからアップに合わしたinkCanvas上の描画方法が分かりません。
お分かりの方おられましたら、参考になるサイトや記述方法など教えていただけないでしょうか?
よろしくお願いいたします。
たとえば、 にすれば、直角二等辺三角形になります。
あるいは、ストロークとして描くのではなく、
System.Windows.Shapes 名前空間で用意された図形を用いる方法もあります。
http://msdn.microsoft.com/ja-jp/library/system.windows.shapes.aspx
> マウスの軌跡を追いながら直線、円、四角を描画する
MouseMove 中で、描画データを変化させていけばよいかと思います。
たとえば、塗りつぶし楕円を描くならこんな感じ。
今回は、上記の System.Windows.Shapes 名前空間を用いています。