2013-11-21 5 views
0

Я пытаюсь закончить проект, в котором, по щелчку мыши, 200 кругов вытягивают из щелкнутого местоположения в качестве центральной точки, увеличивался с 1 радиуса до 200Центр окружности/многоточие с помощью VB.NET

Мне не нужна помощь с частью мыши этой программы.

Мой текущий блокпост состоит в том, что, хотя в предыдущих выпусках VB были методы круга, VB.NET использует метод System.CreateGraphics.DrawEllipse для создания кругов, и этот метод использует координаты x и y как начальное местоположение верхнего левого угла невидимого прямоугольника и использование еще двух целых чисел/синглов для определения расстояния справа и вниз (x + и y +) для определения размера и местоположения круга.

Я надеюсь, что я просто эпично пропустил встроенный способ создания круга/эллипсиса с использованием центральной точки и объявления радиуса из этой центральной точки для завершения моей программы.

Есть ли способ нарисовать круг в ФОРМЕ, используя центральную точку в качестве точки отсчета, тогда объявите радиус?

ответ

1

По сути, единственное, что вам нужно сделать, это является, чтобы уменьшить X и Y значения точки с радиусом, а также использование радиус * 2 для ширины и высоты:

graphics.DrawEllipse(
    pen, location.X - radius, location.Y - radius, radius * 2, radius * 2) 

Учитывая, что , это довольно легко сделать метод расширения дает вам интерфейс, который вы ищете:

Imports System.Runtime.CompilerServices 

Module GraphicsExtensions 

    <Extension()> 
    Public Sub DrawCircle(ByVal graphics As Graphics, pen As Pen, location As Point, radius As Integer) 
     graphics.DrawEllipse(
      pen, location.X - radius, location.Y - radius, radius * 2, radius * 2) 
    End Sub 

End Module 

... и использовать его в виде:

Dim pos As Point = Me.PointToClient(MousePosition) 

Using g As Graphics = Me.CreateGraphics() 
    g.DrawCircle(Pens.Black, pos, 15) 
End Using 
0

Если у вас есть центр и радиус, то вы можете легко вычислить угловую точку. Следующие могут вам помочь.

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint 
    Dim centerX, centerY As Integer 
    Dim cornerX, cornerY As Integer 
    Dim radius As Integer 

    centerX = 100 
    centerY = 100 
    Dim i As Integer 
    For i = 20 To 200 Step 20 
     radius = i 
     cornerX = centerX - radius/2 
     cornerY = centerY - radius/2 

     e.Graphics.DrawEllipse(Pens.Black, cornerX, cornerY, radius, radius) 
    Next 

End Sub 
1

Я надеюсь, что я просто эпически отсутствует встроенный способ создать круг/эллипс, используя центральную точку и объявляющий радиус от , что центральная точка для того, чтобы завершить свою программу.

Есть ли способ нарисовать круг на ФОРМЕ с использованием центральной точки, так как точка отсчета тогда объявит радиус?

Конечно, просто создать прямоугольник() в этой точке с размером (1,1) и повторно вызвать метод Inflate():

Rectangle.Inflate()

Public Class Form1 

    Private Center As Point 
    Private MouseClicked As Boolean = False 

    Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown 
     If e.Button = Windows.Forms.MouseButtons.Left Then 
      MouseClicked = True 
      Center = New Point(e.X, e.Y) 
      Me.Refresh() 
     End If 
    End Sub 

    Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint 
     If MouseClicked Then 
      Dim rc As New Rectangle(Center, New Size(1, 1)) 
      For i As Integer = 1 To 200 
       e.Graphics.DrawEllipse(Pens.Black, rc) 
       rc.Inflate(1, 1) 
      Next 
     End If 
    End Sub 

End Class