Files
OpenNest-Engines/README.md
T
ajandClaude Opus 5.5 70ae0cc155 feat: add _Template and New-Engine.ps1 for starting new engines
Each engine-building run started from a hand-copied scaffold (Qwen's),
which carried that engine's name and stale notes. _Template holds the
generic scaffold with a __NAME__ placeholder, and New-Engine.ps1 stamps
out a named copy. The template's starter tests go through the
benchmark's NestValidator, so a model gets a real pass/fail target
instead of a plumbing-only check; they were verified to pass against
Opus55.

Directory.Build.props now also detects when it sits in an Engines/
folder inside an OpenNest checkout, so an engine stamped there with
-IncludeBuildFiles builds without passing OpenNestRoot.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 10:10:24 -04:00

57 lines
2.0 KiB
Markdown

# 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 |
|--------|----------|
| [Astra](OpenNest.Engine.Astra/) | Contact-based placement |
| [Opus55](OpenNest.Engine.Opus55/) | Frontier-advance no-fit-polygon packing |
| [Qwen](OpenNest.Engine.Qwen/) | Scaffold — not yet implemented |
## 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).
```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.
## 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, and starter acceptance tests checked by
the benchmark's own `NestValidator` (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 along; they detect that layout automatically:
```powershell
./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.