# OpenNest Engines Independent nesting engine plugins for [OpenNest](https://git.thecozycat.net/aj/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](OpenNest.Engine.Gpt6Astra/) | Contact-based placement | | [Opus55](OpenNest.Engine.Opus55/) | Frontier-advance no-fit-polygon packing | | [Qwen38FlashNext](OpenNest.Engine.Qwen38FlashNext/) | Bottom-left greedy insertion over convex NFPs with an exact clearance gate | ## 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=` (or the `OpenNestRoot` environment variable). ```powershell ./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](MIGRATION-PR5.md) for validation and benchmark results. ## Writing a new engine ```powershell ./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: ```powershell ./New-Engine.ps1 -Name Nova -Destination /Engines -IncludeBuildFiles ``` ## Layout Each engine lives in `OpenNest.Engine./` 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.