Ткань JS Arrow Ширина линии / Ширина обводки Проблема при изменении размера - PullRequest
0 голосов
/ 31 октября 2019

Мы рисуем стрелку с шириной обводки 5. Когда мы изменяем размеры стрелки, она увеличивает ширину обводки стрелки. Я использую ткань 2.4.1.

Это также происходит в последней версии.

Запустите фрагмент кода и увеличьте размер стрелки, вы увидите проблему.

var canvas = this.__canvas = new fabric.Canvas('c');
canvas.selection = false;

function drawArrow(fromx, fromy, tox, toy) {

	var angle = Math.atan2(toy - fromy, tox - fromx);

	var headlen = 15;  // arrow head size

	// bring the line end back some to account for arrow head.
	tox = tox - (headlen) * Math.cos(angle);
	toy = toy - (headlen) * Math.sin(angle);

	// calculate the points.
	var points = [
		{
			x: fromx,  // start point
			y: fromy
		}, {
			x: fromx - (headlen / 4) * Math.cos(angle - Math.PI / 2), 
			y: fromy - (headlen / 4) * Math.sin(angle - Math.PI / 2)
		},{
			x: tox - (headlen / 4) * Math.cos(angle - Math.PI / 2), 
			y: toy - (headlen / 4) * Math.sin(angle - Math.PI / 2)
		}, {
			x: tox - (headlen) * Math.cos(angle - Math.PI / 2),
			y: toy - (headlen) * Math.sin(angle - Math.PI / 2)
		},{
			x: tox + (headlen) * Math.cos(angle),  // tip
			y: toy + (headlen) * Math.sin(angle)
		}, {
			x: tox - (headlen) * Math.cos(angle + Math.PI / 2),
			y: toy - (headlen) * Math.sin(angle + Math.PI / 2)
		}, {
			x: tox - (headlen / 4) * Math.cos(angle + Math.PI / 2),
			y: toy - (headlen / 4) * Math.sin(angle + Math.PI / 2)
		}, {
			x: fromx - (headlen / 4) * Math.cos(angle + Math.PI / 2),
			y: fromy - (headlen / 4) * Math.sin(angle + Math.PI / 2)
		},{
			x: fromx,
			y: fromy
		}
	];

	var pline = new fabric.Polyline(points, {
		fill: 'white',
		stroke: 'black',
		opacity: 1,
		strokeWidth: 2,
		originX: 'left',
		originY: 'top',
		selectable: true
	});

	canvas.add(pline);

	canvas.renderAll();

}

//draw an arrow!
drawArrow(100, 100, 150, 150);

// click and drag to draw more arrow!
var startX, startY, endX, endY;

canvas.on('mouse:down', function() {
    var pointer = canvas.getPointer(event.e);
    startX = pointer.x;
    startY = pointer.y;
});
canvas.on('mouse:up', function() {
   	var pointer = canvas.getPointer(event.e);
    endX = pointer.x;
    endY = pointer.y;
    //drawArrow(startX, startY, endX, endY);
});
canvas {
    border: 1px solid #999;
}
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas id="c" width="600" height="600"></canvas>

Я хочу оставить ширину своего хода без изменений.

Пожалуйста, предложите способ, как я могу это сделать?

...