Paper.js Изменить размер растра/текст/путь путем перетаскивания

Я знаю, что могу scale Raster объект Paper.js, а также TextItem и Path.

Однако я бы хотел сделать это, перетаскивая строки выделения или ограничивающие рамки Raster, TextItem или Path, как и при изменении размера изображения в программе, например Word. Эти границы образуют объект Rectangle. Могу ли я подключиться к этому, возможно, используя метод fitBounds? Или более широко, как я могу захватить событие перетаскивания мышью на линии выделения растра, TextItem или Path? Полагаю, как только я смогу сделать это, я могу использовать метод scale для увеличения и сжатия объекта.

Здесь Paper.js sketch, чтобы вы начали и экспериментировали, заимствованы у @Christoph. См. Также документацию для Paper.js.

Ответы

Ответ 1

Построение фактической реализации было бы надоедливым, но вот POC https://jsfiddle.net/f8h3j7v4/

c.addEventListener('mousedown',function(e){//c = context, check the fiddle
//Calculate the position of the edges, currently hardcoded values for fiddle
//For example getPosition(c).y + y * scaleY
//I should mention that rotate starts at the top left corner; 
//the whole canvas gets rotated(+transform exists)
//There is actually a pretty clever way to handle rotation;
//rotate the mouse position
if(e.clientY > 15 && e.clientY < 25)
    dragNorth = true
else
    dragNorth = false
if(e.clientX > 15 && e.clientX < 25)
    dragWest = true
else
    dragWest = false
if(e.clientX > 165 && e.clientX < 175)
    dragEast = true
else
    dragEast = false
if(e.clientY > 165 && e.clientY < 175)
    dragSouth = true
else
    dragSouth = false
})

function getPosition(element) {
var xPosition = 0;
var yPosition = 0;

while(element) {
    xPosition += (element.offsetLeft - element.scrollLeft + element.clientLeft);
    yPosition += (element.offsetTop - element.scrollTop + element.clientTop);
    element = element.offsetParent;
}
return { x: xPosition, y: yPosition };
}
//Thanks to  
//http://www.kirupa.com/html5/get_element_position_using_javascript.htm

Просто выделите положение холста, а затем перетащите его:)