Двоичная обработка для 3D-печати js-slicer (SLAcer.js)

Вступление

Привет, ребята, в настоящее время я работаю над основанным на JavaScript инструментом 3D-нарезки (SLAcer.js - кстати, отличная работа), который может генерировать удобные файлы печати для моего дешевого dlp-принтера (SparkMaker). Файлы для печати состоят из некоторого G-кода и простых двоичных слоев / изображений (см. Здесь).

Я уже могу сгенерировать G-код и массив Uint8Array, который содержит соответствующую информацию двоичного слоя. Все G-Code и двоичные слои в настоящее время объединяются в виде строки (может быть первая проблема) и в конце могут быть загружены в виде файла печати (.wow) как часть ZIP-файла. (проекты по умолчанию JSZip Framework) (см. здесь)

Дело в том, где я борюсь:

Я не могу получить правильное 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 в виде отдельного двоичного текстового файла они почти идеально соответствуют искомому / оригинальному шаблону.

конкатенация:

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)

Это может показаться простым, но с точки зрения правильного кодирования это не так:

1 ответ

Решение

Проблема может быть исправлена ​​(требуется дальнейшее тестирование)

Проблема может быть решена путем сохранения всех данных с {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)

Это нужно обсуждать дальше больше! (см. также здесь)

Другие вопросы по тегам