344 lines
12 KiB
VB.net
344 lines
12 KiB
VB.net
Imports XCCLibrary
|
|
|
|
Public Class GUI
|
|
Dim filesFolder As String = "C:\Users\Anton\Documents\Exjobb"
|
|
Dim HLCtFolder As String = "C:\Users\Anton\Documents\Exjobb\X2021"
|
|
|
|
Dim containerPanel As Panel
|
|
Dim containerX, containerY, containerW, containerH, containerMidX, containerMidY As Integer
|
|
Dim gratingMaxL As Decimal = 1200
|
|
Dim gratingMaxW As Decimal = 1200
|
|
Dim drawW As Integer = 1
|
|
Dim drawH As Integer = 1
|
|
Dim drawAspect, gratingAspect As Decimal
|
|
Dim scaleDiff As Decimal = 1
|
|
|
|
Public pCon1(3) As Decimal 'pCon(0) = pixel X, pCon(2) = SW X, etc.
|
|
Public pCon2(3) As Decimal
|
|
Public pCon3(3) As Decimal
|
|
Public pCon4(3) As Decimal
|
|
|
|
Dim points As New Dictionary(Of String, Decimal())
|
|
Dim pointsOrder As New List(Of String)
|
|
|
|
Dim PointButtons As New List(Of Button)
|
|
|
|
Dim angleCounter As Integer
|
|
|
|
' --- Start method when GUI loads ---
|
|
Sub GUI_load() Handles MyBase.Load
|
|
containerPanel = DrawingPanel
|
|
AddHandler containerPanel.Paint, AddressOf DrawingPanel_Paint
|
|
|
|
Get_DrawboxParameters()
|
|
|
|
Set_ContainerPointsX()
|
|
Set_ContainerPointsY()
|
|
|
|
Update_GratingDimensions()
|
|
|
|
Create_StartPoints()
|
|
|
|
Program.Load_XCC(filesFolder, HLCtFolder)
|
|
End Sub
|
|
|
|
' --- Retrive parameters for the drawing box ---
|
|
Private Sub Get_DrawboxParameters()
|
|
containerX = containerPanel.Location.X 'Behövs ej nu
|
|
containerY = containerPanel.Location.Y 'Behövs ej nu
|
|
|
|
containerW = containerPanel.Size.Width
|
|
containerH = containerPanel.Size.Height
|
|
|
|
containerMidX = containerW / 2
|
|
containerMidY = containerH / 2
|
|
|
|
drawW = containerW - 60
|
|
drawH = containerH - 60
|
|
|
|
drawAspect = drawW / drawH
|
|
End Sub
|
|
|
|
' --- Set containers points X-values ---
|
|
Private Sub Set_ContainerPointsX()
|
|
pCon1(0) = containerMidX - drawW / 2
|
|
pCon2(0) = containerMidX + drawW / 2
|
|
pCon3(0) = containerMidX + drawW / 2
|
|
pCon4(0) = containerMidX - drawW / 2
|
|
End Sub
|
|
|
|
' --- Set containers points Y-values ---
|
|
Private Sub Set_ContainerPointsY()
|
|
pCon1(1) = containerMidY - drawH / 2
|
|
pCon2(1) = containerMidY - drawH / 2
|
|
pCon3(1) = containerMidY + drawH / 2
|
|
pCon4(1) = containerMidY + drawH / 2
|
|
End Sub
|
|
|
|
|
|
|
|
' --- Sets the start points for the grating ---
|
|
Private Sub Create_StartPoints()
|
|
For i = 1 To 4
|
|
points.Add("p" & i, CallByName(Me, "pCon" & i, vbGet))
|
|
pointsOrder.Add("p" & i)
|
|
Next
|
|
End Sub
|
|
|
|
|
|
|
|
' --- Draw all the lines for the container and grating ---
|
|
Private Sub DrawingPanel_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs)
|
|
Dim penCon As Pen = New Pen(Color.DarkRed, 1)
|
|
penCon.DashPattern = {4, 8}
|
|
e.Graphics.DrawLine(penCon, CInt(pCon1(0)), CInt(pCon1(1)), CInt(pCon2(0)), CInt(pCon2(1)))
|
|
e.Graphics.DrawLine(penCon, CInt(pCon2(0)), CInt(pCon2(1)), CInt(pCon3(0)), CInt(pCon3(1)))
|
|
e.Graphics.DrawLine(penCon, CInt(pCon3(0)), CInt(pCon3(1)), CInt(pCon4(0)), CInt(pCon4(1)))
|
|
e.Graphics.DrawLine(penCon, CInt(pCon4(0)), CInt(pCon4(1)), CInt(pCon1(0)), CInt(pCon1(1)))
|
|
|
|
Dim pen As Pen = New Pen(Color.Black, 1)
|
|
For i = 0 To pointsOrder.Count - 1
|
|
Dim pTemp1() As Decimal
|
|
Dim pTemp2() As Decimal
|
|
|
|
pTemp1 = points(pointsOrder(i))
|
|
Try
|
|
pTemp2 = points(pointsOrder(i + 1))
|
|
Catch ex As Exception
|
|
pTemp2 = points(pointsOrder(0))
|
|
End Try
|
|
|
|
e.Graphics.DrawLine(pen, CInt(pTemp1(0)), CInt(pTemp1(1)), CInt(pTemp2(0)), CInt(pTemp2(1)))
|
|
Next
|
|
End Sub
|
|
|
|
' --- Generate a table containing all the points X- and Y-values ---
|
|
Private Function Create_PointTable()
|
|
Dim pointTable As New DataTable
|
|
pointTable.Columns.Add("X", GetType(Decimal))
|
|
pointTable.Columns.Add("Y", GetType(Decimal))
|
|
|
|
For i = 0 To pointsOrder.Count - 1
|
|
Dim pTemp() As Decimal
|
|
pTemp = points(pointsOrder(i))
|
|
|
|
pointTable.Rows.Add()
|
|
pointTable.Rows(i)("X") = pTemp(2)
|
|
pointTable.Rows(i)("Y") = pTemp(3)
|
|
Next
|
|
|
|
Return pointTable
|
|
End Function
|
|
|
|
|
|
|
|
' ---------------------------------- GUI interactions ----------------------------------
|
|
|
|
Private Sub SettingsButton_Click(sender As Object, e As EventArgs) Handles SettingsButton.Click
|
|
Program.Update_KB()
|
|
End Sub
|
|
|
|
Private Sub WidthBox_TextChanged(sender As Object, e As EventArgs) Handles WidthBox.TextChanged
|
|
If WidthBox.Text <> "" Then
|
|
If CDec(WidthBox.Text) > 0 Then
|
|
gratingMaxW = CDec(WidthBox.Text)
|
|
Update_GratingDimensions()
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub LengthBox_TextChanged(sender As Object, e As EventArgs) Handles LengthBox.TextChanged
|
|
If LengthBox.Text <> "" Then
|
|
If CDec(LengthBox.Text) > 0 Then
|
|
gratingMaxL = CDec(LengthBox.Text)
|
|
Update_GratingDimensions()
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub Update_GratingDimensions()
|
|
gratingAspect = gratingMaxW / gratingMaxL
|
|
|
|
If gratingAspect > drawAspect Then
|
|
'Change draw height
|
|
scaleDiff = gratingMaxW / drawW
|
|
|
|
pCon1(1) = containerMidY - gratingMaxL / (scaleDiff * 2)
|
|
pCon2(1) = containerMidY - gratingMaxL / (scaleDiff * 2)
|
|
pCon3(1) = containerMidY + gratingMaxL / (scaleDiff * 2)
|
|
pCon4(1) = containerMidY + gratingMaxL / (scaleDiff * 2)
|
|
|
|
Set_ContainerPointsX()
|
|
Else
|
|
'Change draw width
|
|
scaleDiff = gratingMaxL / drawH
|
|
|
|
pCon1(0) = containerMidX - gratingMaxW / (scaleDiff * 2)
|
|
pCon2(0) = containerMidX + gratingMaxW / (scaleDiff * 2)
|
|
pCon3(0) = containerMidX + gratingMaxW / (scaleDiff * 2)
|
|
pCon4(0) = containerMidX - gratingMaxW / (scaleDiff * 2)
|
|
|
|
Set_ContainerPointsY()
|
|
End If
|
|
|
|
'Redraw grating
|
|
Me.Refresh()
|
|
|
|
'SW X-values
|
|
pCon1(2) = (-gratingMaxW / 2) / 1000
|
|
pCon2(2) = (gratingMaxW / 2) / 1000
|
|
pCon3(2) = (gratingMaxW / 2) / 1000
|
|
pCon4(2) = (-gratingMaxW / 2) / 1000
|
|
|
|
'SW Y-values
|
|
pCon1(3) = (gratingMaxL / 2) / 1000
|
|
pCon2(3) = (gratingMaxL / 2) / 1000
|
|
pCon3(3) = (-gratingMaxL / 2) / 1000
|
|
pCon4(3) = (-gratingMaxL / 2) / 1000
|
|
End Sub
|
|
|
|
|
|
' --- 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 PointButton_Click
|
|
Next
|
|
|
|
angleCounter = angleCounter + 1
|
|
End Sub
|
|
|
|
' --- When a point button for angle recess is pressed ---
|
|
Private Sub PointButton_Click(sender As Button, e As EventArgs)
|
|
'Determine which point is being pressed
|
|
Dim pointPressed As String = sender.Name.Split("_")(0)
|
|
Dim index As Integer = pointsOrder.IndexOf(pointPressed)
|
|
|
|
'Retrive that points coords
|
|
Dim pXP As Decimal = points(pointPressed)(0)
|
|
Dim pYP As Decimal = points(pointPressed)(1)
|
|
Dim pXSW As Decimal = points(pointPressed)(2)
|
|
Dim pYSW As Decimal = points(pointPressed)(3)
|
|
|
|
Dim d1P As Decimal = AngleD1.Text / scaleDiff
|
|
Dim d2P As Decimal = AngleD2.Text / scaleDiff
|
|
Dim d1SW As Decimal = AngleD1.Text / 1000
|
|
Dim d2SW As Decimal = AngleD2.Text / 1000
|
|
|
|
If pXP < containerMidX Then
|
|
If pYP > containerMidY Then
|
|
'Kvadrant 4
|
|
points.Add("pA" & angleCounter * 2 - 1, {pXP + d1P, pYP, pXSW + d1SW, pYSW})
|
|
points.Add("pA" & angleCounter * 2, {pXP, pYP - d2P, pXSW, pYSW + d2SW})
|
|
Else
|
|
'Kvadrant 1
|
|
points.Add("pA" & angleCounter * 2 - 1, {pXP, pYP + d2P, pXSW, pYSW - d2SW})
|
|
points.Add("pA" & angleCounter * 2, {pXP + d1P, pYP, pXSW + d1SW, pYSW})
|
|
End If
|
|
Else
|
|
If pYP > containerMidY Then
|
|
'Kvadrant 3
|
|
points.Add("pA" & angleCounter * 2 - 1, {pXP, pYP - d2P, pXSW, pYSW + d2SW})
|
|
points.Add("pA" & angleCounter * 2, {pXP - d1P, pYP, pXSW - d1SW, pYSW})
|
|
Else
|
|
'Kvadrant 2
|
|
points.Add("pA" & angleCounter * 2 - 1, {pXP - d1P, pYP, pXSW - d1SW, pYSW})
|
|
points.Add("pA" & angleCounter * 2, {pXP, pYP + d2P, pXSW, pYSW - d2SW})
|
|
End If
|
|
End If
|
|
|
|
'Insert two new points
|
|
pointsOrder.Insert(index + 1, "pA" & angleCounter * 2 - 1)
|
|
pointsOrder.Insert(index + 2, "pA" & angleCounter * 2)
|
|
pointsOrder.RemoveAt(index)
|
|
|
|
For i = 0 To PointButtons.Count - 1
|
|
RemoveHandler PointButtons(0).Click, AddressOf PointButton_Click
|
|
containerPanel.Controls.RemoveByKey(PointButtons(0).Name)
|
|
PointButtons.RemoveAt(0)
|
|
Next
|
|
|
|
'Redraw grating
|
|
Me.Refresh()
|
|
End Sub
|
|
|
|
' --- When export to SW button is pressed ---
|
|
Private Sub ExportSWButton_Click(sender As Object, e As EventArgs) Handles ExportSWButton.Click
|
|
Dim exportTable As DataTable
|
|
exportTable = Create_ExportTable()
|
|
|
|
|
|
Program.Build_Grating(exportTable)
|
|
|
|
'Test för att SW API
|
|
Dim pointTable As New DataTable
|
|
pointTable = Create_PointTable()
|
|
|
|
Program.Export_SW(pointTable)
|
|
Program.Create_Drawing()
|
|
End Sub
|
|
|
|
Private Function Create_ExportTable() As DataTable
|
|
|
|
Dim lSpacing As String = ComboBox_MeshSize.Text.Split("x")(0)
|
|
Dim cSpacing As String = ComboBox_MeshSize.Text.Split("x")(1).Split(" ")(0)
|
|
|
|
Dim gratingTable As New DataTable
|
|
gratingTable.Columns.Add("TYPE", GetType(String))
|
|
gratingTable.Columns.Add("SERRATED", GetType(Boolean))
|
|
gratingTable.Columns.Add("WIDTH", GetType(Decimal))
|
|
gratingTable.Columns.Add("LENGTH", GetType(Decimal))
|
|
gratingTable.Columns.Add("LOADBAR_THICKNESS", GetType(Decimal))
|
|
gratingTable.Columns.Add("LOADBAR_HEIGHT", GetType(Decimal))
|
|
gratingTable.Columns.Add("LOADBAR_SPACING", GetType(Decimal))
|
|
gratingTable.Columns.Add("CROSSBAR_SPACING", GetType(Decimal))
|
|
gratingTable.Columns.Add("CROSSBAR_DIAMETER", GetType(Decimal))
|
|
gratingTable.Columns.Add("CROSSBAR_THICKNESS", GetType(Decimal))
|
|
gratingTable.Columns.Add("CROSSBAR_HEIGHT", GetType(Decimal))
|
|
|
|
gratingTable.Rows.Add()
|
|
gratingTable.Rows(0)("TYPE") = ComboBox_TypeChooser.Text ' Här behövs namn på HLCt modellen
|
|
gratingTable.Rows(0)("SERRATED") = False
|
|
gratingTable.Rows(0)("WIDTH") = CDec(WidthBox.Text)
|
|
gratingTable.Rows(0)("LENGTH") = CDec(LengthBox.Text)
|
|
gratingTable.Rows(0)("LOADBAR_THICKNESS") = CDec(ComboBox_Thickness.Text)
|
|
gratingTable.Rows(0)("LOADBAR_HEIGHT") = CDec(ComboBox_Height.Text)
|
|
gratingTable.Rows(0)("LOADBAR_SPACING") = CDec(lSpacing)
|
|
gratingTable.Rows(0)("CROSSBAR_SPACING") = CDec(cSpacing)
|
|
|
|
If gratingTable.Rows(0)("TYPE") = "pressure_welded" Then
|
|
gratingTable.Rows(0)("CROSSBAR_DIAMETER") = 5
|
|
gratingTable.Rows(0)("CROSSBAR_THICKNESS") = 0
|
|
gratingTable.Rows(0)("CROSSBAR_HEIGHT") = 0
|
|
Else
|
|
gratingTable.Rows(0)("CROSSBAR_DIAMETER") = 0
|
|
gratingTable.Rows(0)("CROSSBAR_THICKNESS") = 2
|
|
gratingTable.Rows(0)("CROSSBAR_HEIGHT") = 15
|
|
End If
|
|
|
|
Return gratingTable
|
|
End Function
|
|
End Class |