4

假设我有一个包含 6 个对象的画布和一个画布外的按钮。

当我单击此按钮时,其中 3 个对象将成为一个组并被选中,对象将保持其相对于画布的位置。

那可能吗?

我尝试了很多东西,但可以设法让它工作。我正在寻找的解决方案如下所示。

var objectList=[1,2,3];    
var newgroup = new fabric.Group();

$.each(objectList, function (i) {
    var obj = canvas.item(i);
    newgroup.add(obj.clone());
    canvas.remove(obj);
});

canvas.add(newgroup)
canvas.setActiveGroup(newgroup);
canvas.renderAll();
4

3 回答 3

8

你可以使用类似的东西:

(function() {
  var objectList = [1,2,3],
      group = new fabric.Group();

  canvas.forEachObject(function(o, i) {
    if (objectList.indexOf(i) > -1) {
      group.addWithUpdate(o);
      canvas.remove(o);
    }
  });
  canvas.setActiveObject(group);
  canvas.add(group);
})();

仅将索引 1、2 或 3 处的对象添加到组中。

于 2013-10-28T12:11:25.170 回答
1

之后为我重新绘制与它们的连接时,将选定的项目添加为组会产生奇怪的结果。fabic 的 ActiveSelection 是现在以编程方式将选择组添加到画布的预期组对象(2013 年可能不存在)

这是我的片段,它也适用于以下移动事件,它基于两个属性“issueType”和“clusterIndex”选择项目:

let allObjects = CANVAS.getObjects();
let selectedObjects = [];
for(let i=0;i < allObjects.length;i++){
    let object = allObjects[i];
    if(object.issueType && object.clusterIndex === clusterIndex){
        selectedObjects.push(object);
        }
    }
let selectionGroup = new fabric.ActiveSelection(selectedObjects);
CANVAS.add(selectionGroup);
CANVAS.setActiveObject(selectionGroup);
于 2018-05-25T10:29:26.500 回答
0
var objectList = [1,2,3],
group = new fabric.Group(objectList);

上面的代码应该对你有用,它无论如何都会对对象 1、2、3 进行分组

您所要做的就是摆脱原始对象并将克隆分组

于 2014-06-26T11:05:09.767 回答