2017-07-07 115 views
0

我在angularJS控制这个功能:Fabric.js组/取消组合 - 单个对象消失,同时取消组合

function group(){ 
    var activegroup = canvas.getActiveGroup(); 
    var objectsInGroup = activegroup.getObjects(); 

    activegroup.clone(function(newgroup) { 
     canvas.discardActiveGroup(); 
     objectsInGroup.forEach(function(object) { 
      canvas.remove(object); 
     }); 
     canvas.add(newgroup); 

    }); 
} 

function ungroup(){ 
    var activeObject = canvas.getActiveObject(); 
    if(activeObject.type=="group"){ 
     var items = activeObject._objects; 
     activeObject._restoreObjectsState(); 
     canvas.remove(activeObject); 
     for(var i = 0; i < items.length; i++) { 
      canvas.add(items[i]); 
      canvas.item(canvas.size()-1).hasControls = true; 
     } 
    } 
     canvas.renderAll(); 
} 

工作几乎是完美的 - 绝对当我取消对对象不渲染(他们仍然在画布,但不可见)。即使它们不可见,我也可以单独选择对象。选择多个对象将在选择时显示它们 - 取消选择一个会让另一个消失。简而言之:取消组合对象不会再显示为单个对象。

这只适用于像,框,圆形,三角形等图元。文字图像不受影响。

帮助表示赞赏!

回答

0
function ungroup(){ 
var activeObject = canvas.getActiveObject(); 
if(activeObject.type=="group"){ 
    var items = activeObject._objects; 
    alert(items); 
    activeObject._restoreObjectsState(); 
    canvas.remove(activeObject); 
    for(var i = 0; i < items.length; i++) { 
     canvas.add(items[i]); 
     items[i].dirty = true; //set object dirty true 
     canvas.item(canvas.size()-1).hasControls = true; 
    } 

    canvas.renderAll(); 
} 
} 

如果您设置对象为真,它将渲染renderAll()调用并再次重绘。

+0

谢谢队友!工作真的很迷人! –

+0

马克,如果它的工作,欢呼:) – Durga

+0

一个耻辱,我不能标记这是缺乏我的声誉的正确答案... –