Hide menu
Loading...
Searching...
No Matches
nesting/nesting_computer/nesting_computer.java

Refer to the Nesting Example

// ****************************************************************************
// $Id$
//
// Copyright (C) 2008-2014, Roman Lygin. All rights reserved.
// Copyright (C) 2014-2025, CADEX. All rights reserved.
//
// This file is part of the Manufacturing Toolkit software.
//
// You may use this file under the terms of the BSD license as follows:
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// ****************************************************************************
import cadex.*;
import cadex.Drawing.*;
import cadex.Geom.*;
import java.util.*;
public class nesting_computer {
static {
try {
System.loadLibrary("CadExMTK");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load.\n" + e);
System.exit(1);
}
}
public static void main(String[] args) {
String aKey = MTKLicenseKey.Value();
// Activate the license (aKey must be defined in MTKLicenseKey.java)
if (!LicenseManager.Activate(aKey)) {
System.out.println("Failed to activate Manufacturing Toolkit license.");
System.exit(1);
}
Nesting_Computer aComputer = new Nesting_Computer();
// Configuring nesting parameters
Nesting_ComputerParameters aParams = new Nesting_ComputerParameters();
aParams.SetIterationCount(10); // Number of iterations for optimization process
aParams.SetGenerationSize(10); // Initial count of random layouts; larger values may improve optimization
aParams.SetMutationRate(0.5); // Probability of random shape rearrangement to escape local optima
aParams.SetPartToPartDistance(1.0); // Minimum distance between shapes
aParams.SetPartToSheetBoundaryDistance(1.0); // Minimum distance between shapes and sheet edges
aParams.SetMirrorControl(false); // Allows mirrored shapes to improve layout efficiency
aParams.SetRotationCount(4); // Number of allowed rotation angles (e.g., 4 allows 0°, 90°, 180°, and 270°)
aParams.SetCurveTolerance(10); // Side length of squares used for polygonal approximation of curves
aComputer.SetParameters(aParams);
// Define material size and number (e.g., 1 sheets of 100x100 mm)
aComputer.AddMaterial(100.0, 100.0, 1);
List<Pattern> aPatterns = Arrays.asList(
new Pattern(CreateRectangle(50.0, 50.0), "Rectangle 50x50", 1),
new Pattern(CreateRectangle(20.0, 10.0), "Rectangle 20x10", 10)
);
PrintPatternsInfo(aPatterns);
// Load patterns into the computer
for (Pattern aPattern : aPatterns) {
aComputer.AddPattern(aPattern.myDrawingView, aPattern.myNumber);
}
// Start the Nesting process
Nesting_Data aData = aComputer.Perform();
// Print nesting information
PrintNestingInfo(aData);
}
static class Pattern {
public Pattern(CurveSet theShape, String theName, int theNumber) {
myDrawingView.Add(theShape);
myName = theName;
myNumber = theNumber;
}
public View myDrawingView = new View();
public String myName;
public int myNumber;
}
static CurveSet CreateRectangle(double theWidth, double theHeight) {
CurveSet aRectangle = new CurveSet();
Line2d aL1 = new Line2d(new Point2d(0, 0), new Direction2d(1, 0));
aL1.SetTrim(0, theWidth);
Line2d aL2 = new Line2d(new Point2d(theWidth, 0), new Direction2d(0, 1));
aL2.SetTrim(0, theHeight);
Line2d aL3 = new Line2d(new Point2d(theWidth, theHeight), new Direction2d(-1, 0));
aL3.SetTrim(0, theWidth);
Line2d 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) {
System.out.println("------- Patterns Info -------");
for (Pattern aPattern : thePatterns) {
System.out.println(aPattern.myName + ": " + aPattern.myNumber);
}
}
static void PrintNestingInfo(Nesting_Data theData) {
System.out.println();
System.out.println("------- Nesting Info -------");
double aTotalEfficiency = 0.0;
double aTotalScrap = 0.0;
List<Nesting_Sheet> aSheets = theData.Sheets();
for (int i = 0; i < aSheets.size(); ++i) {
System.out.println("# Sheet " + i);
System.out.println(" Nested Parts: " + aSheets.get(i).NestedParts());
aTotalScrap += aSheets.get(i).Scrap();
System.out.println(" Scrap: " + aSheets.get(i).Scrap() * 100 + "%");
aTotalEfficiency += aSheets.get(i).PlacementEfficiency();
System.out.println(" Placement Efficiency: " + aSheets.get(i).PlacementEfficiency() * 100 + "%");
System.out.println();
}
System.out.println("Average Scrap: " + (aTotalScrap / aSheets.size() * 100) + "%");
System.out.println("Average Placement Efficiency: " + (aTotalEfficiency / aSheets.size() * 100) + "%");
}
}
Defines classes, and functions related to drawings.
Defines classes, types, enums, and functions related to geometric entities.
Defines classes, namespaces, enums, types, and global functions related to Manufacturing Toolkit.
Definition LicenseManager_LicenseError.hxx:30