This repository has been archived on 2026-09-29. You can view files and clone it. You cannot open issues or pull requests or push a commit.
aj d13ee28653 docs(template): retire the model competition and open engines to each other
Engines now target job lanes; a change lands when it beats the lane's current
best on the benchmark. Reading and borrowing from other engines is allowed with
credit, replacing the isolation/disqualification rule.
2026-09-29 20:49:16 -04:00

OpenNest Engines

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.

S
Description
No description provided
Readme MIT
396 KiB
Languages
C# 98.4%
PowerShell 1.6%