fabricjs:操纵选定对象

fabricjs:操纵选定对象,fabricjs,Fabricjs,我尝试更改画布上所有选定对象的颜色。我发现我可以更改组本身的属性(this.canvas.getActiveGroup().setFill(…))。 由于我想根据所选对象的类型更改不同的属性,因此无法使用此函数。相反,我尝试迭代所有选定对象并对其进行操作 this.canvas.getActiveGroup().getObjects().forEach(obj => { if(obj instanceof fabric.Path) { obj.setStro

我尝试更改画布上所有选定对象的颜色。我发现我可以更改组本身的属性(
this.canvas.getActiveGroup().setFill(…)
)。
由于我想根据所选对象的类型更改不同的属性,因此无法使用此函数。相反,我尝试迭代所有选定对象并对其进行操作

this.canvas.getActiveGroup().getObjects().forEach(obj =>
{
    if(obj instanceof fabric.Path)
    {
        obj.setStroke(color);
    }
    else
    {
        obj.setFill(color);
    }
}); 

this.canvas.renderAll();
颜色将更改,但不幸的是,取消选择对象后,所有样式都将更改回原来的样式。
我认为样式将应用于组,因为再次选择时,所有元素将以正确的颜色显示

当我以前删除activeGroup(
this.canvas.discardActiveGroup()
)时,它会工作,但会带来一些其他问题

顺便说一句:检查器(开发工具)显示正确的颜色。调整特定元素的大小后,它还将更新其颜色

有没有人遇到过类似的问题并知道解决方案

致以最诚挚的问候
丹尼尔演示

var color='black';
函数changeColor(){
var r=getrandom(0,225);
var g=GetRandomArbital(0,225);
VarB=GetRandomArbital(0,225);
颜色='rgb('+r+'、'+g+'、'+b+');
fillColorOb();
}
函数GetRandomArbital(最小值、最大值){
返回Math.floor(Math.random()*(max-min+1))+min;
}
var c=newfabric.Canvas('Canvas');
c、 添加(新织物。圆圈)({
左:50,,
前50名,
半径:50,
原文:“中心”,
原文:'中心',
}))
c、 添加(新织物。圆圈)({
左:50,,
排名:150,
半径:50,
原文:“中心”,
原文:'中心',
}))
c、 添加(新织物。圆圈)({
左:150,
前100名,
半径:50,
原文:“中心”,
原文:'中心',
}))
c、 renderAll();
函数fillColorOb(){
var objs=c.getActiveGroup();
如果(!objs)返回;
forEachObject(函数(obj){
if(结构路径的obj实例){
目标设定行程(颜色);
}否则{
对象设置填充(颜色);
}
c、 renderAll();
});
}
fabric.Group.prototype.\u restoreObjectState=函数(对象){
此.realizeTransform(对象);
setCoords();
object.hasControls=object.\u origHasControls;
删除对象。\u原控件;
set('active',false);
删除object.group;
object.dirty=true;//它将在下一次renderAll()调用时呈现
归还这个;
}

颜色

fabricjs 1.7.9版之前,我一直在测试,这似乎是一个bug检查。非常感谢。肮脏的旗帜做到了。我只需调用
renderAll()
将所有选定对象标记为脏对象,然后再次调用
renderAll()
。@dkirchhof您添加了该函数?