@visactor/vrender-core 0.21.11 → 0.22.0-vstory.2

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 (376) hide show
  1. package/cjs/animate/Ticker/default-ticker.d.ts +2 -0
  2. package/cjs/animate/Ticker/default-ticker.js +7 -1
  3. package/cjs/animate/Ticker/default-ticker.js.map +1 -1
  4. package/cjs/animate/animate.js +2 -2
  5. package/cjs/animate/animate.js.map +1 -1
  6. package/cjs/animate/custom-animate.js +14 -25
  7. package/cjs/animate/custom-animate.js.map +1 -1
  8. package/cjs/animate/easing-func.d.ts +1 -0
  9. package/cjs/animate/easing-func.js +16 -0
  10. package/cjs/animate/easing-func.js.map +1 -0
  11. package/cjs/animate/easing.d.ts +4 -0
  12. package/cjs/animate/easing.js +24 -1
  13. package/cjs/animate/easing.js.map +1 -1
  14. package/cjs/animate/index.d.ts +1 -0
  15. package/cjs/animate/index.js +1 -1
  16. package/cjs/animate/index.js.map +1 -1
  17. package/cjs/color-string/store.js +1 -2
  18. package/cjs/common/3d-interceptor.js +2 -1
  19. package/cjs/common/bezier-utils.d.ts +3 -0
  20. package/cjs/common/bezier-utils.js +17 -2
  21. package/cjs/common/bezier-utils.js.map +1 -1
  22. package/cjs/common/custom-path2d.d.ts +4 -0
  23. package/cjs/common/custom-path2d.js +43 -11
  24. package/cjs/common/custom-path2d.js.map +1 -1
  25. package/cjs/common/render-area.d.ts +4 -0
  26. package/cjs/common/render-area.js +76 -17
  27. package/cjs/common/render-area.js.map +1 -1
  28. package/cjs/common/render-command-list.js +2 -1
  29. package/cjs/common/render-curve.d.ts +1 -1
  30. package/cjs/common/render-curve.js.map +1 -1
  31. package/cjs/common/segment/curve/arc.d.ts +4 -1
  32. package/cjs/common/segment/curve/arc.js +10 -1
  33. package/cjs/common/segment/curve/arc.js.map +1 -1
  34. package/cjs/common/segment/curve/base.d.ts +4 -1
  35. package/cjs/common/segment/curve/base.js.map +1 -1
  36. package/cjs/common/segment/curve/cubic-bezier.d.ts +5 -1
  37. package/cjs/common/segment/curve/cubic-bezier.js +24 -3
  38. package/cjs/common/segment/curve/cubic-bezier.js.map +1 -1
  39. package/cjs/common/segment/curve/curve-context.js +5 -4
  40. package/cjs/common/segment/curve/curve-context.js.map +1 -1
  41. package/cjs/common/segment/curve/ellipse.d.ts +4 -1
  42. package/cjs/common/segment/curve/ellipse.js +9 -0
  43. package/cjs/common/segment/curve/ellipse.js.map +1 -1
  44. package/cjs/common/segment/curve/line.d.ts +4 -1
  45. package/cjs/common/segment/curve/line.js +18 -0
  46. package/cjs/common/segment/curve/line.js.map +1 -1
  47. package/cjs/common/segment/curve/move.d.ts +4 -1
  48. package/cjs/common/segment/curve/move.js +9 -0
  49. package/cjs/common/segment/curve/move.js.map +1 -1
  50. package/cjs/common/segment/curve/path.d.ts +2 -1
  51. package/cjs/common/segment/curve/path.js +5 -2
  52. package/cjs/common/segment/curve/path.js.map +1 -1
  53. package/cjs/common/segment/curve/quadratic-bezier.d.ts +6 -2
  54. package/cjs/common/segment/curve/quadratic-bezier.js +23 -5
  55. package/cjs/common/segment/curve/quadratic-bezier.js.map +1 -1
  56. package/cjs/common/segment/step.js +1 -1
  57. package/cjs/common/segment/step.js.map +1 -1
  58. package/cjs/common/shape/rect.d.ts +1 -1
  59. package/cjs/common/shape/rect.js +30 -25
  60. package/cjs/common/shape/rect.js.map +1 -1
  61. package/cjs/common/store.js +1 -1
  62. package/cjs/core/contributions/env/base-contribution.d.ts +2 -0
  63. package/cjs/core/contributions/env/base-contribution.js +6 -0
  64. package/cjs/core/contributions/env/base-contribution.js.map +1 -1
  65. package/cjs/core/global.d.ts +2 -3
  66. package/cjs/core/global.js +7 -7
  67. package/cjs/core/global.js.map +1 -1
  68. package/cjs/graphic/builtin-symbol/rect.d.ts +2 -1
  69. package/cjs/graphic/builtin-symbol/rect.js +28 -0
  70. package/cjs/graphic/builtin-symbol/rect.js.map +1 -1
  71. package/cjs/graphic/builtin-symbol/utils.d.ts +2 -1
  72. package/cjs/graphic/builtin-symbol/utils.js +5 -0
  73. package/cjs/graphic/builtin-symbol/utils.js.map +1 -1
  74. package/cjs/graphic/config.js +20 -5
  75. package/cjs/graphic/config.js.map +1 -1
  76. package/cjs/graphic/graphic.d.ts +1 -1
  77. package/cjs/graphic/graphic.js +20 -6
  78. package/cjs/graphic/graphic.js.map +1 -1
  79. package/cjs/graphic/line.js +2 -2
  80. package/cjs/graphic/line.js.map +1 -1
  81. package/cjs/graphic/richtext/line.js +1 -1
  82. package/cjs/graphic/richtext/line.js.map +1 -1
  83. package/cjs/graphic/richtext/paragraph.d.ts +1 -1
  84. package/cjs/graphic/richtext/paragraph.js +37 -7
  85. package/cjs/graphic/richtext/paragraph.js.map +1 -1
  86. package/cjs/graphic/richtext/utils.d.ts +4 -0
  87. package/cjs/graphic/richtext/utils.js +19 -6
  88. package/cjs/graphic/richtext/utils.js.map +1 -1
  89. package/cjs/graphic/richtext/wrapper.d.ts +1 -0
  90. package/cjs/graphic/richtext/wrapper.js +1 -1
  91. package/cjs/graphic/richtext/wrapper.js.map +1 -1
  92. package/cjs/graphic/richtext.d.ts +7 -2
  93. package/cjs/graphic/richtext.js +37 -4
  94. package/cjs/graphic/richtext.js.map +1 -1
  95. package/cjs/index.d.ts +2 -0
  96. package/cjs/index.js +2 -1
  97. package/cjs/index.js.map +1 -1
  98. package/cjs/interface/animate.d.ts +5 -39
  99. package/cjs/interface/animate.js.map +1 -1
  100. package/cjs/interface/color.js.map +1 -1
  101. package/cjs/interface/context.d.ts +1 -0
  102. package/cjs/interface/context.js.map +1 -1
  103. package/cjs/interface/global.d.ts +4 -1
  104. package/cjs/interface/global.js.map +1 -1
  105. package/cjs/interface/graphic/group.d.ts +1 -0
  106. package/cjs/interface/graphic/group.js.map +1 -1
  107. package/cjs/interface/graphic/image.d.ts +1 -0
  108. package/cjs/interface/graphic/image.js.map +1 -1
  109. package/cjs/interface/graphic/path.d.ts +1 -0
  110. package/cjs/interface/graphic/path.js.map +1 -1
  111. package/cjs/interface/graphic/rect.d.ts +1 -0
  112. package/cjs/interface/graphic/rect.js.map +1 -1
  113. package/cjs/interface/graphic/richText.d.ts +12 -0
  114. package/cjs/interface/graphic/richText.js.map +1 -1
  115. package/cjs/interface/graphic/symbol.d.ts +2 -0
  116. package/cjs/interface/graphic/symbol.js.map +1 -1
  117. package/cjs/interface/graphic.d.ts +12 -3
  118. package/cjs/interface/graphic.js.map +1 -1
  119. package/cjs/interface/path.d.ts +5 -0
  120. package/cjs/interface/path.js.map +1 -1
  121. package/cjs/interface/picker.d.ts +13 -0
  122. package/cjs/interface/picker.js.map +1 -1
  123. package/cjs/picker/constants.d.ts +2 -0
  124. package/cjs/picker/constants.js +3 -2
  125. package/cjs/picker/constants.js.map +1 -1
  126. package/cjs/picker/pick-interceptor.d.ts +7 -2
  127. package/cjs/picker/pick-interceptor.js +19 -2
  128. package/cjs/picker/pick-interceptor.js.map +1 -1
  129. package/cjs/picker/pick-modules.js +7 -4
  130. package/cjs/picker/pick-modules.js.map +1 -1
  131. package/cjs/picker/picker-service.d.ts +4 -2
  132. package/cjs/picker/picker-service.js +13 -12
  133. package/cjs/picker/picker-service.js.map +1 -1
  134. package/cjs/plugins/builtin-plugin/edit-module.d.ts +17 -6
  135. package/cjs/plugins/builtin-plugin/edit-module.js +128 -42
  136. package/cjs/plugins/builtin-plugin/edit-module.js.map +1 -1
  137. package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.d.ts +1 -0
  138. package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.js +3 -0
  139. package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.js.map +1 -0
  140. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.d.ts +88 -31
  141. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js +537 -229
  142. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -1
  143. package/cjs/render/contributions/render/arc3d-render.js.map +1 -1
  144. package/cjs/render/contributions/render/area-render.d.ts +1 -1
  145. package/cjs/render/contributions/render/area-render.js +36 -16
  146. package/cjs/render/contributions/render/area-render.js.map +1 -1
  147. package/cjs/render/contributions/render/base-render.d.ts +1 -0
  148. package/cjs/render/contributions/render/base-render.js +20 -2
  149. package/cjs/render/contributions/render/base-render.js.map +1 -1
  150. package/cjs/render/contributions/render/contributions/base-contribution-render.d.ts +7 -1
  151. package/cjs/render/contributions/render/contributions/base-contribution-render.js +16 -8
  152. package/cjs/render/contributions/render/contributions/base-contribution-render.js.map +1 -1
  153. package/cjs/render/contributions/render/contributions/base-texture-contribution-render.js +29 -2
  154. package/cjs/render/contributions/render/contributions/base-texture-contribution-render.js.map +1 -1
  155. package/cjs/render/contributions/render/contributions/group-contribution-render.js +8 -3
  156. package/cjs/render/contributions/render/contributions/group-contribution-render.js.map +1 -1
  157. package/cjs/render/contributions/render/contributions/image-contribution-render.d.ts +1 -1
  158. package/cjs/render/contributions/render/contributions/image-contribution-render.js +2 -2
  159. package/cjs/render/contributions/render/contributions/image-contribution-render.js.map +1 -1
  160. package/cjs/render/contributions/render/contributions/rect-contribution-render.js +4 -4
  161. package/cjs/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
  162. package/cjs/render/contributions/render/contributions/symbol-contribution-render.d.ts +8 -1
  163. package/cjs/render/contributions/render/contributions/symbol-contribution-render.js +30 -2
  164. package/cjs/render/contributions/render/contributions/symbol-contribution-render.js.map +1 -1
  165. package/cjs/render/contributions/render/contributions/text-contribution-render.js +5 -3
  166. package/cjs/render/contributions/render/contributions/text-contribution-render.js.map +1 -1
  167. package/cjs/render/contributions/render/draw-contribution.js +2 -1
  168. package/cjs/render/contributions/render/draw-contribution.js.map +1 -1
  169. package/cjs/render/contributions/render/group-render.js +2 -2
  170. package/cjs/render/contributions/render/group-render.js.map +1 -1
  171. package/cjs/render/contributions/render/image-render.js +3 -3
  172. package/cjs/render/contributions/render/image-render.js.map +1 -1
  173. package/cjs/render/contributions/render/line-render.js +31 -9
  174. package/cjs/render/contributions/render/line-render.js.map +1 -1
  175. package/cjs/render/contributions/render/path-render.js.map +1 -1
  176. package/cjs/render/contributions/render/polygon-render.js.map +1 -1
  177. package/cjs/render/contributions/render/rect-render.js +2 -2
  178. package/cjs/render/contributions/render/rect-render.js.map +1 -1
  179. package/cjs/render/contributions/render/richtext-render.js +1 -1
  180. package/cjs/render/contributions/render/richtext-render.js.map +1 -1
  181. package/cjs/render/contributions/render/symbol-render.js +15 -13
  182. package/cjs/render/contributions/render/symbol-render.js.map +1 -1
  183. package/cjs/render/contributions/render/utils.d.ts +1 -2
  184. package/cjs/render/contributions/render/utils.js +4 -20
  185. package/cjs/render/contributions/render/utils.js.map +1 -1
  186. package/cjs/resource-loader/loader.js +1 -1
  187. package/cjs/resource-loader/loader.js.map +1 -1
  188. package/dist/index.es.js +8962 -7480
  189. package/es/animate/Ticker/default-ticker.d.ts +2 -0
  190. package/es/animate/Ticker/default-ticker.js +7 -1
  191. package/es/animate/Ticker/default-ticker.js.map +1 -1
  192. package/es/animate/animate.js +4 -5
  193. package/es/animate/animate.js.map +1 -1
  194. package/es/animate/custom-animate.js +14 -25
  195. package/es/animate/custom-animate.js.map +1 -1
  196. package/es/animate/easing-func.d.ts +1 -0
  197. package/es/animate/easing-func.js +10 -0
  198. package/es/animate/easing-func.js.map +1 -0
  199. package/es/animate/easing.d.ts +4 -0
  200. package/es/animate/easing.js +24 -1
  201. package/es/animate/easing.js.map +1 -1
  202. package/es/animate/index.d.ts +1 -0
  203. package/es/animate/index.js +2 -0
  204. package/es/animate/index.js.map +1 -1
  205. package/es/color-string/store.js +1 -2
  206. package/es/common/3d-interceptor.js +2 -1
  207. package/es/common/bezier-utils.d.ts +3 -0
  208. package/es/common/bezier-utils.js +14 -0
  209. package/es/common/bezier-utils.js.map +1 -1
  210. package/es/common/custom-path2d.d.ts +4 -0
  211. package/es/common/custom-path2d.js +44 -12
  212. package/es/common/custom-path2d.js.map +1 -1
  213. package/es/common/render-area.d.ts +4 -0
  214. package/es/common/render-area.js +77 -18
  215. package/es/common/render-area.js.map +1 -1
  216. package/es/common/render-command-list.js +2 -1
  217. package/es/common/render-curve.d.ts +1 -1
  218. package/es/common/render-curve.js.map +1 -1
  219. package/es/common/segment/curve/arc.d.ts +4 -1
  220. package/es/common/segment/curve/arc.js +10 -1
  221. package/es/common/segment/curve/arc.js.map +1 -1
  222. package/es/common/segment/curve/base.d.ts +4 -1
  223. package/es/common/segment/curve/base.js.map +1 -1
  224. package/es/common/segment/curve/cubic-bezier.d.ts +5 -1
  225. package/es/common/segment/curve/cubic-bezier.js +22 -1
  226. package/es/common/segment/curve/cubic-bezier.js.map +1 -1
  227. package/es/common/segment/curve/curve-context.js +6 -3
  228. package/es/common/segment/curve/curve-context.js.map +1 -1
  229. package/es/common/segment/curve/ellipse.d.ts +4 -1
  230. package/es/common/segment/curve/ellipse.js +9 -0
  231. package/es/common/segment/curve/ellipse.js.map +1 -1
  232. package/es/common/segment/curve/line.d.ts +4 -1
  233. package/es/common/segment/curve/line.js +18 -0
  234. package/es/common/segment/curve/line.js.map +1 -1
  235. package/es/common/segment/curve/move.d.ts +4 -1
  236. package/es/common/segment/curve/move.js +9 -0
  237. package/es/common/segment/curve/move.js.map +1 -1
  238. package/es/common/segment/curve/path.d.ts +2 -1
  239. package/es/common/segment/curve/path.js +5 -2
  240. package/es/common/segment/curve/path.js.map +1 -1
  241. package/es/common/segment/curve/quadratic-bezier.d.ts +6 -2
  242. package/es/common/segment/curve/quadratic-bezier.js +28 -5
  243. package/es/common/segment/curve/quadratic-bezier.js.map +1 -1
  244. package/es/common/segment/step.js +1 -1
  245. package/es/common/segment/step.js.map +1 -1
  246. package/es/common/shape/rect.d.ts +1 -1
  247. package/es/common/shape/rect.js +30 -25
  248. package/es/common/shape/rect.js.map +1 -1
  249. package/es/common/store.js +1 -1
  250. package/es/core/contributions/env/base-contribution.d.ts +2 -0
  251. package/es/core/contributions/env/base-contribution.js +6 -0
  252. package/es/core/contributions/env/base-contribution.js.map +1 -1
  253. package/es/core/global.d.ts +2 -3
  254. package/es/core/global.js +7 -8
  255. package/es/core/global.js.map +1 -1
  256. package/es/graphic/builtin-symbol/rect.d.ts +2 -1
  257. package/es/graphic/builtin-symbol/rect.js +28 -0
  258. package/es/graphic/builtin-symbol/rect.js.map +1 -1
  259. package/es/graphic/builtin-symbol/utils.d.ts +2 -1
  260. package/es/graphic/builtin-symbol/utils.js +5 -0
  261. package/es/graphic/builtin-symbol/utils.js.map +1 -1
  262. package/es/graphic/config.js +20 -5
  263. package/es/graphic/config.js.map +1 -1
  264. package/es/graphic/graphic.d.ts +1 -1
  265. package/es/graphic/graphic.js +20 -6
  266. package/es/graphic/graphic.js.map +1 -1
  267. package/es/graphic/line.js +2 -2
  268. package/es/graphic/line.js.map +1 -1
  269. package/es/graphic/richtext/line.js +1 -1
  270. package/es/graphic/richtext/line.js.map +1 -1
  271. package/es/graphic/richtext/paragraph.d.ts +1 -1
  272. package/es/graphic/richtext/paragraph.js +37 -7
  273. package/es/graphic/richtext/paragraph.js.map +1 -1
  274. package/es/graphic/richtext/utils.d.ts +4 -0
  275. package/es/graphic/richtext/utils.js +15 -2
  276. package/es/graphic/richtext/utils.js.map +1 -1
  277. package/es/graphic/richtext/wrapper.d.ts +1 -0
  278. package/es/graphic/richtext/wrapper.js +1 -1
  279. package/es/graphic/richtext/wrapper.js.map +1 -1
  280. package/es/graphic/richtext.d.ts +7 -2
  281. package/es/graphic/richtext.js +37 -5
  282. package/es/graphic/richtext.js.map +1 -1
  283. package/es/index.d.ts +2 -0
  284. package/es/index.js +4 -0
  285. package/es/index.js.map +1 -1
  286. package/es/interface/animate.d.ts +5 -39
  287. package/es/interface/animate.js.map +1 -1
  288. package/es/interface/color.js.map +1 -1
  289. package/es/interface/context.d.ts +1 -0
  290. package/es/interface/context.js.map +1 -1
  291. package/es/interface/global.d.ts +4 -1
  292. package/es/interface/global.js.map +1 -1
  293. package/es/interface/graphic/group.d.ts +1 -0
  294. package/es/interface/graphic/group.js.map +1 -1
  295. package/es/interface/graphic/image.d.ts +1 -0
  296. package/es/interface/graphic/image.js.map +1 -1
  297. package/es/interface/graphic/path.d.ts +1 -0
  298. package/es/interface/graphic/path.js.map +1 -1
  299. package/es/interface/graphic/rect.d.ts +1 -0
  300. package/es/interface/graphic/rect.js.map +1 -1
  301. package/es/interface/graphic/richText.d.ts +12 -0
  302. package/es/interface/graphic/richText.js.map +1 -1
  303. package/es/interface/graphic/symbol.d.ts +2 -0
  304. package/es/interface/graphic/symbol.js.map +1 -1
  305. package/es/interface/graphic.d.ts +12 -3
  306. package/es/interface/graphic.js.map +1 -1
  307. package/es/interface/path.d.ts +5 -0
  308. package/es/interface/path.js.map +1 -1
  309. package/es/interface/picker.d.ts +13 -0
  310. package/es/interface/picker.js.map +1 -1
  311. package/es/picker/constants.d.ts +2 -0
  312. package/es/picker/constants.js +4 -0
  313. package/es/picker/constants.js.map +1 -1
  314. package/es/picker/pick-interceptor.d.ts +7 -2
  315. package/es/picker/pick-interceptor.js +19 -1
  316. package/es/picker/pick-interceptor.js.map +1 -1
  317. package/es/picker/pick-modules.js +5 -3
  318. package/es/picker/pick-modules.js.map +1 -1
  319. package/es/picker/picker-service.d.ts +4 -2
  320. package/es/picker/picker-service.js +13 -13
  321. package/es/picker/picker-service.js.map +1 -1
  322. package/es/plugins/builtin-plugin/edit-module.d.ts +17 -6
  323. package/es/plugins/builtin-plugin/edit-module.js +123 -40
  324. package/es/plugins/builtin-plugin/edit-module.js.map +1 -1
  325. package/es/plugins/builtin-plugin/richtext-edit-plugin-old.d.ts +1 -0
  326. package/es/plugins/builtin-plugin/richtext-edit-plugin-old.js +3 -0
  327. package/es/plugins/builtin-plugin/richtext-edit-plugin-old.js.map +1 -0
  328. package/es/plugins/builtin-plugin/richtext-edit-plugin.d.ts +88 -31
  329. package/es/plugins/builtin-plugin/richtext-edit-plugin.js +538 -225
  330. package/es/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -1
  331. package/es/render/contributions/render/arc3d-render.js.map +1 -1
  332. package/es/render/contributions/render/area-render.d.ts +1 -1
  333. package/es/render/contributions/render/area-render.js +36 -16
  334. package/es/render/contributions/render/area-render.js.map +1 -1
  335. package/es/render/contributions/render/base-render.d.ts +1 -0
  336. package/es/render/contributions/render/base-render.js +21 -2
  337. package/es/render/contributions/render/base-render.js.map +1 -1
  338. package/es/render/contributions/render/contributions/base-contribution-render.d.ts +7 -1
  339. package/es/render/contributions/render/contributions/base-contribution-render.js +16 -8
  340. package/es/render/contributions/render/contributions/base-contribution-render.js.map +1 -1
  341. package/es/render/contributions/render/contributions/base-texture-contribution-render.js +29 -2
  342. package/es/render/contributions/render/contributions/base-texture-contribution-render.js.map +1 -1
  343. package/es/render/contributions/render/contributions/group-contribution-render.js +8 -3
  344. package/es/render/contributions/render/contributions/group-contribution-render.js.map +1 -1
  345. package/es/render/contributions/render/contributions/image-contribution-render.d.ts +1 -1
  346. package/es/render/contributions/render/contributions/image-contribution-render.js +2 -2
  347. package/es/render/contributions/render/contributions/image-contribution-render.js.map +1 -1
  348. package/es/render/contributions/render/contributions/rect-contribution-render.js +4 -4
  349. package/es/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
  350. package/es/render/contributions/render/contributions/symbol-contribution-render.d.ts +8 -1
  351. package/es/render/contributions/render/contributions/symbol-contribution-render.js +26 -0
  352. package/es/render/contributions/render/contributions/symbol-contribution-render.js.map +1 -1
  353. package/es/render/contributions/render/contributions/text-contribution-render.js +5 -3
  354. package/es/render/contributions/render/contributions/text-contribution-render.js.map +1 -1
  355. package/es/render/contributions/render/draw-contribution.js +1 -1
  356. package/es/render/contributions/render/draw-contribution.js.map +1 -1
  357. package/es/render/contributions/render/group-render.js +2 -2
  358. package/es/render/contributions/render/group-render.js.map +1 -1
  359. package/es/render/contributions/render/image-render.js +3 -2
  360. package/es/render/contributions/render/image-render.js.map +1 -1
  361. package/es/render/contributions/render/line-render.js +31 -9
  362. package/es/render/contributions/render/line-render.js.map +1 -1
  363. package/es/render/contributions/render/path-render.js.map +1 -1
  364. package/es/render/contributions/render/polygon-render.js.map +1 -1
  365. package/es/render/contributions/render/rect-render.js +2 -2
  366. package/es/render/contributions/render/rect-render.js.map +1 -1
  367. package/es/render/contributions/render/richtext-render.js +1 -1
  368. package/es/render/contributions/render/richtext-render.js.map +1 -1
  369. package/es/render/contributions/render/symbol-render.js +16 -14
  370. package/es/render/contributions/render/symbol-render.js.map +1 -1
  371. package/es/render/contributions/render/utils.d.ts +1 -2
  372. package/es/render/contributions/render/utils.js +0 -18
  373. package/es/render/contributions/render/utils.js.map +1 -1
  374. package/es/resource-loader/loader.js +1 -1
  375. package/es/resource-loader/loader.js.map +1 -1
  376. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/bezier-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvD,MAAM,UAAU,UAAU,CAAC,IAAc,EAAE,IAAc;IACvD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACpC,WAAW,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KAC5D;IACD,OAAO,WAAW,GAAG,CAAC,CAAC;AACzB,CAAC;AAUD,MAAM,UAAU,WAAW,CAAC,EAAc,EAAE,EAAc,EAAE,EAAc,EAAE,EAAc,EAAE,cAAsB;IAChH,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS;IACjF,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/F,CAAC;AAaD,MAAM,UAAU,YAAY,CAAC,EAAc,EAAE,EAAc,EAAE,EAAc,EAAE,EAAc,EAAE,CAAS;IACpG,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,OAAO,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzB,CAAC","file":"bezier-utils.js","sourcesContent":["import type { IPointLike, IPoint } from '@visactor/vutils';\nimport { PointService, Point } from '@visactor/vutils';\nexport function snapLength(xArr: number[], yArr: number[]) {\n let totalLength = 0;\n const count = xArr.length;\n for (let i = 0; i < count; i++) {\n const x = xArr[i];\n const y = yArr[i];\n const nextX = xArr[(i + 1) % count];\n const nextY = yArr[(i + 1) % count];\n totalLength += PointService.distanceNN(x, y, nextX, nextY);\n }\n return totalLength / 2;\n}\n\n/**\n * 计算贝塞尔曲线的长度\n * @param p0 起点\n * @param p1 控制点1\n * @param p2 控制点2\n * @param p3 终点\n * @param iterationCount\n */\nexport function cubicLength(p0: IPointLike, p1: IPointLike, p2: IPointLike, p3: IPointLike, iterationCount: number) {\n return snapLength([p0.x, p1.x, p2.x, p3.x], [p0.y, p1.y, p2.y, p3.y]);\n}\n\nexport function cubicCalc(p0: number, p1: number, p2: number, p3: number, t: number): number {\n const one = 1 - t;\n return one * one * one * p0 + 3 * p1 * t * one * one + 3 * p2 * t * t * one + p3 * t * t * t;\n}\n\n/**\n * 根据t计算三次贝塞尔的点\n * example:\n * x: cubicAt(x1, x2, x3, x4, t),\n * y: cubicAt(y1, y2, y3, y4, t),\n * @param p0 起点坐标\n * @param p1 控制点1\n * @param p2 控制点2\n * @param p3 终点坐标\n * @param t\n */\nexport function cubicPointAt(p0: IPointLike, p1: IPointLike, p2: IPointLike, p3: IPointLike, t: number): IPoint {\n const x = cubicCalc(p0.x, p1.x, p2.x, p3.x, t);\n const y = cubicCalc(p0.y, p1.y, p2.y, p3.y, t);\n return new Point(x, y);\n}\n"]}
1
+ {"version":3,"sources":["../src/common/bezier-utils.ts"],"names":[],"mappings":"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","file":"bezier-utils.js","sourcesContent":["import type { IPointLike, IPoint } from '@visactor/vutils';\nimport { PointService, Point } from '@visactor/vutils';\nexport function snapLength(xArr: number[], yArr: number[]) {\n let totalLength = 0;\n const count = xArr.length;\n for (let i = 0; i < count; i++) {\n const x = xArr[i];\n const y = yArr[i];\n const nextX = xArr[(i + 1) % count];\n const nextY = yArr[(i + 1) % count];\n totalLength += PointService.distanceNN(x, y, nextX, nextY);\n }\n return totalLength / 2;\n}\n\n/**\n * 计算贝塞尔曲线的长度\n * @param p0 起点\n * @param p1 控制点1\n * @param p2 控制点2\n * @param p3 终点\n * @param iterationCount\n */\nexport function cubicLength(p0: IPointLike, p1: IPointLike, p2: IPointLike, p3: IPointLike, iterationCount: number) {\n return snapLength([p0.x, p1.x, p2.x, p3.x], [p0.y, p1.y, p2.y, p3.y]);\n}\n\nexport function cubicCalc(p0: number, p1: number, p2: number, p3: number, t: number): number {\n const one = 1 - t;\n return one * one * one * p0 + 3 * p1 * t * one * one + 3 * p2 * t * t * one + p3 * t * t * t;\n}\n\n/**\n * 根据t计算三次贝塞尔的点\n * example:\n * x: cubicAt(x1, x2, x3, x4, t),\n * y: cubicAt(y1, y2, y3, y4, t),\n * @param p0 起点坐标\n * @param p1 控制点1\n * @param p2 控制点2\n * @param p3 终点坐标\n * @param t\n */\nexport function cubicPointAt(p0: IPointLike, p1: IPointLike, p2: IPointLike, p3: IPointLike, t: number): IPoint {\n const x = cubicCalc(p0.x, p1.x, p2.x, p3.x, t);\n const y = cubicCalc(p0.y, p1.y, p2.y, p3.y, t);\n return new Point(x, y);\n}\n\nexport function quadCalc(p0: number, p1: number, p2: number, t: number): number {\n const one = 1 - t;\n return one * one * p0 + 2 * one * t * p1 + t * t * p2;\n}\n\n/**\n * 根据t计算三次贝塞尔的点\n * example:\n * x: cubicAt(x1, x2, x3, x4, t),\n * y: cubicAt(y1, y2, y3, y4, t),\n * @param p0 起点坐标\n * @param p1 控制点1\n * @param p2 控制点2\n * @param p3 终点坐标\n * @param t\n */\nexport function quadPointAt(p0: IPointLike, p1: IPointLike, p2: IPointLike, t: number): IPoint {\n const x = quadCalc(p0.x, p1.x, p2.x, t);\n const y = quadCalc(p0.y, p1.y, p2.y, t);\n return new Point(x, y);\n}\n\n/**\n * 计算贝塞尔曲线的长度\n * @param p0 起点\n * @param p1 控制点1\n * @param p2 控制点2\n * @param p3 终点\n * @param iterationCount\n */\nexport function quadLength(p0: IPointLike, p1: IPointLike, p2: IPointLike, iterationCount: number) {\n return snapLength([p0.x, p1.x, p2.x], [p0.y, p1.y, p2.y]);\n}\n"]}
@@ -9,6 +9,7 @@ export declare class CustomPath2D extends CurvePath implements ICustomPath2D {
9
9
  protected transformCbList?: ((cmd: CommandType, x: number, y: number, sx: number, sy: number) => void)[];
10
10
  protected toStringCbList?: ((cmd: CommandType) => string)[];
11
11
  constructor(ctx?: IPath2D);
12
+ get curves(): ICurve<IPoint>[];
12
13
  setCtx(ctx?: IPath2D): void;
13
14
  moveTo(x: number, y: number): this;
14
15
  lineTo(x: number, y: number): this;
@@ -22,6 +23,7 @@ export declare class CustomPath2D extends CurvePath implements ICustomPath2D {
22
23
  addCurve(curve: ICurve<IPoint>): void;
23
24
  clear(): void;
24
25
  beginPath(): void;
26
+ tryBuildCurves(): ICurve<IPoint>[];
25
27
  toString(): string;
26
28
  fromString(str: string, x?: number, y?: number, sX?: number, sY?: number): this;
27
29
  fromLine(line: ILine): void;
@@ -41,8 +43,10 @@ export declare class CustomPath2D extends CurvePath implements ICustomPath2D {
41
43
  private _updateBounds;
42
44
  release(): void;
43
45
  getLength(): number;
46
+ getYAt(x: number): number;
44
47
  getAttrAt(distance: number): {
45
48
  pos: IPointLike;
46
49
  angle: number;
47
50
  };
51
+ drawWithClipRange(ctx: IPath2D, size: number, x: number, y: number, clipRange: number): void;
48
52
  }
@@ -12,12 +12,15 @@ import { drawArc, addArcToBezierPath } from "./shape/arc";
12
12
 
13
13
  import { renderCommandList } from "./render-command-list";
14
14
 
15
- import { calcLineCache } from "./segment";
15
+ import { calcLineCache, CurveContext } from "./segment";
16
16
 
17
17
  export class CustomPath2D extends CurvePath {
18
18
  constructor(ctx) {
19
19
  super(), this.commandList = [], ctx && (this._ctx = ctx), this._boundsContext = new BoundsContext(this.bounds);
20
20
  }
21
+ get curves() {
22
+ return this.tryBuildCurves();
23
+ }
21
24
  setCtx(ctx) {
22
25
  this._ctx = ctx;
23
26
  }
@@ -60,14 +63,21 @@ export class CustomPath2D extends CurvePath {
60
63
  this;
61
64
  }
62
65
  addCurve(curve) {
63
- this.curves.push(curve);
66
+ this._curves.push(curve);
64
67
  }
65
68
  clear() {
66
- this.transformCbList = null, this.commandList.length = 0, this.curves.length = 0;
69
+ this.transformCbList = null, this.commandList.length = 0, this._curves.length = 0;
67
70
  }
68
71
  beginPath() {
69
72
  this.clear();
70
73
  }
74
+ tryBuildCurves() {
75
+ if (!this._curves || !this._curves.length) {
76
+ const curveContext = new CurveContext(this);
77
+ renderCommandList(this.commandList, curveContext, 0, 0, 1, 1);
78
+ }
79
+ return this._curves;
80
+ }
71
81
  toString() {
72
82
  if (!this.toStringCbList) {
73
83
  const list = [];
@@ -99,7 +109,7 @@ export class CustomPath2D extends CurvePath {
99
109
  if (!points) return;
100
110
  const cache = calcLineCache(points, curveType);
101
111
  "x" === clipRangeByDimension ? this.direction = Direction.ROW : "y" === clipRangeByDimension ? this.direction = Direction.COLUMN : "auto" === clipRangeByDimension && (this.direction = cache.direction),
102
- this.curves = cache.curves;
112
+ this._curves = cache.curves;
103
113
  }
104
114
  fromCustomPath2D(path, x, y, sX, sY) {
105
115
  return this.clear(), this._runCommandList(path.commandList, x, y, sX, sY), this._updateBounds(),
@@ -296,19 +306,27 @@ export class CustomPath2D extends CurvePath {
296
306
  }
297
307
  getLength() {
298
308
  if (this.direction === Direction.COLUMN) {
299
- if (!this.curves.length) return 0;
300
- const sc = this.curves[0], ec = this.curves[this.curves.length - 1];
309
+ if (!this._curves.length) return 0;
310
+ const sc = this._curves[0], ec = this._curves[this._curves.length - 1];
301
311
  return abs(sc.p0.y - ec.p1.y);
302
312
  }
303
313
  if (this.direction === Direction.ROW) {
304
- if (!this.curves.length) return 0;
305
- const sc = this.curves[0], ec = this.curves[this.curves.length - 1];
314
+ if (!this._curves.length) return 0;
315
+ const sc = this._curves[0], ec = this._curves[this._curves.length - 1];
306
316
  return abs(sc.p0.x - ec.p1.x);
307
317
  }
308
- return this.curves.reduce(((l, c) => l + c.getLength()), 0);
318
+ return this._curves.reduce(((l, c) => l + c.getLength()), 0);
319
+ }
320
+ getYAt(x) {
321
+ if (!this.curves) return 1 / 0;
322
+ for (let i = 0; i < this.curves.length; i++) {
323
+ const curve = this.curves[i];
324
+ if (curve.includeX(x)) return curve.getYAt(x);
325
+ }
326
+ return 1 / 0;
309
327
  }
310
328
  getAttrAt(distance) {
311
- if (!this.curves) return {
329
+ if (!this._curves) return {
312
330
  pos: {
313
331
  x: 0,
314
332
  y: 0
@@ -316,8 +334,8 @@ export class CustomPath2D extends CurvePath {
316
334
  angle: 0
317
335
  };
318
336
  let curve, _dis = 0;
319
- for (let i = 0; i < this.curves.length; i++) {
320
- curve = this.curves[i];
337
+ for (let i = 0; i < this._curves.length; i++) {
338
+ curve = this._curves[i];
321
339
  const cl = curve.getLength(this.direction);
322
340
  if (_dis + cl >= distance) break;
323
341
  _dis += cl;
@@ -328,6 +346,20 @@ export class CustomPath2D extends CurvePath {
328
346
  angle: curve.getAngleAt(t)
329
347
  };
330
348
  }
349
+ drawWithClipRange(ctx, size, x, y, clipRange) {
350
+ this.tryBuildCurves();
351
+ const totalLen = this.getLength() * clipRange;
352
+ let currLen = 0;
353
+ for (let i = 0; i < this._curves.length; i++) {
354
+ const curve = this._curves[i], cl = curve.getLength(this.direction);
355
+ if (!(currLen + cl <= totalLen)) {
356
+ const percent = 1 - (currLen + cl - totalLen) / cl;
357
+ curve.draw(ctx, x, y, size, size, percent);
358
+ break;
359
+ }
360
+ curve.draw(ctx, x, y, size, size, 1), currLen += cl;
361
+ }
362
+ }
331
363
  }
332
364
 
333
365
  const temp = [ "l", 0, 0, 0, 0, 0, 0, 0 ];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/custom-path2d.ts"],"names":[],"mappings":"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","file":"custom-path2d.js","sourcesContent":["import { BoundsContext } from './bounds-context';\nimport type { CommandStrType, CommandType, ICurve, ICustomPath2D, IDirection, ILine, IPath2D } from '../interface';\nimport { CurvePath } from './segment/curve/path';\nimport { enumCommandMap, parseSvgPath } from './path-svg';\nimport type { IPoint, IPointLike } from '@visactor/vutils';\nimport { abs } from '@visactor/vutils';\nimport { Direction } from './enums';\nimport { drawArc, addArcToBezierPath } from './shape/arc';\nimport { renderCommandList } from './render-command-list';\nimport { calcLineCache } from './segment';\n\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 基于d3-shape重构\n// https://github.com/vega/vega/blob/master/packages/vega-scenegraph/src/path/render.js\n\nexport class CustomPath2D extends CurvePath implements ICustomPath2D {\n commandList: CommandType[] = [];\n _boundsContext: IPath2D;\n _ctx?: IPath2D;\n direction?: IDirection;\n protected transformCbList?: ((cmd: CommandType, x: number, y: number, sx: number, sy: number) => void)[];\n protected toStringCbList?: ((cmd: CommandType) => string)[];\n\n constructor(ctx?: IPath2D) {\n super();\n if (ctx) {\n this._ctx = ctx;\n }\n this._boundsContext = new BoundsContext(this.bounds);\n }\n\n setCtx(ctx?: IPath2D) {\n this._ctx = ctx;\n }\n\n moveTo(x: number, y: number) {\n this.commandList.push([enumCommandMap.M, x, y]);\n this._ctx && this._ctx.moveTo(x, y);\n return this;\n }\n lineTo(x: number, y: number) {\n this.commandList.push([enumCommandMap.L, x, y]);\n this._ctx && this._ctx.lineTo(x, y);\n return this;\n }\n quadraticCurveTo(aCPx: number, aCPy: number, aX: number, aY: number) {\n this.commandList.push([enumCommandMap.Q, aCPx, aCPy, aX, aY]);\n this._ctx && this._ctx.quadraticCurveTo(aCPx, aCPy, aX, aY);\n return this;\n }\n bezierCurveTo(aCP1x: number, aCP1y: number, aCP2x: number, aCP2y: number, aX: number, aY: number) {\n this.commandList.push([enumCommandMap.C, aCP1x, aCP1y, aCP2x, aCP2y, aX, aY]);\n this._ctx && this._ctx.bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY);\n return this;\n }\n arcTo(aX1: number, aY1: number, aX2: number, aY2: number, aRadius: number) {\n this.commandList.push([enumCommandMap.AT, aX1, aY1, aX2, aY2, aRadius]);\n this._ctx && this._ctx.arcTo(aX1, aY1, aX2, aY2, aRadius);\n return this;\n }\n ellipse(\n aX: number,\n aY: number,\n xRadius: number,\n yRadius: number,\n aRotation: number,\n aStartAngle: number,\n aEndAngle: number,\n aClockwise: boolean\n ) {\n this.commandList.push([enumCommandMap.E, aX, aY, xRadius, yRadius, aRotation, aStartAngle, aEndAngle, aClockwise]);\n this._ctx && this._ctx.ellipse(aX, aY, xRadius, yRadius, aRotation, aStartAngle, aEndAngle, aClockwise);\n return this;\n }\n rect(x: number, y: number, w: number, h: number) {\n this.commandList.push([enumCommandMap.R, x, y, w, h]);\n this._ctx && this._ctx.rect(x, y, w, h);\n return this;\n }\n arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean) {\n this.commandList.push([enumCommandMap.A, x, y, radius, startAngle, endAngle, counterclockwise]);\n this._ctx && this._ctx.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n closePath() {\n this.commandList.push([enumCommandMap.Z]);\n this._ctx && this._ctx.closePath();\n return this;\n }\n\n addCurve(curve: ICurve<IPoint>) {\n this.curves.push(curve);\n // todo parse curve\n }\n clear() {\n this.transformCbList = null;\n this.commandList.length = 0;\n this.curves.length = 0;\n }\n\n beginPath() {\n this.clear();\n }\n\n toString(): string {\n if (!this.toStringCbList) {\n const list: ((cmd: CommandType) => string)[] = [];\n list[enumCommandMap.M] = (cmd: CommandType) => `M${cmd[1]} ${cmd[2]}`;\n list[enumCommandMap.L] = (cmd: CommandType) => `L${cmd[1]} ${cmd[2]}`;\n list[enumCommandMap.Q] = (cmd: CommandType) => `Q${cmd[1]} ${cmd[2]} ${cmd[3]} ${cmd[4]}`;\n list[enumCommandMap.C] = (cmd: CommandType) => `C${cmd[1]} ${cmd[2]} ${cmd[3]} ${cmd[4]} ${cmd[5]} ${cmd[6]}`;\n list[enumCommandMap.A] = (cmd: CommandType) => {\n const bezierPathList: number[] = [];\n addArcToBezierPath(\n bezierPathList,\n cmd[4] as number,\n cmd[5] as number,\n cmd[1] as number,\n cmd[2] as number,\n cmd[3] as number,\n cmd[3] as number\n );\n let path = '';\n for (let i = 0; i < bezierPathList.length; i += 6) {\n path += `C${bezierPathList[i]} ${bezierPathList[i + 1]} ${bezierPathList[i + 2]} ${bezierPathList[i + 3]} ${\n bezierPathList[i + 4]\n } ${bezierPathList[i + 5]}`;\n }\n return path;\n };\n // list[enumCommandMap.AT] = this.arcToTransform;\n // list[enumCommandMap.E] = this.ellipseTransform;\n list[enumCommandMap.R] = (cmd: CommandType) => `M${cmd[1]} ${cmd[2]} h${cmd[3]} v${cmd[4]} H${cmd[1]}Z`;\n // list[enumCommandMap.A] = this.arcTransform;\n list[enumCommandMap.Z] = (cmd: CommandType) => `Z`;\n this.toStringCbList = list;\n }\n\n const list = this.toStringCbList;\n let path = '';\n this.commandList.forEach(c => {\n path += list[c[0]](c);\n });\n return path;\n }\n\n fromString(str: string, x?: number, y?: number, sX?: number, sY?: number) {\n this.clear();\n\n // 解析path字符串\n const commandStrList = parseSvgPath(str) as CommandStrType[]; // TODO: 目前正则性能较差,后续需要加上回调函数供用户直接操作绘图命令\n this._runCommandStrList(commandStrList, x, y, sX, sY);\n\n // 更新bounds\n this._updateBounds();\n return this;\n }\n fromLine(line: ILine) {\n const { points, curveType, clipRangeByDimension } = line.attribute;\n if (!points) {\n return;\n }\n const cache = calcLineCache(points, curveType);\n if (clipRangeByDimension === 'x') {\n this.direction = Direction.ROW;\n } else if (clipRangeByDimension === 'y') {\n this.direction = Direction.COLUMN;\n } else if (clipRangeByDimension === 'auto') {\n this.direction = cache.direction;\n }\n this.curves = cache.curves;\n }\n fromCustomPath2D(path: ICustomPath2D, x?: number, y?: number, sX?: number, sY?: number) {\n this.clear();\n this._runCommandList(path.commandList as CommandType[], x, y, sX, sY);\n\n // 更新bounds\n this._updateBounds();\n return this;\n }\n transform(x: number, y: number, sx: number, sy: number) {\n const commandList = this.commandList;\n if (!this.transformCbList) {\n const list: ((cmd: CommandType, x: number, y: number, sx: number, sy: number) => void)[] = [];\n list[enumCommandMap.M] = this.moveToTransform;\n list[enumCommandMap.L] = this.lineToTransform;\n list[enumCommandMap.Q] = this.quadraticCurveToTransform;\n list[enumCommandMap.C] = this.bezierCurveToTransform;\n list[enumCommandMap.AT] = this.arcToTransform;\n list[enumCommandMap.E] = this.ellipseTransform;\n list[enumCommandMap.R] = this.rectTransform;\n list[enumCommandMap.A] = this.arcTransform;\n list[enumCommandMap.Z] = this.closePathTransform;\n this.transformCbList = list;\n }\n commandList.forEach(cmd => {\n this.transformCbList[cmd[0]](cmd, x, y, sx, sy);\n });\n this._updateBounds();\n }\n\n protected moveToTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n }\n protected lineToTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n }\n protected quadraticCurveToTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = (cmd[3] as number) * sx + x;\n cmd[4] = (cmd[4] as number) * sy + y;\n }\n protected bezierCurveToTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = (cmd[3] as number) * sx + x;\n cmd[4] = (cmd[4] as number) * sy + y;\n cmd[5] = (cmd[5] as number) * sx + x;\n cmd[6] = (cmd[6] as number) * sy + y;\n }\n arcToTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = (cmd[3] as number) * sx + x;\n cmd[4] = (cmd[4] as number) * sy + y;\n cmd[5] = ((cmd[5] as number) * (sx + sy)) / 2;\n }\n ellipseTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = (cmd[3] as number) * sx;\n cmd[4] = (cmd[4] as number) * sy;\n }\n rectTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = (cmd[3] as number) * sx;\n cmd[4] = (cmd[4] as number) * sy;\n }\n arcTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = ((cmd[3] as number) * (sx + sy)) / 2;\n }\n closePathTransform() {\n return;\n }\n protected _runCommandStrList(\n commandStrList: CommandStrType[],\n l: number = 0,\n t: number = 0,\n sX: number = 1,\n sY: number = 1\n ) {\n let current; // current instruction\n let previous = null;\n let x = 0; // current x\n let y = 0; // current y\n // let sX = 0;\n // let sY = 0;\n let controlX = 0; // current control point x\n let controlY = 0; // current control point y\n let tempX;\n let tempY;\n let tempControlX;\n let tempControlY;\n\n // if (isNil(l)) l = 0;\n // if (isNil(t)) t = 0;\n // if (isNil(sX)) sX = 1;\n // if (isNil(sY)) sY = sX;\n\n for (let i = 0, len = commandStrList.length; i < len; ++i) {\n current = commandStrList[i];\n if (sX !== 1 || sY !== 1) {\n current = scale(current, sX, sY);\n }\n\n switch (\n current[0] // first letter\n ) {\n case 'l': // lineto, relative\n x += current[1] as number;\n y += current[2] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'L': // lineto, absolute\n x = current[1] as number;\n y = current[2] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'h': // horizontal lineto, relative\n x += current[1] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'H': // horizontal lineto, absolute\n x = current[1] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'v': // vertical lineto, relative\n y += current[1] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'V': // verical lineto, absolute\n y = current[1] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'm': // moveTo, relative\n x += current[1] as number;\n y += current[2] as number;\n this.moveTo(x + l, y + t);\n break;\n\n case 'M': // moveTo, absolute\n x = current[1] as number;\n y = current[2] as number;\n this.moveTo(x + l, y + t);\n break;\n\n case 'c': // bezierCurveTo, relative\n tempX = x + (current[5] as number);\n tempY = y + (current[6] as number);\n controlX = x + (current[3] as number);\n controlY = y + (current[4] as number);\n this.bezierCurveTo(\n x + (current[1] as number) + l, // x1\n y + (current[2] as number) + t, // y1\n controlX + l, // x2\n controlY + t, // y2\n tempX + l,\n tempY + t\n );\n x = tempX;\n y = tempY;\n break;\n\n case 'C': // bezierCurveTo, absolute\n x = current[5] as number;\n y = current[6] as number;\n controlX = current[3] as number;\n controlY = current[4] as number;\n this.bezierCurveTo(\n (current[1] as number) + l,\n (current[2] as number) + t,\n controlX + l,\n controlY + t,\n x + l,\n y + t\n );\n break;\n\n case 's': // shorthand cubic bezierCurveTo, relative\n // transform to absolute x,y\n tempX = x + (current[3] as number);\n tempY = y + (current[4] as number);\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n this.bezierCurveTo(\n controlX + l,\n controlY + t,\n x + (current[1] as number) + l,\n y + (current[2] as number) + t,\n tempX + l,\n tempY + t\n );\n\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = x + (current[1] as number);\n controlY = y + (current[2] as number);\n\n x = tempX;\n y = tempY;\n break;\n\n case 'S': // shorthand cubic bezierCurveTo, absolute\n tempX = current[3] as number;\n tempY = current[4] as number;\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n this.bezierCurveTo(\n controlX + l,\n controlY + t,\n (current[1] as number) + l,\n (current[2] as number) + t,\n tempX + l,\n tempY + t\n );\n x = tempX;\n y = tempY;\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = current[1] as number;\n controlY = current[2] as number;\n\n break;\n\n case 'q': // quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + (current[3] as number);\n tempY = y + (current[4] as number);\n\n controlX = x + (current[1] as number);\n controlY = y + (current[2] as number);\n\n this.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n tempX = current[3] as number;\n tempY = current[4] as number;\n\n this.quadraticCurveTo((current[1] as number) + l, (current[2] as number) + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = current[1] as number;\n controlY = current[2] as number;\n break;\n\n case 't': // shorthand quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + (current[1] as number);\n tempY = y + (current[2] as number);\n\n if ((previous![0] as string).match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else if (previous![0] === 't') {\n // calculate reflection of previous control points for t\n controlX = 2 * x - (tempControlX as number);\n controlY = 2 * y - (tempControlY as number);\n } else if (previous![0] === 'q') {\n // calculate reflection of previous control points for q\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n tempControlX = controlX;\n tempControlY = controlY;\n\n this.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = x + (current[1] as number);\n controlY = y + (current[2] as number);\n break;\n\n case 'T':\n tempX = current[1] as number;\n tempY = current[2] as number;\n\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n this.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'a':\n drawArc(this, x + l, y + t, [\n current[1] as number,\n current[2] as number,\n current[3] as number,\n current[4] as number,\n current[5] as number,\n (current[6] as number) + x + l,\n (current[7] as number) + y + t\n ]);\n x += current[6] as number;\n y += current[7] as number;\n break;\n\n case 'A':\n drawArc(this, x + l, y + t, [\n current[1] as number,\n current[2] as number,\n current[3] as number,\n current[4] as number,\n current[5] as number,\n (current[6] as number) + l,\n (current[7] as number) + t\n ]);\n x = current[6] as number;\n y = current[7] as number;\n break;\n\n case 'z':\n case 'Z':\n this.closePath();\n break;\n }\n previous = current;\n }\n }\n\n protected _runCommandList(commandList: CommandType[], l: number = 0, t: number = 0, sX: number = 1, sY: number = 1) {\n if (l === 0 && t === 0 && sX === 1 && sY === 1) {\n this.commandList = commandList.map(entry => entry.slice() as CommandType);\n return;\n }\n\n for (let i = 0, len = commandList.length; i < len; ++i) {\n const current = commandList[i].slice() as CommandType;\n\n switch (\n current[0] // first letter\n ) {\n case enumCommandMap.L:\n this.lineToTransform(current, l, t, sX, sY);\n break;\n\n case enumCommandMap.M:\n this.moveToTransform(current, l, t, sX, sY);\n break;\n\n case enumCommandMap.C:\n this.bezierCurveToTransform(current, l, t, sX, sY);\n break;\n\n case enumCommandMap.Q:\n this.quadraticCurveToTransform(current, l, t, sX, sY);\n break;\n\n case enumCommandMap.A:\n this.arcToTransform(current, l, t, sX, sY);\n break;\n case enumCommandMap.E:\n this.ellipseTransform(current, l, t, sX, sY);\n break;\n case enumCommandMap.R:\n this.rectTransform(current, l, t, sX, sY);\n break;\n case enumCommandMap.AT:\n this.arcToTransform(current, l, t, sX, sY);\n break;\n case enumCommandMap.Z:\n this.closePath();\n break;\n }\n }\n }\n private _updateBounds() {\n this.bounds.clear();\n renderCommandList(this.commandList, this._boundsContext as unknown as ICustomPath2D);\n }\n\n release(): void {\n this.commandList = [];\n this._boundsContext = null;\n this._ctx = null;\n }\n\n getLength(): number {\n if (this.direction === Direction.COLUMN) {\n if (!this.curves.length) {\n return 0;\n }\n const sc = this.curves[0];\n const ec = this.curves[this.curves.length - 1];\n return abs(sc.p0.y - ec.p1.y);\n } else if (this.direction === Direction.ROW) {\n if (!this.curves.length) {\n return 0;\n }\n const sc = this.curves[0];\n const ec = this.curves[this.curves.length - 1];\n return abs(sc.p0.x - ec.p1.x);\n }\n return this.curves.reduce((l, c) => l + c.getLength(), 0);\n }\n\n getAttrAt(distance: number): { pos: IPointLike; angle: number } {\n if (!this.curves) {\n return { pos: { x: 0, y: 0 }, angle: 0 };\n }\n let _dis = 0;\n let curve: ICurve<IPoint>;\n for (let i = 0; i < this.curves.length; i++) {\n curve = this.curves[i];\n const cl = curve.getLength(this.direction);\n if (_dis + cl >= distance) {\n break;\n } else {\n _dis += cl;\n }\n }\n const t = (distance - _dis) / curve.getLength(this.direction);\n const pos = curve.getPointAt(t);\n const angle = curve.getAngleAt(t);\n return { pos, angle };\n }\n}\n\nconst temp = ['l', 0, 0, 0, 0, 0, 0, 0];\n\nfunction scale(current: CommandStrType, sX: number, sY: number) {\n const c = (temp[0] = current[0]);\n if (c === 'a' || c === 'A') {\n temp[1] = sX * (current[1] as number);\n temp[2] = sY * (current[2] as number);\n temp[3] = current[3] as number;\n temp[4] = current[4] as number;\n temp[5] = current[5] as number;\n temp[6] = sX * (current[6] as number);\n temp[7] = sY * (current[7] as number);\n } else if (c === 'h' || c === 'H') {\n temp[1] = sX * (current[1] as number);\n } else if (c === 'v' || c === 'V') {\n temp[1] = sY * (current[1] as number);\n } else {\n for (let i = 1, n = current.length; i < n; ++i) {\n temp[i] = (i % 2 === 1 ? sX : sY) * (current[i] as number);\n }\n }\n return temp;\n}\n"]}
1
+ {"version":3,"sources":["../src/common/custom-path2d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1D,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAqBxD,MAAM,OAAO,YAAa,SAAQ,SAAS;IAQzC,YAAY,GAAa;QACvB,KAAK,EAAE,CAAC;QARV,gBAAW,GAAkB,EAAE,CAAC;QAS9B,IAAI,GAAG,EAAE;YACP,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;SACjB;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,GAAa;QAClB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,CAAS,EAAE,CAAS;QACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,CAAC,CAAS,EAAE,CAAS;QACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,gBAAgB,CAAC,IAAY,EAAE,IAAY,EAAE,EAAU,EAAE,EAAU;QACjE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,aAAa,CAAC,KAAa,EAAE,KAAa,EAAE,KAAa,EAAE,KAAa,EAAE,EAAU,EAAE,EAAU;QAC9F,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,OAAe;QACvE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CACL,EAAU,EACV,EAAU,EACV,OAAe,EACf,OAAe,EACf,SAAiB,EACjB,WAAmB,EACnB,SAAiB,EACjB,UAAmB;QAEnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QACnH,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACxG,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QAC7C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,MAAc,EAAE,UAAkB,EAAE,QAAgB,EAAE,gBAA0B;QACxG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAChG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,SAAS;QACP,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,KAAqB;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE3B,CAAC;IACD,KAAK;QACH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,SAAS;QACP,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAGD,cAAc;QACZ,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC1C,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;YAC5C,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC/D;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,MAAM,IAAI,GAAqC,EAAE,CAAC;YAClD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,GAAgB,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,GAAgB,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,GAAgB,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1F,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,GAAgB,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9G,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,GAAgB,EAAE,EAAE;gBAC5C,MAAM,cAAc,GAAa,EAAE,CAAC;gBACpC,kBAAkB,CAChB,cAAc,EACd,GAAG,CAAC,CAAC,CAAW,EAChB,GAAG,CAAC,CAAC,CAAW,EAChB,GAAG,CAAC,CAAC,CAAW,EAChB,GAAG,CAAC,CAAC,CAAW,EAChB,GAAG,CAAC,CAAC,CAAW,EAChB,GAAG,CAAC,CAAC,CAAW,CACjB,CAAC;gBACF,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;oBACjD,IAAI,IAAI,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,IACtG,cAAc,CAAC,CAAC,GAAG,CAAC,CACtB,IAAI,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;iBAC7B;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;YAGF,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,GAAgB,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAExG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,GAAgB,EAAE,EAAE,CAAC,GAAG,CAAC;YACnD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;SAC5B;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;QACjC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAC3B,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,GAAW,EAAE,CAAU,EAAE,CAAU,EAAE,EAAW,EAAE,EAAW;QACtE,IAAI,CAAC,KAAK,EAAE,CAAC;QAGb,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAqB,CAAC;QAC7D,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAGtD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,QAAQ,CAAC,IAAW;QAClB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QACnE,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QACD,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,oBAAoB,KAAK,GAAG,EAAE;YAChC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC;SAChC;aAAM,IAAI,oBAAoB,KAAK,GAAG,EAAE;YACvC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;SACnC;aAAM,IAAI,oBAAoB,KAAK,MAAM,EAAE;YAC1C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;SAClC;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;IAC9B,CAAC;IACD,gBAAgB,CAAC,IAAmB,EAAE,CAAU,EAAE,CAAU,EAAE,EAAW,EAAE,EAAW;QACpF,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAA4B,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAGtE,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU;QACpD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,MAAM,IAAI,GAAiF,EAAE,CAAC;YAC9F,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;YAC9C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;YAC9C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC;YACxD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC;YACrD,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;YAC9C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAC/C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;YAC5C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YAC3C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC;YACjD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;SAC7B;QACD,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACxB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAES,eAAe,CAAC,GAAgB,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU;QACtF,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IACS,eAAe,CAAC,GAAgB,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU;QACtF,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IACS,yBAAyB,CAAC,GAAgB,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU;QAChG,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IACS,sBAAsB,CAAC,GAAgB,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU;QAC7F,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IACD,cAAc,CAAC,GAAgB,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU;QAC3E,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAE,GAAG,CAAC,CAAC,CAAY,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IACD,gBAAgB,CAAC,GAAgB,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU;QAC7E,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,CAAC;QACjC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,CAAC;IACnC,CAAC;IACD,aAAa,CAAC,GAAgB,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU;QAC1E,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,CAAC;QACjC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,CAAC;IACnC,CAAC;IACD,YAAY,CAAC,GAAgB,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU;QACzE,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAE,GAAG,CAAC,CAAC,CAAY,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IACD,kBAAkB;QAChB,OAAO;IACT,CAAC;IACS,kBAAkB,CAC1B,cAAgC,EAChC,IAAY,CAAC,EACb,IAAY,CAAC,EACb,KAAa,CAAC,EACd,KAAa,CAAC;QAEd,IAAI,OAAO,CAAC;QACZ,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,GAAG,CAAC,CAAC;QAGV,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,KAAK,CAAC;QACV,IAAI,KAAK,CAAC;QACV,IAAI,YAAY,CAAC;QACjB,IAAI,YAAY,CAAC;QAOjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;YACzD,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;gBACxB,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;aAClC;YAED,QACE,OAAO,CAAC,CAAC,CAAC,EACV;gBACA,KAAK,GAAG;oBACN,CAAC,IAAI,OAAO,CAAC,CAAC,CAAW,CAAC;oBAC1B,CAAC,IAAI,OAAO,CAAC,CAAC,CAAW,CAAC;oBAC1B,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1B,MAAM;gBAER,KAAK,GAAG;oBACN,CAAC,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBACzB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1B,MAAM;gBAER,KAAK,GAAG;oBACN,CAAC,IAAI,OAAO,CAAC,CAAC,CAAW,CAAC;oBAC1B,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1B,MAAM;gBAER,KAAK,GAAG;oBACN,CAAC,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1B,MAAM;gBAER,KAAK,GAAG;oBACN,CAAC,IAAI,OAAO,CAAC,CAAC,CAAW,CAAC;oBAC1B,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1B,MAAM;gBAER,KAAK,GAAG;oBACN,CAAC,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1B,MAAM;gBAER,KAAK,GAAG;oBACN,CAAC,IAAI,OAAO,CAAC,CAAC,CAAW,CAAC;oBAC1B,CAAC,IAAI,OAAO,CAAC,CAAC,CAAW,CAAC;oBAC1B,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1B,MAAM;gBAER,KAAK,GAAG;oBACN,CAAC,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBACzB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1B,MAAM;gBAER,KAAK,GAAG;oBACN,KAAK,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBACnC,KAAK,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBACnC,QAAQ,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBACtC,QAAQ,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBACtC,IAAI,CAAC,aAAa,CAChB,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,GAAG,CAAC,EAC9B,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,GAAG,CAAC,EAC9B,QAAQ,GAAG,CAAC,EACZ,QAAQ,GAAG,CAAC,EACZ,KAAK,GAAG,CAAC,EACT,KAAK,GAAG,CAAC,CACV,CAAC;oBACF,CAAC,GAAG,KAAK,CAAC;oBACV,CAAC,GAAG,KAAK,CAAC;oBACV,MAAM;gBAER,KAAK,GAAG;oBACN,CAAC,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBACzB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBACzB,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBAChC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBAChC,IAAI,CAAC,aAAa,CACf,OAAO,CAAC,CAAC,CAAY,GAAG,CAAC,EACzB,OAAO,CAAC,CAAC,CAAY,GAAG,CAAC,EAC1B,QAAQ,GAAG,CAAC,EACZ,QAAQ,GAAG,CAAC,EACZ,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,CAAC,CACN,CAAC;oBACF,MAAM;gBAER,KAAK,GAAG;oBAEN,KAAK,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBACnC,KAAK,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBAEnC,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;oBAC5B,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;oBAC5B,IAAI,CAAC,aAAa,CAChB,QAAQ,GAAG,CAAC,EACZ,QAAQ,GAAG,CAAC,EACZ,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,GAAG,CAAC,EAC9B,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,GAAG,CAAC,EAC9B,KAAK,GAAG,CAAC,EACT,KAAK,GAAG,CAAC,CACV,CAAC;oBAMF,QAAQ,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBACtC,QAAQ,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBAEtC,CAAC,GAAG,KAAK,CAAC;oBACV,CAAC,GAAG,KAAK,CAAC;oBACV,MAAM;gBAER,KAAK,GAAG;oBACN,KAAK,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBAC7B,KAAK,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBAE7B,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;oBAC5B,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;oBAC5B,IAAI,CAAC,aAAa,CAChB,QAAQ,GAAG,CAAC,EACZ,QAAQ,GAAG,CAAC,EACX,OAAO,CAAC,CAAC,CAAY,GAAG,CAAC,EACzB,OAAO,CAAC,CAAC,CAAY,GAAG,CAAC,EAC1B,KAAK,GAAG,CAAC,EACT,KAAK,GAAG,CAAC,CACV,CAAC;oBACF,CAAC,GAAG,KAAK,CAAC;oBACV,CAAC,GAAG,KAAK,CAAC;oBAKV,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBAChC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBAEhC,MAAM;gBAER,KAAK,GAAG;oBAEN,KAAK,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBACnC,KAAK,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBAEnC,QAAQ,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBACtC,QAAQ,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBAEtC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBACxE,CAAC,GAAG,KAAK,CAAC;oBACV,CAAC,GAAG,KAAK,CAAC;oBACV,MAAM;gBAER,KAAK,GAAG;oBACN,KAAK,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBAC7B,KAAK,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBAE7B,IAAI,CAAC,gBAAgB,CAAE,OAAO,CAAC,CAAC,CAAY,GAAG,CAAC,EAAG,OAAO,CAAC,CAAC,CAAY,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBACpG,CAAC,GAAG,KAAK,CAAC;oBACV,CAAC,GAAG,KAAK,CAAC;oBACV,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBAChC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBAChC,MAAM;gBAER,KAAK,GAAG;oBAEN,KAAK,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBACnC,KAAK,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBAEnC,IAAK,QAAS,CAAC,CAAC,CAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;wBAGrD,QAAQ,GAAG,CAAC,CAAC;wBACb,QAAQ,GAAG,CAAC,CAAC;qBACd;yBAAM,IAAI,QAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;wBAE/B,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAI,YAAuB,CAAC;wBAC5C,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAI,YAAuB,CAAC;qBAC7C;yBAAM,IAAI,QAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;wBAE/B,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;wBAC5B,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;qBAC7B;oBAED,YAAY,GAAG,QAAQ,CAAC;oBACxB,YAAY,GAAG,QAAQ,CAAC;oBAExB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBACxE,CAAC,GAAG,KAAK,CAAC;oBACV,CAAC,GAAG,KAAK,CAAC;oBACV,QAAQ,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBACtC,QAAQ,GAAG,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;oBACtC,MAAM;gBAER,KAAK,GAAG;oBACN,KAAK,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBAC7B,KAAK,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBAG7B,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;oBAC5B,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;oBAC5B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBACxE,CAAC,GAAG,KAAK,CAAC;oBACV,CAAC,GAAG,KAAK,CAAC;oBACV,MAAM;gBAER,KAAK,GAAG;oBACN,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;wBAC1B,OAAO,CAAC,CAAC,CAAW;wBACpB,OAAO,CAAC,CAAC,CAAW;wBACpB,OAAO,CAAC,CAAC,CAAW;wBACpB,OAAO,CAAC,CAAC,CAAW;wBACpB,OAAO,CAAC,CAAC,CAAW;wBACnB,OAAO,CAAC,CAAC,CAAY,GAAG,CAAC,GAAG,CAAC;wBAC7B,OAAO,CAAC,CAAC,CAAY,GAAG,CAAC,GAAG,CAAC;qBAC/B,CAAC,CAAC;oBACH,CAAC,IAAI,OAAO,CAAC,CAAC,CAAW,CAAC;oBAC1B,CAAC,IAAI,OAAO,CAAC,CAAC,CAAW,CAAC;oBAC1B,MAAM;gBAER,KAAK,GAAG;oBACN,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;wBAC1B,OAAO,CAAC,CAAC,CAAW;wBACpB,OAAO,CAAC,CAAC,CAAW;wBACpB,OAAO,CAAC,CAAC,CAAW;wBACpB,OAAO,CAAC,CAAC,CAAW;wBACpB,OAAO,CAAC,CAAC,CAAW;wBACnB,OAAO,CAAC,CAAC,CAAY,GAAG,CAAC;wBACzB,OAAO,CAAC,CAAC,CAAY,GAAG,CAAC;qBAC3B,CAAC,CAAC;oBACH,CAAC,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBACzB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;oBACzB,MAAM;gBAER,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG;oBACN,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,MAAM;aACT;YACD,QAAQ,GAAG,OAAO,CAAC;SACpB;IACH,CAAC;IAES,eAAe,CAAC,WAA0B,EAAE,IAAY,CAAC,EAAE,IAAY,CAAC,EAAE,KAAa,CAAC,EAAE,KAAa,CAAC;QAChH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;YAC9C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAiB,CAAC,CAAC;YAC1E,OAAO;SACR;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;YACtD,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,EAAiB,CAAC;YAEtD,QACE,OAAO,CAAC,CAAC,CAAC,EACV;gBACA,KAAK,cAAc,CAAC,CAAC;oBACnB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC5C,MAAM;gBAER,KAAK,cAAc,CAAC,CAAC;oBACnB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC5C,MAAM;gBAER,KAAK,cAAc,CAAC,CAAC;oBACnB,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBACnD,MAAM;gBAER,KAAK,cAAc,CAAC,CAAC;oBACnB,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBACtD,MAAM;gBAER,KAAK,cAAc,CAAC,CAAC;oBACnB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC3C,MAAM;gBACR,KAAK,cAAc,CAAC,CAAC;oBACnB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC7C,MAAM;gBACR,KAAK,cAAc,CAAC,CAAC;oBACnB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC1C,MAAM;gBACR,KAAK,cAAc,CAAC,EAAE;oBACpB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC3C,MAAM;gBACR,KAAK,cAAc,CAAC,CAAC;oBACnB,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,MAAM;aACT;SACF;IACH,CAAC;IACO,aAAa;QACnB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAA0C,CAAC,CAAC;IACvF,CAAC;IAED,OAAO;QACL,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,SAAS;QACP,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,MAAM,EAAE;YACvC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACxB,OAAO,CAAC,CAAC;aACV;YACD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACjD,OAAO,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC/B;aAAM,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,GAAG,EAAE;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACxB,OAAO,CAAC,CAAC;aACV;YACD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACjD,OAAO,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC/B;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,CAAS;QACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,QAAQ,CAAC;SACjB;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;gBACrB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACxB;SACF;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SAC1C;QACD,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,KAAqB,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,IAAI,GAAG,EAAE,IAAI,QAAQ,EAAE;gBACzB,MAAM;aACP;iBAAM;gBACL,IAAI,IAAI,EAAE,CAAC;aACZ;SACF;QACD,MAAM,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAClC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,iBAAiB,CAAC,GAAY,EAAE,IAAY,EAAE,CAAS,EAAE,CAAS,EAAE,SAAiB;QACnF,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC;QAC9C,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,OAAO,GAAG,EAAE,IAAI,QAAQ,EAAE;gBAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;aACtC;iBAAM;gBACL,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACnD,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC3C,MAAM;aACP;YACD,OAAO,IAAI,EAAE,CAAC;SACf;IACH,CAAC;CACF;AAED,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAExC,SAAS,KAAK,CAAC,OAAuB,EAAE,EAAU,EAAE,EAAU;IAC5D,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE;QAC1B,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;QACtC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;QACtC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;QAC/B,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;QAC/B,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;QAC/B,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;QACtC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;KACvC;SAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE;QACjC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;KACvC;SAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE;QACjC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;KACvC;SAAM;QACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;YAC9C,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAI,OAAO,CAAC,CAAC,CAAY,CAAC;SAC5D;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC","file":"custom-path2d.js","sourcesContent":["import { BoundsContext } from './bounds-context';\nimport type { CommandStrType, CommandType, ICurve, ICustomPath2D, IDirection, ILine, IPath2D } from '../interface';\nimport { CurvePath } from './segment/curve/path';\nimport { enumCommandMap, parseSvgPath } from './path-svg';\nimport type { IPoint, IPointLike } from '@visactor/vutils';\nimport { abs } from '@visactor/vutils';\nimport { Direction } from './enums';\nimport { drawArc, addArcToBezierPath } from './shape/arc';\nimport { renderCommandList } from './render-command-list';\nimport { calcLineCache, CurveContext } from './segment';\n\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n// 基于d3-shape重构\n// https://github.com/vega/vega/blob/master/packages/vega-scenegraph/src/path/render.js\n\nexport class CustomPath2D extends CurvePath implements ICustomPath2D {\n commandList: CommandType[] = [];\n _boundsContext: IPath2D;\n _ctx?: IPath2D;\n direction?: IDirection;\n protected transformCbList?: ((cmd: CommandType, x: number, y: number, sx: number, sy: number) => void)[];\n protected toStringCbList?: ((cmd: CommandType) => string)[];\n\n constructor(ctx?: IPath2D) {\n super();\n if (ctx) {\n this._ctx = ctx;\n }\n this._boundsContext = new BoundsContext(this.bounds);\n }\n\n get curves(): ICurve<IPoint>[] {\n return this.tryBuildCurves();\n }\n\n setCtx(ctx?: IPath2D) {\n this._ctx = ctx;\n }\n\n moveTo(x: number, y: number) {\n this.commandList.push([enumCommandMap.M, x, y]);\n this._ctx && this._ctx.moveTo(x, y);\n return this;\n }\n lineTo(x: number, y: number) {\n this.commandList.push([enumCommandMap.L, x, y]);\n this._ctx && this._ctx.lineTo(x, y);\n return this;\n }\n quadraticCurveTo(aCPx: number, aCPy: number, aX: number, aY: number) {\n this.commandList.push([enumCommandMap.Q, aCPx, aCPy, aX, aY]);\n this._ctx && this._ctx.quadraticCurveTo(aCPx, aCPy, aX, aY);\n return this;\n }\n bezierCurveTo(aCP1x: number, aCP1y: number, aCP2x: number, aCP2y: number, aX: number, aY: number) {\n this.commandList.push([enumCommandMap.C, aCP1x, aCP1y, aCP2x, aCP2y, aX, aY]);\n this._ctx && this._ctx.bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY);\n return this;\n }\n arcTo(aX1: number, aY1: number, aX2: number, aY2: number, aRadius: number) {\n this.commandList.push([enumCommandMap.AT, aX1, aY1, aX2, aY2, aRadius]);\n this._ctx && this._ctx.arcTo(aX1, aY1, aX2, aY2, aRadius);\n return this;\n }\n ellipse(\n aX: number,\n aY: number,\n xRadius: number,\n yRadius: number,\n aRotation: number,\n aStartAngle: number,\n aEndAngle: number,\n aClockwise: boolean\n ) {\n this.commandList.push([enumCommandMap.E, aX, aY, xRadius, yRadius, aRotation, aStartAngle, aEndAngle, aClockwise]);\n this._ctx && this._ctx.ellipse(aX, aY, xRadius, yRadius, aRotation, aStartAngle, aEndAngle, aClockwise);\n return this;\n }\n rect(x: number, y: number, w: number, h: number) {\n this.commandList.push([enumCommandMap.R, x, y, w, h]);\n this._ctx && this._ctx.rect(x, y, w, h);\n return this;\n }\n arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean) {\n this.commandList.push([enumCommandMap.A, x, y, radius, startAngle, endAngle, counterclockwise]);\n this._ctx && this._ctx.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n closePath() {\n this.commandList.push([enumCommandMap.Z]);\n this._ctx && this._ctx.closePath();\n return this;\n }\n\n addCurve(curve: ICurve<IPoint>) {\n this._curves.push(curve);\n // todo parse curve\n }\n clear() {\n this.transformCbList = null;\n this.commandList.length = 0;\n this._curves.length = 0;\n }\n\n beginPath() {\n this.clear();\n }\n\n // 默认不创建curves,获取curves的时候动态生成\n tryBuildCurves() {\n if (!(this._curves && this._curves.length)) {\n const curveContext = new CurveContext(this);\n renderCommandList(this.commandList, curveContext, 0, 0, 1, 1);\n }\n return this._curves;\n }\n\n toString(): string {\n if (!this.toStringCbList) {\n const list: ((cmd: CommandType) => string)[] = [];\n list[enumCommandMap.M] = (cmd: CommandType) => `M${cmd[1]} ${cmd[2]}`;\n list[enumCommandMap.L] = (cmd: CommandType) => `L${cmd[1]} ${cmd[2]}`;\n list[enumCommandMap.Q] = (cmd: CommandType) => `Q${cmd[1]} ${cmd[2]} ${cmd[3]} ${cmd[4]}`;\n list[enumCommandMap.C] = (cmd: CommandType) => `C${cmd[1]} ${cmd[2]} ${cmd[3]} ${cmd[4]} ${cmd[5]} ${cmd[6]}`;\n list[enumCommandMap.A] = (cmd: CommandType) => {\n const bezierPathList: number[] = [];\n addArcToBezierPath(\n bezierPathList,\n cmd[4] as number,\n cmd[5] as number,\n cmd[1] as number,\n cmd[2] as number,\n cmd[3] as number,\n cmd[3] as number\n );\n let path = '';\n for (let i = 0; i < bezierPathList.length; i += 6) {\n path += `C${bezierPathList[i]} ${bezierPathList[i + 1]} ${bezierPathList[i + 2]} ${bezierPathList[i + 3]} ${\n bezierPathList[i + 4]\n } ${bezierPathList[i + 5]}`;\n }\n return path;\n };\n // list[enumCommandMap.AT] = this.arcToTransform;\n // list[enumCommandMap.E] = this.ellipseTransform;\n list[enumCommandMap.R] = (cmd: CommandType) => `M${cmd[1]} ${cmd[2]} h${cmd[3]} v${cmd[4]} H${cmd[1]}Z`;\n // list[enumCommandMap.A] = this.arcTransform;\n list[enumCommandMap.Z] = (cmd: CommandType) => `Z`;\n this.toStringCbList = list;\n }\n\n const list = this.toStringCbList;\n let path = '';\n this.commandList.forEach(c => {\n path += list[c[0]](c);\n });\n return path;\n }\n\n fromString(str: string, x?: number, y?: number, sX?: number, sY?: number) {\n this.clear();\n\n // 解析path字符串\n const commandStrList = parseSvgPath(str) as CommandStrType[]; // TODO: 目前正则性能较差,后续需要加上回调函数供用户直接操作绘图命令\n this._runCommandStrList(commandStrList, x, y, sX, sY);\n\n // 更新bounds\n this._updateBounds();\n return this;\n }\n fromLine(line: ILine) {\n const { points, curveType, clipRangeByDimension } = line.attribute;\n if (!points) {\n return;\n }\n const cache = calcLineCache(points, curveType);\n if (clipRangeByDimension === 'x') {\n this.direction = Direction.ROW;\n } else if (clipRangeByDimension === 'y') {\n this.direction = Direction.COLUMN;\n } else if (clipRangeByDimension === 'auto') {\n this.direction = cache.direction;\n }\n this._curves = cache.curves;\n }\n fromCustomPath2D(path: ICustomPath2D, x?: number, y?: number, sX?: number, sY?: number) {\n this.clear();\n this._runCommandList(path.commandList as CommandType[], x, y, sX, sY);\n\n // 更新bounds\n this._updateBounds();\n return this;\n }\n transform(x: number, y: number, sx: number, sy: number) {\n const commandList = this.commandList;\n if (!this.transformCbList) {\n const list: ((cmd: CommandType, x: number, y: number, sx: number, sy: number) => void)[] = [];\n list[enumCommandMap.M] = this.moveToTransform;\n list[enumCommandMap.L] = this.lineToTransform;\n list[enumCommandMap.Q] = this.quadraticCurveToTransform;\n list[enumCommandMap.C] = this.bezierCurveToTransform;\n list[enumCommandMap.AT] = this.arcToTransform;\n list[enumCommandMap.E] = this.ellipseTransform;\n list[enumCommandMap.R] = this.rectTransform;\n list[enumCommandMap.A] = this.arcTransform;\n list[enumCommandMap.Z] = this.closePathTransform;\n this.transformCbList = list;\n }\n commandList.forEach(cmd => {\n this.transformCbList[cmd[0]](cmd, x, y, sx, sy);\n });\n this._updateBounds();\n }\n\n protected moveToTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n }\n protected lineToTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n }\n protected quadraticCurveToTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = (cmd[3] as number) * sx + x;\n cmd[4] = (cmd[4] as number) * sy + y;\n }\n protected bezierCurveToTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = (cmd[3] as number) * sx + x;\n cmd[4] = (cmd[4] as number) * sy + y;\n cmd[5] = (cmd[5] as number) * sx + x;\n cmd[6] = (cmd[6] as number) * sy + y;\n }\n arcToTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = (cmd[3] as number) * sx + x;\n cmd[4] = (cmd[4] as number) * sy + y;\n cmd[5] = ((cmd[5] as number) * (sx + sy)) / 2;\n }\n ellipseTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = (cmd[3] as number) * sx;\n cmd[4] = (cmd[4] as number) * sy;\n }\n rectTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = (cmd[3] as number) * sx;\n cmd[4] = (cmd[4] as number) * sy;\n }\n arcTransform(cmd: CommandType, x: number, y: number, sx: number, sy: number) {\n cmd[1] = (cmd[1] as number) * sx + x;\n cmd[2] = (cmd[2] as number) * sy + y;\n cmd[3] = ((cmd[3] as number) * (sx + sy)) / 2;\n }\n closePathTransform() {\n return;\n }\n protected _runCommandStrList(\n commandStrList: CommandStrType[],\n l: number = 0,\n t: number = 0,\n sX: number = 1,\n sY: number = 1\n ) {\n let current; // current instruction\n let previous = null;\n let x = 0; // current x\n let y = 0; // current y\n // let sX = 0;\n // let sY = 0;\n let controlX = 0; // current control point x\n let controlY = 0; // current control point y\n let tempX;\n let tempY;\n let tempControlX;\n let tempControlY;\n\n // if (isNil(l)) l = 0;\n // if (isNil(t)) t = 0;\n // if (isNil(sX)) sX = 1;\n // if (isNil(sY)) sY = sX;\n\n for (let i = 0, len = commandStrList.length; i < len; ++i) {\n current = commandStrList[i];\n if (sX !== 1 || sY !== 1) {\n current = scale(current, sX, sY);\n }\n\n switch (\n current[0] // first letter\n ) {\n case 'l': // lineto, relative\n x += current[1] as number;\n y += current[2] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'L': // lineto, absolute\n x = current[1] as number;\n y = current[2] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'h': // horizontal lineto, relative\n x += current[1] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'H': // horizontal lineto, absolute\n x = current[1] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'v': // vertical lineto, relative\n y += current[1] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'V': // verical lineto, absolute\n y = current[1] as number;\n this.lineTo(x + l, y + t);\n break;\n\n case 'm': // moveTo, relative\n x += current[1] as number;\n y += current[2] as number;\n this.moveTo(x + l, y + t);\n break;\n\n case 'M': // moveTo, absolute\n x = current[1] as number;\n y = current[2] as number;\n this.moveTo(x + l, y + t);\n break;\n\n case 'c': // bezierCurveTo, relative\n tempX = x + (current[5] as number);\n tempY = y + (current[6] as number);\n controlX = x + (current[3] as number);\n controlY = y + (current[4] as number);\n this.bezierCurveTo(\n x + (current[1] as number) + l, // x1\n y + (current[2] as number) + t, // y1\n controlX + l, // x2\n controlY + t, // y2\n tempX + l,\n tempY + t\n );\n x = tempX;\n y = tempY;\n break;\n\n case 'C': // bezierCurveTo, absolute\n x = current[5] as number;\n y = current[6] as number;\n controlX = current[3] as number;\n controlY = current[4] as number;\n this.bezierCurveTo(\n (current[1] as number) + l,\n (current[2] as number) + t,\n controlX + l,\n controlY + t,\n x + l,\n y + t\n );\n break;\n\n case 's': // shorthand cubic bezierCurveTo, relative\n // transform to absolute x,y\n tempX = x + (current[3] as number);\n tempY = y + (current[4] as number);\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n this.bezierCurveTo(\n controlX + l,\n controlY + t,\n x + (current[1] as number) + l,\n y + (current[2] as number) + t,\n tempX + l,\n tempY + t\n );\n\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = x + (current[1] as number);\n controlY = y + (current[2] as number);\n\n x = tempX;\n y = tempY;\n break;\n\n case 'S': // shorthand cubic bezierCurveTo, absolute\n tempX = current[3] as number;\n tempY = current[4] as number;\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n this.bezierCurveTo(\n controlX + l,\n controlY + t,\n (current[1] as number) + l,\n (current[2] as number) + t,\n tempX + l,\n tempY + t\n );\n x = tempX;\n y = tempY;\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = current[1] as number;\n controlY = current[2] as number;\n\n break;\n\n case 'q': // quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + (current[3] as number);\n tempY = y + (current[4] as number);\n\n controlX = x + (current[1] as number);\n controlY = y + (current[2] as number);\n\n this.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n tempX = current[3] as number;\n tempY = current[4] as number;\n\n this.quadraticCurveTo((current[1] as number) + l, (current[2] as number) + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = current[1] as number;\n controlY = current[2] as number;\n break;\n\n case 't': // shorthand quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + (current[1] as number);\n tempY = y + (current[2] as number);\n\n if ((previous![0] as string).match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else if (previous![0] === 't') {\n // calculate reflection of previous control points for t\n controlX = 2 * x - (tempControlX as number);\n controlY = 2 * y - (tempControlY as number);\n } else if (previous![0] === 'q') {\n // calculate reflection of previous control points for q\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n tempControlX = controlX;\n tempControlY = controlY;\n\n this.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = x + (current[1] as number);\n controlY = y + (current[2] as number);\n break;\n\n case 'T':\n tempX = current[1] as number;\n tempY = current[2] as number;\n\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n this.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'a':\n drawArc(this, x + l, y + t, [\n current[1] as number,\n current[2] as number,\n current[3] as number,\n current[4] as number,\n current[5] as number,\n (current[6] as number) + x + l,\n (current[7] as number) + y + t\n ]);\n x += current[6] as number;\n y += current[7] as number;\n break;\n\n case 'A':\n drawArc(this, x + l, y + t, [\n current[1] as number,\n current[2] as number,\n current[3] as number,\n current[4] as number,\n current[5] as number,\n (current[6] as number) + l,\n (current[7] as number) + t\n ]);\n x = current[6] as number;\n y = current[7] as number;\n break;\n\n case 'z':\n case 'Z':\n this.closePath();\n break;\n }\n previous = current;\n }\n }\n\n protected _runCommandList(commandList: CommandType[], l: number = 0, t: number = 0, sX: number = 1, sY: number = 1) {\n if (l === 0 && t === 0 && sX === 1 && sY === 1) {\n this.commandList = commandList.map(entry => entry.slice() as CommandType);\n return;\n }\n\n for (let i = 0, len = commandList.length; i < len; ++i) {\n const current = commandList[i].slice() as CommandType;\n\n switch (\n current[0] // first letter\n ) {\n case enumCommandMap.L:\n this.lineToTransform(current, l, t, sX, sY);\n break;\n\n case enumCommandMap.M:\n this.moveToTransform(current, l, t, sX, sY);\n break;\n\n case enumCommandMap.C:\n this.bezierCurveToTransform(current, l, t, sX, sY);\n break;\n\n case enumCommandMap.Q:\n this.quadraticCurveToTransform(current, l, t, sX, sY);\n break;\n\n case enumCommandMap.A:\n this.arcToTransform(current, l, t, sX, sY);\n break;\n case enumCommandMap.E:\n this.ellipseTransform(current, l, t, sX, sY);\n break;\n case enumCommandMap.R:\n this.rectTransform(current, l, t, sX, sY);\n break;\n case enumCommandMap.AT:\n this.arcToTransform(current, l, t, sX, sY);\n break;\n case enumCommandMap.Z:\n this.closePath();\n break;\n }\n }\n }\n private _updateBounds() {\n this.bounds.clear();\n renderCommandList(this.commandList, this._boundsContext as unknown as ICustomPath2D);\n }\n\n release(): void {\n this.commandList = [];\n this._boundsContext = null;\n this._ctx = null;\n }\n\n getLength(): number {\n if (this.direction === Direction.COLUMN) {\n if (!this._curves.length) {\n return 0;\n }\n const sc = this._curves[0];\n const ec = this._curves[this._curves.length - 1];\n return abs(sc.p0.y - ec.p1.y);\n } else if (this.direction === Direction.ROW) {\n if (!this._curves.length) {\n return 0;\n }\n const sc = this._curves[0];\n const ec = this._curves[this._curves.length - 1];\n return abs(sc.p0.x - ec.p1.x);\n }\n return this._curves.reduce((l, c) => l + c.getLength(), 0);\n }\n\n getYAt(x: number): number {\n if (!this.curves) {\n return Infinity;\n }\n for (let i = 0; i < this.curves.length; i++) {\n const curve = this.curves[i];\n if (curve.includeX(x)) {\n return curve.getYAt(x);\n }\n }\n return Infinity;\n }\n\n getAttrAt(distance: number): { pos: IPointLike; angle: number } {\n if (!this._curves) {\n return { pos: { x: 0, y: 0 }, angle: 0 };\n }\n let _dis = 0;\n let curve: ICurve<IPoint>;\n for (let i = 0; i < this._curves.length; i++) {\n curve = this._curves[i];\n const cl = curve.getLength(this.direction);\n if (_dis + cl >= distance) {\n break;\n } else {\n _dis += cl;\n }\n }\n const t = (distance - _dis) / curve.getLength(this.direction);\n const pos = curve.getPointAt(t);\n const angle = curve.getAngleAt(t);\n return { pos, angle };\n }\n\n drawWithClipRange(ctx: IPath2D, size: number, x: number, y: number, clipRange: number) {\n this.tryBuildCurves();\n const totalLen = this.getLength() * clipRange;\n let currLen = 0;\n for (let i = 0; i < this._curves.length; i++) {\n const curve = this._curves[i];\n const cl = curve.getLength(this.direction);\n if (currLen + cl <= totalLen) {\n curve.draw(ctx, x, y, size, size, 1);\n } else {\n const percent = 1 - (currLen + cl - totalLen) / cl;\n curve.draw(ctx, x, y, size, size, percent);\n break;\n }\n currLen += cl;\n }\n }\n}\n\nconst temp = ['l', 0, 0, 0, 0, 0, 0, 0];\n\nfunction scale(current: CommandStrType, sX: number, sY: number) {\n const c = (temp[0] = current[0]);\n if (c === 'a' || c === 'A') {\n temp[1] = sX * (current[1] as number);\n temp[2] = sY * (current[2] as number);\n temp[3] = current[3] as number;\n temp[4] = current[4] as number;\n temp[5] = current[5] as number;\n temp[6] = sX * (current[6] as number);\n temp[7] = sY * (current[7] as number);\n } else if (c === 'h' || c === 'H') {\n temp[1] = sX * (current[1] as number);\n } else if (c === 'v' || c === 'V') {\n temp[1] = sY * (current[1] as number);\n } else {\n for (let i = 1, n = current.length; i < n; ++i) {\n temp[i] = (i % 2 === 1 ? sX : sY) * (current[i] as number);\n }\n }\n return temp;\n}\n"]}
@@ -4,4 +4,8 @@ export declare function drawAreaSegments(path: IPath2D, segPath: IAreaCacheItem,
4
4
  offsetY?: number;
5
5
  offsetZ?: number;
6
6
  direction?: IDirection;
7
+ drawConnect?: boolean;
8
+ mode?: 'none' | 'connect' | 'zero';
9
+ zeroX?: number;
10
+ zeroY?: number;
7
11
  }): void;
@@ -10,18 +10,44 @@ import { drawSegItem } from "./render-utils";
10
10
 
11
11
  export function drawAreaSegments(path, segPath, percent, params) {
12
12
  var _a;
13
+ const {drawConnect: drawConnect = !1, mode: mode = "none"} = params || {};
14
+ if (drawConnect && "none" === mode) return;
13
15
  const {top: top, bottom: bottom} = segPath;
14
16
  if (top.curves.length !== bottom.curves.length) return;
15
17
  if (percent >= 1) {
16
18
  const topList = [], bottomList = [];
17
19
  let lastDefined = !0;
18
- for (let i = 0, n = top.curves.length; i < n; i++) {
19
- const topCurve = top.curves[i];
20
- lastDefined !== topCurve.defined ? (lastDefined ? (drawAreaBlock(path, topList, bottomList, params),
21
- topList.length = 0, bottomList.length = 0) : (topList.push(topCurve), bottomList.push(bottom.curves[n - i - 1])),
22
- lastDefined = !lastDefined) : lastDefined && (topList.push(topCurve), bottomList.push(bottom.curves[n - i - 1]));
20
+ if (drawConnect) {
21
+ let lastCurve, lastBottomCurve, defined0 = !0;
22
+ const n = top.curves.length;
23
+ top.curves.forEach(((curve, i) => {
24
+ const bototmCurve = bottom.curves[n - i - 1];
25
+ let currentTopCurve = curve, currentBottomCurve = bototmCurve;
26
+ if (curve.originP1 === curve.originP2) return lastCurve = curve, void (lastBottomCurve = bototmCurve);
27
+ if (lastCurve && lastCurve.originP1 === lastCurve.originP2 && (currentTopCurve = lastCurve,
28
+ currentBottomCurve = lastBottomCurve), curve.defined) defined0 || (topList.push(currentTopCurve),
29
+ bottomList.push(currentBottomCurve), drawAreaConnectBlock(path, topList, bottomList, params),
30
+ topList.length = 0, bottomList.length = 0, defined0 = !defined0); else {
31
+ const {originP1: originP1, originP2: originP2} = curve;
32
+ let validTopCurve, validBottomCurve;
33
+ originP1 && !1 !== originP1.defined ? (validTopCurve = currentTopCurve, validBottomCurve = currentBottomCurve) : originP1 && !1 !== originP2.defined && (validTopCurve = curve,
34
+ validBottomCurve = bototmCurve), defined0 ? (defined0 = !defined0, topList.push(validTopCurve || curve),
35
+ bottomList.push(validBottomCurve || bototmCurve)) : validTopCurve && (defined0 = !defined0,
36
+ topList.push(validTopCurve || curve), bottomList.push(validBottomCurve || bototmCurve),
37
+ drawAreaConnectBlock(path, topList, bottomList, params), topList.length = 0, bottomList.length = 0);
38
+ }
39
+ lastCurve = curve;
40
+ })), drawAreaConnectBlock(path, topList, bottomList, params);
41
+ } else {
42
+ for (let i = 0, n = top.curves.length; i < n; i++) {
43
+ const topCurve = top.curves[i];
44
+ lastDefined !== topCurve.defined ? (lastDefined ? (drawAreaBlock(path, topList, bottomList, params),
45
+ topList.length = 0, bottomList.length = 0) : (topList.push(topCurve), bottomList.push(bottom.curves[n - i - 1])),
46
+ lastDefined = !lastDefined) : lastDefined && (topList.push(topCurve), bottomList.push(bottom.curves[n - i - 1]));
47
+ }
48
+ drawAreaBlock(path, topList, bottomList, params);
23
49
  }
24
- return void drawAreaBlock(path, topList, bottomList, params);
50
+ return;
25
51
  }
26
52
  if (percent <= 0) return;
27
53
  let {direction: direction} = params || {};
@@ -31,20 +57,54 @@ export function drawAreaSegments(path, segPath, percent, params) {
31
57
  const totalDrawLength = percent * (direction === Direction.ROW ? xTotalLength : yTotalLength);
32
58
  let drawedLengthUntilLast = 0, lastDefined = !0;
33
59
  const topList = [], bottomList = [];
60
+ let lastTopCurve, lastBottomCurve, defined0 = !0;
34
61
  for (let i = 0, n = top.curves.length; i < n; i++) {
35
62
  const topCurve = top.curves[i], curCurveLength = topCurve.getLength(direction), percent = (totalDrawLength - drawedLengthUntilLast) / curCurveLength;
36
63
  if (percent < 0) break;
37
- drawedLengthUntilLast += curCurveLength;
38
- let tc = null, bc = null;
39
- lastDefined !== topCurve.defined ? (lastDefined ? (drawAreaBlock(path, topList, bottomList, params),
40
- topList.length = 0, bottomList.length = 0) : (tc = topCurve, bc = bottom.curves[n - i - 1]),
41
- lastDefined = !lastDefined) : lastDefined && (tc = topCurve, bc = bottom.curves[n - i - 1]),
42
- tc && bc && (percent < 1 && (tc = tc.p2 && tc.p3 ? divideCubic(tc, percent)[0] : divideLinear(tc, percent)[0],
43
- bc = bc.p2 && bc.p3 ? divideCubic(bc, 1 - percent)[1] : divideLinear(bc, 1 - percent)[1]),
44
- tc.defined = lastDefined, bc.defined = lastDefined, topList.push(tc), bottomList.push(bc)),
45
- tc = null, bc = null;
64
+ if (drawedLengthUntilLast += curCurveLength, drawConnect) {
65
+ const bototmCurve = bottom.curves[n - i - 1];
66
+ let currentTopCurve = topCurve, currentBottomCurve = bototmCurve;
67
+ if (topCurve.originP1 === topCurve.originP2) {
68
+ lastTopCurve = topCurve, lastBottomCurve = bototmCurve;
69
+ continue;
70
+ }
71
+ if (lastTopCurve && lastTopCurve.originP1 === lastTopCurve.originP2 && (currentTopCurve = lastTopCurve,
72
+ currentBottomCurve = lastBottomCurve), topCurve.defined) defined0 || (topList.push(currentTopCurve),
73
+ bottomList.push(currentBottomCurve), drawAreaConnectBlock(path, topList, bottomList, params),
74
+ topList.length = 0, bottomList.length = 0, defined0 = !defined0); else {
75
+ const {originP1: originP1, originP2: originP2} = topCurve;
76
+ let validTopCurve, validBottomCurve;
77
+ originP1 && !1 !== originP1.defined ? (validTopCurve = currentTopCurve, validBottomCurve = currentBottomCurve) : originP1 && !1 !== originP2.defined && (validTopCurve = topCurve,
78
+ validBottomCurve = bototmCurve), defined0 ? (defined0 = !defined0, topList.push(validTopCurve || topCurve),
79
+ bottomList.push(validBottomCurve || bototmCurve)) : validTopCurve && (defined0 = !defined0,
80
+ topList.push(validTopCurve || topCurve), bottomList.push(validBottomCurve || bototmCurve),
81
+ drawAreaConnectBlock(path, topList, bottomList, params), topList.length = 0, bottomList.length = 0);
82
+ }
83
+ lastTopCurve = topCurve;
84
+ } else {
85
+ let tc = null, bc = null;
86
+ lastDefined !== topCurve.defined ? (lastDefined ? (drawAreaBlock(path, topList, bottomList, params),
87
+ topList.length = 0, bottomList.length = 0) : (tc = topCurve, bc = bottom.curves[n - i - 1]),
88
+ lastDefined = !lastDefined) : lastDefined && (tc = topCurve, bc = bottom.curves[n - i - 1]),
89
+ tc && bc && (percent < 1 && (tc = tc.p2 && tc.p3 ? divideCubic(tc, percent)[0] : divideLinear(tc, percent)[0],
90
+ bc = bc.p2 && bc.p3 ? divideCubic(bc, 1 - percent)[1] : divideLinear(bc, 1 - percent)[1]),
91
+ tc.defined = lastDefined, bc.defined = lastDefined, topList.push(tc), bottomList.push(bc)),
92
+ tc = null, bc = null;
93
+ }
46
94
  }
47
- drawAreaBlock(path, topList, bottomList, params);
95
+ drawConnect ? drawAreaConnectBlock(path, topList, bottomList, params) : drawAreaBlock(path, topList, bottomList, params);
96
+ }
97
+
98
+ function drawAreaConnectBlock(path, topList, bottomList, params) {
99
+ if (topList.length < 2) return;
100
+ const {offsetX: offsetX = 0, offsetY: offsetY = 0, offsetZ: offsetZ = 0, mode: mode} = params || {};
101
+ let curve = topList[0];
102
+ path.moveTo(curve.p0.x + offsetX, curve.p0.y + offsetY, offsetZ), curve = topList[topList.length - 1];
103
+ let end = curve.p3 || curve.p1;
104
+ path.lineTo(end.x + offsetX, end.y + offsetY, offsetZ), curve = bottomList[bottomList.length - 1],
105
+ path.lineTo(curve.p0.x + offsetX, curve.p0.y + offsetY, offsetZ), curve = bottomList[0],
106
+ end = curve.p3 || curve.p1, path.lineTo(end.x + offsetX, end.y + offsetY, offsetZ),
107
+ path.closePath();
48
108
  }
49
109
 
50
110
  function drawAreaBlock(path, topList, bottomList, params) {
@@ -60,5 +120,4 @@ function drawAreaBlock(path, topList, bottomList, params) {
60
120
  drawSegItem(path, curve, 1, params), needMoveTo = !1) : needMoveTo = !0;
61
121
  }
62
122
  path.closePath();
63
- }
64
- //# sourceMappingURL=render-area.js.map
123
+ }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/render-area.ts"],"names":[],"mappings":"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","file":"render-area.js","sourcesContent":["import type { IPoint } from '@visactor/vutils';\nimport { abs } from '@visactor/vutils';\nimport type { IAreaCacheItem, ICubicBezierCurve, ICurve, IDirection, ILineCurve, IPath2D } from '../interface';\nimport { Direction } from './enums';\nimport { divideCubic } from './segment/curve/cubic-bezier';\nimport { divideLinear } from './segment/curve/line';\nimport { drawSegItem } from './render-utils';\n\n/**\n * 绘制连续的线段\n * 绘制长度为总长度percent的path,drawDirection为绘制的方向,也就是percent的方向\n * @param path\n * @param segPath\n * @param percent\n * @param drawDirection 绘制的方向,用于使用percent绘制\n * @param line 用于获取line相关属性\n */\nexport function drawAreaSegments(\n path: IPath2D,\n segPath: IAreaCacheItem,\n percent: number,\n params?: {\n offsetX?: number;\n offsetY?: number;\n offsetZ?: number;\n direction?: IDirection;\n }\n) {\n // let needMoveTo: boolean = true;\n const { top, bottom } = segPath;\n // 如果top和bottom的curves数量不同,那么就跳过\n if (top.curves.length !== bottom.curves.length) {\n return;\n }\n if (percent >= 1) {\n const topList: ICurve<IPoint>[] = [];\n const bottomList: ICurve<IPoint>[] = [];\n let lastDefined: boolean = true;\n for (let i = 0, n = top.curves.length; i < n; i++) {\n const topCurve = top.curves[i];\n if (lastDefined !== topCurve.defined) {\n if (lastDefined) {\n drawAreaBlock(path, topList, bottomList, params);\n topList.length = 0;\n bottomList.length = 0;\n } else {\n topList.push(topCurve);\n bottomList.push(bottom.curves[n - i - 1]);\n }\n lastDefined = !lastDefined;\n } else {\n if (lastDefined) {\n topList.push(topCurve);\n bottomList.push(bottom.curves[n - i - 1]);\n }\n }\n }\n drawAreaBlock(path, topList, bottomList, params);\n\n return;\n }\n if (percent <= 0) {\n return;\n }\n\n let { direction } = params || {};\n const { curves: topCurves } = top;\n const endP = topCurves[topCurves.length - 1].p3 ?? topCurves[topCurves.length - 1].p1;\n const xTotalLength = abs(endP.x - topCurves[0].p0.x);\n const yTotalLength = abs(endP.y - topCurves[0].p0.y);\n direction = direction ?? (xTotalLength > yTotalLength ? Direction.ROW : Direction.COLUMN);\n if (!Number.isFinite(xTotalLength)) {\n direction = Direction.COLUMN;\n }\n if (!Number.isFinite(yTotalLength)) {\n direction = Direction.ROW;\n }\n\n // x和y必须始终保持同方向\n // 整个线段的总长度(基于水平、垂直方向)\n const totalLength: number = direction === Direction.ROW ? xTotalLength : yTotalLength;\n\n // 总需要绘制的长度\n const totalDrawLength = percent * totalLength;\n // 直到上次绘制的长度\n let drawedLengthUntilLast = 0;\n let lastDefined: boolean = true;\n const topList: ICurve<IPoint>[] = [];\n const bottomList: ICurve<IPoint>[] = [];\n const defined0 = true;\n let lastTopCurve: ICurve<IPoint>;\n let lastBottomCurve: ICurve<IPoint>;\n for (let i = 0, n = top.curves.length; i < n; i++) {\n const topCurve = top.curves[i];\n const curCurveLength = topCurve.getLength(direction);\n const percent = (totalDrawLength - drawedLengthUntilLast) / curCurveLength;\n if (percent < 0) {\n break;\n }\n drawedLengthUntilLast += curCurveLength;\n\n let tc: ICurve<IPoint> | null = null;\n let bc: ICurve<IPoint> | null = null;\n if (lastDefined !== topCurve.defined) {\n if (lastDefined) {\n drawAreaBlock(path, topList, bottomList, params);\n topList.length = 0;\n bottomList.length = 0;\n } else {\n tc = topCurve;\n bc = bottom.curves[n - i - 1];\n }\n lastDefined = !lastDefined;\n } else {\n if (lastDefined) {\n tc = topCurve;\n bc = bottom.curves[n - i - 1];\n }\n }\n\n if (tc && bc) {\n if (percent < 1) {\n if (tc.p2 && tc.p3) {\n tc = divideCubic(tc as ICubicBezierCurve, percent)[0];\n } else {\n tc = divideLinear(tc as ILineCurve, percent)[0];\n }\n if (bc.p2 && bc.p3) {\n bc = divideCubic(bc as ICubicBezierCurve, 1 - percent)[1];\n } else {\n bc = divideLinear(bc as ILineCurve, 1 - percent)[1];\n }\n }\n tc.defined = lastDefined;\n bc.defined = lastDefined;\n topList.push(tc);\n bottomList.push(bc);\n }\n\n tc = null;\n bc = null;\n }\n\n drawAreaBlock(path, topList, bottomList, params);\n\n // const totalLength = segPath.tryUpdateLength();\n\n // // 直到上次绘制的长度\n // let drawedLengthUntilLast = 0;\n // for (let i = 0, n = curves.length; i < n; i++) {\n // const curve = curves[i];\n // const curCurveLength = curve.getLength();\n // const _p = (totalDrawLength - drawedLengthUntilLast) / curCurveLength;\n // drawedLengthUntilLast += curCurveLength;\n // if (_p < 0) {\n // break;\n // }\n\n // // 跳过这个点\n // if (!curve.defined()) {\n // needMoveTo = true;\n // continue;\n // }\n // if (needMoveTo) {\n // path.moveTo(curve.p0.x + offsetX, curve.p0.y + offsetY);\n // }\n // drawSegItem(path, curve, min(_p, 1), params);\n // needMoveTo = false;\n // }\n}\n\nfunction drawAreaBlock(\n path: IPath2D,\n topList: ICurve<IPoint>[],\n bottomList: ICurve<IPoint>[],\n params?: {\n offsetX?: number;\n offsetY?: number;\n offsetZ?: number;\n }\n) {\n const { offsetX = 0, offsetY = 0, offsetZ = 0 } = params || {};\n let needMoveTo = true;\n topList.forEach(curve => {\n // 跳过这个点\n if (!curve.defined) {\n needMoveTo = true;\n return;\n }\n if (needMoveTo) {\n path.moveTo(curve.p0.x + offsetX, curve.p0.y + offsetY, offsetZ);\n }\n drawSegItem(path, curve, 1, params);\n needMoveTo = false;\n });\n needMoveTo = true;\n for (let i = bottomList.length - 1; i >= 0; i--) {\n const curve = bottomList[i];\n // 跳过这个点\n if (!curve.defined) {\n needMoveTo = true;\n continue;\n }\n if (needMoveTo) {\n // bottom需要直接line绘制\n path.lineTo(curve.p0.x + offsetX, curve.p0.y + offsetY, offsetZ);\n }\n drawSegItem(path, curve, 1, params);\n needMoveTo = false;\n }\n path.closePath();\n}\n"]}
1
+ {"version":3,"sources":["../src/common/render-area.ts"],"names":[],"mappings":"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","file":"render-area.js","sourcesContent":["import type { IPoint } from '@visactor/vutils';\nimport { abs } from '@visactor/vutils';\nimport type { IAreaCacheItem, ICubicBezierCurve, ICurve, IDirection, ILineCurve, IPath2D } from '../interface';\nimport { Direction } from './enums';\nimport { divideCubic } from './segment/curve/cubic-bezier';\nimport { divideLinear } from './segment/curve/line';\nimport { drawSegItem } from './render-utils';\n\n/**\n * 绘制连续的线段\n * 绘制长度为总长度percent的path,drawDirection为绘制的方向,也就是percent的方向\n * @param path\n * @param segPath\n * @param percent\n * @param drawDirection 绘制的方向,用于使用percent绘制\n * @param line 用于获取line相关属性\n */\nexport function drawAreaSegments(\n path: IPath2D,\n segPath: IAreaCacheItem,\n percent: number,\n params?: {\n offsetX?: number;\n offsetY?: number;\n offsetZ?: number;\n direction?: IDirection;\n drawConnect?: boolean; // 是否是绘制connect区域的效果\n mode?: 'none' | 'connect' | 'zero';\n zeroX?: number;\n zeroY?: number;\n }\n) {\n const { drawConnect = false, mode = 'none' } = params || {};\n if (drawConnect && mode === 'none') {\n return;\n }\n // let needMoveTo: boolean = true;\n const { top, bottom } = segPath;\n // 如果top和bottom的curves数量不同,那么就跳过\n if (top.curves.length !== bottom.curves.length) {\n return;\n }\n if (percent >= 1) {\n const topList: ICurve<IPoint>[] = [];\n const bottomList: ICurve<IPoint>[] = [];\n let lastDefined: boolean = true;\n if (drawConnect) {\n let defined0 = true;\n let lastCurve: ICurve<IPoint>;\n let lastBottomCurve: ICurve<IPoint>;\n const n = top.curves.length;\n top.curves.forEach((curve, i) => {\n // step的逻辑\n const bototmCurve = bottom.curves[n - i - 1];\n let currentTopCurve = curve;\n let currentBottomCurve = bototmCurve;\n if (curve.originP1 === curve.originP2) {\n lastCurve = curve;\n lastBottomCurve = bototmCurve;\n return;\n }\n if (lastCurve && lastCurve.originP1 === lastCurve.originP2) {\n currentTopCurve = lastCurve;\n currentBottomCurve = lastBottomCurve;\n }\n if (curve.defined) {\n // 非法变合法需要lineTo,合法变非法需要moveTo,初始非法需要moveTo\n if (!defined0) {\n topList.push(currentTopCurve);\n bottomList.push(currentBottomCurve);\n drawAreaConnectBlock(path, topList, bottomList, params);\n topList.length = 0;\n bottomList.length = 0;\n defined0 = !defined0;\n }\n } else {\n // 找到合法的点\n const { originP1, originP2 } = curve;\n let validTopCurve: ICurve<IPoint>;\n let validBottomCurve: ICurve<IPoint>;\n if (originP1 && originP1.defined !== false) {\n validTopCurve = currentTopCurve;\n validBottomCurve = currentBottomCurve;\n } else if (originP1 && originP2.defined !== false) {\n validTopCurve = curve;\n validBottomCurve = bototmCurve;\n }\n // 合法/(初始)变非法,moveTo\n if (defined0) {\n defined0 = !defined0;\n topList.push(validTopCurve || curve);\n bottomList.push(validBottomCurve || bototmCurve);\n } else {\n // 非法变非法/合法,看情况要不要lineTo\n if (validTopCurve) {\n // 非法变合法,需要lineTo\n defined0 = !defined0;\n topList.push(validTopCurve || curve);\n bottomList.push(validBottomCurve || bototmCurve);\n drawAreaConnectBlock(path, topList, bottomList, params);\n topList.length = 0;\n bottomList.length = 0;\n }\n }\n }\n lastCurve = curve;\n });\n drawAreaConnectBlock(path, topList, bottomList, params);\n } else {\n for (let i = 0, n = top.curves.length; i < n; i++) {\n const topCurve = top.curves[i];\n if (lastDefined !== topCurve.defined) {\n if (lastDefined) {\n drawAreaBlock(path, topList, bottomList, params);\n topList.length = 0;\n bottomList.length = 0;\n } else {\n topList.push(topCurve);\n bottomList.push(bottom.curves[n - i - 1]);\n }\n lastDefined = !lastDefined;\n } else {\n if (lastDefined) {\n topList.push(topCurve);\n bottomList.push(bottom.curves[n - i - 1]);\n }\n }\n }\n drawAreaBlock(path, topList, bottomList, params);\n }\n\n return;\n }\n if (percent <= 0) {\n return;\n }\n\n let { direction } = params || {};\n const { curves: topCurves } = top;\n const endP = topCurves[topCurves.length - 1].p3 ?? topCurves[topCurves.length - 1].p1;\n const xTotalLength = abs(endP.x - topCurves[0].p0.x);\n const yTotalLength = abs(endP.y - topCurves[0].p0.y);\n direction = direction ?? (xTotalLength > yTotalLength ? Direction.ROW : Direction.COLUMN);\n if (!Number.isFinite(xTotalLength)) {\n direction = Direction.COLUMN;\n }\n if (!Number.isFinite(yTotalLength)) {\n direction = Direction.ROW;\n }\n\n // x和y必须始终保持同方向\n // 整个线段的总长度(基于水平、垂直方向)\n const totalLength: number = direction === Direction.ROW ? xTotalLength : yTotalLength;\n\n // 总需要绘制的长度\n const totalDrawLength = percent * totalLength;\n // 直到上次绘制的长度\n let drawedLengthUntilLast = 0;\n let lastDefined: boolean = true;\n const topList: ICurve<IPoint>[] = [];\n const bottomList: ICurve<IPoint>[] = [];\n let defined0 = true;\n let lastTopCurve: ICurve<IPoint>;\n let lastBottomCurve: ICurve<IPoint>;\n for (let i = 0, n = top.curves.length; i < n; i++) {\n const topCurve = top.curves[i];\n const curCurveLength = topCurve.getLength(direction);\n const percent = (totalDrawLength - drawedLengthUntilLast) / curCurveLength;\n if (percent < 0) {\n break;\n }\n drawedLengthUntilLast += curCurveLength;\n\n if (drawConnect) {\n // step的逻辑\n const bototmCurve = bottom.curves[n - i - 1];\n let currentTopCurve = topCurve;\n let currentBottomCurve = bototmCurve;\n if (topCurve.originP1 === topCurve.originP2) {\n lastTopCurve = topCurve;\n lastBottomCurve = bototmCurve;\n continue;\n }\n if (lastTopCurve && lastTopCurve.originP1 === lastTopCurve.originP2) {\n currentTopCurve = lastTopCurve;\n currentBottomCurve = lastBottomCurve;\n }\n if (topCurve.defined) {\n // 非法变合法需要lineTo,合法变非法需要moveTo,初始非法需要moveTo\n if (!defined0) {\n topList.push(currentTopCurve);\n bottomList.push(currentBottomCurve);\n drawAreaConnectBlock(path, topList, bottomList, params);\n topList.length = 0;\n bottomList.length = 0;\n defined0 = !defined0;\n }\n } else {\n // 找到合法的点\n const { originP1, originP2 } = topCurve;\n let validTopCurve: ICurve<IPoint>;\n let validBottomCurve: ICurve<IPoint>;\n if (originP1 && originP1.defined !== false) {\n validTopCurve = currentTopCurve;\n validBottomCurve = currentBottomCurve;\n } else if (originP1 && originP2.defined !== false) {\n validTopCurve = topCurve;\n validBottomCurve = bototmCurve;\n }\n // 合法/(初始)变非法,moveTo\n if (defined0) {\n defined0 = !defined0;\n topList.push(validTopCurve || topCurve);\n bottomList.push(validBottomCurve || bototmCurve);\n } else {\n // 非法变非法/合法,看情况要不要lineTo\n if (validTopCurve) {\n // 非法变合法,需要lineTo\n defined0 = !defined0;\n topList.push(validTopCurve || topCurve);\n bottomList.push(validBottomCurve || bototmCurve);\n drawAreaConnectBlock(path, topList, bottomList, params);\n topList.length = 0;\n bottomList.length = 0;\n }\n }\n }\n lastTopCurve = topCurve;\n // drawAreaBlock(path, topList, bottomList, params);\n } else {\n let tc: ICurve<IPoint> | null = null;\n let bc: ICurve<IPoint> | null = null;\n if (lastDefined !== topCurve.defined) {\n if (lastDefined) {\n drawAreaBlock(path, topList, bottomList, params);\n topList.length = 0;\n bottomList.length = 0;\n } else {\n tc = topCurve;\n bc = bottom.curves[n - i - 1];\n }\n lastDefined = !lastDefined;\n } else {\n if (lastDefined) {\n tc = topCurve;\n bc = bottom.curves[n - i - 1];\n }\n }\n\n if (tc && bc) {\n if (percent < 1) {\n if (tc.p2 && tc.p3) {\n tc = divideCubic(tc as ICubicBezierCurve, percent)[0];\n } else {\n tc = divideLinear(tc as ILineCurve, percent)[0];\n }\n if (bc.p2 && bc.p3) {\n bc = divideCubic(bc as ICubicBezierCurve, 1 - percent)[1];\n } else {\n bc = divideLinear(bc as ILineCurve, 1 - percent)[1];\n }\n }\n tc.defined = lastDefined;\n bc.defined = lastDefined;\n topList.push(tc);\n bottomList.push(bc);\n }\n\n tc = null;\n bc = null;\n }\n }\n\n if (drawConnect) {\n drawAreaConnectBlock(path, topList, bottomList, params);\n } else {\n drawAreaBlock(path, topList, bottomList, params);\n }\n\n // const totalLength = segPath.tryUpdateLength();\n\n // // 直到上次绘制的长度\n // let drawedLengthUntilLast = 0;\n // for (let i = 0, n = curves.length; i < n; i++) {\n // const curve = curves[i];\n // const curCurveLength = curve.getLength();\n // const _p = (totalDrawLength - drawedLengthUntilLast) / curCurveLength;\n // drawedLengthUntilLast += curCurveLength;\n // if (_p < 0) {\n // break;\n // }\n\n // // 跳过这个点\n // if (!curve.defined()) {\n // needMoveTo = true;\n // continue;\n // }\n // if (needMoveTo) {\n // path.moveTo(curve.p0.x + offsetX, curve.p0.y + offsetY);\n // }\n // drawSegItem(path, curve, min(_p, 1), params);\n // needMoveTo = false;\n // }\n}\n\nfunction drawAreaConnectBlock(\n path: IPath2D,\n topList: ICurve<IPoint>[],\n bottomList: ICurve<IPoint>[],\n params?: {\n offsetX?: number;\n offsetY?: number;\n offsetZ?: number;\n mode?: 'none' | 'connect' | 'zero';\n zeroX?: number;\n zeroY?: number;\n }\n) {\n if (topList.length < 2) {\n return;\n }\n const { offsetX = 0, offsetY = 0, offsetZ = 0, mode } = params || {};\n let curve = topList[0];\n // mode不支持zero\n path.moveTo(curve.p0.x + offsetX, curve.p0.y + offsetY, offsetZ);\n curve = topList[topList.length - 1];\n let end = curve.p3 || curve.p1;\n path.lineTo(end.x + offsetX, end.y + offsetY, offsetZ);\n\n curve = bottomList[bottomList.length - 1];\n path.lineTo(curve.p0.x + offsetX, curve.p0.y + offsetY, offsetZ);\n curve = bottomList[0];\n end = curve.p3 || curve.p1;\n path.lineTo(end.x + offsetX, end.y + offsetY, offsetZ);\n\n path.closePath();\n}\n\nfunction drawAreaBlock(\n path: IPath2D,\n topList: ICurve<IPoint>[],\n bottomList: ICurve<IPoint>[],\n params?: {\n offsetX?: number;\n offsetY?: number;\n offsetZ?: number;\n }\n) {\n const { offsetX = 0, offsetY = 0, offsetZ = 0 } = params || {};\n let needMoveTo = true;\n topList.forEach(curve => {\n // 跳过这个点\n if (!curve.defined) {\n needMoveTo = true;\n return;\n }\n if (needMoveTo) {\n path.moveTo(curve.p0.x + offsetX, curve.p0.y + offsetY, offsetZ);\n }\n drawSegItem(path, curve, 1, params);\n needMoveTo = false;\n });\n needMoveTo = true;\n for (let i = bottomList.length - 1; i >= 0; i--) {\n const curve = bottomList[i];\n // 跳过这个点\n if (!curve.defined) {\n needMoveTo = true;\n continue;\n }\n if (needMoveTo) {\n // bottom需要直接line绘制\n path.lineTo(curve.p0.x + offsetX, curve.p0.y + offsetY, offsetZ);\n }\n drawSegItem(path, curve, 1, params);\n needMoveTo = false;\n }\n path.closePath();\n}\n"]}
@@ -5,4 +5,5 @@ export function renderCommandList(commandList, context, x = 0, y = 0, sx = 1, sy
5
5
  const command = commandList[i];
6
6
  commandFuncs[command[0]](command, context, x, y, sx, sy, z);
7
7
  }
8
- }
8
+ }
9
+ //# sourceMappingURL=render-command-list.js.map