投稿日 | : 2007/07/12(Thu) 08:27 |
投稿者 | : y4yama |
Eメール | : |
URL | : |
タイトル | : Re: フリーハンドで描いたオブジェクトを選択したか?判定したい |
こんちは
AutoRedraw=Trueだと、Line()で描く線は前のが残るし・・・大変そうですね
花ちゃんさんのアドバイスにもあるように、座標を覚えておいて計算するのが楽でいいです
テストコードを載せておきます。オブジェクトを選択したか?に的を絞ったはなしですが
Picture1の中に、Line1 という線をあらかじめデザインで作っておいて下さい
Line1の始点付近をLクリックして、ドラッグしたら、Line1の始点が移動できます
Dim sx, sy
Dim flag
Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If dist(X, Y, Line1) < 14 Then
flag = True
sx = X: sy = Y
End If
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If flag = True Then
Line1.X1 = Line1.X1 + X - sx
Line1.Y1 = Line1.Y1 + Y - sy
' Line1.X2 = Line1.X2 + X - sx
' Line1.Y2 = Line1.Y2 + Y - sy
sx = X: sy = Y
End If
End Sub
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
flag = False
End Sub
Function dist(X As Single, Y As Single, L1 As Line)
dist = Sqr((X - L1.X1) * (X - L1.X1) + (Y - L1.Y1) * (Y - L1.Y1))
End Function
Line1のどこでもHitするようには、
点と線の距離を計算して、更に、線の始点と終点の間に点がある、という計算をするだけです。2Dの距離計算は、ネットでさがしてください
参考になれば・・・いいのですが・・・フリーハンドで描いた・・となると数百点を記録することになるんでしょうかねぇ〜