add preliminary MAFX file output for palette3
This commit is contained in:
parent
30ac032e9f
commit
c83945b07f
6 changed files with 105 additions and 5 deletions
|
|
@ -106,6 +106,10 @@ console.log/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
|||
$('print-filename').value + ".gcode");
|
||||
}
|
||||
|
||||
function download_palette() {
|
||||
console.log('todo');
|
||||
}
|
||||
|
||||
API.ajax("/kiri/output-laser.html", function(html) {
|
||||
let segments = 0;
|
||||
data.forEach(layer => { segments += layer.length });
|
||||
|
|
@ -454,6 +458,98 @@ console.log/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
|||
calcWeight();
|
||||
}
|
||||
|
||||
// in palette mode, show download button
|
||||
let downloadPalette = $('print-palette');
|
||||
downloadPalette.style.display = info.segments ? 'flex' : 'none';
|
||||
// generate MAFX downloadble file
|
||||
if (info.segments) {
|
||||
// todo: reduce segments to eliminate 0 lenghts and transitions before 150mm
|
||||
let { settings, segments } = info;
|
||||
let { bounds } = settings;
|
||||
let { min, max } = bounds;
|
||||
let driveInfo = {};
|
||||
let volume = {};
|
||||
let length = {};
|
||||
for (let seg of segments) {
|
||||
let seginfo = driveInfo[seg.tool] = driveInfo[seg.tool] || { length: 0, volume: 0 };
|
||||
seginfo.length += seg.emitted;
|
||||
seginfo.volume += seg.emitted * Math.PI;
|
||||
volume[seg.tool+1] = seginfo.volume;
|
||||
length[seg.tool+1] = seginfo.length;
|
||||
}
|
||||
let totalVolume = Object.values(volume).reduce((a,v) => a+v);
|
||||
let meta = {
|
||||
version: "3.2",
|
||||
printerProfile: {
|
||||
id: settings.extras.palette.printer,
|
||||
name: "my printer"
|
||||
},
|
||||
preheatTemperature: { nozzle: [0], bed: 0 },
|
||||
paletteNozzle: 0,
|
||||
time: info.time.round(1),
|
||||
volume,
|
||||
length,
|
||||
totalLength: info.distance.round(1),
|
||||
totalVolume,
|
||||
inputsUsed: Object.keys(driveInfo).length,
|
||||
splices: segments.length,
|
||||
pings: 0,
|
||||
boundingBox: {
|
||||
min: [ min.x, min.y, min.z ],
|
||||
max: [ max.x, max.y, max.z ]
|
||||
},
|
||||
filaments: Object.keys(driveInfo).map(v => { return {
|
||||
name: `Color${v}`,
|
||||
type: "Filament",
|
||||
color: `#${v}0${v}0${v}0`,
|
||||
materialId: 1,
|
||||
filamentId: parseInt(v)+1
|
||||
}}),
|
||||
};
|
||||
let lastDrive;
|
||||
let algokeys = {};
|
||||
let algorithms = [];
|
||||
let palette = {
|
||||
version: "3.0",
|
||||
drives: [0, 0, 0, 0, 0, 0, 0, 0].map((v,i) => {
|
||||
return driveInfo[i] ? i+1 : 0
|
||||
}),
|
||||
splices: segments.filter(r => {
|
||||
return r.emitted >= 150;
|
||||
}).map(r => {
|
||||
if (lastDrive >= 0 && lastDrive !== r.tool) {
|
||||
let key = `${lastDrive}+${r.tool}`;
|
||||
if (!algokeys[key]) {
|
||||
let rec = algokeys[key] = {
|
||||
ingoingId: lastDrive + 1,
|
||||
outgoingId: r.tool + 1,
|
||||
compression: 0,
|
||||
cooling: 0,
|
||||
heat: 0
|
||||
};
|
||||
algorithms.push(rec);
|
||||
}
|
||||
}
|
||||
lastDrive = r.tool;
|
||||
return { id: r.tool + 1, length: r.emitted.round(2) }
|
||||
}),
|
||||
pings: [],
|
||||
algorithms
|
||||
};
|
||||
console.log({meta, palette});
|
||||
downloadPalette.onclick = function() {
|
||||
KIRI.client.zip([
|
||||
{name:"meta.json", data:JSON.stringify(meta,undefined,4)},
|
||||
{name:"palette.json", data:JSON.stringify(palette,undefined,4)}
|
||||
], progress => {
|
||||
API.show.progress(progress.percent/100, "generating palette files");
|
||||
}, output => {
|
||||
API.show.progress(0);
|
||||
API.util.download(output, `${name}.mafx`);
|
||||
})
|
||||
};
|
||||
}
|
||||
|
||||
// octoprint setup
|
||||
$('send-to-octohead').style.display = octo ? '' : 'none';
|
||||
$('send-to-octoprint').style.display = octo ? '' : 'none';
|
||||
|
|
|
|||
|
|
@ -641,14 +641,14 @@
|
|||
let work = $('incwork').checked;
|
||||
let json = API.conf.export({work, clear:true});
|
||||
|
||||
KIRI.client.zip([{
|
||||
name:"workspace.json", data:JSON.stringify(json)}
|
||||
KIRI.client.zip([
|
||||
{name:"workspace.json", data:JSON.stringify(json)}
|
||||
], progress => {
|
||||
API.show.progress(progress.percent/100, "compressing workspace");
|
||||
}, output => {
|
||||
API.show.progress(0);
|
||||
API.util.download(output, `${name}.kmz`);
|
||||
})
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -822,7 +822,7 @@
|
|||
// force emit of buffer
|
||||
append();
|
||||
|
||||
print.segments = segments;
|
||||
print.segments = isPalette ? segments : undefined;
|
||||
print.distance = emitted;
|
||||
print.lines = lines;
|
||||
print.bytes = bytes + lines - 1;
|
||||
|
|
|
|||
|
|
@ -1130,6 +1130,9 @@ th, tr, td, label {
|
|||
#print-download {
|
||||
min-height: 4em !important;
|
||||
}
|
||||
#print-palette {
|
||||
display: none;
|
||||
}
|
||||
#code-preview-textarea {
|
||||
width: 40em;
|
||||
height: 12em;
|
||||
|
|
|
|||
|
|
@ -216,7 +216,7 @@
|
|||
</div>
|
||||
<div id="act-export">
|
||||
<i class="fas fa-file-download"></i>
|
||||
<label id="label-export" title="generate downloadable files" lk="export">export</label>
|
||||
<label id="label-export" title="generate gcode" lk="export">export</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
<div class="header"><label>gcode</label></div>
|
||||
<div class="f-row box">
|
||||
<button id="print-download" class="grow">download</button>
|
||||
<button id="print-palette" class="grow">palette</button>
|
||||
</div>
|
||||
|
||||
<div id="send-to-octohead" class="header"><label>octoprint</label></div>
|
||||
|
|
|
|||
Loading…
Reference in a new issue