@antv/path-util
Version:
A common util collection for antv projects
40 lines (37 loc) • 1.45 kB
text/typescript
import { arcToCubic } from './arc-2-cubic';
import { quadToCubic } from './quad-2-cubic';
import { lineToCubic } from './line-2-cubic';
import type { PathCommand, ProcessParams } from '../types';
export function segmentToCubic(segment: PathCommand, params: ProcessParams): PathCommand {
if ('TQ'.indexOf(segment[0]) < 0) {
params.qx = null;
params.qy = null;
}
const [s1, s2] = segment.slice(1);
switch (segment[0]) {
case 'M':
params.x = s1 as number;
params.y = s2 as number;
return segment;
case 'A':
return ['C'].concat(arcToCubic.apply(0, [params.x1, params.y1].concat(segment.slice(1) as number[]))) as PathCommand;
case 'Q':
params.qx = s1 as number;
params.qy = s2 as number;
return ['C'].concat(quadToCubic.apply(0, [params.x1, params.y1].concat(segment.slice(1) as number[]))) as PathCommand;
case 'L':
// @ts-ignore
return ['C'].concat(lineToCubic(params.x1, params.y1, segment[1], segment[2])) as PathCommand;
case 'H':
// @ts-ignore
return ['C'].concat(lineToCubic(params.x1, params.y1, segment[1], params.y1)) as PathCommand;
case 'V':
// @ts-ignore
return ['C'].concat(lineToCubic(params.x1, params.y1, params.x1, segment[1])) as PathCommand;
case 'Z':
// @ts-ignore
return ['C'].concat(lineToCubic(params.x1, params.y1, params.x, params.y)) as PathCommand;
default:
}
return segment;
}