| Name | Width | Height | Qty | Grain | Edge | Radius | Actions |
|---|---|---|---|---|---|---|---|
|
Click "➕ Add Part" to begin |
|||||||
| 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 dark:hover:border-dark-border focus:bg-white focus:bg-app-input-bg focus:border-red-800 dark:focus:border-red-600 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 dark:hover:border-dark-border focus:bg-white focus:bg-app-input-bg focus:border-red-800 dark:focus:border-red-600 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 dark:hover:border-dark-border focus:bg-white focus:bg-app-input-bg focus:border-red-800 dark:focus:border-red-600 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"> |
|
|||
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
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.