12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- import smoothBezier from './smoothBezier';
- import { VectorArray } from '../../core/vector';
- import PathProxy from '../../core/PathProxy';
- export function buildPath(
- ctx: CanvasRenderingContext2D | PathProxy,
- shape: {
- points: VectorArray[],
- smooth?: number
- smoothConstraint?: VectorArray[]
- },
- closePath: boolean
- ) {
- const smooth = shape.smooth;
- let points = shape.points;
- if (points && points.length >= 2) {
- if (smooth) {
- const controlPoints = smoothBezier(
- points, smooth, closePath, shape.smoothConstraint
- );
- ctx.moveTo(points[0][0], points[0][1]);
- const len = points.length;
- for (let i = 0; i < (closePath ? len : len - 1); i++) {
- const cp1 = controlPoints[i * 2];
- const cp2 = controlPoints[i * 2 + 1];
- const p = points[(i + 1) % len];
- ctx.bezierCurveTo(
- cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]
- );
- }
- }
- else {
- ctx.moveTo(points[0][0], points[0][1]);
- for (let i = 1, l = points.length; i < l; i++) {
- ctx.lineTo(points[i][0], points[i][1]);
- }
- }
- closePath && ctx.closePath();
- }
- }
|