Я отправил электронное письмо автору Seshat, и он предложил мне преобразовать входные данные в SCG Ink, что оказалось довольно просто, если взять библиотеки JavaScript, используемые по адресу http://cat.prhlt.upv.es/mer/.. В частности, вам нужны jquery.sketchable.memento.min.js
, jquery.sketchable.min.js
и jsketch.min.js
в дополнение к обычному старому jQuery. Вот что я сделал на случай, если кого-то еще заинтересует Сешат.
Обратите внимание на той же странице, что в 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.) На этом сайте они продолжают и отправляют этот массив на сервер, который должен обрабатывать окончательное преобразование в SCG Ink. Я написал функцию 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.
person
anthonybrice
schedule
03.12.2015