मैं पाया है क्या एक और भी बेहतर समाधान की तरह लगता है, एसवीजी पथ के साथ वास्तव में अच्छी तरह से काम करता है।
आप कपड़े के _renderStroke
विधि को ओवरराइड कर सकते हैं और नीचे दिखाए गए ctx.stroke();
से पहले ctx.scale(1/this.scaleX, 1/this.scaleY);
जोड़ सकते हैं।
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 के साथ कोई अच्छा तरीका नहीं पता है। अपना आकार एक ही रास्ता बनें। एक कपड़े बनाएं। पैथ() और फिर स्ट्रोक को उस पथ ऑब्जेक्ट में जोड़ें। – StefanHayden
क्षमा करें, यह मेरी गलती थी। आपका समाधान काम करना चाहिए! – trongd