X2021/Wardrobe/SolidWorks/Individual_Frame_3D.vb

145 lines
7.1 KiB
VB.net

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
For i = 0 To Data.gratingPoints.Rows.Count - 1
If Data.gratingPoints.Rows(i)("RECESS OK") Then
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)
End If
Dim i2 As Integer
If i = Data.gratingPoints.Rows.Count - 1 Then
i2 = 0
Else
i2 = i + 1
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 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 - Math.Abs(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 - Math.Abs(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 - Math.Abs(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 - Math.Abs(Data.gratingPoints.Rows(i)("X")) * 1000 + 10
End If
End If
End If
DTRow("ROTATION") = 360 - DTRow("SIDE") * 90
DT.Rows.Add(DTRow)
End If
Next
Return DT
End Function
End Class