@visactor/vrender-core 0.22.14 → 0.22.15-alpha.1

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 (441) hide show
  1. package/cjs/animate/config.d.ts +1 -2
  2. package/cjs/animate/config.js +1 -5
  3. package/cjs/animate/config.js.map +1 -1
  4. package/cjs/application.d.ts +2 -1
  5. package/cjs/application.js.map +1 -1
  6. package/cjs/canvas/constants.js +1 -2
  7. package/cjs/canvas/empty-context.d.ts +1 -0
  8. package/cjs/canvas/empty-context.js +4 -0
  9. package/cjs/canvas/empty-context.js.map +1 -1
  10. package/cjs/canvas/util.js +2 -1
  11. package/cjs/color-string/interpolate.d.ts +1 -0
  12. package/cjs/color-string/interpolate.js +12 -4
  13. package/cjs/color-string/interpolate.js.map +1 -1
  14. package/cjs/common/custom-path2d.js +2 -2
  15. package/cjs/common/custom-path2d.js.map +1 -1
  16. package/cjs/common/diff.d.ts +1 -0
  17. package/cjs/common/diff.js +19 -0
  18. package/cjs/common/diff.js.map +1 -0
  19. package/cjs/common/enums.d.ts +0 -16
  20. package/cjs/common/enums.js +2 -11
  21. package/cjs/common/enums.js.map +1 -1
  22. package/cjs/common/morphing-utils.js +32 -124
  23. package/cjs/common/morphing-utils.js.map +1 -1
  24. package/cjs/common/performance-raf.d.ts +8 -0
  25. package/cjs/common/performance-raf.js +32 -0
  26. package/cjs/common/performance-raf.js.map +1 -0
  27. package/cjs/common/polygon.js +5 -2
  28. package/cjs/common/polygon.js.map +1 -1
  29. package/cjs/common/segment/curve/cubic-bezier.d.ts +1 -2
  30. package/cjs/common/segment/curve/cubic-bezier.js +3 -8
  31. package/cjs/common/segment/curve/cubic-bezier.js.map +1 -1
  32. package/cjs/common/segment/curve/quadratic-bezier.d.ts +1 -0
  33. package/cjs/common/segment/curve/quadratic-bezier.js +10 -3
  34. package/cjs/common/segment/curve/quadratic-bezier.js.map +1 -1
  35. package/cjs/common/segment/index.d.ts +1 -0
  36. package/cjs/common/segment/index.js +1 -1
  37. package/cjs/common/segment/index.js.map +1 -1
  38. package/cjs/common/shape/arc.d.ts +1 -1
  39. package/cjs/common/shape/arc.js +7 -3
  40. package/cjs/common/shape/arc.js.map +1 -1
  41. package/cjs/common/simplify.js +1 -2
  42. package/cjs/common/sort.js +1 -1
  43. package/cjs/common/split-path.js +2 -2
  44. package/cjs/common/split-path.js.map +1 -1
  45. package/cjs/common/store.js +1 -1
  46. package/cjs/common/text.js +1 -1
  47. package/cjs/common/utils.d.ts +0 -2
  48. package/cjs/common/utils.js +5 -9
  49. package/cjs/common/utils.js.map +1 -1
  50. package/cjs/core/application.js +1 -1
  51. package/cjs/core/camera.js +1 -1
  52. package/cjs/core/global.d.ts +3 -0
  53. package/cjs/core/global.js +14 -3
  54. package/cjs/core/global.js.map +1 -1
  55. package/cjs/core/stage.d.ts +8 -3
  56. package/cjs/core/stage.js +34 -20
  57. package/cjs/core/stage.js.map +1 -1
  58. package/cjs/graphic/arc.d.ts +1 -2
  59. package/cjs/graphic/arc.js +3 -2
  60. package/cjs/graphic/arc.js.map +1 -1
  61. package/cjs/graphic/area.d.ts +1 -2
  62. package/cjs/graphic/area.js +4 -1
  63. package/cjs/graphic/area.js.map +1 -1
  64. package/cjs/graphic/circle.d.ts +1 -2
  65. package/cjs/graphic/circle.js +5 -2
  66. package/cjs/graphic/circle.js.map +1 -1
  67. package/cjs/graphic/config.js +2 -1
  68. package/cjs/graphic/config.js.map +1 -1
  69. package/cjs/graphic/graphic-service/graphic-module.js +1 -2
  70. package/cjs/graphic/graphic-service/graphic-module.js.map +1 -1
  71. package/cjs/graphic/graphic-service/graphic-service.js +2 -3
  72. package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
  73. package/cjs/graphic/graphic.d.ts +9 -12
  74. package/cjs/graphic/graphic.js +48 -105
  75. package/cjs/graphic/graphic.js.map +1 -1
  76. package/cjs/graphic/group.js +8 -8
  77. package/cjs/graphic/group.js.map +1 -1
  78. package/cjs/graphic/line.d.ts +1 -2
  79. package/cjs/graphic/line.js +5 -1
  80. package/cjs/graphic/line.js.map +1 -1
  81. package/cjs/graphic/rect.js +5 -2
  82. package/cjs/graphic/rect.js.map +1 -1
  83. package/cjs/graphic/richtext/icon.d.ts +1 -1
  84. package/cjs/graphic/richtext/icon.js.map +1 -1
  85. package/cjs/graphic/richtext/paragraph.js +2 -2
  86. package/cjs/graphic/richtext/paragraph.js.map +1 -1
  87. package/cjs/graphic/star.d.ts +1 -2
  88. package/cjs/graphic/star.js +4 -2
  89. package/cjs/graphic/star.js.map +1 -1
  90. package/cjs/index.d.ts +2 -3
  91. package/cjs/index.js +14 -16
  92. package/cjs/index.js.map +1 -1
  93. package/cjs/interface/animate.d.ts +1 -160
  94. package/cjs/interface/animate.js +1 -4
  95. package/cjs/interface/animate.js.map +1 -1
  96. package/cjs/interface/animation/animate.d.ts +117 -0
  97. package/cjs/interface/animation/animate.js +10 -0
  98. package/cjs/interface/animation/animate.js.map +1 -0
  99. package/cjs/interface/animation/easing.d.ts +3 -0
  100. package/cjs/interface/animation/easing.js +6 -0
  101. package/cjs/interface/animation/easing.js.map +1 -0
  102. package/cjs/interface/animation/index.d.ts +5 -0
  103. package/cjs/{animate/Ticker → interface/animation}/index.js +3 -3
  104. package/cjs/interface/animation/index.js.map +1 -0
  105. package/cjs/interface/animation/ticker.d.ts +39 -0
  106. package/cjs/{animate/Ticker/type.js → interface/animation/ticker.js} +1 -1
  107. package/cjs/interface/animation/ticker.js.map +1 -0
  108. package/cjs/interface/animation/timeline.d.ts +17 -0
  109. package/cjs/interface/animation/timeline.js +6 -0
  110. package/cjs/interface/animation/timeline.js.map +1 -0
  111. package/cjs/interface/animation/type.d.ts +13 -0
  112. package/cjs/interface/animation/type.js +15 -0
  113. package/cjs/interface/animation/type.js.map +1 -0
  114. package/cjs/interface/context.d.ts +1 -0
  115. package/cjs/interface/context.js.map +1 -1
  116. package/cjs/interface/global.d.ts +2 -0
  117. package/cjs/interface/global.js.map +1 -1
  118. package/cjs/interface/graphic.d.ts +11 -3
  119. package/cjs/interface/graphic.js.map +1 -1
  120. package/cjs/interface/index.d.ts +1 -1
  121. package/cjs/interface/index.js +9 -9
  122. package/cjs/interface/index.js.map +1 -1
  123. package/cjs/interface/render.d.ts +7 -0
  124. package/cjs/interface/render.js.map +1 -1
  125. package/cjs/interface/stage.d.ts +4 -1
  126. package/cjs/interface/stage.js.map +1 -1
  127. package/cjs/modules.d.ts +2 -1
  128. package/cjs/modules.js +4 -3
  129. package/cjs/modules.js.map +1 -1
  130. package/cjs/plugins/builtin-plugin/auto-render-plugin.js +9 -8
  131. package/cjs/plugins/builtin-plugin/auto-render-plugin.js.map +1 -1
  132. package/cjs/plugins/builtin-plugin/dirty-bounds-plugin.js +14 -11
  133. package/cjs/plugins/builtin-plugin/dirty-bounds-plugin.js.map +1 -1
  134. package/cjs/plugins/builtin-plugin/edit-module.js +4 -4
  135. package/cjs/plugins/builtin-plugin/edit-module.js.map +1 -1
  136. package/cjs/plugins/builtin-plugin/flex-layout-plugin.js +13 -10
  137. package/cjs/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
  138. package/cjs/plugins/builtin-plugin/html-attribute-plugin.js +0 -1
  139. package/cjs/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
  140. package/cjs/plugins/builtin-plugin/incremental-auto-render-plugin.js +8 -5
  141. package/cjs/plugins/builtin-plugin/incremental-auto-render-plugin.js.map +1 -1
  142. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.d.ts +2 -2
  143. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js +6 -5
  144. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -1
  145. package/cjs/render/contributions/render/arc-render.d.ts +4 -2
  146. package/cjs/render/contributions/render/arc-render.js +19 -17
  147. package/cjs/render/contributions/render/arc-render.js.map +1 -1
  148. package/cjs/render/contributions/render/area-render.js +2 -2
  149. package/cjs/render/contributions/render/area-render.js.map +1 -1
  150. package/cjs/render/contributions/render/base-render.d.ts +2 -2
  151. package/cjs/render/contributions/render/base-render.js +2 -2
  152. package/cjs/render/contributions/render/base-render.js.map +1 -1
  153. package/cjs/render/contributions/render/draw-contribution.d.ts +1 -0
  154. package/cjs/render/contributions/render/draw-contribution.js +23 -19
  155. package/cjs/render/contributions/render/draw-contribution.js.map +1 -1
  156. package/cjs/render/contributions/render/draw-interceptor.js +2 -1
  157. package/cjs/render/contributions/render/draw-interceptor.js.map +1 -1
  158. package/cjs/render/contributions/render/group-render.d.ts +2 -2
  159. package/cjs/render/contributions/render/group-render.js +15 -11
  160. package/cjs/render/contributions/render/group-render.js.map +1 -1
  161. package/cjs/render/contributions/render/line-render.js +1 -1
  162. package/cjs/render/contributions/render/line-render.js.map +1 -1
  163. package/cjs/render/contributions/render/rect-render.d.ts +3 -1
  164. package/cjs/render/contributions/render/rect-render.js +17 -15
  165. package/cjs/render/contributions/render/rect-render.js.map +1 -1
  166. package/cjs/render/contributions/render/symbol-render.d.ts +4 -2
  167. package/cjs/render/contributions/render/symbol-render.js +16 -11
  168. package/cjs/render/contributions/render/symbol-render.js.map +1 -1
  169. package/cjs/render/render-service.d.ts +1 -1
  170. package/cjs/render/render-service.js.map +1 -1
  171. package/dist/index.es.js +5992 -8838
  172. package/es/animate/config.d.ts +1 -2
  173. package/es/animate/config.js +0 -5
  174. package/es/animate/config.js.map +1 -1
  175. package/es/application.d.ts +2 -1
  176. package/es/application.js.map +1 -1
  177. package/es/canvas/constants.js +1 -2
  178. package/es/canvas/empty-context.d.ts +1 -0
  179. package/es/canvas/empty-context.js +4 -0
  180. package/es/canvas/empty-context.js.map +1 -1
  181. package/es/canvas/util.js +2 -1
  182. package/es/color-string/interpolate.d.ts +1 -0
  183. package/es/color-string/interpolate.js +8 -1
  184. package/es/color-string/interpolate.js.map +1 -1
  185. package/es/common/custom-path2d.js +2 -2
  186. package/es/common/custom-path2d.js.map +1 -1
  187. package/es/common/diff.d.ts +1 -0
  188. package/es/common/diff.js +11 -0
  189. package/es/common/diff.js.map +1 -0
  190. package/es/common/enums.d.ts +0 -16
  191. package/es/common/enums.js +0 -20
  192. package/es/common/enums.js.map +1 -1
  193. package/es/common/morphing-utils.js +29 -124
  194. package/es/common/morphing-utils.js.map +1 -1
  195. package/es/common/performance-raf.d.ts +8 -0
  196. package/es/common/performance-raf.js +24 -0
  197. package/es/common/performance-raf.js.map +1 -0
  198. package/es/common/polygon.js +6 -3
  199. package/es/common/polygon.js.map +1 -1
  200. package/es/common/segment/curve/cubic-bezier.d.ts +1 -2
  201. package/es/common/segment/curve/cubic-bezier.js +1 -8
  202. package/es/common/segment/curve/cubic-bezier.js.map +1 -1
  203. package/es/common/segment/curve/quadratic-bezier.d.ts +1 -0
  204. package/es/common/segment/curve/quadratic-bezier.js +5 -2
  205. package/es/common/segment/curve/quadratic-bezier.js.map +1 -1
  206. package/es/common/segment/index.d.ts +1 -0
  207. package/es/common/segment/index.js +2 -0
  208. package/es/common/segment/index.js.map +1 -1
  209. package/es/common/shape/arc.d.ts +1 -1
  210. package/es/common/shape/arc.js +7 -3
  211. package/es/common/shape/arc.js.map +1 -1
  212. package/es/common/simplify.js +1 -2
  213. package/es/common/sort.js +1 -1
  214. package/es/common/split-path.js +2 -2
  215. package/es/common/split-path.js.map +1 -1
  216. package/es/common/store.js +1 -1
  217. package/es/common/text.js +1 -1
  218. package/es/common/utils.d.ts +0 -2
  219. package/es/common/utils.js +1 -5
  220. package/es/common/utils.js.map +1 -1
  221. package/es/core/application.js +1 -1
  222. package/es/core/camera.js +1 -1
  223. package/es/core/global.d.ts +3 -0
  224. package/es/core/global.js +15 -2
  225. package/es/core/global.js.map +1 -1
  226. package/es/core/stage.d.ts +8 -3
  227. package/es/core/stage.js +35 -22
  228. package/es/core/stage.js.map +1 -1
  229. package/es/graphic/arc.d.ts +1 -2
  230. package/es/graphic/arc.js +3 -2
  231. package/es/graphic/arc.js.map +1 -1
  232. package/es/graphic/area.d.ts +1 -2
  233. package/es/graphic/area.js +4 -1
  234. package/es/graphic/area.js.map +1 -1
  235. package/es/graphic/circle.d.ts +1 -2
  236. package/es/graphic/circle.js +4 -2
  237. package/es/graphic/circle.js.map +1 -1
  238. package/es/graphic/config.js +2 -1
  239. package/es/graphic/config.js.map +1 -1
  240. package/es/graphic/graphic-service/graphic-module.js +1 -1
  241. package/es/graphic/graphic-service/graphic-module.js.map +1 -1
  242. package/es/graphic/graphic-service/graphic-service.js +1 -4
  243. package/es/graphic/graphic-service/graphic-service.js.map +1 -1
  244. package/es/graphic/graphic.d.ts +9 -12
  245. package/es/graphic/graphic.js +52 -109
  246. package/es/graphic/graphic.js.map +1 -1
  247. package/es/graphic/group.js +7 -7
  248. package/es/graphic/group.js.map +1 -1
  249. package/es/graphic/line.d.ts +1 -2
  250. package/es/graphic/line.js +5 -1
  251. package/es/graphic/line.js.map +1 -1
  252. package/es/graphic/rect.js +5 -2
  253. package/es/graphic/rect.js.map +1 -1
  254. package/es/graphic/richtext/icon.d.ts +1 -1
  255. package/es/graphic/richtext/icon.js.map +1 -1
  256. package/es/graphic/richtext/paragraph.js +2 -2
  257. package/es/graphic/richtext/paragraph.js.map +1 -1
  258. package/es/graphic/star.d.ts +1 -2
  259. package/es/graphic/star.js +4 -2
  260. package/es/graphic/star.js.map +1 -1
  261. package/es/index.d.ts +2 -3
  262. package/es/index.js +4 -6
  263. package/es/index.js.map +1 -1
  264. package/es/interface/animate.d.ts +1 -160
  265. package/es/interface/animate.js +2 -1
  266. package/es/interface/animate.js.map +1 -1
  267. package/es/interface/animation/animate.d.ts +117 -0
  268. package/es/interface/animation/animate.js +6 -0
  269. package/es/interface/animation/animate.js.map +1 -0
  270. package/es/interface/animation/easing.d.ts +3 -0
  271. package/es/interface/animation/easing.js +2 -0
  272. package/es/interface/animation/easing.js.map +1 -0
  273. package/es/interface/animation/index.d.ts +5 -0
  274. package/es/interface/animation/index.js +10 -0
  275. package/es/interface/animation/index.js.map +1 -0
  276. package/es/interface/animation/ticker.d.ts +39 -0
  277. package/es/{animate/Ticker/type.js → interface/animation/ticker.js} +1 -1
  278. package/es/interface/animation/ticker.js.map +1 -0
  279. package/es/interface/animation/timeline.d.ts +17 -0
  280. package/es/interface/animation/timeline.js +2 -0
  281. package/es/interface/animation/timeline.js.map +1 -0
  282. package/es/interface/animation/type.d.ts +13 -0
  283. package/es/interface/animation/type.js +14 -0
  284. package/es/interface/animation/type.js.map +1 -0
  285. package/es/interface/context.d.ts +1 -0
  286. package/es/interface/context.js.map +1 -1
  287. package/es/interface/global.d.ts +2 -0
  288. package/es/interface/global.js.map +1 -1
  289. package/es/interface/graphic.d.ts +11 -3
  290. package/es/interface/graphic.js.map +1 -1
  291. package/es/interface/index.d.ts +1 -1
  292. package/es/interface/index.js +2 -2
  293. package/es/interface/index.js.map +1 -1
  294. package/es/interface/render.d.ts +7 -0
  295. package/es/interface/render.js.map +1 -1
  296. package/es/interface/stage.d.ts +4 -1
  297. package/es/interface/stage.js.map +1 -1
  298. package/es/modules.d.ts +2 -1
  299. package/es/modules.js +6 -0
  300. package/es/modules.js.map +1 -1
  301. package/es/plugins/builtin-plugin/auto-render-plugin.js +8 -8
  302. package/es/plugins/builtin-plugin/auto-render-plugin.js.map +1 -1
  303. package/es/plugins/builtin-plugin/dirty-bounds-plugin.js +13 -12
  304. package/es/plugins/builtin-plugin/dirty-bounds-plugin.js.map +1 -1
  305. package/es/plugins/builtin-plugin/edit-module.js +4 -4
  306. package/es/plugins/builtin-plugin/edit-module.js.map +1 -1
  307. package/es/plugins/builtin-plugin/flex-layout-plugin.js +12 -11
  308. package/es/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
  309. package/es/plugins/builtin-plugin/html-attribute-plugin.js +0 -1
  310. package/es/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
  311. package/es/plugins/builtin-plugin/incremental-auto-render-plugin.js +8 -5
  312. package/es/plugins/builtin-plugin/incremental-auto-render-plugin.js.map +1 -1
  313. package/es/plugins/builtin-plugin/richtext-edit-plugin.d.ts +2 -2
  314. package/es/plugins/builtin-plugin/richtext-edit-plugin.js +4 -5
  315. package/es/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -1
  316. package/es/render/contributions/render/arc-render.d.ts +4 -2
  317. package/es/render/contributions/render/arc-render.js +19 -17
  318. package/es/render/contributions/render/arc-render.js.map +1 -1
  319. package/es/render/contributions/render/area-render.js +2 -2
  320. package/es/render/contributions/render/area-render.js.map +1 -1
  321. package/es/render/contributions/render/base-render.d.ts +2 -2
  322. package/es/render/contributions/render/base-render.js +2 -2
  323. package/es/render/contributions/render/base-render.js.map +1 -1
  324. package/es/render/contributions/render/draw-contribution.d.ts +1 -0
  325. package/es/render/contributions/render/draw-contribution.js +23 -19
  326. package/es/render/contributions/render/draw-contribution.js.map +1 -1
  327. package/es/render/contributions/render/draw-interceptor.js +2 -1
  328. package/es/render/contributions/render/draw-interceptor.js.map +1 -1
  329. package/es/render/contributions/render/group-render.d.ts +2 -2
  330. package/es/render/contributions/render/group-render.js +15 -11
  331. package/es/render/contributions/render/group-render.js.map +1 -1
  332. package/es/render/contributions/render/line-render.js +1 -1
  333. package/es/render/contributions/render/line-render.js.map +1 -1
  334. package/es/render/contributions/render/rect-render.d.ts +3 -1
  335. package/es/render/contributions/render/rect-render.js +17 -14
  336. package/es/render/contributions/render/rect-render.js.map +1 -1
  337. package/es/render/contributions/render/symbol-render.d.ts +4 -2
  338. package/es/render/contributions/render/symbol-render.js +16 -11
  339. package/es/render/contributions/render/symbol-render.js.map +1 -1
  340. package/es/render/render-service.d.ts +1 -1
  341. package/es/render/render-service.js.map +1 -1
  342. package/package.json +2 -2
  343. package/cjs/animate/Ticker/default-ticker.d.ts +0 -40
  344. package/cjs/animate/Ticker/default-ticker.js +0 -140
  345. package/cjs/animate/Ticker/default-ticker.js.map +0 -1
  346. package/cjs/animate/Ticker/index.d.ts +0 -5
  347. package/cjs/animate/Ticker/index.js.map +0 -1
  348. package/cjs/animate/Ticker/manual-ticker-handler.d.ts +0 -15
  349. package/cjs/animate/Ticker/manual-ticker-handler.js +0 -36
  350. package/cjs/animate/Ticker/manual-ticker-handler.js.map +0 -1
  351. package/cjs/animate/Ticker/manual-ticker.d.ts +0 -19
  352. package/cjs/animate/Ticker/manual-ticker.js +0 -37
  353. package/cjs/animate/Ticker/manual-ticker.js.map +0 -1
  354. package/cjs/animate/Ticker/raf-tick-handler.d.ts +0 -9
  355. package/cjs/animate/Ticker/raf-tick-handler.js +0 -30
  356. package/cjs/animate/Ticker/raf-tick-handler.js.map +0 -1
  357. package/cjs/animate/Ticker/timeout-tick-handler.d.ts +0 -9
  358. package/cjs/animate/Ticker/timeout-tick-handler.js +0 -28
  359. package/cjs/animate/Ticker/timeout-tick-handler.js.map +0 -1
  360. package/cjs/animate/Ticker/type.d.ts +0 -6
  361. package/cjs/animate/Ticker/type.js.map +0 -1
  362. package/cjs/animate/animate.d.ts +0 -147
  363. package/cjs/animate/animate.js +0 -403
  364. package/cjs/animate/animate.js.map +0 -1
  365. package/cjs/animate/custom-animate.d.ts +0 -236
  366. package/cjs/animate/custom-animate.js +0 -726
  367. package/cjs/animate/custom-animate.js.map +0 -1
  368. package/cjs/animate/default-ticker.d.ts +0 -2
  369. package/cjs/animate/default-ticker.js +0 -14
  370. package/cjs/animate/default-ticker.js.map +0 -1
  371. package/cjs/animate/easing-func.d.ts +0 -1
  372. package/cjs/animate/easing-func.js +0 -16
  373. package/cjs/animate/easing-func.js.map +0 -1
  374. package/cjs/animate/easing.d.ts +0 -49
  375. package/cjs/animate/easing.js +0 -141
  376. package/cjs/animate/easing.js.map +0 -1
  377. package/cjs/animate/group-fade.d.ts +0 -16
  378. package/cjs/animate/group-fade.js +0 -66
  379. package/cjs/animate/group-fade.js.map +0 -1
  380. package/cjs/animate/index.d.ts +0 -8
  381. package/cjs/animate/index.js +0 -24
  382. package/cjs/animate/index.js.map +0 -1
  383. package/cjs/animate/morphing.d.ts +0 -52
  384. package/cjs/animate/morphing.js +0 -292
  385. package/cjs/animate/morphing.js.map +0 -1
  386. package/cjs/animate/timeline.d.ts +0 -17
  387. package/cjs/animate/timeline.js +0 -46
  388. package/cjs/animate/timeline.js.map +0 -1
  389. package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.d.ts +0 -1
  390. package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.js +0 -3
  391. package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.js.map +0 -1
  392. package/es/animate/Ticker/default-ticker.d.ts +0 -40
  393. package/es/animate/Ticker/default-ticker.js +0 -138
  394. package/es/animate/Ticker/default-ticker.js.map +0 -1
  395. package/es/animate/Ticker/index.d.ts +0 -5
  396. package/es/animate/Ticker/index.js +0 -10
  397. package/es/animate/Ticker/index.js.map +0 -1
  398. package/es/animate/Ticker/manual-ticker-handler.d.ts +0 -15
  399. package/es/animate/Ticker/manual-ticker-handler.js +0 -28
  400. package/es/animate/Ticker/manual-ticker-handler.js.map +0 -1
  401. package/es/animate/Ticker/manual-ticker.d.ts +0 -19
  402. package/es/animate/Ticker/manual-ticker.js +0 -31
  403. package/es/animate/Ticker/manual-ticker.js.map +0 -1
  404. package/es/animate/Ticker/raf-tick-handler.d.ts +0 -9
  405. package/es/animate/Ticker/raf-tick-handler.js +0 -22
  406. package/es/animate/Ticker/raf-tick-handler.js.map +0 -1
  407. package/es/animate/Ticker/timeout-tick-handler.d.ts +0 -9
  408. package/es/animate/Ticker/timeout-tick-handler.js +0 -20
  409. package/es/animate/Ticker/timeout-tick-handler.js.map +0 -1
  410. package/es/animate/Ticker/type.d.ts +0 -6
  411. package/es/animate/Ticker/type.js.map +0 -1
  412. package/es/animate/animate.d.ts +0 -147
  413. package/es/animate/animate.js +0 -398
  414. package/es/animate/animate.js.map +0 -1
  415. package/es/animate/custom-animate.d.ts +0 -236
  416. package/es/animate/custom-animate.js +0 -703
  417. package/es/animate/custom-animate.js.map +0 -1
  418. package/es/animate/default-ticker.d.ts +0 -2
  419. package/es/animate/default-ticker.js +0 -12
  420. package/es/animate/default-ticker.js.map +0 -1
  421. package/es/animate/easing-func.d.ts +0 -1
  422. package/es/animate/easing-func.js +0 -10
  423. package/es/animate/easing-func.js.map +0 -1
  424. package/es/animate/easing.d.ts +0 -49
  425. package/es/animate/easing.js +0 -134
  426. package/es/animate/easing.js.map +0 -1
  427. package/es/animate/group-fade.d.ts +0 -16
  428. package/es/animate/group-fade.js +0 -56
  429. package/es/animate/group-fade.js.map +0 -1
  430. package/es/animate/index.d.ts +0 -8
  431. package/es/animate/index.js +0 -16
  432. package/es/animate/index.js.map +0 -1
  433. package/es/animate/morphing.d.ts +0 -52
  434. package/es/animate/morphing.js +0 -295
  435. package/es/animate/morphing.js.map +0 -1
  436. package/es/animate/timeline.d.ts +0 -17
  437. package/es/animate/timeline.js +0 -42
  438. package/es/animate/timeline.js.map +0 -1
  439. package/es/plugins/builtin-plugin/richtext-edit-plugin-old.d.ts +0 -1
  440. package/es/plugins/builtin-plugin/richtext-edit-plugin-old.js +0 -3
  441. package/es/plugins/builtin-plugin/richtext-edit-plugin-old.js.map +0 -1
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.diff = void 0;
6
+
7
+ const vutils_1 = require("@visactor/vutils");
8
+
9
+ function diff(oldAttrs, newAttrs, getAttr) {
10
+ const diffObj = {};
11
+ for (const key in newAttrs) key in oldAttrs && (0, vutils_1.isEqual)(oldAttrs[key], newAttrs[key]) || (diffObj[key] = newAttrs[key]);
12
+ if (getAttr) for (const key in oldAttrs) if (!(key in newAttrs)) {
13
+ const value = getAttr(key);
14
+ void 0 !== value && (diffObj[key] = value);
15
+ }
16
+ return diffObj;
17
+ }
18
+
19
+ exports.diff = diff;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/diff.ts"],"names":[],"mappings":";;;AAAA,6CAA2C;AAS3C,SAAgB,IAAI,CAClB,QAAW,EACX,QAAW,EACX,OAAgC;IAEhC,MAAM,OAAO,GAAwB,EAAE,CAAC;IAGxC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;QAE1B,IAAI,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAA,gBAAO,EAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;YAChE,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;SAC9B;KACF;IAGD,IAAI,OAAO,EAAE;QACX,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;YAC1B,IAAI,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE;gBACtB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,KAAK,KAAK,SAAS,EAAE;oBACvB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;iBACtB;aACF;SACF;KACF;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AA5BD,oBA4BC","file":"diff.js","sourcesContent":["import { isEqual } from '@visactor/vutils';\n\n/**\n * 比较两个对象的差异,深比较,返回差异的对象\n * @param oldAttrs 原始对象\n * @param newAttrs 目标对象\n * @param getAttr 获取属性值的函数(在于oldAttrs里有,newAttrs里没有的属性,调用函数获取,可选)\n * @returns 差异的对象\n */\nexport function diff<T extends Record<string, any>>(\n oldAttrs: T,\n newAttrs: T,\n getAttr?: (attr: keyof T) => any\n): Record<string, any> {\n const diffObj: Record<string, any> = {};\n\n // 处理newAttrs中的属性\n for (const key in newAttrs) {\n // 如果oldAttrs不存在该属性或者属性值不同\n if (!(key in oldAttrs) || !isEqual(oldAttrs[key], newAttrs[key])) {\n diffObj[key] = newAttrs[key];\n }\n }\n\n // 处理oldAttrs中有但newAttrs中没有的属性\n if (getAttr) {\n for (const key in oldAttrs) {\n if (!(key in newAttrs)) {\n const value = getAttr(key);\n if (value !== undefined) {\n diffObj[key] = value;\n }\n }\n }\n }\n\n return diffObj;\n}\n"]}
@@ -36,22 +36,6 @@ export declare enum AttributeUpdateType {
36
36
  ROTATE = 24,
37
37
  ROTATE_TO = 25
38
38
  }
39
- export declare enum AnimateStatus {
40
- INITIAL = 0,
41
- RUNNING = 1,
42
- PAUSED = 2,
43
- END = 3
44
- }
45
- export declare enum AnimateMode {
46
- NORMAL = 0,
47
- SET_ATTR_IMMEDIATELY = 1
48
- }
49
- export declare enum AnimateStepType {
50
- 'wait' = "wait",
51
- 'from' = "from",
52
- 'to' = "to",
53
- 'customAnimate' = "customAnimate"
54
- }
55
39
  export declare enum Direction {
56
40
  ROW = 1,
57
41
  COLUMN = 2
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
 
3
- var UpdateTag, IContainPointMode, AttributeUpdateType, AnimateStatus, AnimateMode, AnimateStepType, Direction, CurveTypeEnum, BaseRenderContributionTime;
3
+ var UpdateTag, IContainPointMode, AttributeUpdateType, Direction, CurveTypeEnum, BaseRenderContributionTime;
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: !0
7
- }), exports.BaseRenderContributionTime = exports.CurveTypeEnum = exports.Direction = exports.AnimateStepType = exports.AnimateMode = exports.AnimateStatus = exports.AttributeUpdateType = exports.IContainPointMode = exports.UpdateTag = void 0,
7
+ }), exports.BaseRenderContributionTime = exports.CurveTypeEnum = exports.Direction = exports.AttributeUpdateType = exports.IContainPointMode = exports.UpdateTag = void 0,
8
8
  function(UpdateTag) {
9
9
  UpdateTag[UpdateTag.NONE = 0] = "NONE", UpdateTag[UpdateTag.UPDATE_BOUNDS = 1] = "UPDATE_BOUNDS",
10
10
  UpdateTag[UpdateTag.UPDATE_SHAPE = 2] = "UPDATE_SHAPE", UpdateTag[UpdateTag.CLEAR_SHAPE = 253] = "CLEAR_SHAPE",
@@ -27,15 +27,6 @@ function(AttributeUpdateType) {
27
27
  AttributeUpdateType[AttributeUpdateType.SCALE_TO = 23] = "SCALE_TO", AttributeUpdateType[AttributeUpdateType.ROTATE = 24] = "ROTATE",
28
28
  AttributeUpdateType[AttributeUpdateType.ROTATE_TO = 25] = "ROTATE_TO";
29
29
  }(AttributeUpdateType = exports.AttributeUpdateType || (exports.AttributeUpdateType = {})),
30
- function(AnimateStatus) {
31
- AnimateStatus[AnimateStatus.INITIAL = 0] = "INITIAL", AnimateStatus[AnimateStatus.RUNNING = 1] = "RUNNING",
32
- AnimateStatus[AnimateStatus.PAUSED = 2] = "PAUSED", AnimateStatus[AnimateStatus.END = 3] = "END";
33
- }(AnimateStatus = exports.AnimateStatus || (exports.AnimateStatus = {})), function(AnimateMode) {
34
- AnimateMode[AnimateMode.NORMAL = 0] = "NORMAL", AnimateMode[AnimateMode.SET_ATTR_IMMEDIATELY = 1] = "SET_ATTR_IMMEDIATELY";
35
- }(AnimateMode = exports.AnimateMode || (exports.AnimateMode = {})), function(AnimateStepType) {
36
- AnimateStepType.wait = "wait", AnimateStepType.from = "from", AnimateStepType.to = "to",
37
- AnimateStepType.customAnimate = "customAnimate";
38
- }(AnimateStepType = exports.AnimateStepType || (exports.AnimateStepType = {})),
39
30
  function(Direction) {
40
31
  Direction[Direction.ROW = 1] = "ROW", Direction[Direction.COLUMN = 2] = "COLUMN";
41
32
  }(Direction = exports.Direction || (exports.Direction = {})), function(CurveTypeEnum) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/enums.ts"],"names":[],"mappings":";;;AAAA,IAAY,SAeX;AAfD,WAAY,SAAS;IACnB,yCAAiB,CAAA;IACjB,2DAA0B,CAAA;IAC1B,yDAAyB,CAAA;IACzB,yDAAwB,CAAA;IACxB,+EAAoC,CAAA;IACpC,2CAAiB,CAAA;IACjB,2DAAyB,CAAA;IACzB,0EAAiC,CAAA;IACjC,yEAAgC,CAAA;IAChC,wEAAgC,CAAA;IAChC,uEAA+B,CAAA;IAC/B,sFAAuC,CAAA;IACvC,6DAA0B,CAAA;IAC1B,2DAAyB,CAAA;AAC3B,CAAC,EAfW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAepB;AAED,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,6DAAmB,CAAA;IACnB,4DAAkB,CAAA;IAClB,+EAA4B,CAAA;IAC5B,8EAA2B,CAAA;AAC7B,CAAC,EALW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAK5B;AAED,IAAY,mBAiBX;AAjBD,WAAY,mBAAmB;IAC7B,6DAAQ,CAAA;IACR,mEAAW,CAAA;IACX,+DAAS,CAAA;IAET,8EAAiB,CAAA;IACjB,8EAAiB,CAAA;IACjB,gFAAkB,CAAA;IAClB,kFAAmB,CAAA;IACnB,4EAAgB,CAAA;IAEhB,wEAAc,CAAA;IACd,8EAAiB,CAAA;IACjB,gEAAU,CAAA;IACV,sEAAa,CAAA;IACb,kEAAW,CAAA;IACX,wEAAc,CAAA;AAChB,CAAC,EAjBW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAiB9B;AAED,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,uDAAW,CAAA;IACX,uDAAW,CAAA;IACX,qDAAU,CAAA;IACV,+CAAO,CAAA;AACT,CAAC,EALW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAKxB;AAED,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,iDAAe,CAAA;IACf,6EAA6B,CAAA;AAC/B,CAAC,EAHW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAGtB;AAED,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,gCAAe,CAAA;IACf,gCAAe,CAAA;IACf,4BAAW,CAAA;IACX,kDAAiC,CAAA;AACnC,CAAC,EALW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAK1B;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,uCAAO,CAAA;IACP,6CAAU,CAAA;AACZ,CAAC,EAHW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAGpB;AAED,IAAY,aAOX;AAPD,WAAY,aAAa;IACvB,yEAAoB,CAAA;IACpB,iFAAwB,CAAA;IACxB,yDAAY,CAAA;IACZ,2DAAa,CAAA;IACb,iEAAgB,CAAA;IAChB,2DAAa,CAAA;AACf,CAAC,EAPW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAOxB;AAED,IAAY,0BAGX;AAHD,WAAY,0BAA0B;IACpC,mGAAgB,CAAA;IAChB,iGAAe,CAAA;AACjB,CAAC,EAHW,0BAA0B,GAA1B,kCAA0B,KAA1B,kCAA0B,QAGrC","file":"enums.js","sourcesContent":["export enum UpdateTag {\n NONE = 0b00000000,\n UPDATE_BOUNDS = 0b00000001, // bounds有更新\n UPDATE_SHAPE = 0b00000010, // shape有更新\n CLEAR_SHAPE = 0b11111101,\n UPDATE_SHAPE_AND_BOUNDS = 0b00000011, // shape&bounds有更新\n INIT = 0b10110011,\n CLEAR_BOUNDS = 0b11111110, // 清除bounds更新位\n UPDATE_GLOBAL_MATRIX = 0b00100000, // 更新全局matrix\n CLEAR_GLOBAL_MATRIX = 0b11011111, // 清除全局matrix\n UPDATE_LOCAL_MATRIX = 0b00010000, // 更新局部matrix\n CLEAR_LOCAL_MATRIX = 0b11101111, // 清除局部matrix\n UPDATE_GLOBAL_LOCAL_MATRIX = 0b00110000, // 更新全局和局部matrix\n UPDATE_LAYOUT = 0b10000000, // 布局需要更新\n CLEAR_LAYOUT = 0b01111111 // 清楚布局更新\n}\n\nexport enum IContainPointMode {\n GLOBAL = 0b00000001, // 传入的点是全局坐标\n LOCAL = 0b00010000, // 传入的点是局部坐标\n GLOBAL_ACCURATE = 0b00000011, // 使用精确的全局匹配\n LOCAL_ACCURATE = 0b00110000 // 使用精确的局部匹配\n}\n\nexport enum AttributeUpdateType {\n INIT = 0,\n DEFAULT = 1,\n STATE = 2,\n\n ANIMATE_BIND = 10,\n ANIMATE_PLAY = 11,\n ANIMATE_START = 12,\n ANIMATE_UPDATE = 13,\n ANIMATE_END = 14,\n\n TRANSLATE = 20,\n TRANSLATE_TO = 21,\n SCALE = 22,\n SCALE_TO = 23,\n ROTATE = 24,\n ROTATE_TO = 25\n}\n\nexport enum AnimateStatus {\n INITIAL = 0,\n RUNNING = 1,\n PAUSED = 2,\n END = 3\n}\n\nexport enum AnimateMode {\n NORMAL = 0b0000,\n SET_ATTR_IMMEDIATELY = 0b0001\n}\n\nexport enum AnimateStepType {\n 'wait' = 'wait',\n 'from' = 'from',\n 'to' = 'to',\n 'customAnimate' = 'customAnimate'\n}\n\nexport enum Direction {\n ROW = 1,\n COLUMN = 2\n}\n\nexport enum CurveTypeEnum {\n CubicBezierCurve = 0,\n QuadraticBezierCurve = 1,\n ArcCurve = 2,\n LineCurve = 3,\n EllipseCurve = 4,\n MoveCurve = 5\n}\n\nexport enum BaseRenderContributionTime {\n beforeFillStroke,\n afterFillStroke\n}\n"]}
1
+ {"version":3,"sources":["../src/common/enums.ts"],"names":[],"mappings":";;;AAAA,IAAY,SAeX;AAfD,WAAY,SAAS;IACnB,yCAAiB,CAAA;IACjB,2DAA0B,CAAA;IAC1B,yDAAyB,CAAA;IACzB,yDAAwB,CAAA;IACxB,+EAAoC,CAAA;IACpC,2CAAiB,CAAA;IACjB,2DAAyB,CAAA;IACzB,0EAAiC,CAAA;IACjC,yEAAgC,CAAA;IAChC,wEAAgC,CAAA;IAChC,uEAA+B,CAAA;IAC/B,sFAAuC,CAAA;IACvC,6DAA0B,CAAA;IAC1B,2DAAyB,CAAA;AAC3B,CAAC,EAfW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAepB;AAED,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,6DAAmB,CAAA;IACnB,4DAAkB,CAAA;IAClB,+EAA4B,CAAA;IAC5B,8EAA2B,CAAA;AAC7B,CAAC,EALW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAK5B;AAED,IAAY,mBAiBX;AAjBD,WAAY,mBAAmB;IAC7B,6DAAQ,CAAA;IACR,mEAAW,CAAA;IACX,+DAAS,CAAA;IAET,8EAAiB,CAAA;IACjB,8EAAiB,CAAA;IACjB,gFAAkB,CAAA;IAClB,kFAAmB,CAAA;IACnB,4EAAgB,CAAA;IAEhB,wEAAc,CAAA;IACd,8EAAiB,CAAA;IACjB,gEAAU,CAAA;IACV,sEAAa,CAAA;IACb,kEAAW,CAAA;IACX,wEAAc,CAAA;AAChB,CAAC,EAjBW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAiB9B;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,uCAAO,CAAA;IACP,6CAAU,CAAA;AACZ,CAAC,EAHW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAGpB;AAED,IAAY,aAOX;AAPD,WAAY,aAAa;IACvB,yEAAoB,CAAA;IACpB,iFAAwB,CAAA;IACxB,yDAAY,CAAA;IACZ,2DAAa,CAAA;IACb,iEAAgB,CAAA;IAChB,2DAAa,CAAA;AACf,CAAC,EAPW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAOxB;AAED,IAAY,0BAGX;AAHD,WAAY,0BAA0B;IACpC,mGAAgB,CAAA;IAChB,iGAAe,CAAA;AACjB,CAAC,EAHW,0BAA0B,GAA1B,kCAA0B,KAA1B,kCAA0B,QAGrC","file":"enums.js","sourcesContent":["export enum UpdateTag {\n NONE = 0b00000000,\n UPDATE_BOUNDS = 0b00000001, // bounds有更新\n UPDATE_SHAPE = 0b00000010, // shape有更新\n CLEAR_SHAPE = 0b11111101,\n UPDATE_SHAPE_AND_BOUNDS = 0b00000011, // shape&bounds有更新\n INIT = 0b10110011,\n CLEAR_BOUNDS = 0b11111110, // 清除bounds更新位\n UPDATE_GLOBAL_MATRIX = 0b00100000, // 更新全局matrix\n CLEAR_GLOBAL_MATRIX = 0b11011111, // 清除全局matrix\n UPDATE_LOCAL_MATRIX = 0b00010000, // 更新局部matrix\n CLEAR_LOCAL_MATRIX = 0b11101111, // 清除局部matrix\n UPDATE_GLOBAL_LOCAL_MATRIX = 0b00110000, // 更新全局和局部matrix\n UPDATE_LAYOUT = 0b10000000, // 布局需要更新\n CLEAR_LAYOUT = 0b01111111 // 清楚布局更新\n}\n\nexport enum IContainPointMode {\n GLOBAL = 0b00000001, // 传入的点是全局坐标\n LOCAL = 0b00010000, // 传入的点是局部坐标\n GLOBAL_ACCURATE = 0b00000011, // 使用精确的全局匹配\n LOCAL_ACCURATE = 0b00110000 // 使用精确的局部匹配\n}\n\nexport enum AttributeUpdateType {\n INIT = 0,\n DEFAULT = 1,\n STATE = 2,\n\n ANIMATE_BIND = 10,\n ANIMATE_PLAY = 11,\n ANIMATE_START = 12,\n ANIMATE_UPDATE = 13,\n ANIMATE_END = 14,\n\n TRANSLATE = 20,\n TRANSLATE_TO = 21,\n SCALE = 22,\n SCALE_TO = 23,\n ROTATE = 24,\n ROTATE_TO = 25\n}\n\nexport enum Direction {\n ROW = 1,\n COLUMN = 2\n}\n\nexport enum CurveTypeEnum {\n CubicBezierCurve = 0,\n QuadraticBezierCurve = 1,\n ArcCurve = 2,\n LineCurve = 3,\n EllipseCurve = 4,\n MoveCurve = 5\n}\n\nexport enum BaseRenderContributionTime {\n beforeFillStroke,\n afterFillStroke\n}\n"]}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.bezierCurversToPath = exports.applyTransformOnBezierCurves = exports.pathToBezierCurves = exports.alignBezierCurves = exports.findBestMorphingRotation = exports.centroidOfSubpath = exports.alignSubpath = exports.cubicSubdivide = void 0;
6
6
 
7
- const vutils_1 = require("@visactor/vutils"), custom_path2d_1 = require("./custom-path2d"), path_svg_1 = require("./path-svg"), arc_1 = require("./shape/arc");
7
+ const custom_path2d_1 = require("./custom-path2d");
8
8
 
9
9
  function cubicSubdivide(p0, p1, p2, p3, t, out) {
10
10
  const p01 = (p1 - p0) * t + p0, p12 = (p2 - p1) * t + p1, p23 = (p3 - p2) * t + p2, p012 = (p12 - p01) * t + p01, p123 = (p23 - p12) * t + p12, p0123 = (p123 - p012) * t + p012;
@@ -134,132 +134,38 @@ function alignBezierCurves(array1, array2) {
134
134
  return [ newArray1, newArray2 ];
135
135
  }
136
136
 
137
- exports.cubicSubdivide = cubicSubdivide, exports.alignSubpath = alignSubpath, exports.centroidOfSubpath = centroidOfSubpath,
138
- exports.findBestMorphingRotation = findBestMorphingRotation, exports.alignBezierCurves = alignBezierCurves;
139
-
140
- const addLineToBezierPath = (bezierPath, x0, y0, x1, y1) => {
141
- (0, vutils_1.isNumberClose)(x0, x1) && (0, vutils_1.isNumberClose)(y0, y1) || bezierPath.push(x0, y0, x1, y1, x1, y1);
142
- };
143
-
144
137
  function pathToBezierCurves(path) {
145
- const commandList = path.commandList, bezierArrayGroups = [];
146
- let currentSubpath, xi = 0, yi = 0, x0 = 0, y0 = 0;
147
- const createNewSubpath = (x, y) => {
148
- currentSubpath && currentSubpath.length > 2 && bezierArrayGroups.push(currentSubpath),
149
- currentSubpath = [ x, y ];
150
- };
151
- let x1, y1, x2, y2;
152
- for (let i = 0, len = commandList.length; i < len; i++) {
153
- const cmd = commandList[i], isFirst = 0 === i;
154
- switch (isFirst && (x0 = xi = cmd[1], y0 = yi = cmd[2], [ path_svg_1.enumCommandMap.L, path_svg_1.enumCommandMap.C, path_svg_1.enumCommandMap.Q ].includes(cmd[0]) && (currentSubpath = [ x0, y0 ])),
155
- cmd[0]) {
156
- case path_svg_1.enumCommandMap.M:
157
- xi = x0 = cmd[1], yi = y0 = cmd[2], createNewSubpath(x0, y0);
158
- break;
159
-
160
- case path_svg_1.enumCommandMap.L:
161
- x1 = cmd[1], y1 = cmd[2], addLineToBezierPath(currentSubpath, xi, yi, x1, y1), xi = x1,
162
- yi = y1;
163
- break;
164
-
165
- case path_svg_1.enumCommandMap.C:
166
- currentSubpath.push(cmd[1], cmd[2], cmd[3], cmd[4], xi = cmd[5], yi = cmd[6]);
167
- break;
168
-
169
- case path_svg_1.enumCommandMap.Q:
170
- x1 = cmd[1], y1 = cmd[2], x2 = cmd[3], y2 = cmd[4], currentSubpath.push(xi + 2 / 3 * (x1 - xi), yi + 2 / 3 * (y1 - yi), x2 + 2 / 3 * (x1 - x2), y2 + 2 / 3 * (y1 - y2), x2, y2),
171
- xi = x2, yi = y2;
172
- break;
173
-
174
- case path_svg_1.enumCommandMap.A:
175
- {
176
- const cx = cmd[1], cy = cmd[2], rx = cmd[3], ry = rx, startAngle = cmd[4], endAngle = cmd[5], counterClockwise = !!cmd[6];
177
- x1 = Math.cos(startAngle) * rx + cx, y1 = Math.sin(startAngle) * rx + cy, isFirst ? (x0 = x1,
178
- y0 = y1, createNewSubpath(x0, y0)) : addLineToBezierPath(currentSubpath, xi, yi, x1, y1),
179
- xi = Math.cos(endAngle) * rx + cx, yi = Math.sin(endAngle) * rx + cy;
180
- const step = (counterClockwise ? -1 : 1) * Math.PI / 2;
181
- for (let angle = startAngle; counterClockwise ? angle > endAngle : angle < endAngle; angle += step) {
182
- const nextAngle = counterClockwise ? Math.max(angle + step, endAngle) : Math.min(angle + step, endAngle);
183
- (0, arc_1.addArcToBezierPath)(currentSubpath, angle, nextAngle, cx, cy, rx, ry);
184
- }
185
- break;
186
- }
187
-
188
- case path_svg_1.enumCommandMap.E:
189
- {
190
- const cx = cmd[1], cy = cmd[2], rx = cmd[3], ry = cmd[4], rotate = cmd[5], startAngle = cmd[6], endAngle = cmd[7] + startAngle, anticlockwise = !!cmd[8], hasRotate = !(0,
191
- vutils_1.isNumberClose)(rotate, 0), rc = Math.cos(rotate), rs = Math.sin(rotate);
192
- let xTemp = Math.cos(startAngle) * rx, yTemp = Math.sin(startAngle) * ry;
193
- hasRotate ? (x1 = xTemp * rc - yTemp * rs + cx, y1 = xTemp * rs + yTemp * rc + cy) : (x1 = xTemp + cx,
194
- y1 = yTemp + cy), isFirst ? (x0 = x1, y0 = y1, createNewSubpath(x0, y0)) : addLineToBezierPath(currentSubpath, xi, yi, x1, y1),
195
- xTemp = Math.cos(endAngle) * rx, yTemp = Math.sin(endAngle) * ry, hasRotate ? (xi = xTemp * rc - yTemp * rs + cx,
196
- yi = xTemp * rs + yTemp * rc + cy) : (xi = xTemp + cx, yi = yTemp + cy);
197
- const step = (anticlockwise ? -1 : 1) * Math.PI / 2;
198
- for (let angle = startAngle; anticlockwise ? angle > endAngle : angle < endAngle; angle += step) {
199
- const nextAngle = anticlockwise ? Math.max(angle + step, endAngle) : Math.min(angle + step, endAngle);
200
- if ((0, arc_1.addArcToBezierPath)(currentSubpath, angle, nextAngle, cx, cy, rx, ry),
201
- hasRotate) {
202
- const curLen = currentSubpath.length;
203
- for (let j = curLen - 6; j <= curLen - 1; j += 2) xTemp = currentSubpath[j], yTemp = currentSubpath[j + 1],
204
- currentSubpath[j] = (xTemp - cx) * rc - (yTemp - cy) * rs + cx, currentSubpath[j + 1] = (xTemp - cx) * rs + (yTemp - cy) * rc + cy;
205
- }
206
- }
207
- break;
208
- }
209
-
210
- case path_svg_1.enumCommandMap.R:
211
- x0 = xi = cmd[1], y0 = yi = cmd[2], x1 = x0 + cmd[3], y1 = y0 + cmd[4], createNewSubpath(x1, y0),
212
- addLineToBezierPath(currentSubpath, x1, y0, x1, y1), addLineToBezierPath(currentSubpath, x1, y1, x0, y1),
213
- addLineToBezierPath(currentSubpath, x0, y1, x0, y0), addLineToBezierPath(currentSubpath, x0, y0, x1, y0);
214
- break;
215
-
216
- case path_svg_1.enumCommandMap.AT:
217
- {
218
- const tx1 = cmd[1], ty1 = cmd[2], tx2 = cmd[3], ty2 = cmd[4], r = cmd[5], dis1 = vutils_1.PointService.distancePP({
219
- x: xi,
220
- y: yi
221
- }, {
222
- x: tx1,
223
- y: ty1
224
- }), dis2 = vutils_1.PointService.distancePP({
225
- x: tx2,
226
- y: ty2
227
- }, {
228
- x: tx1,
229
- y: ty1
230
- }), theta = ((xi - tx1) * (tx2 - tx1) + (yi - ty1) * (ty2 - ty1)) / (dis1 * dis2), dis = r / Math.sin(theta / 2), midX = (xi + tx2 - 2 * tx1) / 2, midY = (yi + ty2 - 2 * ty1) / 2, midLen = vutils_1.PointService.distancePP({
231
- x: midX,
232
- y: midY
233
- }, {
234
- x: 0,
235
- y: 0
236
- }), cx = tx1 + dis * midX / midLen, cy = tx2 + dis * midY / midLen, disP = Math.sqrt(dis * dis - r * r);
237
- x0 = tx1 + disP * (xi - tx1) / dis1, y0 = ty1 + disP * (yi - ty1) / dis1, addLineToBezierPath(currentSubpath, xi, yi, x0, y0),
238
- xi = tx1 + disP * (tx2 - tx1) / dis2, yi = ty1 + disP * (ty2 - ty1) / dis2;
239
- const startAngle = (0, vutils_1.getAngleByPoint)({
240
- x: cx,
241
- y: cy
242
- }, {
243
- x: x0,
244
- y: y0
245
- }), endAngle = (0, vutils_1.getAngleByPoint)({
246
- x: cx,
247
- y: cy
248
- }, {
249
- x: xi,
250
- y: yi
251
- });
252
- (0, arc_1.addArcToBezierPath)(currentSubpath, startAngle, endAngle, cx, cy, r, r);
253
- break;
254
- }
255
-
256
- case path_svg_1.enumCommandMap.Z:
257
- currentSubpath && addLineToBezierPath(currentSubpath, xi, yi, x0, y0), xi = x0,
258
- yi = y0;
138
+ const tempPath = new custom_path2d_1.CustomPath2D, svgPathString = path.toString();
139
+ if (!svgPathString) return [];
140
+ tempPath.fromString(svgPathString);
141
+ const curves = tempPath.tryBuildCurves();
142
+ if (!curves || 0 === curves.length) return [];
143
+ const bezierSubpaths = [];
144
+ let currentSubpath = null;
145
+ currentSubpath = [];
146
+ let firstX = 0, firstY = 0, lastX = 0, lastY = 0, isSubpathStart = !0, isPathClosed = !1;
147
+ for (let i = 0; i < curves.length; i++) {
148
+ const curve = curves[i];
149
+ if (isSubpathStart && (firstX = curve.p0.x, firstY = curve.p0.y, lastX = firstX,
150
+ lastY = firstY, currentSubpath = [ firstX, firstY ], bezierSubpaths.push(currentSubpath),
151
+ isSubpathStart = !1), curve.p1 && curve.p2 && curve.p3) currentSubpath.push(curve.p1.x, curve.p1.y, curve.p2.x, curve.p2.y, curve.p3.x, curve.p3.y),
152
+ lastX = curve.p3.x, lastY = curve.p3.y; else if (curve.p1 && curve.p2) {
153
+ const x1 = curve.p1.x, y1 = curve.p1.y, x2 = curve.p2.x, y2 = curve.p2.y;
154
+ currentSubpath.push(lastX + 2 / 3 * (x1 - lastX), lastY + 2 / 3 * (y1 - lastY), x2 + 2 / 3 * (x1 - x2), y2 + 2 / 3 * (y1 - y2), x2, y2),
155
+ lastX = x2, lastY = y2;
156
+ } else if (curve.p1) {
157
+ const endX = curve.p1.x, endY = curve.p1.y;
158
+ Math.abs(lastX - endX) < 1e-10 && Math.abs(lastY - endY) < 1e-10 || currentSubpath.push(lastX, lastY, endX, endY, endX, endY),
159
+ lastX = endX, lastY = endY;
160
+ }
161
+ if (i === curves.length - 1 && Math.abs(lastX - firstX) < 1e-10 && Math.abs(lastY - firstY) < 1e-10 && (isPathClosed = !0),
162
+ i < curves.length - 1) {
163
+ const nextCurve = curves[i + 1];
164
+ (Math.abs(lastX - nextCurve.p0.x) > 1e-10 || Math.abs(lastY - nextCurve.p0.y) > 1e-10) && (isSubpathStart = !0);
259
165
  }
260
166
  }
261
- return currentSubpath && currentSubpath.length > 2 && bezierArrayGroups.push(currentSubpath),
262
- bezierArrayGroups;
167
+ const validSubpaths = bezierSubpaths.filter((subpath => subpath.length > 2));
168
+ return 1 === validSubpaths.length ? [ validSubpaths[0] ] : validSubpaths;
263
169
  }
264
170
 
265
171
  function applyTransformOnBezierCurves(bezierCurves, martrix) {
@@ -290,6 +196,8 @@ function bezierCurversToPath(bezierCurves) {
290
196
  return path;
291
197
  }
292
198
 
199
+ exports.cubicSubdivide = cubicSubdivide, exports.alignSubpath = alignSubpath, exports.centroidOfSubpath = centroidOfSubpath,
200
+ exports.findBestMorphingRotation = findBestMorphingRotation, exports.alignBezierCurves = alignBezierCurves,
293
201
  exports.pathToBezierCurves = pathToBezierCurves, exports.applyTransformOnBezierCurves = applyTransformOnBezierCurves,
294
202
  exports.bezierCurversToPath = bezierCurversToPath;
295
203
  //# sourceMappingURL=morphing-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/morphing-utils.ts"],"names":[],"mappings":"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","file":"morphing-utils.js","sourcesContent":["/* Adapted from zrender by ecomfe\n * https://github.com/ecomfe/zrender\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/ecomfe/zrender/blob/master/src/tool/morphPath.ts\n * License: https://github.com/ecomfe/zrender/blob/master/LICENSE\n * @license\n */\n\nimport type { IMatrix } from '@visactor/vutils';\nimport { getAngleByPoint, isNumberClose, PointService } from '@visactor/vutils';\nimport type { ICustomPath2D } from '../interface';\nimport { CustomPath2D } from './custom-path2d';\nimport { enumCommandMap } from './path-svg';\nimport { addArcToBezierPath } from './shape/arc';\n\nexport function cubicSubdivide(p0: number, p1: number, p2: number, p3: number, t: number, out: number[]) {\n const p01 = (p1 - p0) * t + p0;\n const p12 = (p2 - p1) * t + p1;\n const p23 = (p3 - p2) * t + p2;\n\n const p012 = (p12 - p01) * t + p01;\n const p123 = (p23 - p12) * t + p12;\n\n const p0123 = (p123 - p012) * t + p012;\n // Seg0\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n out[3] = p0123;\n // Seg1\n out[4] = p0123;\n out[5] = p123;\n out[6] = p23;\n out[7] = p3;\n}\n\nexport function alignSubpath(subpath1: number[], subpath2: number[]): [number[], number[]] {\n const len1 = subpath1.length;\n const len2 = subpath2.length;\n if (len1 === len2) {\n return [subpath1, subpath2];\n }\n const tmpSegX: number[] = [];\n const tmpSegY: number[] = [];\n\n const shorterPath = len1 < len2 ? subpath1 : subpath2;\n const shorterLen = Math.min(len1, len2);\n // Should divide excatly\n const diff = Math.abs(len2 - len1) / 6;\n const shorterBezierCount = (shorterLen - 2) / 6;\n // Add `diff` number of beziers\n const eachCurveSubDivCount = Math.ceil(diff / shorterBezierCount);\n\n const newSubpath = [shorterPath[0], shorterPath[1]];\n let remained = diff;\n\n for (let i = 2; i < shorterLen; i += 6) {\n let x0 = shorterPath[i - 2];\n let y0 = shorterPath[i - 1];\n let x1 = shorterPath[i];\n let y1 = shorterPath[i + 1];\n let x2 = shorterPath[i + 2];\n let y2 = shorterPath[i + 3];\n const x3 = shorterPath[i + 4];\n const y3 = shorterPath[i + 5];\n\n if (remained <= 0) {\n newSubpath.push(x1, y1, x2, y2, x3, y3);\n continue;\n }\n\n const actualSubDivCount = Math.min(remained, eachCurveSubDivCount) + 1;\n for (let k = 1; k <= actualSubDivCount; k++) {\n const p = k / actualSubDivCount;\n\n cubicSubdivide(x0, x1, x2, x3, p, tmpSegX);\n cubicSubdivide(y0, y1, y2, y3, p, tmpSegY);\n\n // tmpSegX[3] === tmpSegX[4]\n x0 = tmpSegX[3];\n y0 = tmpSegY[3];\n\n newSubpath.push(tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], x0, y0);\n x1 = tmpSegX[5];\n y1 = tmpSegY[5];\n x2 = tmpSegX[6];\n y2 = tmpSegY[6];\n // The last point (x3, y3) is still the same.\n }\n remained -= actualSubDivCount - 1;\n }\n\n return shorterPath === subpath1 ? [newSubpath, subpath2] : [subpath1, newSubpath];\n}\n\nfunction createSubpath(lastSubpath: number[], otherSubpath: number[]) {\n const prevSubPath = lastSubpath || otherSubpath;\n const len = prevSubPath.length;\n const lastX = prevSubPath[len - 2];\n const lastY = prevSubPath[len - 1];\n\n const newSubpath: number[] = [];\n for (let i = 0; i < otherSubpath.length; i += 2) {\n newSubpath[i] = lastX;\n newSubpath[i + 1] = lastY;\n }\n return newSubpath;\n}\n\nfunction reverseSubpath(array: number[]) {\n const newArr: number[] = [];\n const len = array.length;\n for (let i = 0; i < len; i += 2) {\n newArr[i] = array[len - i - 2];\n newArr[i + 1] = array[len - i - 1];\n }\n return newArr;\n}\n/**\n * 用于计算内部不相交的多边形中心点\n */\nexport function centroidOfSubpath(array: number[]) {\n // https://en.wikipedia.org/wiki/Centroid#Of_a_polygon\n let signedArea = 0;\n let cx = 0;\n let cy = 0;\n const len = array.length;\n // Polygon should been closed.\n for (let i = 0, j = len - 2; i < len; j = i, i += 2) {\n const x0 = array[j];\n const y0 = array[j + 1];\n const x1 = array[i];\n const y1 = array[i + 1];\n const a = x0 * y1 - x1 * y0;\n signedArea += a;\n cx += (x0 + x1) * a;\n cy += (y0 + y1) * a;\n }\n\n if (signedArea === 0) {\n return [array[0] || 0, array[1] || 0, 0];\n }\n\n return [cx / signedArea / 3, cy / signedArea / 3, signedArea];\n}\n\n/**\n * 针对闭合的曲线,查找最适合的旋转offset\n */\nfunction findBestRotationOffset(fromSubBeziers: number[], toSubBeziers: number[], fromCp: number[], toCp: number[]) {\n const bezierCount = (fromSubBeziers.length - 2) / 6;\n let bestScore = Infinity;\n let bestOffset = 0;\n\n const len = fromSubBeziers.length;\n const len2 = len - 2;\n\n for (let offset = 0; offset < bezierCount; offset++) {\n const cursorOffset = offset * 6;\n let score = 0;\n\n for (let k = 0; k < len; k += 2) {\n const idx = k === 0 ? cursorOffset : ((cursorOffset + k - 2) % len2) + 2;\n\n const x0 = fromSubBeziers[idx] - fromCp[0];\n const y0 = fromSubBeziers[idx + 1] - fromCp[1];\n const x1 = toSubBeziers[k] - toCp[0];\n const y1 = toSubBeziers[k + 1] - toCp[1];\n\n const dx = x1 - x0;\n const dy = y1 - y0;\n score += dx * dx + dy * dy;\n }\n if (score < bestScore) {\n bestScore = score;\n bestOffset = offset;\n }\n }\n\n return bestOffset;\n}\n\n/**\n * If we interpolating between two bezier curve arrays.\n * It will have many broken effects during the transition.\n * So we try to apply an extra rotation which can make each bezier curve morph as small as possible.\n */\nexport function findBestMorphingRotation(\n fromArr: number[][],\n toArr: number[][],\n searchAngleIteration: number,\n searchAngleRange: number\n) {\n const result = [];\n\n let fromNeedsReverse: boolean;\n\n for (let i = 0; i < fromArr.length; i++) {\n let fromSubpathBezier = fromArr[i];\n const toSubpathBezier = toArr[i];\n\n const fromCp = centroidOfSubpath(fromSubpathBezier);\n const toCp = centroidOfSubpath(toSubpathBezier);\n\n if (fromNeedsReverse == null) {\n // Reverse from array if two have different directions.\n // Determine the clockwise based on the first subpath.\n // Reverse all subpaths or not. Avoid winding rule changed.\n fromNeedsReverse = fromCp[2] < 0 !== toCp[2] < 0;\n }\n\n const newFromSubpathBezier: number[] = [];\n const newToSubpathBezier: number[] = [];\n let bestAngle = 0;\n let bestScore = Infinity;\n const tmpArr: number[] = [];\n\n const len = fromSubpathBezier.length;\n if (fromNeedsReverse) {\n // Make sure clockwise\n fromSubpathBezier = reverseSubpath(fromSubpathBezier);\n }\n const offset = findBestRotationOffset(fromSubpathBezier, toSubpathBezier, fromCp, toCp) * 6;\n\n const len2 = len - 2;\n\n for (let k = 0; k < len2; k += 2) {\n // Not include the start point.\n const idx = ((offset + k) % len2) + 2;\n newFromSubpathBezier[k + 2] = fromSubpathBezier[idx] - fromCp[0];\n newFromSubpathBezier[k + 3] = fromSubpathBezier[idx + 1] - fromCp[1];\n }\n newFromSubpathBezier[0] = fromSubpathBezier[offset] - fromCp[0];\n newFromSubpathBezier[1] = fromSubpathBezier[offset + 1] - fromCp[1];\n\n if (searchAngleIteration > 0) {\n const step = searchAngleRange / searchAngleIteration;\n for (let angle = -searchAngleRange / 2; angle <= searchAngleRange / 2; angle += step) {\n const sa = Math.sin(angle);\n const ca = Math.cos(angle);\n let score = 0;\n\n for (let k = 0; k < fromSubpathBezier.length; k += 2) {\n const x0 = newFromSubpathBezier[k];\n const y0 = newFromSubpathBezier[k + 1];\n const x1 = toSubpathBezier[k] - toCp[0];\n const y1 = toSubpathBezier[k + 1] - toCp[1];\n\n // Apply rotation on the target point.\n const newX1 = x1 * ca - y1 * sa;\n const newY1 = x1 * sa + y1 * ca;\n\n tmpArr[k] = newX1;\n tmpArr[k + 1] = newY1;\n\n const dx = newX1 - x0;\n const dy = newY1 - y0;\n\n // Use dot product to have min direction change.\n // const d = Math.sqrt(x0 * x0 + y0 * y0);\n // score += x0 * dx / d + y0 * dy / d;\n score += dx * dx + dy * dy;\n }\n\n if (score < bestScore) {\n bestScore = score;\n bestAngle = angle;\n // Copy.\n for (let m = 0; m < tmpArr.length; m++) {\n newToSubpathBezier[m] = tmpArr[m];\n }\n }\n }\n } else {\n for (let i = 0; i < len; i += 2) {\n newToSubpathBezier[i] = toSubpathBezier[i] - toCp[0];\n newToSubpathBezier[i + 1] = toSubpathBezier[i + 1] - toCp[1];\n }\n }\n\n result.push({\n from: newFromSubpathBezier,\n to: newToSubpathBezier,\n fromCp,\n toCp,\n rotation: -bestAngle\n });\n }\n return result;\n}\n\n/**\n * Make two bezier arrays aligns on structure. To have better animation.\n *\n * It will:\n * Make two bezier arrays have same number of subpaths.\n * Make each subpath has equal number of bezier curves.\n *\n * array is the convert result of pathToBezierCurves.\n */\nexport function alignBezierCurves(array1: number[][], array2: number[][]) {\n let lastSubpath1;\n let lastSubpath2;\n\n const newArray1 = [];\n const newArray2 = [];\n\n for (let i = 0; i < Math.max(array1.length, array2.length); i++) {\n const subpath1 = array1[i];\n const subpath2 = array2[i];\n\n let newSubpath1;\n let newSubpath2;\n\n if (!subpath1) {\n newSubpath1 = createSubpath(lastSubpath1, subpath2);\n newSubpath2 = subpath2;\n } else if (!subpath2) {\n newSubpath2 = createSubpath(lastSubpath2, subpath1);\n newSubpath1 = subpath1;\n } else {\n [newSubpath1, newSubpath2] = alignSubpath(subpath1, subpath2);\n lastSubpath1 = newSubpath1;\n lastSubpath2 = newSubpath2;\n }\n\n newArray1.push(newSubpath1);\n newArray2.push(newSubpath2);\n }\n\n return [newArray1, newArray2];\n}\n\nconst addLineToBezierPath = (bezierPath: number[], x0: number, y0: number, x1: number, y1: number) => {\n if (!(isNumberClose(x0, x1) && isNumberClose(y0, y1))) {\n bezierPath.push(x0, y0, x1, y1, x1, y1);\n }\n};\n\nexport function pathToBezierCurves(path: ICustomPath2D): number[][] {\n const commandList = path.commandList;\n\n const bezierArrayGroups: number[][] = [];\n let currentSubpath: number[];\n\n // end point\n let xi: number = 0;\n let yi: number = 0;\n // start point\n let x0: number = 0;\n let y0: number = 0;\n\n const createNewSubpath = (x: number, y: number) => {\n // More than one M command\n if (currentSubpath && currentSubpath.length > 2) {\n bezierArrayGroups.push(currentSubpath);\n }\n currentSubpath = [x, y];\n };\n\n // the first control point\n let x1: number;\n let y1: number;\n // the second control point\n let x2: number;\n let y2: number;\n\n for (let i = 0, len = commandList.length; i < len; i++) {\n const cmd = commandList[i];\n\n const isFirst = i === 0;\n\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n x0 = xi = cmd[1] as number;\n y0 = yi = cmd[2] as number;\n\n if ([enumCommandMap.L, enumCommandMap.C, enumCommandMap.Q].includes(cmd[0])) {\n // Start point\n currentSubpath = [x0, y0];\n }\n }\n\n switch (cmd[0]) {\n case enumCommandMap.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n xi = x0 = cmd[1] as number;\n yi = y0 = cmd[2] as number;\n\n createNewSubpath(x0, y0);\n break;\n case enumCommandMap.L:\n x1 = cmd[1] as number;\n y1 = cmd[2] as number;\n addLineToBezierPath(currentSubpath, xi, yi, x1, y1);\n xi = x1;\n yi = y1;\n break;\n case enumCommandMap.C:\n currentSubpath.push(\n cmd[1] as number,\n cmd[2] as number,\n cmd[3] as number,\n cmd[4] as number,\n (xi = cmd[5] as number),\n (yi = cmd[6] as number)\n );\n break;\n case enumCommandMap.Q:\n x1 = cmd[1] as number;\n y1 = cmd[2] as number;\n x2 = cmd[3] as number;\n y2 = cmd[4] as number;\n currentSubpath.push(\n // Convert quadratic to cubic\n xi + (2 / 3) * (x1 - xi),\n yi + (2 / 3) * (y1 - yi),\n x2 + (2 / 3) * (x1 - x2),\n y2 + (2 / 3) * (y1 - y2),\n x2,\n y2\n );\n xi = x2;\n yi = y2;\n break;\n case enumCommandMap.A: {\n const cx = cmd[1] as number;\n const cy = cmd[2] as number;\n const rx = cmd[3] as number;\n const ry = rx;\n const startAngle = cmd[4] as number;\n const endAngle = cmd[5] as number;\n\n const counterClockwise = !!(cmd[6] as number);\n\n x1 = Math.cos(startAngle) * rx + cx;\n y1 = Math.sin(startAngle) * rx + cy;\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n createNewSubpath(x0, y0);\n } else {\n // Connect a line between current point to arc start point.\n addLineToBezierPath(currentSubpath, xi, yi, x1, y1);\n }\n\n xi = Math.cos(endAngle) * rx + cx;\n yi = Math.sin(endAngle) * rx + cy;\n\n const step = ((counterClockwise ? -1 : 1) * Math.PI) / 2;\n\n for (let angle = startAngle; counterClockwise ? angle > endAngle : angle < endAngle; angle += step) {\n const nextAngle = counterClockwise ? Math.max(angle + step, endAngle) : Math.min(angle + step, endAngle);\n addArcToBezierPath(currentSubpath, angle, nextAngle, cx, cy, rx, ry);\n }\n break;\n }\n case enumCommandMap.E: {\n const cx = cmd[1] as number;\n const cy = cmd[2] as number;\n const rx = cmd[3] as number;\n const ry = cmd[4] as number;\n const rotate = cmd[5] as number;\n const startAngle = cmd[6] as number;\n const endAngle = (cmd[7] as number) + startAngle;\n\n const anticlockwise = !!(cmd[8] as number);\n const hasRotate = !isNumberClose(rotate, 0);\n const rc = Math.cos(rotate);\n const rs = Math.sin(rotate);\n\n let xTemp = Math.cos(startAngle) * rx;\n let yTemp = Math.sin(startAngle) * ry;\n\n if (hasRotate) {\n x1 = xTemp * rc - yTemp * rs + cx;\n y1 = xTemp * rs + yTemp * rc + cy;\n } else {\n x1 = xTemp + cx;\n y1 = yTemp + cy;\n }\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n createNewSubpath(x0, y0);\n } else {\n // Connect a line between current point to arc start point.\n addLineToBezierPath(currentSubpath, xi, yi, x1, y1);\n }\n\n xTemp = Math.cos(endAngle) * rx;\n yTemp = Math.sin(endAngle) * ry;\n if (hasRotate) {\n xi = xTemp * rc - yTemp * rs + cx;\n yi = xTemp * rs + yTemp * rc + cy;\n } else {\n xi = xTemp + cx;\n yi = yTemp + cy;\n }\n\n const step = ((anticlockwise ? -1 : 1) * Math.PI) / 2;\n\n for (let angle = startAngle; anticlockwise ? angle > endAngle : angle < endAngle; angle += step) {\n const nextAngle = anticlockwise ? Math.max(angle + step, endAngle) : Math.min(angle + step, endAngle);\n addArcToBezierPath(currentSubpath, angle, nextAngle, cx, cy, rx, ry);\n\n if (hasRotate) {\n const curLen = currentSubpath.length;\n\n for (let j = curLen - 6; j <= curLen - 1; j += 2) {\n xTemp = currentSubpath[j];\n yTemp = currentSubpath[j + 1];\n\n currentSubpath[j] = (xTemp - cx) * rc - (yTemp - cy) * rs + cx;\n currentSubpath[j + 1] = (xTemp - cx) * rs + (yTemp - cy) * rc + cy;\n }\n }\n }\n\n break;\n }\n case enumCommandMap.R: {\n x0 = xi = cmd[1] as number;\n y0 = yi = cmd[2] as number;\n x1 = x0 + (cmd[3] as number);\n y1 = y0 + (cmd[4] as number);\n\n // rect is an individual path.\n createNewSubpath(x1, y0);\n addLineToBezierPath(currentSubpath, x1, y0, x1, y1);\n addLineToBezierPath(currentSubpath, x1, y1, x0, y1);\n addLineToBezierPath(currentSubpath, x0, y1, x0, y0);\n addLineToBezierPath(currentSubpath, x0, y0, x1, y0);\n break;\n }\n case enumCommandMap.AT: {\n const tx1 = cmd[1] as number;\n const ty1 = cmd[2] as number;\n const tx2 = cmd[3] as number;\n const ty2 = cmd[4] as number;\n const r = cmd[5] as number;\n\n const dis1 = PointService.distancePP({ x: xi, y: yi }, { x: tx1, y: ty1 });\n const dis2 = PointService.distancePP({ x: tx2, y: ty2 }, { x: tx1, y: ty1 });\n const theta = ((xi - tx1) * (tx2 - tx1) + (yi - ty1) * (ty2 - ty1)) / (dis1 * dis2);\n const dis = r / Math.sin(theta / 2);\n const midX = (xi + tx2 - 2 * tx1) / 2;\n const midY = (yi + ty2 - 2 * ty1) / 2;\n const midLen = PointService.distancePP({ x: midX, y: midY }, { x: 0, y: 0 });\n const cx = tx1 + (dis * midX) / midLen;\n const cy = tx2 + (dis * midY) / midLen;\n const disP = Math.sqrt(dis * dis - r * r);\n x0 = tx1 + (disP * (xi - tx1)) / dis1;\n y0 = ty1 + (disP * (yi - ty1)) / dis1;\n\n // Connect a line between current point to arc start point.\n addLineToBezierPath(currentSubpath, xi, yi, x0, y0);\n\n xi = tx1 + (disP * (tx2 - tx1)) / dis2;\n yi = ty1 + (disP * (ty2 - ty1)) / dis2;\n\n const startAngle = getAngleByPoint({ x: cx, y: cy }, { x: x0, y: y0 });\n\n const endAngle = getAngleByPoint({ x: cx, y: cy }, { x: xi, y: yi });\n\n addArcToBezierPath(currentSubpath, startAngle, endAngle, cx, cy, r, r);\n\n break;\n }\n case enumCommandMap.Z: {\n currentSubpath && addLineToBezierPath(currentSubpath, xi, yi, x0, y0);\n xi = x0;\n yi = y0;\n break;\n }\n }\n }\n\n if (currentSubpath && currentSubpath.length > 2) {\n bezierArrayGroups.push(currentSubpath);\n }\n\n return bezierArrayGroups;\n}\n\nexport function applyTransformOnBezierCurves(bezierCurves: number[][], martrix: IMatrix) {\n for (let i = 0; i < bezierCurves.length; i++) {\n const subPath = bezierCurves[i];\n for (let k = 0; k < subPath.length; k += 2) {\n const x = subPath[k];\n const y = subPath[k + 1];\n const res = { x, y };\n\n martrix.transformPoint({ x, y }, res);\n\n subPath[k] = res.x;\n subPath[k + 1] = res.y;\n }\n }\n}\n\nexport function bezierCurversToPath(bezierCurves: number[][]) {\n const path = new CustomPath2D();\n\n for (let i = 0; i < bezierCurves.length; i++) {\n const subPath = bezierCurves[i];\n\n if (subPath.length > 2) {\n path.moveTo(subPath[0], subPath[1]);\n for (let k = 2; k < subPath.length; k += 6) {\n path.bezierCurveTo(subPath[k], subPath[k + 1], subPath[k + 2], subPath[k + 3], subPath[k + 4], subPath[k + 5]);\n }\n }\n }\n\n return path;\n}\n"]}
1
+ {"version":3,"sources":["../src/common/morphing-utils.ts"],"names":[],"mappings":"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","file":"morphing-utils.js","sourcesContent":["/* Adapted from zrender by ecomfe\n * https://github.com/ecomfe/zrender\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/ecomfe/zrender/blob/master/src/tool/morphPath.ts\n * License: https://github.com/ecomfe/zrender/blob/master/LICENSE\n * @license\n */\n\nimport type { IMatrix } from '@visactor/vutils';\nimport { getAngleByPoint, isNumberClose, PointService } from '@visactor/vutils';\nimport type { ICustomPath2D } from '../interface';\nimport { CustomPath2D } from './custom-path2d';\nimport { enumCommandMap } from './path-svg';\nimport { addArcToBezierPath } from './shape/arc';\n\nexport function cubicSubdivide(p0: number, p1: number, p2: number, p3: number, t: number, out: number[]) {\n const p01 = (p1 - p0) * t + p0;\n const p12 = (p2 - p1) * t + p1;\n const p23 = (p3 - p2) * t + p2;\n\n const p012 = (p12 - p01) * t + p01;\n const p123 = (p23 - p12) * t + p12;\n\n const p0123 = (p123 - p012) * t + p012;\n // Seg0\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n out[3] = p0123;\n // Seg1\n out[4] = p0123;\n out[5] = p123;\n out[6] = p23;\n out[7] = p3;\n}\n\nexport function alignSubpath(subpath1: number[], subpath2: number[]): [number[], number[]] {\n const len1 = subpath1.length;\n const len2 = subpath2.length;\n if (len1 === len2) {\n return [subpath1, subpath2];\n }\n const tmpSegX: number[] = [];\n const tmpSegY: number[] = [];\n\n const shorterPath = len1 < len2 ? subpath1 : subpath2;\n const shorterLen = Math.min(len1, len2);\n // Should divide excatly\n const diff = Math.abs(len2 - len1) / 6;\n const shorterBezierCount = (shorterLen - 2) / 6;\n // Add `diff` number of beziers\n const eachCurveSubDivCount = Math.ceil(diff / shorterBezierCount);\n\n const newSubpath = [shorterPath[0], shorterPath[1]];\n let remained = diff;\n\n for (let i = 2; i < shorterLen; i += 6) {\n let x0 = shorterPath[i - 2];\n let y0 = shorterPath[i - 1];\n let x1 = shorterPath[i];\n let y1 = shorterPath[i + 1];\n let x2 = shorterPath[i + 2];\n let y2 = shorterPath[i + 3];\n const x3 = shorterPath[i + 4];\n const y3 = shorterPath[i + 5];\n\n if (remained <= 0) {\n newSubpath.push(x1, y1, x2, y2, x3, y3);\n continue;\n }\n\n const actualSubDivCount = Math.min(remained, eachCurveSubDivCount) + 1;\n for (let k = 1; k <= actualSubDivCount; k++) {\n const p = k / actualSubDivCount;\n\n cubicSubdivide(x0, x1, x2, x3, p, tmpSegX);\n cubicSubdivide(y0, y1, y2, y3, p, tmpSegY);\n\n // tmpSegX[3] === tmpSegX[4]\n x0 = tmpSegX[3];\n y0 = tmpSegY[3];\n\n newSubpath.push(tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], x0, y0);\n x1 = tmpSegX[5];\n y1 = tmpSegY[5];\n x2 = tmpSegX[6];\n y2 = tmpSegY[6];\n // The last point (x3, y3) is still the same.\n }\n remained -= actualSubDivCount - 1;\n }\n\n return shorterPath === subpath1 ? [newSubpath, subpath2] : [subpath1, newSubpath];\n}\n\nfunction createSubpath(lastSubpath: number[], otherSubpath: number[]) {\n const prevSubPath = lastSubpath || otherSubpath;\n const len = prevSubPath.length;\n const lastX = prevSubPath[len - 2];\n const lastY = prevSubPath[len - 1];\n\n const newSubpath: number[] = [];\n for (let i = 0; i < otherSubpath.length; i += 2) {\n newSubpath[i] = lastX;\n newSubpath[i + 1] = lastY;\n }\n return newSubpath;\n}\n\nfunction reverseSubpath(array: number[]) {\n const newArr: number[] = [];\n const len = array.length;\n for (let i = 0; i < len; i += 2) {\n newArr[i] = array[len - i - 2];\n newArr[i + 1] = array[len - i - 1];\n }\n return newArr;\n}\n/**\n * 用于计算内部不相交的多边形中心点\n */\nexport function centroidOfSubpath(array: number[]) {\n // https://en.wikipedia.org/wiki/Centroid#Of_a_polygon\n let signedArea = 0;\n let cx = 0;\n let cy = 0;\n const len = array.length;\n // Polygon should been closed.\n for (let i = 0, j = len - 2; i < len; j = i, i += 2) {\n const x0 = array[j];\n const y0 = array[j + 1];\n const x1 = array[i];\n const y1 = array[i + 1];\n const a = x0 * y1 - x1 * y0;\n signedArea += a;\n cx += (x0 + x1) * a;\n cy += (y0 + y1) * a;\n }\n\n if (signedArea === 0) {\n return [array[0] || 0, array[1] || 0, 0];\n }\n\n return [cx / signedArea / 3, cy / signedArea / 3, signedArea];\n}\n\n/**\n * 针对闭合的曲线,查找最适合的旋转offset\n */\nfunction findBestRotationOffset(fromSubBeziers: number[], toSubBeziers: number[], fromCp: number[], toCp: number[]) {\n const bezierCount = (fromSubBeziers.length - 2) / 6;\n let bestScore = Infinity;\n let bestOffset = 0;\n\n const len = fromSubBeziers.length;\n const len2 = len - 2;\n\n for (let offset = 0; offset < bezierCount; offset++) {\n const cursorOffset = offset * 6;\n let score = 0;\n\n for (let k = 0; k < len; k += 2) {\n const idx = k === 0 ? cursorOffset : ((cursorOffset + k - 2) % len2) + 2;\n\n const x0 = fromSubBeziers[idx] - fromCp[0];\n const y0 = fromSubBeziers[idx + 1] - fromCp[1];\n const x1 = toSubBeziers[k] - toCp[0];\n const y1 = toSubBeziers[k + 1] - toCp[1];\n\n const dx = x1 - x0;\n const dy = y1 - y0;\n score += dx * dx + dy * dy;\n }\n if (score < bestScore) {\n bestScore = score;\n bestOffset = offset;\n }\n }\n\n return bestOffset;\n}\n\n/**\n * If we interpolating between two bezier curve arrays.\n * It will have many broken effects during the transition.\n * So we try to apply an extra rotation which can make each bezier curve morph as small as possible.\n */\nexport function findBestMorphingRotation(\n fromArr: number[][],\n toArr: number[][],\n searchAngleIteration: number,\n searchAngleRange: number\n) {\n const result = [];\n\n let fromNeedsReverse: boolean;\n\n for (let i = 0; i < fromArr.length; i++) {\n let fromSubpathBezier = fromArr[i];\n const toSubpathBezier = toArr[i];\n\n const fromCp = centroidOfSubpath(fromSubpathBezier);\n const toCp = centroidOfSubpath(toSubpathBezier);\n\n if (fromNeedsReverse == null) {\n // Reverse from array if two have different directions.\n // Determine the clockwise based on the first subpath.\n // Reverse all subpaths or not. Avoid winding rule changed.\n fromNeedsReverse = fromCp[2] < 0 !== toCp[2] < 0;\n }\n\n const newFromSubpathBezier: number[] = [];\n const newToSubpathBezier: number[] = [];\n let bestAngle = 0;\n let bestScore = Infinity;\n const tmpArr: number[] = [];\n\n const len = fromSubpathBezier.length;\n if (fromNeedsReverse) {\n // Make sure clockwise\n fromSubpathBezier = reverseSubpath(fromSubpathBezier);\n }\n const offset = findBestRotationOffset(fromSubpathBezier, toSubpathBezier, fromCp, toCp) * 6;\n\n const len2 = len - 2;\n\n for (let k = 0; k < len2; k += 2) {\n // Not include the start point.\n const idx = ((offset + k) % len2) + 2;\n newFromSubpathBezier[k + 2] = fromSubpathBezier[idx] - fromCp[0];\n newFromSubpathBezier[k + 3] = fromSubpathBezier[idx + 1] - fromCp[1];\n }\n newFromSubpathBezier[0] = fromSubpathBezier[offset] - fromCp[0];\n newFromSubpathBezier[1] = fromSubpathBezier[offset + 1] - fromCp[1];\n\n if (searchAngleIteration > 0) {\n const step = searchAngleRange / searchAngleIteration;\n for (let angle = -searchAngleRange / 2; angle <= searchAngleRange / 2; angle += step) {\n const sa = Math.sin(angle);\n const ca = Math.cos(angle);\n let score = 0;\n\n for (let k = 0; k < fromSubpathBezier.length; k += 2) {\n const x0 = newFromSubpathBezier[k];\n const y0 = newFromSubpathBezier[k + 1];\n const x1 = toSubpathBezier[k] - toCp[0];\n const y1 = toSubpathBezier[k + 1] - toCp[1];\n\n // Apply rotation on the target point.\n const newX1 = x1 * ca - y1 * sa;\n const newY1 = x1 * sa + y1 * ca;\n\n tmpArr[k] = newX1;\n tmpArr[k + 1] = newY1;\n\n const dx = newX1 - x0;\n const dy = newY1 - y0;\n\n // Use dot product to have min direction change.\n // const d = Math.sqrt(x0 * x0 + y0 * y0);\n // score += x0 * dx / d + y0 * dy / d;\n score += dx * dx + dy * dy;\n }\n\n if (score < bestScore) {\n bestScore = score;\n bestAngle = angle;\n // Copy.\n for (let m = 0; m < tmpArr.length; m++) {\n newToSubpathBezier[m] = tmpArr[m];\n }\n }\n }\n } else {\n for (let i = 0; i < len; i += 2) {\n newToSubpathBezier[i] = toSubpathBezier[i] - toCp[0];\n newToSubpathBezier[i + 1] = toSubpathBezier[i + 1] - toCp[1];\n }\n }\n\n result.push({\n from: newFromSubpathBezier,\n to: newToSubpathBezier,\n fromCp,\n toCp,\n rotation: -bestAngle\n });\n }\n return result;\n}\n\n/**\n * Make two bezier arrays aligns on structure. To have better animation.\n *\n * It will:\n * Make two bezier arrays have same number of subpaths.\n * Make each subpath has equal number of bezier curves.\n *\n * array is the convert result of pathToBezierCurves.\n */\nexport function alignBezierCurves(array1: number[][], array2: number[][]) {\n let lastSubpath1;\n let lastSubpath2;\n\n const newArray1 = [];\n const newArray2 = [];\n\n for (let i = 0; i < Math.max(array1.length, array2.length); i++) {\n const subpath1 = array1[i];\n const subpath2 = array2[i];\n\n let newSubpath1;\n let newSubpath2;\n\n if (!subpath1) {\n newSubpath1 = createSubpath(lastSubpath1, subpath2);\n newSubpath2 = subpath2;\n } else if (!subpath2) {\n newSubpath2 = createSubpath(lastSubpath2, subpath1);\n newSubpath1 = subpath1;\n } else {\n [newSubpath1, newSubpath2] = alignSubpath(subpath1, subpath2);\n lastSubpath1 = newSubpath1;\n lastSubpath2 = newSubpath2;\n }\n\n newArray1.push(newSubpath1);\n newArray2.push(newSubpath2);\n }\n\n return [newArray1, newArray2];\n}\n\n/**\n * 将路径转换为贝塞尔曲线数组\n * 通过复用CustomPath2D中的方法,确保处理的一致性\n * @param path 要转换的路径\n * @returns 贝塞尔曲线数组\n */\nexport function pathToBezierCurves(path: ICustomPath2D): number[][] {\n // 创建临时路径和临时上下文\n const tempPath = new CustomPath2D();\n\n // 将路径转换为SVG路径字符串,这样可以利用CustomPath2D中的解析能力\n const svgPathString = path.toString();\n\n // 如果路径为空,直接返回空数组\n if (!svgPathString) {\n return [];\n }\n\n // 使用临时路径解析SVG字符串\n tempPath.fromString(svgPathString);\n\n // 确保曲线已经构建\n const curves = tempPath.tryBuildCurves();\n\n if (!curves || curves.length === 0) {\n return [];\n }\n\n // 用于存储分离的子路径\n const bezierSubpaths: number[][] = [];\n let currentSubpath: number[] = null;\n\n // 初始化当前子路径\n currentSubpath = [];\n let firstX = 0; // 记录子路径起点X (用于闭合路径)\n let firstY = 0; // 记录子路径起点Y (用于闭合路径)\n let lastX = 0; // 记录上一个点的X (用于连续线段)\n let lastY = 0; // 记录上一个点的Y (用于连续线段)\n let isSubpathStart = true;\n let isPathClosed = false;\n\n for (let i = 0; i < curves.length; i++) {\n const curve = curves[i];\n\n // 如果是新的子路径开始或者第一个点\n if (isSubpathStart) {\n firstX = curve.p0.x;\n firstY = curve.p0.y;\n lastX = firstX;\n lastY = firstY;\n currentSubpath = [firstX, firstY];\n bezierSubpaths.push(currentSubpath);\n isSubpathStart = false;\n }\n\n // 处理不同类型的曲线\n if (curve.p1 && curve.p2 && curve.p3) {\n // 三次贝塞尔曲线\n currentSubpath.push(curve.p1.x, curve.p1.y, curve.p2.x, curve.p2.y, curve.p3.x, curve.p3.y);\n lastX = curve.p3.x;\n lastY = curve.p3.y;\n } else if (curve.p1 && curve.p2) {\n // 二次贝塞尔曲线,转换为三次贝塞尔曲线\n const x1 = curve.p1.x;\n const y1 = curve.p1.y;\n const x2 = curve.p2.x;\n const y2 = curve.p2.y;\n\n currentSubpath.push(\n lastX + (2 / 3) * (x1 - lastX),\n lastY + (2 / 3) * (y1 - lastY),\n x2 + (2 / 3) * (x1 - x2),\n y2 + (2 / 3) * (y1 - y2),\n x2,\n y2\n );\n\n lastX = x2;\n lastY = y2;\n } else if (curve.p1) {\n // 直线段,转换为贝塞尔曲线格式\n // 直线的情况,p1就是终点\n const endX = curve.p1.x;\n const endY = curve.p1.y;\n\n // 避免添加长度为0的线段\n if (!(Math.abs(lastX - endX) < 1e-10 && Math.abs(lastY - endY) < 1e-10)) {\n // 使用addLineToBezierPath的逻辑:x0,y0, x1,y1, x1,y1\n // 第一个控制点等于起点,第二个控制点等于终点,终点等于终点\n currentSubpath.push(\n lastX,\n lastY, // 第一个控制点 = 起点\n endX,\n endY, // 第二个控制点 = 终点\n endX,\n endY // 终点\n );\n }\n\n lastX = endX;\n lastY = endY;\n }\n\n // 检查是否是闭合路径(最后一个点回到起点)\n if (i === curves.length - 1) {\n if (Math.abs(lastX - firstX) < 1e-10 && Math.abs(lastY - firstY) < 1e-10) {\n isPathClosed = true;\n }\n }\n\n // 检查是否需要开始新的子路径\n // 只有在检测到明确的路径中断(不连续的点)时才开始新子路径\n if (i < curves.length - 1) {\n const nextCurve = curves[i + 1];\n if (Math.abs(lastX - nextCurve.p0.x) > 1e-10 || Math.abs(lastY - nextCurve.p0.y) > 1e-10) {\n // 当前子路径结束,需要创建新的子路径\n isSubpathStart = true;\n }\n }\n }\n\n // 移除空的子路径\n const validSubpaths = bezierSubpaths.filter(subpath => subpath.length > 2);\n\n // 为了保持与原始函数一致,如果只有一个子路径,返回它的数组\n return validSubpaths.length === 1 ? [validSubpaths[0]] : validSubpaths;\n}\n\nexport function applyTransformOnBezierCurves(bezierCurves: number[][], martrix: IMatrix) {\n for (let i = 0; i < bezierCurves.length; i++) {\n const subPath = bezierCurves[i];\n for (let k = 0; k < subPath.length; k += 2) {\n const x = subPath[k];\n const y = subPath[k + 1];\n const res = { x, y };\n\n martrix.transformPoint({ x, y }, res);\n\n subPath[k] = res.x;\n subPath[k + 1] = res.y;\n }\n }\n}\n\nexport function bezierCurversToPath(bezierCurves: number[][]) {\n const path = new CustomPath2D();\n\n for (let i = 0; i < bezierCurves.length; i++) {\n const subPath = bezierCurves[i];\n\n if (subPath.length > 2) {\n path.moveTo(subPath[0], subPath[1]);\n for (let k = 2; k < subPath.length; k += 6) {\n path.bezierCurveTo(subPath[k], subPath[k + 1], subPath[k + 2], subPath[k + 3], subPath[k + 4], subPath[k + 5]);\n }\n }\n }\n\n return path;\n}\n"]}
@@ -0,0 +1,8 @@
1
+ export declare class PerformanceRAF {
2
+ nextAnimationFrameCbs: Map<number, FrameRequestCallback>;
3
+ private _rafHandle;
4
+ addAnimationFrameCb(callback: FrameRequestCallback): number;
5
+ removeAnimationFrameCb(index: number): boolean;
6
+ protected runAnimationFrame: (time: number) => void;
7
+ protected tryRunAnimationFrameNextFrame: () => void;
8
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.PerformanceRAF = void 0;
6
+
7
+ const application_1 = require("../application");
8
+
9
+ let idx = 0;
10
+
11
+ class PerformanceRAF {
12
+ constructor() {
13
+ this.nextAnimationFrameCbs = new Map, this._rafHandle = null, this.runAnimationFrame = time => {
14
+ this._rafHandle = null;
15
+ const cbs = this.nextAnimationFrameCbs;
16
+ this.nextAnimationFrameCbs = new Map, cbs.forEach((cb => cb(time)));
17
+ }, this.tryRunAnimationFrameNextFrame = () => {
18
+ null === this._rafHandle && 0 !== this.nextAnimationFrameCbs.size && (this._rafHandle = application_1.application.global.getRequestAnimationFrame()(this.runAnimationFrame));
19
+ };
20
+ }
21
+ addAnimationFrameCb(callback) {
22
+ return this.nextAnimationFrameCbs.set(++idx, callback), this.tryRunAnimationFrameNextFrame(),
23
+ idx;
24
+ }
25
+ removeAnimationFrameCb(index) {
26
+ return !!this.nextAnimationFrameCbs.has(index) && (this.nextAnimationFrameCbs.delete(index),
27
+ !0);
28
+ }
29
+ }
30
+
31
+ exports.PerformanceRAF = PerformanceRAF;
32
+ //# sourceMappingURL=performance-raf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/performance-raf.ts"],"names":[],"mappings":";;;AAAA,gDAA6C;AAE7C,IAAI,GAAG,GAAG,CAAC,CAAC;AAKZ,MAAa,cAAc;IAA3B;QACE,0BAAqB,GAAsC,IAAI,GAAG,EAAE,CAAC;QAC7D,eAAU,GAAkB,IAAI,CAAC;QAsB/B,sBAAiB,GAAG,CAAC,IAAY,EAAE,EAAE;YAC7C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC;YACvC,IAAI,CAAC,qBAAqB,GAAG,IAAI,GAAG,EAAE,CAAC;YACvC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEQ,kCAA6B,GAAG,GAAG,EAAE;YAC7C,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,EAAE;gBACrE,OAAO;aACR;YACD,IAAI,CAAC,UAAU,GAAG,yBAAW,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC1F,CAAC,CAAC;IACJ,CAAC;IAjCC,mBAAmB,CAAC,QAA8B;QAChD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAEhD,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,OAAO,GAAG,CAAC;IACb,CAAC;IAOD,sBAAsB,CAAC,KAAa;QAClC,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACzC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CAeF;AArCD,wCAqCC","file":"performance-raf.js","sourcesContent":["import { application } from '../application';\n\nlet idx = 0;\n\n/**\n * 性能优化,将requestAnimationFrame的回调函数存储起来,在下一帧执行\n */\nexport class PerformanceRAF {\n nextAnimationFrameCbs: Map<number, FrameRequestCallback> = new Map();\n private _rafHandle: number | null = null;\n\n addAnimationFrameCb(callback: FrameRequestCallback) {\n this.nextAnimationFrameCbs.set(++idx, callback);\n // 下一帧执行nextAnimationFrameCbs\n this.tryRunAnimationFrameNextFrame();\n return idx;\n }\n\n /**\n * 移除指定索引的回调函数\n * @param index raf索引,从1开始,相当于内部nextAnimationFrameCbs的idx + 1\n * @returns 是否移除成功\n */\n removeAnimationFrameCb(index: number): boolean {\n if (this.nextAnimationFrameCbs.has(index)) {\n this.nextAnimationFrameCbs.delete(index);\n return true;\n }\n return false;\n }\n\n protected runAnimationFrame = (time: number) => {\n this._rafHandle = null;\n const cbs = this.nextAnimationFrameCbs;\n this.nextAnimationFrameCbs = new Map();\n cbs.forEach(cb => cb(time));\n };\n\n protected tryRunAnimationFrameNextFrame = () => {\n if (this._rafHandle !== null || this.nextAnimationFrameCbs.size === 0) {\n return;\n }\n this._rafHandle = application.global.getRequestAnimationFrame()(this.runAnimationFrame);\n };\n}\n"]}
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
 
3
3
  function drawPolygon(path, points, x, y) {
4
- path.moveTo(points[0].x + x, points[0].y + y);
5
- for (let i = 1; i < points.length; i++) path.lineTo(points[i].x + x, points[i].y + y);
4
+ if (points && points.length) {
5
+ path.moveTo(points[0].x + x, points[0].y + y);
6
+ for (let i = 1; i < points.length; i++) path.lineTo(points[i].x + x, points[i].y + y);
7
+ }
6
8
  }
7
9
 
8
10
  function drawRoundedPolygon(path, points, x, y, cornerRadius, closePath = !0) {
@@ -39,6 +41,7 @@ function getProportionPoint(point, segment, length, dx, dy) {
39
41
  };
40
42
  }
41
43
 
44
+ //# sourceMappingURL=polygon.js.map
42
45
  Object.defineProperty(exports, "__esModule", {
43
46
  value: !0
44
47
  }), exports.drawRoundedPolygon = exports.drawPolygon = void 0, exports.drawPolygon = drawPolygon,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/polygon.ts"],"names":[],"mappings":"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","file":"polygon.js","sourcesContent":["import type { IPointLike } from '@visactor/vutils';\nimport type { IPath2D } from '../interface';\n\n/**\n * 绘制闭合的常规多边形\n * TODO polygon 图元的xy属性没有意义\n * @param path\n * @param points\n * @param x\n * @param y\n */\nexport function drawPolygon(path: IPath2D, points: IPointLike[], x: number, y: number) {\n path.moveTo(points[0].x + x, points[0].y + y);\n for (let i = 1; i < points.length; i++) {\n path.lineTo(points[i].x + x, points[i].y + y);\n }\n}\n\n/**\n * algorithm detail see: https://stackoverflow.com/a/24780108\n */\nexport function drawRoundedPolygon(\n path: IPath2D,\n points: IPointLike[],\n x: number,\n y: number,\n cornerRadius: number | number[],\n closePath: boolean = true\n) {\n if (points.length < 3) {\n drawPolygon(path, points, x, y);\n return;\n }\n\n let startI = 0;\n let endI = points.length - 1;\n if (!closePath) {\n startI += 1;\n endI -= 1;\n path.moveTo(points[0].x + x, points[0].y + y);\n }\n for (let i = startI; i <= endI; i++) {\n const p1 = points[i === 0 ? endI : (i - 1) % points.length];\n const angularPoint = points[i % points.length];\n const p2 = points[(i + 1) % points.length];\n\n //Vector 1\n const dx1 = angularPoint.x - p1.x;\n const dy1 = angularPoint.y - p1.y;\n\n //Vector 2\n const dx2 = angularPoint.x - p2.x;\n const dy2 = angularPoint.y - p2.y;\n\n //Angle between vector 1 and vector 2 divided by 2\n const angle = (Math.atan2(dy1, dx1) - Math.atan2(dy2, dx2)) / 2;\n\n // The length of segment between angular point and the\n // points of intersection with the circle of a given radius\n const tan = Math.abs(Math.tan(angle));\n\n // get config radius\n let radius = Array.isArray(cornerRadius) ? cornerRadius[i % points.length] ?? 0 : cornerRadius;\n let segment = radius / tan;\n\n //Check the segment\n const length1 = getLength(dx1, dy1);\n const length2 = getLength(dx2, dy2);\n\n const length = Math.min(length1, length2);\n\n if (segment > length) {\n segment = length;\n radius = length * tan;\n }\n\n // Points of intersection are calculated by the proportion between\n // the coordinates of the vector, length of vector and the length of the segment.\n const p1Cross = getProportionPoint(angularPoint, segment, length1, dx1, dy1);\n const p2Cross = getProportionPoint(angularPoint, segment, length2, dx2, dy2);\n\n // Calculation of the coordinates of the circle\n // center by the addition of angular vectors.\n const dx = angularPoint.x * 2 - p1Cross.x - p2Cross.x;\n const dy = angularPoint.y * 2 - p1Cross.y - p2Cross.y;\n\n const L = getLength(dx, dy);\n const d = getLength(segment, radius);\n\n const circlePoint = getProportionPoint(angularPoint, d, L, dx, dy);\n\n //StartAngle and EndAngle of arc\n let startAngle = Math.atan2(p1Cross.y - circlePoint.y, p1Cross.x - circlePoint.x);\n const endAngle = Math.atan2(p2Cross.y - circlePoint.y, p2Cross.x - circlePoint.x);\n\n //Sweep angle\n let sweepAngle = endAngle - startAngle;\n\n //Some additional checks\n if (sweepAngle < 0) {\n startAngle = endAngle;\n sweepAngle = -sweepAngle;\n }\n\n if (sweepAngle > Math.PI) {\n sweepAngle = sweepAngle - Math.PI;\n }\n\n if (i === 0) {\n path.moveTo(p1Cross.x + x, p1Cross.y + y);\n } else {\n path.lineTo(p1Cross.x + x, p1Cross.y + y);\n }\n\n if (sweepAngle) {\n path.arcTo(angularPoint.x + x, angularPoint.y + y, p2Cross.x + x, p2Cross.y + y, radius);\n }\n\n path.lineTo(p2Cross.x + x, p2Cross.y + y);\n }\n\n if (!closePath) {\n path.lineTo(points[endI + 1].x + x, points[endI + 1].y + y);\n }\n}\n\nfunction getLength(dx: number, dy: number) {\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction getProportionPoint(point: IPointLike, segment: number, length: number, dx: number, dy: number) {\n const factor = segment / length;\n\n return {\n x: point.x - dx * factor,\n y: point.y - dy * factor\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/common/polygon.ts"],"names":[],"mappings":";;;AAWA,SAAgB,WAAW,CAAC,IAAa,EAAE,MAAoB,EAAE,CAAS,EAAE,CAAS;IACnF,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QAC7B,OAAO;KACR;IACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/C;AACH,CAAC;AARD,kCAQC;AAKD,SAAgB,kBAAkB,CAChC,IAAa,EACb,MAAoB,EACpB,CAAS,EACT,CAAS,EACT,YAA+B,EAC/B,YAAqB,IAAI;;IAEzB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACrB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,OAAO;KACR;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,SAAS,EAAE;QACd,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,IAAI,CAAC,CAAC;QACV,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/C;IACD,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE;QACnC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAG3C,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAGlC,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAGlC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAIhE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAGtC,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAA,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,mCAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAC/F,IAAI,OAAO,GAAG,MAAM,GAAG,GAAG,CAAC;QAG3B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEpC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE1C,IAAI,OAAO,GAAG,MAAM,EAAE;YACpB,OAAO,GAAG,MAAM,CAAC;YACjB,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;SACvB;QAID,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAI7E,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;QACtD,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;QAEtD,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAErC,MAAM,WAAW,GAAG,kBAAkB,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAGnE,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAGlF,IAAI,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;QAGvC,IAAI,UAAU,GAAG,CAAC,EAAE;YAClB,UAAU,GAAG,QAAQ,CAAC;YACtB,UAAU,GAAG,CAAC,UAAU,CAAC;SAC1B;QAED,IAAI,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE;YACxB,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC;SACnC;QAED,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SAC3C;aAAM;YACL,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SAC3C;QAED,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;SAC1F;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAC3C;IAED,IAAI,CAAC,SAAS,EAAE;QACd,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAC7D;AACH,CAAC;AAvGD,gDAuGC;AAED,SAAS,SAAS,CAAC,EAAU,EAAE,EAAU;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAiB,EAAE,OAAe,EAAE,MAAc,EAAE,EAAU,EAAE,EAAU;IACpG,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAEhC,OAAO;QACL,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM;QACxB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM;KACzB,CAAC;AACJ,CAAC","file":"polygon.js","sourcesContent":["import type { IPointLike } from '@visactor/vutils';\nimport type { IPath2D } from '../interface';\n\n/**\n * 绘制闭合的常规多边形\n * TODO polygon 图元的xy属性没有意义\n * @param path\n * @param points\n * @param x\n * @param y\n */\nexport function drawPolygon(path: IPath2D, points: IPointLike[], x: number, y: number) {\n if (!points || !points.length) {\n return;\n }\n path.moveTo(points[0].x + x, points[0].y + y);\n for (let i = 1; i < points.length; i++) {\n path.lineTo(points[i].x + x, points[i].y + y);\n }\n}\n\n/**\n * algorithm detail see: https://stackoverflow.com/a/24780108\n */\nexport function drawRoundedPolygon(\n path: IPath2D,\n points: IPointLike[],\n x: number,\n y: number,\n cornerRadius: number | number[],\n closePath: boolean = true\n) {\n if (points.length < 3) {\n drawPolygon(path, points, x, y);\n return;\n }\n\n let startI = 0;\n let endI = points.length - 1;\n if (!closePath) {\n startI += 1;\n endI -= 1;\n path.moveTo(points[0].x + x, points[0].y + y);\n }\n for (let i = startI; i <= endI; i++) {\n const p1 = points[i === 0 ? endI : (i - 1) % points.length];\n const angularPoint = points[i % points.length];\n const p2 = points[(i + 1) % points.length];\n\n //Vector 1\n const dx1 = angularPoint.x - p1.x;\n const dy1 = angularPoint.y - p1.y;\n\n //Vector 2\n const dx2 = angularPoint.x - p2.x;\n const dy2 = angularPoint.y - p2.y;\n\n //Angle between vector 1 and vector 2 divided by 2\n const angle = (Math.atan2(dy1, dx1) - Math.atan2(dy2, dx2)) / 2;\n\n // The length of segment between angular point and the\n // points of intersection with the circle of a given radius\n const tan = Math.abs(Math.tan(angle));\n\n // get config radius\n let radius = Array.isArray(cornerRadius) ? cornerRadius[i % points.length] ?? 0 : cornerRadius;\n let segment = radius / tan;\n\n //Check the segment\n const length1 = getLength(dx1, dy1);\n const length2 = getLength(dx2, dy2);\n\n const length = Math.min(length1, length2);\n\n if (segment > length) {\n segment = length;\n radius = length * tan;\n }\n\n // Points of intersection are calculated by the proportion between\n // the coordinates of the vector, length of vector and the length of the segment.\n const p1Cross = getProportionPoint(angularPoint, segment, length1, dx1, dy1);\n const p2Cross = getProportionPoint(angularPoint, segment, length2, dx2, dy2);\n\n // Calculation of the coordinates of the circle\n // center by the addition of angular vectors.\n const dx = angularPoint.x * 2 - p1Cross.x - p2Cross.x;\n const dy = angularPoint.y * 2 - p1Cross.y - p2Cross.y;\n\n const L = getLength(dx, dy);\n const d = getLength(segment, radius);\n\n const circlePoint = getProportionPoint(angularPoint, d, L, dx, dy);\n\n //StartAngle and EndAngle of arc\n let startAngle = Math.atan2(p1Cross.y - circlePoint.y, p1Cross.x - circlePoint.x);\n const endAngle = Math.atan2(p2Cross.y - circlePoint.y, p2Cross.x - circlePoint.x);\n\n //Sweep angle\n let sweepAngle = endAngle - startAngle;\n\n //Some additional checks\n if (sweepAngle < 0) {\n startAngle = endAngle;\n sweepAngle = -sweepAngle;\n }\n\n if (sweepAngle > Math.PI) {\n sweepAngle = sweepAngle - Math.PI;\n }\n\n if (i === 0) {\n path.moveTo(p1Cross.x + x, p1Cross.y + y);\n } else {\n path.lineTo(p1Cross.x + x, p1Cross.y + y);\n }\n\n if (sweepAngle) {\n path.arcTo(angularPoint.x + x, angularPoint.y + y, p2Cross.x + x, p2Cross.y + y, radius);\n }\n\n path.lineTo(p2Cross.x + x, p2Cross.y + y);\n }\n\n if (!closePath) {\n path.lineTo(points[endI + 1].x + x, points[endI + 1].y + y);\n }\n}\n\nfunction getLength(dx: number, dy: number) {\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction getProportionPoint(point: IPointLike, segment: number, length: number, dx: number, dy: number) {\n const factor = segment / length;\n\n return {\n x: point.x - dx * factor,\n y: point.y - dy * factor\n };\n}\n"]}
@@ -1,8 +1,7 @@
1
1
  import type { IPoint, IPointLike } from '@visactor/vutils';
2
- import type { ICubicBezierCurve, IDirection, IPath2D, IQuadraticBezierCurve } from '../../../interface';
2
+ import type { ICubicBezierCurve, IDirection, IPath2D } from '../../../interface';
3
3
  import { Curve } from './base';
4
4
  export declare function divideCubic(curve: ICubicBezierCurve, t: number): ICubicBezierCurve[];
5
- export declare function divideQuad(curve: IQuadraticBezierCurve, t: number): IQuadraticBezierCurve[];
6
5
  export declare class CubicBezierCurve extends Curve implements ICubicBezierCurve {
7
6
  type: number;
8
7
  originP1?: IPointLike;
@@ -2,21 +2,16 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- }), exports.CubicBezierCurve = exports.divideQuad = exports.divideCubic = void 0;
5
+ }), exports.CubicBezierCurve = exports.divideCubic = void 0;
6
6
 
7
- const vutils_1 = require("@visactor/vutils"), base_1 = require("./base"), enums_1 = require("../../enums"), bezier_utils_1 = require("../../bezier-utils"), quadratic_bezier_1 = require("./quadratic-bezier");
7
+ const vutils_1 = require("@visactor/vutils"), base_1 = require("./base"), enums_1 = require("../../enums"), bezier_utils_1 = require("../../bezier-utils");
8
8
 
9
9
  function divideCubic(curve, t) {
10
10
  const {p0: p0, p1: p1, p2: p2, p3: p3} = curve, pt = (0, bezier_utils_1.cubicPointAt)(p0, p1, p2, p3, t), c1 = vutils_1.PointService.pointAtPP(p0, p1, t), c2 = vutils_1.PointService.pointAtPP(p1, p2, t), c3 = vutils_1.PointService.pointAtPP(p2, p3, t), c12 = vutils_1.PointService.pointAtPP(c1, c2, t), c23 = vutils_1.PointService.pointAtPP(c2, c3, t);
11
11
  return [ new CubicBezierCurve(p0, c1, c12, pt), new CubicBezierCurve(pt, c23, c3, p3) ];
12
12
  }
13
13
 
14
- function divideQuad(curve, t) {
15
- const {p0: p0, p1: p1, p2: p2} = curve, pt = (0, bezier_utils_1.quadPointAt)(p0, p1, p2, t), c1 = vutils_1.PointService.pointAtPP(p0, p1, t), c2 = vutils_1.PointService.pointAtPP(p1, p2, t);
16
- return [ new quadratic_bezier_1.QuadraticBezierCurve(p0, c1, pt), new quadratic_bezier_1.QuadraticBezierCurve(pt, c2, p2) ];
17
- }
18
-
19
- exports.divideCubic = divideCubic, exports.divideQuad = divideQuad;
14
+ exports.divideCubic = divideCubic;
20
15
 
21
16
  class CubicBezierCurve extends base_1.Curve {
22
17
  constructor(p0, p1, p2, p3) {