Двоичная обработка для 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)
Это нужно обсуждать дальше больше! (см. также здесь)