Angle works for all original points and the point buttons are handled correctly

This commit is contained in:
Anton 2021-01-28 14:21:37 +01:00
parent a97a0d2cec
commit b656e36461
1 changed files with 64 additions and 36 deletions

View File

@ -16,7 +16,7 @@ Public Class GUI
Dim points As New Dictionary(Of String, Decimal())
Dim pointsOrder As New List(Of String)
'Dim PointButtons As New Dictionary(Of String, Button)
Dim PointButtons As New List(Of Button)
' --- Start method when GUI loads ---
Sub GUI_load() Handles MyBase.Load
@ -29,31 +29,6 @@ Public Class GUI
Set_ContainerPointsY()
Create_StartPoints()
Temp_Create_PointButton()
End Sub
' --- TEMP ---
Private Sub Temp_Create_PointButton()
Dim PointButton As New Button
PointButton.Top = 15
PointButton.Left = 15
PointButton.Width = 30
PointButton.Height = 30
PointButton.Name = "PointButton"
PointButton.Text = ""
PointButton.BackColor = Color.Transparent
PointButton.FlatStyle = FlatStyle.Flat
PointButton.FlatAppearance.BorderSize = 0
PointButton.FlatAppearance.MouseOverBackColor = Color.Red
PointButton.FlatAppearance.MouseDownBackColor = Color.DarkRed
Dim gp As New Drawing.Drawing2D.GraphicsPath
gp.AddEllipse(New Rectangle(New Point(0, 0), New Size(30, 30)))
PointButton.Region = New Region(gp)
containerPanel.Controls.Add(PointButton)
End Sub
' --- Retrive parameters for the drawing box ---
@ -189,9 +164,38 @@ Public Class GUI
' --- When angle button is pressed ---
Private Sub AngleButton_Click(sender As Object, e As EventArgs) Handles AngleButton.Click
' Create Buttons for all clickable points
For i = 0 To pointsOrder.Count - 1
PointButtons.Add(New Button)
PointButtons(i).Width = 30
PointButtons(i).Height = 30
PointButtons(i).Left = points(pointsOrder(i))(0) - PointButtons(i).Width / 2
PointButtons(i).Top = points(pointsOrder(i))(1) - PointButtons(i).Height / 2
PointButtons(i).Name = pointsOrder(i) & "_Button"
PointButtons(i).Text = ""
PointButtons(i).BackColor = Color.FromArgb(50, Color.Red)
PointButtons(i).FlatStyle = FlatStyle.Flat
PointButtons(i).FlatAppearance.BorderSize = 0
PointButtons(i).FlatAppearance.MouseOverBackColor = Color.Red
PointButtons(i).FlatAppearance.MouseDownBackColor = Color.DarkRed
Dim gp As New Drawing.Drawing2D.GraphicsPath
gp.AddEllipse(New Rectangle(New Point(0, 0), New Size(30, 30)))
PointButtons(i).Region = New Region(gp)
containerPanel.Controls.Add(PointButtons(i))
AddHandler PointButtons(i).Click, AddressOf Me.PointButton_Click
Next
End Sub
Private Sub PointButton_Click(sender As Button, e As EventArgs)
'Determine which point is being pressed
Dim pointPressed As String
pointPressed = "p1" ' Fix this
Dim pointPressed As String = sender.Name.Split("_")(0)
Dim index As Integer = pointsOrder.IndexOf(pointPressed)
'Retrive that points coords
@ -199,17 +203,41 @@ Public Class GUI
tempX = points(pointPressed)(0)
tempY = points(pointPressed)(1)
'Insert two new points
points.Add("pT1", {tempX, tempY + 80, 0, 0})
pointsOrder.Insert(index + 1, "pT1")
points.Add("pT2", {tempX + 50, tempY, 0, 0})
pointsOrder.Insert(index + 2, "pT2")
Dim d1, d2 As Integer 'Kommer anges som double i SW coord men vi vill ha pixel coord här
d1 = 80
d2 = 50
If tempX < containerMidX Then
If tempY > containerMidY Then
'Kvadrant 4
points.Add("pA1", {tempX + d1, tempY, 0, 0})
points.Add("pA2", {tempX, tempY - d2, 0, 0})
Else
'Kvadrant 1
points.Add("pA1", {tempX, tempY + d2, 0, 0})
points.Add("pA2", {tempX + d1, tempY, 0, 0})
End If
Else
If tempY > containerMidY Then
'Kvadrant 3
points.Add("pA1", {tempX, tempY - d2, 0, 0})
points.Add("pA2", {tempX - d1, tempY, 0, 0})
Else
'Kvadrant 2
points.Add("pA1", {tempX - d1, tempY, 0, 0})
points.Add("pA2", {tempX, tempY + d2, 0, 0})
End If
End If
'Insert two new points
pointsOrder.Insert(index + 1, "pA1")
pointsOrder.Insert(index + 2, "pA2")
pointsOrder.RemoveAt(index)
'Fix those points coords
'Add those points in pointsOrder and remove orignal point
'Remove points buttons
For i = 0 To PointButtons.Count - 1
RemoveHandler PointButtons(i).Click, AddressOf Me.PointButton_Click
containerPanel.Controls.RemoveByKey(PointButtons(i).Name)
Next
'Redraw grating
Me.Refresh()