🧪 Demo di Boiserie Planner PRO: calcola e guarda il piano di posa liberamente. Stampa, CSV e archivio sono nella versione completa. Acquista a 10 € →

Disponibile nella versione PRO

Nella demo puoi calcolare tagli, sfrido e sequenza di montaggio. Stampa, esportazione CSV, copia e archivio dei lavori si sbloccano con la versione completa: un file, tuo per sempre, funziona anche offline.

Acquista Boiserie Planner PRO · 10 €

Boiserie Planner

Tagli, sfrido e sequenza di montaggio

Dati della parete

Inserisci le misure finite in millimetri. Il piano si aggiorna al calcolo.

mm
mm
mm
file
Doga standard: 4087 mmAltezza doga: 128 mmLama: 4 mmRecupero avanzo: oltre 50 mm
File totali0
Doghe da 4087 mm0
Metri acquistati0 m
Superficie utile0 m²
Sfrido totale0%
Avanzo recuperabile0 m

Tabella unica di montaggio

Sequenza dal basso verso l’alto. Tutte le quote sono in millimetri.

Andamento pezzi a correre
Giunto conformeFila da verificare

Riepilogo materiali

Quantità principali del lavoro.

Controlli tecnici

Verifica giunti, lama e recuperi.

Funzioni extra consigliate

mm
mm
mm
mm

Piano di taglio delle doghe standard

Indica da quale doga da 4.087 mm ricavare ogni pezzo, includendo lama e residuo.

DogaPezzi assegnatiLamaResiduoEsito residuo
`;downloadBlob(html,'Archivio_Lavori_Boiserie_'+timestamp()+'.html','text/html;charset=utf-8')} function backupArchive(){const payload={application:'Boiserie Planner',version:3,exportedAt:new Date().toISOString(),jobs:getArchive()};downloadBlob(JSON.stringify(payload,null,2),'Backup_Archivio_Boiserie_'+timestamp()+'.json','application/json')} function importArchive(file){const reader=new FileReader();reader.onload=()=>{try{const parsed=JSON.parse(reader.result),incoming=Array.isArray(parsed)?parsed:parsed.jobs;if(!Array.isArray(incoming))throw new Error('Formato non valido');const valid=incoming.filter(job=>job&&job.id&&job.data&&Number(job.data.wallWidth)>0),map=new Map(getArchive().map(job=>[job.id,job]));valid.forEach(job=>map.set(job.id,job));setArchive([...map.values()].sort((a,b)=>String(b.savedAt).localeCompare(String(a.savedAt))));renderArchive();setNotice('ok',valid.length+' lavori importati o aggiornati.')}catch(_){setNotice('error','Backup non riconosciuto o danneggiato.')}};reader.readAsText(file)} function openArchive(){renderArchive();$('archiveModal').classList.add('show')}function closeArchive(){$('archiveModal').classList.remove('show')} refs.form.addEventListener('submit',event=>{event.preventDefault();run(true)});$('resetBtn').addEventListener('click',()=>{applyInputs({projectName:'Parete soggiorno',wallHeight:2500,wallWidth:8500,...STANDARD});run(false);clearNotice()});$('saveJobBtn').addEventListener('click',saveJob);$('archiveBtn').addEventListener('click',openArchive);$('closeArchiveBtn').addEventListener('click',closeArchive);$('archiveModal').addEventListener('click',event=>{if(event.target===$('archiveModal'))closeArchive()});$('archiveList').addEventListener('click',event=>{const button=event.target.closest('button');if(!button)return;if(button.dataset.open)openJob(button.dataset.open);if(button.dataset.download)downloadJob(button.dataset.download);if(button.dataset.delete)deleteJob(button.dataset.delete)});$('shareBtn').addEventListener('click',shareApp);$('moreBtn').addEventListener('click',()=>{const open=$('extrasPanel').classList.toggle('open');$('moreBtn').setAttribute('aria-expanded',String(open));$('moreBtn').textContent=open?'Nascondi maggiori funzioni':'Maggiori funzioni'});$('printBtn').addEventListener('click',()=>{if(currentResult||run(false))window.print()});$('csvBtn').addEventListener('click',exportCsv);$('copyBtn').addEventListener('click',copyCuts);$('archiveExportBtn').addEventListener('click',exportArchiveHtml);$('backupBtn').addEventListener('click',backupArchive);$('importBtn').addEventListener('click',()=>$('importFile').click());$('importFile').addEventListener('change',event=>{if(event.target.files[0])importArchive(event.target.files[0]);event.target.value=''});$('contrastBtn').addEventListener('click',()=>document.body.classList.toggle('contrast')); document.querySelectorAll('.tab').forEach(tab=>tab.addEventListener('click',()=>{document.querySelectorAll('.tab').forEach(item=>{item.classList.toggle('active',item===tab);item.setAttribute('aria-selected',String(item===tab))});document.querySelectorAll('.panel').forEach(panel=>panel.classList.toggle('active',panel.id===tab.dataset.panel))}));document.addEventListener('keydown',event=>{if(event.key==='Escape')closeArchive()});['stockLength','rowHeight','kerf','recoverMin'].forEach(id=>$(id).addEventListener('change',()=>run(false))); try{const seed=JSON.parse($('jobSeed').textContent||'{}');if(seed&&Object.keys(seed).length)applyInputs(seed)}catch(_){}run(false); /* WebMCP: la stessa azione principale dell'interfaccia, nei browser compatibili. */ try{if(document.modelContext&&document.modelContext.registerTool){document.modelContext.registerTool({name:'calculate_boiserie_plan',title:'Calcola piano boiserie',description:'Imposta le misure della parete e calcola tagli, sfrido e sequenza di montaggio.',inputSchema:{type:'object',properties:{projectName:{type:'string'},wallHeight:{type:'number',exclusiveMinimum:0},wallWidth:{type:'number',exclusiveMinimum:0},jointDistance:{type:'number',minimum:0},jointGroup:{type:'integer',minimum:2,maximum:10}},required:['wallHeight','wallWidth'],additionalProperties:false},annotations:{readOnlyHint:false,untrustedContentHint:false},execute(input){applyInputs({...input,stockLength:n('stockLength'),rowHeight:n('rowHeight'),kerf:n('kerf'),recoverMin:n('recoverMin')});const result=run(false);if(!result)throw new Error('Parametri non validi');return{rows:result.rows.length,standardBoards:result.boards.length,wastePercent:Number(result.wastePercent.toFixed(2)),jointCompliant:result.jointCompliant}}})}}catch(_){} })();