From df4726889ad4a4df17fcfcaf49656a6a346f71bf Mon Sep 17 00:00:00 2001 From: Anton Date: Thu, 8 Apr 2021 13:18:44 +0200 Subject: [PATCH] Improved the algorithm to find cut the frames in the best manor --- HLCt/Parts/START.SLDPRT | Bin 46748 -> 47608 bytes Wardrobe/SolidWorks/Individual_Frame_3D.vb | 129 +++++++++++++++++++-- 2 files changed, 120 insertions(+), 9 deletions(-) diff --git a/HLCt/Parts/START.SLDPRT b/HLCt/Parts/START.SLDPRT index 980d16ba0f8013baaa7c8344c4dbc988e3f4b14a..c5c231294160b0899eed9d96b13ab59e5a9e9606 100644 GIT binary patch delta 25251 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 HW~u!TAQVk; delta 24323 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 diff --git a/Wardrobe/SolidWorks/Individual_Frame_3D.vb b/Wardrobe/SolidWorks/Individual_Frame_3D.vb index 84b5b8f..0141c5b 100644 --- a/Wardrobe/SolidWorks/Individual_Frame_3D.vb +++ b/Wardrobe/SolidWorks/Individual_Frame_3D.vb @@ -251,29 +251,124 @@ Public Class Individual_Frame_3D While frameLengths.Count > 0 Dim frameCutList As New Dictionary(Of String, Integer) - frameCutList.Add(frameLengths.ElementAt(0).Key, frameLengths.ElementAt(0).Value) 'Fixa så att vi hela tiden tar den längsta och testar mot de andra - frameLengths.Remove(frameLengths.ElementAt(0).Key) + Dim longestFrame As Integer = 0 + Dim longestFrameKey As String = "" + For i = 0 To frameLengths.Count - 1 + If frameLengths.ElementAt(i).Value > longestFrame Then + longestFrame = frameLengths.ElementAt(i).Value + longestFrameKey = frameLengths.ElementAt(i).Key + End If + Next + frameCutList.Add(longestFrameKey, longestFrame) + frameLengths.Remove(longestFrameKey) - For i = 0 To 100 + For i = 0 To 1000 Dim lengthRemaining As Integer = 2000 For j = 0 To frameCutList.Count - 1 lengthRemaining -= frameCutList.ElementAt(j).Value Next Dim restLength As Integer = 2000 - Dim frameID As String = "" + Dim frameID As New List(Of String) For j = 0 To frameLengths.Count - 1 - If lengthRemaining - frameLengths.ElementAt(j).Value > 0 AndAlso lengthRemaining - frameLengths.ElementAt(j).Value < restLength Then + If lengthRemaining - frameLengths.ElementAt(j).Value >= 0 AndAlso lengthRemaining - frameLengths.ElementAt(j).Value < restLength Then restLength = lengthRemaining - frameLengths.ElementAt(j).Value - frameID = frameLengths.ElementAt(j).Key + frameID.Clear() + frameID.Add(frameLengths.ElementAt(j).Key) End If Next - If frameID = "" Then + If frameID.Count = 0 Then Exit For Else - frameCutList.Add(frameID, frameLengths(frameID)) - frameLengths.Remove(frameID) + Dim frameCombDS As New DataSet + For l = 2 To frameLengths.Count + Dim frameCombDT As New DataTable + + Dim numOfValues As Integer = l + Dim numOfComb As Integer = Calculate_Factorial(frameLengths.Count) / (Calculate_Factorial(numOfValues) * Calculate_Factorial(frameLengths.Count - numOfValues)) + + For j = 1 To numOfValues + frameCombDT.Columns.Add("Enum " & j, GetType(Integer)) + Next + For j = 1 To numOfValues + frameCombDT.Columns.Add("ID " & j, GetType(Integer)) + Next + frameCombDT.Columns.Add("Combined Length", GetType(Integer)) + + Dim frameCombDR As DataRow = frameCombDT.NewRow + Dim combLength As Integer = 0 + For j = 1 To numOfValues + frameCombDR("Enum " & j) = j + frameCombDR("ID " & j) = CInt(frameLengths.ElementAt(j - 1).Key.Split(" ")(1)) + combLength += frameLengths.ElementAt(j - 1).Value + Next + frameCombDR("Combined Length") = combLength + frameCombDT.Rows.Add(frameCombDR) + + For j = 1 To numOfComb - 1 + frameCombDR = frameCombDT.NewRow + + If frameCombDT.Rows(j - 1)("Enum " & numOfValues) < frameLengths.Count Then + combLength = 0 + For k = 1 To numOfValues + If k = numOfValues Then + frameCombDR("Enum " & k) = frameCombDT.Rows(j - 1)("Enum " & k) + 1 + frameCombDR("ID " & k) = CInt(frameLengths.ElementAt(frameCombDR("Enum " & k) - 1).Key.Split(" ")(1)) + Else + frameCombDR("Enum " & k) = frameCombDT.Rows(j - 1)("Enum " & k) + frameCombDR("ID " & k) = frameCombDT.Rows(j - 1)("ID " & k) + End If + combLength += frameLengths.ElementAt(frameCombDR("Enum " & k) - 1).Value + Next + frameCombDR("Combined Length") = combLength + + Else + Dim frameEnum As Integer + For k = numOfValues To 1 Step -1 + If frameCombDT.Rows(j - 1)("Enum " & k) < frameLengths.Count - (numOfValues - k) Then + frameEnum = k + End If + Next + + combLength = 0 + For k = 1 To numOfValues + If k = frameEnum Then + frameCombDR("Enum " & k) = frameCombDT.Rows(j - 1)("Enum " & k) + 1 + frameCombDR("ID " & k) = CInt(frameLengths.ElementAt(frameCombDR("Enum " & k) - 1).Key.Split(" ")(1)) + ElseIf k > frameEnum Then + frameCombDR("Enum " & k) = frameCombDR("Enum " & k - 1) + 1 + frameCombDR("ID " & k) = CInt(frameLengths.ElementAt(frameCombDR("Enum " & k) - 1).Key.Split(" ")(1)) + Else + frameCombDR("Enum " & k) = frameCombDT.Rows(j - 1)("Enum " & k) + frameCombDR("ID " & k) = frameCombDT.Rows(j - 1)("ID " & k) + End If + combLength += frameLengths.ElementAt(frameCombDR("Enum " & k) - 1).Value + Next + frameCombDR("Combined Length") = combLength + End If + + frameCombDT.Rows.Add(frameCombDR) + Next + frameCombDS.Tables.Add(frameCombDT) + Next + + For j = 0 To frameCombDS.Tables.Count - 1 + For Each DR As DataRow In frameCombDS.Tables(j).Rows + If lengthRemaining - DR("Combined Length") >= 0 AndAlso lengthRemaining - DR("Combined Length") < restLength Then + restLength = lengthRemaining - DR("Combined Length") + frameID.Clear() + For k = 1 To j + 2 + frameID.Add("Frame " & DR("ID " & k)) + Next + End If + Next + Next + + For j = 0 To frameID.Count - 1 + frameCutList.Add(frameID.ElementAt(j), frameLengths(frameID.ElementAt(j))) + frameLengths.Remove(frameID.ElementAt(j)) + Next End If Next @@ -289,6 +384,22 @@ Public Class Individual_Frame_3D Return cuttingList End Function + Private Shared Function Calculate_Factorial(num As Integer) + Dim result As Integer + If num = 0 Then + result = 1 + Else + result = num + num -= 1 + While num > 1 + result = result * num + num -= 1 + End While + End If + + Return result + End Function + Public Shared Sub Generate_End_Frame_Pieces() Dim swApp As SldWorks.SldWorks swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks)