From 4837ac83dfec36e26628213fa5d9571820a41cf2 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 29 Aug 2021 14:53:37 -0400 Subject: [PATCH] generate cxdlp preview/thumb --- src/kiri/main.js | 2 +- src/mode/sla/export.js | 23 +++++++++++++++++------ src/mode/sla/slice.js | 21 ++++++++++++++++++--- 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/kiri/main.js b/src/kiri/main.js index 4800510e..0992961d 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -993,7 +993,7 @@ console.log/** Copyright Stewart Allen -- All Rights Reserved */ if (viewMode == VIEWS.ARRANGE) { let snap = SPACE.screenshot(); API.view.snapshot = snap.substring(snap.indexOf(",") + 1); - KIRI.work.snap(SPACE.screenshot2()); + KIRI.work.snap(SPACE.screenshot2({width: 640})); } if (MODE === MODES.SLA && !callback) { callback = preparePreview; diff --git a/src/mode/sla/export.js b/src/mode/sla/export.js index c7454d14..b5c500a1 100644 --- a/src/mode/sla/export.js +++ b/src/mode/sla/export.js @@ -108,19 +108,30 @@ // generate thumb, preview1, preview2 let thumb = []; + let tdata = SLA.previewSmall.data; for (let x=0; x<116; x++) { for (let y=0; y<116; y++) { - let val = 1 << Math.floor(x / 7.25); - thumb.push((val >> 8) & 0xff); - thumb.push(val & 0xff); + let p = (x * 116 + y) * 4; + let r = (tdata[p + 0] >> 3) << 11; + let g = (tdata[p + 1] >> 2) << 5; + let b = (tdata[p + 2] >> 3); + let v = (r | g | b) & 0xffff; + thumb.push((v >> 8) & 0xff); + thumb.push(v & 0xff); } } let preview1 = []; + let pdata = SLA.previewLarge.data; +console.log({pdata}); for (let x=0; x<290; x++) { for (let y=0; y<290; y++) { - let val = 1 << Math.floor(x / 18.125); - preview1.push((val >> 8) & 0xff); - preview1.push(val & 0xff); + let p = (x * 290 + y) * 4; + let r = (pdata[p + 0] >> 3) << 11; + let g = (pdata[p + 1] >> 2) << 5; + let b = (pdata[p + 2] >> 3); + let v = (r | g | b) & 0xffff; + preview1.push((v >> 8) & 0xff); + preview1.push(v & 0xff); } } let preview2 = preview1; diff --git a/src/mode/sla/slice.js b/src/mode/sla/slice.js index d15a1ed3..1ef1d00c 100644 --- a/src/mode/sla/slice.js +++ b/src/mode/sla/slice.js @@ -50,14 +50,28 @@ }); } + let smallDims = { x: 200, y: 125 }; + let largeDims = { x: 400, y: 300 }; + + switch (device.deviceName) { + case 'Anycubic.Photon': + case 'Anycubic.Photon.S': + // defaults above + break; + case 'Creality.Halot.Sky': + smallDims = { x: 116, y: 116 }; + largeDims = { x: 290, y: 290 }; + break; + } + let sws = self.worker.snap.url; let b64 = atob(sws.substring(sws.indexOf(',') + 1)); let bin = Uint8Array.from(b64, c => c.charCodeAt(0)); let img = new png.PNG(); img.parse(bin, (err, data) => { SLA.preview = img; - SLA.previewSmall = samplePNG(img, 200, 125); - SLA.previewLarge = samplePNG(img, 400, 300); + SLA.previewSmall = samplePNG(img, smallDims.x, smallDims.y); + SLA.previewLarge = samplePNG(img, largeDims.x, largeDims.y); }); let height = process.slaSlice || 0.05; @@ -635,11 +649,12 @@ function samplePNG(png, width, height) { let th = width, tw = height, + aspect = width / height, // was fixed at 4/3 for photon ratio = png.width / png.height, buf = new Uint8Array(th * tw * 4), div, xoff, yoff, dx, ex, dy, ey, bidx, pixval; - if (ratio > 4/3) { + if (ratio >= aspect) { div = png.height / tw; xoff = Math.round((png.width - (th * div)) / 2); yoff = 0;