Как насчет грубого обходного пути с сгруппированными линиями и кругами?
var canvas = new fabric.Canvas('ctest');
var box = new fabric.Rect({
left: 0,
top: 0,
fill: false,
stroke: "red",
width: 50,
height: 50,
});
var circle = {
fill: 'transparent',
strokeWidth: 1,
stroke: false,
radius: 12,
clipTo: function(ctx) {
ctx.moveTo(0, 0);
ctx.arc(0, 0, 300, 3.14159, 4.71239);
},
};
var circle1 = new fabric.Circle(circle);
var line1 = new fabric.Line([12, 0, 50, 0], {
stroke: "red",
});
var line2 = new fabric.Line([0, 12, 0, 50], {
stroke: "red",
});
var line3 = new fabric.Line([50, 0, 50, 50], {
stroke: "red",
});
var line4 = new fabric.Line([0, 50, 51, 50], {
stroke: "red",
});
var group = new fabric.Group([box, circle1, line1, line2, line3, line4], {
left: 50,
top: 50,
transparentCorners: false,
cornerSize: 10,
});
group.cornerStyle = 'circle';
canvas.add(group);
$("#corner").click(function() {
circle1.set("stroke", "red");
box.set("stroke", false);
canvas.renderAll();
});
canvas.renderAll();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/3.4.0/fabric.js"></script>
<button id="corner">Corner</button>
<canvas id="ctest" width="600" height="600"></canvas>