按原点定位多边形 (fabric.js)

Positioning a polygon by its origin (fabric.js)

我通过关于原点对称地定义点创建了一个简单的六边形。但是,六边形并未相对于 canvas 上的 0,0 点定位。它似乎正在使用边界矩形的 top/left 。有没有办法使用0,0点作为原点?

var HH = 87;
var HV = 50;

var canvas = new fabric.Canvas('c', {
    backgroundColor: '#e0e0e0'
});

hex = new fabric.Polygon([
        {x: 0, y: -2 * HV},
        {x: HH, y: -HV},
        {x: HH, y: HV},
        {x: 0, y: 2 * HV},
        {x: -HH, y: HV},
        {x: -HH, y: -HV}
    ], {
        left: 0,
        top: 0,
        fill: 'blue',
        selectable: true
    });

canvas.add(hex);

我围绕任意原点绘制此多边形。当我将它放在 canvas 上的 X、Y 处时,我希望多边形的 0,0 点位于 canvas 点 X、Y 上。

您可以按照您在评论中指出的那样设置 originXoriginY。你想要的值是 center

hex = new fabric.Polygon([
        { x: 0, y: -2 * HV },
        { x: HH, y: -HV },
        { x: HH, y: HV },
        { x: 0, y: 2 * HV },
        { x: -HH, y: HV },
        { x: -HH, y: -HV }
], {
    originX: 'center',
    originY: 'center',
    fill: 'blue',
    selectable: true
});

请注意,您不需要顶部和左侧的值(它们默认为 0)。


If I set originX and originY on the polygon to 0, it works as I want, but the docs say those properties take 'left', 'center', 'right'.

这是因为转换点的代码位做了类似

的事情
point coordinates = intial value

if (originX === 'left') {
    adjust point x value
}
else if (originX === 'right') {
    adjust point y value
}

// do similar thing for originY
...

因此,任何不是 'left' 或 'right' 的值都将被视为 'center'。您可以通过执行类似

的操作来测试它
hex = new fabric.Polygon([
        { x: 0, y: -2 * HV },
        { x: HH, y: -HV },
        { x: HH, y: HV },
        { x: 0, y: 2 * HV },
        { x: -HH, y: HV },
        { x: -HH, y: -HV }
], {
    originX: 'something',
    originY: 'something',
    fill: 'blue',
    selectable: true
});

虽然我不会依赖它在库更新时以类似方式运行。