【问题标题】:Do I need paper-jsdom-canvas to use the simplify method in paper.js from nodejs?我是否需要 paper-jsdom-canvas 才能从 nodejs 使用 paper.js 中的简化方法?
【发布时间】:2019-06-30 10:30:34
【问题描述】:

我正在尝试使用 paper.js 出色的 path.simplify 方法简化手绘路径,以便在用户完成绘图后生成平滑曲线。由于这是针对非 HTML 输出(TV Telestration),我试图在 nodejs 中创建一个微服务来获取点并输出生成的简化曲线的控制点。

我尝试使用 paper-jsdom 并且该方法有效并且没有抱怨,但总是输出一个所有点坐标为零的单个段。我想知道我是否应该使用 paper-jsdom-canvas 来获得适当的输出。

这是我正在尝试构建的节点模块:

const Path = require('paper').Path
const Point = require('paper').Point
const Project = require('paper').Project

// the next line produces side effects without which 
// the code will not run, but I'm not sure this is the way to go.
let p = new Project() 

function simplify (points) {
  let pts = []
  for (let point in points) {
    let pt = new Point(point.x, point.y)
    pts.push(pt)
  }
  let path = new Path({
    segments: pts,
    strokeColor: 'black',
    fullySelected: false
  })
  path.simplify(10)

  let simplePath = []
  for (const segment of path.segments) {
    // only one segment reaches this point
    // with all zeros in all the parameters
    console.log(segment.path)
    simplePath.push(
      {
        handleIn: { x: segment.handleIn.x, y: segment.handleIn.y },
        handleOut: { x: segment.handleOut.x, y: segment.handleOut.y },
        point: { x: segment.point.x, y: segment.point.y }
      })
    console.log(`
    hi   : (${segment.handleIn.x}, ${segment.handleIn.y})
    ho   : (${segment.handleOut.x}, ${segment.handleOut.y})
    point: (${segment.point.x}, ${segment.point.y})`)
  }
  return simplePath
}
module.exports = simplify

【问题讨论】:

    标签: node.js paperjs jsdom


    【解决方案1】:

    我认为你的错误在这里:

    for (let point in points) {
        let pt = new Point(point.x, point.y);
        pts.push(pt);
    }
    

    如果我认为变量 points 包含一个对象数组,则应改为使用:

    for (let point of points) {
        let pt = new Point(point.x, point.y);
        pts.push(pt);
    }
    

    注意关键字 of 替换 for 循环中的 in
    您实际上是在循环键而不是值。

    【讨论】:

    • 嗨,萨森西!谢谢你的帮助。事实上,你提到的循环是问题的一部分。我已经从 forEach 进行了更改以避免异步行为并引入了这个错误。我在传递的点的序列化方面遇到了第二个问题(它们是数组而不是对象),但你的回答让我们解决了问题的其余部分。事实上,循环工作但只返回索引,然后它们的属性是全部未定义。
    猜你喜欢
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多