2017-07-07 100 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

一個恥辱,我不能標記這是缺乏我的聲譽的正確答案... –