Изменение размера полигонов, полилиний, линий в FabricJS без использования «масштаба» - PullRequest
0 голосов
/ 18 апреля 2019

Как я могу изменить размеры полигонов или других объектов Fabricjs, которые "основаны на точках", не масштабируя их?

Масштабирование увеличивает обводку объектов, и я хотел бы переопределить это поведение.

Я сделал это для прямоугольников следующим образом:

/** Resize instead of scaling example */
this.on({
    'scaling': function(e) {
        var obj = this;
        obj.width = obj.scaleX * obj.width;
        obj.height = obj.scaleY * obj.height;
        obj.scaleX = 1;
        obj.scaleY = 1;
    }
});

Пример эллипса:

    this.on({
        'scaling': function(e) {
            var obj = this;
            obj.width = obj.scaleX * obj.width;
            obj.height = obj.scaleY * obj.height;
            obj.ry = obj.ry * obj.scaleY;
            obj.rx =  obj.rx * obj.scaleX;
            obj.scaleX = 1;
            obj.scaleY = 1;
        }
    });

У меня другой вопрос, потому что пользователи могут редактировать свойства объекта, нарисованные на холсте вручную.

Например, если я рисую многоугольник и применяю scaleRatio, равное 2, если я устанавливаю значение штриховой ширины равным 1, ткань будет отображать границу масштаба 1 * масштаба на моем многоугольнике.

Вот почему я ищу переопределение поведения масштаба с реальным поведением "перерисовки", как я это сделал для fabric.Rect или fabric.Ellipse.

1 Ответ

1 голос
/ 19 апреля 2019

Начиная с Fabric.js версии 2.7.0, теперь существует свойство strokeUniform, которое, когда оно включено, предотвращает влияние ширины обводки на значения масштаба объекта.

obj.set('strokeUniform', true);
...