@visactor/vrender-core 0.19.19 → 0.19.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/cjs/common/segment/catmull-rom-close.d.ts +41 -0
  2. package/cjs/common/segment/catmull-rom-close.js +81 -0
  3. package/cjs/common/segment/catmull-rom-close.js.map +1 -0
  4. package/cjs/common/segment/catmull-rom.d.ts +38 -0
  5. package/cjs/common/segment/catmull-rom.js +97 -0
  6. package/cjs/common/segment/catmull-rom.js.map +1 -0
  7. package/cjs/common/segment/index.d.ts +2 -1
  8. package/cjs/common/segment/index.js +8 -1
  9. package/cjs/common/segment/index.js.map +1 -1
  10. package/cjs/graphic/arc.d.ts +1 -1
  11. package/cjs/graphic/arc.js +8 -2
  12. package/cjs/graphic/arc.js.map +1 -1
  13. package/cjs/graphic/area.js +1 -1
  14. package/cjs/graphic/area.js.map +1 -1
  15. package/cjs/graphic/config.js +4 -2
  16. package/cjs/graphic/config.js.map +1 -1
  17. package/cjs/graphic/line.js +1 -1
  18. package/cjs/graphic/line.js.map +1 -1
  19. package/cjs/interface/graphic/arc.d.ts +2 -2
  20. package/cjs/interface/graphic/arc.js.map +1 -1
  21. package/cjs/interface/graphic/arc3d.d.ts +1 -1
  22. package/cjs/interface/graphic/arc3d.js.map +1 -1
  23. package/cjs/interface/graphic/area.d.ts +1 -0
  24. package/cjs/interface/graphic/area.js.map +1 -1
  25. package/cjs/interface/graphic/line.d.ts +1 -0
  26. package/cjs/interface/graphic/line.js.map +1 -1
  27. package/cjs/render/contributions/render/arc-render.js +1 -1
  28. package/cjs/render/contributions/render/arc-render.js.map +1 -1
  29. package/cjs/render/contributions/render/area-render.js +19 -6
  30. package/cjs/render/contributions/render/area-render.js.map +1 -1
  31. package/cjs/render/contributions/render/line-render.js +6 -3
  32. package/cjs/render/contributions/render/line-render.js.map +1 -1
  33. package/cjs/render/contributions/render/utils.js +1 -1
  34. package/cjs/render/contributions/render/utils.js.map +1 -1
  35. package/dist/index.es.js +251 -32
  36. package/es/common/segment/catmull-rom-close.d.ts +41 -0
  37. package/es/common/segment/catmull-rom-close.js +74 -0
  38. package/es/common/segment/catmull-rom-close.js.map +1 -0
  39. package/es/common/segment/catmull-rom.d.ts +38 -0
  40. package/es/common/segment/catmull-rom.js +92 -0
  41. package/es/common/segment/catmull-rom.js.map +1 -0
  42. package/es/common/segment/index.d.ts +2 -1
  43. package/es/common/segment/index.js +11 -0
  44. package/es/common/segment/index.js.map +1 -1
  45. package/es/graphic/arc.d.ts +1 -1
  46. package/es/graphic/arc.js +8 -3
  47. package/es/graphic/arc.js.map +1 -1
  48. package/es/graphic/area.js +1 -1
  49. package/es/graphic/area.js.map +1 -1
  50. package/es/graphic/config.js +4 -2
  51. package/es/graphic/config.js.map +1 -1
  52. package/es/graphic/line.js +1 -1
  53. package/es/graphic/line.js.map +1 -1
  54. package/es/interface/graphic/arc.d.ts +2 -2
  55. package/es/interface/graphic/arc.js.map +1 -1
  56. package/es/interface/graphic/arc3d.d.ts +1 -1
  57. package/es/interface/graphic/arc3d.js.map +1 -1
  58. package/es/interface/graphic/area.d.ts +1 -0
  59. package/es/interface/graphic/area.js.map +1 -1
  60. package/es/interface/graphic/line.d.ts +1 -0
  61. package/es/interface/graphic/line.js.map +1 -1
  62. package/es/render/contributions/render/arc-render.js +2 -2
  63. package/es/render/contributions/render/arc-render.js.map +1 -1
  64. package/es/render/contributions/render/area-render.js +22 -5
  65. package/es/render/contributions/render/area-render.js.map +1 -1
  66. package/es/render/contributions/render/line-render.js +6 -3
  67. package/es/render/contributions/render/line-render.js.map +1 -1
  68. package/es/render/contributions/render/utils.js +1 -1
  69. package/es/render/contributions/render/utils.js.map +1 -1
  70. package/package.json +1 -1
@@ -0,0 +1,41 @@
1
+ import { type IPointLike } from '@visactor/vutils';
2
+ import type { ICurvedSegment, IGenSegmentParams, ISegPath2D } from '../../interface/curve';
3
+ export declare class CatmullRomClosed implements ICurvedSegment {
4
+ private _lastDefined1?;
5
+ private _lastDefined2?;
6
+ context: ISegPath2D;
7
+ protected startPoint?: IPointLike;
8
+ lastPoint0?: IPointLike;
9
+ lastPoint1?: IPointLike;
10
+ constructor(context: ISegPath2D, alpha?: number, startPoint?: IPointLike);
11
+ _alpha: number;
12
+ _x: number;
13
+ _y: number;
14
+ _x0: number;
15
+ _x1: number;
16
+ _y0: number;
17
+ _y1: number;
18
+ _x2: number;
19
+ _y2: number;
20
+ _x3: number;
21
+ _y3: number;
22
+ _x4: number;
23
+ _y4: number;
24
+ _x5: number;
25
+ _y5: number;
26
+ _line: number;
27
+ _point: number;
28
+ _l01_a: number;
29
+ _l12_a: number;
30
+ _l23_a: number;
31
+ _l01_2a: number;
32
+ _l12_2a: number;
33
+ _l23_2a: number;
34
+ areaStart(): void;
35
+ areaEnd(): void;
36
+ lineStart(): void;
37
+ lineEnd(): void;
38
+ point(p: IPointLike): void;
39
+ tryUpdateLength(): number;
40
+ }
41
+ export declare const genCatmullRomClosedSegments: (points: IPointLike[], alpha: number, params?: IGenSegmentParams) => ISegPath2D;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.genCatmullRomClosedSegments = exports.CatmullRomClosed = void 0;
6
+
7
+ const catmull_rom_1 = require("./catmull-rom");
8
+
9
+ class CatmullRomClosed {
10
+ constructor(context, alpha = .5, startPoint) {
11
+ this.context = context, this.startPoint = startPoint, this._alpha = alpha;
12
+ }
13
+ areaStart() {
14
+ this._line = 0;
15
+ }
16
+ areaEnd() {
17
+ this._line = NaN;
18
+ }
19
+ lineStart() {
20
+ this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN,
21
+ this._l01_a = this._l12_a = this._l23_a = this._l01_2a = this._l12_2a = this._l23_2a = this._point = 0;
22
+ }
23
+ lineEnd() {
24
+ switch (this._point) {
25
+ case 1:
26
+ this.context.moveTo(this._x3, this._y3, this.lastPoint1), this.context.closePath();
27
+ break;
28
+
29
+ case 2:
30
+ this.context.lineTo(this._x3, this._y3, !1 !== this._lastDefined1 && !1 !== this._lastDefined2, this.lastPoint1),
31
+ this.context.closePath();
32
+ break;
33
+
34
+ case 3:
35
+ this.point({
36
+ x: this._x3,
37
+ y: this._y3
38
+ }), this.point({
39
+ x: this._x4,
40
+ y: this._y4
41
+ }), this.point({
42
+ x: this._x5,
43
+ y: this._y5
44
+ });
45
+ }
46
+ }
47
+ point(p) {
48
+ const {x: x, y: y} = p;
49
+ if (this._point) {
50
+ const x23 = this._x2 - x, y23 = this._y2 - y;
51
+ this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
52
+ }
53
+ switch (this._point) {
54
+ case 0:
55
+ this._point = 1, this._x3 = x, this._y3 = y;
56
+ break;
57
+
58
+ case 1:
59
+ this._point = 2, this.context.moveTo(this._x4 = x, this._y4 = y, p);
60
+ break;
61
+
62
+ case 2:
63
+ this._point = 3, this._x5 = x, this._y5 = y;
64
+ break;
65
+
66
+ default:
67
+ (0, catmull_rom_1.point)(this, x, y, !1 !== this._lastDefined1 && !1 !== this._lastDefined2, p);
68
+ }
69
+ this._l01_a = this._l12_a, this._l12_a = this._l23_a, this._l01_2a = this._l12_2a,
70
+ this._l12_2a = this._l23_2a, this._x0 = this._x1, this._x1 = this._x2, this._x2 = x,
71
+ this._y0 = this._y1, this._y1 = this._y2, this._y2 = y, this._lastDefined1 = this._lastDefined2,
72
+ this._lastDefined2 = p.defined, this.lastPoint0 = this.lastPoint1, this.lastPoint1 = p;
73
+ }
74
+ tryUpdateLength() {
75
+ return this.context.tryUpdateLength();
76
+ }
77
+ }
78
+
79
+ exports.CatmullRomClosed = CatmullRomClosed, exports.genCatmullRomClosedSegments = (0,
80
+ catmull_rom_1.commonGenCatmullRomSegments)("catmullRomClosed", CatmullRomClosed);
81
+ //# sourceMappingURL=catmull-rom-close.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/segment/catmull-rom-close.ts"],"names":[],"mappings":";;;AAIA,+CAAmE;AAEnE,MAAa,gBAAgB;IAS3B,YAAY,OAAmB,EAAE,QAAgB,GAAG,EAAE,UAAuB;QAC3E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAyBD,SAAS;QACP,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IACD,OAAO;QACL,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;IACnB,CAAC;IACD,SAAS;QACP,IAAI,CAAC,GAAG;YACN,IAAI,CAAC,GAAG;gBACR,IAAI,CAAC,GAAG;oBACR,IAAI,CAAC,GAAG;wBACR,IAAI,CAAC,GAAG;4BACR,IAAI,CAAC,GAAG;gCACR,IAAI,CAAC,GAAG;oCACR,IAAI,CAAC,GAAG;wCACR,IAAI,CAAC,GAAG;4CACR,IAAI,CAAC,GAAG;gDACR,IAAI,CAAC,GAAG;oDACR,IAAI,CAAC,GAAG;wDACN,GAAG,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACzG,CAAC;IACD,OAAO;QACL,QAAQ,IAAI,CAAC,MAAM,EAAE;YACnB,KAAK,CAAC,CAAC,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBACzD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzB,MAAM;aACP;YACD,KAAK,CAAC,CAAC,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,MAAM,CACjB,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,aAAa,KAAK,KAAK,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAC5D,IAAI,CAAC,UAAU,CAChB,CAAC;gBACF,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzB,MAAM;aACP;YACD,KAAK,CAAC,CAAC,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACzC,MAAM;aACP;SACF;IACH,CAAC;IACD,KAAK,CAAC,CAAa;QACjB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAEnB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACxF;QAED,QAAQ,IAAI,CAAC,MAAM,EAAE;YACnB,KAAK,CAAC;gBACJ,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBAC/B,MAAM;YACR,KAAK,CAAC;gBACJ,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvD,MAAM;YACR,KAAK,CAAC;gBACJ,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBAC/B,MAAM;YACR;gBACE,IAAA,mBAAK,EAAC,IAAW,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,KAAK,KAAK,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC1F,MAAM;SACT;QAED,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC7D,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAE7D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC;CACF;AA9HD,4CA8HC;AAMY,QAAA,2BAA2B,GAAG,IAAA,yCAA2B,EAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC","file":"catmull-rom-close.js","sourcesContent":["import { epsilon, type IPointLike } from '@visactor/vutils';\nimport { genLinearSegments } from './linear';\nimport { genCurveSegments, genSegContext } from './common';\nimport type { ICurvedSegment, IGenSegmentParams, ILinearSegment, ISegPath2D } from '../../interface/curve';\nimport { commonGenCatmullRomSegments, point } from './catmull-rom';\n\nexport class CatmullRomClosed implements ICurvedSegment {\n private _lastDefined1?: boolean;\n private _lastDefined2?: boolean;\n declare context: ISegPath2D;\n\n protected startPoint?: IPointLike;\n lastPoint0?: IPointLike;\n lastPoint1?: IPointLike;\n\n constructor(context: ISegPath2D, alpha: number = 0.5, startPoint?: IPointLike) {\n this.context = context;\n this.startPoint = startPoint;\n this._alpha = alpha;\n }\n _alpha: number;\n _x: number;\n _y: number;\n _x0: number;\n _x1: number;\n _y0: number;\n _y1: number;\n _x2: number;\n _y2: number;\n _x3: number;\n _y3: number;\n _x4: number;\n _y4: number;\n _x5: number;\n _y5: number;\n _line: number;\n _point: number;\n _l01_a: number;\n _l12_a: number;\n _l23_a: number;\n _l01_2a: number;\n _l12_2a: number;\n _l23_2a: number;\n\n areaStart() {\n this._line = 0;\n }\n areaEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._x0 =\n this._x1 =\n this._x2 =\n this._x3 =\n this._x4 =\n this._x5 =\n this._y0 =\n this._y1 =\n this._y2 =\n this._y3 =\n this._y4 =\n this._y5 =\n NaN;\n this._l01_a = this._l12_a = this._l23_a = this._l01_2a = this._l12_2a = this._l23_2a = this._point = 0;\n }\n lineEnd() {\n switch (this._point) {\n case 1: {\n this.context.moveTo(this._x3, this._y3, this.lastPoint1);\n this.context.closePath();\n break;\n }\n case 2: {\n this.context.lineTo(\n this._x3,\n this._y3,\n this._lastDefined1 !== false && this._lastDefined2 !== false,\n this.lastPoint1\n );\n this.context.closePath();\n break;\n }\n case 3: {\n this.point({ x: this._x3, y: this._y3 });\n this.point({ x: this._x4, y: this._y4 });\n this.point({ x: this._x5, y: this._y5 });\n break;\n }\n }\n }\n point(p: IPointLike): void {\n const { x, y } = p;\n\n if (this._point) {\n const x23 = this._x2 - x;\n const y23 = this._y2 - y;\n this._l23_a = Math.sqrt((this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)));\n }\n\n switch (this._point) {\n case 0:\n this._point = 1;\n (this._x3 = x), (this._y3 = y);\n break;\n case 1:\n this._point = 2;\n this.context.moveTo((this._x4 = x), (this._y4 = y), p);\n break;\n case 2:\n this._point = 3;\n (this._x5 = x), (this._y5 = y);\n break;\n default:\n point(this as any, x, y, this._lastDefined1 !== false && this._lastDefined2 !== false, p);\n break;\n }\n\n (this._l01_a = this._l12_a), (this._l12_a = this._l23_a);\n (this._l01_2a = this._l12_2a), (this._l12_2a = this._l23_2a);\n (this._x0 = this._x1), (this._x1 = this._x2), (this._x2 = x);\n (this._y0 = this._y1), (this._y1 = this._y2), (this._y2 = y);\n\n this._lastDefined1 = this._lastDefined2;\n this._lastDefined2 = p.defined;\n this.lastPoint0 = this.lastPoint1;\n this.lastPoint1 = p;\n }\n\n tryUpdateLength(): number {\n return this.context.tryUpdateLength();\n }\n}\n\n// export function genCatmullRomClosedTypeSegments(path: ILinearSegment, points: IPointLike[]): void {\n// return genCurveSegments(path, points, 2);\n// }\n\nexport const genCatmullRomClosedSegments = commonGenCatmullRomSegments('catmullRomClosed', CatmullRomClosed);\n\n// export function genCatmullRomClosedSegments(\n// points: IPointLike[],\n// alpha: number,\n// params: IGenSegmentParams = {}\n// ): ISegPath2D | null {\n// const { direction, startPoint } = params;\n// if (points.length < 2 - Number(!!startPoint)) {\n// return null;\n// }\n// if (points.length < 3 - Number(!!startPoint)) {\n// return genLinearSegments(points, params);\n// }\n\n// const segContext = genSegContext('catmullRom', direction, points);\n\n// const gatmullRom = new CatmullRomClosed(segContext, alpha, startPoint);\n\n// genCatmullRomClosedTypeSegments(gatmullRom, points);\n\n// return segContext;\n// }\n"]}
@@ -0,0 +1,38 @@
1
+ import { type IPointLike } from '@visactor/vutils';
2
+ import type { ICurvedSegment, IGenSegmentParams, ISegPath2D } from '../../interface/curve';
3
+ import type { ICurveType } from '../../interface';
4
+ export declare function point(curveClass: CatmullRom, x: number, y: number, defined: boolean, p: IPointLike): void;
5
+ export declare class CatmullRom implements ICurvedSegment {
6
+ private _lastDefined1?;
7
+ private _lastDefined2?;
8
+ context: ISegPath2D;
9
+ protected startPoint?: IPointLike;
10
+ lastPoint0?: IPointLike;
11
+ lastPoint1?: IPointLike;
12
+ constructor(context: ISegPath2D, alpha?: number, startPoint?: IPointLike);
13
+ _alpha: number;
14
+ _x: number;
15
+ _y: number;
16
+ _x0: number;
17
+ _x1: number;
18
+ _y0: number;
19
+ _y1: number;
20
+ _x2: number;
21
+ _y2: number;
22
+ _line: number;
23
+ _point: number;
24
+ _l01_a: number;
25
+ _l12_a: number;
26
+ _l23_a: number;
27
+ _l01_2a: number;
28
+ _l12_2a: number;
29
+ _l23_2a: number;
30
+ areaStart(): void;
31
+ areaEnd(): void;
32
+ lineStart(): void;
33
+ lineEnd(): void;
34
+ point(p: IPointLike): void;
35
+ tryUpdateLength(): number;
36
+ }
37
+ export declare function commonGenCatmullRomSegments(type: ICurveType, cons: any): (points: IPointLike[], alpha: number, params?: IGenSegmentParams) => ISegPath2D | null;
38
+ export declare const genCatmullRomSegments: (points: IPointLike[], alpha: number, params?: IGenSegmentParams) => ISegPath2D | null;
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.genCatmullRomSegments = exports.commonGenCatmullRomSegments = exports.CatmullRom = exports.point = void 0;
6
+
7
+ const vutils_1 = require("@visactor/vutils"), linear_1 = require("./linear"), common_1 = require("./common");
8
+
9
+ function point(curveClass, x, y, defined, p) {
10
+ let x1 = curveClass._x1, y1 = curveClass._y1, x2 = curveClass._x2, y2 = curveClass._y2;
11
+ if (curveClass._l01_a > vutils_1.epsilon) {
12
+ const a = 2 * curveClass._l01_2a + 3 * curveClass._l01_a * curveClass._l12_a + curveClass._l12_2a, n = 3 * curveClass._l01_a * (curveClass._l01_a + curveClass._l12_a);
13
+ x1 = (x1 * a - curveClass._x0 * curveClass._l12_2a + curveClass._x2 * curveClass._l01_2a) / n,
14
+ y1 = (y1 * a - curveClass._y0 * curveClass._l12_2a + curveClass._y2 * curveClass._l01_2a) / n;
15
+ }
16
+ if (curveClass._l23_a > vutils_1.epsilon) {
17
+ const b = 2 * curveClass._l23_2a + 3 * curveClass._l23_a * curveClass._l12_a + curveClass._l12_2a, m = 3 * curveClass._l23_a * (curveClass._l23_a + curveClass._l12_a);
18
+ x2 = (x2 * b + curveClass._x1 * curveClass._l23_2a - x * curveClass._l12_2a) / m,
19
+ y2 = (y2 * b + curveClass._y1 * curveClass._l23_2a - y * curveClass._l12_2a) / m;
20
+ }
21
+ curveClass.context.bezierCurveTo(x1, y1, x2, y2, curveClass._x2, curveClass._y2, defined, curveClass.lastPoint1);
22
+ }
23
+
24
+ exports.point = point;
25
+
26
+ class CatmullRom {
27
+ constructor(context, alpha = .5, startPoint) {
28
+ this.context = context, this.startPoint = startPoint, this._alpha = alpha;
29
+ }
30
+ areaStart() {
31
+ this._line = 0;
32
+ }
33
+ areaEnd() {
34
+ this._line = NaN;
35
+ }
36
+ lineStart() {
37
+ this._x0 = this._x1 = this._x2 = this._y0 = this._y1 = this._y2 = NaN, this._l01_a = this._l12_a = this._l23_a = this._l01_2a = this._l12_2a = this._l23_2a = this._point = 0;
38
+ }
39
+ lineEnd() {
40
+ switch (this._point) {
41
+ case 2:
42
+ this.context.lineTo(this._x2, this._y2, !1 !== this._lastDefined1 && !1 !== this._lastDefined2, this.lastPoint1);
43
+ break;
44
+
45
+ case 3:
46
+ this.point({
47
+ x: this._x2,
48
+ y: this._y2
49
+ });
50
+ }
51
+ (this._line || 0 !== this._line && 1 === this._point) && this.context.closePath(),
52
+ this._line = 1 - this._line;
53
+ }
54
+ point(p) {
55
+ const {x: x, y: y} = p;
56
+ if (this._point) {
57
+ const x23 = this._x2 - x, y23 = this._y2 - y;
58
+ this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
59
+ }
60
+ switch (this._point) {
61
+ case 0:
62
+ this._point = 1, this._line ? this.context.lineTo(x, y, !1 !== this._lastDefined1 && !1 !== this._lastDefined2) : this.context.moveTo(x, y);
63
+ break;
64
+
65
+ case 1:
66
+ this._point = 2;
67
+ break;
68
+
69
+ case 2:
70
+ this._point = 3;
71
+
72
+ default:
73
+ point(this, x, y, !1 !== this._lastDefined1 && !1 !== this._lastDefined2, p);
74
+ }
75
+ this._l01_a = this._l12_a, this._l12_a = this._l23_a, this._l01_2a = this._l12_2a,
76
+ this._l12_2a = this._l23_2a, this._x0 = this._x1, this._x1 = this._x2, this._x2 = x,
77
+ this._y0 = this._y1, this._y1 = this._y2, this._y2 = y, this._lastDefined1 = this._lastDefined2,
78
+ this._lastDefined2 = p.defined, this.lastPoint0 = this.lastPoint1, this.lastPoint1 = p;
79
+ }
80
+ tryUpdateLength() {
81
+ return this.context.tryUpdateLength();
82
+ }
83
+ }
84
+
85
+ function commonGenCatmullRomSegments(type, cons) {
86
+ return function(points, alpha, params = {}) {
87
+ const {direction: direction, startPoint: startPoint} = params;
88
+ if (points.length < 2 - Number(!!startPoint)) return null;
89
+ if (points.length < 3 - Number(!!startPoint)) return (0, linear_1.genLinearSegments)(points, params);
90
+ const segContext = (0, common_1.genSegContext)(type, direction, points), gatmullRom = new cons(segContext, alpha, startPoint);
91
+ return (0, common_1.genCurveSegments)(gatmullRom, points, 2), segContext;
92
+ };
93
+ }
94
+
95
+ exports.CatmullRom = CatmullRom, exports.commonGenCatmullRomSegments = commonGenCatmullRomSegments,
96
+ exports.genCatmullRomSegments = commonGenCatmullRomSegments("catmullRom", CatmullRom);
97
+ //# sourceMappingURL=catmull-rom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/segment/catmull-rom.ts"],"names":[],"mappings":"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","file":"catmull-rom.js","sourcesContent":["import { epsilon, type IPointLike } from '@visactor/vutils';\nimport { genLinearSegments } from './linear';\nimport { genCurveSegments, genSegContext } from './common';\nimport type { ICurvedSegment, IGenSegmentParams, ILinearSegment, ISegPath2D } from '../../interface/curve';\nimport type { ICurveType } from '../../interface';\n\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\n// 基于d3-shape重构\n// https://github.com/d3/d3-shape/blob/main/src/curve/basis.js\nexport function point(curveClass: CatmullRom, x: number, y: number, defined: boolean, p: IPointLike) {\n let x1 = curveClass._x1;\n let y1 = curveClass._y1;\n let x2 = curveClass._x2;\n let y2 = curveClass._y2;\n\n if (curveClass._l01_a > epsilon) {\n const a = 2 * curveClass._l01_2a + 3 * curveClass._l01_a * curveClass._l12_a + curveClass._l12_2a;\n const n = 3 * curveClass._l01_a * (curveClass._l01_a + curveClass._l12_a);\n x1 = (x1 * a - curveClass._x0 * curveClass._l12_2a + curveClass._x2 * curveClass._l01_2a) / n;\n y1 = (y1 * a - curveClass._y0 * curveClass._l12_2a + curveClass._y2 * curveClass._l01_2a) / n;\n }\n\n if (curveClass._l23_a > epsilon) {\n const b = 2 * curveClass._l23_2a + 3 * curveClass._l23_a * curveClass._l12_a + curveClass._l12_2a;\n const m = 3 * curveClass._l23_a * (curveClass._l23_a + curveClass._l12_a);\n x2 = (x2 * b + curveClass._x1 * curveClass._l23_2a - x * curveClass._l12_2a) / m;\n y2 = (y2 * b + curveClass._y1 * curveClass._l23_2a - y * curveClass._l12_2a) / m;\n }\n\n curveClass.context.bezierCurveTo(x1, y1, x2, y2, curveClass._x2, curveClass._y2, defined, curveClass.lastPoint1);\n}\n\nexport class CatmullRom implements ICurvedSegment {\n private _lastDefined1?: boolean;\n private _lastDefined2?: boolean;\n declare context: ISegPath2D;\n\n protected startPoint?: IPointLike;\n lastPoint0?: IPointLike;\n lastPoint1?: IPointLike;\n\n constructor(context: ISegPath2D, alpha: number = 0.5, startPoint?: IPointLike) {\n this.context = context;\n this.startPoint = startPoint;\n this._alpha = alpha;\n }\n _alpha: number;\n _x: number;\n _y: number;\n _x0: number;\n _x1: number;\n _y0: number;\n _y1: number;\n _x2: number;\n _y2: number;\n _line: number;\n _point: number;\n _l01_a: number;\n _l12_a: number;\n _l23_a: number;\n _l01_2a: number;\n _l12_2a: number;\n _l23_2a: number;\n\n areaStart() {\n this._line = 0;\n }\n areaEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._x0 = this._x1 = this._x2 = this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a = this._l01_2a = this._l12_2a = this._l23_2a = this._point = 0;\n }\n lineEnd() {\n switch (this._point) {\n case 2:\n this.context.lineTo(\n this._x2,\n this._y2,\n this._lastDefined1 !== false && this._lastDefined2 !== false,\n this.lastPoint1\n );\n break;\n case 3:\n this.point({ x: this._x2, y: this._y2 });\n break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) {\n this.context.closePath();\n }\n this._line = 1 - this._line;\n }\n point(p: IPointLike): void {\n const { x, y } = p;\n\n if (this._point) {\n const x23 = this._x2 - x;\n const y23 = this._y2 - y;\n this._l23_a = Math.sqrt((this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)));\n }\n\n switch (this._point) {\n case 0:\n this._point = 1;\n this._line\n ? this.context.lineTo(x, y, this._lastDefined1 !== false && this._lastDefined2 !== false)\n : this.context.moveTo(x, y);\n break;\n case 1:\n this._point = 2;\n break;\n case 2:\n this._point = 3; // falls through\n default:\n point(this, x, y, this._lastDefined1 !== false && this._lastDefined2 !== false, p);\n break;\n }\n\n (this._l01_a = this._l12_a), (this._l12_a = this._l23_a);\n (this._l01_2a = this._l12_2a), (this._l12_2a = this._l23_2a);\n (this._x0 = this._x1), (this._x1 = this._x2), (this._x2 = x);\n (this._y0 = this._y1), (this._y1 = this._y2), (this._y2 = y);\n\n this._lastDefined1 = this._lastDefined2;\n this._lastDefined2 = p.defined;\n this.lastPoint0 = this.lastPoint1;\n this.lastPoint1 = p;\n }\n\n tryUpdateLength(): number {\n return this.context.tryUpdateLength();\n }\n}\n\n// export function genCatmullRomTypeSegments(path: ILinearSegment, points: IPointLike[]): void {\n// return genCurveSegments(path, points, 2);\n// }\n\nexport function commonGenCatmullRomSegments(type: ICurveType, cons: any) {\n return function genCatmullRomSegments(\n points: IPointLike[],\n alpha: number,\n params: IGenSegmentParams = {}\n ): ISegPath2D | null {\n const { direction, startPoint } = params;\n if (points.length < 2 - Number(!!startPoint)) {\n return null;\n }\n if (points.length < 3 - Number(!!startPoint)) {\n return genLinearSegments(points, params);\n }\n\n const segContext = genSegContext(type, direction, points);\n\n const gatmullRom = new cons(segContext, alpha, startPoint);\n\n genCurveSegments(gatmullRom, points, 2);\n // genCatmullRomTypeSegments(gatmullRom, points);\n\n return segContext;\n };\n}\n\nexport const genCatmullRomSegments = commonGenCatmullRomSegments('catmullRom', CatmullRom);\n\n// export function genCatmullRomSegments(\n// points: IPointLike[],\n// alpha: number,\n// params: IGenSegmentParams = {}\n// ): ISegPath2D | null {\n// const { direction, startPoint } = params;\n// if (points.length < 2 - Number(!!startPoint)) {\n// return null;\n// }\n// if (points.length < 3 - Number(!!startPoint)) {\n// return genLinearSegments(points, params);\n// }\n\n// const segContext = genSegContext('catmullRom', direction, points);\n\n// const gatmullRom = new CatmullRom(segContext, alpha, startPoint);\n\n// genCatmullRomTypeSegments(gatmullRom, points);\n\n// return segContext;\n// }\n"]}
@@ -7,5 +7,6 @@ export * from './monotone';
7
7
  export * from './step';
8
8
  export * from './curve/curve-context';
9
9
  export declare function calcLineCache(points: IPointLike[], curveType: ICurveType, params?: {
10
- startPoint: IPointLike;
10
+ startPoint?: IPointLike;
11
+ curveTension?: number;
11
12
  }): ISegPath2D | null;
@@ -19,9 +19,10 @@ Object.defineProperty(exports, "__esModule", {
19
19
  value: !0
20
20
  }), exports.calcLineCache = void 0;
21
21
 
22
- const linear_1 = require("./linear"), basis_1 = require("./basis"), monotone_1 = require("./monotone"), step_1 = require("./step"), linear_closed_1 = require("./linear-closed");
22
+ const linear_1 = require("./linear"), basis_1 = require("./basis"), monotone_1 = require("./monotone"), step_1 = require("./step"), linear_closed_1 = require("./linear-closed"), catmull_rom_1 = require("./catmull-rom"), catmull_rom_close_1 = require("./catmull-rom-close");
23
23
 
24
24
  function calcLineCache(points, curveType, params) {
25
+ var _a, _b;
25
26
  switch (curveType) {
26
27
  case "linear":
27
28
  default:
@@ -45,6 +46,12 @@ function calcLineCache(points, curveType, params) {
45
46
  case "stepAfter":
46
47
  return (0, step_1.genStepSegments)(points, 1, params);
47
48
 
49
+ case "catmullRom":
50
+ return (0, catmull_rom_1.genCatmullRomSegments)(points, null !== (_a = null == params ? void 0 : params.curveTension) && void 0 !== _a ? _a : .5, params);
51
+
52
+ case "catmullRomClosed":
53
+ return (0, catmull_rom_close_1.genCatmullRomClosedSegments)(points, null !== (_b = null == params ? void 0 : params.curveTension) && void 0 !== _b ? _b : .5, params);
54
+
48
55
  case "linearClosed":
49
56
  return (0, linear_closed_1.genLinearClosedSegments)(points, params);
50
57
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/segment/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,qCAA6C;AAC7C,mCAA2C;AAC3C,yCAAwE;AACxE,iCAAyC;AACzC,mDAA0D;AAE1D,2CAAyB;AACzB,kDAAgC;AAChC,0CAAwB;AACxB,6CAA2B;AAC3B,yCAAuB;AACvB,wDAAsC;AAEtC,SAAgB,aAAa,CAC3B,MAAoB,EACpB,SAAqB,EACrB,MAAmC;IAEnC,QAAQ,SAAS,EAAE;QACjB,KAAK,QAAQ;YACX,OAAO,IAAA,0BAAiB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,KAAK,OAAO;YACV,OAAO,IAAA,wBAAgB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1C,KAAK,WAAW;YACd,OAAO,IAAA,+BAAoB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,KAAK,WAAW;YACd,OAAO,IAAA,+BAAoB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,KAAK,MAAM;YACT,OAAO,IAAA,sBAAe,EAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9C,KAAK,YAAY;YACf,OAAO,IAAA,sBAAe,EAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5C,KAAK,WAAW;YACd,OAAO,IAAA,sBAAe,EAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5C,KAAK,cAAc;YACjB,OAAO,IAAA,uCAAuB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjD;YACE,OAAO,IAAA,0BAAiB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC5C;AACH,CAAC;AAzBD,sCAyBC","file":"index.js","sourcesContent":["import type { IPointLike } from '@visactor/vutils';\nimport type { ICurveType, ISegPath2D } from '../../interface';\nimport { genLinearSegments } from './linear';\nimport { genBasisSegments } from './basis';\nimport { genMonotoneXSegments, genMonotoneYSegments } from './monotone';\nimport { genStepSegments } from './step';\nimport { genLinearClosedSegments } from './linear-closed';\n\nexport * from './linear';\nexport * from './linear-closed';\nexport * from './basis';\nexport * from './monotone';\nexport * from './step';\nexport * from './curve/curve-context';\n\nexport function calcLineCache(\n points: IPointLike[],\n curveType: ICurveType,\n params?: { startPoint: IPointLike }\n): ISegPath2D | null {\n switch (curveType) {\n case 'linear':\n return genLinearSegments(points, params);\n case 'basis':\n return genBasisSegments(points, params);\n case 'monotoneX':\n return genMonotoneXSegments(points, params);\n case 'monotoneY':\n return genMonotoneYSegments(points, params);\n case 'step':\n return genStepSegments(points, 0.5, params);\n case 'stepBefore':\n return genStepSegments(points, 0, params);\n case 'stepAfter':\n return genStepSegments(points, 1, params);\n case 'linearClosed':\n return genLinearClosedSegments(points, params);\n default:\n return genLinearSegments(points, params);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/common/segment/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,qCAA6C;AAC7C,mCAA2C;AAC3C,yCAAwE;AACxE,iCAAyC;AACzC,mDAA0D;AAC1D,+CAAsD;AACtD,2DAAkE;AAElE,2CAAyB;AACzB,kDAAgC;AAChC,0CAAwB;AACxB,6CAA2B;AAC3B,yCAAuB;AACvB,wDAAsC;AAEtC,SAAgB,aAAa,CAC3B,MAAoB,EACpB,SAAqB,EACrB,MAA2D;;IAE3D,QAAQ,SAAS,EAAE;QACjB,KAAK,QAAQ;YACX,OAAO,IAAA,0BAAiB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,KAAK,OAAO;YACV,OAAO,IAAA,wBAAgB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1C,KAAK,WAAW;YACd,OAAO,IAAA,+BAAoB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,KAAK,WAAW;YACd,OAAO,IAAA,+BAAoB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,KAAK,MAAM;YACT,OAAO,IAAA,sBAAe,EAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9C,KAAK,YAAY;YACf,OAAO,IAAA,sBAAe,EAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5C,KAAK,WAAW;YACd,OAAO,IAAA,sBAAe,EAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5C,KAAK,YAAY;YACf,OAAO,IAAA,mCAAqB,EAAC,MAAM,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,mCAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5E,KAAK,kBAAkB;YACrB,OAAO,IAAA,+CAA2B,EAAC,MAAM,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,mCAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QAClF,KAAK,cAAc;YACjB,OAAO,IAAA,uCAAuB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjD;YACE,OAAO,IAAA,0BAAiB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC5C;AACH,CAAC;AA7BD,sCA6BC","file":"index.js","sourcesContent":["import type { IPointLike } from '@visactor/vutils';\nimport type { ICurveType, ISegPath2D } from '../../interface';\nimport { genLinearSegments } from './linear';\nimport { genBasisSegments } from './basis';\nimport { genMonotoneXSegments, genMonotoneYSegments } from './monotone';\nimport { genStepSegments } from './step';\nimport { genLinearClosedSegments } from './linear-closed';\nimport { genCatmullRomSegments } from './catmull-rom';\nimport { genCatmullRomClosedSegments } from './catmull-rom-close';\n\nexport * from './linear';\nexport * from './linear-closed';\nexport * from './basis';\nexport * from './monotone';\nexport * from './step';\nexport * from './curve/curve-context';\n\nexport function calcLineCache(\n points: IPointLike[],\n curveType: ICurveType,\n params?: { startPoint?: IPointLike; curveTension?: number }\n): ISegPath2D | null {\n switch (curveType) {\n case 'linear':\n return genLinearSegments(points, params);\n case 'basis':\n return genBasisSegments(points, params);\n case 'monotoneX':\n return genMonotoneXSegments(points, params);\n case 'monotoneY':\n return genMonotoneYSegments(points, params);\n case 'step':\n return genStepSegments(points, 0.5, params);\n case 'stepBefore':\n return genStepSegments(points, 0, params);\n case 'stepAfter':\n return genStepSegments(points, 1, params);\n case 'catmullRom':\n return genCatmullRomSegments(points, params?.curveTension ?? 0.5, params);\n case 'catmullRomClosed':\n return genCatmullRomClosedSegments(points, params?.curveTension ?? 0.5, params);\n case 'linearClosed':\n return genLinearClosedSegments(points, params);\n default:\n return genLinearSegments(points, params);\n }\n}\n"]}
@@ -39,7 +39,7 @@ export declare class Arc extends Graphic<IArcGraphicAttribute> implements IArc {
39
39
  constructor(params: IArcGraphicAttribute);
40
40
  isValid(): boolean;
41
41
  private _isValid;
42
- getParsedCornerRadius(): number;
42
+ getParsedCornerRadius(): number | number[];
43
43
  getParsedAngle(): {
44
44
  startAngle: number;
45
45
  endAngle: number;
@@ -21,8 +21,14 @@ class Arc extends graphic_1.Graphic {
21
21
  const arcTheme = (0, theme_1.getTheme)(this).arc, {cornerRadius: cornerRadius = arcTheme.cornerRadius, innerPadding: innerPadding = arcTheme.innerPadding, outerPadding: outerPadding = arcTheme.outerPadding} = this.attribute;
22
22
  let {outerRadius: outerRadius = arcTheme.outerRadius, innerRadius: innerRadius = arcTheme.innerRadius} = this.attribute;
23
23
  if (outerRadius += outerPadding, innerRadius -= innerPadding, 0 === cornerRadius || "0%" === cornerRadius) return 0;
24
- const deltaRadius = Math.abs(outerRadius - innerRadius);
25
- return Math.min((0, vutils_1.isNumber)(cornerRadius, !0) ? cornerRadius : deltaRadius * parseFloat(cornerRadius) / 100, deltaRadius / 2);
24
+ const deltaRadius = Math.abs(outerRadius - innerRadius), parseCR = cornerRadius => Math.min((0,
25
+ vutils_1.isNumber)(cornerRadius, !0) ? cornerRadius : deltaRadius * parseFloat(cornerRadius) / 100, deltaRadius / 2);
26
+ if ((0, vutils_1.isArray)(cornerRadius)) {
27
+ const crList = cornerRadius.map((cr => parseCR(cr) || 0));
28
+ return 0 === crList.length ? [ crList[0], crList[0], crList[0], crList[0] ] : 2 === crList.length ? [ crList[0], crList[1], crList[0], crList[1] ] : (3 === crList.length && crList.push(0),
29
+ crList);
30
+ }
31
+ return parseCR(cornerRadius);
26
32
  }
27
33
  getParsedAngle() {
28
34
  const arcTheme = (0, theme_1.getTheme)(this).arc;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphic/arc.ts"],"names":[],"mappings":"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","file":"arc.js","sourcesContent":["import type { AABBBounds, OBBBounds } from '@visactor/vutils';\nimport { pi2, sin, epsilon, abs, asin, clampAngleByRadian, isNumber, cos, sqrt } from '@visactor/vutils';\nimport type { IArc, IArcGraphicAttribute } from '../interface/graphic/arc';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { parsePadding } from '../common/utils';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport type { GraphicType } from '../interface';\nimport { ARC_NUMBER_TYPE } from './constants';\n\n/**\n * 部分代码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\nconst ARC_UPDATE_TAG_KEY = [\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'endAngle',\n 'cornerRadius',\n 'padAngle',\n 'padRadius',\n 'cap',\n ...GRAPHIC_UPDATE_TAG_KEY\n];\n\n/**\n * 圆形图元\n * 默认顺时针绘制\n */\nexport class Arc extends Graphic<IArcGraphicAttribute> implements IArc {\n type: GraphicType = 'arc';\n\n static NOWORK_ANIMATE_ATTR = {\n cap: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n // static parseCornerRadius(r: IArcGraphicAttribute['cornerRadius']) {\n // if (isArray(r)) {\n // if ((r as any[]).length === 1) {\n // const value = r[0];\n // return [value, value, value, value];\n // }\n\n // if ((r as any[]).length === 2) {\n // return [r[0], r[0], r[1], r[1]];\n // }\n\n // if ((r as any[]).length === 3) {\n // return [r[0], r[1], r[2], 0];\n // }\n\n // return (r as any[]).slice(0, 4);\n // }\n\n // return [r as string | number, r as string | number, r as string | number, r as string | number];\n // }\n\n // static isCornerRadiusEqual(oldR: IArcGraphicAttribute['cornerRadius'], newR: IArcGraphicAttribute['cornerRadius']) {\n // throw new Error('暂不支持');\n // if (oldR === newR) {\n // return true;\n // }\n\n // if (isArray(oldR) && !isArray(newR)) {\n // return (oldR as (string | number)[]).every(r => r === newR);\n // }\n\n // if (!isArray(oldR) && isArray(newR)) {\n // return (newR as (string | number)[]).every(r => r === oldR);\n // }\n\n // return arrayEqual(oldR as (string | number)[], newR as (string | number)[]);\n // }\n\n constructor(params: IArcGraphicAttribute) {\n super(params);\n this.numberType = ARC_NUMBER_TYPE;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n const { startAngle, endAngle, outerRadius, innerRadius } = this.attribute;\n return (\n this._validNumber(startAngle) &&\n this._validNumber(endAngle) &&\n this._validNumber(outerRadius) &&\n this._validNumber(innerRadius)\n );\n }\n\n getParsedCornerRadius() {\n const arcTheme = getTheme(this).arc;\n const {\n cornerRadius = arcTheme.cornerRadius,\n innerPadding = arcTheme.innerPadding,\n outerPadding = arcTheme.outerPadding\n } = this.attribute;\n let { outerRadius = arcTheme.outerRadius, innerRadius = arcTheme.innerRadius } = this.attribute;\n outerRadius += outerPadding;\n innerRadius -= innerPadding;\n if (cornerRadius === 0 || cornerRadius === '0%') {\n return 0;\n }\n const deltaRadius = Math.abs(outerRadius - innerRadius);\n return Math.min(\n isNumber(cornerRadius, true)\n ? (cornerRadius as number)\n : (deltaRadius * parseFloat(cornerRadius as string)) / 100,\n deltaRadius / 2\n );\n }\n\n getParsedAngle() {\n const arcTheme = getTheme(this).arc;\n let { startAngle = arcTheme.startAngle, endAngle = arcTheme.endAngle } = this.attribute;\n const { cap = arcTheme.cap } = this.attribute;\n\n const sign = endAngle - startAngle >= 0 ? 1 : -1;\n const deltaAngle = endAngle - startAngle;\n\n startAngle = clampAngleByRadian(startAngle);\n endAngle = startAngle + deltaAngle;\n\n if (cap && abs(deltaAngle) < pi2 - epsilon) {\n let startCap = 1;\n let endCap = 1;\n if ((cap as boolean[]).length) {\n startCap = Number(cap[0]);\n endCap = Number(cap[1]);\n }\n let { outerRadius = arcTheme.outerRadius, innerRadius = arcTheme.innerRadius } = this.attribute;\n const { outerPadding = arcTheme.outerPadding, innerPadding = arcTheme.innerPadding } = this.attribute;\n outerRadius += outerPadding;\n innerRadius -= innerPadding;\n const capWidth = Math.abs(outerRadius - innerRadius) / 2;\n // 以外边界长度为准\n const capAngle = capWidth / outerRadius;\n\n if (capWidth > epsilon && outerRadius > epsilon) {\n return {\n startAngle: startAngle - sign * capAngle * startCap,\n endAngle: endAngle + sign * capAngle * endCap,\n sc: sign * capAngle * startCap,\n ec: sign * capAngle * endCap\n };\n }\n }\n\n return {\n startAngle: startAngle,\n endAngle: endAngle\n };\n }\n\n // 参考 https://github.com/d3/d3-shape/blob/main/src/arc.js\n getParsePadAngle(startAngle: number, endAngle: number) {\n const arcTheme = getTheme(this).arc;\n const {\n innerPadding = arcTheme.innerPadding,\n outerPadding = arcTheme.outerPadding,\n padAngle = arcTheme.padAngle\n } = this.attribute;\n let { outerRadius = arcTheme.outerRadius, innerRadius = arcTheme.innerRadius } = this.attribute;\n outerRadius += outerPadding;\n innerRadius -= innerPadding;\n\n const { padRadius = sqrt(outerRadius * outerRadius + innerRadius * innerRadius) } = this.attribute;\n const deltaAngle = abs(endAngle - startAngle);\n\n // Or is it a circular or annular sector?\n let outerStartAngle = startAngle;\n let outerEndAngle = endAngle;\n let innerStartAngle = startAngle;\n let innerEndAngle = endAngle;\n const halfPadAngle = padAngle / 2;\n let innerDeltaAngle = deltaAngle;\n let outerDeltaAngle = deltaAngle;\n\n // Apply padding? Note that since r1 ≥ r0, outerDeltaAngle ≥ innerDeltaAngle.\n if (halfPadAngle > epsilon && padRadius > epsilon) {\n const sign = endAngle > startAngle ? 1 : -1;\n\n let p0 = asin((Number(padRadius) / innerRadius) * sin(halfPadAngle));\n let p1 = asin((Number(padRadius) / outerRadius) * sin(halfPadAngle));\n if ((innerDeltaAngle -= p0 * 2) > epsilon) {\n p0 *= sign;\n innerStartAngle += p0;\n innerEndAngle -= p0;\n } else {\n innerDeltaAngle = 0;\n innerStartAngle = innerEndAngle = (startAngle + endAngle) / 2;\n }\n if ((outerDeltaAngle -= p1 * 2) > epsilon) {\n p1 *= sign;\n outerStartAngle += p1;\n outerEndAngle -= p1;\n } else {\n outerDeltaAngle = 0;\n outerStartAngle = outerEndAngle = (startAngle + endAngle) / 2;\n }\n\n return {\n outerStartAngle,\n outerEndAngle,\n innerStartAngle,\n innerEndAngle,\n innerDeltaAngle,\n outerDeltaAngle\n };\n }\n\n return {\n outerStartAngle,\n outerEndAngle,\n innerStartAngle,\n innerEndAngle,\n innerDeltaAngle,\n outerDeltaAngle\n };\n }\n\n protected doUpdateAABBBounds(full?: boolean): AABBBounds {\n const arcTheme = getTheme(this).arc;\n this._AABBBounds.clear();\n const attribute = this.attribute;\n const bounds = application.graphicService.updateArcAABBBounds(\n attribute,\n getTheme(this).arc,\n this._AABBBounds,\n full,\n this\n ) as AABBBounds;\n\n const { boundsPadding = arcTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n this.clearUpdateBoundTag();\n return bounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, ARC_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, ARC_UPDATE_TAG_KEY);\n }\n\n getDefaultAttribute(name: string) {\n const arcTheme = getTheme(this).arc;\n return arcTheme[name];\n }\n\n toCustomPath() {\n const x = 0;\n const y = 0;\n\n const attribute = this.attribute;\n const { startAngle, endAngle } = this.getParsedAngle();\n let innerRadius = attribute.innerRadius - (attribute.innerPadding || 0);\n let outerRadius = attribute.outerRadius - (attribute.outerPadding || 0);\n const deltaAngle = abs(endAngle - startAngle);\n const clockwise: boolean = endAngle > startAngle;\n\n if (outerRadius < innerRadius) {\n const temp = outerRadius;\n outerRadius = innerRadius;\n innerRadius = temp;\n }\n\n const path = new CustomPath2D();\n\n if (outerRadius <= epsilon) {\n path.moveTo(x, y);\n } else if (deltaAngle >= pi2 - epsilon) {\n // 是个完整的圆环\n // Or is it a circle or annulus?\n path.moveTo(x + outerRadius * cos(startAngle), y + outerRadius * sin(startAngle));\n path.arc(x, y, outerRadius, startAngle, endAngle, !clockwise);\n if (innerRadius > epsilon) {\n path.moveTo(x + innerRadius * cos(endAngle), y + innerRadius * sin(endAngle));\n path.arc(x, y, innerRadius, endAngle, startAngle, clockwise);\n }\n } else {\n const xors = outerRadius * cos(startAngle);\n const yors = outerRadius * sin(startAngle);\n const xire = innerRadius * cos(endAngle);\n const yire = innerRadius * sin(endAngle);\n\n path.moveTo(x + xors, y + yors);\n path.arc(x, y, outerRadius, startAngle, endAngle, !clockwise);\n path.lineTo(x + xire, y + yire);\n path.arc(x, y, innerRadius, endAngle, startAngle, clockwise);\n path.closePath();\n }\n\n return path;\n }\n\n clone() {\n return new Arc({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return Arc.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createArc(attributes: IArcGraphicAttribute): IArc {\n return new Arc(attributes);\n}\n\n// addAttributeToPrototype(DefaultCircleStyle, Circle, PURE_STYLE_KEY);\n"]}
1
+ {"version":3,"sources":["../src/graphic/arc.ts"],"names":[],"mappings":"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","file":"arc.js","sourcesContent":["import type { AABBBounds, OBBBounds } from '@visactor/vutils';\nimport { pi2, sin, epsilon, abs, asin, clampAngleByRadian, isNumber, cos, sqrt, isArray } from '@visactor/vutils';\nimport type { IArc, IArcGraphicAttribute } from '../interface/graphic/arc';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { parsePadding } from '../common/utils';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport type { GraphicType } from '../interface';\nimport { ARC_NUMBER_TYPE } from './constants';\n\n/**\n * 部分代码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\nconst ARC_UPDATE_TAG_KEY = [\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'endAngle',\n 'cornerRadius',\n 'padAngle',\n 'padRadius',\n 'cap',\n ...GRAPHIC_UPDATE_TAG_KEY\n];\n\n/**\n * 圆形图元\n * 默认顺时针绘制\n */\nexport class Arc extends Graphic<IArcGraphicAttribute> implements IArc {\n type: GraphicType = 'arc';\n\n static NOWORK_ANIMATE_ATTR = {\n cap: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n // static parseCornerRadius(r: IArcGraphicAttribute['cornerRadius']) {\n // if (isArray(r)) {\n // if ((r as any[]).length === 1) {\n // const value = r[0];\n // return [value, value, value, value];\n // }\n\n // if ((r as any[]).length === 2) {\n // return [r[0], r[0], r[1], r[1]];\n // }\n\n // if ((r as any[]).length === 3) {\n // return [r[0], r[1], r[2], 0];\n // }\n\n // return (r as any[]).slice(0, 4);\n // }\n\n // return [r as string | number, r as string | number, r as string | number, r as string | number];\n // }\n\n // static isCornerRadiusEqual(oldR: IArcGraphicAttribute['cornerRadius'], newR: IArcGraphicAttribute['cornerRadius']) {\n // throw new Error('暂不支持');\n // if (oldR === newR) {\n // return true;\n // }\n\n // if (isArray(oldR) && !isArray(newR)) {\n // return (oldR as (string | number)[]).every(r => r === newR);\n // }\n\n // if (!isArray(oldR) && isArray(newR)) {\n // return (newR as (string | number)[]).every(r => r === oldR);\n // }\n\n // return arrayEqual(oldR as (string | number)[], newR as (string | number)[]);\n // }\n\n constructor(params: IArcGraphicAttribute) {\n super(params);\n this.numberType = ARC_NUMBER_TYPE;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n const { startAngle, endAngle, outerRadius, innerRadius } = this.attribute;\n return (\n this._validNumber(startAngle) &&\n this._validNumber(endAngle) &&\n this._validNumber(outerRadius) &&\n this._validNumber(innerRadius)\n );\n }\n\n getParsedCornerRadius() {\n const arcTheme = getTheme(this).arc;\n const {\n cornerRadius = arcTheme.cornerRadius,\n innerPadding = arcTheme.innerPadding,\n outerPadding = arcTheme.outerPadding\n } = this.attribute;\n let { outerRadius = arcTheme.outerRadius, innerRadius = arcTheme.innerRadius } = this.attribute;\n outerRadius += outerPadding;\n innerRadius -= innerPadding;\n if (cornerRadius === 0 || cornerRadius === '0%') {\n return 0;\n }\n const deltaRadius = Math.abs(outerRadius - innerRadius);\n const parseCR = (cornerRadius: number | string) => {\n return Math.min(\n isNumber(cornerRadius, true)\n ? (cornerRadius as number)\n : (deltaRadius * parseFloat(cornerRadius as string)) / 100,\n deltaRadius / 2\n );\n };\n if (isArray(cornerRadius)) {\n const crList = cornerRadius.map(cr => parseCR(cr) || 0);\n if (crList.length === 0) {\n return [crList[0], crList[0], crList[0], crList[0]];\n } else if (crList.length === 2) {\n return [crList[0], crList[1], crList[0], crList[1]];\n } else if (crList.length === 3) {\n crList.push(0);\n }\n return crList;\n }\n return parseCR(cornerRadius);\n }\n\n getParsedAngle() {\n const arcTheme = getTheme(this).arc;\n let { startAngle = arcTheme.startAngle, endAngle = arcTheme.endAngle } = this.attribute;\n const { cap = arcTheme.cap } = this.attribute;\n\n const sign = endAngle - startAngle >= 0 ? 1 : -1;\n const deltaAngle = endAngle - startAngle;\n\n startAngle = clampAngleByRadian(startAngle);\n endAngle = startAngle + deltaAngle;\n\n if (cap && abs(deltaAngle) < pi2 - epsilon) {\n let startCap = 1;\n let endCap = 1;\n if ((cap as boolean[]).length) {\n startCap = Number(cap[0]);\n endCap = Number(cap[1]);\n }\n let { outerRadius = arcTheme.outerRadius, innerRadius = arcTheme.innerRadius } = this.attribute;\n const { outerPadding = arcTheme.outerPadding, innerPadding = arcTheme.innerPadding } = this.attribute;\n outerRadius += outerPadding;\n innerRadius -= innerPadding;\n const capWidth = Math.abs(outerRadius - innerRadius) / 2;\n // 以外边界长度为准\n const capAngle = capWidth / outerRadius;\n\n if (capWidth > epsilon && outerRadius > epsilon) {\n return {\n startAngle: startAngle - sign * capAngle * startCap,\n endAngle: endAngle + sign * capAngle * endCap,\n sc: sign * capAngle * startCap,\n ec: sign * capAngle * endCap\n };\n }\n }\n\n return {\n startAngle: startAngle,\n endAngle: endAngle\n };\n }\n\n // 参考 https://github.com/d3/d3-shape/blob/main/src/arc.js\n getParsePadAngle(startAngle: number, endAngle: number) {\n const arcTheme = getTheme(this).arc;\n const {\n innerPadding = arcTheme.innerPadding,\n outerPadding = arcTheme.outerPadding,\n padAngle = arcTheme.padAngle\n } = this.attribute;\n let { outerRadius = arcTheme.outerRadius, innerRadius = arcTheme.innerRadius } = this.attribute;\n outerRadius += outerPadding;\n innerRadius -= innerPadding;\n\n const { padRadius = sqrt(outerRadius * outerRadius + innerRadius * innerRadius) } = this.attribute;\n const deltaAngle = abs(endAngle - startAngle);\n\n // Or is it a circular or annular sector?\n let outerStartAngle = startAngle;\n let outerEndAngle = endAngle;\n let innerStartAngle = startAngle;\n let innerEndAngle = endAngle;\n const halfPadAngle = padAngle / 2;\n let innerDeltaAngle = deltaAngle;\n let outerDeltaAngle = deltaAngle;\n\n // Apply padding? Note that since r1 ≥ r0, outerDeltaAngle ≥ innerDeltaAngle.\n if (halfPadAngle > epsilon && padRadius > epsilon) {\n const sign = endAngle > startAngle ? 1 : -1;\n\n let p0 = asin((Number(padRadius) / innerRadius) * sin(halfPadAngle));\n let p1 = asin((Number(padRadius) / outerRadius) * sin(halfPadAngle));\n if ((innerDeltaAngle -= p0 * 2) > epsilon) {\n p0 *= sign;\n innerStartAngle += p0;\n innerEndAngle -= p0;\n } else {\n innerDeltaAngle = 0;\n innerStartAngle = innerEndAngle = (startAngle + endAngle) / 2;\n }\n if ((outerDeltaAngle -= p1 * 2) > epsilon) {\n p1 *= sign;\n outerStartAngle += p1;\n outerEndAngle -= p1;\n } else {\n outerDeltaAngle = 0;\n outerStartAngle = outerEndAngle = (startAngle + endAngle) / 2;\n }\n\n return {\n outerStartAngle,\n outerEndAngle,\n innerStartAngle,\n innerEndAngle,\n innerDeltaAngle,\n outerDeltaAngle\n };\n }\n\n return {\n outerStartAngle,\n outerEndAngle,\n innerStartAngle,\n innerEndAngle,\n innerDeltaAngle,\n outerDeltaAngle\n };\n }\n\n protected doUpdateAABBBounds(full?: boolean): AABBBounds {\n const arcTheme = getTheme(this).arc;\n this._AABBBounds.clear();\n const attribute = this.attribute;\n const bounds = application.graphicService.updateArcAABBBounds(\n attribute,\n getTheme(this).arc,\n this._AABBBounds,\n full,\n this\n ) as AABBBounds;\n\n const { boundsPadding = arcTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n this.clearUpdateBoundTag();\n return bounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, ARC_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, ARC_UPDATE_TAG_KEY);\n }\n\n getDefaultAttribute(name: string) {\n const arcTheme = getTheme(this).arc;\n return arcTheme[name];\n }\n\n toCustomPath() {\n const x = 0;\n const y = 0;\n\n const attribute = this.attribute;\n const { startAngle, endAngle } = this.getParsedAngle();\n let innerRadius = attribute.innerRadius - (attribute.innerPadding || 0);\n let outerRadius = attribute.outerRadius - (attribute.outerPadding || 0);\n const deltaAngle = abs(endAngle - startAngle);\n const clockwise: boolean = endAngle > startAngle;\n\n if (outerRadius < innerRadius) {\n const temp = outerRadius;\n outerRadius = innerRadius;\n innerRadius = temp;\n }\n\n const path = new CustomPath2D();\n\n if (outerRadius <= epsilon) {\n path.moveTo(x, y);\n } else if (deltaAngle >= pi2 - epsilon) {\n // 是个完整的圆环\n // Or is it a circle or annulus?\n path.moveTo(x + outerRadius * cos(startAngle), y + outerRadius * sin(startAngle));\n path.arc(x, y, outerRadius, startAngle, endAngle, !clockwise);\n if (innerRadius > epsilon) {\n path.moveTo(x + innerRadius * cos(endAngle), y + innerRadius * sin(endAngle));\n path.arc(x, y, innerRadius, endAngle, startAngle, clockwise);\n }\n } else {\n const xors = outerRadius * cos(startAngle);\n const yors = outerRadius * sin(startAngle);\n const xire = innerRadius * cos(endAngle);\n const yire = innerRadius * sin(endAngle);\n\n path.moveTo(x + xors, y + yors);\n path.arc(x, y, outerRadius, startAngle, endAngle, !clockwise);\n path.lineTo(x + xire, y + yire);\n path.arc(x, y, innerRadius, endAngle, startAngle, clockwise);\n path.closePath();\n }\n\n return path;\n }\n\n clone() {\n return new Arc({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return Arc.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createArc(attributes: IArcGraphicAttribute): IArc {\n return new Arc(attributes);\n}\n\n// addAttributeToPrototype(DefaultCircleStyle, Circle, PURE_STYLE_KEY);\n"]}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.createArea = exports.Area = void 0;
6
6
 
7
- const graphic_1 = require("./graphic"), custom_path2d_1 = require("../common/custom-path2d"), utils_1 = require("../common/utils"), theme_1 = require("./theme"), application_1 = require("../application"), constants_1 = require("./constants"), AREA_UPDATE_TAG_KEY = [ "segments", "points", "curveType", ...graphic_1.GRAPHIC_UPDATE_TAG_KEY ];
7
+ const graphic_1 = require("./graphic"), custom_path2d_1 = require("../common/custom-path2d"), utils_1 = require("../common/utils"), theme_1 = require("./theme"), application_1 = require("../application"), constants_1 = require("./constants"), AREA_UPDATE_TAG_KEY = [ "segments", "points", "curveType", "curveTension", ...graphic_1.GRAPHIC_UPDATE_TAG_KEY ];
8
8
 
9
9
  class Area extends graphic_1.Graphic {
10
10
  constructor(params) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphic/area.ts"],"names":[],"mappings":"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","file":"area.js","sourcesContent":["import type { AABBBounds, OBBBounds, IPointLike } from '@visactor/vutils';\nimport type { IArea, IAreaCacheItem, IAreaGraphicAttribute } from '../interface';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { parsePadding, pointsInterpolation } from '../common/utils';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { AREA_NUMBER_TYPE } from './constants';\n\nconst AREA_UPDATE_TAG_KEY = ['segments', 'points', 'curveType', ...GRAPHIC_UPDATE_TAG_KEY];\n\nexport class Area extends Graphic<IAreaGraphicAttribute> implements IArea {\n type: 'area' = 'area';\n\n static NOWORK_ANIMATE_ATTR = {\n segments: 1,\n curveType: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n cache?: IAreaCacheItem;\n\n constructor(params: IAreaGraphicAttribute) {\n super(params);\n this.numberType = AREA_NUMBER_TYPE;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n if (this.pathProxy) {\n return true;\n }\n const { points, segments } = this.attribute;\n if (segments) {\n if (segments.length === 0) {\n return false;\n }\n return true;\n } else if (points) {\n if (points.length === 0) {\n return false;\n }\n return true;\n }\n return false;\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n const areaTheme = getTheme(this).area;\n this._AABBBounds.clear();\n\n const attribute = this.attribute;\n const bounds = application.graphicService.updateAreaAABBBounds(\n attribute,\n getTheme(this).area,\n this._AABBBounds,\n this\n ) as AABBBounds;\n\n const { boundsPadding = areaTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n return bounds;\n }\n // private tryUpdateAABBBoundsByPoints(): AABBBounds {\n // const areaTheme = getTheme(this).area;\n // const { points = areaTheme.points } = this.attribute;\n // const b = this._AABBBounds;\n // points.forEach(p => {\n // b.add(p.x, p.y);\n // b.add(p.x1 ?? p.x, p.y1 ?? p.y); //面积图特殊性:由三个值构成,横向面积图,x1会省略;纵向面积图,y1会省略\n // });\n // const {\n // x = areaTheme.x,\n // y = areaTheme.y,\n // dx = areaTheme.dx,\n // dy = areaTheme.dy,\n // scaleX = areaTheme.scaleX,\n // scaleY = areaTheme.scaleY,\n // angle = areaTheme.angle\n // } = this.attribute;\n // // 合并shadowRoot的bounds\n // this.combindShadowAABBBounds(this._AABBBounds);\n // // TODO 加上锚点\n // transformBounds(b, x, y, scaleX, scaleY, angle);\n // this._AABBBounds.translate(dx, dy);\n // return b;\n // }\n // private tryUpdateAABBBoundsBySegments(): AABBBounds {\n // const areaTheme = getTheme(this).area;\n // const { segments = areaTheme.segments } = this.attribute;\n // const b = this._AABBBounds;\n // segments.forEach(s => {\n // s.points.forEach(p => {\n // b.add(p.x, p.y);\n // b.add(p.x1 ?? p.x, p.y1 ?? p.y); //面积图特殊性:由三个值构成,横向面积图,x1会省略;纵向面积图,y1会省略\n // });\n // });\n // const {\n // x = areaTheme.x,\n // y = areaTheme.y,\n // dx = areaTheme.dx,\n // dy = areaTheme.dy,\n // scaleX = areaTheme.scaleX,\n // scaleY = areaTheme.scaleY,\n // angle = areaTheme.angle\n // } = this.attribute;\n // // 合并shadowRoot的bounds\n // this.combindShadowAABBBounds(this._AABBBounds);\n // // TODO 加上锚点\n // transformBounds(b, x, y, scaleX, scaleY, angle);\n // this._AABBBounds.translate(dx, dy);\n // return b;\n // }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n protected _interpolate(key: string, ratio: number, lastStepVal: any, nextStepVal: any, nextAttributes: any): void {\n if (key === 'points') {\n (nextAttributes as any).points = pointsInterpolation(lastStepVal, nextStepVal, ratio);\n }\n }\n\n getDefaultAttribute(name: string) {\n const areaTheme = getTheme(this).area;\n return areaTheme[name];\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, AREA_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, AREA_UPDATE_TAG_KEY);\n }\n\n toCustomPath() {\n const path = new CustomPath2D();\n const attribute = this.attribute;\n const segments = attribute.segments;\n\n const parsePoints = (points: IPointLike[]) => {\n if (points && points.length) {\n let isFirst = true;\n const basePoints: IPointLike[] = [];\n points.forEach(point => {\n if (point.defined === false) {\n return;\n }\n if (isFirst) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n basePoints.push({ x: point.x1 ?? point.x, y: point.y1 ?? point.y });\n\n isFirst = false;\n });\n\n if (basePoints.length) {\n for (let i = basePoints.length - 1; i >= 0; i--) {\n path.lineTo(basePoints[i].x, basePoints[i].y);\n }\n\n path.closePath();\n }\n }\n };\n\n if (attribute.points) {\n parsePoints(attribute.points);\n } else if (segments && segments.length) {\n segments.forEach(seg => {\n parsePoints(seg.points);\n });\n }\n\n return path;\n }\n\n clone() {\n return new Area({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return Area.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createArea(attributes: IAreaGraphicAttribute): IArea {\n return new Area(attributes);\n}\n"]}
1
+ {"version":3,"sources":["../src/graphic/area.ts"],"names":[],"mappings":"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","file":"area.js","sourcesContent":["import type { AABBBounds, OBBBounds, IPointLike } from '@visactor/vutils';\nimport type { IArea, IAreaCacheItem, IAreaGraphicAttribute } from '../interface';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { parsePadding, pointsInterpolation } from '../common/utils';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { AREA_NUMBER_TYPE } from './constants';\n\nconst AREA_UPDATE_TAG_KEY = ['segments', 'points', 'curveType', 'curveTension', ...GRAPHIC_UPDATE_TAG_KEY];\n\nexport class Area extends Graphic<IAreaGraphicAttribute> implements IArea {\n type: 'area' = 'area';\n\n static NOWORK_ANIMATE_ATTR = {\n segments: 1,\n curveType: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n cache?: IAreaCacheItem;\n\n constructor(params: IAreaGraphicAttribute) {\n super(params);\n this.numberType = AREA_NUMBER_TYPE;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n if (this.pathProxy) {\n return true;\n }\n const { points, segments } = this.attribute;\n if (segments) {\n if (segments.length === 0) {\n return false;\n }\n return true;\n } else if (points) {\n if (points.length === 0) {\n return false;\n }\n return true;\n }\n return false;\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n const areaTheme = getTheme(this).area;\n this._AABBBounds.clear();\n\n const attribute = this.attribute;\n const bounds = application.graphicService.updateAreaAABBBounds(\n attribute,\n getTheme(this).area,\n this._AABBBounds,\n this\n ) as AABBBounds;\n\n const { boundsPadding = areaTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n return bounds;\n }\n // private tryUpdateAABBBoundsByPoints(): AABBBounds {\n // const areaTheme = getTheme(this).area;\n // const { points = areaTheme.points } = this.attribute;\n // const b = this._AABBBounds;\n // points.forEach(p => {\n // b.add(p.x, p.y);\n // b.add(p.x1 ?? p.x, p.y1 ?? p.y); //面积图特殊性:由三个值构成,横向面积图,x1会省略;纵向面积图,y1会省略\n // });\n // const {\n // x = areaTheme.x,\n // y = areaTheme.y,\n // dx = areaTheme.dx,\n // dy = areaTheme.dy,\n // scaleX = areaTheme.scaleX,\n // scaleY = areaTheme.scaleY,\n // angle = areaTheme.angle\n // } = this.attribute;\n // // 合并shadowRoot的bounds\n // this.combindShadowAABBBounds(this._AABBBounds);\n // // TODO 加上锚点\n // transformBounds(b, x, y, scaleX, scaleY, angle);\n // this._AABBBounds.translate(dx, dy);\n // return b;\n // }\n // private tryUpdateAABBBoundsBySegments(): AABBBounds {\n // const areaTheme = getTheme(this).area;\n // const { segments = areaTheme.segments } = this.attribute;\n // const b = this._AABBBounds;\n // segments.forEach(s => {\n // s.points.forEach(p => {\n // b.add(p.x, p.y);\n // b.add(p.x1 ?? p.x, p.y1 ?? p.y); //面积图特殊性:由三个值构成,横向面积图,x1会省略;纵向面积图,y1会省略\n // });\n // });\n // const {\n // x = areaTheme.x,\n // y = areaTheme.y,\n // dx = areaTheme.dx,\n // dy = areaTheme.dy,\n // scaleX = areaTheme.scaleX,\n // scaleY = areaTheme.scaleY,\n // angle = areaTheme.angle\n // } = this.attribute;\n // // 合并shadowRoot的bounds\n // this.combindShadowAABBBounds(this._AABBBounds);\n // // TODO 加上锚点\n // transformBounds(b, x, y, scaleX, scaleY, angle);\n // this._AABBBounds.translate(dx, dy);\n // return b;\n // }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n protected _interpolate(key: string, ratio: number, lastStepVal: any, nextStepVal: any, nextAttributes: any): void {\n if (key === 'points') {\n (nextAttributes as any).points = pointsInterpolation(lastStepVal, nextStepVal, ratio);\n }\n }\n\n getDefaultAttribute(name: string) {\n const areaTheme = getTheme(this).area;\n return areaTheme[name];\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, AREA_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, AREA_UPDATE_TAG_KEY);\n }\n\n toCustomPath() {\n const path = new CustomPath2D();\n const attribute = this.attribute;\n const segments = attribute.segments;\n\n const parsePoints = (points: IPointLike[]) => {\n if (points && points.length) {\n let isFirst = true;\n const basePoints: IPointLike[] = [];\n points.forEach(point => {\n if (point.defined === false) {\n return;\n }\n if (isFirst) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n basePoints.push({ x: point.x1 ?? point.x, y: point.y1 ?? point.y });\n\n isFirst = false;\n });\n\n if (basePoints.length) {\n for (let i = basePoints.length - 1; i >= 0; i--) {\n path.lineTo(basePoints[i].x, basePoints[i].y);\n }\n\n path.closePath();\n }\n }\n };\n\n if (attribute.points) {\n parsePoints(attribute.points);\n } else if (segments && segments.length) {\n segments.forEach(seg => {\n parsePoints(seg.points);\n });\n }\n\n return path;\n }\n\n clone() {\n return new Area({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return Area.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createArea(attributes: IAreaGraphicAttribute): IArea {\n return new Area(attributes);\n}\n"]}
@@ -159,7 +159,8 @@ exports.DefaultArcAttribute = Object.assign(Object.assign({}, exports.DefaultAtt
159
159
  segments: [],
160
160
  curveType: "linear",
161
161
  clipRange: 1,
162
- closePath: !1
162
+ closePath: !1,
163
+ curveTension: 1
163
164
  }), exports.DefaultCircleAttribute = Object.assign(Object.assign({}, exports.DefaultAttribute), {
164
165
  radius: 1,
165
166
  startAngle: 0,
@@ -190,7 +191,8 @@ exports.DefaultArcAttribute = Object.assign(Object.assign({}, exports.DefaultAtt
190
191
  curveType: "linear",
191
192
  clipRange: 1,
192
193
  clipRangeByDimension: "default",
193
- closePath: !1
194
+ closePath: !1,
195
+ curveTension: 1
194
196
  }), exports.DefaultPathAttribute = Object.assign(Object.assign({}, exports.DefaultAttribute), {
195
197
  path: new custom_path2d_1.CustomPath2D,
196
198
  customPath: () => {