javascript javascript-events resize mouseevent paperjs

javascript - Paper.js Resize Raster/TextItem/Path arrastrando



javascript-events mouseevent (1)

Soy consciente de que puedo scale un objeto Raster en Paper.js , así como un elemento TextItem y una Path .

Sin embargo, me gustaría hacer esto al arrastrar las líneas de selección o el cuadro delimitador de un Raster , TextItem o Path , tal como lo haría al cambiar el tamaño de una imagen en un programa como Word. Estos límites forman un objeto Rectangle . ¿Puedo conectarme a esto, tal vez usando el método fitBounds ? O más ampliamente, ¿cómo puedo capturar un evento de arrastre del mouse en las líneas de selección de un Raster, TextItem o Path? Supongo que una vez que pueda hacer eso, puedo usar el método de scale para aumentar / reducir el objeto.

Aquí hay un sketch Paper.js para comenzar y para la experimentación, tomado de @Christoph. Consulte también la documentation para Paper.js.


Construir la implementación real sería una molestia, pero aquí hay un 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

Solo calcule la posición del lienzo y luego arrastre :)