X2021/Wardrobe/GUI/Draw_Grating.vb

281 lines
15 KiB
VB.net

Public Class Draw_Grating
Private Shared guiPanelL, guiPanelW As Integer
Public Shared DirSymbolPoints As New List(Of Integer())
Private Shared ArrowSymbolPoints As New Dictionary(Of String, Integer())
Public Shared measureLabels As New Dictionary(Of String, Integer())
Public Shared sideSquareMesLine As New Dictionary(Of String, Integer())
Public Shared Sub Load_DrawingPanel()
AddHandler Individual.Panel_Grating.Paint, AddressOf DrawingPanel_Paint
Get_DrawboxParameters()
Create_DirSymbolPoints()
Create_ArrowSymbolPoints()
' Initialize start points
Data.Init_GrossAreaPoints()
Data.Init_GratingPoints()
Update_GratingPoints()
End Sub
' --- Retrive parameters for the drawing box ---
Private Shared Sub Get_DrawboxParameters()
guiPanelL = Individual.Panel_Grating.Size.Width
guiPanelW = Individual.Panel_Grating.Size.Height
Data.guiPanelMidX = guiPanelL / 2
Data.guiPanelMidY = guiPanelW / 2
Data.guiMaxDrawL = guiPanelL - 80
Data.guiMaxDrawW = guiPanelW - 80
Data.drawAR = Data.guiMaxDrawL / Data.guiMaxDrawW
Data.gratingAR = Data.gratingL / Data.gratingW
End Sub
' --- Create points for grating direction symbol ---
Private Shared Sub Create_DirSymbolPoints()
DirSymbolPoints.Add({-27 + Data.guiPanelMidX, -2 + Data.guiPanelMidY})
DirSymbolPoints.Add({17 + Data.guiPanelMidX, -2 + Data.guiPanelMidY})
DirSymbolPoints.Add({9 + Data.guiPanelMidX, -10 + Data.guiPanelMidY})
DirSymbolPoints.Add({12 + Data.guiPanelMidX, -13 + Data.guiPanelMidY})
DirSymbolPoints.Add({27 + Data.guiPanelMidX, 2 + Data.guiPanelMidY})
DirSymbolPoints.Add({-17 + Data.guiPanelMidX, 2 + Data.guiPanelMidY})
DirSymbolPoints.Add({-9 + Data.guiPanelMidX, 10 + Data.guiPanelMidY})
DirSymbolPoints.Add({-12 + Data.guiPanelMidX, 13 + Data.guiPanelMidY})
DirSymbolPoints.Add({-27 + Data.guiPanelMidX, -2 + Data.guiPanelMidY})
End Sub
' --- Create points for arrow symbol ---
Private Shared Sub Create_ArrowSymbolPoints()
Dim offset As Integer = 20
ArrowSymbolPoints.Add("p1", {offset, guiPanelW - offset})
ArrowSymbolPoints.Add("p2", {offset, guiPanelW - offset - 40})
ArrowSymbolPoints.Add("p3", {offset - 5, guiPanelW - offset - 35})
ArrowSymbolPoints.Add("p4", {offset, guiPanelW - offset - 40})
ArrowSymbolPoints.Add("p5", {offset + 5, guiPanelW - offset - 35})
ArrowSymbolPoints.Add("p6", {offset, guiPanelW - offset - 40})
ArrowSymbolPoints.Add("p7", {offset, guiPanelW - offset})
ArrowSymbolPoints.Add("p8", {offset + 40, guiPanelW - offset})
ArrowSymbolPoints.Add("p9", {offset + 35, guiPanelW - offset - 5})
ArrowSymbolPoints.Add("p10", {offset + 40, guiPanelW - offset})
ArrowSymbolPoints.Add("p11", {offset + 35, guiPanelW - offset + 5})
End Sub
' --- Updates all the gratings points ---
Public Shared Sub Update_GratingPoints()
Data.gratingAR = Data.gratingL / Data.gratingW
If Data.gratingAR < Data.drawAR Then
' Change draw width
Data.scaleDiff = Data.gratingW / Data.guiMaxDrawW
' Gross area points
Data.grossAreaPoints.Rows(0)("GUI X") = Data.guiPanelMidX - Data.gratingL / (Data.scaleDiff * 2)
Data.grossAreaPoints.Rows(0)("GUI Y") = Data.guiPanelMidY - Data.guiMaxDrawW / 2
Data.grossAreaPoints.Rows(1)("GUI X") = Data.guiPanelMidX + Data.gratingL / (Data.scaleDiff * 2)
Data.grossAreaPoints.Rows(1)("GUI Y") = Data.guiPanelMidY - Data.guiMaxDrawW / 2
Data.grossAreaPoints.Rows(2)("GUI X") = Data.guiPanelMidX + Data.gratingL / (Data.scaleDiff * 2)
Data.grossAreaPoints.Rows(2)("GUI Y") = Data.guiPanelMidY + Data.guiMaxDrawW / 2
Data.grossAreaPoints.Rows(3)("GUI X") = Data.guiPanelMidX - Data.gratingL / (Data.scaleDiff * 2)
Data.grossAreaPoints.Rows(3)("GUI Y") = Data.guiPanelMidY + Data.guiMaxDrawW / 2
' Grating points
Data.gratingPoints.Rows(0)("GUI X") = Data.guiPanelMidX - Data.gratingL / (Data.scaleDiff * 2)
Data.gratingPoints.Rows(0)("GUI Y") = Data.guiPanelMidY - Data.guiMaxDrawW / 2
Data.gratingPoints.Rows(1)("GUI X") = Data.guiPanelMidX + Data.gratingL / (Data.scaleDiff * 2)
Data.gratingPoints.Rows(1)("GUI Y") = Data.guiPanelMidY - Data.guiMaxDrawW / 2
Data.gratingPoints.Rows(2)("GUI X") = Data.guiPanelMidX + Data.gratingL / (Data.scaleDiff * 2)
Data.gratingPoints.Rows(2)("GUI Y") = Data.guiPanelMidY + Data.guiMaxDrawW / 2
Data.gratingPoints.Rows(3)("GUI X") = Data.guiPanelMidX - Data.gratingL / (Data.scaleDiff * 2)
Data.gratingPoints.Rows(3)("GUI Y") = Data.guiPanelMidY + Data.guiMaxDrawW / 2
Else
' Change draw height
Data.scaleDiff = Data.gratingL / Data.guiMaxDrawL
' Gross area points
Data.grossAreaPoints.Rows(0)("GUI X") = Data.guiPanelMidX - Data.guiMaxDrawL / 2
Data.grossAreaPoints.Rows(0)("GUI Y") = Data.guiPanelMidY - Data.gratingW / (Data.scaleDiff * 2)
Data.grossAreaPoints.Rows(1)("GUI X") = Data.guiPanelMidX + Data.guiMaxDrawL / 2
Data.grossAreaPoints.Rows(1)("GUI Y") = Data.guiPanelMidY - Data.gratingW / (Data.scaleDiff * 2)
Data.grossAreaPoints.Rows(2)("GUI X") = Data.guiPanelMidX + Data.guiMaxDrawL / 2
Data.grossAreaPoints.Rows(2)("GUI Y") = Data.guiPanelMidY + Data.gratingW / (Data.scaleDiff * 2)
Data.grossAreaPoints.Rows(3)("GUI X") = Data.guiPanelMidX - Data.guiMaxDrawL / 2
Data.grossAreaPoints.Rows(3)("GUI Y") = Data.guiPanelMidY + Data.gratingW / (Data.scaleDiff * 2)
' Grating points
Data.gratingPoints.Rows(0)("GUI X") = Data.guiPanelMidX - Data.guiMaxDrawL / 2
Data.gratingPoints.Rows(0)("GUI Y") = Data.guiPanelMidY - Data.gratingW / (Data.scaleDiff * 2)
Data.gratingPoints.Rows(1)("GUI X") = Data.guiPanelMidX + Data.guiMaxDrawL / 2
Data.gratingPoints.Rows(1)("GUI Y") = Data.guiPanelMidY - Data.gratingW / (Data.scaleDiff * 2)
Data.gratingPoints.Rows(2)("GUI X") = Data.guiPanelMidX + Data.guiMaxDrawL / 2
Data.gratingPoints.Rows(2)("GUI Y") = Data.guiPanelMidY + Data.gratingW / (Data.scaleDiff * 2)
Data.gratingPoints.Rows(3)("GUI X") = Data.guiPanelMidX - Data.guiMaxDrawL / 2
Data.gratingPoints.Rows(3)("GUI Y") = Data.guiPanelMidY + Data.gratingW / (Data.scaleDiff * 2)
End If
' Gross area points
Data.grossAreaPoints.Rows(0)("X") = (-Data.gratingL / 2) / 1000
Data.grossAreaPoints.Rows(0)("Y") = (Data.gratingW / 2) / 1000
Data.grossAreaPoints.Rows(1)("X") = (Data.gratingL / 2) / 1000
Data.grossAreaPoints.Rows(1)("Y") = (Data.gratingW / 2) / 1000
Data.grossAreaPoints.Rows(2)("X") = (Data.gratingL / 2) / 1000
Data.grossAreaPoints.Rows(2)("Y") = (-Data.gratingW / 2) / 1000
Data.grossAreaPoints.Rows(3)("X") = (-Data.gratingL / 2) / 1000
Data.grossAreaPoints.Rows(3)("Y") = (-Data.gratingW / 2) / 1000
' Grating points
Data.gratingPoints.Rows(0)("X") = (-Data.gratingL / 2) / 1000
Data.gratingPoints.Rows(0)("Y") = (Data.gratingW / 2) / 1000
Data.gratingPoints.Rows(1)("X") = (Data.gratingL / 2) / 1000
Data.gratingPoints.Rows(1)("Y") = (Data.gratingW / 2) / 1000
Data.gratingPoints.Rows(2)("X") = (Data.gratingL / 2) / 1000
Data.gratingPoints.Rows(2)("Y") = (-Data.gratingW / 2) / 1000
Data.gratingPoints.Rows(3)("X") = (-Data.gratingL / 2) / 1000
Data.gratingPoints.Rows(3)("Y") = (-Data.gratingW / 2) / 1000
Individual.Panel_Grating.Refresh()
End Sub
' --- Draw all the lines for the panel and grating ---
Public Shared Sub DrawingPanel_Paint(sender As Object, e As PaintEventArgs)
' Draw grating gross area (red)
Dim penCon As Pen = New Pen(Color.Red, 2)
penCon.DashPattern = {4, 6}
e.Graphics.DrawLine(penCon, Data.grossAreaPoints(0)("GUI X"), Data.grossAreaPoints(0)("GUI Y"),
Data.grossAreaPoints(1)("GUI X"), Data.grossAreaPoints(1)("GUI Y"))
e.Graphics.DrawLine(penCon, Data.grossAreaPoints(1)("GUI X"), Data.grossAreaPoints(1)("GUI Y"),
Data.grossAreaPoints(2)("GUI X"), Data.grossAreaPoints(2)("GUI Y"))
e.Graphics.DrawLine(penCon, Data.grossAreaPoints(2)("GUI X"), Data.grossAreaPoints(2)("GUI Y"),
Data.grossAreaPoints(3)("GUI X"), Data.grossAreaPoints(3)("GUI Y"))
e.Graphics.DrawLine(penCon, Data.grossAreaPoints(3)("GUI X"), Data.grossAreaPoints(3)("GUI Y"),
Data.grossAreaPoints(0)("GUI X"), Data.grossAreaPoints(0)("GUI Y"))
' Draw grating direction symbol
Dim symPen As Pen = New Pen(Color.Black, 1)
For i = 0 To DirSymbolPoints.Count - 2
e.Graphics.DrawLine(symPen, DirSymbolPoints(i)(0), DirSymbolPoints(i)(1),
DirSymbolPoints(i + 1)(0), DirSymbolPoints(i + 1)(1))
Next
' Draw arrow symbol
For i = 1 To ArrowSymbolPoints.Count - 1
e.Graphics.DrawLine(symPen, ArrowSymbolPoints("p" & i)(0), ArrowSymbolPoints("p" & i)(1),
ArrowSymbolPoints("p" & i + 1)(0), ArrowSymbolPoints("p" & i + 1)(1))
Next
' Draw measure labels
For i = 0 To measureLabels.Count - 1
Dim mesName As String = measureLabels.Keys(i)
e.Graphics.DrawString(measureLabels(mesName)(0), New Font("Microsoft Sans Serif", 7), Brushes.Black,
New Point(measureLabels(mesName)(1), measureLabels(mesName)(2)))
Next
'Stöd measurement linje för sidesquare
Dim penMes As Pen = New Pen(Color.Gray, 1)
For i = 0 To sideSquareMesLine.Count - 1
Dim mesName As String = sideSquareMesLine.Keys(i)
e.Graphics.DrawLine(penMes, sideSquareMesLine(mesName)(0), sideSquareMesLine(mesName)(1),
sideSquareMesLine(mesName)(2), sideSquareMesLine(mesName)(3))
If Data.pointsMeasurements(mesName)(2) = 1 OrElse Data.pointsMeasurements(mesName)(2) = 3 Then
e.Graphics.DrawLine(penMes, sideSquareMesLine(mesName)(0), sideSquareMesLine(mesName)(1) + 2,
sideSquareMesLine(mesName)(0), sideSquareMesLine(mesName)(1) - 2)
e.Graphics.DrawLine(penMes, sideSquareMesLine(mesName)(2), sideSquareMesLine(mesName)(1) + 2,
sideSquareMesLine(mesName)(2), sideSquareMesLine(mesName)(1) - 2)
Else
e.Graphics.DrawLine(penMes, sideSquareMesLine(mesName)(0) + 2, sideSquareMesLine(mesName)(1),
sideSquareMesLine(mesName)(0) - 2, sideSquareMesLine(mesName)(1))
e.Graphics.DrawLine(penMes, sideSquareMesLine(mesName)(0) + 2, sideSquareMesLine(mesName)(3),
sideSquareMesLine(mesName)(0) - 2, sideSquareMesLine(mesName)(3))
End If
Next
' Draw angle recess help lines
Dim Pendot As Pen = New Pen(Color.Gray, 1)
Pendot.DashPattern = {2, 4}
For i = 0 To Data.angleRecessPoints.Rows.Count - 1
Dim angleQuadrant As String = Data.angleRecessPoints.Rows(i)("QUADRANT")
Dim p1XGUI, p1YGUI, p2XGUI, p2YGUI As Integer
For Each DR As DataRow In Data.gratingPoints.Rows
If DR("NAME").Split("_")(0) = "CA" & i + 1 Then
Dim index As Integer = Data.gratingPoints.Rows.IndexOf(DR)
p1XGUI = Data.gratingPoints.Rows(index)("GUI X")
p1YGUI = Data.gratingPoints.Rows(index)("GUI Y")
p2XGUI = Data.gratingPoints.Rows(index + 1)("GUI X")
p2YGUI = Data.gratingPoints.Rows(index + 1)("GUI Y")
Exit For
End If
Next
e.Graphics.DrawLine(Pendot, Data.angleRecessPoints.Rows(i)("GUI X"), Data.angleRecessPoints.Rows(i)("GUI Y"),
p1XGUI, p1YGUI)
e.Graphics.DrawLine(Pendot, Data.angleRecessPoints.Rows(i)("GUI X"), Data.angleRecessPoints.Rows(i)("GUI Y"),
p2XGUI, p2YGUI)
Next
' Draw actual grating (black)
Dim pen As Pen = New Pen(Color.Black, 2)
For i = 0 To Data.gratingPoints.Rows.Count - 1
Dim pTemp1(2) As Integer
Dim pTemp2(2) As Integer
pTemp1(0) = Data.gratingPoints.Rows(i)("GUI X")
pTemp1(1) = Data.gratingPoints.Rows(i)("GUI Y")
Try
pTemp2(0) = Data.gratingPoints.Rows(i + 1)("GUI X")
pTemp2(1) = Data.gratingPoints.Rows(i + 1)("GUI Y")
Catch ex As Exception
pTemp2(0) = Data.gratingPoints.Rows(0)("GUI X")
pTemp2(1) = Data.gratingPoints.Rows(0)("GUI Y")
End Try
e.Graphics.DrawLine(pen, pTemp1(0), pTemp1(1), pTemp2(0), pTemp2(1))
Next
' Draw grating grid for fill area
If AppForm.fillMode Then
Dim dashPen As Pen = New Pen(Color.DarkGray, 1)
dashPen.DashPattern = {2, 4}
Dim singleLength As Integer = Grating_Fill.minLength / Data.scaleDiff
For i = 0 To Grating_Fill.numOfHorizontal - 2
Dim x As Integer
x = Data.grossAreaPoints.Rows(0)("GUI X") + singleLength * (i + 1)
'If Grating_Fill.lengthRevNeeded AndAlso i = Grating_Fill.numOfHorizontal - 2 Then
' x = Data.grossAreaPoints.Rows(0)("GUI X") + singleLength * i + Grating_Fill.revLength / Data.scaleDiff
'Else
'x = Data.grossAreaPoints.Rows(0)("GUI X") + singleLength * (i + 1)
'End If
Dim y1 As Integer = Data.grossAreaPoints.Rows(0)("GUI Y")
Dim y2 As Integer = Data.grossAreaPoints.Rows(3)("GUI Y")
e.Graphics.DrawLine(dashPen, x, y1, x, y2)
Next
Dim singleWidth As Integer = Grating_Fill.maxSingleWidth / Data.scaleDiff
For i = 0 To Grating_Fill.numOfVertical - 2
Dim y As Integer
If Grating_Fill.widthRevNeeded AndAlso i = Grating_Fill.numOfVertical - 2 Then
y = Data.grossAreaPoints.Rows(0)("GUI Y") + singleWidth * i + Grating_Fill.revWidth / Data.scaleDiff
Else
y = Data.grossAreaPoints.Rows(0)("GUI Y") + singleWidth * (i + 1)
End If
Dim x1 As Integer = Data.grossAreaPoints.Rows(0)("GUI X")
Dim x2 As Integer = Data.grossAreaPoints.Rows(1)("GUI X")
e.Graphics.DrawLine(dashPen, x1, y, x2, y)
Next
End If
End Sub
End Class