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