|   | 
| 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(); | 
|     } | 
| } |