2014-03-28 66 views
-1

我與Paper.js工作,我試圖建立「選擇 - 通過交叉點」Paper.js忽略圖像選擇

在闡述我的意思是,用戶繪製選擇矩形以及其輪廓相交的項目或者選擇矩形中的任意點都被選中。

現在一切都很好,路的項目,但光柵圖像帶來的問題:

是他們的一種方法要麼忽略在選擇光柵圖像或使其以某種方式與光柵工作(如果是的,我會欣賞一個簡單的答案,否則我將無法實現它,業餘和所有)。

隨着我當前的代碼Chrome的回報:遺漏的類型錯誤:無法讀取的不確定

財產「長度」這是迄今爲止代碼:

// Returns path points which are contained in the rect. 
function getSegmentsInRect(rect) { 
    var segments = []; 

    function checkPathItem(item) { 
     if (item._locked || !item._visible || item._guide) 
      return; 
     var children = item.children; 
     if (!rect.intersects(item.bounds)) 
      return; 
     if (item instanceof paper.Path) { 
      for (var i = 0; i < item.segments.length; i++) { 
       if (rect.contains(item.segments[i].point)) 
        segments.push(item.segments[i]); 
      } 
     } else { 
      for (var j = children.length-1; j >= 0; j--) 
       checkPathItem(children[j]); 
     } 
    } 

    for (var i = paper.project.layers.length - 1; i >= 0; i--) { 
     checkPathItem(paper.project.layers[i]); 
    } 

    return segments; 
} 

// Returns all items intersecting the rect. 
// Note: only the item outlines are tested. 
function getPathsIntersectingRect(rect) { 
    var paths = []; 
    var boundingRect = new paper.Path.Rectangle(rect); 

    function checkPathItem(item) { 
     var children = item.children; 
     if (item.equals(boundingRect)) 
      return; 
     if (!rect.intersects(item.bounds)) 
      return; 
     if (item instanceof paper.PathItem) { 
      if (rect.contains(item.bounds)) { 
       paths.push(item); 
       return; 
      } 
      var isects = boundingRect.getIntersections(item); 
      if (isects.length > 0) 
       paths.push(item); 
     } else { 
      for (var j = children.length-1; j >= 0; j--) 
       checkPathItem(children[j]); 
     } 
    } 

    for (var i = 0, l = paper.project.layers.length; i < l; i++) { 
     var layer = paper.project.layers[i]; 
     checkPathItem(layer); 
    } 

    boundingRect.remove(); 

    return paths; 
} 

// Returns bounding box of all selected items. 
function getSelectionBounds() { 
    var bounds = null; 
    var selected = paper.project.selectedItems; 
    for (var i = 0; i < selected.length; i++) { 
     if (bounds == null) 
      bounds = selected[i].bounds.clone(); 
     else 
      bounds = bounds.unite(selected[i].bounds); 

這就是我如何定義我的光柵

function placeImage() { 

    var raster = new paper.Raster('mona'); 
    raster.addChild; 
    raster.position = paper.view.center; 
    raster.selected = true; 
    raster.index = 0; 

} 

回答

1

我們可以使用item.type來檢查與選擇矩形相交的項目是否爲''柵格'

我加了一個額外的IF陳述就是這樣。

IF(item.type === "Raster"){ 
return; 
} 

這種方式,有型光柵的項目將被忽略。

但是,如果有一個簡單的辦法有一個光柵選擇矩形這將是一個更好的答案都被選擇,但我建議的解決方案解決了這個問題。

更新:Paper.js v0.9.17使用className而不是type來標識項目的類型。

因此上述變化的功能這樣的:

IF(item.className === "Raster"){ 
    return; 
    }