diff --git a/Wardrobe/SolidWorks/Multiple_Drawing.vb b/Wardrobe/SolidWorks/Multiple_Drawing.vb index bf882ad..4e41bd4 100644 --- a/Wardrobe/SolidWorks/Multiple_Drawing.vb +++ b/Wardrobe/SolidWorks/Multiple_Drawing.vb @@ -238,9 +238,8 @@ Public Class Multiple_Drawing DR3("TYPE") = "Recess CA" DR3("X") = DR("X") DR3("Y") = DR("Y") - Dim index As Integer = Get_RowIndex(pointsDT, DR) - + Dim index As Integer = Get_RowIndex(pointsDT, DR("SIDE"), DR("X"), DR("Y")) pointsDT.Rows.InsertAt(DR3, index + 1) Try @@ -250,6 +249,16 @@ Public Class Multiple_Drawing End Try 'Check if remove next point aswell (If angle crosses more than one grating) + Dim cornerPoint(1) As Double + Dim pointNumGA As Integer = DR("SIDE") + 2 + If pointNumGA > 4 Then + pointNumGA -= 4 + End If + + cornerPoint(0) = pointsDT.Select("NAME = 'GA_" & pointNumGA & "'")(0)("X") + cornerPoint(1) = pointsDT.Select("NAME = 'GA_" & pointNumGA & "'")(0)("Y") + + Create_SecondAnglePoint(pointsDT, DR, cornerPoint) Else End If @@ -268,40 +277,40 @@ Public Class Multiple_Drawing Return pointsDS End Function - Private Shared Function Get_RowIndex(pDT As DataTable, rpDR As DataRow) + Private Shared Function Get_RowIndex(pDT As DataTable, side As Integer, pX As Double, pY As Double) Dim rowName As String = "" - If rpDR("SIDE") = 1 Then - Dim sidePoints = pDT.Select("Y = '" & rpDR("Y") & "'") + If side = 1 Then + Dim sidePoints = pDT.Select("Y = '" & pY & "'") For Each DR2 As DataRow In sidePoints - If DR2("X") < rpDR("X") Then + If DR2("X") < pX Then rowName = DR2("NAME") Else Exit For End If Next - ElseIf rpDR("SIDE") = 2 Then - Dim sidePoints = pDT.Select("X = '" & rpDR("X") & "'") + ElseIf side = 2 Then + Dim sidePoints = pDT.Select("X = '" & pX & "'") For Each DR2 As DataRow In sidePoints - If DR2("Y") > rpDR("Y") Then + If DR2("Y") > pY Then rowName = DR2("NAME") Else Exit For End If Next - ElseIf rpDR("SIDE") = 3 Then - Dim sidePoints = pDT.Select("Y = '" & rpDR("Y") & "'") + ElseIf side = 3 Then + Dim sidePoints = pDT.Select("Y = '" & pY & "'") For Each DR2 As DataRow In sidePoints - If DR2("X") > rpDR("X") Then + If DR2("X") > pX Then rowName = DR2("NAME") Else Exit For End If Next Else - Dim sidePoints = pDT.Select("X = '" & rpDR("X") & "'") + Dim sidePoints = pDT.Select("X = '" & pX & "'") For Each DR2 As DataRow In sidePoints - If DR2("Y") < rpDR("Y") Then + If DR2("Y") < pY Then rowName = DR2("NAME") Else Exit For @@ -319,4 +328,151 @@ Public Class Multiple_Drawing Return index End Function + + Private Shared Sub Create_SecondAnglePoint(pDT As DataTable, rpDR As DataRow, gp As Double()) + Dim p0(1) As Double + Dim p1(1) As Double + Dim p2(1) As Double + + Dim newDR As DataRow = pDT.NewRow + newDR("TYPE") = "Recess CA" + + Dim pointName As String = rpDR("NAME") + If pointName.Split("_")(1) = 1 Then + Dim DR = Data.gratingPoints.Select("NAME = '" & pointName.Split("_")(0) & "_2" & "'") + newDR("NAME") = pointName.Split("_")(0) & "_2" + + p0(0) = rpDR("X") + p0(1) = rpDR("Y") + + p2(0) = DR(0)("X") + p2(1) = DR(0)("Y") + Else + Dim DR = Data.gratingPoints.Select("NAME = '" & pointName.Split("_")(0) & "_1" & "'") + newDR("NAME") = pointName.Split("_")(0) & "_1" + + p0(0) = DR(0)("X") + p0(1) = DR(0)("Y") + + p2(0) = rpDR("X") + p2(1) = rpDR("Y") + End If + + If rpDR("SIDE") = 1 OrElse rpDR("SIDE") = 3 Then + p1(0) = p2(0) + p1(1) = p0(1) + ElseIf rpDR("SIDE") = 2 OrElse rpDR("SIDE") = 4 Then + p1(0) = p0(0) + p1(1) = p2(1) + End If + + Dim gpInside As Boolean = Calculate_Triangle_Bool(gp, p0, p1, p2) + + Dim insertIndex As Integer = 0 + If gpInside = False Then + ' If false => new point at side rpDR("SIDE")+1 + Dim side As Integer = 0 + If rpDR("SIDE") + 1 > 4 Then + side = rpDR("SIDE") + 1 - 4 + Else + side = rpDR("SIDE") + 1 + End If + + ' FIXA: GA punkten tas bort innan vi behöver den här + If side = 1 Then + Dim c As Double = pDT.Select("NAME = 'GA_1'")(0)("Y") - rpDR("Y") + Dim x As Double = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - pDT.Select("NAME = 'GA_1'")(0)("X") + Dim z As Double = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - rpDR("Y") + newDR("X") = pDT.Select("NAME = 'GA_1'")(0)("X") + c * x / z ' Triangle likformighet + newDR("Y") = pDT.Select("NAME = 'GA_1'")(0)("Y") + ElseIf side = 2 Then + Dim c As Double = pDT.Select("NAME = 'GA_2'")(0)("X") - rpDR("X") + Dim x As Double = pDT.Select("NAME = 'GA_2'")(0)("Y") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") + Dim z As Double = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - rpDR("X") + newDR("X") = pDT.Select("NAME = 'GA_2'")(0)("X") + newDR("Y") = pDT.Select("NAME = 'GA_2'")(0)("Y") - c * x / z ' Triangle likformighet + ElseIf side = 3 Then + Dim c As Double = rpDR("Y") - pDT.Select("NAME = 'GA_3'")(0)("Y") + Dim x As Double = pDT.Select("NAME = 'GA_3'")(0)("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") + Dim z As Double = rpDR("Y") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") + newDR("X") = pDT.Select("NAME = 'GA_3'")(0)("X") - c * x / z ' Triangle likformighet + newDR("Y") = pDT.Select("NAME = 'GA_3'")(0)("Y") + Else + Dim c As Double = rpDR("X") - pDT.Select("NAME = 'GA_4'")(0)("X") + Dim x As Double = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - pDT.Select("NAME = 'GA_4'")(0)("Y") + Dim z As Double = rpDR("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") + newDR("X") = pDT.Select("NAME = 'GA_4'")(0)("X") + newDR("Y") = pDT.Select("NAME = 'GA_4'")(0)("Y") + c * x / z ' Triangle likformighet + End If + + insertIndex = Get_RowIndex(pDT, side, newDR("X"), newDR("Y")) + 1 + Else + ' If true => remove point gp and new point at side rpDR("SIDE")+2 + Dim side As Integer = 0 + If rpDR("SIDE") + 2 > 4 Then + side = rpDR("SIDE") + 2 - 4 + Else + side = rpDR("SIDE") + 2 + End If + + 'FIXA + 'If side = 1 Then + ' Dim c As Double = pDT.Select("NAME = 'P1'")(0)("Y") - rpDR("Y") + ' Dim x As Double = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - pDT.Select("NAME = 'P1'")(0)("X") + ' Dim z As Double = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - rpDR("Y") + ' newDR("X") = pDT.Select("NAME = 'P1'")(0)("X") + c * x / z ' Triangle likformighet + ' newDR("Y") = pDT.Select("NAME = 'P1'")(0)("Y") + 'ElseIf side = 2 Then + ' Dim c As Double = pDT.Select("NAME = 'P2'")(0)("X") - rpDR("X") + ' Dim x As Double = pDT.Select("NAME = 'P2'")(0)("Y") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") + ' Dim z As Double = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - rpDR("X") + ' newDR("X") = pDT.Select("NAME = 'P2'")(0)("X") + ' newDR("Y") = pDT.Select("NAME = 'P2'")(0)("Y") - c * x / z ' Triangle likformighet + 'ElseIf side = 3 Then + ' Dim c As Double = rpDR("Y") - pDT.Select("NAME = 'P3'")(0)("Y") + ' Dim x As Double = pDT.Select("NAME = 'P3'")(0)("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") + ' Dim z As Double = rpDR("Y") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") + ' newDR("X") = pDT.Select("NAME = 'P3'")(0)("X") - c * x / z ' Triangle likformighet + ' newDR("Y") = pDT.Select("NAME = 'P3'")(0)("Y") + 'Else + ' Dim c As Double = rpDR("X") - pDT.Select("NAME = 'P4'")(0)("X") + ' Dim x As Double = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - pDT.Select("NAME = 'P4'")(0)("Y") + ' Dim z As Double = rpDR("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") + ' newDR("X") = pDT.Select("NAME = 'P4'")(0)("X") + ' newDR("Y") = pDT.Select("NAME = 'P4'")(0)("Y") + c * x / z ' Triangle likformighet + 'End If + + insertIndex = Get_RowIndex(pDT, side, newDR("X"), newDR("Y")) + + pDT.Rows.RemoveAt(insertIndex) + End If + + pDT.Rows.InsertAt(newDR, insertIndex) + End Sub + + Private Shared Function Calculate_Triangle_Bool(gp As Double(), p0 As Double(), p1 As Double(), p2 As Double()) + + Dim s As Double = p0(1) * p2(0) - p0(0) * p2(1) + (p2(1) - p0(1)) * gp(0) + (p0(0) - p2(0)) * gp(1) + Dim t As Double = p0(0) * p1(1) - p0(1) * p1(0) + (p0(1) - p1(1)) * gp(0) + (p1(0) - p0(0)) * gp(1) + + If (s < 0 AndAlso t >= 0) OrElse (s >= 0 AndAlso t < 0) Then + Return False + End If + + Dim area As Double = -p1(1) * p2(0) + p0(1) * (p2(0) - p1(0)) + p0(0) * (p1(1) - p2(1)) + p1(0) * p2(1) + + If area < 0 Then + If s <= 0 AndAlso s + t >= area Then + Return True + Else + Return False + End If + Else + If s >= 0 AndAlso s + t <= area Then + Return True + Else + Return False + End If + End If + End Function End Class