Я обнаружил, что чувствует себя еще лучшее решение, работает очень хорошо с SVG пути.
Вы можете переопределить метод fabricjs '_renderStroke
и добавить ctx.scale(1/this.scaleX, 1/this.scaleY);
до ctx.stroke();
, как показано ниже.
fabric.Object.prototype._renderStroke = function(ctx) {
if (!this.stroke || this.strokeWidth === 0) {
return;
}
if (this.shadow && !this.shadow.affectStroke) {
this._removeShadow(ctx);
}
ctx.save();
ctx.scale(1/this.scaleX, 1/this.scaleY);
this._setLineDash(ctx, this.strokeDashArray, this._renderDashedStroke);
this._applyPatternGradientTransform(ctx, this.stroke);
ctx.stroke();
ctx.restore();
};
Вам также может понадобиться переопределить fabric.Object.prototype._getTransformedDimensions
, чтобы настроить рамку для учета разницы в размерах.
Также более полная реализация, вероятно, добавит свойство объекта ткани для условного управления этим изменением для обоих переопределенных методов.
Вы пытались импортировать svg. Я знаю, что он работает с этой встроенной формой, но не импортирован svg. – trongd
Я не знаю никакого хорошего способа с любым произвольным svg. Получите форму, чтобы быть единственным путем. создайте файл fabric.Path(), а затем добавьте штрих к этому объекту пути. – StefanHayden
Извините, это была моя ошибка. Ваше решение должно работать! – trongd