Javascript Paper.js忽略图像选择

Javascript Paper.js忽略图像选择,javascript,paperjs,Javascript,Paperjs,我正在与一起工作,并试图构建“通过交叉点进行选择” 详细说明我的意思是,用户绘制一个选择矩形,并选择其轮廓相交的项目或其在选择矩形内的任何点 现在,路径项一切正常,但光栅图像会带来问题: 是一种在选择中忽略光栅图像或使其以某种方式与光栅一起工作的方法(如果是,我希望得到一个简单的答案,否则我将无法实现它,无论是业余还是所有) 对于我的当前代码,Chrome返回:uncaughtTypeError:无法读取未定义的属性“length” 这是目前为止的代码: // Returns path poin

我正在与一起工作,并试图构建“通过交叉点进行选择”

详细说明我的意思是,用户绘制一个选择矩形,并选择其轮廓相交的项目或其在选择矩形内的任何点

现在,路径项一切正常,但光栅图像会带来问题:

是一种在选择中忽略光栅图像或使其以某种方式与光栅一起工作的方法(如果是,我希望得到一个简单的答案,否则我将无法实现它,无论是业余还是所有)

对于我的当前代码,Chrome返回:uncaughtTypeError:无法读取未定义的属性“length”

这是目前为止的代码:

// 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);

我们可以使用
item.type
检查与选择矩形相交的项目是否为“光栅”

我添加了一个额外的
IF
语句来实现这一点

IF(item.type === "Raster"){
return;
}
这样,具有光栅类型的项目将被忽略

但是,如果有一种简单的方法可以使用选择矩形选择光栅,那么这将是一个更好的答案,尽管我建议的解决方案解决了这个问题

更新:Paper.js v0.9.17使用而不是类型来标识项目的类型。

因此,上述功能更改为:

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