es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Restringir área de dibujo en Fabric JS

Quiero restringir el área de dibujo de un lienzo con un clic de botón. Estoy dibujando un rectángulo con fabric js. Quiero habilitar el modo de dibujo solo en ese rectángulo. Si el mouse se mueve fuera del rectángulo, se detiene el dibujo.

Aquí está mi código de dibujo del rectángulo:

var canvas = new fabric.Canvas(‘canvas’);

var rect = new fabric.Rect({
top: 100,
left: 100,
width: 60,
height: 70,
fill: ‘red’
});

canvas.add(rect);

canvas.on(‘mouse:down’, function (option) {
console.log(option);
if (typeof option.target != “undefined”) {
return;
} else {
var startY = option.e.offsetY,
startX = option.e.offsetX;

    console.log(startX, startY);

    var rect2 = new fabric.Rect({
        top: startY,
        left: startX,
        width: 0,
        height: 0,
        fill: 'transparent',
        stroke: 'red',
        strokewidth: 4
    });

    canvas.add(rect2);

    console.log("added");
    canvas.on('mouse:move', function (option) {
        var e = option.e;
        rect2.set('width', e.offsetX - startX);
        rect2.set('height', e.offsetY - startY);
        rect2.setCoords();
    });
}

});

canvas.on(‘mouse:up’, function () {
canvas.off(‘mouse:move’);
});

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución:

    Puedes utilizar el método isContainedWithinObject de la clase fabric.Point para verificar si el mouse está dentro del objeto rect. Si es así, habilita el modo de dibujo, de lo contrario, desactívalo.

    Aquí hay un ejemplo:

    canvas.on('mouse:move', function (option) {
        var point = new fabric.Point(option.e.offsetX, option.e.offsetY);
        if (rect.isContainedWithinObject(point)) {
            // habilitar modo de dibujo
        } else {
            // desactivar modo de dibujo
        }
    });
    

Comments are closed.