X2021/Wardrobe/GUI/Draw_Grating.vb

246 lines
13 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" & angleQuadrant 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
End Sub
End Class