1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30import os
31import sys
32from pathlib import Path
33
34import manufacturingtoolkit.CadExMTK as mtk
35
36sys.path.append(os.path.abspath(os.path.dirname(Path(__file__).resolve()) + "/../../"))
37
38import mtk_license as license
39
40class Pattern:
41 def __init__(self, theShape: mtk.Drawing_CurveSet, theName: str, theNumber: int):
42 self.myDrawingDrawing_View = mtk.Drawing_View()
43 self.myDrawingDrawing_View.Add(theShape)
44 self.myName = theName
45 self.myNumber = theNumber
46
47def main():
48 aKey = license.Value()
49
50 if not mtk.LicenseManager.Activate(aKey):
51 print("Failed to activate Manufacturing Toolkit license.")
52 return 1
53
54 aComputer = mtk.Nesting_Computer()
55
56
57 aParams = mtk.Nesting_ComputerParameters()
58 aParams.SetIterationCount(10)
59 aParams.SetGenerationSize(10)
60 aParams.SetMutationRate(0.5)
61 aParams.SetPartToPartDistance(1.0)
62 aParams.SetPartToSheetBoundaryDistance(1.0)
63 aParams.SetMirrorControl(False)
64 aParams.SetRotationCount(4)
65 aParams.SetCurveTolerance(10)
66
67 aComputer.SetParameters(aParams)
68
69
70 aComputer.AddMaterial(100.0, 100.0, 1)
71
72 aPatterns = [
73 Pattern(CreateRectangle(50.0, 50.0), "Rectangle 50x50", 1),
74 Pattern(CreateRectangle(20.0, 10.0), "Rectangle 20x10", 10)
75 ]
76
77 PrintPatternsInfo(aPatterns)
78
79
80 for aPattern in aPatterns:
81 aComputer.AddPattern(aPattern.myDrawingDrawing_View, aPattern.myNumber)
82
83
84 aData = aComputer.Perform()
85
86
87 PrintNestingInfo(aData)
88
89def CreateRectangle(theWidth: float, theHeight: float) -> mtk.Drawing_CurveSet:
90 aRectangle = mtk.Drawing_CurveSet()
91
92 aL1 = mtk.Geom_Line2d(mtk.Geom_Point2d(0, 0), mtk.Geom_Direction2d(1, 0))
93 aL1.SetTrim(0, theWidth)
94
95 aL2 = mtk.Geom_Line2d(mtk.Geom_Point2d(theWidth, 0), mtk.Geom_Direction2d(0, 1))
96 aL2.SetTrim(0, theHeight)
97
98 aL3 = mtk.Geom_Line2d(mtk.Geom_Point2d(theWidth, theHeight), mtk.Geom_Direction2d(-1, 0))
99 aL3.SetTrim(0, theWidth)
100
101 aL4 = mtk.Geom_Line2d(mtk.Geom_Point2d(0, theHeight), mtk.Geom_Direction2d(0, -1))
102 aL4.SetTrim(0, theHeight)
103
104 aRectangle.AddCurve(aL1)
105 aRectangle.AddCurve(aL2)
106 aRectangle.AddCurve(aL3)
107 aRectangle.AddCurve(aL4)
108
109 return aRectangle
110
111def PrintPatternsInfo(thePatterns: list):
112 print("------- Patterns Info -------")
113 for aPattern in thePatterns:
114 print(f"{aPattern.myName}: {aPattern.myNumber}")
115
116def PrintNestingInfo(theData: mtk.Nesting_Data):
117 print("\n------- Nesting Info -------")
118
119 aTotalEfficiency = 0.0
120 aTotalScrap = 0.0
121 aSheets = theData.Sheets()
122
123 for i in range(len(aSheets)):
124 print(f"# Sheet {i}")
125 print(f" Nested Parts: {aSheets[i].NestedParts()}")
126 aTotalScrap += aSheets[i].Scrap()
127 print(f" Scrap: {aSheets[i].Scrap() * 100}%")
128 aTotalEfficiency += aSheets[i].PlacementEfficiency()
129 print(f" Placement Efficiency: {aSheets[i].PlacementEfficiency() * 100}%\n")
130
131 print(f"Average Scrap: {aTotalScrap / len(aSheets) * 100}%")
132 print(f"Average Placement Efficiency: {aTotalEfficiency / len(aSheets) * 100}%")
133
134if __name__ == "__main__":
135 main()