Rectangles and Opus55 (now Irregular) live in OpenNest.Engine/NestingEngines as of OpenNest 3bdefb1. This repository stays read-only for reference.
3.1 KiB
OpenNest Engines (archived)
Archived. The production engines now live in the main OpenNest repository as built-in engines named for the jobs they suit:
Rectangles(wasOpenNest.Engine.Rectangles) andIrregular(wasOpenNest.Engine.Opus55), inOpenNest.Engine/NestingEngines/. Seedocs/nesting-engines.mdthere. This repository is kept read-only for reference; Gpt6Astra and Qwen38FlashNext are not carried forward.
Independent nesting engine plugins for OpenNest.
Each engine is a standalone class library that OpenNest discovers at runtime via
NestingEngineRegistry.LoadPlugins() — drop the DLL into an Engines/ folder next to
the OpenNest app or OpenNest.Benchmark build output.
| Engine | Approach |
|---|---|
| Gpt6Astra | Contact-based placement |
| Opus55 | Frontier-advance no-fit-polygon packing |
| Qwen38FlashNext | Bottom-left greedy insertion over convex NFPs with an exact clearance gate |
| Rectangles | Rectangle lane: maximal-rectangles box packing for plain and near-rectangular parts |
Building
Engines compile against an OpenNest checkout, expected as a sibling clone:
src/
OpenNest/ git clone https://git.thecozycat.net/aj/OpenNest.git
OpenNest-Engines/ this repo
Use a different location with /p:OpenNestRoot=<path> (or the OpenNestRoot
environment variable).
./Build-Engines.ps1 # build all engines + deploy to the benchmark
./Build-Engines.ps1 -Engines Opus55 # just one
dotnet test OpenNest.Engine.Opus55/tests/OpenNest.Engine.Opus55.Tests.csproj
Each engine's README covers its algorithm and benchmark results.
Engine.Testing/ contains shared xUnit contract tests, shapes, job builders and layout
assertions backed by NestLayoutCheck. It is a test dependency, not a plugin;
Build-Engines.ps1 only deploys projects in OpenNest.Engine.* directories. All engines
require the shared-services APIs in the sibling host checkout. See
the PR 5 migration report for validation and benchmark results.
Writing a new engine
./New-Engine.ps1 -Name Nova
This copies _Template/ to OpenNest.Engine.Nova/: an INestingEngine stub, a README
spelling out what counts as an independent engine, BENCH-RULES.md (how a model's run
works: workspace limits, git, the real-part archive, reporting), and starter acceptance tests checked by
the shared NestLayoutCheck (they fail until Solve() is implemented).
To work inside an OpenNest checkout instead, stamp it into an Engines/ folder there and
bring the shared build files and test kit along; they detect that layout automatically:
./New-Engine.ps1 -Name Nova -Destination <OpenNest>/Engines -IncludeBuildFiles
Layout
Each engine lives in OpenNest.Engine.<Name>/ with an optional tests/ subproject.
Directory.Build.props supplies the target framework and the OpenNest.Engine
reference, so an engine's .csproj can be nearly empty.