add .photon export
This commit is contained in:
parent
f9d650284c
commit
db1590c57f
6 changed files with 168 additions and 18 deletions
|
|
@ -88,6 +88,7 @@ let gs_kiri_conf = exports;
|
|||
// currently causes unecessary fills and culls because
|
||||
// it's not mode and device type sensitive
|
||||
let device = {
|
||||
noclone: valueOf(code.no_clone, false),
|
||||
mode: mode || code.mode || '',
|
||||
internal: 0,
|
||||
bedHeight: 2.5,
|
||||
|
|
@ -286,6 +287,7 @@ let gs_kiri_conf = exports;
|
|||
sla:{
|
||||
// device defaults SLA:Device
|
||||
d:{
|
||||
noclone: false,
|
||||
mode: "",
|
||||
internal: 0,
|
||||
bedWidth: 150,
|
||||
|
|
|
|||
|
|
@ -210,7 +210,7 @@ let gs_kiri_sla = exports;
|
|||
$('print-layers').value = lines.length;
|
||||
$('print-close').onclick = API.modal.hide;
|
||||
$('print-photons').onclick = () => { download_photons(print) };
|
||||
// $('print-photon').onclick = () => { download_photon(print) };
|
||||
$('print-photon').onclick = () => { download_photon(print) };
|
||||
// $('print-pws').onclick = () => { download_pws(print) };
|
||||
|
||||
let canvas = $('print-canvas');
|
||||
|
|
@ -235,6 +235,122 @@ let gs_kiri_sla = exports;
|
|||
});
|
||||
}
|
||||
|
||||
function download_photon(print) {
|
||||
let printset = print.settings,
|
||||
process = printset.process,
|
||||
device = printset.device,
|
||||
width = print.sla.done.width,
|
||||
height = print.sla.done.height,
|
||||
layerCount = print.sla.lines.length,
|
||||
layerBytes = width * height;
|
||||
|
||||
let converted = print.sla.lines.map((line, index) => {
|
||||
let count = line.length / 4;
|
||||
let bits = new Uint8Array(line.length / 4);
|
||||
let bitsDV = new DataView(bits.buffer);
|
||||
let lineDV = new DataView(line.buffer);
|
||||
// reduce RGB to R
|
||||
for (let i = 0; i < count; i++) {
|
||||
// defeat anti-aliasing for the moment
|
||||
bitsDV.setUint8(i, lineDV.getUint8(i * 4) > 0 ? 1 : 0);
|
||||
}
|
||||
return {
|
||||
subs: [{
|
||||
exposureTime: process.slaLayerOn,
|
||||
data: bits
|
||||
}]
|
||||
};
|
||||
});
|
||||
|
||||
let coded = encodeLayers(converted, "photon");
|
||||
let filebuf = new ArrayBuffer(984 + coded.length + layerCount * 28);
|
||||
let filedat = new DataWriter(new DataView(filebuf));
|
||||
|
||||
filedat.skip(4); // header
|
||||
filedat.writeU32(2); //version
|
||||
filedat.writeF32(68.04, true); // bed x
|
||||
filedat.writeF32(120.96, true); // bed y
|
||||
filedat.writeF32(150.0, true); // bed z
|
||||
filedat.skip(12); // padding
|
||||
filedat.writeF32(process.slaSlice, true); // layer height
|
||||
filedat.writeF32(process.slaLayerOn, true); // default lamp on
|
||||
filedat.writeF32(process.slaBaseOn, true); // base lamp on
|
||||
filedat.writeF32(process.slaLayerOff, true); // lamp off
|
||||
filedat.writeU32(process.slaBaseLayers, true); // base layers
|
||||
filedat.writeU32(1440, true); // device x
|
||||
filedat.writeU32(2560, true); // device y
|
||||
let hirez = filedat.skip(4); // hirez preview address filled pater
|
||||
let layerpos = filedat.skip(4); // layer data address filled later
|
||||
filedat.writeU32(layerCount, true);
|
||||
let lorez = filedat.skip(4); // hirez preview address filled later
|
||||
filedat.writeU32(0, true); // print time (TODO)
|
||||
filedat.writeU32(0, true); // projection type (TODO)
|
||||
let proppos = filedat.skip(4); // print properties address filled later
|
||||
let proplen = filedat.skip(4); // print properties length filled later
|
||||
filedat.writeU32(1, true); // AA level (sub layers)
|
||||
filedat.writeU16(0, true); // light pwm (TODO);
|
||||
filedat.writeU16(0, true); // light pwm bottom (TODO);
|
||||
|
||||
filedat.view.setUint32(hirez, filedat.pos, true);
|
||||
// write hirez preview header
|
||||
filedat.writeU32(0, true); // res x
|
||||
filedat.writeU32(0, true); // res y
|
||||
filedat.writeU32(filedat.pos, true); // data pos
|
||||
filedat.writeU32(0, true); // data len
|
||||
// write hirez preview data
|
||||
|
||||
filedat.view.setUint32(lorez, filedat.pos, true);
|
||||
// write lorez preview header
|
||||
filedat.writeU32(0, true); // res x
|
||||
filedat.writeU32(0, true); // res y
|
||||
filedat.writeU32(filedat.pos, true); // data pos
|
||||
filedat.writeU32(0, true); // data len
|
||||
// write lorez preview data
|
||||
|
||||
filedat.view.setUint32(proppos, filedat.pos, true);
|
||||
// write print properties
|
||||
filedat.writeF32(process.slaPeelDist, true);
|
||||
filedat.writeF32(process.slaPeelLift, true); // speed
|
||||
filedat.writeF32(process.slaPeelDrop, true); // speed
|
||||
filedat.writeF32(0, true); // volume of used
|
||||
filedat.writeF32(0, true); // weight of used
|
||||
filedat.writeF32(0, true); // cost of used
|
||||
filedat.writeF32(0, true); // bottom off delay time
|
||||
filedat.writeF32(0, true); // light off delay time
|
||||
filedat.writeF32(process.slaBaseLayers, true);
|
||||
filedat.writeF32(0, true); // p1 ?
|
||||
filedat.writeF32(0, true); // p2 ?
|
||||
filedat.writeF32(0, true); // p3 ?
|
||||
filedat.writeF32(0, true); // p4 ?
|
||||
|
||||
filedat.view.setUint32(layerpos, filedat.pos, true);
|
||||
// write layer headers
|
||||
let layers = coded.layers;
|
||||
let layerat = [];
|
||||
for (let l=0; l<layers.length; l++) {
|
||||
filedat.writeF32(process.slaSlice, true);
|
||||
filedat.writeF32(l < process.slaBaseLayers ? process.slaBasOn : process.slaLayerOn, true);
|
||||
filedat.writeF32(process.slaLayerOff, true);
|
||||
layerat.push(filedat.skip(4)); // rewrite later
|
||||
filedat.writeU32(layers[l].length, true);
|
||||
filedat.skip(16); // padding
|
||||
}
|
||||
// write layer data
|
||||
for (let l=0; l<layers.length; l++) {
|
||||
filedat.view.setUint32(layerat[l], filedat.pos, true);
|
||||
let layer = layers[l].sublayers[0];
|
||||
for (let j=0; j<layer.length; j++) {
|
||||
filedat.writeU8(layer[j], true);
|
||||
}
|
||||
}
|
||||
|
||||
saveAs(
|
||||
new Blob([filebuf], { type: "application/octet-stream" }),
|
||||
$('print-filename').value + ".photon");
|
||||
|
||||
print.sla.API.modal.hide();
|
||||
}
|
||||
|
||||
function download_photons(print) {
|
||||
let printset = print.settings,
|
||||
process = printset.process,
|
||||
|
|
@ -262,8 +378,8 @@ let gs_kiri_sla = exports;
|
|||
};
|
||||
});
|
||||
|
||||
let layers = encodeLayers(converted, "photons");
|
||||
let filebuf = new ArrayBuffer(75366 + layers.length + 28 * layerCount);
|
||||
let coded = encodeLayers(converted, "photons");
|
||||
let filebuf = new ArrayBuffer(75366 + coded.length + 28 * layerCount);
|
||||
let filedat = new DataView(filebuf);
|
||||
let filePos = 0;
|
||||
|
||||
|
|
@ -288,7 +404,7 @@ let gs_kiri_sla = exports;
|
|||
|
||||
filePos = 75366;
|
||||
for (let i = 0; i < layerCount; i++) {
|
||||
let layer = layers.layers[i],
|
||||
let layer = coded.layers[i],
|
||||
sublayer = layer.sublayers[0],
|
||||
numbytes = sublayer.length;
|
||||
|
||||
|
|
@ -312,9 +428,6 @@ let gs_kiri_sla = exports;
|
|||
print.sla.API.modal.hide();
|
||||
}
|
||||
|
||||
function download_photon() {
|
||||
}
|
||||
|
||||
function download_pws() {
|
||||
}
|
||||
|
||||
|
|
@ -407,3 +520,41 @@ let gs_kiri_sla = exports;
|
|||
return bytes;
|
||||
}
|
||||
})();
|
||||
|
||||
class DataWriter {
|
||||
constructor(view) {
|
||||
this.view = view;
|
||||
this.pos = 0;
|
||||
}
|
||||
|
||||
skip(v) {
|
||||
let p = this.pos;
|
||||
this.pos += v;
|
||||
return p;
|
||||
}
|
||||
|
||||
writeU8(v) {
|
||||
this.view.setUint8(this.pos, v);
|
||||
return this.skip(1);
|
||||
}
|
||||
|
||||
writeU16(v,le) {
|
||||
this.view.setUint16(this.pos, v, le);
|
||||
return this.skip(2);
|
||||
}
|
||||
|
||||
writeU32(v,le) {
|
||||
this.view.setUint32(this.pos, v, le);
|
||||
return this.skip(4);
|
||||
}
|
||||
|
||||
writeF32(v,le) {
|
||||
this.view.setFloat32(this.pos, v, le);
|
||||
return this.skip(4);
|
||||
}
|
||||
|
||||
writeF64(v,le) {
|
||||
this.view.setFloat64(this.pos, v, le);
|
||||
return this.skip(8);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -626,6 +626,7 @@ var gs_kiri_init = exports;
|
|||
|
||||
UI.deviceSave.disabled = !local;
|
||||
UI.deviceDelete.disabled = !local;
|
||||
UI.deviceAdd.disabled = dev.noclone;
|
||||
|
||||
API.view.update_fields();
|
||||
platform.update_size();
|
||||
|
|
@ -1142,9 +1143,9 @@ var gs_kiri_init = exports;
|
|||
deviceName: UC.newInput(LANG.dv_name_s, {title:LANG.dv_name_l, size:"60%", text:true}),
|
||||
bedWidth: UC.newInput(LANG.dv_bedw_s, {title:LANG.dv_bedw_l, convert:UC.toInt}),
|
||||
bedDepth: UC.newInput(LANG.dv_bedd_s, {title:LANG.dv_bedd_l, convert:UC.toInt}),
|
||||
maxHeight: UC.newInput(LANG.dv_bedh_s, {title:LANG.dv_bedh_l, convert:UC.toInt, modes:FDM}),
|
||||
maxHeight: UC.newInput(LANG.dv_bedh_s, {title:LANG.dv_bedh_l, convert:UC.toInt, modes:FDM_SLA}),
|
||||
deviceMaxSpindle: UC.newInput(LANG.dv_spmx_s, {title:LANG.dv_spmx_l, convert:UC.toInt, modes:CAM}),
|
||||
deviceOrigin: UC.newBoolean(LANG.dv_orgc_s, onBooleanClick, {title:LANG.dv_orgc_l}),
|
||||
deviceOrigin: UC.newBoolean(LANG.dv_orgc_s, onBooleanClick, {title:LANG.dv_orgc_l, modes:GCODE}),
|
||||
deviceOriginTop: UC.newBoolean(LANG.dv_orgt_s, onBooleanClick, {title:LANG.dv_orgt_l, modes:CAM}),
|
||||
deviceRound: UC.newBoolean(LANG.dv_bedc_s, onBooleanClick, {title:LANG.dv_bedc_l, modes:FDM}),
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
{
|
||||
"pre":[],
|
||||
"post":[],
|
||||
"no_clone": true,
|
||||
"cmd":{},
|
||||
"settings":{
|
||||
"bed_width": 115,
|
||||
"bed_depth": 65,
|
||||
"max_height": 155,
|
||||
"origin_center": true
|
||||
"max_height": 155
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
{
|
||||
"pre":[],
|
||||
"post":[],
|
||||
"no_clone": true,
|
||||
"cmd":{},
|
||||
"settings":{
|
||||
"bed_width": 115,
|
||||
"bed_depth": 65,
|
||||
"max_height": 165,
|
||||
"origin_center": true
|
||||
"max_height": 165
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@
|
|||
<div class="print-sel">
|
||||
<table>
|
||||
<tr><th><button id="print-photons">download as .photons</button></th></tr>
|
||||
<!--
|
||||
<tr><th><button id="print-photon">download as .photon</button></th></tr>
|
||||
<!--
|
||||
<tr><th><button id="print-pws">download as .pws</button></th></tr>
|
||||
-->
|
||||
</table>
|
||||
|
|
|
|||
Loading…
Reference in a new issue