ice-entity-designer 0.0.40 → 0.2.0

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 (227) hide show
  1. package/README.md +16 -9
  2. package/dist/index.cjs +1 -6
  3. package/dist/index.mjs +1 -6
  4. package/dist/index.umd.js +1 -6
  5. package/dist/react.cjs +1 -6
  6. package/dist/react.mjs +1 -6
  7. package/dist/types/bpmn/BpmnSimulator.d.mts +4 -4
  8. package/dist/types/bpmn/BpmnSimulator.d.ts +4 -4
  9. package/dist/types/bpmn/bpmn_shapes.d.mts +9 -9
  10. package/dist/types/bpmn/bpmn_shapes.d.ts +9 -9
  11. package/dist/types/bpmn/bpmn_validate.d.mts +1 -1
  12. package/dist/types/bpmn/bpmn_validate.d.ts +1 -1
  13. package/dist/types/bpmn/bpmn_xml.d.mts +1 -1
  14. package/dist/types/bpmn/bpmn_xml.d.ts +1 -1
  15. package/dist/types/designer/EntityDesigner.d.mts +3 -3
  16. package/dist/types/designer/EntityDesigner.d.ts +3 -3
  17. package/dist/types/er-component/Entity.d.mts +3 -3
  18. package/dist/types/er-component/Entity.d.ts +3 -3
  19. package/dist/types/er-component/Relation.d.mts +2 -2
  20. package/dist/types/er-component/Relation.d.ts +2 -2
  21. package/dist/types/flow/FlowDesigner.d.mts +4 -4
  22. package/dist/types/flow/FlowDesigner.d.ts +4 -4
  23. package/dist/types/flow/FlowEdge.d.mts +2 -2
  24. package/dist/types/flow/FlowEdge.d.ts +2 -2
  25. package/dist/types/flow/FlowNode.d.mts +4 -4
  26. package/dist/types/flow/FlowNode.d.ts +4 -4
  27. package/dist/types/flow/flow_shapes.d.mts +3 -3
  28. package/dist/types/flow/flow_shapes.d.ts +3 -3
  29. package/dist/types/gantt/GanttDependency.d.mts +2 -2
  30. package/dist/types/gantt/GanttDependency.d.ts +2 -2
  31. package/dist/types/gantt/GanttDesigner.d.mts +2 -2
  32. package/dist/types/gantt/GanttDesigner.d.ts +2 -2
  33. package/dist/types/gantt/GanttRuler.d.mts +3 -3
  34. package/dist/types/gantt/GanttRuler.d.ts +3 -3
  35. package/dist/types/gantt/GanttTask.d.mts +2 -2
  36. package/dist/types/gantt/GanttTask.d.ts +2 -2
  37. package/dist/types/gantt/gantt_text.d.mts +1 -1
  38. package/dist/types/gantt/gantt_text.d.ts +1 -1
  39. package/dist/types/index.d.mts +4 -13
  40. package/dist/types/index.d.ts +4 -13
  41. package/dist/types/power/PowerDesigner.d.mts +3 -3
  42. package/dist/types/power/PowerDesigner.d.ts +3 -3
  43. package/dist/types/power/power_shapes.d.mts +5 -5
  44. package/dist/types/power/power_shapes.d.ts +5 -5
  45. package/dist/types/power/power_voltage.d.mts +1 -1
  46. package/dist/types/power/power_voltage.d.ts +1 -1
  47. package/dist/types/react/context.d.mts +2 -2
  48. package/dist/types/react/context.d.ts +2 -2
  49. package/dist/types/react/index.d.mts +0 -1
  50. package/dist/types/react/index.d.ts +0 -1
  51. package/dist/types/react/session.d.mts +4 -4
  52. package/dist/types/react/session.d.ts +4 -4
  53. package/dist/types/react/types.d.mts +7 -7
  54. package/dist/types/react/types.d.ts +7 -7
  55. package/dist/types/secondary/SecondaryDesigner.d.mts +2 -2
  56. package/dist/types/secondary/SecondaryDesigner.d.ts +2 -2
  57. package/dist/types/secondary/secondary_shapes.d.mts +4 -4
  58. package/dist/types/secondary/secondary_shapes.d.ts +4 -4
  59. package/dist/types/statechart/StateNode.d.mts +3 -3
  60. package/dist/types/statechart/StateNode.d.ts +3 -3
  61. package/dist/types/statechart/StateTransition.d.mts +2 -2
  62. package/dist/types/statechart/StateTransition.d.ts +2 -2
  63. package/dist/types/statechart/StatechartDesigner.d.mts +1 -1
  64. package/dist/types/statechart/StatechartDesigner.d.ts +1 -1
  65. package/dist/types/statechart/statechart_text.d.mts +1 -1
  66. package/dist/types/statechart/statechart_text.d.ts +1 -1
  67. package/dist/types/uml/UmlClass.d.mts +3 -3
  68. package/dist/types/uml/UmlClass.d.ts +3 -3
  69. package/dist/types/uml/UmlDesigner.d.mts +1 -1
  70. package/dist/types/uml/UmlDesigner.d.ts +1 -1
  71. package/dist/types/uml/UmlRelation.d.mts +5 -5
  72. package/dist/types/uml/UmlRelation.d.ts +5 -5
  73. package/dist/types/uml/uml_text.d.mts +1 -1
  74. package/dist/types/uml/uml_text.d.ts +1 -1
  75. package/dist/types/utils/component_type_util.d.mts +4 -0
  76. package/dist/types/utils/component_type_util.d.ts +4 -0
  77. package/dist/types/utils/project_codec.d.mts +2 -2
  78. package/dist/types/utils/project_codec.d.ts +2 -2
  79. package/dist/types/utils/project_schema.d.mts +1 -1
  80. package/dist/types/utils/project_schema.d.ts +1 -1
  81. package/dist/types/utils/schema_validator.d.mts +1 -1
  82. package/dist/types/utils/schema_validator.d.ts +1 -1
  83. package/dist/types/utils/type-registry.d.mts +11 -0
  84. package/dist/types/utils/type-registry.d.ts +11 -0
  85. package/package.json +24 -20
  86. package/dist/types/gl-matrix.d.mts +0 -3273
  87. package/dist/types/gl-matrix.d.ts +0 -3273
  88. package/dist/types/ice-render/FrameManager.d.mts +0 -26
  89. package/dist/types/ice-render/FrameManager.d.ts +0 -26
  90. package/dist/types/ice-render/ICE.d.mts +0 -424
  91. package/dist/types/ice-render/ICE.d.ts +0 -424
  92. package/dist/types/ice-render/a11y/accessibility.d.mts +0 -46
  93. package/dist/types/ice-render/a11y/accessibility.d.ts +0 -46
  94. package/dist/types/ice-render/animation/AnimationManager.d.mts +0 -96
  95. package/dist/types/ice-render/animation/AnimationManager.d.ts +0 -96
  96. package/dist/types/ice-render/animation/Easing.d.mts +0 -33
  97. package/dist/types/ice-render/animation/Easing.d.ts +0 -33
  98. package/dist/types/ice-render/consts/BIG_ZINDEX_NUMBER.d.mts +0 -14
  99. package/dist/types/ice-render/consts/BIG_ZINDEX_NUMBER.d.ts +0 -14
  100. package/dist/types/ice-render/consts/COMPONENT_TYPE_MAPPING.d.mts +0 -45
  101. package/dist/types/ice-render/consts/COMPONENT_TYPE_MAPPING.d.ts +0 -45
  102. package/dist/types/ice-render/consts/DOM_EVENT_MAPPING_CONSTS.d.mts +0 -37
  103. package/dist/types/ice-render/consts/DOM_EVENT_MAPPING_CONSTS.d.ts +0 -37
  104. package/dist/types/ice-render/consts/ICE_EVENT_NAME_CONSTS.d.mts +0 -27
  105. package/dist/types/ice-render/consts/ICE_EVENT_NAME_CONSTS.d.ts +0 -27
  106. package/dist/types/ice-render/control-panel/AlignmentGuideManager.d.mts +0 -92
  107. package/dist/types/ice-render/control-panel/AlignmentGuideManager.d.ts +0 -92
  108. package/dist/types/ice-render/control-panel/ICEControlPanel.d.mts +0 -37
  109. package/dist/types/ice-render/control-panel/ICEControlPanel.d.ts +0 -37
  110. package/dist/types/ice-render/control-panel/ICEControlPanelManager.d.mts +0 -25
  111. package/dist/types/ice-render/control-panel/ICEControlPanelManager.d.ts +0 -25
  112. package/dist/types/ice-render/control-panel/link-controls/LineControlPanel.d.mts +0 -39
  113. package/dist/types/ice-render/control-panel/link-controls/LineControlPanel.d.ts +0 -39
  114. package/dist/types/ice-render/control-panel/transform-controls/ResizeControl.d.mts +0 -38
  115. package/dist/types/ice-render/control-panel/transform-controls/ResizeControl.d.ts +0 -38
  116. package/dist/types/ice-render/control-panel/transform-controls/RotateControl.d.mts +0 -12
  117. package/dist/types/ice-render/control-panel/transform-controls/RotateControl.d.ts +0 -12
  118. package/dist/types/ice-render/control-panel/transform-controls/TransformControlPanel.d.mts +0 -83
  119. package/dist/types/ice-render/control-panel/transform-controls/TransformControlPanel.d.ts +0 -83
  120. package/dist/types/ice-render/control-panel/transform-controls/constraints.d.mts +0 -24
  121. package/dist/types/ice-render/control-panel/transform-controls/constraints.d.ts +0 -24
  122. package/dist/types/ice-render/cross-platform/Path2DRecorder.d.mts +0 -76
  123. package/dist/types/ice-render/cross-platform/Path2DRecorder.d.ts +0 -76
  124. package/dist/types/ice-render/cross-platform/PolyfillPath2D.d.mts +0 -21
  125. package/dist/types/ice-render/cross-platform/PolyfillPath2D.d.ts +0 -21
  126. package/dist/types/ice-render/cross-platform/root.d.mts +0 -7
  127. package/dist/types/ice-render/cross-platform/root.d.ts +0 -7
  128. package/dist/types/ice-render/event/DOMEventDispatcher.d.mts +0 -75
  129. package/dist/types/ice-render/event/DOMEventDispatcher.d.ts +0 -75
  130. package/dist/types/ice-render/event/DOMEventInterceptor.d.mts +0 -36
  131. package/dist/types/ice-render/event/DOMEventInterceptor.d.ts +0 -36
  132. package/dist/types/ice-render/event/EventBus.d.mts +0 -27
  133. package/dist/types/ice-render/event/EventBus.d.ts +0 -27
  134. package/dist/types/ice-render/event/ICEEvent.d.mts +0 -46
  135. package/dist/types/ice-render/event/ICEEvent.d.ts +0 -46
  136. package/dist/types/ice-render/event/ICEEventTarget.d.mts +0 -106
  137. package/dist/types/ice-render/event/ICEEventTarget.d.ts +0 -106
  138. package/dist/types/ice-render/event/input-normalize.d.mts +0 -75
  139. package/dist/types/ice-render/event/input-normalize.d.ts +0 -75
  140. package/dist/types/ice-render/export/SvgExporter.d.mts +0 -54
  141. package/dist/types/ice-render/export/SvgExporter.d.ts +0 -54
  142. package/dist/types/ice-render/geometry/GeoLine.d.mts +0 -24
  143. package/dist/types/ice-render/geometry/GeoLine.d.ts +0 -24
  144. package/dist/types/ice-render/geometry/GeoPoint.d.mts +0 -53
  145. package/dist/types/ice-render/geometry/GeoPoint.d.ts +0 -53
  146. package/dist/types/ice-render/geometry/GeoUtil.d.mts +0 -73
  147. package/dist/types/ice-render/geometry/GeoUtil.d.ts +0 -73
  148. package/dist/types/ice-render/geometry/ICEBoundingBox.d.mts +0 -81
  149. package/dist/types/ice-render/geometry/ICEBoundingBox.d.ts +0 -81
  150. package/dist/types/ice-render/graphic/ICEComponent.d.mts +0 -535
  151. package/dist/types/ice-render/graphic/ICEComponent.d.ts +0 -535
  152. package/dist/types/ice-render/graphic/ICEDotPath.d.mts +0 -99
  153. package/dist/types/ice-render/graphic/ICEDotPath.d.ts +0 -99
  154. package/dist/types/ice-render/graphic/ICEImage.d.mts +0 -17
  155. package/dist/types/ice-render/graphic/ICEImage.d.ts +0 -17
  156. package/dist/types/ice-render/graphic/ICEPath.d.mts +0 -46
  157. package/dist/types/ice-render/graphic/ICEPath.d.ts +0 -46
  158. package/dist/types/ice-render/graphic/container/ICEGroup.d.mts +0 -111
  159. package/dist/types/ice-render/graphic/container/ICEGroup.d.ts +0 -111
  160. package/dist/types/ice-render/graphic/link/ICEBezier.d.mts +0 -23
  161. package/dist/types/ice-render/graphic/link/ICEBezier.d.ts +0 -23
  162. package/dist/types/ice-render/graphic/link/ICELinkHook.d.mts +0 -52
  163. package/dist/types/ice-render/graphic/link/ICELinkHook.d.ts +0 -52
  164. package/dist/types/ice-render/graphic/link/ICELinkSlot.d.mts +0 -54
  165. package/dist/types/ice-render/graphic/link/ICELinkSlot.d.ts +0 -54
  166. package/dist/types/ice-render/graphic/link/ICELinkSlotManager.d.mts +0 -28
  167. package/dist/types/ice-render/graphic/link/ICELinkSlotManager.d.ts +0 -28
  168. package/dist/types/ice-render/graphic/link/ICEPolyLine.d.mts +0 -316
  169. package/dist/types/ice-render/graphic/link/ICEPolyLine.d.ts +0 -316
  170. package/dist/types/ice-render/graphic/link/ICEVisioLink.d.mts +0 -163
  171. package/dist/types/ice-render/graphic/link/ICEVisioLink.d.ts +0 -163
  172. package/dist/types/ice-render/graphic/shape/ICECircle.d.mts +0 -19
  173. package/dist/types/ice-render/graphic/shape/ICECircle.d.ts +0 -19
  174. package/dist/types/ice-render/graphic/shape/ICEEllipse.d.mts +0 -29
  175. package/dist/types/ice-render/graphic/shape/ICEEllipse.d.ts +0 -29
  176. package/dist/types/ice-render/graphic/shape/ICEIsogon.d.mts +0 -52
  177. package/dist/types/ice-render/graphic/shape/ICEIsogon.d.ts +0 -52
  178. package/dist/types/ice-render/graphic/shape/ICERect.d.mts +0 -10
  179. package/dist/types/ice-render/graphic/shape/ICERect.d.ts +0 -10
  180. package/dist/types/ice-render/graphic/shape/ICERose.d.mts +0 -41
  181. package/dist/types/ice-render/graphic/shape/ICERose.d.ts +0 -41
  182. package/dist/types/ice-render/graphic/shape/ICEStar.d.mts +0 -45
  183. package/dist/types/ice-render/graphic/shape/ICEStar.d.ts +0 -45
  184. package/dist/types/ice-render/graphic/text/ICEText.d.mts +0 -158
  185. package/dist/types/ice-render/graphic/text/ICEText.d.ts +0 -158
  186. package/dist/types/ice-render/index.d.mts +0 -59
  187. package/dist/types/ice-render/index.d.ts +0 -59
  188. package/dist/types/ice-render/layout/ICEBorderLayout.d.mts +0 -34
  189. package/dist/types/ice-render/layout/ICEBorderLayout.d.ts +0 -34
  190. package/dist/types/ice-render/layout/ICEBoxLayout.d.mts +0 -30
  191. package/dist/types/ice-render/layout/ICEBoxLayout.d.ts +0 -30
  192. package/dist/types/ice-render/layout/ICECardLayout.d.mts +0 -36
  193. package/dist/types/ice-render/layout/ICECardLayout.d.ts +0 -36
  194. package/dist/types/ice-render/layout/ICEFlowLayout.d.mts +0 -31
  195. package/dist/types/ice-render/layout/ICEFlowLayout.d.ts +0 -31
  196. package/dist/types/ice-render/layout/ICEGridLayout.d.mts +0 -33
  197. package/dist/types/ice-render/layout/ICEGridLayout.d.ts +0 -33
  198. package/dist/types/ice-render/layout/ICELayeredLayout.d.mts +0 -49
  199. package/dist/types/ice-render/layout/ICELayeredLayout.d.ts +0 -49
  200. package/dist/types/ice-render/layout/ICELayoutManager.d.mts +0 -33
  201. package/dist/types/ice-render/layout/ICELayoutManager.d.ts +0 -33
  202. package/dist/types/ice-render/layout/ICEOverlayLayout.d.mts +0 -25
  203. package/dist/types/ice-render/layout/ICEOverlayLayout.d.ts +0 -25
  204. package/dist/types/ice-render/persistence/Deserializer.d.mts +0 -43
  205. package/dist/types/ice-render/persistence/Deserializer.d.ts +0 -43
  206. package/dist/types/ice-render/persistence/Serializer.d.mts +0 -35
  207. package/dist/types/ice-render/persistence/Serializer.d.ts +0 -35
  208. package/dist/types/ice-render/plugin/PluginHost.d.mts +0 -86
  209. package/dist/types/ice-render/plugin/PluginHost.d.ts +0 -86
  210. package/dist/types/ice-render/renderer/CanvasRenderer.d.mts +0 -150
  211. package/dist/types/ice-render/renderer/CanvasRenderer.d.ts +0 -150
  212. package/dist/types/ice-render/renderer/ObjectCache.d.mts +0 -84
  213. package/dist/types/ice-render/renderer/ObjectCache.d.ts +0 -84
  214. package/dist/types/ice-render/renderer/dirty-rect-util.d.mts +0 -86
  215. package/dist/types/ice-render/renderer/dirty-rect-util.d.ts +0 -86
  216. package/dist/types/ice-render/theme/ICETheme.d.mts +0 -382
  217. package/dist/types/ice-render/theme/ICETheme.d.ts +0 -382
  218. package/dist/types/ice-render/util/ImageCache.d.mts +0 -19
  219. package/dist/types/ice-render/util/ImageCache.d.ts +0 -19
  220. package/dist/types/ice-render/util/data-util.d.mts +0 -43
  221. package/dist/types/ice-render/util/data-util.d.ts +0 -43
  222. package/dist/types/ice-render/util/gl-matrix-skew.d.mts +0 -14
  223. package/dist/types/ice-render/util/gl-matrix-skew.d.ts +0 -14
  224. package/dist/types/ice-render/util/lang.d.mts +0 -28
  225. package/dist/types/ice-render/util/lang.d.ts +0 -28
  226. package/dist/types/ice-render/util/uuid.d.mts +0 -1
  227. package/dist/types/ice-render/util/uuid.d.ts +0 -1
@@ -1,535 +0,0 @@
1
- /**
2
- * Copyright (c) 2022 大漠穷秋.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- *
7
- */
8
- import { mat2d } from 'gl-matrix';
9
- import EventBus from '../event/EventBus';
10
- import ICEEventTarget from '../event/ICEEventTarget';
11
- import ICEBoundingBox from '../geometry/ICEBoundingBox';
12
- import ICE from '../ICE';
13
- /**
14
- * 阴影简写预设:style.shadow: 'sm' | 'md' | 'lg' 一行搞定浮起效果,
15
- * 对应展开为 shadowColor / shadowBlur / shadowOffsetX / shadowOffsetY。
16
- */
17
- export declare const SHADOW_PRESETS: {
18
- sm: {
19
- shadowColor: string;
20
- shadowBlur: number;
21
- shadowOffsetX: number;
22
- shadowOffsetY: number;
23
- };
24
- md: {
25
- shadowColor: string;
26
- shadowBlur: number;
27
- shadowOffsetX: number;
28
- shadowOffsetY: number;
29
- };
30
- lg: {
31
- shadowColor: string;
32
- shadowBlur: number;
33
- shadowOffsetX: number;
34
- shadowOffsetY: number;
35
- };
36
- };
37
- declare abstract class ICEComponent extends ICEEventTarget {
38
- ice: ICE;
39
- root: any;
40
- ctx: any;
41
- evtBus: EventBus;
42
- parentNode: any;
43
- protected static instanceCounter: number;
44
- protected __dirty: boolean;
45
- /**
46
- * 本组件是否**已经真正绘制过一次**(`__renderCore` 走完了 doRender 才会置真)。
47
- *
48
- * 存在的意义:`dirty` 同时承担两个语义 —— 「本帧要重绘」和「几何缓存(`ICEPath.createPathObject`)
49
- * 是否有效」。后者只在 doRender 里以 `if (this.dirty)` 的形式被消费,因此**从未渲染过的组件
50
- * 一旦被置干净,它的路径缓存就永远不会被建立**,首次上屏是空的(见 `__applyDirty`)。
51
- */
52
- protected __everRendered: boolean;
53
- private __localBoxScratch;
54
- /** 本渲染通道的「本地 → 设备」CTM(主画布通道 = 视口·composed;离屏位图通道 = base·composed)。 */
55
- private __activeCtm;
56
- /** 本渲染通道的「世界 → 设备」矩阵(主画布通道 = 视口;离屏通道 = 缓存位图的 base 矩阵)。 */
57
- private __activeWorldMatrix;
58
- /** 可见性缓存(代际号 + 值):见 `isEffectivelyVisible` 的说明。 */
59
- private __visEpoch;
60
- private __visValue;
61
- /** 本帧是否因为子树不透明度过 ctx.globalAlpha(见 __renderCore / __resetLeakyCtxState)。 */
62
- private __opacityApplied;
63
- /** 声明式渐变缓存:按描述对象引用判定,`refreshParams()` 里失效(setState 必然触发它)。 */
64
- private __gradCache;
65
- /**
66
- * 「自身派生参数需要重算」标志(尺寸 / 点集 / 文本量测等,由 calcComponentParams 产出)。
67
- *
68
- * 与 `dirty` 的区别:
69
- * - `dirty` 表示**需要重绘**。祖先变换变化时,后代的绝对矩阵变了 → 必须重绘;
70
- * - `paramsDirty` 表示**自身派生参数需要重算**。它只取决于组件自身的 state,
71
- * 与祖先变换无关。
72
- *
73
- * 拆分的目的:移动一个容器时,旧实现递归把所有后代置 `dirty`,而后代又以 `dirty`
74
- * 判断是否重算派生参数 → 后代(尤其点集类图元)会白白重算 `calcDots()`。
75
- * 现在后代只置 `dirty`(要重绘),派生参数仍为干净 → 跳过重量测。
76
- *
77
- * 统一由 `refreshParams()` 读取与清理,不要在别处手工维护。
78
- */
79
- protected __paramsDirty: boolean;
80
- private __absScratchA;
81
- private __absScratchB;
82
- private __transScratch;
83
- private __originScratch;
84
- private __composeScratch;
85
- private __viewportScratch;
86
- /**
87
- * @cfg
88
- * {
89
- * id: 'ICE_XXXXXXX', //UUID
90
- * left: 0, //x 坐标相对于父组件的偏移量
91
- * top: 0, //y 坐标相对于父组件的偏移量
92
- * width: 0, //原始宽度,没有经过变换
93
- * height: 0, //原始高度,没有经过变换
94
- * style: {
95
- * fillStyle: 'red',
96
- * strokeStyle: 'blue',
97
- * lineWidth: 1,
98
- * },
99
- * fill:true, //是否填充
100
- * stroke:true, //是否描边
101
- * animations: {}, //动画
102
- * transform: { //组件自身的变换参数,不包含父组件
103
- * translate: [0, 0], //平移,像素
104
- * scale: [1, 1], //X轴缩放倍数,Y轴缩放倍数
105
- * skew: [0, 0], //X轴扭曲角度,Y轴扭曲角度
106
- * rotate: 0, //旋转角度
107
- * },
108
- * linearMatrix: [], //线性变换矩阵,不含平移,按照 gl-matrix 的格式定义
109
- * composedMatrix: [], //复合变换矩阵,包含所有祖先节点的平移、原点移动、线性变换计算,composedMatrix 不会实时更新,如果需要获取当前最新的变换矩阵,需要调用 composeMatrix() 方法。按照 gl-matrix 的格式定义
110
- * origin:'localCenter',
111
- * localOrigin: [0,0], //相对于组件本地坐标系(组件内部的左上角为 [0,0] 点)计算的原点坐标
112
- * absoluteOrigin: [0,0], //相对于全局坐标系(canvas 的左上角 [0,0] 点)计算的原点坐标
113
- * zIndex: ICEComponent.instanceCounter++, //类似于 CSS 中的 zIndex
114
- * display:true, //如果 display 为 false , Renderer 不会调用其 render 方法,对象在内存中存在,但是不会被渲染出来。如果 display 为 false ,所有子组件也不会被渲染出来。
115
- * draggable:true, //是否可以拖动
116
- * transformable:true, //是否可以进行变换:scale/rotate/skew ,以及 resize ,但是不控制拖动
117
- * linkable:true, //组件是否可以用连接线连接起来,如果此状态为 true ,ICELinkSlotManager 在运行时会动态在组件上创建连接插槽 ICELinkSlot 的实例
118
- * interactive: true, //是否可以进行用户交互操作,如果此参数为 false , draggable, transformable TODO:动画运行过程中不允许选中,不能进行交互???
119
- * showMinBoundingBox:true, //是否显示最小包围盒,开发时打开,主要用于 debug
120
- * showMaxBoundingBox:true, //是否显示最大包围盒,开发时打开,主要用于 debug
121
- * }
122
- * @param props
123
- */
124
- props: any;
125
- /**
126
- * 在 ICE 引擎中,所有对象都可以启用动画效果,所以对象的 state 随时可能发生变化。
127
- * props 与 state 之间的关系与行为模式借鉴自 React 框架,概念模型完全一致。
128
- * @see https://reactjs.org/docs/components-and-props.html
129
- */
130
- state: any;
131
- private __presetName?;
132
- private __userProps?;
133
- constructor(props?: any);
134
- /**
135
- * 初始化 state:同样原型继承共享默认,只把用户传入的 own 字段深拷贝到实例,
136
- * 运行时派生字段(矩阵/原点等)预分配 own 空值。
137
- *
138
- * 这样 state 与 props 是独立对象,任何「直接写 state」都不会污染 props 或共享默认;
139
- * 同时省去「完整 cloneDeep(props)」里重复的默认嵌套对象(内存优化)。
140
- */
141
- private __initState;
142
- /**
143
- * 重新 resolve preset(主题热切换用):把 preset 补丁按当前主题重新展开,
144
- * 只更新 preset 涉及的字段(style + radius/stroke/fill 等),用户显式传的值优先。
145
- */
146
- __reapplyPreset(theme?: any): void;
147
- /**
148
- * @method initEvents 注册默认支持的事件
149
- *
150
- * - ICEComponent 是顶级类,这里注册的事件所有子类都会响应。
151
- * - 子类可以提供自己特殊的实现,也可以把此方法覆盖成空函数。
152
- *
153
- * @see {ICEComponent.keyboardEvtHandler}
154
- */
155
- protected initEvents(): void;
156
- protected mouseDownEvtHandler(evt?: any): void;
157
- protected mouseMoveEvtHandler(evt: any): boolean;
158
- protected mouseUpEvtHandler(evt?: any): void;
159
- /**
160
- * @method keyboardEvtHandler 默认键盘事件处理
161
- *
162
- * - ICE 中的所有组件默认都可以接收键盘事件,子类可以覆盖此方法提供自己的实现。
163
- * - 子类如果不需要响应键盘事件,可以覆盖一个空实现,或者在构造完成之后删掉对键盘事件的监听。
164
- *
165
- * !注意,这里只支持标准写法,不再兼容历史的 charCode 和 keyCode 写法。
166
- * !W3C 标准按键值定义 https://www.w3.org/TR/uievents-key/#key-attribute-value
167
- * @param evt
168
- * @returns
169
- */
170
- protected keyboardEvtHandler(evt: any): void;
171
- /**
172
- * !Important: 核心方法,FrameManager 会调度此方法进行实际的渲染操作。
173
- * !Important: 这些方法调用有顺序
174
- */
175
- render(): void;
176
- /**
177
- * 把组件渲染到指定的目标上下文(离屏缓存用)。
178
- *
179
- * - baseMatrix:在组件自身 composedMatrix 之前再叠加的基准矩阵。离屏缓存用它把世界盒
180
- * 平移到离屏画布左上角,即最终 CTM = baseMatrix · composedMatrix。
181
- * - 渲染期间临时把 this.ctx 重定向到 targetCtx,结束后恢复,不改变组件状态。
182
- */
183
- renderTo(targetCtx: any, baseMatrix?: number[] | null): void;
184
- /**
185
- * 「最终可见」:自身与**所有祖先**的 `state.display` 都为真。
186
- *
187
- * `state.display = false` 的语义是「整棵子树都不渲染」(见上方 props 文档),但渲染队列
188
- * 是把树拉平后逐个入队的,只判组件自身的话,把一个父容器设为 false 后它的子组件仍会被
189
- * 画出来、也仍能被点中。
190
- *
191
- * 顶层组件(无 parentNode)走 O(1) 快路径 —— 绝大多数组件都是顶层,热路径上不付出遍历成本。
192
- */
193
- isEffectivelyVisible(): boolean;
194
- /** 真正沿父链判定一次(只在代际变化时执行)。 */
195
- private __computeEffectivelyVisible;
196
- private __renderCore;
197
- protected applyStyleToCtx(): void;
198
- /**
199
- * 应用单个样式属性到 ctx,支持简写:
200
- * - shadow: 'sm' | 'md' | 'lg' 展开成 shadowColor/shadowBlur/shadowOffsetX/shadowOffsetY。
201
- */
202
- private __applyStyleProp;
203
- /**
204
- * 把声明式渐变描述解析成 `CanvasGradient`(带缓存)。
205
- *
206
- * 描述形状(坐标是**组件本地坐标**):
207
- * ```
208
- * { type: 'linear', from: [0,0], to: [100,0], stops: [[0,'#fff'],[1,'#000']] }
209
- * { type: 'radial', center: [50,50], radius: 50, innerRadius: 0, stops: [...] }
210
- * { type: 'conic', center: [50,50], startAngle: 0, stops: [...] }
211
- * ```
212
- * 它比手搓 `CanvasGradient` 多两个好处:**可序列化**(纯对象,存盘不丢)与**可用于主题 preset**。
213
- */
214
- private __resolveGradient;
215
- /** 真正构造 CanvasGradient。缺少对应 ctx API 时返回 null(调用方会退回纯色)。 */
216
- private __buildGradient;
217
- /**
218
- * @method calcComponentParams
219
- * - 计算组件最原始的宽高和位置,此时没有经过任何变换,也没有移动坐标原点。
220
- * - 在计算组件的原始尺寸时还没有确定原点坐标,所以只能基于组件本地坐标系的左上角 (0,0) 点进行计算。
221
- * - 此方法不能依赖原点位置和 transform 矩阵。
222
- * - 此方法会在 render() 中调用,所以不需要在构造函数中调用。
223
- * - 此方法中不能使用 setState() ,如果需要修改状态,直接赋值,如:this.state.width = 100;
224
- * - 子类可以覆盖此方法,实现自己的计算逻辑。
225
- * @returns
226
- */
227
- protected calcComponentParams(): {
228
- width: any;
229
- height: any;
230
- };
231
- /**
232
- * 组件**本地包围盒**(未变换、未减去原点),写入并返回 [x0, y0, x1, y1]。
233
- *
234
- * 默认约定:几何自本地 (0,0) 起、尺寸为 `state.width/height`。
235
- * **子类若几何不遵守该约定必须覆盖本方法** —— 例如 `ICEPolyLine` 的本地原点固定为 (0,0),
236
- * 而点集可以含负坐标,此时 [0,0,w,h] 并非它的真实盒子。
237
- *
238
- * `getMinBoundingBox()` 与 `__paintWorldBox()` 都消费本方法,因此两者**必然一致**。
239
- * 这两者以前各算各的:`__paintWorldBox()` 直接由 width/height 推导,而折线的 `width ≈ 0`
240
- * (见 ICEPolyLine.calcComponentParams 的历史实现)→ 它上屏快照是个退化小盒 →
241
- * dirty-rect 按快照盒挑选「需要重画的组件」时会漏掉折线,导致擦除区域内折线笔迹丢失。
242
- *
243
- * 注意:返回的是实例内复用缓冲,调用方应**立即读取**,不要持有。
244
- */
245
- protected __localBox(): number[];
246
- /**
247
- * 显式「测量」:刷新一次自身派生参数(尺寸 / 点集 / 文本量测)。
248
- *
249
- * 布局管理器(`ICELayoutManager`)排布时读的是 `child.state.width/height`,
250
- * 而这些值在首次渲染之前是 0(文本甚至是 10 的哨兵值)—— 布局因此会算错。
251
- * 由容器在布局前统一调一次本方法,布局就不必「等一帧才正确」。
252
- */
253
- measure(): void;
254
- /**
255
- * 派生参数刷新入口(**唯一**):按需调用子类的 `calcComponentParams()`,并在算完后清除 `paramsDirty`。
256
- *
257
- * - 参数干净时直接返回,因此「只重绘、不改自身参数」的帧(例如祖先移动)不会重算点集/文本量测。
258
- * - 需要强制重算时请先置 `paramsDirty = true`(`setState` 已自动做这件事)。
259
- */
260
- refreshParams(): void;
261
- /**
262
- * 计算本地原点坐标,相对于组件本地坐标系。
263
- * 此方法依赖于 width/height ,需要先计算组件的尺寸,然后才能调用此方法。
264
- * @returns
265
- */
266
- protected calcLocalOrigin(): any;
267
- /**
268
- * 根据原点位置描述计算原点坐标值。
269
- * 移动坐标原点后,组件内部所有的坐标点数值、边界盒子的坐标,都会受到影响。
270
- * 计算出的原点数值已经包含了所有父层的移位和变换。
271
- * @method calcAbsoluteOrigin
272
- */
273
- calcAbsoluteOrigin(): any;
274
- /**
275
- * 计算线性变换矩阵,此矩阵不包含平移操作。
276
- * 线性变换顺序:旋转->错切->缩放
277
- * 由于矩阵变换有顺序,这里采用符合自然理解的顺序进行。
278
- * @method calcLinearMatrix
279
- * @returns
280
- */
281
- protected calcLinearMatrix(): any;
282
- /**
283
- * 复合所有祖先节点的线性变换矩阵,获得相对于全局 canvas 对象的变换矩阵。
284
- * @returns
285
- */
286
- calcAbsoluteLinearMatrix(): any;
287
- /**
288
- * 仿射变换由2步完成:
289
- * - ctx 平移到指定的原点。
290
- * - ctx 进行线性变换。
291
- *
292
- * Canvas 绘图过程中的仿射变换动作与线性代数中的规则有差异:
293
- * - Canvas 的 Y 坐标轴方向是向下的。
294
- * - Canvas 在做仿射变换时,变换的是 ctx 本身,而不是组件对象,相当于画布本身是具有弹性的可变形对象。
295
- *
296
- * @method composeMatrix
297
- * @returns
298
- */
299
- protected composeMatrix(): mat2d;
300
- /**
301
- * 把变换矩阵应用到 this.ctx 上
302
- */
303
- protected applyTransformToCtx(baseMatrix?: number[] | null, applyViewport?: boolean): void;
304
- /**
305
- * 复原「本渲染通道的完整 CTM」(`base·composed` 或 `viewport·composed`)。
306
- *
307
- * 子类在 `super.doRender()` 之后需要重新拿到完整变换 —— 链上的 `ICEComponent.doRender()` 会
308
- * 把 CTM 换成「世界 → 设备」矩阵以绘制 debug 包围盒。
309
- *
310
- * **不要用 `applyTransformToCtx(null, true)` 代替**:那条路径无条件按主画布视口重算,
311
- * 在离屏位图通道里会把内容画到完全错误的位置(丢掉位图原点的平移),
312
- * 表现为「连线的箭头与标签在缓存位图里整块消失」——离屏缓存保真测试就是抓这个的。
313
- */
314
- protected applyActiveTransform(): void;
315
- /**
316
- * 是否存在开启 `clipChildren` 的祖先(热路径用,命中检测与离屏缓存的门控都要问它)。
317
- * 顶层组件直接 O(1) 返回。
318
- */
319
- hasClippingAncestor(): boolean;
320
- /**
321
- * 有效不透明度 = 自身 `state.opacity` × 所有祖先的 `state.opacity`(默认 1)。
322
- *
323
- * 顶层组件直接返回(绝大多数组件没有祖先,热路径上不做遍历);非法值按 1 处理。
324
- */
325
- /**
326
- * 有效不透明度 = 自身 `state.opacity` × 所有祖先的 `state.opacity`(默认 1)。
327
- *
328
- * 渲染把相乘的结果叠到 `ctx.globalAlpha` 上(祖先的 opacity 不会自动继承,组件是逐个绘制的)。
329
- * 公开出来是因为**离屏与 SVG 导出必须用同一口径**,否则导出的图会比画布亮/暗一截。
330
- */
331
- getEffectiveOpacity(): number;
332
- /**
333
- * 世界坐标点是否落在某个「裁剪祖先」的盒子之外。
334
- *
335
- * 命中检测用它实现「滚出可视区的子组件点不到」—— 与渲染时的裁剪语义保持一致。
336
- */
337
- isPointClippedOut(wx: number, wy: number): boolean;
338
- /**
339
- * 把「裁剪祖先」的盒子作为裁剪区应用到 ctx —— 在**设备空间**建立。
340
- *
341
- * 做法与脏矩形路径一致(见 CanvasRenderer 的局部重绘分支):
342
- * `setTransform(单位矩阵) → rect → clip → 复原本组件 CTM`。clip 记录在 ctx 的裁剪状态里,
343
- * 之后组件自己 `setTransform` 不会清掉它;`restore()` 才移除。
344
- *
345
- * 祖先有旋转/缩放时按其世界 AABB 裁剪(保守,宁可多裁不可漏裁)。
346
- *
347
- * @returns 是否建立过裁剪(true 时调用方必须 `ctx.restore()`)
348
- */
349
- private __applyAncestorClips;
350
- /**
351
- * 把「世界 → 设备」矩阵应用到 ctx。
352
- * debug 包围盒的坐标本身就是世界坐标,不能套「本地 → 世界」的 composed 矩阵。
353
- */
354
- protected applyWorldTransform(): void;
355
- /**
356
- * 所有子类都应该提供具体的实现。
357
- * @method doRender
358
- */
359
- protected doRender(): void;
360
- /** 判断两个边界盒是否在视觉上重合(用于避免重复绘制几乎相同的 min/max 框)。 */
361
- private __areBoundingBoxesNearlyEqual;
362
- /**
363
- * 内部子组件是否为「由自身 state 派生」的。
364
- *
365
- * 复合组件(构造时按 state 建立内部子组件的组件,如「卡片 = 底框 + 标题」)应当返回 true:
366
- * 这些子组件在反序列化时会被构造函数重建,序列化它们只会造成**重复挂载**
367
- * (先由构造函数建一份、再由 Deserializer 挂一份)、并且子组件的自动 zIndex 每次都会变,
368
- * 让同一份数据的两次序列化结果不稳定。返回 true 后,Serializer / Deserializer 都会跳过
369
- * 该组件的 childNodes —— 只持久化它自己的 state(真相源),子组件视为派生结果。
370
- *
371
- * 默认为 false(普通容器/叶子组件的子节点是「真数据」,必须序列化)。
372
- */
373
- hasDerivedChildren(): boolean;
374
- /**
375
- * 复合组件里**需要进文档的真实子节点**(可选实现)。
376
- *
377
- * 背景:`hasDerivedChildren() === true` 表示「子节点都是派生结果、不进文档」,
378
- * 但有一类组件**既是复合组件、又是容器** —— 典型是流程图 / BPMN 的节点与池:
379
- * 它自己按 state 派生形状(内框 / 角标 / 标题),同时又真的装着子节点(泳道、泳道里的节点)。
380
- * 只声明 `hasDerivedChildren()` 的话,序列化会把**真实子节点也一起跳过**,
381
- * 于是 `serialize() → load()` 之后池里的泳道和节点整套消失(实测:3 个元素只剩 1 个)。
382
- *
383
- * 实现这个方法的组件要返回「真实子节点」(通常 = `childNodes` 减去派生部件),
384
- * 引擎据此只序列化这些子节点;反序列化时构造函数仍会重建派生部件,不会重复。
385
- *
386
- * 不实现时行为**与以前完全一致**(复合组件一个子节点都不进文档)—— 默认不变,属增量能力。
387
- */
388
- getSerializableChildren(): ICEComponent[];
389
- /**
390
- * 获取组件的最小包围盒,此盒子的变换矩阵与组件自身完全相同。
391
- * 此方法需要在 render() 之后调用,组件没有渲染时无法计算最小包围盒。
392
- * @returns
393
- */
394
- getMinBoundingBox(refresh?: boolean): ICEBoundingBox;
395
- /**
396
- * 获取组件的最大包围盒:
397
- * - 盒子保持水平和竖直,不旋转、不错切。
398
- * - 盒子的4边在全局坐标 X/Y 轴上的投影范围与组件完全一致。
399
- * @returns
400
- */
401
- getMaxBoundingBox(refresh?: boolean): ICEBoundingBox;
402
- /**
403
- * @method setState 更新组件状态
404
- *
405
- * - setState 仅仅修改参数,不会立即导致重新渲染,需要等待 FrameManager 调度,最小延迟时间约为 1/60=16.67 ms 。
406
- * - state 上的所有数据是随时可能发生变化的,而 props 构造参数是不可变的,这一特性与 React 框架保持一致。 @see https://reactjs.org/docs/components-and-props.html
407
- * - state 上的所有参数默认都会被序列化。
408
- *
409
- * @param newState
410
- */
411
- setState(newState: any): void;
412
- /**
413
- * `setState` 的**前置**钩子:必须在 `merge(this.state, newState)` 之前调用(要对比新旧值)。
414
- *
415
- * 覆盖 `setState` 的子类**必须**成对调用前后置钩子 —— `ICEGroup.setState` 是独立实现
416
- * (它自己 merge、且不调 `super.setState`),曾因此漏掉这两件事:
417
- * 「隐藏一个分组」不会让后代的可见性缓存失效、「分组改尺寸」不会触发父容器重排。
418
- *
419
- * @returns 尺寸是否变化(决定 `__afterStateMerge` 是否需要请求重排)
420
- */
421
- protected __beforeStateMerge(newState: any): boolean;
422
- /** `setState` 的**后置**钩子:尺寸变化时请求父容器重排(合并到下一帧,见 `ICEGroup.requestLayout`)。 */
423
- protected __afterStateMerge(sizeChanged: boolean): void;
424
- set dirty(flag: boolean);
425
- get dirty(): boolean;
426
- /**
427
- * 按 `markDirty` 语义更新脏标记。
428
- *
429
- * `markDirty = false` 的含义是「这次操作**不要**主动把组件标记为要重绘」(批量挂载时的性能优化),
430
- * 而**不是**「把它强制置干净」:对从未绘制过的组件置干净会让几何缓存永不建立,首次上屏画不出
431
- * 自身的路径(`ICEPath.doRender` 只在 dirty 时调用 `createPathObject`)。
432
- *
433
- * 例:`UIButton` 构造函数里 `addChild(this.label, false)` 会把自己置干净,导致按钮的圆角矩形
434
- * 背景/边框在首帧是空路径 —— 页面上表现为「白底白字、完全看不见的按钮」。
435
- */
436
- protected __applyDirty(markDirty: boolean): void;
437
- set paramsDirty(flag: boolean);
438
- get paramsDirty(): boolean;
439
- /**
440
- * 相对于父组件的坐标系和原点。
441
- * @param left
442
- * @param top
443
- * @param evt
444
- */
445
- setPosition(left: number, top: number, evt?: any): void;
446
- /**
447
- * 在全局空间(canvas)中移动指定的位移。
448
- * 注意:此方法用于直接设置组件在全局空间中的位移,而不是相对于其它坐标系。
449
- * @param tx
450
- * @param ty
451
- * @param evt
452
- */
453
- moveGlobalPosition(tx: number, ty: number, evt?: any): void;
454
- /**
455
- * 直接设置在全局空间 (canvas) 中的位置。
456
- * 注意:此方法用于直接设置组件在全局空间中的位置,而不是相对于其它坐标系。
457
- * @param left
458
- * @param top
459
- * @param evt
460
- */
461
- setGlobalPosition(left: number, top: number, evt?: any): void;
462
- /**
463
- * 在全局空间(canvas)中旋转指定的角度。
464
- * 注意:此方法用于直接设置组件在全局空间中的旋转角,而不是相对于其它坐标系。
465
- * @param rotateAngle
466
- */
467
- setGlobalRotate(rotateAngle: any): void;
468
- /**
469
- * 组件局部坐标系中的点转换成全局空间(canvas)中的点,包含移动原点的操作。
470
- * @param localX
471
- * @param localY
472
- * @returns
473
- */
474
- localToGlobal(localX: number, localY: number): number[];
475
- /**
476
- * 全局空间(canvas)中的点转换成组件局部坐标系中的点,包含移动原点的操作。
477
- * @param globalX
478
- * @param globalY
479
- * @returns
480
- */
481
- globalToLocal(globalX: number, globalY: number): number[];
482
- /**
483
- * @method getRotateAngle 获取组件的旋转角度。
484
- * 根据变换矩阵计算组件在全局空间(canvas)中的旋转角度。
485
- * @param refresh 如果为 true ,则重新计算变换矩阵,否则使用缓存的变换矩阵。
486
- * @returns
487
- */
488
- getRotateAngle(refresh?: boolean): number;
489
- /**
490
- * @method getLocalLeftTop 得到组件在局部坐标系中的左上角坐标。
491
- * @param refresh 如果为 true ,则重新计算变换矩阵,否则使用缓存的变换矩阵。
492
- * @returns
493
- */
494
- getLocalLeftTop(refresh?: boolean): {
495
- left: number;
496
- top: number;
497
- width: number;
498
- height: number;
499
- };
500
- /**
501
- * @internal 渲染器专用:render 结束后的 ctx 泄漏属性归位(组件自包含,见顶部 LEAKY_CTX_PROPS)。
502
- * 仅当本组件确实写过了某个泄漏属性时才归位,避免无谓的每帧属性写入。
503
- */
504
- __resetLeakyCtxState(): void;
505
- private __leakyIndex;
506
- /**
507
- * @internal 渲染器专用:用「当前的 composedMatrix + __localBox() + localOrigin」计算世界轴对齐
508
- * 包围盒 [minX, minY, maxX, maxY],零分配(手动 4 角变换,不复用 vec2 以免每帧分配)。
509
- * 前置条件:调用方已保证 composedMatrix 新鲜(render 之后 / composeMatrix 之后)。
510
- */
511
- __paintWorldBox(out?: any): number[];
512
- containsPoint(x: number, y: number): boolean;
513
- /**
514
- * 判断本地坐标(以组件 origin 为原点的空间)的点是否位于图元内部。
515
- * 默认用最小包围盒(AABB),子类可覆盖为精确形状判定。
516
- * @param localX
517
- * @param localY
518
- */
519
- protected containsLocalPoint(localX: number, localY: number): boolean;
520
- /**
521
- * @method destory
522
- * 销毁组件
523
- * - FIXME:立即停止组件上的所有动画效果
524
- * - 需要清理绑定的事件
525
- * - 带有子节点的组件需要先销毁子节点,然后再销毁自身。
526
- * - 子类需要覆盖此方法,释放自己占有的资源。
527
- */
528
- /**
529
- * `destory()` 的拼写修正别名。
530
- * 历史 API 拼写为 `destory`(已对外发布,不能直接改名),这里提供正确拼写作为等价入口。
531
- */
532
- destroy(): void;
533
- destory(): void;
534
- }
535
- export default ICEComponent;
@@ -1,99 +0,0 @@
1
- import ICEPath from './ICEPath.mjs';
2
- /**
3
- * @class ICEDotPath
4
- *
5
- * 基于一系列点进行绘制的路径。
6
- *
7
- * @author 大漠穷秋<damoqiongqiu@126.com>
8
- */
9
- export default abstract class ICEDotPath extends ICEPath {
10
- /**
11
- * @cfg
12
- * {
13
- * dots: [], //点状路径的点集
14
- * closePath:true, //是否闭合
15
- * }
16
- *
17
- * @param props
18
- */
19
- constructor(props: any);
20
- /**
21
- * @overwrite
22
- * @method calcComponentParams
23
- * - 计算组件最原始的宽高和位置,此时没有经过任何变换,也没有移动坐标原点。
24
- * - 在计算组件的原始尺寸时还没有确定原点坐标,所以只能基于组件本地坐标系的左上角 (0,0) 点进行计算。
25
- * - 此方法不能依赖原点位置和 transform 矩阵。
26
- * - 此方法会在 render() 中调用,所以不需要在构造函数中调用。
27
- * - 此方法中不能使用 setState() ,如果需要修改状态,直接赋值,如:this.state.width = 100;
28
- * - 子类可以覆盖此方法,实现自己的计算逻辑。
29
- * @returns
30
- */
31
- protected calcComponentParams(): {
32
- width: any;
33
- height: any;
34
- };
35
- /**
36
- * 精确命中判定:点是否位于点集构成的多边形内部(射线法)。
37
- * dots 在 calcLocalOrigin() 之后是「以 origin 为原点」的本地坐标,与 containsLocalPoint 的参数空间一致。
38
- * @overwrite
39
- */
40
- protected containsLocalPoint(localX: number, localY: number): boolean;
41
- /**
42
- * 点状路径在重新计算本地原点坐标之后,需要移动内部所有点的位置。
43
- *
44
- * 关键:这里**只补「目标平移量 − 已应用平移量」的差额**。
45
- * 旧实现每次都无条件平移 -origin,导致每 compose 一次 dots 就再偏移一个原点
46
- * (实测连续三次 compose,dots 依次偏移 1/2/3 个原点),因此调用方必须严格保证
47
- * 「compose 之前先重算 dots(calcDots)」——这正是局部重绘 / 包围盒刷新等路径
48
- * 必须显式配对调用 `calcComponentParams()` 的原因,也是「跳过重量测」优化无法落地的原因。
49
- * 记录已应用量之后,重复 compose 变成幂等操作(差额为 0)。
50
- *
51
- * @overwrite
52
- * @returns
53
- */
54
- protected calcLocalOrigin(): any;
55
- /**
56
- * @returns
57
- */
58
- protected createPathObject(): any;
59
- /**
60
- * dots 上已应用的平移量(当前 dots 相对「绝对本地坐标」的偏移),供 calcLocalOrigin() 做幂等补偿。
61
- * 见 calcLocalOrigin() 的说明。
62
- */
63
- protected __dotsShiftX: number;
64
- protected __dotsShiftY: number;
65
- /**
66
- * dots 重建的**唯一入口**:先把「已应用平移量」归零(__calcDots() 产出的是**绝对**本地坐标),
67
- * 再交给子类实现。
68
- *
69
- * 子类请覆盖 `__calcDots()`,**不要**覆盖本方法——否则幂等补偿会失效。
70
- *
71
- * 计算路径上的关键点:
72
- * - 默认的坐标原点是 (0,0) 位置。
73
- * - 这些点没有经过 transform 矩阵变换。
74
- * - this.calcComponentParams() 会依赖此方法来计算位置和尺寸,此时还没有确定原点坐标,所以 __calcDots() 内部不能依赖原点坐标,只能基于组件本地坐标系的左上角 (0,0) 点进行计算。
75
- * @returns
76
- */
77
- protected calcDots(): any;
78
- /**
79
- * 子类实现:按**绝对**本地坐标(未减去原点)填充 `state.dots`。
80
- * @returns
81
- */
82
- protected __calcDots(): any;
83
- /**
84
- * 确保 dots 已计算:反序列化时 dots 属缓存值不会被序列化,反序列化后 dots 为空,
85
- * 在 render 之前若访问 dots(如 getMinBoundingBox → calc4VertexPoints)会取到空数组导致报错。
86
- * 这里在 dots 缺失时惰性触发 calcDots 补齐。
87
- */
88
- protected ensureDots(): void;
89
- /**
90
- *
91
- * 计算4个顶点:
92
- * - 相对于组件本地的坐标系,原点位于左上角,没有经过矩阵变换。
93
- * - 返回值用于计算组件的原始 width/height 。
94
- *
95
- * @returns
96
- */
97
- protected calc4VertexPoints(): any[][];
98
- protected getTransformedDots(): any[];
99
- }