How to resize retangle in group

22 Views Asked by At

So I have a group consisting of rectangles and lines, when I click the editverticalrectangleonly() button the size can only be edited, but why can't it? Rectangles cannot be edited in size

function addRedGroup() {
    var rect = new fabric.Rect({
        left: 100,
        top: 50,
        fill: "red",
        width: 20,
        height: 50,
        objectCaching: false,
        stroke: "red",
        strokeWidth: 4,
        lockMovementY: true,
        lockScalingX: false, // Allow horizontal scaling
        lockScalingY: false,
        hasControls: true
    });

    var line = new fabric.Line([100, 0, 100, 100], {
        stroke: "red",
        strokeWidth: 4,
        originX: "center",
        originY: "center",
        lockMovementY: true,
        hasControls: true
    });

    var group = new fabric.Group([rect, line], {
        left: 120,
        top: 94,
        lockMovementY: true
    });
    canvas.add(group);
    canvas.setActiveObject(group);

    let centerPoint = line.getCenterPoint()
    rect.setPositionByOrigin(centerPoint, 'center', 'center')

    canvas.on('object:moving', function(options) {
        var target = options.target;
        if (target === group) {
            var leftStep = Math.round(target.left / 40) * 40;
            target.set({
                left: leftStep
            });
        }
    });
}
function editVerticalRectangleOnly() {
    var activeObject = canvas.getActiveObject();

    // Edit only the rectangle in the active group
    var rect = null;
    if (activeObject && activeObject.type === 'group') {
        rect = activeObject.getObjects().find(obj => obj.type === 'rect');
    }

    if (rect) {
        rect.set({
            selectable: true, // Enable selection
            evented: true, // Enable events
            lockMovementY: false, // Allow vertical resizing
            lockMovementX: true,
            hasControls: true, // Show resizing controls
            hasBorders: true, // Show borders
            cornerStyle: 'circle', // Set corner style
            lockScalingX: false, // Allow horizontal scaling
            lockScalingY: false, // Allow vertical scaling
        });

        // Setelah ungroup, atur kembali lockScalingX dan lockScalingY ke false
        canvas.on('after:render', function() {
            rect.set({
                lockScalingX: false,
                lockScalingY: false,
            });
            canvas.off('after:render');
        });

        canvas.setActiveObject(rect);
        canvas.renderAll();
    }

    // Allow deleting and duplicating the rectangle
    canvas.forEachObject(obj => {
        if (obj.type !== 'rect') {
            obj.selectable = true;
            obj.evented = true;
        }
    });
}

addRedGroup () is a function to create a group, editVerticalRectangleOnly() is a function to edit a rectangle in a group

0

There are 0 best solutions below