3d 打印 js-slicer 的二进制处理 (SLAcer.js)

Binary handling for 3d printing js-slicer (SLAcer.js)

简介

大家好, 我目前正在研究基于 JavaScript 的 3d 切片工具(SLAcer.js - 顺便说一句,很棒的工作。),它可以为我的廉价 dlp 打印机 (SparkMaker) 生成方便的打印文件。 打印文件包含一些 G 代码和简单的二进制文件 layers/images(参见 here)。

我已经能够生成G代码和包含二进制层相关信息的Uint8Array。 当前,所有 G 代码和二进制层都连接为一个字符串(可能存在第一个问题),最后可以作为 zip 文件的一部分作为打印文件 (.wow) 下载。 (项目默认 JSZip 框架)(参见 here

我纠结的地方是:

我无法为二进制层获取正确的 TextEncoding 以匹配原始二进制层。

var array = new Uint8Array(width*height/8);
var binary_layer;

已经尝试了几件事,包括:

binary_layer=(new TextDecoder("utf-8")).decode(array) /*with different text encodes*/

也尝试过:

binary_layer=bin2string(array)
function bin2string(array){
var result = "";
for(var i = 0; i < array.length; ++i){
result+= (String.fromCharCode(array[i]));
}
console.log(result);
return result;
}

令我惊讶的是,当将每个 Uint8Array 导出为单独的二进制 txt 文件时,它们几乎完全匹配 wanted/original 模式

串联:

file_contents = "[some gecode]";
file_contents += binary_layer;

总结

var staring = "hello";
var array = new Uint8Array(2);
array[0]=255;
array[1]=0;

需要的文件内容(文本和原始二进制文件 - utf8):

hello(xFF)(NUL)

这听起来很简单,但就正确编码而言却并非如此:

问题可以解决(还需要进一步测试)

问题可以通过使用 {binary: true} 选项保存所有数据并使用简单的十六进制到字符串解码器方法来解决:

function bin2string(array){
var result = "";
for(var i = 0; i < array.length; ++i){
result+= (String.fromCharCode(array[i]));
}
return result;
}

烦人的(在我的例子中):

var array = new Uint8Array(2);
array[1]=255;
(new TextDecoder("utf-8")).decode(array)

是否输出:(NUL)(xFD)

但应该有输出:(NUL)(xFF)

这个还有待进一步讨论! (另见 here