Demonstrates how to optimize the arrangement of patterns on material sheets minimizing waste.
Overview
This example demonstrates how to optimize the layout of 2D patterns (drawings) on material sheets using the nesting tool (Nesting_Computer ). For this purpose, a console application is used, which defines nesting parameters, creates patterns, and executes the nesting process. The tool computes an optimal arrangement of parts to minimize material waste and maximize placement efficiency.
For more information about nesting, refer to the Nesting Process.
Implementation
The nesting process begins by creating an instance of the Nesting_Computer class, which serves as the primary tool for optimizing the arrangement of 2D patterns. This is followed by defining and configuring the nesting parameters using the Nesting_ComputerParameters class:
var aComputer = new Nesting_Computer();
var aParams = new Nesting_ComputerParameters();
aParams.SetIterationCount(10);
aParams.SetGenerationSize(10);
aParams.SetMutationRate(0.5);
aParams.SetPartToPartDistance(1.0);
aParams.SetPartToSheetBoundaryDistance(1.0);
aParams.SetMirrorControl(false);
aParams.SetRotationCount(4);
aParams.SetCurveTolerance(10);
aComputer.SetParameters (aParams);
The dimensions and number of sheets are defined using AddMaterial() method:
aComputer.AddMaterial (100.0, 100.0, 1);
A Pattern is essentially a Drawing.View combined with metadata, such as the pattern name and number:
class Pattern
{
public Pattern(CurveSet theShape, string theName, uint theNumber)
{
myDrawingView.Add(theShape);
myName = theName;
myNumber = theNumber;
}
public View myDrawingView = new View();
public string myName;
public uint myNumber;
}
Rectangular patterns are created using the CreateRectangle function and added to a PatternVector:
static CurveSet CreateRectangle(double theWidth, double theHeight)
{
var aRectangle= new CurveSet();
var aL1 = new Line2d(new Point2d(0, 0), new Direction2d(1, 0));
aL1.SetTrim(0, theWidth);
var aL2 = new Line2d(new Point2d(theWidth, 0), new Direction2d(0, 1));
aL2.SetTrim(0, theHeight);
var aL3 = new Line2d(new Point2d(theWidth, theHeight), new Direction2d(-1, 0));
aL3.SetTrim(0, theWidth);
var aL4 = new Line2d(new Point2d(0, theHeight), new Direction2d(0, -1));
aL4.SetTrim(0, theHeight);
aRectangle.AddCurve(aL1);
aRectangle.AddCurve(aL2);
aRectangle.AddCurve(aL3);
aRectangle.AddCurve(aL4);
return aRectangle;
}
var aPatterns = new List<Pattern>
{
new Pattern(CreateRectangle(50.0, 50.0), "Rectangle 50x50", 1),
new Pattern(CreateRectangle(20.0, 10.0), "Rectangle 20x10", 10)
};
The patterns are loaded into the Nesting_Computer , which performs the nesting process and generates a Nesting_Data object containing the results.
foreach (var aPattern in aPatterns)
{
aComputer.AddPattern(aPattern.myDrawingView, aPattern.myNumber);
}
Nesting_Data aData = aComputer.Perform();
Example output
Below is the example output:
------- Patterns Info -------
Rectangle 50x50: 1
Rectangle 20x10: 10
------- Nesting Info -------
#0 Sheet
Nested Parts: 11
Scrap: 55%
Placement Efficiency: 90.58%
Average Scrap: 55%
Average Placement Efficiency: 90.58%
Files