Take matrices into account in PathItem#getIntersections()

This commit is contained in:
Jürg Lehni 2013-12-08 22:00:40 +01:00
parent 516b9d040f
commit 8cec512cc2
2 changed files with 21 additions and 12 deletions

View file

@ -248,8 +248,8 @@ var Curve = Base.extend(/** @lends Curve# */{
this.getPoint2().setSelected(selected); this.getPoint2().setSelected(selected);
}, },
getValues: function() { getValues: function(matrix) {
return Curve.getValues(this._segment1, this._segment2); return Curve.getValues(this._segment1, this._segment2, matrix);
}, },
getPoints: function() { getPoints: function() {
@ -446,17 +446,20 @@ var Curve = Base.extend(/** @lends Curve# */{
// Mess with indentation in order to get more line-space below... // Mess with indentation in order to get more line-space below...
statics: { statics: {
getValues: function(segment1, segment2) { getValues: function(segment1, segment2, matrix) {
var p1 = segment1._point, var p1 = segment1._point,
h1 = segment1._handleOut, h1 = segment1._handleOut,
h2 = segment2._handleIn, h2 = segment2._handleIn,
p2 = segment2._point; p2 = segment2._point,
return [ values = [
p1._x, p1._y, p1._x, p1._y,
p1._x + h1._x, p1._y + h1._y, p1._x + h1._x, p1._y + h1._y,
p2._x + h2._x, p2._y + h2._y, p2._x + h2._x, p2._y + h2._y,
p2._x, p2._y p2._x, p2._y
]; ];
if (matrix)
matrix._transformCoordinates(values, 0, values, 0, 6);
return values;
}, },
evaluate: function(v, t, type) { evaluate: function(v, t, type) {

View file

@ -67,13 +67,19 @@ var PathItem = Item.extend(/** @lends PathItem# */{
var locations = [], var locations = [],
curves1 = this.getCurves(), curves1 = this.getCurves(),
curves2 = path.getCurves(), curves2 = path.getCurves(),
matrix1 = this._matrix,
matrix2 = path._matrix,
length2 = curves2.length, length2 = curves2.length,
values2 = []; values2 = [];
if (matrix1.isIdentity())
matrix1 = null;
if (matrix2.isIdentity())
matrix2 = null;
for (var i = 0; i < length2; i++) for (var i = 0; i < length2; i++)
values2[i] = curves2[i].getValues(); values2[i] = curves2[i].getValues(matrix2);
for (var i = 0, l = curves1.length; i < l; i++) { for (var i = 0, l = curves1.length; i < l; i++) {
var curve1 = curves1[i], var curve1 = curves1[i],
values1 = curve1.getValues(); values1 = curve1.getValues(matrix1);
for (var j = 0; j < length2; j++) for (var j = 0; j < length2; j++)
Curve.getIntersections(values1, values2[j], curve1, curves2[j], Curve.getIntersections(values1, values2[j], curve1, curves2[j],
locations); locations);