我想对正在处理的项目使用Seshat(手写数学表达式解析器),但是在理解如何为程序提供适当输入(InkML或SCG Ink文件)时遇到了一些麻烦。

我仔细看了一个存在here的在线示例,我发现他们从应用了this JS library的HTML Canvas字段中获得了笔画信息的Javascript数组,但是我不知道该数组会发生什么在它发布到他们的服务器之后。

我已经读过SCG Ink spec,并且我认为将数组解析为格式可能相对容易,但是我希望有一些明显的缺失,这会使它变得微不足道。任何帮助将不胜感激。

最佳答案

我给Seshat作者发送了电子邮件,他建议我将输入内容转换为SCG Ink,如果您使用http://cat.prhlt.upv.es/mer/处使用的JavaScript库,事实证明这很容易。具体来说,除了常规的旧jQuery外,还需要jquery.sketchable.memento.min.jsjquery.sketchable.min.jsjsketch.min.js。如果其他人对Seshat感兴趣,这就是我所做的。

请注意,在同一页面上,他们在main.js中使用以下代码块将Sketchable库应用于HTML canvas区域:

var $canvas = $('#drawing-canvas').sketchable({
  graphics: {
    strokeStyle: "red",
    firstPointSize: 2
  }
});


现在,我们可以看看它们的submitStrokes()函数,以了解如何从Sketchable中提取笔触并将其转换为SCG墨水。行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墨水。我写了一个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墨水格式描述了一系列笔画。

关于javascript - 将笔划数据转换为SCG墨水格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33574812/

10-12 02:55