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