< PlateLayer >
An AutoCAD plug-in that turns a CNC cut layout into paper-space plates — one viewport per part, grouped by material, labelled and dimensioned.
What it is
You have a cut file: a model space full of flat parts, grouped onto layers by material, ready for the CNC. Somebody still has to make the sheet the person at the saw actually reads — every part drawn at a known scale, with its finished dimensions on it, sorted so you can find the one in your hand.
PlateLayer is the command that does it. Select the part geometry, look at the plan, say yes. It groups the parts by material, measures every one, picks one scale per plate, packs them into tiles, clones your ANSI B layout once per plate, and draws each part in its own viewport with an X and a Y dimension.
What comes off the printer is a catalogue you carry to the saw.
It takes flat 2D geometry and stops at paper. It does not nest, does not cut, and does not optimise yield — a plate is for reading, not for feeding a machine. Downstream of PartLayer, which is what flattens the 3D solids into the parts this reads.
AutoCAD 2026, Windows, 64-bit. AutoCAD LT cannot run it — LT has no .NET plug-in API.
Installing
Three steps, and the first one is the one that matters.
- Right-click the downloaded ZIP → Properties → tick Unblock → OK. Before you extract it.
- Close AutoCAD. Copy the
PlateLayer.bundlefolder out of the ZIP into%APPDATA%\Autodesk\ApplicationPlugins\. - Start AutoCAD and type
PLLSET. Its first line should readPlateLayer Alpha 1.4.
Step 1 is not optional. Windows tags files downloaded from the internet, AutoCAD silently refuses to load a tagged DLL, and extracting a tagged ZIP copies the tag onto every file inside it. Skipping it is the single most common reason the plug-in appears to install and then does nothing at all — with no error message of any kind.
No installer, no NETLOAD, no registry keys. Uninstalling is deleting the folder. If PLLSET is not recognised, the install guide works through the causes in order; INSTALL.txt ships inside the ZIP and says the same thing.
Two commands, and a dry run
PLL— the run. Select the geometry, read the plan, generate plates with per-plate approval. Answers toPLATELAYERas well.PLLSET— template layout, parts per plate, scale policy, dimension style, margins, material names, approval mode. Saved into the drawing rather than your profile, so a drawing you send somebody carries its own settings and none of yours.
Answer No at the Proceed prompt the first time. That is a dry run: the plan prints to the text window and the drawing is not touched. It tells you how many plates you are about to get, at what scale, how full each one will be, what geometry it ignored and on what layer — and which constraint decided the plate count. That last line is the one worth reading.
Full keyword and convention reference in COMMANDS.md.
What lands on a plate
One part per viewport, an X dimension, a Y dimension, and nothing else. Fractions are written as MText stacks, so a plug-in-drawn dimension reads the same as one typed by hand.
The sheet identifies itself through the title block. Plate name, the material expanded from its layer — 3/4" Plywood | rPLY_3-4 — the run date, and nn of NN. Those four, and nothing else: project name, client, producer, draftsperson, approved-by and notes belong to whoever set the drawing up, and pointing a configured field at one of them is refused rather than obeyed.
No scale is printed anywhere. The dimensions carry the real measurements, which is the information a person on the floor actually needs.
Per-part index labels were built and then removed: on a part under about an inch of plotted height the vertical dimension text sits at the same height as the label and lands on top of it.
Why it gave you that many sheets
The interesting problem in a tool like this is not drawing the parts. It is answering “why so many sheets” on the page instead of leaving it to be guessed at.
One plate per material is a floor nothing crosses. Eight materials means eight plates under every setting. That is deliberate — a catalogue sheet you carry to the saw should describe the sheet of stock you are cutting — and only mixing materials on a plate would change it, which throws away the grouping the tool exists to produce.
Past that floor it is usually the parts-per-plate cap, not the scale. That was a measured finding, not a guess: across real and synthetic runs, coarsening the scale had already reached the fewest sheets the cap permitted, every time. So the Minimum policy sets the cap aside rather than just coarsening harder — and the run summary names whichever constraint was actually holding.
The legibility floor measures the typical part, not the smallest. A cut file holds 2″ strips and scored lines beside five-foot panels. Measured on the smallest part the floor is unreachable at any scale that fits, so it never operates and coarsening runs away — one material reached 1:64 with 21 parts on a sheet before this changed. Measured on the median short side it caps that material at two readable sheets. One strip should not speak for twenty-one parts.
And some sheets are honestly empty. A material holding two small parts cannot fill a sheet, and splitting them across two plates at a finer scale is worse, not better. Every plate states its fill in the dry run and anything under 35% is named, so a sparse sheet is a decision you have seen rather than a surprise on paper.
What it takes from your drawing
Layers, layout and title block come from your own template rather than being invented. It expects a layout tab named ANSI B — resolution is forgiving, and a miss names the layouts that do exist rather than just refusing — viewport frames on rVIEWPORTS, dimensions on rDIMS_PAPER, and the usual title block attribute tags.
Material names are read off the layer: optional prefix, code, thickness written as 3-4, optional qualifier. The raw layer name is always kept beside the translation, because that is the string someone cross-referencing the cut file will search for. An unrecognised code is named in the run summary rather than guessed at — input to this tool is sheet goods by contract, so it means either a sheet good missing from the table or geometry that should not have been in the run.
Layers it has to create because the drawing lacks them are reported at the end of a run, because a missing convention layer means the drawing was not built from the usual template and the new layer's colour and plot settings are guesses.
What it deliberately is not
These are decisions with reasons, not gaps waiting to be filled.
- No nesting, no yield optimisation. Parts are tiled for legibility. Cut optimisation is a different tool's job.
- No tooling, no kerf, no toolpaths. The output is a drawing to read, not a program to run.
- No mixed-material plates. One material per plate is the point of the tool, not a limitation of it.
- No rotation-aware packing. Parts are tiled at the orientation they arrive in.
- No plot or PDF export. You plot the layouts yourself, the way you plot everything else.
- No ribbon, no toolbar, no dialogs. The commands are typed.
- AutoCAD 2026 only. On any other release the bundle is correctly ignored, and ignored silently.
The alpha
It is in use by its author on real cut files. It has not been through many hands, which is the whole reason it is here.
- Work on a copy of any drawing you care about.
- Run the dry run first. It is free, it changes nothing, and it is the whole plan.
- Read the ignored-layer report. A material drawn on the wrong layer upstream is exactly what it catches, and that has already happened once on a real file — a whole material's worth of parts, silently absent from the run.
- The approval loop and the error handling have not been exercised hard against production files. That is the main reason this is 1.4 and not 1.0 proper.
Reporting a bug
Email rob@rjgarner.com with “PlateLayer” in the subject. REPORTING.md has the detail; the short version is attach the drawing, and paste the dry-run text. Most reports about plate counts and scales are answered by that text alone, and it costs nothing to produce.
If the plug-in will not load at all, send three things and nothing else is needed: the output of TRUSTEDPATHS, your AutoCAD version from the ABOUT box, and a screenshot of the PlateLayer.bundle folder.
Source
Source is published at github.com/LemJukes/PlateLayer-pub. C# on .NET 8; PlateLayer.Core is grouping, measuring, scale, packing and planning with no AutoCAD references and carries the test suite, PlateLayer.Cad is everything that touches AutoCAD. The moment a Core test needs AutoCAD to run, the logic under test is in the wrong assembly.
Building the plug-in needs AutoCAD 2026 installed, because PlateLayer.Cad references its managed assemblies in place. The Core tests do not — dotnet test on them works on a machine that has never had AutoCAD on it.
Not open source yet, deliberately. All rights reserved, with an explicit grant to download, install, use — including commercially — and build this alpha. A permissive licence cannot be retracted from code already published under it, so the alpha starts at the end that leaves the decision open. Exact terms in NOTICE.md.
None of Autodesk's code is redistributed. The two DLLs in the package are the whole payload and both are this project's own.
Disclaimer: the majority of this source code was generated by AI/LLM tooling; all design decisions and responsibility for the software rest solely with the developer.