UNPKG

zrender

Version:

A lightweight graphic library providing 2d draw for Apache ECharts

44 lines (39 loc) 1.32 kB
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(); } }