fix path split

This commit is contained in:
kekee000
2015-03-11 22:07:43 +08:00
parent 077c911cca
commit 8282ccbd64
3 changed files with 27 additions and 3 deletions

View File

@@ -15,6 +15,7 @@ define(
var Clipper = require('./join/Clipper');
var Relation = require('./join/relation');
var pathUtil = require('./pathUtil');
var reducePath = require('./reducePath');
var interpolate = pathUtil.interpolate;
var deInterpolate = pathUtil.deInterpolate;
@@ -82,6 +83,8 @@ define(
paths = segment2Bezier(paths, bezierHash);
return paths.map(function (path) {
// 有些情况下分割节点处会出现线段重叠的情况,这里需要去除重叠线段
path = reducePath(path);
return deInterpolate(path);
});
}

View File

@@ -34,7 +34,7 @@ define(
var l = paths.length;
var leftSide = [];
var rightSide = [];
var leftPaths = [];
for (; i < l; i++) {
var path = interpolate(paths[i]);
var result = getSegmentPathJoint(path, p0, p1);
@@ -59,11 +59,14 @@ define(
}
});
}
else {
leftPaths.push(paths[i]);
}
}
// TODO 组合左右两侧的曲线段
var result = pathJoin(leftSide, relation.join).concat(pathJoin(rightSide, relation.join));
result = leftPaths.concat(result);
return result.map(function (path) {
return deInterpolate(path);
});

View File

@@ -136,12 +136,30 @@ define(
return ret;
}
/**
* 对path进行双向链表连接
* @param {Array} path 轮廓数组
* @return {Array} path
*/
function makeLink(path) {
for (var i = 0, l = path.length; i < l; i++) {
var cur = path[i];
var prev = i === 0 ? path[l - 1] : path[i - 1];
var next = i === l - 1 ? path[0] : path[i + 1];
cur.next = next;
cur.prev = prev;
}
return path;
}
return {
interpolate: interpolate,
deInterpolate: deInterpolate,
isClockWise: isClockWise,
removeOverlapPoints: removeOverlapPoints,
getPathHash: getPathHash
getPathHash: getPathHash,
makeLink: makeLink
};
}
);