#javascript #canvas #fabricjs
#javascript #холст #fabricjs
Вопрос:
Создать прямоугольник в FabricJs просто, используя top
, left
, width
и height
значения.
После перемещения, масштабирования и поворота прямоугольника вокруг, можно получить окончательную координату прямоугольника, используя aCoords
объект, возвращая bl
, br
, tl
, tr
координаты x и y четырех ребер прямоугольников.
Как можно воссоздать тот же прямоугольник, используя только эти четыре координаты, которые также включают вращение и масштабирование?
Я смог воссоздать прямоугольник только после его перемещения и масштабирования, но не с поворотами.
Это изображение выше является скриншотом следующего jsFiddle: https://jsfiddle.net/7neukojd/32 /
Как вы можете видеть, левая сторона — это исходный прямоугольник (синий), который был масштабирован, перемещен и повернут. Прямоугольник с правой стороны (красный) — это я, пытаюсь скопировать его, используя только bl
координаты , br
, tl
и tr
.
Ответ №1:
Благодаря asturur эта проблема была решена с помощью следующего кода
let rectObj = canvas1.getObjects()[0];
const tl = rectObj.aCoords.tl;
const tr = rectObj.aCoords.tr;
const bl = rectObj.aCoords.bl;
let rectCopy = new fabric.Rect({
left: rectObj.aCoords.tl.x,
top: rectObj.aCoords.tl.y,
width: (new fabric.Point(tl.x, tl.y).distanceFrom(tr)),
height: (new fabric.Point(tl.x, tl.y).distanceFrom(bl)),
angle: fabric.util.radiansToDegrees(Math.atan2(tr.y - tl.y, tr.x - tl.x)),
fill: "red",
})
Источник: https://github.com/fabricjs/fabric.js/discussions/6834#discussioncomment-314599