| Unit | Material | Name | Width | Height | Qty | Grain | Edge | Corners | Del | |
|---|---|---|---|---|---|---|---|---|---|---|
|
Click "โ Add Part" to begin |
||||||||||
|
No parts match โโ |
||||||||||
| 0) { document.getElementById('part-name-' + (index - 1)).focus(); }" @keydown.down.prevent="if (index < parts.length - 1) { document.getElementById('part-name-' + (index + 1)).focus(); } else { addNewPartRow(); setTimeout(() => document.getElementById('part-name-' + parts.length - 1).focus(), 50); }" @keydown.enter.prevent="addNewPartRow(); setTimeout(() => document.getElementById('part-name-' + parts.length - 1).focus(), 50);" @keydown.delete="if ($event.ctrlKey || $event.metaKey) { $event.preventDefault(); deletePart(index); if (parts.length > 0) { setTimeout(() => document.getElementById('part-name-' + Math.min(index, parts.length - 1)).focus(), 50); } }" @keydown.tab="if ($event.shiftKey) { $event.preventDefault(); /* focus previous */ } else { $event.preventDefault(); document.getElementById('part-width-' + index).focus(); }" :id="'part-name-' + index" class="w-full px-2 py-1 text-xs bg-transparent text-app border border-transparent hover:border-app-border-dark focus:bg-app-input-bg focus:border-app-input-focus rounded outline-none transition" placeholder="Part name"> | 0) { document.getElementById('part-width-' + (index - 1)).focus(); }" @keydown.down.prevent="if (index < parts.length - 1) { document.getElementById('part-width-' + (index + 1)).focus(); } else { addNewPartRow(); setTimeout(() => document.getElementById('part-name-' + parts.length - 1).focus(), 50); }" @keydown.enter.prevent="addNewPartRow(); setTimeout(() => document.getElementById('part-name-' + parts.length - 1).focus(), 50);" @keydown.delete="if ($event.ctrlKey || $event.metaKey) { $event.preventDefault(); deletePart(index); if (parts.length > 0) { setTimeout(() => document.getElementById('part-width-' + Math.min(index, parts.length - 1)).focus(), 50); } }" @keydown.tab="if ($event.shiftKey) { $event.preventDefault(); document.getElementById('part-name-' + index).focus(); } else { $event.preventDefault(); document.getElementById('part-height-' + index).focus(); }" :id="'part-width-' + index" min="1" step="1" class="w-full px-2 py-1 text-xs text-center bg-transparent text-app border border-transparent hover:border-gray-300 focus:bg-white focus:bg-app-input-bg focus:border-red-800 rounded outline-none transition [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none focus:[appearance:number] focus:[&::-webkit-outer-spin-button]:appearance-auto focus:[&::-webkit-inner-spin-button]:appearance-auto" placeholder="mm"> | 0) { document.getElementById('part-height-' + (index - 1)).focus(); }" @keydown.down.prevent="if (index < parts.length - 1) { document.getElementById('part-height-' + (index + 1)).focus(); } else { addNewPartRow(); setTimeout(() => document.getElementById('part-name-' + parts.length - 1).focus(), 50); }" @keydown.enter.prevent="addNewPartRow(); setTimeout(() => document.getElementById('part-name-' + parts.length - 1).focus(), 50);" @keydown.delete="if ($event.ctrlKey || $event.metaKey) { $event.preventDefault(); deletePart(index); if (parts.length > 0) { setTimeout(() => document.getElementById('part-height-' + Math.min(index, parts.length - 1)).focus(), 50); } }" @keydown.tab="if ($event.shiftKey) { $event.preventDefault(); document.getElementById('part-width-' + index).focus(); } else { $event.preventDefault(); document.getElementById('part-qty-' + index).focus(); }" :id="'part-height-' + index" min="1" step="1" class="w-full px-2 py-1 text-xs text-center bg-transparent text-app border border-transparent hover:border-gray-300 focus:bg-white focus:bg-app-input-bg focus:border-red-800 rounded outline-none transition [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none focus:[appearance:number] focus:[&::-webkit-outer-spin-button]:appearance-auto focus:[&::-webkit-inner-spin-button]:appearance-auto" placeholder="mm"> | 0) { document.getElementById('part-qty-' + (index - 1)).focus(); }" @keydown.down.prevent="if (index < parts.length - 1) { document.getElementById('part-qty-' + (index + 1)).focus(); } else { addNewPartRow(); setTimeout(() => document.getElementById('part-name-' + parts.length - 1).focus(), 50); }" @keydown.enter.prevent="addNewPartRow(); setTimeout(() => document.getElementById('part-name-' + parts.length - 1).focus(), 50);" @keydown.delete="if ($event.ctrlKey || $event.metaKey) { $event.preventDefault(); deletePart(index); if (parts.length > 0) { setTimeout(() => document.getElementById('part-qty-' + Math.min(index, parts.length - 1)).focus(), 50); } }" @keydown.tab="if ($event.shiftKey) { $event.preventDefault(); document.getElementById('part-height-' + index).focus(); } else { if (index === parts.length - 1) { $event.preventDefault(); addNewPartRow(); setTimeout(() => document.getElementById('part-name-' + (index + 1)).focus(), 50); } }" :id="'part-qty-' + index" min="1" step="1" class="w-full px-2 py-1 text-xs text-center bg-transparent text-app border border-transparent hover:border-gray-300 focus:bg-white focus:bg-app-input-bg focus:border-red-800 rounded outline-none transition [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none focus:[appearance:number] focus:[&::-webkit-outer-spin-button]:appearance-auto focus:[&::-webkit-inner-spin-button]:appearance-auto" placeholder="1"> |
|
||||||
Sheet sizes below apply to this workspace only. Saved material defaults are unchanged.
| Material | Width (mm) | Height (mm) | Stock grain | Boards needed |
|---|---|---|---|---|
|
Default
|
โ |
Professional Sheet Cutting Optimizer
โจ Reduce material waste by up to 30% with intelligent optimization
Add Your Parts
Enter dimensions manually, use Cabinet Designer, or load sample data to get started
Configure Settings
Select your material type and adjust cutting parameters if needed
Optimize Layout
Click "Optimize Layout" to generate your cutting pattern with minimal waste
Drag to reorder ยท components evenly spaced with mm gaps
Real-time visualization of cabinet design
| Name | Width | Height | Qty | Grain | Edge |
|---|---|---|---|---|---|
| Side Panel | 2 | ||||
| Top Panel | 1 | ||||
| Bottom Panel | 1 | ||||
| Back Panel | 1 | ||||
| Shelf | |||||
| Kick/Plinth | 1 | ||||
| Door |
| Part | WรH | Qty | |
|---|---|---|---|
|
No parts yet |
|||
|
|
|
||
No optimization results yet
Add parts and click "Calculate Optimization" to see the layout
Keeps parts clear of the sheet edge for trimming, screws or clamps.
Drag to reorder components on the panel
components evenly spaced with mm gaps
Add components from the panel designer below to see them positioned here
Set grain direction for wood panels
Loading components...
No components match your current filters.