增加绘图圆上的文字(列表)

时间:2017-03-11 17:00:18

标签: vb.net gdi

我正在开发一个目标软件,我需要使用拉绳和圆圈上的数字来跟踪图片框上的镜头。我的问题是我绘制的每个圆圈,前一个圆圈上的所有数字都更新为相同的(即4个圆圈都有" 4",绘制另一个圆圈,它们全部更新为" 5"等)。

我附上了一张图片和我的代码: enter image description here

以下是代码:

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

此代码不会增加,但会显示并保持距离

1 个答案:

答案 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