ajandClaude Opus 5.5 39db4dc10f feat(ui): route Auto Nest through whole-job engines
StockLadder and Engines/ plug-ins only implement INestingEngine.Solve, so
selecting them in Auto Nest had no path to run. MainForm now solves the
whole job through JobEngineNest when the selected engine is not a
built-in fill strategy, feeding NestJobProgress into NestProgressForm and
binding the result poses back onto the nest's own drawings. Whole-job
engines throw on cancel rather than returning a partial layout, so the
progress form hides Accept for these runs. Built-in strategies keep the
existing per-plate fill path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 14:03:10 -04:00
2016-05-16 22:09:19 -04:00

OpenNest

A Windows desktop application for CNC nesting — imports DXF drawings, arranges parts on material plates, and exports layouts as DXF or G-code for cutting.

OpenNest - parts nested on a 36x36 plate OpenNest - 44 parts nested on a 60x120 plate

Features

  • Import / export — DXF & DWG parts (ACadSharp), Excel BOMs, bend-line detection, built-in parametric shapes; export DXF or post-processed G-code.
  • Nesting — pluggable whole-job engines (Default, Strip, Vertical/Horizontal Remnant, StockLadder, plus DLL plugins), NFP-based interlocking pair evaluation, gravity compaction, rotation sweeps, multi-plate/multi-material jobs.
  • Plate operations — sheet cut-offs, oversized-part splitting (straight, weld-gap tabs, spike-groove), interactive editing.
  • CNC output — configurable lead-ins/outs and tabs, contour editing, user-defined G-code variables ($name → #200+ machine variables), plugin post-processors (Cincinnati CL-707/800/900/940/CLX included).

Requirements

  • Windows 10+ for the desktop app; the console, API, and most test projects build on Linux/macOS too.
  • .NET 8 SDK

Build, Test, Run

git clone https://git.thecozycat.net/aj/OpenNest.git
cd OpenNest
dotnet build OpenNest.sln                                       # full solution (Windows)
dotnet test OpenNest.Engine.Tests/OpenNest.Engine.Tests.csproj  # cross-platform engine tests
dotnet test OpenNest.Tests/OpenNest.Tests.csproj                # core/engine/IO/API tests
dotnet run --project OpenNest/OpenNest.csproj                   # desktop app (Windows)

OpenNest.WinForms.Tests (desktop-assembly tests) runs on Windows only. Format changed files with dotnet format OpenNest.sln --include <path>.

Quick start

  1. File > New Nest
  2. Import DXFs via the CAD Converter (layer/color filtering, bend detection, G-code preview) or create built-in shapes
  3. Define plate size, material, quadrant, spacing
  4. Fill — the engine arranges parts
  5. Optionally add cut-off lines, then save .nest, export DXF, or post-process to G-code

Command-Line Interface

dotnet run --project OpenNest.Console -- part.dxf --size 60x120               # fill one plate
dotnet run --project OpenNest.Console -- part1.dxf part2.dxf --size 60x120 --autonest
dotnet run --project OpenNest.Console -- project.zip                          # re-fill a nest file

Key options: --size WxL, --autonest (whole-job nesting), --engine <name> (jobs engine or fill strategy), --quantity, --spacing, --template <nest>, --output <path>, --check-overlaps, --post <name>, --no-save. Run without arguments for the full list.

Benchmarking Engines

OpenNest.Benchmark runs every registered INestingEngine against .nest files (or a JSON manifest of DXFs + quantities) and scores by salvage-credited sheet area, with a penalty per unplaced part.

dotnet run --project OpenNest.Benchmark -- ./benchmark-jobs \
  --sheet-sizes 48x96,60x120,72x120 --engines Default,StockLadder --csv results.csv

Layouts are validated (bounds, spacing, quantity, rotation, stock match); invalid runs place nothing and pay the penalty. --parallel (default 3) speeds up scoring but inflates Time(ms) — use --parallel 1 when comparing speed. Pass --sheet-sizes for an unbiased run; otherwise only each file's original sizes are offered. --progress logs each solve's start, the engine's NestJobProgress (plate evaluations throttled to one line per 2 s, every plate commit) and its finish. Custom engines drop in as DLLs implementing INestingEngine (public parameterless constructor) in an Engines/ folder next to the benchmark. Community engines live in OpenNest-Engines.

Project Structure

Project Purpose
OpenNest WinForms desktop app
OpenNest.Core Domain model, geometry, CNC primitives
OpenNest.Engine Nesting algorithms and whole-job contracts
OpenNest.IO DXF/DWG, .nest, G-code, BOM I/O; CAD import
OpenNest.Console Headless batch nesting
OpenNest.Api / .Data Programmatic pipeline; machine & cutting-parameter data
OpenNest.Gpu GPU-accelerated pair evaluation (ILGPU)
OpenNest.Benchmark Head-to-head engine comparison
OpenNest.Mcp MCP server for AI tool integration
OpenNest.Posts.Cincinnati Cincinnati laser post-processor plugin
*.Tests Cross-platform suites; WinForms tests are Windows-only

Nesting Engines

Jobs-only API: engines implement INestingEngine.Solve(NestJob); only NestJobRunner commits demand and stock, and every candidate passes the placement validator (bounds, spacing, rotation policy, stock match) before it consumes anything.

Engine Description
Default Multi-phase: linear fill → pairs → rect best-fit → extents
Strip Iterative shrink-fill for mixed-drawing layouts
Vertical / Horizontal Remnant Optimizes a clean remnant drop on one edge
StockLadder Whole-job, stock-constrained baseline with salvage-credit ranking

File Format

.nest files are ZIP archives: nest.json (metadata, plates, drawings, placements), programs/program-N (G-code per drawing), optional entities/, sub-programs, and cached best-fit data.

Supported Formats

Format Import Export
DXF Yes Yes
DWG Yes No
Excel BOM Yes No
G-code No Yes (post-processors)
.nest Yes Yes

Keyboard Shortcuts

Ctrl+F fill area · F zoom to fit · Shift+wheel / middle-click rotate · X/Y push · arrows nudge · Shift+arrow push.

Status & License

Actively developed; core workflows run end-to-end from DXF import to G-code. Contributions welcome. MIT licensed — see LICENSE.

S
Description
A Windows desktop app for CNC nesting — imports DXF drawings, arranges parts on plates and exports layouts as DXF or G-code for cutting.
Readme MIT
5.7 MiB
Languages
C# 99.7%
Jupyter Notebook 0.3%