mirror of
https://github.com/scratchfoundation/paper.js.git
synced 2025-01-07 13:22:07 -05:00
Find a more general implementation for Item#intersects(item).
This commit is contained in:
parent
5ddbc5b07f
commit
782bde238c
2 changed files with 22 additions and 21 deletions
|
@ -1635,6 +1635,19 @@ var Item = Base.extend(Emitter, /** @lends Item# */{
|
||||||
return Rectangle.read(arguments).contains(this.getBounds());
|
return Rectangle.read(arguments).contains(this.getBounds());
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Internal helper function, used at the moment for intersects check only.
|
||||||
|
// TODO: Move #getIntersections() to Item, make it handle all type of items
|
||||||
|
// through _asPathItem(), and support Group items as well, taking nested
|
||||||
|
// matrices into account properly!
|
||||||
|
_asPathItem: function() {
|
||||||
|
// Creates a temporary rectangular path item with this item's bounds.
|
||||||
|
return new Path.Rectangle({
|
||||||
|
rectangle: this.getInternalBounds(),
|
||||||
|
matrix: this._matrix,
|
||||||
|
insert: false,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
// DOCS:
|
// DOCS:
|
||||||
// TEST:
|
// TEST:
|
||||||
/**
|
/**
|
||||||
|
@ -1644,14 +1657,13 @@ var Item = Base.extend(Emitter, /** @lends Item# */{
|
||||||
intersects: function(item, _matrix) {
|
intersects: function(item, _matrix) {
|
||||||
if (!(item instanceof Item))
|
if (!(item instanceof Item))
|
||||||
return false;
|
return false;
|
||||||
// Create a temporary rectangular path item with this item's bounds, and
|
// TODO: Optimize getIntersections(): We don't need all intersections
|
||||||
// delegate the call to it.
|
// when we're just curious about whether they intersect or not. Pass on
|
||||||
return new Path.Rectangle({
|
// an argument that let's it bail out after the first intersection.
|
||||||
rectangle: this.getInternalBounds(),
|
return this._asPathItem().getIntersections(item._asPathItem(),
|
||||||
matrix: this._matrix,
|
_matrix || item._matrix).length > 0;
|
||||||
insert: false,
|
|
||||||
}).intersects(item, _matrix);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform a hit test on the item (and its children, if it is a
|
* Perform a hit test on the item (and its children, if it is a
|
||||||
* {@link Group} or {@link Layer}) at the location of the specified point.
|
* {@link Group} or {@link Layer}) at the location of the specified point.
|
||||||
|
|
|
@ -181,20 +181,9 @@ var PathItem = Item.extend(/** @lends PathItem# */{
|
||||||
return locations;
|
return locations;
|
||||||
},
|
},
|
||||||
|
|
||||||
intersects: function(item, _matrix) {
|
_asPathItem: function() {
|
||||||
if (!(item instanceof Item))
|
// See Item#_asPathItem()
|
||||||
return false;
|
return this;
|
||||||
var other = item instanceof PathItem
|
|
||||||
? item
|
|
||||||
// Create a temporary rectangular path item to check against.
|
|
||||||
: new Path.Rectangle({
|
|
||||||
rectangle: item.getInternalBounds(),
|
|
||||||
insert: false
|
|
||||||
});
|
|
||||||
// TODO: Optimize getIntersections(): We don't need all intersections
|
|
||||||
// when we're just curious about whether they intersect or not. Pass on
|
|
||||||
// an argument that let's it bail out after the first intersection.
|
|
||||||
return this.getIntersections(other, _matrix || item._matrix).length > 0;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue