直線軌跡の座標の取得




時として座標から座標への点が必要になることがありませんか?

 LineDDA API

で開始点から終了点までの全座標を取得することができます。
ただし、AddressOf 演算子を使いますので Vb5以降でないと動作しません。

*----*----*----*----*----*----*----*----*----*----*----*

サンプルとして二等辺三角形の周囲に赤色で点を表示してみます。

標準モジュールを準備し下記コードを貼りつけて下さい。

Option Explicit

Public Sub LineDDAProc(ByVal x As Long, ByVal y As Long, ByVal lParam As Long)
  Form1.vbLineDDAProc x, y
End Sub

フォームモジュールを準備し下記コードを貼りつけて下さい。

Option Explicit

Private Type POINTAPI
  x As Long
  y As Long
End Type

Private Declare Function LineDDA Lib "gdi32" (ByVal n1 As Long, ByVal n2 As Long, ByVal n3 As Long, ByVal n4 As Long, ByVal lpLineDDAProc As Long, ByVal lParam As Long) As Long
Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long

Public Sub vbLineDDAProc(ByVal x As Long, ByVal y As Long)
  SetPixel Me.hdc, x, y, vbRed
End Sub

Private Sub Form_Click()
  Dim ptc As POINTAPI, apt(0 To 2) As POINTAPI
  ptc.x = Me.ScaleWidth \ Screen.TwipsPerPixelX \ 2
  ptc.y = Me.ScaleHeight \ Screen.TwipsPerPixelY \ 2
  apt(0).x = 0
  apt(0).y = -40
  apt(1).x = -40
  apt(1).y = 40
  apt(2).x = 40
  apt(2).y = 40
  LineDDA apt(0).x + ptc.x, apt(0).y + ptc.y, apt(1).x + ptc.x, apt(1).y + ptc.y, AddressOf LineDDAProc, 0
  LineDDA apt(1).x + ptc.x, apt(1).y + ptc.y, apt(2).x + ptc.x, apt(2).y + ptc.y, AddressOf LineDDAProc, 0
  LineDDA apt(2).x + ptc.x, apt(2).y + ptc.y, apt(0).x + ptc.x, apt(0).y + ptc.y, AddressOf LineDDAProc, 0
End Sub

[F5]を押し実行して見て下さい。

標準モジュールにある LineDDAProc 関数は任意の関数名でも構いません。



動作確認

Windows95 + Visual Basic 5
Windows98 Second Edition + Visual Basic 6


このサンプルを使用しての感想や、質問は 掲示板や、 らくがき帳に書きとめて頂けるとうれしいです。


戻る


インデックスに戻る


e[NECir Yahoo yV LINEf[^[z500~`I
z[y[W NWbgJ[h COiq@COsI COze