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(new BaseObject.Initialized());
public string myName;
public uint myNumber;
}
class Program
{
static int Main()
{
string aKey = MTKLicenseKey.Value();
if (!LicenseHelper.SetupRuntimeKey())
{
return 1;
}
try
{
LicenseManager.Activate(aKey);
}
catch (LicenseError theException)
{
LicenseManager.Deactivate();
Console.WriteLine("Failed to activate Manufacturing Toolkit license: " + theException.what());
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);
LicenseManager.Deactivate();
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.
The mtk namespace is intended to become the primary namespace for MTK and replace direct use of the c...
Contains classes, namespaces, enums, types, and global functions related to Manufacturing Toolkit.