3d打印js-slicer(SLAcer.js)的二进制处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3d打印js-slicer(SLAcer.js)的二进制处理相关的知识,希望对你有一定的参考价值。
介绍
嘿伙计们,我目前正在研究一种基于javascript的三维切片工具(SLAcer.js - 很棒的工作顺便说一句。),它可以为我便宜的dlp-printer(SparkMaker)生成方便的打印文件。打印文件由一些G-Code和简单的二进制图层/图像组成(参见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文件时,它们几乎完全匹配所需/原始模式
级联:
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)
以上是关于3d打印js-slicer(SLAcer.js)的二进制处理的主要内容,如果未能解决你的问题,请参考以下文章