/** Copyright Stewart Allen -- All Rights Reserved */ "use strict"; (function() { let KIRI = self.kiri, BASE = self.base, UTIL = BASE.util, SLA = KIRI.driver.SLA; SLA.init = function(kiri, api) { api.event.on("mode.set", (mode) => { if (mode === 'SLA') { api.ui.act.preview.classList.add('hide'); } else { api.ui.act.preview.classList.remove('hide'); } }); }; SLA.sliceRender = function(widget) { // legacy debug return; widget.slices.forEach(slice => { let layers = slice.layers, outline = layers.outline, support = layers.support; if (slice.solids.unioned) { // console.log('solid', slice.index) slice.solids.unioned.forEach(poly => { poly = poly.clone(true);//.move(widget.track.pos); outline.poly(poly, 0x010101, true); outline.solid(poly, 0x0099cc); }); } else if (slice.tops) { // console.log('top', slice.index) slice.tops.forEach(top => { let poly = top.poly;//.clone(true).move(widget.track.pos); outline.poly(poly, 0x010101, true, false); outline.solid(poly, 0xfcba03); }); } if (slice.supports) { // console.log('support', slice.index) slice.supports.forEach(poly => { //poly = poly.clone(true).move(widget.track.pos); support.poly(poly, 0x010101, true, false); support.solid(poly, 0xfcba03); }); } slice.renderDiff(); slice.renderSolidOutlines(); outline.renderAll(); support.renderAll(); }); } SLA.printRender = function(print) { let widgets = print.widgets, settings = print.settings, device = settings.device, process = settings.process; for (let index=0; ; index++) { let layer = KIRI.newLayer(print.group); let count = 0; widgets.forEach(widget => { let slice = widget.slices[index]; if (!slice) { return; } count++; let polys = slice.solids.unioned; if (!polys) polys = slice.tops.map(t => t.poly); if (slice.supports) polys.appendAll(slice.supports); polys.forEach(poly => { poly = poly.clone(true).move(widget.track.pos); layer.poly(poly, 0x777777, true); layer.solid(poly, 0x0099cc); }); }); layer.renderSolid(); layer.render(); if (count === 0) { // TODO fix with contract for exposing layer count // hack uses expected gcode output array in print object print.output = print.printView; return; } print.printView.push(layer); } } SLA.printDownload = function(print) { let { API, lines, done } = print.sla; let filename = `print-${new Date().getTime().toString(36)}`; API.ajax("/kiri/output-sla.html", html => { API.ui.print.innerHTML = html; let printset = print.settings, process = printset.process, device = printset.device, print_sec = (process.slaBaseLayers * process.slaBaseOn) + (lines.length - process.slaBaseLayers) * process.slaLayerOn; // add peel lift/drop times to total print time for (let i=0; i { saveFile(API, done.file, ".photon") }; break; case 'Anycubic.Photon.S': download.innerText += " .photons"; download.onclick = () => { saveFile(API, done.file, ".photons") }; break; } let canvas = $('print-canvas'); let ctx = canvas.getContext('2d'); let img = ctx.createImageData(done.height, done.width); let imgDV = new DataView(img.data.buffer); let range = $('print-range'); range.value = 0; range.min = 0; range.max = lines.length - 1; range.oninput = function() { let lineDV = new DataView(lines[range.value]); for (let i=0; i