Blame view

node_modules/zrender/src/graphic/helper/poly.ts 1.29 KB
bd028579   易尊强   2/28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
  
  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();
      }
  }