using System;
using System.Collections.Generic;
namespace nesting_computer
{
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;
}
class Program
{
static int Main()
{
string aKey = MTKLicenseKey.Value();
if (!LicenseManager.Activate(aKey))
{
Console.WriteLine("Failed to activate Manufacturing Toolkit license.");
return 1;
}
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);
aComputer.AddMaterial(100.0, 100.0, 1);
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)
};
PrintPatternsInfo(aPatterns);
foreach (var aPattern in aPatterns)
{
aComputer.AddPattern(aPattern.myDrawingView, aPattern.myNumber);
}
Nesting_Data aData = aComputer.Perform();
PrintNestingInfo(aData);
return 0;
}
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;
}
static void PrintPatternsInfo(List<Pattern> thePatterns)
{
Console.WriteLine("------- Patterns Info -------");
foreach (var aPattern in thePatterns)
{
Console.WriteLine($"{aPattern.myName}: {aPattern.myNumber}");
}
}
static void PrintNestingInfo(Nesting_Data theData)
{
Console.WriteLine();
Console.WriteLine("------- Nesting Info -------");
double aTotalEfficiency = 0.0;
double aTotalScrap = 0.0;
var aSheets = theData.Sheets();
for (int i = 0; i < aSheets.Count; ++i)
{
Console.WriteLine($"# Sheet {i}");
Console.WriteLine($" Nested Parts: {aSheets[i].NestedParts()}");
aTotalScrap += aSheets[i].Scrap();
Console.WriteLine($" Scrap: {aSheets[i].Scrap() * 100}%");
aTotalEfficiency += aSheets[i].PlacementEfficiency();
Console.WriteLine($" Placement Efficiency: {aSheets[i].PlacementEfficiency() * 100}%");
Console.WriteLine();
}
Console.WriteLine($"Average Scrap: {aTotalScrap / aSheets.Count * 100}%");
Console.WriteLine($"Average Placement Efficiency: {aTotalEfficiency / aSheets.Count * 100}%");
}
}
}
Contains classes, types and enums related to drawings.
Contains classes, types, enums, and functions related to geometric entities.
Contains classes, namespaces, enums, types, and global functions related to Manufacturing Toolkit.