# 3D Model Cutlist Generator

URL: https://cutlistevo.com/guide/3d-model-cutlist

> Turn a 3D model into a cutting list. Drop an OBJ, STL, STEP, 3MF, glTF, PLY or Collada file, or send a model straight from SketchUp, and Cutlist Evolution measures every panel, classifies it and hands you a cutlist.

The **3D model cutlist generator** turns a 3D model into a cutting list. It measures every panel in the model, works out what each one is, merges the duplicates, and hands you a list you can send to the optimiser, export as a CSV, or print as a bill of materials.

It has a page of its own at **/app/import-3d**. Two ways to get there:

- The main menu (top right) → **3D model cutlist generator**.
- The **Import** panel → **Import 3D model**.

There are two tabs, and they end in the same place:

- **Import Model** - drop a file exported from your CAD software.
- **Import SketchUp** - send a model live from SketchUp, with no file to export.

Once you have a model on screen, a **Project name** field appears at the top. It defaults to the dropped file's name and titles the bill of materials and the print job, so it is worth changing `cabinet_v3_final.dae` to something you would hand to a supplier.

## Import Model

### Supported Formats

- OBJ
- STL
- PLY
- glTF / GLB
- 3MF
- Collada (DAE)
- STEP (`.step` / `.stp`)

### Exporting from Your CAD Software

Hide or delete anything you don't want cut before you export - fixings, appliances, worktops - then export the model.

- **SketchUp** - export as Collada (DAE), or skip the file entirely and use the [Import SketchUp](#import-sketchup) tab.
- **Fusion 360** - export as OBJ or STEP.
- **Shapr3D** - export as STEP or STL.
- **Onshape** - export as STEP.

### Dropping Files

Drop one file, or several at once. A job is rarely one export - doors from one file, carcasses from another - so a multi-file drop is read as a single model: one part list, one set of merged quantities, one preview.

When you drop more than one file, any part the file didn't name takes its file's name instead, so you can tell which export each row came from.

### Model Units

**Model units** is what the numbers in the file mean, and **Convert imported dimensions to** is the unit you want them in.

3MF, Collada and STEP state their own units, so **Model units** is shown as locked rather than offered - the file has already answered the question. OBJ, STL, PLY and glTF carry no unit at all, so those are the formats that get a dropdown, and you have to check it yourself.

Getting this wrong is silent - every part stays correct relative to every other, so a whole cabinet can arrive in tenths of a millimetre looking perfectly consistent. Two things guard against it:

- The summary shows **Whole model measures**, the size of the entire model in the units you're reading it as. A cabinet reading 1 × 0.9 × 0.5 is obviously not millimetres.
- If the model is barely wider than your saw's blade, it can't be the right unit. The panel says so and offers a button to re-read the file in the unit that makes sense of it.

Changing either dropdown rescales the parts immediately - the model isn't re-read, so you can try a unit and change your mind.

### Settings

Everything below is under **Settings**, above the drop zone. **Add to existing parts** lives there too: tick it and the import adds to the parts already in your cutlist instead of replacing them, with matching rows having their quantity increased rather than being repeated.

### Merging Duplicates

**Merge identical parts** collapses matching parts into one row with a quantity. The summary tells you how many duplicates were merged.

**Treat mirrored parts as identical** also merges a part with its mirror image. It is off by default, and should stay off when the sheet has a face, a grain direction or machining on one side - a mirrored panel is then a different part, not another copy of the same one.

:::note
These two settings are shared with the **Import SketchUp** tab. They describe how the geometry is read, which is the same question however the geometry arrived, so setting either one here sets it there too.
:::

### Round Holes

**Convert round holes to drilling** turns round holes into drilling operations on the part rather than treating them as geometry.

Rectangular cutting would otherwise lose them entirely. Nesting cuts them out as polygons unless they're converted, so with this on they're drilled instead of cut. Holes that aren't round are left as they are.

### Orientation and Grain

**Set orientation from model** locks each part the way round it was drawn, so a part whose length runs along the model's length keeps that direction against the stock grain.

**Reverse part orientation** flips that reading, for a model drawn the other way round - one tick rather than a re-export.

**Default stock grain** sets the grain on any stock the import creates. It only appears when **Set orientation from model** is on, because the parts' locks are resolved against the stock's grain.

### Creating Stock

**Create matching stock** adds one stock item for each material and thickness combination in the import, at the **Default stock length** and **Default stock width** you give. Check the sizes afterwards in the **Inputs** panel.

You don't have to use it - see [Materials](#materials) for the same job done while the parts are still on screen, and note that the import creates a board for any material that still hasn't got one on its way out.

## The Parts Table

Every analysed part is one editable row. The dimensions, name and material are yours to change - what the analysis measured is the starting point, not the last word.

| Column | What it is |
|---|---|
| Include | Whether this part is imported. Follows the role unless you override it. |
| Colour | The colour this part is drawn in, in the 3D preview. Click to change it. |
| Shape | The part's outline, drawn to scale. |
| Length / Width / Thick. | Editable. A zero or blank one is flagged. |
| Qty | How many, after duplicates are merged. |
| Name / Material | Editable. |
| Type | What the part **will be cut as** - see below. |
| Role | What you want done with it - see [Roles](#roles). |

Above the table, **All**, **Rectangles** and **Shapes** filter the list, each with its own count.

### The Type Badge

The **Type** badge says what will happen to the part, not what the mesh is:

- **Rectangle** - a plain rectangular panel.
- **Shape** - not a rectangle, and it will be cut as drawn.
- **Squared off** / **Squared +25%** - a shape that is about to be cut as its enclosing rectangle, with what that costs in wasted material.
- **Not a panel** - the analysis could not read it as a flat cuttable panel.
- **Problem** - something is wrong with the row and it can't be imported. The check under the row says what.

A shape only reads **Squared** when the commit will actually square it off. Squaring is resolved per material (see [Next Steps](#next-steps)), so a shape sitting in a material that nests is cut as drawn however its own row is marked.

## Roles

The **Role** column is the one decision the importer asks you to make, and it is per row.

| Role | Means |
|---|---|
| **Rect** | Cut as a plain rectangle. Any outline is dropped. |
| **Nest** | Cut as its true shape on a CNC. The outline and holes are kept. |
| **No cut** | A real part that is not cut here - glass, or something bought in. Stays in the list and in the CSV, and appears under **Supplied parts** on the bill of materials, but never goes to the optimiser. |
| **Skip** | Not a cuttable panel - hardware, a fixture, a fitting. Left out of the cutlist, and listed under **Hardware** on the bill of materials. |

Roles are pre-selected from what the analysis found. Change any of them and the 3D preview re-tints immediately - the legend under the preview explains the colours.

## Shapes and Squaring Off

Picking **Rect** on a shape **is** squaring it off: the part is cut at its tightest enclosing rectangle, and the cost appears in that row's Type badge.

To do it to everything at once, use **Square off all shapes** in the **Next steps** panel. It tells you what it would cost as a percentage of those parts' area before you press it, and **Put the shapes back** undoes it - nothing is written but roles, so it is safe to try.

There is also a per-material offer. Where squaring one material's shapes off is cheap enough to be worth mentioning, its row in **Next steps** carries a **Square them off instead** button.

## Checks

Anything worth checking - open meshes, parts that aren't flat panels, a thickness that isn't the smallest dimension, parts that overlap each other, parts larger than your stock - is shown **under the row it is about**, so the problem and the part are in one glance.

Warnings are yours to judge. Errors can't be imported, and those rows can't be ticked.

A **Checks** panel appears below the table only for checks about the **file** rather than about any one part, which have no row to sit under. When there are none, there is no panel.

## The 3D Preview

The preview shows the model with each part coloured by its role, and a legend below it.

- **Assembly** / **Tiled** - the model as it was drawn, or every part laid flat in a grid like a cut list.
- **Explode** - drag the slider, or use the 0% / 50% / 100% buttons, to pull the parts apart. Assembly view only.
- **Fit** - frame the whole model again.
- **Expand** - open the preview full size. Your view is kept when you expand or collapse.
- Click a part to select it and its row scrolls into view. Click a row to highlight the part. Right-click a part for its actions, including **Square off to a rectangle**.

Mouse and keyboard:

- **drag** - orbit
- **arrow keys** - orbit
- **shift + arrow keys** - pan
- **+** / **-** - zoom
- **F** - fit
- **E** - explode
- **Esc** - deselect

## Materials

The **Materials** section groups the parts by material and thickness and says where each name came from: from the file, matched to your stock, set by you, or not set at all. Type a name into any group and every part in it updates.

The edit button on a material row opens the full material editor - cost, material type, optimisation and the saw overrides - and those settings are stamped onto the real materials after the import.

**Create stock for N materials** adds a board for every material that hasn't got one, without touching a board you have already sized and costed. The button says what is left to do, so a disabled **Every material has stock** is the answer to "is there anything to do here" without pressing it. You don't have to use it: the import creates the missing boards on its way out anyway.

## Next Steps

The **Next steps** panel is the end of the flow. It opens with a count - how many parts are ready, how many rectangles, how many shapes - and then one row per material group.

Each material row shows its thickness, its part count, how many shapes it holds, and the optimisation it will run under:

- **Rectangular** - an ordinary saw. Shapes in this material are squared off.
- **Nesting** - a CNC. Shapes are cut as drawn, and rectangles nest alongside them.

The choice is **per material**, not for the whole job: a shaped worktop can nest while the carcass it sits on runs on the panel saw. It is pre-selected from the parts' roles and marked **detected** until you choose one yourself, and the note under each row spells out what that material will do and what it costs.

A material whose parts are long pieces sharing a cross-section is also marked **Linear · detected**. Sheet is the default and isn't stated. Linear is a real claim, and you can disagree with it in that material's own settings.

Four ways out:

- **Import to optimiser** - commits the parts, adds a board for any material that hasn't got one, and takes you to the optimiser.
- **Export parts CSV** - Name, Length, Width, Thickness, Quantity, Material, Role. This is the round-trip format: it can be imported again.
- **Bill of materials** - a printable document, sectioned into **Cut parts**, **Supplied parts**, **Hardware** and **Materials**, with costs where every material has one. This is the document you hand to a supplier, and it carries the rows the optimiser never sees.
- **BOM as CSV** - the same content flat, with a Category column, for a spreadsheet.

After importing, check the result in the **Inputs** panel, where you can edit or bulk edit the parts.

## Import SketchUp

Send panels straight from SketchUp into your cutlist, with no file to export. The Cutlist Evolution extension walks the model, measures every component and pushes the parts across for you to review.

This needs no account and no sign-in. The short pairing code is the whole connection, and nothing reaches your cutlist until you confirm it.

### Install the Extension

You only do this once.

1. Download the Cutlist Evolution extension (a `.rbz` file). Hosting for the download is coming soon.
2. In SketchUp, choose **Window → Extension Manager → Install Extension**, and pick the `.rbz`.
3. Accept the unsigned extension prompt if SketchUp shows one.
4. The extension appears at **Extensions → Cutlist Evolution → Send to Cutlist Evolution**.

SketchUp 2021 or newer is required, on Windows or macOS.

### Sending a Model

1. Open the **Import SketchUp** tab. It shows a connection code.
2. In SketchUp, choose **Extensions → Cutlist Evolution → Send to Cutlist Evolution**.
3. Paste the code into **Connection code**.
4. Pick the unit you work in from the SketchUp dialog's own list. The extension converts before it sends, so the numbers arrive ready to cut and nothing is converted again at this end.
5. Set **Send** to **Whole model** or **Selection only**.
6. Press **Send**.
7. The parts appear in a table and a 3D preview, with the same columns, roles and controls as the **Import Model** tab. Edit any value, remove any row you don't want, then press **Import** - or **Discard** to throw the whole delivery away.

### Grouping by Assembly

The extension tells Cutlist Evolution which component or group each part came from, so parts you drew together can be cut together. Tick **Group parts by assembly** and each assembly becomes a [group](/guide/#groups) - a block of parts cut in the arrangement you drew them in, keeping grain and pattern running continuously across the joins. Groups appear in the **Groups** panel, where you can adjust or remove them.

The option appears when the delivery describes assemblies at all, and is off by default. An assembly is only grouped when its parts:

- share a **material** and a **thickness** - the block is cut from one board
- lie in **one flat face**, rather than at angles to each other or stacked in layers - so a run of doors or a veneered front groups, while a cabinet's sides, shelves and back don't
- are all the **same way round** - group positions can't turn a part
- don't **overlap** where they were drawn.

Anything else imports loose, with a notice naming the assembly and the reason - **Cabinet B not grouped: mixed materials**.

### Notes

- Codes expire after about 15 minutes, and the same code keeps working until then - so you can send, adjust the model, and send again without re-pairing. Use **New code** if yours has expired or you want to cut off a previous pairing.
- Your model's parts should be groups or components. A component holding other components is walked into, contributing its sides, top and shelves rather than itself as one large board.
- Dimensions are read from each component's own axes, so a rotated part measures the same as an unrotated one.
- Hidden components are left out.
- Fractions are shown when the number format is set to fractions. That is a display setting and does not change any measurement.
- The sender decides whether a delivery replaces the parts already in your cutlist, and the panel tells you which it will do before you import.
