Я пытаюсь играть с fabric.Line()
в fabricJS, так что, когда пользователь начинает рисовать линию, он привязывается к одному из восьми углов под углом 45 градусов от начальной точки. Это было бы похоже на сдерживание сдвига при использовании продукта Adobe. Возможно ли это с помощью ткани?Snap fabric.Line до 45 градусов угол
ответ
Вы должны проверить угол, который вы строите во время перемещения мыши , и приблизить его к линии 45 градусов.
var canvas = new fabric.Canvas('c', {
selection: false
});
var line, isDown, points;
canvas.on('mouse:down', function(o) {
isDown = true;
var pointer = canvas.getPointer(o.e);
points = [pointer.x, pointer.y, pointer.x, pointer.y];
line = new fabric.Line(points, {
strokeWidth: 2,
fill: 'red',
stroke: 'red',
originX: 'left',
originY: 'center'
});
canvas.add(line);
});
canvas.on('mouse:move', function(o) {
if (!isDown) return;
var pointer = canvas.getPointer(o.e);
var startX = points[0];
var startY = points[1];
var x2 = pointer.x - startX;
var y2 = pointer.y - startY;
var r = Math.sqrt(x2*x2 + y2*y2);
var angle = (Math.atan2(y2, x2)/Math.PI * 180);
angle = (angle) % 360 + 180;
if (angle <= 22.5 || angle >= 337.5) {
angle = 0;
} else if (angle <= 67.5) {
angle = 45;
} else if (angle <= 112.5) {
angle = 90;
} else if (angle <= 157.5) {
angle = 135
} else if (angle <= 202.5) {
angle = 180
} else if (angle <= 247.5) {
angle = 225
} else if (angle <= 292.5) {
angle = 270
} else if (angle < 337.5) {
angle = 315
}
angle -= 180;
var cosx = r * Math.cos(angle * Math.PI/180);
var sinx = r * Math.sin(angle * Math.PI/180);
line.set({
x2: cosx + startX,
y2: sinx + startY
});
canvas.renderAll();
});
canvas.on('mouse:up', function(o) {
isDown = false;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.5.0/fabric.min.js"></script>
<canvas id="c" width="500" height="500"></canvas>
Это прекрасно, спасибо –
'angle = parseInt (((угол + 22,4)% 360)/45) * 45 сокращает цикл if-then-elseif. –
Хорошо, мы знаем, что начинаются строки X1 и Y1, а также конечные точки X2 и Y2. Мы знаем также, что знаете 45 градусов.
Итак, мы применим некоторую математику для получения результата.
в точке X1 и Y1 остается там, а точки X2 и Y2 хотят перемещаться с углом 45 градусов.
X2 = Math.cos(angle * Math.PI/180) * distence + startX Y2 = Math.sin(angle * Math.PI/180) * distence + startY
tanks for this
здесь
startX = x1
startY = y1
angle=45
distence = current.mouse.x-x1
Таким образом, мы можем получить x2, y2 с углом 45 градусов
позволяет попробовать это на fabricjs
var canvas = new fabric.Canvas('c', {
selection: false
});
var line, isDown, points;
canvas.on('mouse:down', function(o) {
isDown = true;
var pointer = canvas.getPointer(o.e);
points = [pointer.x, pointer.y, pointer.x, pointer.y];
line = new fabric.Line(points, {
strokeWidth: 2,
fill: 'red',
stroke: 'red',
originX: 'left',
originY: 'center'
});
canvas.add(line);
});
canvas.on('mouse:move', function(o) {
if (!isDown) return;
var pointer = canvas.getPointer(o.e);
var startX = points[0];
var startY = points[1];
var distence = pointer.x - points[0];
var angle = -45
x2 = Math.round(Math.cos(angle * Math.PI/180) * distence + startX);
y2 = Math.round(Math.sin(angle * Math.PI/180) * distence + startY);
console.log("x2 >>> " + x2 + " y2 >>>>> " + y2)
line.set({
x2: x2,
y2: y2
});
canvas.renderAll();
});
canvas.on('mouse:up', function(o) {
isDown = false;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.5.0/fabric.min.js"></script>
<canvas id="c" width="300" height="200"></canvas>
- 1. Ограничение рисунка линии до 45 градусов углов
- 2. Почему линия 45 градусов?
- 3. 45 градусов угол + Box Shadow - не используя ничего, кроме CSS
- 4. 45 градусов угол раскол цвет фона для сайта
- 5. 45 Угол градуса на divs
- 6. 45 градусов Google map
- 7. Повернуть изображение -45 градусов
- 8. Каков самый чистый способ округления значения до ближайших 45 градусов?
- 9. Радиан 90 градусов на 45
- 10. Перемещение в направлении 45 градусов
- 11. Угол в 360 градусов
- 12. sdl движение в 45 градусов
- 13. Поворот статического текста 45 градусов
- 14. 2x2 матрица вращения (45 градусов)
- 15. CATransform3DMakeRotation анимирует нулевой (от -45 до +45)?
- 16. Построение линии с уклоном 45 градусов
- 17. Вращайте кнопки JQuery до -45 градусов без пробела
- 18. 45 Угол угла Python Tkinter Canvas
- 19. Поворот BarButtonItem на 45 градусов (анимированные)
- 20. Вращающаяся 2D-матрица для 45 градусов
- 21. Вращение 2D-массива на 45 градусов
- 22. 45 градусов линия функции Plot в R
- 23. Как повернуть UIView на 45 градусов?
- 24. CGContext рисовать 45 градусов линии совместного
- 25. Quaternion вращения ось х 45 градусов
- 26. python: как повернуть линию 45 градусов
- 27. Как повернуть растровое изображение 45 градусов
- 28. Pygame: Пули не стреляют выше 45 градусов
- 29. Игра на основе 2D 2D-плитки, повернутая на 45 градусов?
- 30. j2me - Поверните массив из 2d точек с шагом 45 градусов
возможно Fabric 'angle' расслоение плотной свойство будет полезно для этого –
@sharmask Я пытался играть со свойством угол, но не повезло –
На самом деле, какого рода вывод вы хотите? .. я не» я получаю это ясно. Когда пользователь начинает рисовать линию или когда пользователь поворачивает линию? –