Imports XCCLibrary Public Class Individual_Frame_3D Private Shared designName As String Public Shared Sub Build_Frame(gratingParameters As DataRow, parentID As Integer) Dim frameDT As New DataTable frameDT = Generate_Frame_Data(gratingParameters) Dim inst_ As Integer For i = 0 To frameDT.Rows.Count - 1 Dim HLCtName As String If frameDT.Rows(i)("TYPE") = "CORNER" Then HLCtName = "frame_l_corner" Else HLCtName = "frame_l_straight" End If inst_ = ExternalClass.instantiate_parts(parentID, HLCtName, "") ExternalClass.modify_parameter_value("DP_HEIGHT", inst_, 30) ExternalClass.modify_parameter_value("DP_WIDTH", inst_, 40) ExternalClass.modify_parameter_value("DP_ROTATION", inst_, frameDT.Rows(i)("ROTATION")) ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, frameDT.Rows(i)("OFFSET_W")) ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, frameDT.Rows(i)("OFFSET_L")) If frameDT.Rows(i)("TYPE") = "SIDE" Then ExternalClass.modify_parameter_value("DP_CUTOFFSET1", inst_, 0) ExternalClass.modify_parameter_value("DP_CUTOFFSET2", inst_, 2000 - frameDT.Rows(i)("LENGTH")) End If Next End Sub Private Shared Function Generate_Frame_Data(gratingParameters As DataRow) Dim DT As New DataTable DT.Columns.Add("TYPE", GetType(String)) DT.Columns.Add("LENGTH", GetType(Integer)) DT.Columns.Add("SIDE", GetType(Integer)) DT.Columns.Add("CORNER", GetType(Integer)) DT.Columns.Add("ROTATION", GetType(Integer)) DT.Columns.Add("OFFSET_W", GetType(Integer)) DT.Columns.Add("OFFSET_L", GetType(Integer)) Dim DTRow As DataRow Dim corners As New Dictionary(Of String, Boolean) For i = 0 To Data.gratingPoints.Rows.Count - 1 Dim i2, i0 As Integer If i = 0 Then i0 = Data.gratingPoints.Rows.Count - 1 Else i0 = i - 1 End If If i = Data.gratingPoints.Rows.Count - 1 Then i2 = 0 Else i2 = i + 1 End If If Data.gratingPoints.Rows(i)("RECESS OK") Then Dim firstOK, secondOK As Boolean If Data.gratingPoints.Rows(i)("X") = Data.gratingPoints.Rows(i0)("X") Then If Math.Abs(Data.gratingPoints.Rows(i)("Y") - Data.gratingPoints.Rows(i0)("Y")) * 1000 >= 210 Then firstOK = True Else firstOK = False End If Else If Math.Abs(Data.gratingPoints.Rows(i)("X") - Data.gratingPoints.Rows(i0)("X")) * 1000 >= 210 Then firstOK = True Else firstOK = False End If End If If Data.gratingPoints.Rows(i)("X") = Data.gratingPoints.Rows(i2)("X") Then If Math.Abs(Data.gratingPoints.Rows(i)("Y") - Data.gratingPoints.Rows(i2)("Y")) * 1000 >= 210 Then secondOK = True Else secondOK = False End If Else If Math.Abs(Data.gratingPoints.Rows(i)("X") - Data.gratingPoints.Rows(i2)("X")) * 1000 >= 210 Then secondOK = True Else secondOK = False End If End If If firstOK = True AndAlso secondOK = True Then corners.Add(Data.gratingPoints.Rows(i)("NAME"), True) DTRow = DT.NewRow DTRow("TYPE") = "CORNER" DTRow("CORNER") = Data.gratingPoints.Rows(i)("QUADRANT") DTRow("ROTATION") = (Data.gratingPoints.Rows(i)("QUADRANT") - 1) * 90 If DTRow("CORNER") = 1 Then DTRow("OFFSET_W") = gratingParameters("WIDTH") DTRow("OFFSET_L") = 0 ElseIf DTRow("CORNER") = 2 Then DTRow("OFFSET_W") = gratingParameters("WIDTH") DTRow("OFFSET_L") = gratingParameters("LENGTH") ElseIf DTRow("CORNER") = 3 Then DTRow("OFFSET_W") = 0 DTRow("OFFSET_L") = gratingParameters("LENGTH") Else DTRow("OFFSET_W") = 0 DTRow("OFFSET_L") = 0 End If DT.Rows.Add(DTRow) Else corners.Add(Data.gratingPoints.Rows(i)("NAME"), False) End If End If Dim sideFrame As Boolean = False If Data.gratingPoints.Rows(i)("X") = Data.gratingPoints.Rows(i2)("X") Then If Data.gratingPoints.Rows(i)("X") = Data.grossAreaPoints.Rows(0)("X") Or Data.gratingPoints.Rows(i)("X") = Data.grossAreaPoints.Rows(1)("X") Then sideFrame = True End If ElseIf Data.gratingPoints.Rows(i)("Y") = Data.gratingPoints.Rows(i2)("Y") Then If Data.gratingPoints.Rows(i)("Y") = Data.grossAreaPoints.Rows(0)("Y") Or Data.gratingPoints.Rows(i)("Y") = Data.grossAreaPoints.Rows(3)("Y") Then sideFrame = True End If End If If sideFrame = True Then DTRow = DT.NewRow DTRow("TYPE") = "SIDE" Dim missingCorner1 As Integer = 0 Dim missingCorner2 As Integer = 0 Dim numOfP As Integer = 0 If Data.gratingPoints.Rows(i)("NAME").substring(0, 1) = "P" AndAlso Data.gratingPoints.Rows(i2)("NAME").substring(0, 1) = "P" Then numOfP = 2 ElseIf Data.gratingPoints.Rows(i)("NAME").substring(0, 1) = "P" Or Data.gratingPoints.Rows(i2)("NAME").substring(0, 1) = "P" Then numOfP = 1 End If If Data.gratingPoints.Rows(i)("X") = Data.gratingPoints.Rows(i2)("X") Then If Data.gratingPoints.Rows(i)("Y") > Data.gratingPoints.Rows(i2)("Y") Then DTRow("SIDE") = 3 DTRow("LENGTH") = (Data.gratingPoints.Rows(i)("Y") - Data.gratingPoints.Rows(i2)("Y")) * 1000 - 20 - numOfP * 200 If Data.gratingPoints.Rows(i2)("NAME").substring(0, 1) = "P" Then DTRow("OFFSET_W") = 210 Else DTRow("OFFSET_W") = Data.gratingW / 2 + Data.gratingPoints.Rows(i2)("Y") * 1000 + 10 End If DTRow("OFFSET_L") = gratingParameters("LENGTH") Else DTRow("SIDE") = 1 DTRow("LENGTH") = (Data.gratingPoints.Rows(i2)("Y") - Data.gratingPoints.Rows(i)("Y")) * 1000 - 20 - numOfP * 200 If Data.gratingPoints.Rows(i)("NAME").substring(0, 1) = "P" Then DTRow("OFFSET_W") = DTRow("LENGTH") + 210 Else DTRow("OFFSET_W") = DTRow("LENGTH") + Data.gratingW / 2 + Data.gratingPoints.Rows(i)("Y") * 1000 + 10 End If DTRow("OFFSET_L") = 0 End If Else If Data.gratingPoints.Rows(i)("X") > Data.gratingPoints.Rows(i2)("X") Then DTRow("SIDE") = 4 DTRow("LENGTH") = (Data.gratingPoints.Rows(i)("X") - Data.gratingPoints.Rows(i2)("X")) * 1000 - 20 - numOfP * 200 DTRow("OFFSET_W") = 0 If Data.gratingPoints.Rows(i2)("NAME").substring(0, 1) = "P" Then DTRow("OFFSET_L") = 210 Else DTRow("OFFSET_L") = Data.gratingL / 2 + Data.gratingPoints.Rows(i2)("X") * 1000 + 10 End If Else DTRow("SIDE") = 2 DTRow("LENGTH") = (Data.gratingPoints.Rows(i2)("X") - Data.gratingPoints.Rows(i)("X")) * 1000 - 20 - numOfP * 200 DTRow("OFFSET_W") = gratingParameters("WIDTH") If Data.gratingPoints.Rows(i)("NAME").substring(0, 1) = "P" Then DTRow("OFFSET_L") = DTRow("LENGTH") + 210 Else DTRow("OFFSET_L") = DTRow("LENGTH") + Data.gratingL / 2 + Data.gratingPoints.Rows(i)("X") * 1000 + 10 End If End If End If DTRow("ROTATION") = 360 - DTRow("SIDE") * 90 If DTRow("LENGTH") >= 125 Then DT.Rows.Add(DTRow) End If End If Next Return DT End Function End Class