我正在开发一个目标软件,我需要使用拉绳和圆圈上的数字来跟踪图片框上的镜头。我的问题是我绘制的每个圆圈,前一个圆圈上的所有数字都更新为相同的(即4个圆圈都有" 4",绘制另一个圆圈,它们全部更新为" 5"等)。
我附上了一张图片和我的代码:
以下是代码:
Public Class TargetAnalysis
Dim n As Integer = 0
Dim zoomPct As Decimal = 1
Dim shotList As New List(Of Point)
Dim scaleList As New List(Of Point)
Dim poaList As New List(Of Point)
Dim ShotCount As New List(Of Point)
Private Sub mPictureBox_MouseClick(sender As Object, e As MouseEventArgs) Handles mPictureBox.MouseClick
If e.Button = MouseButtons.Left Then
If shotFlag = True Then
n += 1
_shotX = e.X
_shotY = e.Y
shotList.Add(New Point(_shotX, _shotY))
ShotCount.Add(New Point(_shotX, _shotY))
shotDist = Math.Sqrt((_shotX - _poaX) ^ 2 + (_shotY - _poaY) ^ 2)
Me.lbDataPoints.Items.Insert(shotList.Count - 1, "SHOT - " &
FormatNumber(shotDist * pLineDist(), 2) & " in.")
Me.txtShotCount.EditValue = shotList.Count
mPictureBox.Refresh()
End If
end if
End Sub
Private Sub mPictureBox_Paint(sender As Object, e As PaintEventArgs) Handles mPictureBox.Paint
'SHOT number
For Each s As Point In ShotCount
Dim calRad As Decimal = cboCaliber.EditValue / pLineDist() / 2
Dim _shot As New ShotCount(e.Graphics, New Point(s.X + calRad, s.Y + calRad), cboCaliber.EditValue / pLineDist() / 2,
"Consolas", FormatNumber((Math.Sqrt((s.X - _poaX) ^ 2 + (s.Y - _poaY) ^ 2)) *
pLineDist(), 2) & "in")
Next
end sub
此代码不会增加,但会显示并保持距离
答案 0 :(得分:0)
Public Class TargetAnalysis
Dim shotList As New List(Of Point)
Dim shotFlag As Boolean
Private Function ShotDistance(ByVal shot As Point) As Double
' _poaX and _poaY are the origin?
Return Math.Sqrt((shot.X - _poaX) ^ 2 + (shot.Y - _poaY) ^ 2) * pLineDist()
End Function
Private Sub mPictureBox_MouseClick(sender As Object, e As MouseEventArgs) Handles mPictureBox.MouseClick
If e.Button = MouseButtons.Left AndAlso shotFlag Then
Dim shot As New Point(e.X, e.Y)
shotList.Add(shot)
shotDist = ShotDistance(shot)
Me.lbDataPoints.Items.Insert(shotList.Count - 1, String.Format("SHOT - {0:N2} in.", shotDist))
Me.txtShotCount.EditValue = shotList.Count
mPictureBox.Refresh()
End If
End Sub
Private Sub mPictureBox_Paint(sender As Object, e As PaintEventArgs) Handles mPictureBox.Paint
Dim calRad As Decimal = cboCaliber.EditValue / pLineDist() / 2
For i As Integer = 0 To shotList.Count - 1
Dim shot As Point = shotList(i)
Dim dist As Double = ShotDistance(shot)
Dim labelLoc As New Point(shot.X + calRad, shot.Y + calRad)
Dim text As String = String.Format("Shot {0} - {1:N2} in.", i + 1, dist)
DrawShotLabel(e.Graphics, text, labelLoc)
Next i
End Sub
Private Sub DrawShotLabel(g As Graphics, label As String, location As Point)
Dim consolas As New Font("Consolas", 8)
Dim textSize As Size = g.MeasureString(label, consolas).ToSize()
g.FillRectangle(Brushes.White, New Rectangle(location, textSize))
g.DrawString(label, consolas, Brushes.Black, location)
End Sub
End Class