Flatten path

This commit is contained in:
Patrick Walton 2018-11-16 15:38:41 -08:00
parent bb8aa46c1a
commit 1ef6d8df58
1 changed files with 29 additions and 0 deletions

View File

@ -425,6 +425,7 @@ class Scene {
GLOBAL_TRANSFORM.tx, GLOBAL_TRANSFORM.ty,
]);
path = flattenPath(path);
path = canonicalizePath(path);
const boundingRect = this.boundingRectOfPath(path);
@ -677,6 +678,34 @@ class Program<U extends string, A extends string> {
}
}
class PathSegment {
command: string;
points: Point2D[];
constructor(segment: string[]) {
const points = [];
for (let i = 1; i < segment.length; i += 2)
points.push(new Point2D(parseFloat(segment[i]), parseFloat(segment[i + 1])));
this.points = points;
this.command = segment[0];
}
}
function flattenPath(path: SVGPath): SVGPath {
return path.abs().iterate(segment => {
if (segment[0] === 'Q')
return [['L', segment[1], segment[2]], ['L', segment[3], segment[4]]];
if (segment[0] === 'C') {
return [
['L', segment[1], segment[2]],
['L', segment[3], segment[4]],
['L', segment[5], segment[6]],
];
}
return [segment];
});
}
function canonicalizePath(path: SVGPath): SVGPath {
return path.abs().iterate(segment => {
if (segment[0] === 'H')