Я послал по электронной почте автора Seshat, и он предложил преобразовать вход в SCG Ink, который оказался довольно простым, если вы используете библиотеки JavaScript, используемые в http://cat.prhlt.upv.es/mer/. В частности, вы хотите jquery.sketchable.memento.min.js
, jquery.sketchable.min.js
и jsketch.min.js
в дополнение к обычным старым jQuery. Вот что я сделал, если кто-то еще интересуется Seshat.
Обратите внимание на той же странице, что в main.js
они применяют Sketchable библиотеку в области холста HTML с этим блоком кода:
var $canvas = $('#drawing-canvas').sketchable({
graphics: {
strokeStyle: "red",
firstPointSize: 2
}
});
Теперь мы посмотрим на их submitStrokes()
функции можно увидеть, как принять штрихи от Sketchable и конвертировать в SCG Ink. Строка var strokes = $canvas.sketchable('strokes');
получает штрихи, а затем линия strokes = transform(strokes);
применяет быстрое преобразование для извлечения только необходимых им данных. Вот transform()
функции для справки:
function transform(strokes) {
for (var i = 0; i < strokes.length; ++i)
for (var j = 0, stroke = strokes[i]; j < stroke.length; ++j)
strokes[i][j] = [ strokes[i][j][0], strokes[i][j][1] ];
return strokes;
};
Значения возвращается сюда transform()
это трехмерный массив штрихов и точек. (Каждый элемент первого измерения является штрихом, каждый элемент второго измерения является точкой, а третий размер - x-, y-координатами.) На этом сайте они идут вперед и POST этот массив на сервер, который должен обрабатывать окончательное преобразование в чернила SCG. Я написал функцию JavaScript для ее обработки:
function strokesToScg(strokes) {
var scg = 'SCG_INK\n' + strokes.length + '\n'
strokes.forEach(function (stroke) {
scg += stroke.length + '\n'
stroke.forEach(function (p) {
scg += p[0] + ' ' + p[1] + '\n'
})
})
return scg
}
И все. Значение, возвращаемое с strokesToScg()
, представляет собой строку, описывающую последовательность штрихов в формате SCG Ink.