2014-10-11 55 views
0

我試圖識別每個圖形。識別織物中的每個繪製路徑JS

例如後,我畫的對象我想要的對象有分寸名稱=「我的圖紙1」,所以我可以很容易地通過

canvas.getObjectByName('My Drawing Name'); 

getObjectByName功能是指它以後

fabric.Canvas.prototype.getItemByName = function(name) { 
    var object = null, objects = this.getObjects(); 

    for (var i = 0, len = this.size(); i < len; i++) { 
     if (objects[i].name && objects[i].name === name) { 
      object = objects[i]; 
      break; 
     } 
    } 

    return object; 
}; 

該激活繪圖功能的代碼:

  canvas.isDrawingMode = true; 

     var img = $("#patternImg")[0]; 

     var texturePatternBrush = new fabric.PatternBrush(canvas); 
     texturePatternBrush.source = img; 
     texturePatternBrush.selectable = true; 
     texturePatternBrush.name = img.getAttribute("data-name"); 

     canvas.freeDrawingBrush = texturePatternBrush; 
     canvas.freeDrawingBrush.width = img.getAttribute("data-height"); 

使用代碼以上我可以檢查我

fabric.Canvas.prototype.getDrawByName = function(name) { 
    var object = null, objects = this.getObjects(); 

    for (var i = 0, len = this.size(); i < len; i++) { 
     if (objects[i].canvas.freeDrawingBrush.name && objects[i].canvas.freeDrawingBrush.name === name) { 
      object = objects[i]; 
      break; 
     } 
    } 

    return object; 
}; 

的問題是每一個我畫的是另外一個名字canvas.FreeDrawingBrush.name將是對我的畫布的每個對象相同的對象時:如果存在圖紙F能夠驗證。

我對FabricJS並不是很熟悉,我甚至不知道我想要做什麼甚至是可能的。至少我讓自己清楚了自己想做什麼?

回答

0

當訪問fabric.Objectcanvas屬性時,您只需獲取該對象所呈現的fabric.Canvas元素的引用。此fabric.Canvas元素的freeDrawingBrush屬性將始終是當前的免費繪圖筆刷。

取而代之,當它完成繪製時,我會將這個name屬性設置到每個單獨的對象上。 (這可能是當您退出繪圖模式時,或者可能在您切換到另一個畫筆之前)使用fabric.Object.set方法。

這樣做,您不以任何方式依賴對象的canvas屬性。