@visactor/vrender 0.9.2-fill-stroke.5 → 0.9.2-fill-stroke.6

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 (82) hide show
  1. package/cjs/allocator/constants.js +2 -1
  2. package/cjs/animate/default-ticker.js +1 -2
  3. package/cjs/common/custom-path2d.js +2 -1
  4. package/cjs/common/generator.js +1 -2
  5. package/cjs/common/seg-context.js +1 -1
  6. package/cjs/common/sort.js +1 -1
  7. package/cjs/common/split-path.js +1 -1
  8. package/cjs/common/store.js +1 -1
  9. package/cjs/common/text.js +1 -1
  10. package/cjs/common/utils.js +1 -1
  11. package/cjs/core/application.js +1 -1
  12. package/cjs/core/camera.js +1 -1
  13. package/cjs/core/constants.js +1 -1
  14. package/cjs/core/core-modules.js +1 -1
  15. package/cjs/core/global-module.js +1 -2
  16. package/cjs/core/global.js +1 -1
  17. package/cjs/core/graphic-utils.js +1 -1
  18. package/cjs/core/index.js +1 -1
  19. package/cjs/core/interface.js +1 -1
  20. package/cjs/core/layer-service.js +1 -1
  21. package/cjs/core/layer.js +1 -1
  22. package/cjs/core/light.js +1 -1
  23. package/cjs/core/stage.js +1 -1
  24. package/cjs/core/window.js +1 -1
  25. package/cjs/event/constant.js +2 -1
  26. package/cjs/event/event-manager.js +1 -1
  27. package/cjs/event/event-system.js +1 -1
  28. package/cjs/event/event-target.js +1 -1
  29. package/cjs/event/index.js +1 -1
  30. package/cjs/event/interface.js +1 -1
  31. package/cjs/event/type.js +1 -1
  32. package/cjs/event/util.js +1 -1
  33. package/cjs/graphic/graphic.js +2 -2
  34. package/cjs/graphic/graphic.js.map +1 -1
  35. package/cjs/index.d.ts +1 -2
  36. package/cjs/index.js +2 -18
  37. package/cjs/index.js.map +1 -1
  38. package/cjs/render/contributions/render/text-render.js +2 -2
  39. package/cjs/render/contributions/render/text-render.js.map +1 -1
  40. package/dist/index.js +1 -1
  41. package/dist/index.min.js +1 -1
  42. package/es/allocator/constants.js +2 -1
  43. package/es/animate/default-ticker.js +1 -2
  44. package/es/common/custom-path2d.js +2 -1
  45. package/es/common/generator.js +1 -2
  46. package/es/common/seg-context.js +1 -1
  47. package/es/common/sort.js +1 -1
  48. package/es/common/split-path.js +1 -1
  49. package/es/common/store.js +1 -1
  50. package/es/common/text.js +1 -1
  51. package/es/common/utils.js +1 -1
  52. package/es/core/application.js +1 -1
  53. package/es/core/camera.js +1 -1
  54. package/es/core/constants.js +1 -1
  55. package/es/core/core-modules.js +1 -1
  56. package/es/core/global-module.js +1 -2
  57. package/es/core/global.js +1 -1
  58. package/es/core/graphic-utils.js +1 -1
  59. package/es/core/index.js +1 -1
  60. package/es/core/interface.js +1 -1
  61. package/es/core/layer-service.js +1 -1
  62. package/es/core/layer.js +1 -1
  63. package/es/core/light.js +1 -1
  64. package/es/core/stage.js +1 -1
  65. package/es/core/window.js +1 -1
  66. package/es/event/constant.js +2 -1
  67. package/es/event/event-manager.js +1 -1
  68. package/es/event/event-system.js +1 -1
  69. package/es/event/event-target.js +1 -1
  70. package/es/event/index.js +1 -1
  71. package/es/event/interface.js +1 -1
  72. package/es/event/type.js +1 -1
  73. package/es/event/util.js +1 -1
  74. package/es/graphic/graphic.js +2 -2
  75. package/es/graphic/graphic.js.map +1 -1
  76. package/es/index.d.ts +1 -2
  77. package/es/index.js +1 -3
  78. package/es/index.js.map +1 -1
  79. package/es/render/contributions/render/text-render.js +2 -2
  80. package/es/render/contributions/render/text-render.js.map +1 -1
  81. package/es/tsconfig.tsbuildinfo +1 -1
  82. package/package.json +3 -3
@@ -7,4 +7,5 @@ exports.CanvasAllocate = Symbol.for("CanvasAllocate"), exports.RectAllocate = Sy
7
7
  exports.ArcAllocate = Symbol.for("ArcAllocate"), exports.AreaAllocate = Symbol.for("AreaAllocate"),
8
8
  exports.CircleAllocate = Symbol.for("CircleAllocate"), exports.LineAllocate = Symbol.for("LineAllocate"),
9
9
  exports.PathAllocate = Symbol.for("PathAllocate"), exports.SymbolAllocate = Symbol.for("SymbolAllocate"),
10
- exports.TextAllocate = Symbol.for("TextAllocate");
10
+ exports.TextAllocate = Symbol.for("TextAllocate");
11
+ //# sourceMappingURL=constants.js.map
@@ -10,5 +10,4 @@ exports.defaultTicker = new default_ticker_1.DefaultTicker, exports.defaultTicke
10
10
 
11
11
  const DEFAULT_TICKER_FPS = 60;
12
12
 
13
- exports.defaultTicker.setFPS(60);
14
- //# sourceMappingURL=default-ticker.js.map
13
+ exports.defaultTicker.setFPS(60);
@@ -329,4 +329,5 @@ function scale(current, sX, sY) {
329
329
  temp[3] = current[3], temp[4] = current[4], temp[5] = current[5], temp[6] = sX * current[6],
330
330
  temp[7] = sY * current[7]; else if ("h" === c || "H" === c) temp[1] = sX * current[1]; else if ("v" === c || "V" === c) temp[1] = sY * current[1]; else for (let i = 1, n = current.length; i < n; ++i) temp[i] = (i % 2 == 1 ? sX : sY) * current[i];
331
331
  return temp;
332
- }
332
+ }
333
+ //# sourceMappingURL=custom-path2d.js.map
@@ -10,5 +10,4 @@ class Generator {
10
10
  }
11
11
  }
12
12
 
13
- exports.Generator = Generator, Generator.auto_increment_id = 0;
14
- //# sourceMappingURL=generator.js.map
13
+ exports.Generator = Generator, Generator.auto_increment_id = 0;
@@ -92,4 +92,4 @@ class ReflectSegContext extends SegContext {
92
92
  }
93
93
 
94
94
  exports.ReflectSegContext = ReflectSegContext;
95
- //# sourceMappingURL=seg-context.js.map
95
+ //# sourceMappingURL=seg-context.js.map
@@ -98,4 +98,4 @@ Object.defineProperty(exports, "__esModule", {
98
98
  value: !0
99
99
  }), exports.findNextGraphic = exports.foreachAsync = exports.foreach = void 0, exports.foreach = foreach,
100
100
  exports.foreachAsync = foreachAsync, exports.findNextGraphic = findNextGraphic;
101
- //# sourceMappingURL=sort.js.map
101
+ //# sourceMappingURL=sort.js.map
@@ -269,4 +269,4 @@ const splitPath = (path, count) => {
269
269
  };
270
270
 
271
271
  exports.splitPath = splitPath;
272
- //# sourceMappingURL=split-path.js.map
272
+ //# sourceMappingURL=split-path.js.map
@@ -1,2 +1,2 @@
1
1
  class StageStore {}
2
- //# sourceMappingURL=store.js.map
2
+ //# sourceMappingURL=store.js.map
@@ -22,4 +22,4 @@ Object.defineProperty(exports, "__esModule", {
22
22
  }), exports.textLayoutOffsetY = exports.textDrawOffsetX = exports.textDrawOffsetY = exports.getContextFont = void 0,
23
23
  exports.getContextFont = getContextFont, exports.textDrawOffsetY = textDrawOffsetY,
24
24
  exports.textDrawOffsetX = textDrawOffsetX, exports.textLayoutOffsetY = textLayoutOffsetY;
25
- //# sourceMappingURL=text.js.map
25
+ //# sourceMappingURL=text.js.map
@@ -131,4 +131,4 @@ function getAttributeFromDefaultAttrList(attr, key) {
131
131
  }
132
132
 
133
133
  exports.isTransformKey = isTransformKey, exports.getAttributeFromDefaultAttrList = getAttributeFromDefaultAttrList;
134
- //# sourceMappingURL=utils.js.map
134
+ //# sourceMappingURL=utils.js.map
@@ -3,4 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.ApplicationContribution = void 0, exports.ApplicationContribution = Symbol("ApplicationContribution");
6
- //# sourceMappingURL=application.js.map
6
+ //# sourceMappingURL=application.js.map
@@ -122,4 +122,4 @@ class OrthoCamera {
122
122
  }
123
123
 
124
124
  exports.OrthoCamera = OrthoCamera;
125
- //# sourceMappingURL=camera.js.map
125
+ //# sourceMappingURL=camera.js.map
@@ -5,4 +5,4 @@ Object.defineProperty(exports, "__esModule", {
5
5
  }), exports.LayerService = exports.GraphicUtil = exports.TransformUtil = void 0,
6
6
  exports.TransformUtil = Symbol.for("TransformUtil"), exports.GraphicUtil = Symbol.for("GraphicUtil"),
7
7
  exports.LayerService = Symbol.for("LayerService");
8
- //# sourceMappingURL=constants.js.map
8
+ //# sourceMappingURL=constants.js.map
@@ -13,4 +13,4 @@ exports.default = new inversify_1.ContainerModule((bind => {
13
13
  bind(graphic_utils_1.DefaultTransformUtil).toSelf().inSingletonScope(), bind(constants_1.TransformUtil).toService(graphic_utils_1.DefaultTransformUtil),
14
14
  bind(layer_service_1.DefaultLayerService).toSelf().inSingletonScope(), bind(constants_1.LayerService).toService(layer_service_1.DefaultLayerService);
15
15
  }));
16
- //# sourceMappingURL=core-modules.js.map
16
+ //# sourceMappingURL=core-modules.js.map
@@ -16,5 +16,4 @@ const inversify_1 = require("inversify"), interface_1 = require("../interface"),
16
16
  }));
17
17
 
18
18
  container_1.container.load(globalModule), container_1.container.load(modules_1.default),
19
- exports.global = container_1.container.get(interface_1.Global), exports.default = globalModule;
20
- //# sourceMappingURL=global-module.js.map
19
+ exports.global = container_1.container.get(interface_1.Global), exports.default = globalModule;
@@ -120,4 +120,4 @@ let DefaultGlobal = class {
120
120
  DefaultGlobal = __decorate([ (0, inversify_1.injectable)(), __param(0, (0, inversify_1.inject)(contribution_provider_1.ContributionProvider)), __param(0, (0,
121
121
  inversify_1.named)(interface_1.EnvContribution)), __metadata("design:paramtypes", [ Object ]) ], DefaultGlobal),
122
122
  exports.DefaultGlobal = DefaultGlobal;
123
- //# sourceMappingURL=global.js.map
123
+ //# sourceMappingURL=global.js.map
@@ -123,4 +123,4 @@ let DefaultTransformUtil = class {
123
123
 
124
124
  DefaultTransformUtil = __decorate([ (0, inversify_1.injectable)(), __metadata("design:paramtypes", []) ], DefaultTransformUtil),
125
125
  exports.DefaultTransformUtil = DefaultTransformUtil;
126
- //# sourceMappingURL=graphic-utils.js.map
126
+ //# sourceMappingURL=graphic-utils.js.map
package/cjs/core/index.js CHANGED
@@ -22,4 +22,4 @@ __exportStar(require("./layer"), exports), __exportStar(require("./stage"), expo
22
22
  __exportStar(require("./graphic-utils"), exports), __exportStar(require("./contributions"), exports),
23
23
  __exportStar(require("./layer-service"), exports), __exportStar(require("./constants"), exports),
24
24
  __exportStar(require("./interface"), exports);
25
- //# sourceMappingURL=index.js.map
25
+ //# sourceMappingURL=index.js.map
@@ -3,4 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  });
6
- //# sourceMappingURL=interface.js.map
6
+ //# sourceMappingURL=interface.js.map
@@ -47,4 +47,4 @@ let DefaultLayerService = class {
47
47
  DefaultLayerService = __decorate([ (0, inversify_1.injectable)(), __param(0, (0,
48
48
  inversify_1.inject)(interface_1.Global)), __metadata("design:paramtypes", [ Object ]) ], DefaultLayerService),
49
49
  exports.DefaultLayerService = DefaultLayerService;
50
- //# sourceMappingURL=layer-service.js.map
50
+ //# sourceMappingURL=layer-service.js.map
package/cjs/core/layer.js CHANGED
@@ -129,4 +129,4 @@ class Layer extends group_1.Group {
129
129
  }
130
130
 
131
131
  exports.Layer = Layer;
132
- //# sourceMappingURL=layer.js.map
132
+ //# sourceMappingURL=layer.js.map
package/cjs/core/light.js CHANGED
@@ -25,4 +25,4 @@ class DirectionalLight {
25
25
  }
26
26
 
27
27
  exports.DirectionalLight = DirectionalLight;
28
- //# sourceMappingURL=light.js.map
28
+ //# sourceMappingURL=light.js.map
package/cjs/core/stage.js CHANGED
@@ -365,4 +365,4 @@ class Stage extends graphic_1.Group {
365
365
  }
366
366
 
367
367
  exports.Stage = Stage;
368
- //# sourceMappingURL=stage.js.map
368
+ //# sourceMappingURL=stage.js.map
@@ -113,4 +113,4 @@ let DefaultWindow = class {
113
113
  __decorate([ (0, inversify_1.postConstruct)(), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], DefaultWindow.prototype, "postInit", null),
114
114
  DefaultWindow = __decorate([ (0, inversify_1.injectable)(), __param(0, (0, inversify_1.inject)(interface_1.Global)), __metadata("design:paramtypes", [ Object ]) ], DefaultWindow),
115
115
  exports.DefaultWindow = DefaultWindow;
116
- //# sourceMappingURL=window.js.map
116
+ //# sourceMappingURL=window.js.map
@@ -2,4 +2,5 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- }), exports.WILDCARD = void 0, exports.WILDCARD = "*";
5
+ }), exports.WILDCARD = void 0, exports.WILDCARD = "*";
6
+ //# sourceMappingURL=constant.js.map
@@ -272,4 +272,4 @@ class EventManager {
272
272
  }
273
273
 
274
274
  exports.EventManager = EventManager;
275
- //# sourceMappingURL=event-manager.js.map
275
+ //# sourceMappingURL=event-manager.js.map
@@ -199,4 +199,4 @@ class EventSystem {
199
199
  }
200
200
 
201
201
  exports.EventSystem = EventSystem;
202
- //# sourceMappingURL=event-system.js.map
202
+ //# sourceMappingURL=event-system.js.map
@@ -19,4 +19,4 @@ exports.EventTarget = {
19
19
  return this.dispatchEvent(new federated_event_1.CustomEvent(eventName, object));
20
20
  }
21
21
  };
22
- //# sourceMappingURL=event-target.js.map
22
+ //# sourceMappingURL=event-target.js.map
@@ -20,4 +20,4 @@ Object.defineProperty(exports, "__esModule", {
20
20
  }), __exportStar(require("./federated-event"), exports), __exportStar(require("./event-manager"), exports),
21
21
  __exportStar(require("./event-target"), exports), __exportStar(require("./event-system"), exports),
22
22
  __exportStar(require("./extension"), exports), __exportStar(require("./interface"), exports);
23
- //# sourceMappingURL=index.js.map
23
+ //# sourceMappingURL=index.js.map
@@ -3,4 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  });
6
- //# sourceMappingURL=interface.js.map
6
+ //# sourceMappingURL=interface.js.map
package/cjs/event/type.js CHANGED
@@ -3,4 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  });
6
- //# sourceMappingURL=type.js.map
6
+ //# sourceMappingURL=type.js.map
package/cjs/event/util.js CHANGED
@@ -3,4 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.clock = void 0, exports.clock = "object" == typeof performance && performance.now ? performance : Date;
6
- //# sourceMappingURL=util.js.map
6
+ //# sourceMappingURL=util.js.map
@@ -450,14 +450,14 @@ class Graphic extends node_tree_1.Node {
450
450
  defaultInterpolate(nextStepVal, lastStepVal, key, nextAttributes, nextParsedProps, ratio) {
451
451
  if (Number.isFinite(nextStepVal)) return nextAttributes[key] = lastStepVal + (nextStepVal - lastStepVal) * ratio,
452
452
  !0;
453
- if ("fillColor" === key) {
453
+ if ("fill" === key) {
454
454
  nextParsedProps || (nextParsedProps = {});
455
455
  const fillColorArray = nextParsedProps.fillColorArray, color = (0, interpolate_1.interpolateColor)(lastStepVal, null != fillColorArray ? fillColorArray : nextStepVal, ratio, !1, ((fArray, tArray) => {
456
456
  nextParsedProps.fillColorArray = tArray;
457
457
  }));
458
458
  return color && (nextAttributes[key] = color), !0;
459
459
  }
460
- if ("strokeColor" === key) {
460
+ if ("stroke" === key) {
461
461
  nextParsedProps || (nextParsedProps = {});
462
462
  const strokeColorArray = nextParsedProps.strokeColorArray, color = (0, interpolate_1.interpolateColor)(lastStepVal, null != strokeColorArray ? strokeColorArray : nextStepVal, ratio, !1, ((fArray, tArray) => {
463
463
  nextParsedProps.strokeColorArray = tArray;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/graphic/graphic.ts"],"names":[],"mappings":"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","file":"graphic.js","sourcesContent":["import { ICustomPath2D } from './../interface/path';\nimport {\n AABBBounds,\n OBBBounds,\n Matrix,\n normalTransform,\n Point,\n isNil,\n Dict,\n IPointLike,\n has,\n isString,\n IAABBBounds,\n isValidUrl,\n isBase64\n} from '@visactor/vutils';\nimport {\n GraphicType,\n IAnimateConfig,\n IGraphicAttribute,\n IGraphic,\n IGraphicAnimateParams,\n IGraphicJson,\n ISetAttributeContext,\n ITransform\n} from '../interface/graphic';\nimport { Node } from './node-tree';\nimport {\n IAnimate,\n IAnimateTarget,\n IGlyphGraphicAttribute,\n IGroup,\n ILayer,\n IShadowRoot,\n IStage,\n IStep,\n ISubAnimate\n} from '../interface';\nimport { EventTarget, CustomEvent } from '../event';\nimport { DefaultTransform } from './config';\nimport { IPickerService } from '../picker';\nimport { application } from '../application';\nimport { Animate, DefaultStateAnimateConfig } from '../animate';\nimport { interpolateColor } from '../color-string/interpolate';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { getTheme } from './theme';\nimport { ResourceLoader } from '../resource-loader/loader';\nimport { AttributeUpdateType, IContainPointMode, UpdateTag } from '../common/enums';\n\n/**\n * pathProxy参考自zrender\n * BSD 3-Clause License\n\n Copyright (c) 2017, Baidu Inc.\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst tempMatrix = new Matrix();\n\nexport const PURE_STYLE_KEY = [\n 'stroke',\n 'opacity',\n 'strokeOpacity',\n 'lineDash',\n 'lineDashOffset',\n 'lineCap',\n 'lineJoin',\n 'miterLimit',\n 'fill',\n 'fillOpacity'\n];\n\nexport const GRAPHIC_UPDATE_TAG_KEY = [\n 'lineWidth',\n 'lineCap',\n 'lineJoin',\n 'miterLimit',\n 'scaleX',\n 'scaleY',\n 'angle',\n 'anchor'\n];\n\nconst tempConstantXYKey = ['x', 'y'];\nconst tempConstantScaleXYKey = ['scaleX', 'scaleY'];\nconst tempConstantAngleKey = ['angle'];\n\nconst point = new Point();\n\nexport type GraphicReleaseStatus = 'released' | 'willRelease';\n\n/**\n * globalTransMatrix更新逻辑\n * 1. group的transform修改,会下发到所有下层group,将所有下层的tag修改\n * 2. 叶子graphic每次获取globalTransMatrix都重新计算\n * 3. 所有节点的transform修改,或者globalTransform修改,都会下发到自己的shadowRoot上\n */\n\nexport abstract class Graphic<T extends Partial<IGraphicAttribute> = Partial<IGraphicAttribute>>\n extends Node\n implements IGraphic<T>, IAnimateTarget\n{\n /**\n * Mixes all enumerable properties and methods from a source object to Element.\n * @param source - The source of properties and methods to mix in.\n */\n static mixin(source: Dict<any>): void {\n // in ES8/ES2017, this would be really easy:\n // Object.defineProperties(Element.prototype, Object.getOwnPropertyDescriptors(source));\n\n // get all the enumerable property keys\n const keys = Object.keys(source);\n\n // loop through properties\n for (let i = 0; i < keys.length; ++i) {\n const propertyName = keys[i];\n\n // Set the property using the property descriptor - this works for accessors and normal value properties\n Object.defineProperty(\n Graphic.prototype,\n propertyName,\n Object.getOwnPropertyDescriptor(source, propertyName) as PropertyDecorator\n );\n }\n }\n declare onBeforeAttributeUpdate?: (\n val: any,\n attributes: Partial<T>,\n key: null | string | string[],\n context?: ISetAttributeContext\n ) => T | undefined;\n declare parent: any;\n\n declare resources?: Map<\n string,\n { state: 'init' | 'loading' | 'success' | 'fail'; data?: HTMLImageElement | HTMLCanvasElement }\n >;\n declare backgroundImg?: boolean;\n\n declare type: GraphicType;\n declare prefixed: string;\n declare numberType: number;\n declare isContainer?: boolean;\n declare valid: boolean;\n declare stage?: IStage;\n declare layer?: ILayer;\n declare incremental?: number;\n declare glyphHost?: IGraphic<IGlyphGraphicAttribute>;\n declare _onSetStage?: (g: IGraphic, stage: IStage, layer: ILayer) => void;\n // declare _beforeAttributeUpdate?: (key: string | string, value: any) => void;\n // 标记是否是在3d模式下\n declare in3dMode?: boolean;\n\n // aabbBounds,所有图形都需要有,所以初始化即赋值\n protected declare _AABBBounds: AABBBounds;\n get AABBBounds(): AABBBounds {\n return this.tryUpdateAABBBounds(this.attribute.boundsMode === 'imprecise');\n }\n // 具有旋转的包围盒,部分图元需要,动态初始化\n protected declare _OBBBounds?: OBBBounds;\n get OBBBounds(): OBBBounds {\n return this.tryUpdateOBBBounds();\n }\n protected declare _globalAABBBounds: AABBBounds;\n // 全局包围盒,部分图元需要,动态初始化,建议使用AABBBounds\n get globalAABBBounds(): AABBBounds {\n return this.tryUpdateGlobalAABBBounds();\n }\n protected declare _transMatrix: Matrix;\n get transMatrix(): Matrix {\n return this.tryUpdateLocalTransMatrix(true);\n }\n protected declare _globalTransMatrix: Matrix;\n get globalTransMatrix(): Matrix {\n return this.tryUpdateGlobalTransMatrix(true);\n }\n protected declare _updateTag: number;\n\n // 上次更新的stamp\n declare stamp?: number;\n\n declare attribute: T;\n\n declare shadowRoot?: IShadowRoot;\n\n declare releaseStatus?: GraphicReleaseStatus;\n\n /** 记录state对应的图形属性 */\n declare states?: Record<string, Partial<T>>;\n /** 当前state值 */\n declare currentStates?: string[];\n /** TODO: state更新对应的动画配置 */\n declare stateAnimateConfig?: IAnimateConfig;\n /** 记录应用state之前,attribute对应的原始图形属性 */\n declare normalAttrs?: Partial<T>;\n /** 获取state图形属性的方法 */\n declare stateProxy?: (stateName: string, targetStates?: string[]) => T;\n declare animates: Map<string | number, IAnimate>;\n\n declare nextAttrs?: T;\n declare prevAttrs?: T;\n declare finalAttrs?: T;\n\n declare pathProxy?: ICustomPath2D;\n\n constructor(params: T = {} as T) {\n super();\n this._AABBBounds = new AABBBounds();\n this._updateTag = UpdateTag.INIT;\n this.attribute = params;\n this.valid = this.isValid();\n if (params.background) {\n this.loadImage(params.background, true);\n }\n }\n\n setMode(mode: '2d' | '3d') {\n mode === '3d' ? this.set3dMode() : this.set2dMode();\n }\n\n set3dMode() {\n this.in3dMode = true;\n }\n set2dMode() {\n this.in3dMode = false;\n }\n getOffsetXY(attr?: ITransform, includeScroll: boolean = false) {\n const { dx = attr.dx, dy = attr.dy } = this.attribute;\n if (includeScroll && this.parent) {\n const groupTheme = getTheme(this.parent).group;\n const { scrollX = groupTheme.scrollX, scrollY = groupTheme.scrollY } = this.parent.attribute;\n point.x = dx + scrollX;\n point.y = dy + scrollY;\n } else {\n point.x = dx;\n point.y = dy;\n }\n return point;\n }\n\n protected tryUpdateAABBBounds(full?: boolean): AABBBounds {\n if (!this.shouldUpdateAABBBounds()) {\n return this._AABBBounds;\n }\n if (!this.valid) {\n this._AABBBounds.clear();\n return this._AABBBounds;\n }\n\n application.graphicService.beforeUpdateAABBBounds(this, this.stage, true, this._AABBBounds);\n const bounds = this.doUpdateAABBBounds(full);\n application.graphicService.afterUpdateAABBBounds(this, this.stage, this._AABBBounds, this, true);\n return bounds;\n }\n\n protected combindShadowAABBBounds(bounds: IAABBBounds) {\n // 合并shadowRoot的Bounds\n if (this.shadowRoot) {\n const b = this.shadowRoot.AABBBounds.clone();\n bounds.union(b);\n }\n }\n\n protected abstract doUpdateAABBBounds(full?: boolean): AABBBounds;\n\n protected abstract tryUpdateOBBBounds(): OBBBounds;\n\n protected tryUpdateGlobalAABBBounds(): AABBBounds {\n if (!this._globalAABBBounds) {\n this._globalAABBBounds = this._AABBBounds.clone();\n } else {\n this._globalAABBBounds.setValue(\n this._AABBBounds.x1,\n this._AABBBounds.y1,\n this._AABBBounds.x2,\n this._AABBBounds.y2\n );\n }\n // 使用parent的grloalAABBBounds\n // todo: 考虑是否需要性能优化\n if (this.parent) {\n this._globalAABBBounds.transformWithMatrix((this.parent as IGroup).globalTransMatrix);\n }\n return this._globalAABBBounds;\n }\n\n /**\n * 这里都是叶子节点的UpdateGlobalTransMatrix函数,只要走进来就直接计算\n * @param clearTag\n * @returns\n */\n protected tryUpdateGlobalTransMatrix(clearTag: boolean = true): Matrix {\n if (!this._globalTransMatrix) {\n this._globalTransMatrix = this.parent\n ? (this.parent as IGroup).globalTransMatrix.clone()\n : this.transMatrix.clone();\n } else if (this.parent) {\n const m = (this.parent as IGroup).globalTransMatrix;\n this._globalTransMatrix.setValue(m.a, m.b, m.c, m.d, m.e, m.f);\n }\n if (this.shouldUpdateGlobalMatrix()) {\n this.doUpdateGlobalMatrix();\n }\n return this._globalTransMatrix;\n }\n\n shouldUpdateGlobalMatrix(): boolean {\n return true;\n }\n\n protected tryUpdateLocalTransMatrix(clearTag: boolean = true) {\n if (!this._transMatrix) {\n this._transMatrix = new Matrix();\n }\n if (this.shouldUpdateLocalMatrix()) {\n this.doUpdateLocalMatrix();\n clearTag && this.clearUpdateLocalPositionTag();\n }\n return this._transMatrix;\n }\n\n shouldUpdateAABBBounds(): boolean {\n // 如果存在shadowRoot,那么判断shadowRoot是否需要更新\n if (this.shadowRoot) {\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS) || this.shadowRoot.shouldUpdateAABBBounds();\n }\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS);\n }\n\n // 自身变化导致的AABBBounds的变化\n shouldSelfChangeUpdateAABBBounds(): boolean {\n // 如果存在shadowRoot,那么判断shadowRoot是否需要更新\n if (this.shadowRoot) {\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS) || this.shadowRoot.shouldUpdateAABBBounds();\n }\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS);\n }\n\n protected shouldUpdateLocalMatrix(): boolean {\n return !!(this._updateTag & UpdateTag.UPDATE_LOCAL_MATRIX);\n }\n\n isValid(): boolean {\n const attribute = this.attribute;\n return Number.isFinite((attribute.x ?? 0) + (attribute.y ?? 0));\n }\n\n protected _validNumber(num?: number) {\n return num == null || Number.isFinite(num);\n }\n\n shouldUpdateShape(): boolean {\n return !!(this._updateTag & UpdateTag.UPDATE_SHAPE);\n }\n clearUpdateShapeTag() {\n this._updateTag &= UpdateTag.CLEAR_SHAPE;\n }\n\n /**\n * 是否包含某个点(点需要是全局坐标系)\n * @param x\n * @param y\n * @param mode\n * @returns\n */\n containsPoint(x: number, y: number, mode: IContainPointMode, picker?: IPickerService): boolean {\n if (!picker) {\n return false;\n }\n if (mode === IContainPointMode.GLOBAL) {\n // 转换x,y更精准\n const point = new Point(x, y);\n if (this.parent) {\n this.parent.globalTransMatrix.transformPoint(point, point);\n }\n x = point.x;\n y = point.y;\n }\n return picker.containsPoint(this, { x, y });\n }\n\n setAttributes(params: Partial<T>, forceUpdateTag: boolean = false, context?: ISetAttributeContext) {\n params =\n (this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate(params, this.attribute, null, context)) || params;\n\n if (params.background) {\n this.loadImage(params.background, true);\n }\n\n this._setAttributes(params, forceUpdateTag, context);\n }\n\n _setAttributes(params: Partial<T>, forceUpdateTag: boolean = false, context?: ISetAttributeContext) {\n const keys = Object.keys(params);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n\n this.attribute[key] = params[key];\n }\n this.valid = this.isValid();\n // 没有设置shape&bounds的tag\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTags(keys))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.onAttributeUpdate(context);\n }\n\n setAttribute(key: string, value: any, forceUpdateTag?: boolean, context?: ISetAttributeContext) {\n const params =\n this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate({ [key]: value }, this.attribute, key, context);\n if (!params) {\n if (!isNil(this.normalAttrs?.[key])) {\n this.normalAttrs[key] = value;\n } else {\n this.attribute[key] = value;\n this.valid = this.isValid();\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTag(key))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.onAttributeUpdate(context);\n }\n } else {\n this._setAttributes(params, forceUpdateTag, context);\n }\n if (key === 'background') {\n this.loadImage(value, true);\n }\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n for (let i = 0; i < GRAPHIC_UPDATE_TAG_KEY.length; i++) {\n const attrKey = GRAPHIC_UPDATE_TAG_KEY[i];\n if (keys.indexOf(attrKey) !== -1) {\n return true;\n }\n }\n return false;\n }\n\n protected needUpdateTag(key: string): boolean {\n for (let i = 0; i < GRAPHIC_UPDATE_TAG_KEY.length; i++) {\n const attrKey = GRAPHIC_UPDATE_TAG_KEY[i];\n if (key === attrKey) {\n return true;\n }\n }\n return false;\n }\n\n initAttributes(params: T) {\n // this.setAttributes(params, true);\n const context = { type: AttributeUpdateType.INIT };\n params =\n (this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate(params, this.attribute, null, context)) || params;\n this.attribute = params;\n if (params.background) {\n this.loadImage(params.background, true);\n }\n this._updateTag = UpdateTag.INIT;\n this.onAttributeUpdate(context);\n }\n\n translate(x: number, y: number) {\n if (x === 0 && y === 0) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.TRANSLATE\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ x, y }, this.attribute, tempConstantXYKey, context);\n if (params) {\n x = params.x;\n y = params.y;\n delete params.x;\n delete params.y;\n this._setAttributes(params);\n }\n const attribute = this.attribute;\n const postMatrix = attribute.postMatrix;\n if (!postMatrix) {\n attribute.x = (attribute.x ?? DefaultTransform.x) + x;\n attribute.y = (attribute.y ?? DefaultTransform.y) + y;\n } else {\n application.transformUtil.fromMatrix(postMatrix, postMatrix).translate(x, y);\n }\n\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n translateTo(x: number, y: number) {\n const attribute = this.attribute;\n if (attribute.x === x && attribute.y === y) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.TRANSLATE_TO\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ x, y }, this.attribute, tempConstantXYKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n attribute.x = x;\n attribute.y = y;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n scale(scaleX: number, scaleY: number, scaleCenter?: IPointLike) {\n if (scaleX === 1 && scaleY === 1) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.SCALE\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ scaleX, scaleY, scaleCenter }, this.attribute, tempConstantScaleXYKey, context);\n if (params) {\n scaleX = params.scaleX;\n scaleY = params.scaleY;\n delete params.scaleX;\n delete params.scaleY;\n this._setAttributes(params);\n }\n const attribute = this.attribute;\n if (!scaleCenter) {\n attribute.scaleX = (attribute.scaleX ?? DefaultTransform.scaleX) * scaleX;\n attribute.scaleY = (attribute.scaleY ?? DefaultTransform.scaleY) * scaleY;\n } else {\n let { postMatrix } = this.attribute;\n if (!postMatrix) {\n postMatrix = new Matrix();\n attribute.postMatrix = postMatrix;\n }\n application.transformUtil.fromMatrix(postMatrix, postMatrix).scale(scaleX, scaleY, scaleCenter);\n }\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n scaleTo(scaleX: number, scaleY: number) {\n const attribute = this.attribute;\n if (attribute.scaleX === scaleX && attribute.scaleY === scaleY) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.SCALE_TO\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ scaleX, scaleY }, this.attribute, tempConstantScaleXYKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n attribute.scaleX = scaleX;\n attribute.scaleY = scaleY;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n rotate(angle: number) {\n if (angle === 0) {\n return this;\n }\n const context = { type: AttributeUpdateType.ROTATE };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate(angle, this.attribute, tempConstantAngleKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n const attribute = this.attribute;\n attribute.angle = (attribute.angle ?? DefaultTransform.angle) + angle;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n rotateTo(angle: number) {\n const attribute = this.attribute;\n if (attribute.angle === angle) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.ROTATE_TO\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate(angle, this.attribute, tempConstantAngleKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n attribute.angle = angle;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n skewTo(b: number, c: number) {\n return this;\n }\n\n animate(params?: IGraphicAnimateParams) {\n if (!this.animates) {\n this.animates = new Map();\n }\n const animate = new Animate(params?.id).bind(this);\n if (params) {\n const { onStart, onFrame, onEnd, onRemove } = params;\n onStart != null && animate.onStart(onStart);\n onFrame != null && animate.onFrame(onFrame);\n onEnd != null && animate.onEnd(onEnd);\n onRemove != null && animate.onRemove(onRemove);\n animate.interpolateFunc = params.interpolate;\n }\n this.animates.set(animate.id, animate);\n animate.onRemove(() => {\n this.animates.delete(animate.id);\n });\n\n return animate;\n }\n\n onAttributeUpdate(context?: ISetAttributeContext) {\n application.graphicService.onAttributeUpdate(this);\n this._emitCustomEvent('afterAttributeUpdate', context);\n }\n\n // hasListener(event: string) {\n // const prefix = this.prefixed;\n // var evt = prefix ? prefix + event : event;\n // return this._events[evt];\n // }\n\n update(d?: { bounds: boolean; trans: boolean }) {\n if (d) {\n d.bounds && this.tryUpdateAABBBounds(this.attribute.boundsMode === 'imprecise');\n d.trans && this.tryUpdateLocalTransMatrix();\n } else {\n this.tryUpdateAABBBounds(this.attribute.boundsMode === 'imprecise');\n this.tryUpdateLocalTransMatrix();\n }\n }\n\n hasState(stateName?: string) {\n if (!this.currentStates || !this.currentStates.length) {\n return false;\n }\n\n if (!isNil(stateName)) {\n return this.currentStates.includes(stateName);\n }\n\n return true;\n }\n getState(stateName: string) {\n return this.states?.[stateName];\n }\n\n applyStateAttrs(attrs: Partial<T>, stateNames: string[], hasAnimation?: boolean, isClear?: boolean) {\n if (hasAnimation) {\n const keys = Object.keys(attrs);\n const animateAttrs = isClear\n ? keys.reduce((res, key) => {\n res[key] = attrs[key] === undefined ? this.getDefaultAttribute(key) : attrs[key];\n\n return res;\n }, {})\n : attrs;\n const animate = this.animate();\n\n (animate as any).stateNames = stateNames;\n animate.to(\n animateAttrs,\n this.stateAnimateConfig?.duration ?? DefaultStateAnimateConfig.duration,\n this.stateAnimateConfig?.easing ?? DefaultStateAnimateConfig.easing\n );\n } else {\n this.setAttributes(attrs, false, { type: AttributeUpdateType.STATE });\n }\n }\n\n updateNormalAttrs(stateAttrs: Partial<T>) {\n const newNormalAttrs = {};\n if (this.normalAttrs) {\n Object.keys(stateAttrs).forEach(key => {\n if (key in this.normalAttrs) {\n newNormalAttrs[key] = this.normalAttrs[key];\n delete this.normalAttrs[key];\n } else {\n newNormalAttrs[key] = this.getNormalAttribute(key);\n }\n });\n Object.keys(this.normalAttrs).forEach(key => {\n stateAttrs[key] = this.normalAttrs[key];\n });\n } else {\n Object.keys(stateAttrs).forEach(key => {\n newNormalAttrs[key] = this.getNormalAttribute(key);\n });\n }\n\n this.normalAttrs = newNormalAttrs;\n }\n\n private getNormalAttribute(key: string) {\n let value = this.attribute[key];\n\n if (this.animates) {\n this.animates.forEach(animate => {\n if ((animate as any).stateNames) {\n const endProps = animate.getEndProps();\n\n if (has(endProps, key)) {\n value = endProps[key];\n }\n }\n });\n }\n\n return value;\n }\n\n clearStates(hasAnimation?: boolean) {\n if (this.hasState() && this.normalAttrs) {\n this.applyStateAttrs(this.normalAttrs, this.currentStates, hasAnimation, true);\n }\n\n this.normalAttrs = null;\n this.currentStates = [];\n }\n\n removeState(stateName: string, hasAnimation?: boolean) {\n const index = this.currentStates ? this.currentStates.indexOf(stateName) : -1;\n\n if (index >= 0) {\n const currentStates = this.currentStates.filter(state => state !== stateName);\n\n this.useStates(currentStates, hasAnimation);\n }\n }\n\n toggleState(stateName: string, hasAnimation?: boolean) {\n if (this.hasState(stateName)) {\n this.removeState(stateName, hasAnimation);\n } else {\n const index = this.currentStates ? this.currentStates.indexOf(stateName) : -1;\n if (index < 0) {\n const nextStates = this.currentStates ? this.currentStates.slice() : [];\n nextStates.push(stateName);\n this.useStates(nextStates, hasAnimation);\n }\n }\n }\n\n addState(stateName: string, keepCurrentStates?: boolean, hasAnimation?: boolean) {\n if (\n this.currentStates &&\n this.currentStates.includes(stateName) &&\n (keepCurrentStates || this.currentStates.length === 1)\n ) {\n return;\n }\n\n const newStates =\n keepCurrentStates && this.currentStates?.length ? this.currentStates.concat([stateName]) : [stateName];\n\n this.useStates(newStates, hasAnimation);\n }\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!states.length) {\n this.clearStates(hasAnimation);\n return;\n }\n\n const isChange =\n this.currentStates?.length !== states.length ||\n states.some((stateName, index) => this.currentStates[index] !== stateName);\n\n if (!isChange) {\n return;\n }\n\n const stateAttrs = {};\n states.forEach(stateName => {\n const attrs = this.stateProxy ? this.stateProxy(stateName, states) : this.states?.[stateName];\n\n if (attrs) {\n Object.assign(stateAttrs, attrs);\n }\n });\n\n this.updateNormalAttrs(stateAttrs);\n\n this.currentStates = states;\n this.applyStateAttrs(stateAttrs, states, hasAnimation);\n }\n\n addUpdateBoundTag() {\n this._updateTag |= UpdateTag.UPDATE_BOUNDS; // for bounds\n if (this.parent) {\n this.parent.addChildUpdateBoundTag();\n }\n if (this.glyphHost) {\n this.glyphHost.addUpdateBoundTag();\n }\n }\n\n addUpdateShapeTag() {\n this._updateTag |= UpdateTag.UPDATE_SHAPE; // for shape\n }\n\n addUpdateShapeAndBoundsTag() {\n this._updateTag |= UpdateTag.UPDATE_SHAPE_AND_BOUNDS; // for shape&bounds\n if (this.parent) {\n this.parent.addChildUpdateBoundTag();\n }\n if (this.glyphHost) {\n this.glyphHost.addUpdateBoundTag();\n }\n }\n\n protected updateShapeAndBoundsTagSetted(): boolean {\n return (this._updateTag & UpdateTag.UPDATE_SHAPE_AND_BOUNDS) === UpdateTag.UPDATE_SHAPE_AND_BOUNDS;\n }\n\n protected clearUpdateBoundTag() {\n this._updateTag &= UpdateTag.CLEAR_BOUNDS;\n }\n /**\n * 更新位置tag,包括全局tag和局部tag\n */\n addUpdatePositionTag() {\n // 更新shadowRoot的全局位置\n this.shadowRoot && this.shadowRoot.addUpdateGlobalPositionTag();\n this._updateTag |= UpdateTag.UPDATE_GLOBAL_LOCAL_MATRIX;\n }\n /**\n * 更新全局位置tag\n */\n addUpdateGlobalPositionTag() {\n // 更新shadowRoot的全局位置\n this.shadowRoot && this.shadowRoot.addUpdateGlobalPositionTag();\n this._updateTag |= UpdateTag.UPDATE_GLOBAL_MATRIX;\n }\n /**\n * 清除局部位置tag\n */\n protected clearUpdateLocalPositionTag() {\n this._updateTag &= UpdateTag.CLEAR_LOCAL_MATRIX;\n }\n /**\n * 清除全局位置tag\n */\n protected clearUpdateGlobalPositionTag() {\n this._updateTag &= UpdateTag.CLEAR_GLOBAL_MATRIX;\n }\n /**\n * 更新局部matrix的具体函数\n */\n protected doUpdateLocalMatrix() {\n const {\n x = DefaultTransform.x,\n y = DefaultTransform.y,\n scaleX = DefaultTransform.scaleX,\n scaleY = DefaultTransform.scaleY,\n angle = DefaultTransform.angle,\n anchor,\n postMatrix\n } = this.attribute;\n const _anchor: [number, number] = [0, 0];\n if (anchor) {\n if (typeof anchor[0] === 'string') {\n const ratio = parseFloat(anchor[0]) / 100;\n const bounds = this.AABBBounds;\n _anchor[0] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[0] = anchor[0];\n }\n if (typeof anchor[1] === 'string') {\n const ratio = parseFloat(anchor[1]) / 100;\n const bounds = this.AABBBounds;\n _anchor[1] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[1] = anchor[1];\n }\n }\n normalTransform(this._transMatrix, this._transMatrix.reset(), x, y, scaleX, scaleY, angle, anchor && _anchor);\n const p = this.getOffsetXY(DefaultTransform);\n this._transMatrix.e += p.x;\n this._transMatrix.f += p.y;\n\n if (postMatrix) {\n const m1 = tempMatrix.setValue(\n postMatrix.a,\n postMatrix.b,\n postMatrix.c,\n postMatrix.d,\n postMatrix.e,\n postMatrix.f\n );\n const m2 = this._transMatrix;\n m1.multiply(m2.a, m2.b, m2.c, m2.d, m2.e, m2.f);\n m2.setValue(m1.a, m1.b, m1.c, m1.d, m1.e, m1.f);\n }\n }\n /**\n * 更新全局matrix的具体函数\n */\n protected doUpdateGlobalMatrix() {\n // 基于parent的matrix修改\n if (this.parent) {\n this._globalTransMatrix.multiply(\n this.transMatrix.a,\n this.transMatrix.b,\n this.transMatrix.c,\n this.transMatrix.d,\n this.transMatrix.e,\n this.transMatrix.f\n );\n const { scrollX = 0, scrollY = 0 } = this.parent.attribute;\n this._globalTransMatrix.translate(scrollX, scrollY);\n }\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n if (this.stage !== stage) {\n this.stage = stage;\n this.layer = layer;\n this.setStageToShadowRoot(stage, layer);\n this._onSetStage && this._onSetStage(this, stage, layer);\n application.graphicService.onSetStage(this, stage);\n }\n }\n\n setStageToShadowRoot(stage?: IStage, layer?: ILayer) {\n if (this.shadowRoot) {\n this.shadowRoot.setStage(stage, layer);\n }\n }\n\n onAddStep(step: IStep) {\n return;\n }\n onStop(props?: Partial<T>): void {\n if (props) {\n this.setAttributes(props, false, { type: AttributeUpdateType.ANIMATE_END });\n }\n }\n // step时调用\n onStep(subAnimate: ISubAnimate, animate: IAnimate, step: IStep, ratio: number, end: boolean) {\n const nextAttributes = {};\n if (step.customAnimate) {\n step.customAnimate.update(end, ratio, nextAttributes);\n } else {\n const nextProps = step.props;\n const nextParsedProps = step.parsedProps;\n const propKeys = step.propKeys;\n this.stepInterpolate(\n subAnimate,\n animate,\n nextAttributes,\n step,\n ratio,\n end,\n nextProps,\n undefined,\n nextParsedProps,\n propKeys\n );\n }\n this.setAttributes(nextAttributes, false, {\n type: AttributeUpdateType.ANIMATE_UPDATE,\n animationState: {\n ratio,\n end,\n step,\n isFirstFrameOfStep: subAnimate.getLastStep() !== step\n }\n });\n this.stage && this.stage.renderNextFrame();\n }\n\n stepInterpolate(\n subAnimate: ISubAnimate,\n animate: IAnimate,\n nextAttributes: Record<string, any>,\n step: IStep,\n ratio: number,\n end: boolean,\n nextProps: Record<string, any>,\n lastProps?: Record<string, any>,\n nextParsedProps?: any,\n propKeys?: string[]\n ) {\n if (!propKeys) {\n propKeys = Object.keys(nextProps);\n step.propKeys = propKeys;\n }\n if (end) {\n step.propKeys.forEach(key => {\n if (!animate.validAttr(key)) {\n return;\n }\n nextAttributes[key] = nextProps[key];\n });\n } else {\n propKeys.forEach(key => {\n // 如果属性不合法,那直接return\n if (!animate.validAttr(key)) {\n return;\n }\n const nextStepVal = nextProps[key];\n const lastStepVal = (lastProps && lastProps[key]) ?? subAnimate.getLastPropByName(key, step);\n let match: boolean;\n match =\n animate.interpolateFunc && animate.interpolateFunc(key, ratio, lastStepVal, nextStepVal, nextAttributes);\n if (match) {\n return;\n }\n match = animate.customInterpolate(key, ratio, lastStepVal, nextStepVal, this, nextAttributes);\n if (match) {\n return;\n }\n if (!this.defaultInterpolate(nextStepVal, lastStepVal, key, nextAttributes, nextParsedProps, ratio)) {\n this._interpolate(key, ratio, lastStepVal, nextStepVal, nextAttributes);\n }\n });\n }\n\n step.parsedProps = nextParsedProps;\n }\n\n defaultInterpolate(\n nextStepVal: any,\n lastStepVal: any,\n key: string,\n nextAttributes: Record<string, any>,\n nextParsedProps: any,\n ratio: number\n ) {\n if (Number.isFinite(nextStepVal)) {\n nextAttributes[key] = lastStepVal + (nextStepVal - lastStepVal) * ratio;\n return true;\n } else if (key === 'fillColor') {\n if (!nextParsedProps) {\n nextParsedProps = {};\n }\n // 保存解析的结果到step\n const fillColorArray: [number, number, number, number] = nextParsedProps.fillColorArray;\n const color = interpolateColor(lastStepVal, fillColorArray ?? nextStepVal, ratio, false, (fArray, tArray) => {\n nextParsedProps.fillColorArray = tArray;\n });\n if (color) {\n nextAttributes[key] = color;\n }\n return true;\n } else if (key === 'strokeColor') {\n if (!nextParsedProps) {\n nextParsedProps = {};\n }\n // 保存解析的结果到step\n const strokeColorArray: [number, number, number, number] = nextParsedProps.strokeColorArray;\n const color = interpolateColor(lastStepVal, strokeColorArray ?? nextStepVal, ratio, false, (fArray, tArray) => {\n nextParsedProps.strokeColorArray = tArray;\n });\n if (color) {\n nextAttributes[key] = color;\n }\n return true;\n } else if (key === 'shadowColor') {\n if (!nextParsedProps) {\n nextParsedProps = {};\n }\n // 保存解析的结果到step\n const shadowColorArray: [number, number, number, number] = nextParsedProps.shadowColorArray;\n const color = interpolateColor(lastStepVal, shadowColorArray ?? nextStepVal, ratio, true, (fArray, tArray) => {\n nextParsedProps.shadowColorArray = tArray;\n });\n if (color) {\n nextAttributes[key] = color;\n }\n\n return true;\n }\n\n return false;\n }\n\n protected _interpolate(key: string, ratio: number, lastStepVal: any, nextStepVal: any, nextAttributes: any) {\n return;\n }\n\n getDefaultAttribute(name: string) {\n return getTheme(this as any)[this.type][name];\n }\n\n // 获取属性\n getComputedAttribute(name: string) {\n return this.attribute[name] ?? this.getDefaultAttribute(name);\n }\n /**\n * 添加onSetStage钩子\n * @param cb 回调函数\n * @param immediate 是否立刻执行,如果在回调添加之前stage就已经绑定,那么如果第二个参数为true就立刻执行回调\n */\n onSetStage(cb: (g: IGraphic, stage: IStage) => void, immediate: boolean = false) {\n this._onSetStage = cb;\n if (immediate && this.stage) {\n cb(this, this.stage);\n }\n }\n\n /******************** shadow graphic *********************/\n attachShadow(shadowRoot?: IShadowRoot) {\n if (shadowRoot) {\n shadowRoot.shadowHost = this;\n }\n\n this.shadowRoot = shadowRoot ?? application.graphicService.creator.shadowRoot(this);\n this.addUpdateBoundTag();\n this.shadowRoot.setStage(this.stage, this.layer);\n return this.shadowRoot;\n }\n\n detachShadow() {\n if (this.shadowRoot) {\n this.addUpdateBoundTag();\n this.shadowRoot = null;\n }\n }\n\n toJson(): IGraphicJson {\n return {\n attribute: this.attribute,\n _uid: this._uid,\n type: this.type,\n name: this.name,\n children: this.children.map((item: IGraphic) => item.toJson())\n };\n }\n\n createPathProxy(path?: string) {\n if (isString(path, true)) {\n this.pathProxy = new CustomPath2D().fromString(path as string);\n } else {\n this.pathProxy = new CustomPath2D();\n }\n\n return this.pathProxy;\n }\n\n loadImage(image: any, background: boolean = false) {\n if (!image) {\n return;\n }\n const url = image;\n if (!this.resources) {\n this.resources = new Map();\n }\n const cache: {\n state: 'loading' | 'success' | 'init' | 'fail';\n data: any;\n } = {\n data: 'init',\n state: null\n };\n this.resources.set(url, cache);\n if (typeof image === 'string') {\n cache.state = 'loading';\n if (isValidUrl(image) || isBase64(image)) {\n ResourceLoader.GetImage(image, this);\n this.backgroundImg = this.backgroundImg || background;\n } else if (image.startsWith('<svg')) {\n // TODO 封装isSvg到@visactor/vutils\n ResourceLoader.GetSvg(image, this);\n this.backgroundImg = this.backgroundImg || background;\n }\n } else {\n (cache.state = 'success'), (cache.data = image);\n this.backgroundImg = this.backgroundImg || background;\n }\n }\n\n imageLoadSuccess(url: string, image: HTMLImageElement, cb?: () => void) {\n // 更新属性\n // this.resourceState = 'success';\n // this.resource = image;\n if (!this.resources) {\n return;\n }\n const res = this.resources.get(url);\n if (!res) {\n return;\n }\n res.state = 'success';\n res.data = image;\n\n cb && cb();\n\n // 触发重绘\n // 暂时全量,TODO 启动局部重绘\n // this.stage.enableDirtyBounds();\n // this.stage.dirty(this.AABBBounds);\n this.addUpdateBoundTag(); // 添加bounds更新tag重绘才会绘制这个mark\n this.stage && this.stage.renderNextFrame();\n }\n\n imageLoadFail(url: string, cb?: () => void) {\n if (!this.resources) {\n return;\n }\n const res = this.resources.get(url);\n if (!res) {\n return;\n }\n res.state = 'fail';\n\n cb && cb();\n }\n\n release(): void {\n this.releaseStatus = 'released';\n }\n\n protected _emitCustomEvent(type: string, context?: any) {\n const changeEvent = new CustomEvent(type, context);\n\n (changeEvent as any).manager = (this.stage as any)?.eventSystem?.manager;\n this.dispatchEvent(changeEvent);\n }\n\n abstract clone(): Graphic<any>;\n}\n\nGraphic.mixin(EventTarget);\n"]}
1
+ {"version":3,"sources":["../../src/graphic/graphic.ts"],"names":[],"mappings":"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","file":"graphic.js","sourcesContent":["import { ICustomPath2D } from './../interface/path';\nimport {\n AABBBounds,\n OBBBounds,\n Matrix,\n normalTransform,\n Point,\n isNil,\n Dict,\n IPointLike,\n has,\n isString,\n IAABBBounds,\n isValidUrl,\n isBase64\n} from '@visactor/vutils';\nimport {\n GraphicType,\n IAnimateConfig,\n IGraphicAttribute,\n IGraphic,\n IGraphicAnimateParams,\n IGraphicJson,\n ISetAttributeContext,\n ITransform\n} from '../interface/graphic';\nimport { Node } from './node-tree';\nimport {\n IAnimate,\n IAnimateTarget,\n IGlyphGraphicAttribute,\n IGroup,\n ILayer,\n IShadowRoot,\n IStage,\n IStep,\n ISubAnimate\n} from '../interface';\nimport { EventTarget, CustomEvent } from '../event';\nimport { DefaultTransform } from './config';\nimport { IPickerService } from '../picker';\nimport { application } from '../application';\nimport { Animate, DefaultStateAnimateConfig } from '../animate';\nimport { interpolateColor } from '../color-string/interpolate';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { getTheme } from './theme';\nimport { ResourceLoader } from '../resource-loader/loader';\nimport { AttributeUpdateType, IContainPointMode, UpdateTag } from '../common/enums';\n\n/**\n * pathProxy参考自zrender\n * BSD 3-Clause License\n\n Copyright (c) 2017, Baidu Inc.\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst tempMatrix = new Matrix();\n\nexport const PURE_STYLE_KEY = [\n 'stroke',\n 'opacity',\n 'strokeOpacity',\n 'lineDash',\n 'lineDashOffset',\n 'lineCap',\n 'lineJoin',\n 'miterLimit',\n 'fill',\n 'fillOpacity'\n];\n\nexport const GRAPHIC_UPDATE_TAG_KEY = [\n 'lineWidth',\n 'lineCap',\n 'lineJoin',\n 'miterLimit',\n 'scaleX',\n 'scaleY',\n 'angle',\n 'anchor'\n];\n\nconst tempConstantXYKey = ['x', 'y'];\nconst tempConstantScaleXYKey = ['scaleX', 'scaleY'];\nconst tempConstantAngleKey = ['angle'];\n\nconst point = new Point();\n\nexport type GraphicReleaseStatus = 'released' | 'willRelease';\n\n/**\n * globalTransMatrix更新逻辑\n * 1. group的transform修改,会下发到所有下层group,将所有下层的tag修改\n * 2. 叶子graphic每次获取globalTransMatrix都重新计算\n * 3. 所有节点的transform修改,或者globalTransform修改,都会下发到自己的shadowRoot上\n */\n\nexport abstract class Graphic<T extends Partial<IGraphicAttribute> = Partial<IGraphicAttribute>>\n extends Node\n implements IGraphic<T>, IAnimateTarget\n{\n /**\n * Mixes all enumerable properties and methods from a source object to Element.\n * @param source - The source of properties and methods to mix in.\n */\n static mixin(source: Dict<any>): void {\n // in ES8/ES2017, this would be really easy:\n // Object.defineProperties(Element.prototype, Object.getOwnPropertyDescriptors(source));\n\n // get all the enumerable property keys\n const keys = Object.keys(source);\n\n // loop through properties\n for (let i = 0; i < keys.length; ++i) {\n const propertyName = keys[i];\n\n // Set the property using the property descriptor - this works for accessors and normal value properties\n Object.defineProperty(\n Graphic.prototype,\n propertyName,\n Object.getOwnPropertyDescriptor(source, propertyName) as PropertyDecorator\n );\n }\n }\n declare onBeforeAttributeUpdate?: (\n val: any,\n attributes: Partial<T>,\n key: null | string | string[],\n context?: ISetAttributeContext\n ) => T | undefined;\n declare parent: any;\n\n declare resources?: Map<\n string,\n { state: 'init' | 'loading' | 'success' | 'fail'; data?: HTMLImageElement | HTMLCanvasElement }\n >;\n declare backgroundImg?: boolean;\n\n declare type: GraphicType;\n declare prefixed: string;\n declare numberType: number;\n declare isContainer?: boolean;\n declare valid: boolean;\n declare stage?: IStage;\n declare layer?: ILayer;\n declare incremental?: number;\n declare glyphHost?: IGraphic<IGlyphGraphicAttribute>;\n declare _onSetStage?: (g: IGraphic, stage: IStage, layer: ILayer) => void;\n // declare _beforeAttributeUpdate?: (key: string | string, value: any) => void;\n // 标记是否是在3d模式下\n declare in3dMode?: boolean;\n\n // aabbBounds,所有图形都需要有,所以初始化即赋值\n protected declare _AABBBounds: AABBBounds;\n get AABBBounds(): AABBBounds {\n return this.tryUpdateAABBBounds(this.attribute.boundsMode === 'imprecise');\n }\n // 具有旋转的包围盒,部分图元需要,动态初始化\n protected declare _OBBBounds?: OBBBounds;\n get OBBBounds(): OBBBounds {\n return this.tryUpdateOBBBounds();\n }\n protected declare _globalAABBBounds: AABBBounds;\n // 全局包围盒,部分图元需要,动态初始化,建议使用AABBBounds\n get globalAABBBounds(): AABBBounds {\n return this.tryUpdateGlobalAABBBounds();\n }\n protected declare _transMatrix: Matrix;\n get transMatrix(): Matrix {\n return this.tryUpdateLocalTransMatrix(true);\n }\n protected declare _globalTransMatrix: Matrix;\n get globalTransMatrix(): Matrix {\n return this.tryUpdateGlobalTransMatrix(true);\n }\n protected declare _updateTag: number;\n\n // 上次更新的stamp\n declare stamp?: number;\n\n declare attribute: T;\n\n declare shadowRoot?: IShadowRoot;\n\n declare releaseStatus?: GraphicReleaseStatus;\n\n /** 记录state对应的图形属性 */\n declare states?: Record<string, Partial<T>>;\n /** 当前state值 */\n declare currentStates?: string[];\n /** TODO: state更新对应的动画配置 */\n declare stateAnimateConfig?: IAnimateConfig;\n /** 记录应用state之前,attribute对应的原始图形属性 */\n declare normalAttrs?: Partial<T>;\n /** 获取state图形属性的方法 */\n declare stateProxy?: (stateName: string, targetStates?: string[]) => T;\n declare animates: Map<string | number, IAnimate>;\n\n declare nextAttrs?: T;\n declare prevAttrs?: T;\n declare finalAttrs?: T;\n\n declare pathProxy?: ICustomPath2D;\n\n constructor(params: T = {} as T) {\n super();\n this._AABBBounds = new AABBBounds();\n this._updateTag = UpdateTag.INIT;\n this.attribute = params;\n this.valid = this.isValid();\n if (params.background) {\n this.loadImage(params.background, true);\n }\n }\n\n setMode(mode: '2d' | '3d') {\n mode === '3d' ? this.set3dMode() : this.set2dMode();\n }\n\n set3dMode() {\n this.in3dMode = true;\n }\n set2dMode() {\n this.in3dMode = false;\n }\n getOffsetXY(attr?: ITransform, includeScroll: boolean = false) {\n const { dx = attr.dx, dy = attr.dy } = this.attribute;\n if (includeScroll && this.parent) {\n const groupTheme = getTheme(this.parent).group;\n const { scrollX = groupTheme.scrollX, scrollY = groupTheme.scrollY } = this.parent.attribute;\n point.x = dx + scrollX;\n point.y = dy + scrollY;\n } else {\n point.x = dx;\n point.y = dy;\n }\n return point;\n }\n\n protected tryUpdateAABBBounds(full?: boolean): AABBBounds {\n if (!this.shouldUpdateAABBBounds()) {\n return this._AABBBounds;\n }\n if (!this.valid) {\n this._AABBBounds.clear();\n return this._AABBBounds;\n }\n\n application.graphicService.beforeUpdateAABBBounds(this, this.stage, true, this._AABBBounds);\n const bounds = this.doUpdateAABBBounds(full);\n application.graphicService.afterUpdateAABBBounds(this, this.stage, this._AABBBounds, this, true);\n return bounds;\n }\n\n protected combindShadowAABBBounds(bounds: IAABBBounds) {\n // 合并shadowRoot的Bounds\n if (this.shadowRoot) {\n const b = this.shadowRoot.AABBBounds.clone();\n bounds.union(b);\n }\n }\n\n protected abstract doUpdateAABBBounds(full?: boolean): AABBBounds;\n\n protected abstract tryUpdateOBBBounds(): OBBBounds;\n\n protected tryUpdateGlobalAABBBounds(): AABBBounds {\n if (!this._globalAABBBounds) {\n this._globalAABBBounds = this._AABBBounds.clone();\n } else {\n this._globalAABBBounds.setValue(\n this._AABBBounds.x1,\n this._AABBBounds.y1,\n this._AABBBounds.x2,\n this._AABBBounds.y2\n );\n }\n // 使用parent的grloalAABBBounds\n // todo: 考虑是否需要性能优化\n if (this.parent) {\n this._globalAABBBounds.transformWithMatrix((this.parent as IGroup).globalTransMatrix);\n }\n return this._globalAABBBounds;\n }\n\n /**\n * 这里都是叶子节点的UpdateGlobalTransMatrix函数,只要走进来就直接计算\n * @param clearTag\n * @returns\n */\n protected tryUpdateGlobalTransMatrix(clearTag: boolean = true): Matrix {\n if (!this._globalTransMatrix) {\n this._globalTransMatrix = this.parent\n ? (this.parent as IGroup).globalTransMatrix.clone()\n : this.transMatrix.clone();\n } else if (this.parent) {\n const m = (this.parent as IGroup).globalTransMatrix;\n this._globalTransMatrix.setValue(m.a, m.b, m.c, m.d, m.e, m.f);\n }\n if (this.shouldUpdateGlobalMatrix()) {\n this.doUpdateGlobalMatrix();\n }\n return this._globalTransMatrix;\n }\n\n shouldUpdateGlobalMatrix(): boolean {\n return true;\n }\n\n protected tryUpdateLocalTransMatrix(clearTag: boolean = true) {\n if (!this._transMatrix) {\n this._transMatrix = new Matrix();\n }\n if (this.shouldUpdateLocalMatrix()) {\n this.doUpdateLocalMatrix();\n clearTag && this.clearUpdateLocalPositionTag();\n }\n return this._transMatrix;\n }\n\n shouldUpdateAABBBounds(): boolean {\n // 如果存在shadowRoot,那么判断shadowRoot是否需要更新\n if (this.shadowRoot) {\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS) || this.shadowRoot.shouldUpdateAABBBounds();\n }\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS);\n }\n\n // 自身变化导致的AABBBounds的变化\n shouldSelfChangeUpdateAABBBounds(): boolean {\n // 如果存在shadowRoot,那么判断shadowRoot是否需要更新\n if (this.shadowRoot) {\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS) || this.shadowRoot.shouldUpdateAABBBounds();\n }\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS);\n }\n\n protected shouldUpdateLocalMatrix(): boolean {\n return !!(this._updateTag & UpdateTag.UPDATE_LOCAL_MATRIX);\n }\n\n isValid(): boolean {\n const attribute = this.attribute;\n return Number.isFinite((attribute.x ?? 0) + (attribute.y ?? 0));\n }\n\n protected _validNumber(num?: number) {\n return num == null || Number.isFinite(num);\n }\n\n shouldUpdateShape(): boolean {\n return !!(this._updateTag & UpdateTag.UPDATE_SHAPE);\n }\n clearUpdateShapeTag() {\n this._updateTag &= UpdateTag.CLEAR_SHAPE;\n }\n\n /**\n * 是否包含某个点(点需要是全局坐标系)\n * @param x\n * @param y\n * @param mode\n * @returns\n */\n containsPoint(x: number, y: number, mode: IContainPointMode, picker?: IPickerService): boolean {\n if (!picker) {\n return false;\n }\n if (mode === IContainPointMode.GLOBAL) {\n // 转换x,y更精准\n const point = new Point(x, y);\n if (this.parent) {\n this.parent.globalTransMatrix.transformPoint(point, point);\n }\n x = point.x;\n y = point.y;\n }\n return picker.containsPoint(this, { x, y });\n }\n\n setAttributes(params: Partial<T>, forceUpdateTag: boolean = false, context?: ISetAttributeContext) {\n params =\n (this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate(params, this.attribute, null, context)) || params;\n\n if (params.background) {\n this.loadImage(params.background, true);\n }\n\n this._setAttributes(params, forceUpdateTag, context);\n }\n\n _setAttributes(params: Partial<T>, forceUpdateTag: boolean = false, context?: ISetAttributeContext) {\n const keys = Object.keys(params);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n\n this.attribute[key] = params[key];\n }\n this.valid = this.isValid();\n // 没有设置shape&bounds的tag\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTags(keys))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.onAttributeUpdate(context);\n }\n\n setAttribute(key: string, value: any, forceUpdateTag?: boolean, context?: ISetAttributeContext) {\n const params =\n this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate({ [key]: value }, this.attribute, key, context);\n if (!params) {\n if (!isNil(this.normalAttrs?.[key])) {\n this.normalAttrs[key] = value;\n } else {\n this.attribute[key] = value;\n this.valid = this.isValid();\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTag(key))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.onAttributeUpdate(context);\n }\n } else {\n this._setAttributes(params, forceUpdateTag, context);\n }\n if (key === 'background') {\n this.loadImage(value, true);\n }\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n for (let i = 0; i < GRAPHIC_UPDATE_TAG_KEY.length; i++) {\n const attrKey = GRAPHIC_UPDATE_TAG_KEY[i];\n if (keys.indexOf(attrKey) !== -1) {\n return true;\n }\n }\n return false;\n }\n\n protected needUpdateTag(key: string): boolean {\n for (let i = 0; i < GRAPHIC_UPDATE_TAG_KEY.length; i++) {\n const attrKey = GRAPHIC_UPDATE_TAG_KEY[i];\n if (key === attrKey) {\n return true;\n }\n }\n return false;\n }\n\n initAttributes(params: T) {\n // this.setAttributes(params, true);\n const context = { type: AttributeUpdateType.INIT };\n params =\n (this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate(params, this.attribute, null, context)) || params;\n this.attribute = params;\n if (params.background) {\n this.loadImage(params.background, true);\n }\n this._updateTag = UpdateTag.INIT;\n this.onAttributeUpdate(context);\n }\n\n translate(x: number, y: number) {\n if (x === 0 && y === 0) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.TRANSLATE\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ x, y }, this.attribute, tempConstantXYKey, context);\n if (params) {\n x = params.x;\n y = params.y;\n delete params.x;\n delete params.y;\n this._setAttributes(params);\n }\n const attribute = this.attribute;\n const postMatrix = attribute.postMatrix;\n if (!postMatrix) {\n attribute.x = (attribute.x ?? DefaultTransform.x) + x;\n attribute.y = (attribute.y ?? DefaultTransform.y) + y;\n } else {\n application.transformUtil.fromMatrix(postMatrix, postMatrix).translate(x, y);\n }\n\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n translateTo(x: number, y: number) {\n const attribute = this.attribute;\n if (attribute.x === x && attribute.y === y) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.TRANSLATE_TO\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ x, y }, this.attribute, tempConstantXYKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n attribute.x = x;\n attribute.y = y;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n scale(scaleX: number, scaleY: number, scaleCenter?: IPointLike) {\n if (scaleX === 1 && scaleY === 1) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.SCALE\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ scaleX, scaleY, scaleCenter }, this.attribute, tempConstantScaleXYKey, context);\n if (params) {\n scaleX = params.scaleX;\n scaleY = params.scaleY;\n delete params.scaleX;\n delete params.scaleY;\n this._setAttributes(params);\n }\n const attribute = this.attribute;\n if (!scaleCenter) {\n attribute.scaleX = (attribute.scaleX ?? DefaultTransform.scaleX) * scaleX;\n attribute.scaleY = (attribute.scaleY ?? DefaultTransform.scaleY) * scaleY;\n } else {\n let { postMatrix } = this.attribute;\n if (!postMatrix) {\n postMatrix = new Matrix();\n attribute.postMatrix = postMatrix;\n }\n application.transformUtil.fromMatrix(postMatrix, postMatrix).scale(scaleX, scaleY, scaleCenter);\n }\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n scaleTo(scaleX: number, scaleY: number) {\n const attribute = this.attribute;\n if (attribute.scaleX === scaleX && attribute.scaleY === scaleY) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.SCALE_TO\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ scaleX, scaleY }, this.attribute, tempConstantScaleXYKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n attribute.scaleX = scaleX;\n attribute.scaleY = scaleY;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n rotate(angle: number) {\n if (angle === 0) {\n return this;\n }\n const context = { type: AttributeUpdateType.ROTATE };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate(angle, this.attribute, tempConstantAngleKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n const attribute = this.attribute;\n attribute.angle = (attribute.angle ?? DefaultTransform.angle) + angle;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n rotateTo(angle: number) {\n const attribute = this.attribute;\n if (attribute.angle === angle) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.ROTATE_TO\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate(angle, this.attribute, tempConstantAngleKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n attribute.angle = angle;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n skewTo(b: number, c: number) {\n return this;\n }\n\n animate(params?: IGraphicAnimateParams) {\n if (!this.animates) {\n this.animates = new Map();\n }\n const animate = new Animate(params?.id).bind(this);\n if (params) {\n const { onStart, onFrame, onEnd, onRemove } = params;\n onStart != null && animate.onStart(onStart);\n onFrame != null && animate.onFrame(onFrame);\n onEnd != null && animate.onEnd(onEnd);\n onRemove != null && animate.onRemove(onRemove);\n animate.interpolateFunc = params.interpolate;\n }\n this.animates.set(animate.id, animate);\n animate.onRemove(() => {\n this.animates.delete(animate.id);\n });\n\n return animate;\n }\n\n onAttributeUpdate(context?: ISetAttributeContext) {\n application.graphicService.onAttributeUpdate(this);\n this._emitCustomEvent('afterAttributeUpdate', context);\n }\n\n // hasListener(event: string) {\n // const prefix = this.prefixed;\n // var evt = prefix ? prefix + event : event;\n // return this._events[evt];\n // }\n\n update(d?: { bounds: boolean; trans: boolean }) {\n if (d) {\n d.bounds && this.tryUpdateAABBBounds(this.attribute.boundsMode === 'imprecise');\n d.trans && this.tryUpdateLocalTransMatrix();\n } else {\n this.tryUpdateAABBBounds(this.attribute.boundsMode === 'imprecise');\n this.tryUpdateLocalTransMatrix();\n }\n }\n\n hasState(stateName?: string) {\n if (!this.currentStates || !this.currentStates.length) {\n return false;\n }\n\n if (!isNil(stateName)) {\n return this.currentStates.includes(stateName);\n }\n\n return true;\n }\n getState(stateName: string) {\n return this.states?.[stateName];\n }\n\n applyStateAttrs(attrs: Partial<T>, stateNames: string[], hasAnimation?: boolean, isClear?: boolean) {\n if (hasAnimation) {\n const keys = Object.keys(attrs);\n const animateAttrs = isClear\n ? keys.reduce((res, key) => {\n res[key] = attrs[key] === undefined ? this.getDefaultAttribute(key) : attrs[key];\n\n return res;\n }, {})\n : attrs;\n const animate = this.animate();\n\n (animate as any).stateNames = stateNames;\n animate.to(\n animateAttrs,\n this.stateAnimateConfig?.duration ?? DefaultStateAnimateConfig.duration,\n this.stateAnimateConfig?.easing ?? DefaultStateAnimateConfig.easing\n );\n } else {\n this.setAttributes(attrs, false, { type: AttributeUpdateType.STATE });\n }\n }\n\n updateNormalAttrs(stateAttrs: Partial<T>) {\n const newNormalAttrs = {};\n if (this.normalAttrs) {\n Object.keys(stateAttrs).forEach(key => {\n if (key in this.normalAttrs) {\n newNormalAttrs[key] = this.normalAttrs[key];\n delete this.normalAttrs[key];\n } else {\n newNormalAttrs[key] = this.getNormalAttribute(key);\n }\n });\n Object.keys(this.normalAttrs).forEach(key => {\n stateAttrs[key] = this.normalAttrs[key];\n });\n } else {\n Object.keys(stateAttrs).forEach(key => {\n newNormalAttrs[key] = this.getNormalAttribute(key);\n });\n }\n\n this.normalAttrs = newNormalAttrs;\n }\n\n private getNormalAttribute(key: string) {\n let value = this.attribute[key];\n\n if (this.animates) {\n this.animates.forEach(animate => {\n if ((animate as any).stateNames) {\n const endProps = animate.getEndProps();\n\n if (has(endProps, key)) {\n value = endProps[key];\n }\n }\n });\n }\n\n return value;\n }\n\n clearStates(hasAnimation?: boolean) {\n if (this.hasState() && this.normalAttrs) {\n this.applyStateAttrs(this.normalAttrs, this.currentStates, hasAnimation, true);\n }\n\n this.normalAttrs = null;\n this.currentStates = [];\n }\n\n removeState(stateName: string, hasAnimation?: boolean) {\n const index = this.currentStates ? this.currentStates.indexOf(stateName) : -1;\n\n if (index >= 0) {\n const currentStates = this.currentStates.filter(state => state !== stateName);\n\n this.useStates(currentStates, hasAnimation);\n }\n }\n\n toggleState(stateName: string, hasAnimation?: boolean) {\n if (this.hasState(stateName)) {\n this.removeState(stateName, hasAnimation);\n } else {\n const index = this.currentStates ? this.currentStates.indexOf(stateName) : -1;\n if (index < 0) {\n const nextStates = this.currentStates ? this.currentStates.slice() : [];\n nextStates.push(stateName);\n this.useStates(nextStates, hasAnimation);\n }\n }\n }\n\n addState(stateName: string, keepCurrentStates?: boolean, hasAnimation?: boolean) {\n if (\n this.currentStates &&\n this.currentStates.includes(stateName) &&\n (keepCurrentStates || this.currentStates.length === 1)\n ) {\n return;\n }\n\n const newStates =\n keepCurrentStates && this.currentStates?.length ? this.currentStates.concat([stateName]) : [stateName];\n\n this.useStates(newStates, hasAnimation);\n }\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!states.length) {\n this.clearStates(hasAnimation);\n return;\n }\n\n const isChange =\n this.currentStates?.length !== states.length ||\n states.some((stateName, index) => this.currentStates[index] !== stateName);\n\n if (!isChange) {\n return;\n }\n\n const stateAttrs = {};\n states.forEach(stateName => {\n const attrs = this.stateProxy ? this.stateProxy(stateName, states) : this.states?.[stateName];\n\n if (attrs) {\n Object.assign(stateAttrs, attrs);\n }\n });\n\n this.updateNormalAttrs(stateAttrs);\n\n this.currentStates = states;\n this.applyStateAttrs(stateAttrs, states, hasAnimation);\n }\n\n addUpdateBoundTag() {\n this._updateTag |= UpdateTag.UPDATE_BOUNDS; // for bounds\n if (this.parent) {\n this.parent.addChildUpdateBoundTag();\n }\n if (this.glyphHost) {\n this.glyphHost.addUpdateBoundTag();\n }\n }\n\n addUpdateShapeTag() {\n this._updateTag |= UpdateTag.UPDATE_SHAPE; // for shape\n }\n\n addUpdateShapeAndBoundsTag() {\n this._updateTag |= UpdateTag.UPDATE_SHAPE_AND_BOUNDS; // for shape&bounds\n if (this.parent) {\n this.parent.addChildUpdateBoundTag();\n }\n if (this.glyphHost) {\n this.glyphHost.addUpdateBoundTag();\n }\n }\n\n protected updateShapeAndBoundsTagSetted(): boolean {\n return (this._updateTag & UpdateTag.UPDATE_SHAPE_AND_BOUNDS) === UpdateTag.UPDATE_SHAPE_AND_BOUNDS;\n }\n\n protected clearUpdateBoundTag() {\n this._updateTag &= UpdateTag.CLEAR_BOUNDS;\n }\n /**\n * 更新位置tag,包括全局tag和局部tag\n */\n addUpdatePositionTag() {\n // 更新shadowRoot的全局位置\n this.shadowRoot && this.shadowRoot.addUpdateGlobalPositionTag();\n this._updateTag |= UpdateTag.UPDATE_GLOBAL_LOCAL_MATRIX;\n }\n /**\n * 更新全局位置tag\n */\n addUpdateGlobalPositionTag() {\n // 更新shadowRoot的全局位置\n this.shadowRoot && this.shadowRoot.addUpdateGlobalPositionTag();\n this._updateTag |= UpdateTag.UPDATE_GLOBAL_MATRIX;\n }\n /**\n * 清除局部位置tag\n */\n protected clearUpdateLocalPositionTag() {\n this._updateTag &= UpdateTag.CLEAR_LOCAL_MATRIX;\n }\n /**\n * 清除全局位置tag\n */\n protected clearUpdateGlobalPositionTag() {\n this._updateTag &= UpdateTag.CLEAR_GLOBAL_MATRIX;\n }\n /**\n * 更新局部matrix的具体函数\n */\n protected doUpdateLocalMatrix() {\n const {\n x = DefaultTransform.x,\n y = DefaultTransform.y,\n scaleX = DefaultTransform.scaleX,\n scaleY = DefaultTransform.scaleY,\n angle = DefaultTransform.angle,\n anchor,\n postMatrix\n } = this.attribute;\n const _anchor: [number, number] = [0, 0];\n if (anchor) {\n if (typeof anchor[0] === 'string') {\n const ratio = parseFloat(anchor[0]) / 100;\n const bounds = this.AABBBounds;\n _anchor[0] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[0] = anchor[0];\n }\n if (typeof anchor[1] === 'string') {\n const ratio = parseFloat(anchor[1]) / 100;\n const bounds = this.AABBBounds;\n _anchor[1] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[1] = anchor[1];\n }\n }\n normalTransform(this._transMatrix, this._transMatrix.reset(), x, y, scaleX, scaleY, angle, anchor && _anchor);\n const p = this.getOffsetXY(DefaultTransform);\n this._transMatrix.e += p.x;\n this._transMatrix.f += p.y;\n\n if (postMatrix) {\n const m1 = tempMatrix.setValue(\n postMatrix.a,\n postMatrix.b,\n postMatrix.c,\n postMatrix.d,\n postMatrix.e,\n postMatrix.f\n );\n const m2 = this._transMatrix;\n m1.multiply(m2.a, m2.b, m2.c, m2.d, m2.e, m2.f);\n m2.setValue(m1.a, m1.b, m1.c, m1.d, m1.e, m1.f);\n }\n }\n /**\n * 更新全局matrix的具体函数\n */\n protected doUpdateGlobalMatrix() {\n // 基于parent的matrix修改\n if (this.parent) {\n this._globalTransMatrix.multiply(\n this.transMatrix.a,\n this.transMatrix.b,\n this.transMatrix.c,\n this.transMatrix.d,\n this.transMatrix.e,\n this.transMatrix.f\n );\n const { scrollX = 0, scrollY = 0 } = this.parent.attribute;\n this._globalTransMatrix.translate(scrollX, scrollY);\n }\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n if (this.stage !== stage) {\n this.stage = stage;\n this.layer = layer;\n this.setStageToShadowRoot(stage, layer);\n this._onSetStage && this._onSetStage(this, stage, layer);\n application.graphicService.onSetStage(this, stage);\n }\n }\n\n setStageToShadowRoot(stage?: IStage, layer?: ILayer) {\n if (this.shadowRoot) {\n this.shadowRoot.setStage(stage, layer);\n }\n }\n\n onAddStep(step: IStep) {\n return;\n }\n onStop(props?: Partial<T>): void {\n if (props) {\n this.setAttributes(props, false, { type: AttributeUpdateType.ANIMATE_END });\n }\n }\n // step时调用\n onStep(subAnimate: ISubAnimate, animate: IAnimate, step: IStep, ratio: number, end: boolean) {\n const nextAttributes = {};\n if (step.customAnimate) {\n step.customAnimate.update(end, ratio, nextAttributes);\n } else {\n const nextProps = step.props;\n const nextParsedProps = step.parsedProps;\n const propKeys = step.propKeys;\n this.stepInterpolate(\n subAnimate,\n animate,\n nextAttributes,\n step,\n ratio,\n end,\n nextProps,\n undefined,\n nextParsedProps,\n propKeys\n );\n }\n this.setAttributes(nextAttributes, false, {\n type: AttributeUpdateType.ANIMATE_UPDATE,\n animationState: {\n ratio,\n end,\n step,\n isFirstFrameOfStep: subAnimate.getLastStep() !== step\n }\n });\n this.stage && this.stage.renderNextFrame();\n }\n\n stepInterpolate(\n subAnimate: ISubAnimate,\n animate: IAnimate,\n nextAttributes: Record<string, any>,\n step: IStep,\n ratio: number,\n end: boolean,\n nextProps: Record<string, any>,\n lastProps?: Record<string, any>,\n nextParsedProps?: any,\n propKeys?: string[]\n ) {\n if (!propKeys) {\n propKeys = Object.keys(nextProps);\n step.propKeys = propKeys;\n }\n if (end) {\n step.propKeys.forEach(key => {\n if (!animate.validAttr(key)) {\n return;\n }\n nextAttributes[key] = nextProps[key];\n });\n } else {\n propKeys.forEach(key => {\n // 如果属性不合法,那直接return\n if (!animate.validAttr(key)) {\n return;\n }\n const nextStepVal = nextProps[key];\n const lastStepVal = (lastProps && lastProps[key]) ?? subAnimate.getLastPropByName(key, step);\n let match: boolean;\n match =\n animate.interpolateFunc && animate.interpolateFunc(key, ratio, lastStepVal, nextStepVal, nextAttributes);\n if (match) {\n return;\n }\n match = animate.customInterpolate(key, ratio, lastStepVal, nextStepVal, this, nextAttributes);\n if (match) {\n return;\n }\n if (!this.defaultInterpolate(nextStepVal, lastStepVal, key, nextAttributes, nextParsedProps, ratio)) {\n this._interpolate(key, ratio, lastStepVal, nextStepVal, nextAttributes);\n }\n });\n }\n\n step.parsedProps = nextParsedProps;\n }\n\n defaultInterpolate(\n nextStepVal: any,\n lastStepVal: any,\n key: string,\n nextAttributes: Record<string, any>,\n nextParsedProps: any,\n ratio: number\n ) {\n if (Number.isFinite(nextStepVal)) {\n nextAttributes[key] = lastStepVal + (nextStepVal - lastStepVal) * ratio;\n return true;\n } else if (key === 'fill') {\n if (!nextParsedProps) {\n nextParsedProps = {};\n }\n // 保存解析的结果到step\n const fillColorArray: [number, number, number, number] = nextParsedProps.fillColorArray;\n const color = interpolateColor(lastStepVal, fillColorArray ?? nextStepVal, ratio, false, (fArray, tArray) => {\n nextParsedProps.fillColorArray = tArray;\n });\n if (color) {\n nextAttributes[key] = color;\n }\n return true;\n } else if (key === 'stroke') {\n if (!nextParsedProps) {\n nextParsedProps = {};\n }\n // 保存解析的结果到step\n const strokeColorArray: [number, number, number, number] = nextParsedProps.strokeColorArray;\n const color = interpolateColor(lastStepVal, strokeColorArray ?? nextStepVal, ratio, false, (fArray, tArray) => {\n nextParsedProps.strokeColorArray = tArray;\n });\n if (color) {\n nextAttributes[key] = color;\n }\n return true;\n } else if (key === 'shadowColor') {\n if (!nextParsedProps) {\n nextParsedProps = {};\n }\n // 保存解析的结果到step\n const shadowColorArray: [number, number, number, number] = nextParsedProps.shadowColorArray;\n const color = interpolateColor(lastStepVal, shadowColorArray ?? nextStepVal, ratio, true, (fArray, tArray) => {\n nextParsedProps.shadowColorArray = tArray;\n });\n if (color) {\n nextAttributes[key] = color;\n }\n\n return true;\n }\n\n return false;\n }\n\n protected _interpolate(key: string, ratio: number, lastStepVal: any, nextStepVal: any, nextAttributes: any) {\n return;\n }\n\n getDefaultAttribute(name: string) {\n return getTheme(this as any)[this.type][name];\n }\n\n // 获取属性\n getComputedAttribute(name: string) {\n return this.attribute[name] ?? this.getDefaultAttribute(name);\n }\n /**\n * 添加onSetStage钩子\n * @param cb 回调函数\n * @param immediate 是否立刻执行,如果在回调添加之前stage就已经绑定,那么如果第二个参数为true就立刻执行回调\n */\n onSetStage(cb: (g: IGraphic, stage: IStage) => void, immediate: boolean = false) {\n this._onSetStage = cb;\n if (immediate && this.stage) {\n cb(this, this.stage);\n }\n }\n\n /******************** shadow graphic *********************/\n attachShadow(shadowRoot?: IShadowRoot) {\n if (shadowRoot) {\n shadowRoot.shadowHost = this;\n }\n\n this.shadowRoot = shadowRoot ?? application.graphicService.creator.shadowRoot(this);\n this.addUpdateBoundTag();\n this.shadowRoot.setStage(this.stage, this.layer);\n return this.shadowRoot;\n }\n\n detachShadow() {\n if (this.shadowRoot) {\n this.addUpdateBoundTag();\n this.shadowRoot = null;\n }\n }\n\n toJson(): IGraphicJson {\n return {\n attribute: this.attribute,\n _uid: this._uid,\n type: this.type,\n name: this.name,\n children: this.children.map((item: IGraphic) => item.toJson())\n };\n }\n\n createPathProxy(path?: string) {\n if (isString(path, true)) {\n this.pathProxy = new CustomPath2D().fromString(path as string);\n } else {\n this.pathProxy = new CustomPath2D();\n }\n\n return this.pathProxy;\n }\n\n loadImage(image: any, background: boolean = false) {\n if (!image) {\n return;\n }\n const url = image;\n if (!this.resources) {\n this.resources = new Map();\n }\n const cache: {\n state: 'loading' | 'success' | 'init' | 'fail';\n data: any;\n } = {\n data: 'init',\n state: null\n };\n this.resources.set(url, cache);\n if (typeof image === 'string') {\n cache.state = 'loading';\n if (isValidUrl(image) || isBase64(image)) {\n ResourceLoader.GetImage(image, this);\n this.backgroundImg = this.backgroundImg || background;\n } else if (image.startsWith('<svg')) {\n // TODO 封装isSvg到@visactor/vutils\n ResourceLoader.GetSvg(image, this);\n this.backgroundImg = this.backgroundImg || background;\n }\n } else {\n (cache.state = 'success'), (cache.data = image);\n this.backgroundImg = this.backgroundImg || background;\n }\n }\n\n imageLoadSuccess(url: string, image: HTMLImageElement, cb?: () => void) {\n // 更新属性\n // this.resourceState = 'success';\n // this.resource = image;\n if (!this.resources) {\n return;\n }\n const res = this.resources.get(url);\n if (!res) {\n return;\n }\n res.state = 'success';\n res.data = image;\n\n cb && cb();\n\n // 触发重绘\n // 暂时全量,TODO 启动局部重绘\n // this.stage.enableDirtyBounds();\n // this.stage.dirty(this.AABBBounds);\n this.addUpdateBoundTag(); // 添加bounds更新tag重绘才会绘制这个mark\n this.stage && this.stage.renderNextFrame();\n }\n\n imageLoadFail(url: string, cb?: () => void) {\n if (!this.resources) {\n return;\n }\n const res = this.resources.get(url);\n if (!res) {\n return;\n }\n res.state = 'fail';\n\n cb && cb();\n }\n\n release(): void {\n this.releaseStatus = 'released';\n }\n\n protected _emitCustomEvent(type: string, context?: any) {\n const changeEvent = new CustomEvent(type, context);\n\n (changeEvent as any).manager = (this.stage as any)?.eventSystem?.manager;\n this.dispatchEvent(changeEvent);\n }\n\n abstract clone(): Graphic<any>;\n}\n\nGraphic.mixin(EventTarget);\n"]}
package/cjs/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
- import * as _Reflect from 'reflect-metadata';
2
- export declare const Reflect: typeof _Reflect;
1
+ import 'reflect-metadata';
3
2
  import './modules';
4
3
  export * from './container';
5
4
  export * from './core/global';