Javascript Fabric JS如何在选定对象的边界框上设置边界半径

Javascript Fabric JS如何在选定对象的边界框上设置边界半径,javascript,fabricjs,Javascript,Fabricjs,是否可以更改选定项目边界框的边界半径?我已经阅读了对象可能属性的文档,但没有找到任何指定对象边界框边界半径变化的内容。是否有可能通过CSS解决这一问题?这里有一个替代fabric.Object.prototype.drawBorders方法,用于处理选择边界的绘制。我已将其扩展为使用属性selectionRadius来确定要在选择框中使用的边界半径量 var canvas=newfabric.canvas(“canvas”); canvas.add(new fabric.Rect({ 宽度:

是否可以更改选定项目边界框的边界半径?我已经阅读了对象可能属性的文档,但没有找到任何指定对象边界框边界半径变化的内容。是否有可能通过CSS解决这一问题?

这里有一个替代
fabric.Object.prototype.drawBorders
方法,用于处理选择边界的绘制。我已将其扩展为使用属性
selectionRadius
来确定要在选择框中使用的边界半径量

var canvas=newfabric.canvas(“canvas”);
canvas.add(new fabric.Rect({
宽度:150,
身高:100,
左:25,
前25名,
填充:“浅绿色”,
冲程宽度:0,
填充:20,
选择半径:20,
边框颜色:“红色”
}));
fabric.Object.prototype.drawBorders=函数(ctx,styleOverride){
styleOverride=styleOverride |{};
var wh=此值。\u calculateCurrentDimensions(),
strokeWidth=this.borderScaleFactor,
宽度=wh.x+冲程宽度,
高度=wh.y+冲程宽度,
hasControls=typeof styleOverride.hasControls!==“未定义”?
styleOverride.hasControls:this.hasControls,
shouldStroke=false;
ctx.save();
ctx.strokeStyle=styleOverride.borderColor | | this.borderColor;
this._setLineDash(ctx,styleOverride.borderDashArray | | this.borderDashArray,null);
//使用圆角启动自定义绘制方法
var rx=this.selectionRadius?Math.min(this.selectionRadius,width/2):0,
ry=this.selectionRadius?Math.min(this.selectionRadius,height/2):0,
w=宽度,
h=高度,
x=-width/2,
y=-高度/2,
isRounded=rx!==0 | | ry!==0,
/*圆弧bezier逼近的“幻数”*/
k=1-0.5522847498;
ctx.beginPath();
ctx.移动到(x+rx,y);
ctx.lineTo(x+w-rx,y);
isRounded&ctx.bezierCurveTo(x+w-k*rx,y,x+w,y+k*ry,x+w,y+ry);
ctx.lineTo(x+w,y+h-ry);
isRounded&ctx.bezierCurveTo(x+w,y+h-k*ry,x+w-k*rx,y+h,x+w-rx,y+h);
ctx.lineTo(x+rx,y+h);
isRounded&ctx.bezierCurveTo(x+k*rx,y+h,x,y+h-k*ry,x,y+h-ry);
ctx.lineTo(x,y+ry);
isround&ctx.bezierCurveTo(x,y+k*ry,x+k*rx,y,x+rx,y);
ctx.closePath();
ctx.stroke();
//使用圆角结束自定义绘制方法
如果(控制){
ctx.beginPath();
此.forEachControl(函数(控件、键、FabriObject){
//此时,ctx以对象为中心。
//上述函数的宽度和高度是bbox的大小。
if(control.withConnection&&control.getVisibility(FabriObject,键)){
//重置每个控件的移动
shouldStroke=true;
ctx.moveTo(控制x*宽度,控制y*高度);
ctx.lineTo(
control.x*宽度+control.offsetX,
control.y*高度+control.offsetY
);
}
});
if(shoulldstroke){
ctx.stroke();
}
}
ctx.restore();
归还这个;
};

嘿,梅尔基亚,谢谢你的回答,我明天会检查它是否有效。