ice-entity-designer 0.0.39 → 0.1.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 (223) hide show
  1. package/README.md +69 -14
  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 +3 -3
  8. package/dist/types/bpmn/BpmnSimulator.d.ts +3 -3
  9. package/dist/types/bpmn/bpmn_shapes.d.mts +1 -1
  10. package/dist/types/bpmn/bpmn_shapes.d.ts +1 -1
  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 +2 -2
  18. package/dist/types/er-component/Entity.d.ts +2 -2
  19. package/dist/types/er-component/Relation.d.mts +1 -1
  20. package/dist/types/er-component/Relation.d.ts +1 -1
  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 +3 -3
  26. package/dist/types/flow/FlowNode.d.ts +3 -3
  27. package/dist/types/flow/flow_shapes.d.mts +1 -1
  28. package/dist/types/flow/flow_shapes.d.ts +1 -1
  29. package/dist/types/gantt/GanttDependency.d.mts +1 -1
  30. package/dist/types/gantt/GanttDependency.d.ts +1 -1
  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 +2 -2
  34. package/dist/types/gantt/GanttRuler.d.ts +2 -2
  35. package/dist/types/gantt/GanttTask.d.mts +1 -1
  36. package/dist/types/gantt/GanttTask.d.ts +1 -1
  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 +2 -2
  42. package/dist/types/power/PowerDesigner.d.ts +2 -2
  43. package/dist/types/power/power_shapes.d.mts +4 -4
  44. package/dist/types/power/power_shapes.d.ts +4 -4
  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 +1 -1
  56. package/dist/types/secondary/SecondaryDesigner.d.ts +1 -1
  57. package/dist/types/secondary/secondary_shapes.d.mts +2 -2
  58. package/dist/types/secondary/secondary_shapes.d.ts +2 -2
  59. package/dist/types/statechart/StateNode.d.mts +2 -2
  60. package/dist/types/statechart/StateNode.d.ts +2 -2
  61. package/dist/types/statechart/StateTransition.d.mts +1 -1
  62. package/dist/types/statechart/StateTransition.d.ts +1 -1
  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 +2 -2
  68. package/dist/types/uml/UmlClass.d.ts +2 -2
  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 +4 -4
  72. package/dist/types/uml/UmlRelation.d.ts +4 -4
  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/project_codec.d.mts +2 -2
  76. package/dist/types/utils/project_codec.d.ts +2 -2
  77. package/dist/types/utils/project_schema.d.mts +1 -1
  78. package/dist/types/utils/project_schema.d.ts +1 -1
  79. package/dist/types/utils/schema_validator.d.mts +1 -1
  80. package/dist/types/utils/schema_validator.d.ts +1 -1
  81. package/package.json +24 -20
  82. package/dist/types/gl-matrix.d.mts +0 -3273
  83. package/dist/types/gl-matrix.d.ts +0 -3273
  84. package/dist/types/ice-render/FrameManager.d.mts +0 -26
  85. package/dist/types/ice-render/FrameManager.d.ts +0 -26
  86. package/dist/types/ice-render/ICE.d.mts +0 -424
  87. package/dist/types/ice-render/ICE.d.ts +0 -424
  88. package/dist/types/ice-render/a11y/accessibility.d.mts +0 -46
  89. package/dist/types/ice-render/a11y/accessibility.d.ts +0 -46
  90. package/dist/types/ice-render/animation/AnimationManager.d.mts +0 -96
  91. package/dist/types/ice-render/animation/AnimationManager.d.ts +0 -96
  92. package/dist/types/ice-render/animation/Easing.d.mts +0 -33
  93. package/dist/types/ice-render/animation/Easing.d.ts +0 -33
  94. package/dist/types/ice-render/consts/BIG_ZINDEX_NUMBER.d.mts +0 -14
  95. package/dist/types/ice-render/consts/BIG_ZINDEX_NUMBER.d.ts +0 -14
  96. package/dist/types/ice-render/consts/COMPONENT_TYPE_MAPPING.d.mts +0 -45
  97. package/dist/types/ice-render/consts/COMPONENT_TYPE_MAPPING.d.ts +0 -45
  98. package/dist/types/ice-render/consts/DOM_EVENT_MAPPING_CONSTS.d.mts +0 -37
  99. package/dist/types/ice-render/consts/DOM_EVENT_MAPPING_CONSTS.d.ts +0 -37
  100. package/dist/types/ice-render/consts/ICE_EVENT_NAME_CONSTS.d.mts +0 -27
  101. package/dist/types/ice-render/consts/ICE_EVENT_NAME_CONSTS.d.ts +0 -27
  102. package/dist/types/ice-render/control-panel/AlignmentGuideManager.d.mts +0 -92
  103. package/dist/types/ice-render/control-panel/AlignmentGuideManager.d.ts +0 -92
  104. package/dist/types/ice-render/control-panel/ICEControlPanel.d.mts +0 -37
  105. package/dist/types/ice-render/control-panel/ICEControlPanel.d.ts +0 -37
  106. package/dist/types/ice-render/control-panel/ICEControlPanelManager.d.mts +0 -25
  107. package/dist/types/ice-render/control-panel/ICEControlPanelManager.d.ts +0 -25
  108. package/dist/types/ice-render/control-panel/link-controls/LineControlPanel.d.mts +0 -39
  109. package/dist/types/ice-render/control-panel/link-controls/LineControlPanel.d.ts +0 -39
  110. package/dist/types/ice-render/control-panel/transform-controls/ResizeControl.d.mts +0 -38
  111. package/dist/types/ice-render/control-panel/transform-controls/ResizeControl.d.ts +0 -38
  112. package/dist/types/ice-render/control-panel/transform-controls/RotateControl.d.mts +0 -12
  113. package/dist/types/ice-render/control-panel/transform-controls/RotateControl.d.ts +0 -12
  114. package/dist/types/ice-render/control-panel/transform-controls/TransformControlPanel.d.mts +0 -83
  115. package/dist/types/ice-render/control-panel/transform-controls/TransformControlPanel.d.ts +0 -83
  116. package/dist/types/ice-render/control-panel/transform-controls/constraints.d.mts +0 -24
  117. package/dist/types/ice-render/control-panel/transform-controls/constraints.d.ts +0 -24
  118. package/dist/types/ice-render/cross-platform/Path2DRecorder.d.mts +0 -76
  119. package/dist/types/ice-render/cross-platform/Path2DRecorder.d.ts +0 -76
  120. package/dist/types/ice-render/cross-platform/PolyfillPath2D.d.mts +0 -21
  121. package/dist/types/ice-render/cross-platform/PolyfillPath2D.d.ts +0 -21
  122. package/dist/types/ice-render/cross-platform/root.d.mts +0 -7
  123. package/dist/types/ice-render/cross-platform/root.d.ts +0 -7
  124. package/dist/types/ice-render/event/DOMEventDispatcher.d.mts +0 -75
  125. package/dist/types/ice-render/event/DOMEventDispatcher.d.ts +0 -75
  126. package/dist/types/ice-render/event/DOMEventInterceptor.d.mts +0 -36
  127. package/dist/types/ice-render/event/DOMEventInterceptor.d.ts +0 -36
  128. package/dist/types/ice-render/event/EventBus.d.mts +0 -27
  129. package/dist/types/ice-render/event/EventBus.d.ts +0 -27
  130. package/dist/types/ice-render/event/ICEEvent.d.mts +0 -46
  131. package/dist/types/ice-render/event/ICEEvent.d.ts +0 -46
  132. package/dist/types/ice-render/event/ICEEventTarget.d.mts +0 -106
  133. package/dist/types/ice-render/event/ICEEventTarget.d.ts +0 -106
  134. package/dist/types/ice-render/event/input-normalize.d.mts +0 -75
  135. package/dist/types/ice-render/event/input-normalize.d.ts +0 -75
  136. package/dist/types/ice-render/export/SvgExporter.d.mts +0 -54
  137. package/dist/types/ice-render/export/SvgExporter.d.ts +0 -54
  138. package/dist/types/ice-render/geometry/GeoLine.d.mts +0 -24
  139. package/dist/types/ice-render/geometry/GeoLine.d.ts +0 -24
  140. package/dist/types/ice-render/geometry/GeoPoint.d.mts +0 -53
  141. package/dist/types/ice-render/geometry/GeoPoint.d.ts +0 -53
  142. package/dist/types/ice-render/geometry/GeoUtil.d.mts +0 -73
  143. package/dist/types/ice-render/geometry/GeoUtil.d.ts +0 -73
  144. package/dist/types/ice-render/geometry/ICEBoundingBox.d.mts +0 -81
  145. package/dist/types/ice-render/geometry/ICEBoundingBox.d.ts +0 -81
  146. package/dist/types/ice-render/graphic/ICEComponent.d.mts +0 -535
  147. package/dist/types/ice-render/graphic/ICEComponent.d.ts +0 -535
  148. package/dist/types/ice-render/graphic/ICEDotPath.d.mts +0 -99
  149. package/dist/types/ice-render/graphic/ICEDotPath.d.ts +0 -99
  150. package/dist/types/ice-render/graphic/ICEImage.d.mts +0 -17
  151. package/dist/types/ice-render/graphic/ICEImage.d.ts +0 -17
  152. package/dist/types/ice-render/graphic/ICEPath.d.mts +0 -46
  153. package/dist/types/ice-render/graphic/ICEPath.d.ts +0 -46
  154. package/dist/types/ice-render/graphic/container/ICEGroup.d.mts +0 -111
  155. package/dist/types/ice-render/graphic/container/ICEGroup.d.ts +0 -111
  156. package/dist/types/ice-render/graphic/link/ICEBezier.d.mts +0 -23
  157. package/dist/types/ice-render/graphic/link/ICEBezier.d.ts +0 -23
  158. package/dist/types/ice-render/graphic/link/ICELinkHook.d.mts +0 -52
  159. package/dist/types/ice-render/graphic/link/ICELinkHook.d.ts +0 -52
  160. package/dist/types/ice-render/graphic/link/ICELinkSlot.d.mts +0 -54
  161. package/dist/types/ice-render/graphic/link/ICELinkSlot.d.ts +0 -54
  162. package/dist/types/ice-render/graphic/link/ICELinkSlotManager.d.mts +0 -28
  163. package/dist/types/ice-render/graphic/link/ICELinkSlotManager.d.ts +0 -28
  164. package/dist/types/ice-render/graphic/link/ICEPolyLine.d.mts +0 -316
  165. package/dist/types/ice-render/graphic/link/ICEPolyLine.d.ts +0 -316
  166. package/dist/types/ice-render/graphic/link/ICEVisioLink.d.mts +0 -163
  167. package/dist/types/ice-render/graphic/link/ICEVisioLink.d.ts +0 -163
  168. package/dist/types/ice-render/graphic/shape/ICECircle.d.mts +0 -19
  169. package/dist/types/ice-render/graphic/shape/ICECircle.d.ts +0 -19
  170. package/dist/types/ice-render/graphic/shape/ICEEllipse.d.mts +0 -29
  171. package/dist/types/ice-render/graphic/shape/ICEEllipse.d.ts +0 -29
  172. package/dist/types/ice-render/graphic/shape/ICEIsogon.d.mts +0 -52
  173. package/dist/types/ice-render/graphic/shape/ICEIsogon.d.ts +0 -52
  174. package/dist/types/ice-render/graphic/shape/ICERect.d.mts +0 -10
  175. package/dist/types/ice-render/graphic/shape/ICERect.d.ts +0 -10
  176. package/dist/types/ice-render/graphic/shape/ICERose.d.mts +0 -41
  177. package/dist/types/ice-render/graphic/shape/ICERose.d.ts +0 -41
  178. package/dist/types/ice-render/graphic/shape/ICEStar.d.mts +0 -45
  179. package/dist/types/ice-render/graphic/shape/ICEStar.d.ts +0 -45
  180. package/dist/types/ice-render/graphic/text/ICEText.d.mts +0 -158
  181. package/dist/types/ice-render/graphic/text/ICEText.d.ts +0 -158
  182. package/dist/types/ice-render/index.d.mts +0 -59
  183. package/dist/types/ice-render/index.d.ts +0 -59
  184. package/dist/types/ice-render/layout/ICEBorderLayout.d.mts +0 -34
  185. package/dist/types/ice-render/layout/ICEBorderLayout.d.ts +0 -34
  186. package/dist/types/ice-render/layout/ICEBoxLayout.d.mts +0 -30
  187. package/dist/types/ice-render/layout/ICEBoxLayout.d.ts +0 -30
  188. package/dist/types/ice-render/layout/ICECardLayout.d.mts +0 -36
  189. package/dist/types/ice-render/layout/ICECardLayout.d.ts +0 -36
  190. package/dist/types/ice-render/layout/ICEFlowLayout.d.mts +0 -31
  191. package/dist/types/ice-render/layout/ICEFlowLayout.d.ts +0 -31
  192. package/dist/types/ice-render/layout/ICEGridLayout.d.mts +0 -33
  193. package/dist/types/ice-render/layout/ICEGridLayout.d.ts +0 -33
  194. package/dist/types/ice-render/layout/ICELayeredLayout.d.mts +0 -49
  195. package/dist/types/ice-render/layout/ICELayeredLayout.d.ts +0 -49
  196. package/dist/types/ice-render/layout/ICELayoutManager.d.mts +0 -33
  197. package/dist/types/ice-render/layout/ICELayoutManager.d.ts +0 -33
  198. package/dist/types/ice-render/layout/ICEOverlayLayout.d.mts +0 -25
  199. package/dist/types/ice-render/layout/ICEOverlayLayout.d.ts +0 -25
  200. package/dist/types/ice-render/persistence/Deserializer.d.mts +0 -43
  201. package/dist/types/ice-render/persistence/Deserializer.d.ts +0 -43
  202. package/dist/types/ice-render/persistence/Serializer.d.mts +0 -35
  203. package/dist/types/ice-render/persistence/Serializer.d.ts +0 -35
  204. package/dist/types/ice-render/plugin/PluginHost.d.mts +0 -86
  205. package/dist/types/ice-render/plugin/PluginHost.d.ts +0 -86
  206. package/dist/types/ice-render/renderer/CanvasRenderer.d.mts +0 -150
  207. package/dist/types/ice-render/renderer/CanvasRenderer.d.ts +0 -150
  208. package/dist/types/ice-render/renderer/ObjectCache.d.mts +0 -79
  209. package/dist/types/ice-render/renderer/ObjectCache.d.ts +0 -79
  210. package/dist/types/ice-render/renderer/dirty-rect-util.d.mts +0 -86
  211. package/dist/types/ice-render/renderer/dirty-rect-util.d.ts +0 -86
  212. package/dist/types/ice-render/theme/ICETheme.d.mts +0 -382
  213. package/dist/types/ice-render/theme/ICETheme.d.ts +0 -382
  214. package/dist/types/ice-render/util/ImageCache.d.mts +0 -19
  215. package/dist/types/ice-render/util/ImageCache.d.ts +0 -19
  216. package/dist/types/ice-render/util/data-util.d.mts +0 -43
  217. package/dist/types/ice-render/util/data-util.d.ts +0 -43
  218. package/dist/types/ice-render/util/gl-matrix-skew.d.mts +0 -14
  219. package/dist/types/ice-render/util/gl-matrix-skew.d.ts +0 -14
  220. package/dist/types/ice-render/util/lang.d.mts +0 -28
  221. package/dist/types/ice-render/util/lang.d.ts +0 -28
  222. package/dist/types/ice-render/util/uuid.d.mts +0 -1
  223. package/dist/types/ice-render/util/uuid.d.ts +0 -1
@@ -1,37 +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 ICEGroup from '../graphic/container/ICEGroup';
9
- import ICEComponent from '../graphic/ICEComponent';
10
- /**
11
- * @class ICEControlPanel 控制面板
12
- *
13
- * - ICEControlPanel 用来辅助用户操作图形,控制面板可以控制图形的属性,比如组件的属性,线条的属性,文本的属性等等。
14
- * - ICEControlPanel 本身总是直接画在 canvas 上,不是任何组件的孩子。
15
- * - ICEControlPanel 本身不会被序列化。
16
- * - ICEControlPanel 的 zIndex 总是大于其它组件,当 ICEControlPanel 显示时,总是会优先判定为被选中的组件,会导致对应的 _targetComponent 收不到鼠标和键盘事件,所以 ICEControlPanel 的实现类需要自己考虑是否需要进行事件转发。
17
- * - 控制面板的所有实例都在 ICEControlPanelManager 中创建和管理。
18
- *
19
- * @see ICEControlPanelManager
20
- * @author 大漠穷秋<damoqiongqiu@126.com>
21
- */
22
- export default abstract class ICEControlPanel extends ICEGroup {
23
- /**
24
- * 类型标识
25
- * 用来解决 TypeScript 的 instanceof 兼容性问题, https://github.com/microsoft/TypeScript/issues/22585
26
- * 仅供内部使用,业务代码不可依赖此属性
27
- */
28
- isControlPanel: boolean;
29
- protected _targetComponent: ICEComponent;
30
- constructor(props: any);
31
- protected abstract initControls(): void;
32
- protected abstract updateControlPositions(): void;
33
- protected doRender(): void;
34
- moveGlobalPosition(tx: number, ty: number, evt?: any): void;
35
- abstract enable(): any;
36
- abstract disable(): any;
37
- }
@@ -1,25 +0,0 @@
1
- import ICE from '../ICE.mjs';
2
- import LineControlPanel from './link-controls/LineControlPanel.mjs';
3
- import TransformControlPanel from './transform-controls/TransformControlPanel.mjs';
4
- /**
5
- * @class ICEControlPanelManager
6
- *
7
- * 控制面板管理器
8
- *
9
- * - ICEControlPanelManager 负责管理所有类型的控制面板(ControlPanel)。
10
- * - ICEControlPanelManager 是全局单例的,一个 ICE 实例上只能有一个实例。
11
- * - ICEControlPanelManager 是纯逻辑组件,没有外观。
12
- *
13
- * @see ICE
14
- * @author 大漠穷秋<damoqiongqiu@126.com>
15
- */
16
- declare class ICEControlPanelManager {
17
- private ice;
18
- transformControlPanel: TransformControlPanel;
19
- lineControlPanel: LineControlPanel;
20
- constructor(ice: ICE);
21
- start(): this;
22
- stop(): this;
23
- private mouseDownHandler;
24
- }
25
- export default ICEControlPanelManager;
@@ -1,25 +0,0 @@
1
- import ICE from '../ICE';
2
- import LineControlPanel from './link-controls/LineControlPanel';
3
- import TransformControlPanel from './transform-controls/TransformControlPanel';
4
- /**
5
- * @class ICEControlPanelManager
6
- *
7
- * 控制面板管理器
8
- *
9
- * - ICEControlPanelManager 负责管理所有类型的控制面板(ControlPanel)。
10
- * - ICEControlPanelManager 是全局单例的,一个 ICE 实例上只能有一个实例。
11
- * - ICEControlPanelManager 是纯逻辑组件,没有外观。
12
- *
13
- * @see ICE
14
- * @author 大漠穷秋<damoqiongqiu@126.com>
15
- */
16
- declare class ICEControlPanelManager {
17
- private ice;
18
- transformControlPanel: TransformControlPanel;
19
- lineControlPanel: LineControlPanel;
20
- constructor(ice: ICE);
21
- start(): this;
22
- stop(): this;
23
- private mouseDownHandler;
24
- }
25
- export default ICEControlPanelManager;
@@ -1,39 +0,0 @@
1
- import ICEComponent from '../../graphic/ICEComponent.mjs';
2
- import ICEControlPanel from '../ICEControlPanel.mjs';
3
- /**
4
- *
5
- * @class LineControlPanel
6
- *
7
- * 线条变换控制面板
8
- *
9
- * LineControlPanel 只作为空的逻辑容器存在,控制面板内部的操作手柄需要全屏幕自由移动位置,手柄位置不固定,对 LineControlPanel 本身的参数完全没有影响。
10
- *
11
- * LineControlPanel 功能:
12
- *
13
- * - 移动线条的位置
14
- * - 调整线条起点和终点的位置
15
- * - 将线条连接到其它组件上
16
- *
17
- * @author 大漠穷秋<damoqiongqiu@126.com>
18
- */
19
- export default class LineControlPanel extends ICEControlPanel {
20
- private controlSize;
21
- private startControl;
22
- private endControl;
23
- constructor(props: any);
24
- protected initControls(): void;
25
- protected initEvents(): void;
26
- enable(): void;
27
- disable(): void;
28
- /**
29
- * 设置所有手柄在父组件中的位置,相对于父组件的本地坐标系。
30
- * LineControlPanel 不强制操作手柄的位置,操作手柄可以自由移动。
31
- */
32
- protected updateControlPositions(): void;
33
- private resizeEvtHandler;
34
- protected updatePosition(): void;
35
- set targetComponent(component: ICEComponent);
36
- get targetComponent(): ICEComponent;
37
- showHooks(): void;
38
- hideHooks(): void;
39
- }
@@ -1,39 +0,0 @@
1
- import ICEComponent from '../../graphic/ICEComponent';
2
- import ICEControlPanel from '../ICEControlPanel';
3
- /**
4
- *
5
- * @class LineControlPanel
6
- *
7
- * 线条变换控制面板
8
- *
9
- * LineControlPanel 只作为空的逻辑容器存在,控制面板内部的操作手柄需要全屏幕自由移动位置,手柄位置不固定,对 LineControlPanel 本身的参数完全没有影响。
10
- *
11
- * LineControlPanel 功能:
12
- *
13
- * - 移动线条的位置
14
- * - 调整线条起点和终点的位置
15
- * - 将线条连接到其它组件上
16
- *
17
- * @author 大漠穷秋<damoqiongqiu@126.com>
18
- */
19
- export default class LineControlPanel extends ICEControlPanel {
20
- private controlSize;
21
- private startControl;
22
- private endControl;
23
- constructor(props: any);
24
- protected initControls(): void;
25
- protected initEvents(): void;
26
- enable(): void;
27
- disable(): void;
28
- /**
29
- * 设置所有手柄在父组件中的位置,相对于父组件的本地坐标系。
30
- * LineControlPanel 不强制操作手柄的位置,操作手柄可以自由移动。
31
- */
32
- protected updateControlPositions(): void;
33
- private resizeEvtHandler;
34
- protected updatePosition(): void;
35
- set targetComponent(component: ICEComponent);
36
- get targetComponent(): ICEComponent;
37
- showHooks(): void;
38
- hideHooks(): void;
39
- }
@@ -1,38 +0,0 @@
1
- import ICERect from '../../graphic/shape/ICERect.mjs';
2
- /**
3
- * @class ResizeControl 调整尺寸的操作手柄
4
- *
5
- * - 调整尺寸的操作手柄不能独立存在,只能依附在某个宿主对象上。
6
- * - 此手柄只能调整尺寸,不能实现翻转
7
- *
8
- */
9
- export default class ResizeControl extends ICERect {
10
- /**
11
- * props:
12
- * {
13
- * direction: 改变的方向,共有3个可选的值: x/y/both
14
- * position: 手柄在变换矩形4个边上的位置,共有8个:lt/t/rt/r/rb/b/lb/l
15
- * quadrant: 当前所在的象限
16
- * }
17
- * @param props
18
- */
19
- constructor(props: any);
20
- protected initEvents(): void;
21
- /**
22
- * @param evt
23
- */
24
- private resizeEvtHandler;
25
- /**
26
- * @overwrite
27
- * @method moveGlobalPosition
28
- * ResizeControl 不能自由移动自己的位置,自能在X轴、Y轴,以及矩形的2条对角线上移动位置。
29
- *
30
- * 在全局空间(canvas)中移动指定的位移。
31
- * 注意:此方法用于直接设置组件在全局空间中的位移,而不是相对于其它坐标系。
32
- *
33
- * @param tx
34
- * @param ty
35
- * @param evt
36
- */
37
- moveGlobalPosition(tx: number, ty: number, evt?: any): void;
38
- }
@@ -1,38 +0,0 @@
1
- import ICERect from '../../graphic/shape/ICERect';
2
- /**
3
- * @class ResizeControl 调整尺寸的操作手柄
4
- *
5
- * - 调整尺寸的操作手柄不能独立存在,只能依附在某个宿主对象上。
6
- * - 此手柄只能调整尺寸,不能实现翻转
7
- *
8
- */
9
- export default class ResizeControl extends ICERect {
10
- /**
11
- * props:
12
- * {
13
- * direction: 改变的方向,共有3个可选的值: x/y/both
14
- * position: 手柄在变换矩形4个边上的位置,共有8个:lt/t/rt/r/rb/b/lb/l
15
- * quadrant: 当前所在的象限
16
- * }
17
- * @param props
18
- */
19
- constructor(props: any);
20
- protected initEvents(): void;
21
- /**
22
- * @param evt
23
- */
24
- private resizeEvtHandler;
25
- /**
26
- * @overwrite
27
- * @method moveGlobalPosition
28
- * ResizeControl 不能自由移动自己的位置,自能在X轴、Y轴,以及矩形的2条对角线上移动位置。
29
- *
30
- * 在全局空间(canvas)中移动指定的位移。
31
- * 注意:此方法用于直接设置组件在全局空间中的位移,而不是相对于其它坐标系。
32
- *
33
- * @param tx
34
- * @param ty
35
- * @param evt
36
- */
37
- moveGlobalPosition(tx: number, ty: number, evt?: any): void;
38
- }
@@ -1,12 +0,0 @@
1
- import ICECircle from '../../graphic/shape/ICECircle.mjs';
2
- /**
3
- * @class RotateControl 旋转操作手柄
4
- *
5
- * - 旋转手柄不能独立存在,只能依附在某个宿主对象上。
6
- * - 此手柄仅用来修改组件的旋转角度。
7
- */
8
- export default class RotateControl extends ICECircle {
9
- constructor(props: any);
10
- protected initEvents(): void;
11
- private rotateEvtHandler;
12
- }
@@ -1,12 +0,0 @@
1
- import ICECircle from '../../graphic/shape/ICECircle';
2
- /**
3
- * @class RotateControl 旋转操作手柄
4
- *
5
- * - 旋转手柄不能独立存在,只能依附在某个宿主对象上。
6
- * - 此手柄仅用来修改组件的旋转角度。
7
- */
8
- export default class RotateControl extends ICECircle {
9
- constructor(props: any);
10
- protected initEvents(): void;
11
- private rotateEvtHandler;
12
- }
@@ -1,83 +0,0 @@
1
- import ICEComponent from '../../graphic/ICEComponent.mjs';
2
- import ICEControlPanel from '../ICEControlPanel.mjs';
3
- /**
4
- * @class TransformControlPanel
5
- *
6
- * 变换控制面板
7
- *
8
- * - TransformControlPanel 本身总是直接画在 canvas 上,不是任何组件的孩子。
9
- * - TransformControlPanel 是全局单例,在任意时刻,不可能同时出现多个 TransformControlPanel 的实例,因为在图形化的用户交互模式下,用户无法同时操控多个控制面板。
10
- *
11
- * @author 大漠穷秋<damoqiongqiu@126.com>
12
- */
13
- export default class TransformControlPanel extends ICEControlPanel {
14
- private rotateControlInstance;
15
- private rotateControlSize;
16
- private rotateControlOffsetY;
17
- private resizeControlInstanceCache;
18
- private resizeControlSize;
19
- constructor(props: any);
20
- /**
21
- * @method initControls
22
- * 添加尺寸和旋转变换手柄,初始化时添加在内部的[0,0]位置,此方法只创建对象实例,不执行渲染操作。
23
- * 创建 8 个 ResizeControl
24
- * 计算手柄位于父组件的哪一个象限中,有以下取值:
25
- * - 1: 第1象限;
26
- * - 2: 第2象限;
27
- * - 3: 第3象限;
28
- * - 4: 第4象限;
29
- * - 5: 位于X轴上方,y值为负,不属于任何象限;
30
- * - 6: 位于X轴下方,y值为正,不属于任何象限;
31
- * - 7: 位于Y轴左侧,x值为负,不属于任何象限;
32
- * - 8: 位于Y轴右侧,x值为正,不属于任何象限;
33
- * 默认创建顺序,从左上角开始顺时针:tl:2/t:5/tr:1/r:8/rb:4/b:6/lb:3/l:7
34
- * 第1和第3象限可以交换位置
35
- * 第2和第4象限可以交换位置
36
- * X 轴正负可以交换位置
37
- * Y 轴正负可以交换位置
38
- * TODO:添加斜切手柄?
39
- */
40
- protected initControls(): void;
41
- protected initEvents(): void;
42
- enable(): void;
43
- disable(): void;
44
- /**
45
- * @overwrite
46
- * @method keyboardEvtHandler 键盘事件处理
47
- * !ICEControlPanel 的 zIndex 总是大于其它组件,当 ICEControlPanel 显示时,总是会优先判定为被选中的组件,会导致对应的 _targetComponent 收不到鼠标和键盘事件,所以 ICEControlPanel 的实现类需要自己考虑是否需要进行事件转发。
48
- * !如果当前的 targetComponent 不为空,转发键盘事件。
49
- * @see {ICEControlPanel}
50
- * @see {ICEComponent}
51
- * @param evt
52
- * @returns
53
- */
54
- protected keyboardEvtHandler(evt: any): void;
55
- private rotateEvtHandler;
56
- private resizeEvtHandler;
57
- /**
58
- * @overwrite
59
- * @method updateControlPositions 更新内部控制手柄的位置
60
- *
61
- * 控制面板每次重绘时,会在 doRender() 方法内部会调用 updateControlPositions() 来 更新控制手柄的位置。
62
- * @see ICEConrolPanel.doRender()
63
- */
64
- protected updateControlPositions(): void;
65
- protected updatePanel(): void;
66
- /**
67
- * 目标被移除时的处理。
68
- *
69
- * 必须是**稳定引用**:旧实现用 `once(BEFORE_REMOVE, () => {...})`,而 `once` 内部会把回调
70
- * 再包一层,导致这个箭头函数永远无法被 `off` —— 反复选中组件会在每个组件上累积
71
- * 无法回收的监听(内存泄漏 + 幽灵回调)。这里改为具名属性 + `on`,
72
- * 由 setter 负责在切换目标时 `off` 掉(`on` 本身对 (fn, scope) 幂等,也不会重复注册)。
73
- */
74
- private __onTargetRemoved;
75
- set targetComponent(component: ICEComponent);
76
- get targetComponent(): ICEComponent;
77
- /**
78
- * 交换两个 Control 的象限
79
- * @param control
80
- * @param quadrant
81
- */
82
- toggleControlQuadrant(control: any, oldQuadrant: number, newQuadrant: number): void;
83
- }
@@ -1,83 +0,0 @@
1
- import ICEComponent from '../../graphic/ICEComponent';
2
- import ICEControlPanel from '../ICEControlPanel';
3
- /**
4
- * @class TransformControlPanel
5
- *
6
- * 变换控制面板
7
- *
8
- * - TransformControlPanel 本身总是直接画在 canvas 上,不是任何组件的孩子。
9
- * - TransformControlPanel 是全局单例,在任意时刻,不可能同时出现多个 TransformControlPanel 的实例,因为在图形化的用户交互模式下,用户无法同时操控多个控制面板。
10
- *
11
- * @author 大漠穷秋<damoqiongqiu@126.com>
12
- */
13
- export default class TransformControlPanel extends ICEControlPanel {
14
- private rotateControlInstance;
15
- private rotateControlSize;
16
- private rotateControlOffsetY;
17
- private resizeControlInstanceCache;
18
- private resizeControlSize;
19
- constructor(props: any);
20
- /**
21
- * @method initControls
22
- * 添加尺寸和旋转变换手柄,初始化时添加在内部的[0,0]位置,此方法只创建对象实例,不执行渲染操作。
23
- * 创建 8 个 ResizeControl
24
- * 计算手柄位于父组件的哪一个象限中,有以下取值:
25
- * - 1: 第1象限;
26
- * - 2: 第2象限;
27
- * - 3: 第3象限;
28
- * - 4: 第4象限;
29
- * - 5: 位于X轴上方,y值为负,不属于任何象限;
30
- * - 6: 位于X轴下方,y值为正,不属于任何象限;
31
- * - 7: 位于Y轴左侧,x值为负,不属于任何象限;
32
- * - 8: 位于Y轴右侧,x值为正,不属于任何象限;
33
- * 默认创建顺序,从左上角开始顺时针:tl:2/t:5/tr:1/r:8/rb:4/b:6/lb:3/l:7
34
- * 第1和第3象限可以交换位置
35
- * 第2和第4象限可以交换位置
36
- * X 轴正负可以交换位置
37
- * Y 轴正负可以交换位置
38
- * TODO:添加斜切手柄?
39
- */
40
- protected initControls(): void;
41
- protected initEvents(): void;
42
- enable(): void;
43
- disable(): void;
44
- /**
45
- * @overwrite
46
- * @method keyboardEvtHandler 键盘事件处理
47
- * !ICEControlPanel 的 zIndex 总是大于其它组件,当 ICEControlPanel 显示时,总是会优先判定为被选中的组件,会导致对应的 _targetComponent 收不到鼠标和键盘事件,所以 ICEControlPanel 的实现类需要自己考虑是否需要进行事件转发。
48
- * !如果当前的 targetComponent 不为空,转发键盘事件。
49
- * @see {ICEControlPanel}
50
- * @see {ICEComponent}
51
- * @param evt
52
- * @returns
53
- */
54
- protected keyboardEvtHandler(evt: any): void;
55
- private rotateEvtHandler;
56
- private resizeEvtHandler;
57
- /**
58
- * @overwrite
59
- * @method updateControlPositions 更新内部控制手柄的位置
60
- *
61
- * 控制面板每次重绘时,会在 doRender() 方法内部会调用 updateControlPositions() 来 更新控制手柄的位置。
62
- * @see ICEConrolPanel.doRender()
63
- */
64
- protected updateControlPositions(): void;
65
- protected updatePanel(): void;
66
- /**
67
- * 目标被移除时的处理。
68
- *
69
- * 必须是**稳定引用**:旧实现用 `once(BEFORE_REMOVE, () => {...})`,而 `once` 内部会把回调
70
- * 再包一层,导致这个箭头函数永远无法被 `off` —— 反复选中组件会在每个组件上累积
71
- * 无法回收的监听(内存泄漏 + 幽灵回调)。这里改为具名属性 + `on`,
72
- * 由 setter 负责在切换目标时 `off` 掉(`on` 本身对 (fn, scope) 幂等,也不会重复注册)。
73
- */
74
- private __onTargetRemoved;
75
- set targetComponent(component: ICEComponent);
76
- get targetComponent(): ICEComponent;
77
- /**
78
- * 交换两个 Control 的象限
79
- * @param control
80
- * @param quadrant
81
- */
82
- toggleControlQuadrant(control: any, oldQuadrant: number, newQuadrant: number): void;
83
- }
@@ -1,24 +0,0 @@
1
- /**
2
- * 变换手柄的约束算法(纯函数,便于单测)。
3
- *
4
- * 这些约束由输入层透传的修饰键驱动(`evt.shiftKey` 等)——注意 DOM 事件的修饰键是原型上的
5
- * 不可枚举 getter,`ICEEvent` 的 `for...in` 拷贝带不过来,必须由 `input-normalize` 显式透传。
6
- */
7
- /** 旋转吸附的默认步进(度)。 */
8
- export declare const ROTATE_SNAP_STEP = 15;
9
- /**
10
- * 等比约束:在「目标尺寸」基础上保持 `currentWidth : currentHeight` 不变。
11
- *
12
- * 取两个方向中**相对变化更大**的那个作为基准,另一个方向按比例跟随 —— 这样拖动角手柄时
13
- * 跟随手感更贴近手指,也不会出现「一个方向已到目标、另一个方向还没动」的粘滞感。
14
- * 尺寸取绝对值(翻转由调用方决定,不在这里处理)。
15
- */
16
- export declare function applyAspectLock(currentWidth: number, currentHeight: number, nextWidth: number, nextHeight: number): {
17
- width: number;
18
- height: number;
19
- };
20
- /**
21
- * 角度吸附:把角度吸附到 `step` 的整数倍(默认 15°)。
22
- * 吸附在**最终角度**上做(调用方已把补偿角加上),避免补偿把吸附结果带偏。
23
- */
24
- export declare function snapAngle(angle: number, step?: number): number;
@@ -1,24 +0,0 @@
1
- /**
2
- * 变换手柄的约束算法(纯函数,便于单测)。
3
- *
4
- * 这些约束由输入层透传的修饰键驱动(`evt.shiftKey` 等)——注意 DOM 事件的修饰键是原型上的
5
- * 不可枚举 getter,`ICEEvent` 的 `for...in` 拷贝带不过来,必须由 `input-normalize` 显式透传。
6
- */
7
- /** 旋转吸附的默认步进(度)。 */
8
- export declare const ROTATE_SNAP_STEP = 15;
9
- /**
10
- * 等比约束:在「目标尺寸」基础上保持 `currentWidth : currentHeight` 不变。
11
- *
12
- * 取两个方向中**相对变化更大**的那个作为基准,另一个方向按比例跟随 —— 这样拖动角手柄时
13
- * 跟随手感更贴近手指,也不会出现「一个方向已到目标、另一个方向还没动」的粘滞感。
14
- * 尺寸取绝对值(翻转由调用方决定,不在这里处理)。
15
- */
16
- export declare function applyAspectLock(currentWidth: number, currentHeight: number, nextWidth: number, nextHeight: number): {
17
- width: number;
18
- height: number;
19
- };
20
- /**
21
- * 角度吸附:把角度吸附到 `step` 的整数倍(默认 15°)。
22
- * 吸附在**最终角度**上做(调用方已把补偿角加上),避免补偿把吸附结果带偏。
23
- */
24
- export declare function snapAngle(angle: number, step?: number): number;
@@ -1,76 +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
- /**
9
- * @class Path2DRecorder
10
- *
11
- * 路径对象的**唯一入口**:一边把命令写给内存里的命令流,一边转发给运行时的原生 Path2D。
12
- *
13
- * 为什么需要它:原生 `Path2D` 是不透明的 —— 画得出来,但拿不到「这条路径到底是什么形状」。
14
- * 而引擎的这几件事都需要**路径的几何描述**,不只是「画出来」:
15
- *
16
- * - 导出(SVG / 打印 / 服务端出图):要把路径转成 `d` 属性;
17
- * - 服务端 / 小程序(无原生 Path2D):要靠命令流重放到 ctx(原先只有 PolyfillPath2D 能做到);
18
- * - 测试与调试:可以直接断言「这个形状生成了哪几条命令」,不必截图比对像素。
19
- *
20
- * 设计取舍:
21
- * - **有原生 Path2D 时仍然用原生对象上屏**(`native`),命令流只是顺带记录,渲染路径与旧版
22
- * 完全一致;`ICEPath.doRender()` 用 `path2D.native || path2D` 取上屏对象。
23
- * - **没有原生 Path2D 时**(小程序低版本 / Node)退化为纯记录器:`_isPolyfill` 为真,
24
- * `ICEPath` 走「重放命令到 ctx」的老路径,行为与之前的 PolyfillPath2D 一致。
25
- * - 路径是**几何变化时才重建**(`doRender` 只在 dirty 时调用 `createPathObject()`),因此
26
- * 记录带来的开销只发生在路径重建时,不在每帧热路径上。
27
- *
28
- * 命令格式与 PolyfillPath2D 一致(也被 `replayPath()` 复用):
29
- * `[['moveTo', x, y], ['rect', x, y, w, h], ...]`
30
- */
31
- export default class Path2DRecorder {
32
- /** 标记「没有原生 Path2D,需要重放命令」——与 PolyfillPath2D 的语义保持一致 */
33
- _isPolyfill: boolean;
34
- /** 记录的命令序列 */
35
- _commands: Array<Array<any>>;
36
- /** closePath 是幂等标记(doRender 每帧调用),不重复入队 */
37
- _closed: boolean;
38
- /** 原生 Path2D(有则上屏直接用它,命令流仍然记录);无则为 null */
39
- readonly native: any;
40
- /** 当前点(画布 arcTo / 圆弧的语义依赖它),[x, y];空表示没有当前子路径 */
41
- private __current;
42
- /** 当前子路径的起点(closePath 后当前点回到这里) */
43
- private __subpathStart;
44
- constructor(native?: any);
45
- /** 上屏对象:有原生就用原生,否则用记录器自己(配合 replayPath 重放) */
46
- get drawable(): any;
47
- moveTo(x: number, y: number): void;
48
- lineTo(x: number, y: number): void;
49
- bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
50
- quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
51
- /**
52
- * 圆角/切线圆弧。
53
- *
54
- * canvas 的 `arcTo` 依赖「当前点 + 控制点 + 半径」的切线关系,**SVG 没有对应命令**。
55
- * 这里在记录阶段就把它**还原成 `lineTo(切点) + arc(圆心, 半径, 起止角)`**:
56
- *
57
- * - 出口是标准命令流,SVG 导出(以及任何重放到 ctx 的运行时)都不需要再懂 arcTo;
58
- * - 原生 Path2D 收到的是等价的 lineTo/arc,渲染结果与直接 arcTo 一致;
59
- * - 圆角矩形(ICERect 的 radius)就是靠它才能导出成真正的圆角,否则导出会变成切角。
60
- *
61
- * 数学:设 P0 = 当前点、P1 = 控制点、P2 = 终点,u = 单位(P0−P1)、v = 单位(P2−P1),
62
- * 夹角 θ = ∠(u,v),切点到 P1 的距离 t = r / tan(θ/2),圆心在角平分线上距 P1 为 r / sin(θ/2)。
63
- */
64
- arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
65
- rect(x: number, y: number, width: number, height: number): void;
66
- /**
67
- * 圆弧。**必须实现**:事件圆等形状用的是 `arc`,此前 PolyfillPath2D 没有它,
68
- * 于是「无原生 Path2D」的运行时(Node / 小程序低版本)画这类形状会直接抛
69
- * `path.arc is not a function` —— 这正是服务端出图要修的第一件事。
70
- */
71
- arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;
72
- ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise: boolean): void;
73
- closePath(): void;
74
- /** 当前点(只读;调试与测试用) */
75
- get currentPoint(): [number, number] | null;
76
- }
@@ -1,76 +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
- /**
9
- * @class Path2DRecorder
10
- *
11
- * 路径对象的**唯一入口**:一边把命令写给内存里的命令流,一边转发给运行时的原生 Path2D。
12
- *
13
- * 为什么需要它:原生 `Path2D` 是不透明的 —— 画得出来,但拿不到「这条路径到底是什么形状」。
14
- * 而引擎的这几件事都需要**路径的几何描述**,不只是「画出来」:
15
- *
16
- * - 导出(SVG / 打印 / 服务端出图):要把路径转成 `d` 属性;
17
- * - 服务端 / 小程序(无原生 Path2D):要靠命令流重放到 ctx(原先只有 PolyfillPath2D 能做到);
18
- * - 测试与调试:可以直接断言「这个形状生成了哪几条命令」,不必截图比对像素。
19
- *
20
- * 设计取舍:
21
- * - **有原生 Path2D 时仍然用原生对象上屏**(`native`),命令流只是顺带记录,渲染路径与旧版
22
- * 完全一致;`ICEPath.doRender()` 用 `path2D.native || path2D` 取上屏对象。
23
- * - **没有原生 Path2D 时**(小程序低版本 / Node)退化为纯记录器:`_isPolyfill` 为真,
24
- * `ICEPath` 走「重放命令到 ctx」的老路径,行为与之前的 PolyfillPath2D 一致。
25
- * - 路径是**几何变化时才重建**(`doRender` 只在 dirty 时调用 `createPathObject()`),因此
26
- * 记录带来的开销只发生在路径重建时,不在每帧热路径上。
27
- *
28
- * 命令格式与 PolyfillPath2D 一致(也被 `replayPath()` 复用):
29
- * `[['moveTo', x, y], ['rect', x, y, w, h], ...]`
30
- */
31
- export default class Path2DRecorder {
32
- /** 标记「没有原生 Path2D,需要重放命令」——与 PolyfillPath2D 的语义保持一致 */
33
- _isPolyfill: boolean;
34
- /** 记录的命令序列 */
35
- _commands: Array<Array<any>>;
36
- /** closePath 是幂等标记(doRender 每帧调用),不重复入队 */
37
- _closed: boolean;
38
- /** 原生 Path2D(有则上屏直接用它,命令流仍然记录);无则为 null */
39
- readonly native: any;
40
- /** 当前点(画布 arcTo / 圆弧的语义依赖它),[x, y];空表示没有当前子路径 */
41
- private __current;
42
- /** 当前子路径的起点(closePath 后当前点回到这里) */
43
- private __subpathStart;
44
- constructor(native?: any);
45
- /** 上屏对象:有原生就用原生,否则用记录器自己(配合 replayPath 重放) */
46
- get drawable(): any;
47
- moveTo(x: number, y: number): void;
48
- lineTo(x: number, y: number): void;
49
- bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
50
- quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
51
- /**
52
- * 圆角/切线圆弧。
53
- *
54
- * canvas 的 `arcTo` 依赖「当前点 + 控制点 + 半径」的切线关系,**SVG 没有对应命令**。
55
- * 这里在记录阶段就把它**还原成 `lineTo(切点) + arc(圆心, 半径, 起止角)`**:
56
- *
57
- * - 出口是标准命令流,SVG 导出(以及任何重放到 ctx 的运行时)都不需要再懂 arcTo;
58
- * - 原生 Path2D 收到的是等价的 lineTo/arc,渲染结果与直接 arcTo 一致;
59
- * - 圆角矩形(ICERect 的 radius)就是靠它才能导出成真正的圆角,否则导出会变成切角。
60
- *
61
- * 数学:设 P0 = 当前点、P1 = 控制点、P2 = 终点,u = 单位(P0−P1)、v = 单位(P2−P1),
62
- * 夹角 θ = ∠(u,v),切点到 P1 的距离 t = r / tan(θ/2),圆心在角平分线上距 P1 为 r / sin(θ/2)。
63
- */
64
- arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
65
- rect(x: number, y: number, width: number, height: number): void;
66
- /**
67
- * 圆弧。**必须实现**:事件圆等形状用的是 `arc`,此前 PolyfillPath2D 没有它,
68
- * 于是「无原生 Path2D」的运行时(Node / 小程序低版本)画这类形状会直接抛
69
- * `path.arc is not a function` —— 这正是服务端出图要修的第一件事。
70
- */
71
- arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;
72
- ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise: boolean): void;
73
- closePath(): void;
74
- /** 当前点(只读;调试与测试用) */
75
- get currentPoint(): [number, number] | null;
76
- }