@visactor/vrender-core 0.20.0-alpha.0 → 0.20.0-alpha.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 (504) hide show
  1. package/cjs/allocator/matrix-allocate.d.ts +1 -1
  2. package/cjs/allocator/matrix-allocate.js +2 -4
  3. package/cjs/allocator/matrix-allocate.js.map +1 -1
  4. package/cjs/animate/Ticker/default-ticker.d.ts +2 -53
  5. package/cjs/animate/Ticker/default-ticker.js +17 -130
  6. package/cjs/animate/Ticker/default-ticker.js.map +1 -1
  7. package/cjs/animate/Ticker/index.d.ts +4 -0
  8. package/cjs/animate/Ticker/index.js +3 -1
  9. package/cjs/animate/Ticker/index.js.map +1 -1
  10. package/cjs/animate/Ticker/manual-ticker-handler.d.ts +15 -0
  11. package/cjs/animate/Ticker/manual-ticker-handler.js +36 -0
  12. package/cjs/animate/Ticker/manual-ticker-handler.js.map +1 -0
  13. package/cjs/animate/Ticker/manual-ticker.d.ts +19 -0
  14. package/cjs/animate/Ticker/manual-ticker.js +37 -0
  15. package/cjs/animate/Ticker/manual-ticker.js.map +1 -0
  16. package/cjs/animate/Ticker/raf-tick-handler.d.ts +9 -0
  17. package/cjs/animate/Ticker/raf-tick-handler.js +30 -0
  18. package/cjs/animate/Ticker/raf-tick-handler.js.map +1 -0
  19. package/cjs/animate/Ticker/timeout-tick-handler.d.ts +9 -0
  20. package/cjs/animate/Ticker/timeout-tick-handler.js +28 -0
  21. package/cjs/animate/Ticker/timeout-tick-handler.js.map +1 -0
  22. package/cjs/animate/Ticker/type.d.ts +6 -0
  23. package/cjs/animate/Ticker/type.js +11 -0
  24. package/cjs/animate/Ticker/type.js.map +1 -0
  25. package/cjs/animate/animate.js +4 -2
  26. package/cjs/animate/animate.js.map +1 -1
  27. package/cjs/animate/custom-animate.d.ts +5 -16
  28. package/cjs/animate/custom-animate.js +9 -62
  29. package/cjs/animate/custom-animate.js.map +1 -1
  30. package/cjs/animate/group-fade.d.ts +16 -0
  31. package/cjs/animate/group-fade.js +66 -0
  32. package/cjs/animate/group-fade.js.map +1 -0
  33. package/cjs/animate/index.d.ts +1 -0
  34. package/cjs/animate/index.js +2 -1
  35. package/cjs/animate/index.js.map +1 -1
  36. package/cjs/canvas/conical-gradient.js.map +1 -1
  37. package/cjs/canvas/contributions/base-canvas.js +4 -13
  38. package/cjs/canvas/contributions/base-canvas.js.map +1 -1
  39. package/cjs/canvas/util.d.ts +0 -1
  40. package/cjs/canvas/util.js +7 -17
  41. package/cjs/canvas/util.js.map +1 -1
  42. package/cjs/common/3d-interceptor.d.ts +3 -0
  43. package/cjs/common/3d-interceptor.js +50 -0
  44. package/cjs/common/3d-interceptor.js.map +1 -0
  45. package/cjs/common/bezier-utils.js +2 -1
  46. package/cjs/common/canvas-utils.d.ts +1 -1
  47. package/cjs/common/canvas-utils.js +15 -30
  48. package/cjs/common/canvas-utils.js.map +1 -1
  49. package/cjs/common/matrix.d.ts +11 -3
  50. package/cjs/common/matrix.js +97 -19
  51. package/cjs/common/matrix.js.map +1 -1
  52. package/cjs/common/render-command-list.js +1 -2
  53. package/cjs/common/render-curve.js +22 -32
  54. package/cjs/common/render-curve.js.map +1 -1
  55. package/cjs/common/render-utils.js +2 -1
  56. package/cjs/common/segment/catmull-rom-close.d.ts +41 -0
  57. package/cjs/common/segment/catmull-rom-close.js +81 -0
  58. package/cjs/common/segment/catmull-rom-close.js.map +1 -0
  59. package/cjs/common/segment/catmull-rom.d.ts +38 -0
  60. package/cjs/common/segment/catmull-rom.js +97 -0
  61. package/cjs/common/segment/catmull-rom.js.map +1 -0
  62. package/cjs/common/segment/index.d.ts +5 -2
  63. package/cjs/common/segment/index.js +8 -1
  64. package/cjs/common/segment/index.js.map +1 -1
  65. package/cjs/common/sort.js +15 -12
  66. package/cjs/common/sort.js.map +1 -1
  67. package/cjs/common/text.d.ts +0 -2
  68. package/cjs/common/text.js +8 -14
  69. package/cjs/common/text.js.map +1 -1
  70. package/cjs/common/utils.js +1 -1
  71. package/cjs/common/utils.js.map +1 -1
  72. package/cjs/core/camera.js +3 -3
  73. package/cjs/core/camera.js.map +1 -1
  74. package/cjs/core/contributions/layerHandler/modules.js +2 -5
  75. package/cjs/core/contributions/layerHandler/modules.js.map +1 -1
  76. package/cjs/core/stage.d.ts +2 -2
  77. package/cjs/core/stage.js +23 -11
  78. package/cjs/core/stage.js.map +1 -1
  79. package/cjs/event/federated-event/base-event.js +12 -2
  80. package/cjs/event/federated-event/base-event.js.map +1 -1
  81. package/cjs/graphic/arc.d.ts +6 -4
  82. package/cjs/graphic/arc.js +46 -17
  83. package/cjs/graphic/arc.js.map +1 -1
  84. package/cjs/graphic/arc3d.d.ts +2 -2
  85. package/cjs/graphic/arc3d.js +8 -9
  86. package/cjs/graphic/arc3d.js.map +1 -1
  87. package/cjs/graphic/area.d.ts +5 -3
  88. package/cjs/graphic/area.js +27 -12
  89. package/cjs/graphic/area.js.map +1 -1
  90. package/cjs/graphic/builtin-symbol/index.d.ts +1 -1
  91. package/cjs/graphic/builtin-symbol/thin-triangle.d.ts +2 -2
  92. package/cjs/graphic/builtin-symbol/thin-triangle.js +2 -2
  93. package/cjs/graphic/builtin-symbol/thin-triangle.js.map +1 -1
  94. package/cjs/graphic/builtin-symbol/triangle-down.d.ts +1 -2
  95. package/cjs/graphic/builtin-symbol/triangle-down.js +4 -9
  96. package/cjs/graphic/builtin-symbol/triangle-down.js.map +1 -1
  97. package/cjs/graphic/builtin-symbol/triangle-left.d.ts +0 -1
  98. package/cjs/graphic/builtin-symbol/triangle-left.js +3 -8
  99. package/cjs/graphic/builtin-symbol/triangle-left.js.map +1 -1
  100. package/cjs/graphic/builtin-symbol/triangle-right.d.ts +1 -2
  101. package/cjs/graphic/builtin-symbol/triangle-right.js +4 -9
  102. package/cjs/graphic/builtin-symbol/triangle-right.js.map +1 -1
  103. package/cjs/graphic/builtin-symbol/triangle-up.d.ts +1 -2
  104. package/cjs/graphic/builtin-symbol/triangle-up.js +4 -9
  105. package/cjs/graphic/builtin-symbol/triangle-up.js.map +1 -1
  106. package/cjs/graphic/builtin-symbol/triangle.d.ts +1 -2
  107. package/cjs/graphic/builtin-symbol/triangle.js +1 -3
  108. package/cjs/graphic/builtin-symbol/triangle.js.map +1 -1
  109. package/cjs/graphic/builtin-symbol/utils.js +1 -5
  110. package/cjs/graphic/builtin-symbol/utils.js.map +1 -1
  111. package/cjs/graphic/circle.d.ts +5 -3
  112. package/cjs/graphic/circle.js +20 -12
  113. package/cjs/graphic/circle.js.map +1 -1
  114. package/cjs/graphic/config.js +7 -3
  115. package/cjs/graphic/config.js.map +1 -1
  116. package/cjs/graphic/glyph.d.ts +4 -2
  117. package/cjs/graphic/glyph.js +9 -2
  118. package/cjs/graphic/glyph.js.map +1 -1
  119. package/cjs/graphic/graphic-creator.js.map +1 -1
  120. package/cjs/graphic/graphic-service/common-outer-boder-bounds.d.ts +3 -0
  121. package/cjs/graphic/graphic-service/common-outer-boder-bounds.js +17 -0
  122. package/cjs/graphic/graphic-service/common-outer-boder-bounds.js.map +1 -0
  123. package/cjs/graphic/graphic-service/graphic-service.d.ts +7 -42
  124. package/cjs/graphic/graphic-service/graphic-service.js +21 -396
  125. package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
  126. package/cjs/graphic/graphic-service/symbol-outer-border-bounds.d.ts +3 -0
  127. package/cjs/graphic/graphic-service/symbol-outer-border-bounds.js +17 -0
  128. package/cjs/graphic/graphic-service/symbol-outer-border-bounds.js.map +1 -0
  129. package/cjs/graphic/graphic.d.ts +12 -9
  130. package/cjs/graphic/graphic.js +17 -2
  131. package/cjs/graphic/graphic.js.map +1 -1
  132. package/cjs/graphic/group.d.ts +7 -3
  133. package/cjs/graphic/group.js +34 -22
  134. package/cjs/graphic/group.js.map +1 -1
  135. package/cjs/graphic/image.d.ts +3 -2
  136. package/cjs/graphic/image.js +14 -9
  137. package/cjs/graphic/image.js.map +1 -1
  138. package/cjs/graphic/line.d.ts +5 -3
  139. package/cjs/graphic/line.js +24 -11
  140. package/cjs/graphic/line.js.map +1 -1
  141. package/cjs/graphic/node-tree.js.map +1 -1
  142. package/cjs/graphic/path.d.ts +3 -3
  143. package/cjs/graphic/path.js +17 -13
  144. package/cjs/graphic/path.js.map +1 -1
  145. package/cjs/graphic/polygon.d.ts +4 -3
  146. package/cjs/graphic/polygon.js +16 -11
  147. package/cjs/graphic/polygon.js.map +1 -1
  148. package/cjs/graphic/pyramid3d.d.ts +2 -2
  149. package/cjs/graphic/pyramid3d.js +10 -9
  150. package/cjs/graphic/pyramid3d.js.map +1 -1
  151. package/cjs/graphic/rect.d.ts +3 -3
  152. package/cjs/graphic/rect.js +16 -12
  153. package/cjs/graphic/rect.js.map +1 -1
  154. package/cjs/graphic/rect3d.js +2 -2
  155. package/cjs/graphic/rect3d.js.map +1 -1
  156. package/cjs/graphic/richtext/icon.d.ts +2 -2
  157. package/cjs/graphic/richtext/icon.js.map +1 -1
  158. package/cjs/graphic/richtext/utils.js +12 -21
  159. package/cjs/graphic/richtext/utils.js.map +1 -1
  160. package/cjs/graphic/richtext.d.ts +4 -4
  161. package/cjs/graphic/richtext.js +46 -14
  162. package/cjs/graphic/richtext.js.map +1 -1
  163. package/cjs/graphic/shadow-root.d.ts +2 -2
  164. package/cjs/graphic/shadow-root.js.map +1 -1
  165. package/cjs/graphic/symbol.d.ts +5 -3
  166. package/cjs/graphic/symbol.js +25 -12
  167. package/cjs/graphic/symbol.js.map +1 -1
  168. package/cjs/graphic/text.d.ts +10 -10
  169. package/cjs/graphic/text.js +27 -21
  170. package/cjs/graphic/text.js.map +1 -1
  171. package/cjs/graphic/theme.js.map +1 -1
  172. package/cjs/graphic/wrap-text.d.ts +1 -1
  173. package/cjs/graphic/wrap-text.js +2 -2
  174. package/cjs/graphic/wrap-text.js.map +1 -1
  175. package/cjs/index.d.ts +3 -0
  176. package/cjs/index.js +6 -4
  177. package/cjs/index.js.map +1 -1
  178. package/cjs/interface/graphic/arc.d.ts +2 -2
  179. package/cjs/interface/graphic/arc.js.map +1 -1
  180. package/cjs/interface/graphic/arc3d.d.ts +1 -1
  181. package/cjs/interface/graphic/arc3d.js.map +1 -1
  182. package/cjs/interface/graphic/area.d.ts +1 -0
  183. package/cjs/interface/graphic/area.js.map +1 -1
  184. package/cjs/interface/graphic/group.d.ts +1 -1
  185. package/cjs/interface/graphic/group.js.map +1 -1
  186. package/cjs/interface/graphic/line.d.ts +1 -0
  187. package/cjs/interface/graphic/line.js.map +1 -1
  188. package/cjs/interface/graphic/richText.d.ts +1 -0
  189. package/cjs/interface/graphic/richText.js.map +1 -1
  190. package/cjs/interface/graphic-service.d.ts +10 -17
  191. package/cjs/interface/graphic-service.js.map +1 -1
  192. package/cjs/interface/graphic.d.ts +2 -0
  193. package/cjs/interface/graphic.js.map +1 -1
  194. package/cjs/picker/pick-interceptor.d.ts +1 -1
  195. package/cjs/picker/pick-interceptor.js +6 -44
  196. package/cjs/picker/pick-interceptor.js.map +1 -1
  197. package/cjs/picker/picker-service.js +4 -5
  198. package/cjs/picker/picker-service.js.map +1 -1
  199. package/cjs/plugins/builtin-plugin/3dview-transform-plugin.d.ts +1 -0
  200. package/cjs/plugins/builtin-plugin/3dview-transform-plugin.js +8 -2
  201. package/cjs/plugins/builtin-plugin/3dview-transform-plugin.js.map +1 -1
  202. package/cjs/plugins/builtin-plugin/edit-module.d.ts +22 -0
  203. package/cjs/plugins/builtin-plugin/edit-module.js +94 -0
  204. package/cjs/plugins/builtin-plugin/edit-module.js.map +1 -0
  205. package/cjs/plugins/builtin-plugin/flex-layout-plugin.d.ts +1 -0
  206. package/cjs/plugins/builtin-plugin/flex-layout-plugin.js +8 -2
  207. package/cjs/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
  208. package/cjs/plugins/builtin-plugin/html-attribute-plugin.js +2 -2
  209. package/cjs/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
  210. package/cjs/plugins/builtin-plugin/react-attribute-plugin.d.ts +2 -1
  211. package/cjs/plugins/builtin-plugin/react-attribute-plugin.js +15 -7
  212. package/cjs/plugins/builtin-plugin/react-attribute-plugin.js.map +1 -1
  213. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.d.ts +76 -0
  214. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js +338 -0
  215. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -0
  216. package/cjs/render/contributions/render/arc-render.js +12 -28
  217. package/cjs/render/contributions/render/arc-render.js.map +1 -1
  218. package/cjs/render/contributions/render/area-render.js +12 -7
  219. package/cjs/render/contributions/render/area-render.js.map +1 -1
  220. package/cjs/render/contributions/render/base-3d-render.d.ts +10 -0
  221. package/cjs/render/contributions/render/base-3d-render.js +63 -0
  222. package/cjs/render/contributions/render/base-3d-render.js.map +1 -0
  223. package/cjs/render/contributions/render/base-render.d.ts +1 -1
  224. package/cjs/render/contributions/render/base-render.js +5 -5
  225. package/cjs/render/contributions/render/base-render.js.map +1 -1
  226. package/cjs/render/contributions/render/draw-interceptor.js +7 -51
  227. package/cjs/render/contributions/render/draw-interceptor.js.map +1 -1
  228. package/cjs/render/contributions/render/group-render.js +4 -5
  229. package/cjs/render/contributions/render/group-render.js.map +1 -1
  230. package/cjs/render/contributions/render/index.d.ts +1 -0
  231. package/cjs/render/contributions/render/index.js +3 -3
  232. package/cjs/render/contributions/render/index.js.map +1 -1
  233. package/cjs/render/contributions/render/line-render.js +6 -3
  234. package/cjs/render/contributions/render/line-render.js.map +1 -1
  235. package/cjs/render/contributions/render/pyramid3d-render.d.ts +3 -5
  236. package/cjs/render/contributions/render/pyramid3d-render.js +4 -54
  237. package/cjs/render/contributions/render/pyramid3d-render.js.map +1 -1
  238. package/cjs/render/contributions/render/rect3d-render.d.ts +3 -5
  239. package/cjs/render/contributions/render/rect3d-render.js +4 -53
  240. package/cjs/render/contributions/render/rect3d-render.js.map +1 -1
  241. package/cjs/render/contributions/render/symbol-render.js +9 -18
  242. package/cjs/render/contributions/render/symbol-render.js.map +1 -1
  243. package/cjs/render/contributions/render/utils.d.ts +24 -0
  244. package/cjs/render/contributions/render/utils.js +51 -21
  245. package/cjs/render/contributions/render/utils.js.map +1 -1
  246. package/dist/index.es.js +9760 -9617
  247. package/es/allocator/matrix-allocate.d.ts +1 -1
  248. package/es/allocator/matrix-allocate.js +3 -3
  249. package/es/allocator/matrix-allocate.js.map +1 -1
  250. package/es/animate/Ticker/default-ticker.d.ts +2 -53
  251. package/es/animate/Ticker/default-ticker.js +3 -106
  252. package/es/animate/Ticker/default-ticker.js.map +1 -1
  253. package/es/animate/Ticker/index.d.ts +4 -0
  254. package/es/animate/Ticker/index.js +8 -0
  255. package/es/animate/Ticker/index.js.map +1 -1
  256. package/es/animate/Ticker/manual-ticker-handler.d.ts +15 -0
  257. package/es/animate/Ticker/manual-ticker-handler.js +28 -0
  258. package/es/animate/Ticker/manual-ticker-handler.js.map +1 -0
  259. package/es/animate/Ticker/manual-ticker.d.ts +19 -0
  260. package/es/animate/Ticker/manual-ticker.js +31 -0
  261. package/es/animate/Ticker/manual-ticker.js.map +1 -0
  262. package/es/animate/Ticker/raf-tick-handler.d.ts +9 -0
  263. package/es/animate/Ticker/raf-tick-handler.js +22 -0
  264. package/es/animate/Ticker/raf-tick-handler.js.map +1 -0
  265. package/es/animate/Ticker/timeout-tick-handler.d.ts +9 -0
  266. package/es/animate/Ticker/timeout-tick-handler.js +20 -0
  267. package/es/animate/Ticker/timeout-tick-handler.js.map +1 -0
  268. package/es/animate/Ticker/type.d.ts +6 -0
  269. package/es/animate/Ticker/type.js +7 -0
  270. package/es/animate/Ticker/type.js.map +1 -0
  271. package/es/animate/animate.js +4 -2
  272. package/es/animate/animate.js.map +1 -1
  273. package/es/animate/custom-animate.d.ts +5 -16
  274. package/es/animate/custom-animate.js +9 -58
  275. package/es/animate/custom-animate.js.map +1 -1
  276. package/es/animate/group-fade.d.ts +16 -0
  277. package/es/animate/group-fade.js +56 -0
  278. package/es/animate/group-fade.js.map +1 -0
  279. package/es/animate/index.d.ts +1 -0
  280. package/es/animate/index.js +2 -0
  281. package/es/animate/index.js.map +1 -1
  282. package/es/canvas/conical-gradient.js.map +1 -1
  283. package/es/canvas/contributions/base-canvas.js +3 -15
  284. package/es/canvas/contributions/base-canvas.js.map +1 -1
  285. package/es/canvas/util.d.ts +0 -1
  286. package/es/canvas/util.js +7 -17
  287. package/es/canvas/util.js.map +1 -1
  288. package/es/common/3d-interceptor.d.ts +3 -0
  289. package/es/common/3d-interceptor.js +46 -0
  290. package/es/common/3d-interceptor.js.map +1 -0
  291. package/es/common/bezier-utils.js +2 -1
  292. package/es/common/canvas-utils.d.ts +1 -1
  293. package/es/common/canvas-utils.js +15 -30
  294. package/es/common/canvas-utils.js.map +1 -1
  295. package/es/common/matrix.d.ts +11 -3
  296. package/es/common/matrix.js +90 -17
  297. package/es/common/matrix.js.map +1 -1
  298. package/es/common/render-command-list.js +1 -2
  299. package/es/common/render-curve.js +22 -32
  300. package/es/common/render-curve.js.map +1 -1
  301. package/es/common/render-utils.js +2 -1
  302. package/es/common/segment/catmull-rom-close.d.ts +41 -0
  303. package/es/common/segment/catmull-rom-close.js +74 -0
  304. package/es/common/segment/catmull-rom-close.js.map +1 -0
  305. package/es/common/segment/catmull-rom.d.ts +38 -0
  306. package/es/common/segment/catmull-rom.js +92 -0
  307. package/es/common/segment/catmull-rom.js.map +1 -0
  308. package/es/common/segment/index.d.ts +5 -2
  309. package/es/common/segment/index.js +11 -0
  310. package/es/common/segment/index.js.map +1 -1
  311. package/es/common/sort.js +15 -12
  312. package/es/common/sort.js.map +1 -1
  313. package/es/common/text.d.ts +0 -2
  314. package/es/common/text.js +6 -11
  315. package/es/common/text.js.map +1 -1
  316. package/es/common/utils.js +1 -1
  317. package/es/common/utils.js.map +1 -1
  318. package/es/core/camera.js +5 -3
  319. package/es/core/camera.js.map +1 -1
  320. package/es/core/contributions/layerHandler/modules.js +2 -9
  321. package/es/core/contributions/layerHandler/modules.js.map +1 -1
  322. package/es/core/stage.d.ts +2 -2
  323. package/es/core/stage.js +22 -14
  324. package/es/core/stage.js.map +1 -1
  325. package/es/event/federated-event/base-event.js +12 -2
  326. package/es/event/federated-event/base-event.js.map +1 -1
  327. package/es/graphic/arc.d.ts +6 -4
  328. package/es/graphic/arc.js +47 -16
  329. package/es/graphic/arc.js.map +1 -1
  330. package/es/graphic/arc3d.d.ts +2 -2
  331. package/es/graphic/arc3d.js +7 -10
  332. package/es/graphic/arc3d.js.map +1 -1
  333. package/es/graphic/area.d.ts +5 -3
  334. package/es/graphic/area.js +28 -11
  335. package/es/graphic/area.js.map +1 -1
  336. package/es/graphic/builtin-symbol/index.d.ts +1 -1
  337. package/es/graphic/builtin-symbol/thin-triangle.d.ts +2 -2
  338. package/es/graphic/builtin-symbol/thin-triangle.js +2 -2
  339. package/es/graphic/builtin-symbol/thin-triangle.js.map +1 -1
  340. package/es/graphic/builtin-symbol/triangle-down.d.ts +1 -2
  341. package/es/graphic/builtin-symbol/triangle-down.js +2 -7
  342. package/es/graphic/builtin-symbol/triangle-down.js.map +1 -1
  343. package/es/graphic/builtin-symbol/triangle-left.d.ts +0 -1
  344. package/es/graphic/builtin-symbol/triangle-left.js +1 -6
  345. package/es/graphic/builtin-symbol/triangle-left.js.map +1 -1
  346. package/es/graphic/builtin-symbol/triangle-right.d.ts +1 -2
  347. package/es/graphic/builtin-symbol/triangle-right.js +2 -7
  348. package/es/graphic/builtin-symbol/triangle-right.js.map +1 -1
  349. package/es/graphic/builtin-symbol/triangle-up.d.ts +1 -2
  350. package/es/graphic/builtin-symbol/triangle-up.js +2 -7
  351. package/es/graphic/builtin-symbol/triangle-up.js.map +1 -1
  352. package/es/graphic/builtin-symbol/triangle.d.ts +1 -2
  353. package/es/graphic/builtin-symbol/triangle.js +1 -3
  354. package/es/graphic/builtin-symbol/triangle.js.map +1 -1
  355. package/es/graphic/builtin-symbol/utils.js +1 -4
  356. package/es/graphic/builtin-symbol/utils.js.map +1 -1
  357. package/es/graphic/circle.d.ts +5 -3
  358. package/es/graphic/circle.js +23 -9
  359. package/es/graphic/circle.js.map +1 -1
  360. package/es/graphic/config.js +7 -3
  361. package/es/graphic/config.js.map +1 -1
  362. package/es/graphic/glyph.d.ts +4 -2
  363. package/es/graphic/glyph.js +9 -1
  364. package/es/graphic/glyph.js.map +1 -1
  365. package/es/graphic/graphic-creator.js.map +1 -1
  366. package/es/graphic/graphic-service/common-outer-boder-bounds.d.ts +3 -0
  367. package/es/graphic/graphic-service/common-outer-boder-bounds.js +9 -0
  368. package/es/graphic/graphic-service/common-outer-boder-bounds.js.map +1 -0
  369. package/es/graphic/graphic-service/graphic-service.d.ts +7 -42
  370. package/es/graphic/graphic-service/graphic-service.js +14 -388
  371. package/es/graphic/graphic-service/graphic-service.js.map +1 -1
  372. package/es/graphic/graphic-service/symbol-outer-border-bounds.d.ts +3 -0
  373. package/es/graphic/graphic-service/symbol-outer-border-bounds.js +11 -0
  374. package/es/graphic/graphic-service/symbol-outer-border-bounds.js.map +1 -0
  375. package/es/graphic/graphic.d.ts +12 -9
  376. package/es/graphic/graphic.js +20 -3
  377. package/es/graphic/graphic.js.map +1 -1
  378. package/es/graphic/group.d.ts +7 -3
  379. package/es/graphic/group.js +32 -22
  380. package/es/graphic/group.js.map +1 -1
  381. package/es/graphic/image.d.ts +3 -2
  382. package/es/graphic/image.js +15 -8
  383. package/es/graphic/image.js.map +1 -1
  384. package/es/graphic/line.d.ts +5 -3
  385. package/es/graphic/line.js +25 -10
  386. package/es/graphic/line.js.map +1 -1
  387. package/es/graphic/node-tree.js.map +1 -1
  388. package/es/graphic/path.d.ts +3 -3
  389. package/es/graphic/path.js +18 -12
  390. package/es/graphic/path.js.map +1 -1
  391. package/es/graphic/polygon.d.ts +4 -3
  392. package/es/graphic/polygon.js +17 -10
  393. package/es/graphic/polygon.js.map +1 -1
  394. package/es/graphic/pyramid3d.d.ts +2 -2
  395. package/es/graphic/pyramid3d.js +8 -10
  396. package/es/graphic/pyramid3d.js.map +1 -1
  397. package/es/graphic/rect.d.ts +3 -3
  398. package/es/graphic/rect.js +16 -10
  399. package/es/graphic/rect.js.map +1 -1
  400. package/es/graphic/rect3d.js +1 -3
  401. package/es/graphic/rect3d.js.map +1 -1
  402. package/es/graphic/richtext/icon.d.ts +2 -2
  403. package/es/graphic/richtext/icon.js.map +1 -1
  404. package/es/graphic/richtext/utils.js +9 -20
  405. package/es/graphic/richtext/utils.js.map +1 -1
  406. package/es/graphic/richtext.d.ts +4 -4
  407. package/es/graphic/richtext.js +45 -13
  408. package/es/graphic/richtext.js.map +1 -1
  409. package/es/graphic/shadow-root.d.ts +2 -2
  410. package/es/graphic/shadow-root.js.map +1 -1
  411. package/es/graphic/symbol.d.ts +5 -3
  412. package/es/graphic/symbol.js +26 -11
  413. package/es/graphic/symbol.js.map +1 -1
  414. package/es/graphic/text.d.ts +10 -10
  415. package/es/graphic/text.js +28 -23
  416. package/es/graphic/text.js.map +1 -1
  417. package/es/graphic/theme.js.map +1 -1
  418. package/es/graphic/wrap-text.d.ts +1 -1
  419. package/es/graphic/wrap-text.js +1 -3
  420. package/es/graphic/wrap-text.js.map +1 -1
  421. package/es/index.d.ts +3 -0
  422. package/es/index.js +6 -0
  423. package/es/index.js.map +1 -1
  424. package/es/interface/graphic/arc.d.ts +2 -2
  425. package/es/interface/graphic/arc.js.map +1 -1
  426. package/es/interface/graphic/arc3d.d.ts +1 -1
  427. package/es/interface/graphic/arc3d.js.map +1 -1
  428. package/es/interface/graphic/area.d.ts +1 -0
  429. package/es/interface/graphic/area.js.map +1 -1
  430. package/es/interface/graphic/group.d.ts +1 -1
  431. package/es/interface/graphic/group.js.map +1 -1
  432. package/es/interface/graphic/line.d.ts +1 -0
  433. package/es/interface/graphic/line.js.map +1 -1
  434. package/es/interface/graphic/richText.d.ts +1 -0
  435. package/es/interface/graphic/richText.js.map +1 -1
  436. package/es/interface/graphic-service.d.ts +10 -17
  437. package/es/interface/graphic-service.js.map +1 -1
  438. package/es/interface/graphic.d.ts +2 -0
  439. package/es/interface/graphic.js.map +1 -1
  440. package/es/picker/pick-interceptor.d.ts +1 -1
  441. package/es/picker/pick-interceptor.js +10 -46
  442. package/es/picker/pick-interceptor.js.map +1 -1
  443. package/es/picker/picker-service.js +1 -1
  444. package/es/picker/picker-service.js.map +1 -1
  445. package/es/plugins/builtin-plugin/3dview-transform-plugin.d.ts +1 -0
  446. package/es/plugins/builtin-plugin/3dview-transform-plugin.js +6 -0
  447. package/es/plugins/builtin-plugin/3dview-transform-plugin.js.map +1 -1
  448. package/es/plugins/builtin-plugin/edit-module.d.ts +22 -0
  449. package/es/plugins/builtin-plugin/edit-module.js +86 -0
  450. package/es/plugins/builtin-plugin/edit-module.js.map +1 -0
  451. package/es/plugins/builtin-plugin/flex-layout-plugin.d.ts +1 -0
  452. package/es/plugins/builtin-plugin/flex-layout-plugin.js +6 -0
  453. package/es/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
  454. package/es/plugins/builtin-plugin/html-attribute-plugin.js +2 -2
  455. package/es/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
  456. package/es/plugins/builtin-plugin/react-attribute-plugin.d.ts +2 -1
  457. package/es/plugins/builtin-plugin/react-attribute-plugin.js +15 -7
  458. package/es/plugins/builtin-plugin/react-attribute-plugin.js.map +1 -1
  459. package/es/plugins/builtin-plugin/richtext-edit-plugin.d.ts +76 -0
  460. package/es/plugins/builtin-plugin/richtext-edit-plugin.js +334 -0
  461. package/es/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -0
  462. package/es/render/contributions/render/arc-render.js +7 -16
  463. package/es/render/contributions/render/arc-render.js.map +1 -1
  464. package/es/render/contributions/render/area-render.js +12 -6
  465. package/es/render/contributions/render/area-render.js.map +1 -1
  466. package/es/render/contributions/render/base-3d-render.d.ts +10 -0
  467. package/es/render/contributions/render/base-3d-render.js +57 -0
  468. package/es/render/contributions/render/base-3d-render.js.map +1 -0
  469. package/es/render/contributions/render/base-render.d.ts +1 -1
  470. package/es/render/contributions/render/base-render.js +3 -1
  471. package/es/render/contributions/render/base-render.js.map +1 -1
  472. package/es/render/contributions/render/draw-interceptor.js +7 -51
  473. package/es/render/contributions/render/draw-interceptor.js.map +1 -1
  474. package/es/render/contributions/render/group-render.js +3 -1
  475. package/es/render/contributions/render/group-render.js.map +1 -1
  476. package/es/render/contributions/render/index.d.ts +1 -0
  477. package/es/render/contributions/render/index.js +2 -0
  478. package/es/render/contributions/render/index.js.map +1 -1
  479. package/es/render/contributions/render/line-render.js +6 -3
  480. package/es/render/contributions/render/line-render.js.map +1 -1
  481. package/es/render/contributions/render/pyramid3d-render.d.ts +3 -5
  482. package/es/render/contributions/render/pyramid3d-render.js +4 -56
  483. package/es/render/contributions/render/pyramid3d-render.js.map +1 -1
  484. package/es/render/contributions/render/rect3d-render.d.ts +3 -5
  485. package/es/render/contributions/render/rect3d-render.js +4 -55
  486. package/es/render/contributions/render/rect3d-render.js.map +1 -1
  487. package/es/render/contributions/render/symbol-render.js +9 -18
  488. package/es/render/contributions/render/symbol-render.js.map +1 -1
  489. package/es/render/contributions/render/utils.d.ts +24 -0
  490. package/es/render/contributions/render/utils.js +41 -13
  491. package/es/render/contributions/render/utils.js.map +1 -1
  492. package/package.json +4 -4
  493. package/cjs/graphic/graphic-service/common-contribution.d.ts +0 -5
  494. package/cjs/graphic/graphic-service/common-contribution.js +0 -19
  495. package/cjs/graphic/graphic-service/common-contribution.js.map +0 -1
  496. package/cjs/graphic/graphic-service/symbol-contribution.d.ts +0 -6
  497. package/cjs/graphic/graphic-service/symbol-contribution.js +0 -21
  498. package/cjs/graphic/graphic-service/symbol-contribution.js.map +0 -1
  499. package/es/graphic/graphic-service/common-contribution.d.ts +0 -5
  500. package/es/graphic/graphic-service/common-contribution.js +0 -11
  501. package/es/graphic/graphic-service/common-contribution.js.map +0 -1
  502. package/es/graphic/graphic-service/symbol-contribution.d.ts +0 -6
  503. package/es/graphic/graphic-service/symbol-contribution.js +0 -15
  504. package/es/graphic/graphic-service/symbol-contribution.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/canvas/contributions/base-canvas.ts"],"names":[],"mappings":"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","file":"base-canvas.js","sourcesContent":["import { injectable } from '../../common/inversify-lite';\nimport type { CanvasConfigType, ICanvas, IContext2d, EnvType } from '../../interface';\n\nconst DefaultConfig = {\n WIDTH: 500,\n HEIGHT: 500,\n DPR: 1\n};\n\n@injectable()\nexport abstract class BaseCanvas implements ICanvas {\n static env: EnvType = 'browser';\n // 显示的宽高,如果是离屏canvas,就是pixelWidth / pixelRatio\n protected _displayWidth: number; // 显示的宽度\n protected _displayHeight: number; // 显示的高度\n protected _id: number | string;\n // 像素宽高\n protected _pixelWidth: number; // 像素宽度\n protected _pixelHeight: number; // 像素高度\n\n protected _x: number;\n protected _y: number;\n protected _dpr: number;\n\n protected _container?: HTMLElement | null;\n protected _nativeCanvas: HTMLCanvasElement;\n protected _context: IContext2d;\n protected _visiable: boolean;\n protected controled: boolean;\n\n get displayWidth(): number {\n return this._pixelWidth / this._dpr;\n }\n\n get displayHeight(): number {\n return this._pixelHeight / this._dpr;\n }\n\n get id(): number | string {\n return this._id;\n }\n get x(): number {\n return this._x;\n }\n set x(_x: number) {\n this._x = _x;\n }\n get y(): number {\n return this._y;\n }\n set y(_y: number) {\n this._y = _y;\n }\n get nativeCanvas(): HTMLCanvasElement {\n return this._nativeCanvas;\n }\n\n get width(): number {\n return this._pixelWidth;\n }\n set width(width: number) {\n this._pixelWidth = width;\n this._displayWidth = width / (this._dpr || 1);\n }\n\n get height(): number {\n return this._pixelHeight;\n }\n set height(height: number) {\n this._pixelHeight = height;\n this._displayHeight = height / (this._dpr || 1);\n }\n getContext(str?: string): IContext2d {\n return this._context;\n }\n\n get visiable(): boolean {\n return this._visiable;\n }\n set visiable(visiable: boolean) {\n this._visiable = visiable;\n visiable ? this.show() : this.hide();\n }\n\n get dpr(): number {\n return this._dpr;\n }\n set dpr(dpr: number) {\n // this._lastPixelRatio = this._pixelRatio;\n this._dpr = dpr;\n this.resize(this._displayWidth, this._displayHeight);\n }\n\n /**\n * 通过canvas生成一个wrap对象,初始化时不会再设置canvas的属性\n * @param params\n */\n constructor(params: CanvasConfigType) {\n const {\n nativeCanvas,\n width = DefaultConfig.WIDTH,\n height = DefaultConfig.HEIGHT,\n dpr = DefaultConfig.DPR,\n x,\n y,\n id,\n canvasControled = true\n } = params;\n const offsetX = 0;\n const offsetY = 0;\n this._x = x ?? offsetX;\n this._y = y ?? offsetY;\n this._pixelWidth = width * dpr;\n this._pixelHeight = height * dpr;\n this._visiable = params.visiable !== false;\n this.controled = canvasControled;\n\n // 离屏canvas\n this._displayWidth = width;\n this._displayHeight = height;\n this._dpr = dpr;\n this._nativeCanvas = nativeCanvas;\n this._id = nativeCanvas.id ?? id;\n if (id) {\n nativeCanvas.id = id;\n }\n\n this.init(params);\n }\n\n getNativeCanvas(): HTMLCanvasElement {\n return this._nativeCanvas;\n }\n hide() {\n return;\n }\n show() {\n return;\n }\n\n abstract init(params: CanvasConfigType): void;\n\n applyPosition(): void {\n return;\n }\n\n resetStyle(params: Partial<CanvasConfigType>): void {\n return;\n }\n\n /**\n * 设置canvas的size大小,设置context的scale\n * @param width\n * @param height\n */\n resize(width: number, height: number): void {\n return;\n }\n\n toDataURL(): string;\n toDataURL(mimeType: 'image/png'): string;\n toDataURL(mimeType: 'image/jpeg', quality: number): string;\n toDataURL(mimeType?: string, quality?: number) {\n return '';\n }\n\n readPixels(x: number, y: number, w: number, h: number): ImageData | Promise<ImageData> {\n return this._context.getImageData(x, y, w, h);\n }\n\n convertToBlob(options?: { type?: string | undefined; quality?: number | undefined } | undefined): Promise<Blob> {\n throw new Error('暂未实现');\n }\n\n transferToImageBitmap(): ImageBitmap {\n throw new Error('暂未实现');\n }\n\n release(...params: any): void {\n if (this.controled) {\n this._nativeCanvas.parentElement && this._nativeCanvas.parentElement.removeChild(this._nativeCanvas);\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/canvas/contributions/base-canvas.ts"],"names":[],"mappings":"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","file":"base-canvas.js","sourcesContent":["import type { CanvasConfigType, ICanvas, IContext2d, EnvType } from '../../interface';\n\nconst DefaultConfig = {\n WIDTH: 500,\n HEIGHT: 500,\n DPR: 1\n};\n\nexport abstract class BaseCanvas implements ICanvas {\n static env: EnvType = 'browser';\n // 显示的宽高,如果是离屏canvas,就是pixelWidth / pixelRatio\n protected _displayWidth: number; // 显示的宽度\n protected _displayHeight: number; // 显示的高度\n protected _id: number | string;\n // 像素宽高\n protected _pixelWidth: number; // 像素宽度\n protected _pixelHeight: number; // 像素高度\n\n protected _x: number;\n protected _y: number;\n protected _dpr: number;\n\n protected _container?: HTMLElement | null;\n protected _nativeCanvas: HTMLCanvasElement;\n protected _context: IContext2d;\n protected _visiable: boolean;\n protected controled: boolean;\n\n get displayWidth(): number {\n return this._pixelWidth / this._dpr;\n }\n\n get displayHeight(): number {\n return this._pixelHeight / this._dpr;\n }\n /**\n * TODO\n * get\\set 方法看看是否可以删掉\n */\n get id(): number | string {\n return this._id;\n }\n get x(): number {\n return this._x;\n }\n set x(_x: number) {\n this._x = _x;\n }\n get y(): number {\n return this._y;\n }\n set y(_y: number) {\n this._y = _y;\n }\n get nativeCanvas(): HTMLCanvasElement {\n return this._nativeCanvas;\n }\n\n get width(): number {\n return this._pixelWidth;\n }\n set width(width: number) {\n this._pixelWidth = width;\n this._displayWidth = width / (this._dpr || 1);\n }\n\n get height(): number {\n return this._pixelHeight;\n }\n set height(height: number) {\n this._pixelHeight = height;\n this._displayHeight = height / (this._dpr || 1);\n }\n getContext(str?: string): IContext2d {\n return this._context;\n }\n\n get visiable(): boolean {\n return this._visiable;\n }\n set visiable(visiable: boolean) {\n this._visiable = visiable;\n visiable ? this.show() : this.hide();\n }\n\n get dpr(): number {\n return this._dpr;\n }\n set dpr(dpr: number) {\n // this._lastPixelRatio = this._pixelRatio;\n this._dpr = dpr;\n this.resize(this._displayWidth, this._displayHeight);\n }\n\n /**\n * 通过canvas生成一个wrap对象,初始化时不会再设置canvas的属性\n * @param params\n */\n constructor(params: CanvasConfigType) {\n const {\n nativeCanvas,\n width = DefaultConfig.WIDTH,\n height = DefaultConfig.HEIGHT,\n dpr = DefaultConfig.DPR,\n x,\n y,\n id,\n canvasControled = true\n } = params;\n const offsetX = 0;\n const offsetY = 0;\n this._x = x ?? offsetX;\n this._y = y ?? offsetY;\n this._pixelWidth = width * dpr;\n this._pixelHeight = height * dpr;\n this._visiable = params.visiable !== false;\n this.controled = canvasControled;\n\n // 离屏canvas\n this._displayWidth = width;\n this._displayHeight = height;\n this._dpr = dpr;\n this._nativeCanvas = nativeCanvas;\n this._id = nativeCanvas.id ?? id;\n if (id) {\n nativeCanvas.id = id;\n }\n\n this.init(params);\n }\n\n getNativeCanvas(): HTMLCanvasElement {\n return this._nativeCanvas;\n }\n hide() {\n return;\n }\n show() {\n return;\n }\n\n abstract init(params: CanvasConfigType): void;\n\n applyPosition(): void {\n return;\n }\n\n resetStyle(params: Partial<CanvasConfigType>): void {\n return;\n }\n\n /**\n * 设置canvas的size大小,设置context的scale\n * @param width\n * @param height\n */\n resize(width: number, height: number): void {\n return;\n }\n\n toDataURL(): string;\n toDataURL(mimeType: 'image/png'): string;\n toDataURL(mimeType: 'image/jpeg', quality: number): string;\n toDataURL(mimeType?: string, quality?: number) {\n return '';\n }\n\n readPixels(x: number, y: number, w: number, h: number): ImageData | Promise<ImageData> {\n return this._context.getImageData(x, y, w, h);\n }\n\n convertToBlob(options?: { type?: string | undefined; quality?: number | undefined } | undefined): Promise<Blob> {\n throw new Error('暂未实现');\n }\n\n transferToImageBitmap(): ImageBitmap {\n throw new Error('暂未实现');\n }\n\n release(...params: any): void {\n if (this.controled) {\n this._nativeCanvas.parentElement && this._nativeCanvas.parentElement.removeChild(this._nativeCanvas);\n }\n }\n}\n"]}
@@ -12,7 +12,6 @@ export declare function quadraticExtremum(p0: number, p1: number, p2: number): n
12
12
  export declare function quadraticProjectPoint(x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x: number, y: number, out: [number, number] | null): number;
13
13
  export declare function cubicProjectPoint(x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x: number, y: number, out: [number, number] | null): number;
14
14
  export declare function normalizeRadian(angle: number): number;
15
- export default function windingLine(x0: number, y0: number, x1: number, y1: number, x: number, y: number): number;
16
15
  export declare function containQuadStroke(x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, lineWidth: number, x: number, y: number): boolean;
17
16
  export declare function containCubicStroke(x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, lineWidth: number, x: number, y: number): boolean;
18
17
  export declare function containArcStroke(cx: number, cy: number, r: number, startAngle: number, endAngle: number, anticlockwise: boolean, lineWidth: number, x: number, y: number): boolean;
@@ -120,16 +120,6 @@ function normalizeRadian(angle) {
120
120
  return (angle %= vutils_1.pi2) < 0 && (angle += vutils_1.pi2), angle;
121
121
  }
122
122
 
123
- function windingLine(x0, y0, x1, y1, x, y) {
124
- if (y > y0 && y > y1 || y < y0 && y < y1) return 0;
125
- if (y1 === y0) return 0;
126
- const t = (y - y0) / (y1 - y0);
127
- let dir = y1 < y0 ? 1 : -1;
128
- 1 !== t && 0 !== t || (dir = y1 < y0 ? .5 : -.5);
129
- const x_ = t * (x1 - x0) + x0;
130
- return x_ === x ? 1 / 0 : x_ > x ? dir : 0;
131
- }
132
-
133
123
  function containQuadStroke(x0, y0, x1, y1, x2, y2, lineWidth, x, y) {
134
124
  if (0 === lineWidth) return !1;
135
125
  const _l = lineWidth;
@@ -174,7 +164,7 @@ function containLineStroke(x0, y0, x1, y1, lineWidth, x, y) {
174
164
  exports.quadraticAt = quadraticAt, exports.cubicAt = cubicAt, exports.quadraticRootAt = quadraticRootAt,
175
165
  exports.quadraticExtremum = quadraticExtremum, exports.quadraticProjectPoint = quadraticProjectPoint,
176
166
  exports.cubicProjectPoint = cubicProjectPoint, exports.normalizeRadian = normalizeRadian,
177
- exports.default = windingLine, exports.containQuadStroke = containQuadStroke, exports.containCubicStroke = containCubicStroke,
167
+ exports.containQuadStroke = containQuadStroke, exports.containCubicStroke = containCubicStroke,
178
168
  exports.containArcStroke = containArcStroke, exports.containLineStroke = containLineStroke;
179
169
 
180
170
  const globalPoint = {
@@ -329,7 +319,7 @@ function containPath(commands, lineWidth, isStroke, x, y) {
329
319
  let x1, y1, w = 0, xi = 0, yi = 0, x0 = 0, y0 = 0;
330
320
  for (let i = 0; i < len; i++) {
331
321
  const command = data[i], isFirst = 0 === i;
332
- command[0] === path_svg_1.enumCommandMap.M && i > 1 && (isStroke || (w += windingLine(xi, yi, x0, y0, x, y))),
322
+ command[0] === path_svg_1.enumCommandMap.M && i > 1 && (isStroke || (w += (0, vutils_1.isPointInLine)(xi, yi, x0, y0, x, y))),
333
323
  isFirst && (xi = command[1], yi = command[2], x0 = xi, y0 = yi);
334
324
  const c0 = command[0], c1 = command[1], c2 = command[2], c3 = command[3], c4 = command[4], c5 = command[5], c6 = command[6];
335
325
  let startAngle = c4, endAngle = c5;
@@ -344,7 +334,7 @@ function containPath(commands, lineWidth, isStroke, x, y) {
344
334
  case path_svg_1.enumCommandMap.L:
345
335
  if (isStroke) {
346
336
  if (containLineStroke(xi, yi, c1, c2, lineWidth, x, y)) return !0;
347
- } else w += windingLine(xi, yi, c1, c2, x, y) || 0;
337
+ } else w += (0, vutils_1.isPointInLine)(xi, yi, c1, c2, x, y) || 0;
348
338
  xi = c1, yi = c2;
349
339
  break;
350
340
 
@@ -364,7 +354,7 @@ function containPath(commands, lineWidth, isStroke, x, y) {
364
354
 
365
355
  case path_svg_1.enumCommandMap.A:
366
356
  if (x1 = Math.cos(theta) * c3 + c1, y1 = Math.sin(theta) * c3 + c2, isFirst ? (x0 = x1,
367
- y0 = y1) : w += windingLine(xi, yi, x1, y1, x, y), isStroke) {
357
+ y0 = y1) : w += (0, vutils_1.isPointInLine)(xi, yi, x1, y1, x, y), isStroke) {
368
358
  if (containArcStroke(c1, c2, c3, theta, theta + dTheta, anticlockwise, lineWidth, _x, y)) return !0;
369
359
  } else w += windingArc(c1, c2, c3, theta, theta + dTheta, anticlockwise, _x, y);
370
360
  xi = Math.cos(theta + dTheta) * c3 + c1, yi = Math.sin(theta + dTheta) * c3 + c2;
@@ -373,17 +363,17 @@ function containPath(commands, lineWidth, isStroke, x, y) {
373
363
  case path_svg_1.enumCommandMap.R:
374
364
  if (x0 = xi = c1, y0 = yi = c2, x1 = x0 + c3, y1 = y0 + c4, isStroke) {
375
365
  if (containLineStroke(x0, y0, x1, y0, lineWidth, x, y) || containLineStroke(x1, y0, x1, y1, lineWidth, x, y) || containLineStroke(x1, y1, x0, y1, lineWidth, x, y) || containLineStroke(x0, y1, x0, y0, lineWidth, x, y)) return !0;
376
- } else w += windingLine(x1, y0, x1, y1, x, y), w += windingLine(x0, y1, x0, y0, x, y);
366
+ } else w += (0, vutils_1.isPointInLine)(x1, y0, x1, y1, x, y), w += (0, vutils_1.isPointInLine)(x0, y1, x0, y0, x, y);
377
367
  break;
378
368
 
379
369
  case path_svg_1.enumCommandMap.Z:
380
370
  if (isStroke) {
381
371
  if (containLineStroke(xi, yi, x0, y0, lineWidth, x, y)) return !0;
382
- } else w += windingLine(xi, yi, x0, y0, x, y);
372
+ } else w += (0, vutils_1.isPointInLine)(xi, yi, x0, y0, x, y);
383
373
  xi = x0, yi = y0;
384
374
  }
385
375
  }
386
- return isStroke || isAroundEqual(yi, y0) || (w += windingLine(xi, yi, x0, y0, x, y) || 0),
376
+ return isStroke || isAroundEqual(yi, y0) || (w += (0, vutils_1.isPointInLine)(xi, yi, x0, y0, x, y) || 0),
387
377
  0 !== w;
388
378
  }
389
379
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/canvas/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import type { IPointLike, vec2 } from '@visactor/vutils';\nimport { pi, pi2 } from '@visactor/vutils';\nimport { enumCommandMap as CMD } from '../common/path-svg';\nimport type { CommandType, IContext2d } from '../interface';\nimport { container } from '../container';\nimport { application } from '../application';\nimport { CanvasFactory, Context2dFactory } from './constants';\nimport type { CanvasConfigType, ICanvas, ICanvasFactory, IContext2dFactory } from '../interface';\n\nexport function wrapCanvas(params: CanvasConfigType) {\n return container.getNamed<ICanvasFactory>(CanvasFactory, application.global.env)(params);\n}\n\nexport function wrapContext(canvas: ICanvas, dpr: number) {\n return container.getNamed<IContext2dFactory>(Context2dFactory, application.global.env)(canvas, dpr);\n}\n// 源码参考 http://pomax.github.io/bezierinfo/#projections\n/**\n * 源码参考zrender https://github.com/ecomfe/zrender/\n * BSD 3-Clause License\n\n Copyright (c) 2017, Baidu Inc.\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// todo: 优化逻辑\n\nconst EPSILON_NUMERIC = 1e-4;\n\nconst THREE_SQRT = Math.sqrt(3);\nconst ONE_THIRD = 1 / 3;\nfunction isAroundZero(val: number) {\n return val > -EPSILON && val < EPSILON;\n}\nfunction isNotAroundZero(val: number) {\n return val > EPSILON || val < -EPSILON;\n}\nexport function vec2Equals(d1: vec2, d2: vec2): boolean {\n return Math.abs(d1[0] - d2[0]) + Math.abs(d1[1] - d2[1]) < 1e-10;\n}\n\nexport function isNumber(data: any): boolean {\n return typeof data === 'number' && Number.isFinite(data);\n}\n\nconst _v0: [number, number] = [0, 0];\nconst _v1: [number, number] = [0, 0];\nconst _v2: [number, number] = [0, 0];\n\nfunction distanceSquare(v1: [number, number], v2: [number, number]): number {\n return (v1[0] - v2[0]) * (v1[0] - v2[0]) + (v1[1] - v2[1]) * (v1[1] - v2[1]);\n}\n\n/**\n * 计算二次方贝塞尔值\n */\nexport function quadraticAt(p0: number, p1: number, p2: number, t: number): number {\n const onet = 1 - t;\n return onet * (onet * p0 + 2 * t * p1) + t * t * p2;\n}\n\n/**\n * 计算三次贝塞尔值\n */\nexport function cubicAt(p0: number, p1: number, p2: number, p3: number, t: number): number {\n const onet = 1 - t;\n return onet * onet * (onet * p0 + 3 * t * p1) + t * t * (t * p3 + 3 * onet * p2);\n}\n\n/**\n * 计算二次方贝塞尔方程根\n * @return 有效根数目\n */\nexport function quadraticRootAt(p0: number, p1: number, p2: number, val: number, roots: number[]): number {\n const a = p0 - 2 * p1 + p2;\n const b = 2 * (p1 - p0);\n const c = p0 - val;\n\n let n = 0;\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n const t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n } else {\n const disc = b * b - 4 * a * c;\n if (isAroundZero(disc)) {\n const t1 = -b / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n } else if (disc > 0) {\n const discSqrt = Math.sqrt(disc);\n const t1 = (-b + discSqrt) / (2 * a);\n const t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n }\n }\n return n;\n}\n\n/**\n * 计算二次贝塞尔方程极限值\n */\nexport function quadraticExtremum(p0: number, p1: number, p2: number): number {\n const divider = p0 + p2 - 2 * p1;\n if (divider === 0) {\n // p1 is center of p0 and p2\n return 0.5;\n }\n\n return (p0 - p1) / divider;\n}\n\n/**\n * 投射点到二次贝塞尔曲线上,返回投射距离。\n * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n * @param {Array.<number>} out 投射点\n * @return {number}\n */\nexport function quadraticProjectPoint(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x: number,\n y: number,\n out: [number, number] | null\n): number {\n // http://pomax.github.io/bezierinfo/#projections\n let t: number = 0;\n let interval = 0.005;\n let d = Infinity;\n\n _v0[0] = x;\n _v0[1] = y;\n\n // 先粗略估计一下可能的最小距离的 t 值\n // PENDING\n for (let _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = quadraticAt(x0, x1, x2, _t);\n _v1[1] = quadraticAt(y0, y1, y2, _t);\n const d1 = distanceSquare(_v0, _v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n\n // At most 32 iteration\n for (let i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n const prev = t - interval;\n const next = t + interval;\n // t - interval\n _v1[0] = quadraticAt(x0, x1, x2, prev);\n _v1[1] = quadraticAt(y0, y1, y2, prev);\n\n const d1 = distanceSquare(_v1, _v0);\n\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n } else {\n // t + interval\n _v2[0] = quadraticAt(x0, x1, x2, next);\n _v2[1] = quadraticAt(y0, y1, y2, next);\n const d2 = distanceSquare(_v2, _v0);\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n } else {\n interval *= 0.5;\n }\n }\n }\n // t\n if (out) {\n out[0] = quadraticAt(x0, x1, x2, t);\n out[1] = quadraticAt(y0, y1, y2, t);\n }\n\n return Math.sqrt(d);\n}\n\n/**\n * 投射点到三次贝塞尔曲线上,返回投射距离。\n * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。\n */\nexport function cubicProjectPoint(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n x: number,\n y: number,\n out: [number, number] | null\n): number {\n // http://pomax.github.io/bezierinfo/#projections\n let t: number = 0;\n let interval = 0.005;\n let d = Infinity;\n let prev;\n let next;\n let d1;\n let d2;\n\n _v0[0] = x;\n _v0[1] = y;\n\n // 先粗略估计一下可能的最小距离的 t 值\n // PENDING\n for (let _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = cubicAt(x0, x1, x2, x3, _t);\n _v1[1] = cubicAt(y0, y1, y2, y3, _t);\n d1 = distanceSquare(_v0, _v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n\n // At most 32 iteration\n for (let i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n prev = t - interval;\n next = t + interval;\n // t - interval\n _v1[0] = cubicAt(x0, x1, x2, x3, prev);\n _v1[1] = cubicAt(y0, y1, y2, y3, prev);\n\n d1 = distanceSquare(_v1, _v0);\n\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n } else {\n // t + interval\n _v2[0] = cubicAt(x0, x1, x2, x3, next);\n _v2[1] = cubicAt(y0, y1, y2, y3, next);\n d2 = distanceSquare(_v2, _v0);\n\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n } else {\n interval *= 0.5;\n }\n }\n }\n // t\n if (out) {\n out[0] = cubicAt(x0, x1, x2, x3, t);\n out[1] = cubicAt(y0, y1, y2, y3, t);\n }\n // console.log(interval, i);\n return Math.sqrt(d);\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/util.ts\nexport function normalizeRadian(angle: number): number {\n angle %= pi2;\n if (angle < 0) {\n angle += pi2;\n }\n return angle;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/windingLine.ts\nexport default function windingLine(x0: number, y0: number, x1: number, y1: number, x: number, y: number): number {\n if ((y > y0 && y > y1) || (y < y0 && y < y1)) {\n return 0;\n }\n // Ignore horizontal line\n if (y1 === y0) {\n return 0;\n }\n const t = (y - y0) / (y1 - y0);\n\n let dir = y1 < y0 ? 1 : -1;\n // Avoid winding error when intersection point is the connect point of two line of polygon\n if (t === 1 || t === 0) {\n dir = y1 < y0 ? 0.5 : -0.5;\n }\n\n const x_ = t * (x1 - x0) + x0;\n\n // If (x, y) on the line, considered as \"contain\".\n return x_ === x ? Infinity : x_ > x ? dir : 0;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/quadratic.ts\nexport function containQuadStroke(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n lineWidth: number,\n x: number,\n y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n // Quick reject\n if (\n (y > y0 + _l && y > y1 + _l && y > y2 + _l) ||\n (y < y0 - _l && y < y1 - _l && y < y2 - _l) ||\n (x > x0 + _l && x > x1 + _l && x > x2 + _l) ||\n (x < x0 - _l && x < x1 - _l && x < x2 - _l)\n ) {\n return false;\n }\n const d = quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, null);\n return d <= _l / 2;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/cubic.ts\n/**\n * 三次贝塞尔曲线描边包含判断\n */\nexport function containCubicStroke(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n lineWidth: number,\n x: number,\n y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n // Quick reject\n if (\n (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l) ||\n (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l) ||\n (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l) ||\n (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l)\n ) {\n return false;\n }\n const d = cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, null);\n return d <= _l / 2;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/arc.ts\n/**\n * 圆弧描边包含判断\n */\nexport function containArcStroke(\n cx: number,\n cy: number,\n r: number,\n startAngle: number,\n endAngle: number,\n anticlockwise: boolean,\n lineWidth: number,\n x: number,\n y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n\n x -= cx;\n y -= cy;\n const d = Math.sqrt(x * x + y * y);\n\n if (d - _l > r || d + _l < r) {\n return false;\n }\n // TODO\n if (Math.abs(startAngle - endAngle) % pi2 < 1e-4) {\n // Is a circle\n return true;\n }\n if (anticlockwise) {\n const tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n if (startAngle > endAngle) {\n endAngle += pi2;\n }\n\n let angle = Math.atan2(y, x);\n if (angle < 0) {\n angle += pi2;\n }\n return (angle >= startAngle && angle <= endAngle) || (angle + pi2 >= startAngle && angle + pi2 <= endAngle);\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/line.ts\n/**\n * 线段包含判断\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} lineWidth\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\nexport function containLineStroke(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n lineWidth: number,\n x: number,\n y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n const _halfL = lineWidth / 2;\n let _a = 0;\n let _b = x0;\n // Quick reject\n if (\n (y > y0 + _halfL && y > y1 + _halfL) ||\n (y < y0 - _halfL && y < y1 - _halfL) ||\n (x > x0 + _halfL && x > x1 + _halfL) ||\n (x < x0 - _halfL && x < x1 - _halfL)\n ) {\n return false;\n }\n\n if (x0 !== x1) {\n _a = (y0 - y1) / (x0 - x1);\n _b = (x0 * y1 - x1 * y0) / (x0 - x1);\n } else {\n return Math.abs(x - x0) <= _l / 2;\n }\n const tmp = _a * x - y + _b;\n const _s = (tmp * tmp) / (_a * _a + 1);\n return _s <= ((_l / 2) * _l) / 2;\n}\n\nconst globalPoint: IPointLike = { x: 0, y: 0 };\nexport function transformPoint(pos: IPointLike, ctx: IContext2d, out?: IPointLike): IPointLike {\n const matrix = ctx.currentMatrix.getInverse();\n out = out || globalPoint;\n out.x = pos.x * matrix.a + pos.y * matrix.c + matrix.e;\n out.y = pos.x * matrix.b + pos.y * matrix.d + matrix.f;\n return out;\n}\n\nconst EPSILON = 1e-4;\n\n/**\n * 计算三次贝塞尔方程根,使用盛金公式\n */\nexport function cubicRootAt(p0: number, p1: number, p2: number, p3: number, val: number, roots: number[]): number {\n // Evaluate roots of cubic functions\n const a = p3 + 3 * (p1 - p2) - p0;\n const b = 3 * (p2 - p1 * 2 + p0);\n const c = 3 * (p1 - p0);\n const d = p0 - val;\n\n const A = b * b - 3 * a * c;\n const B = b * c - 9 * a * d;\n const C = c * c - 3 * b * d;\n\n let n = 0;\n\n if (isAroundZero(A) && isAroundZero(B)) {\n if (isAroundZero(b)) {\n roots[0] = 0;\n } else {\n const t1 = -c / b; //t1, t2, t3, b is not zero\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n } else {\n const disc = B * B - 4 * A * C;\n\n if (isAroundZero(disc)) {\n const K = B / A;\n const t1 = -b / a + K; // t1, a is not zero\n const t2 = -K / 2; // t2, t3\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n } else if (disc > 0) {\n const discSqrt = Math.sqrt(disc);\n let Y1 = A * b + 1.5 * a * (-B + discSqrt);\n let Y2 = A * b + 1.5 * a * (-B - discSqrt);\n if (Y1 < 0) {\n Y1 = -Math.pow(-Y1, ONE_THIRD);\n } else {\n Y1 = Math.pow(Y1, ONE_THIRD);\n }\n if (Y2 < 0) {\n Y2 = -Math.pow(-Y2, ONE_THIRD);\n } else {\n Y2 = Math.pow(Y2, ONE_THIRD);\n }\n const t1 = (-b - (Y1 + Y2)) / (3 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n } else {\n const T = (2 * A * b - 3 * a * B) / (2 * Math.sqrt(A * A * A));\n const theta = Math.acos(T) / 3;\n const ASqrt = Math.sqrt(A);\n const tmp = Math.cos(theta);\n\n const t1 = (-b - 2 * ASqrt * tmp) / (3 * a);\n const t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);\n const t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n if (t3 >= 0 && t3 <= 1) {\n roots[n++] = t3;\n }\n }\n }\n return n;\n}\n\n/**\n * 计算三次贝塞尔方程极限值的位置\n * @return 有效数目\n */\nexport function cubicExtrema(p0: number, p1: number, p2: number, p3: number, extrema: number[]): number {\n const b = 6 * p2 - 12 * p1 + 6 * p0;\n const a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;\n const c = 3 * p1 - 3 * p0;\n\n let n = 0;\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n const t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n }\n } else {\n const disc = b * b - 4 * a * c;\n if (isAroundZero(disc)) {\n extrema[0] = -b / (2 * a);\n } else if (disc > 0) {\n const discSqrt = Math.sqrt(disc);\n const t1 = (-b + discSqrt) / (2 * a);\n const t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n extrema[n++] = t2;\n }\n }\n }\n return n;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nfunction isAroundEqual(a: number, b: number) {\n return Math.abs(a - b) < EPSILON;\n}\n\n// 临时数组\nconst roots = [-1, -1, -1];\nconst extrema = [-1, -1];\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nfunction swapExtrema() {\n const tmp = extrema[0];\n extrema[0] = extrema[1];\n extrema[1] = tmp;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nfunction windingCubic(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n x: number,\n y: number\n): number {\n // Quick reject\n if ((y > y0 && y > y1 && y > y2 && y > y3) || (y < y0 && y < y1 && y < y2 && y < y3)) {\n return 0;\n }\n const nRoots = cubicRootAt(y0, y1, y2, y3, y, roots);\n if (nRoots === 0) {\n return 0;\n }\n\n let w = 0;\n let nExtrema = -1;\n let y0_ = 0;\n let y1_ = 0;\n for (let i = 0; i < nRoots; i++) {\n const t = roots[i];\n\n // Avoid winding error when intersection point is the connect point of two line of polygon\n const unit = t === 0 || t === 1 ? 0.5 : 1;\n\n const x_ = cubicAt(x0, x1, x2, x3, t);\n if (x_ < x) {\n // Quick reject\n continue;\n }\n if (nExtrema < 0) {\n nExtrema = cubicExtrema(y0, y1, y2, y3, extrema);\n if (extrema[1] < extrema[0] && nExtrema > 1) {\n swapExtrema();\n }\n y0_ = cubicAt(y0, y1, y2, y3, extrema[0]);\n if (nExtrema > 1) {\n y1_ = cubicAt(y0, y1, y2, y3, extrema[1]);\n }\n }\n if (nExtrema === 2) {\n // 分成三段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n } else if (t < extrema[1]) {\n w += y1_ < y0_ ? unit : -unit;\n } else {\n w += y3 < y1_ ? unit : -unit;\n }\n } else {\n // 分成两段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n } else {\n w += y3 < y0_ ? unit : -unit;\n }\n }\n }\n return w;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nfunction windingQuadratic(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x: number,\n y: number\n): number {\n // Quick reject\n if ((y > y0 && y > y1 && y > y2) || (y < y0 && y < y1 && y < y2)) {\n return 0;\n }\n const nRoots = quadraticRootAt(y0, y1, y2, y, roots);\n if (nRoots === 0) {\n return 0;\n }\n\n const t = quadraticExtremum(y0, y1, y2);\n if (t >= 0 && t <= 1) {\n let w = 0;\n const y_ = quadraticAt(y0, y1, y2, t);\n for (let i = 0; i < nRoots; i++) {\n // Remove one endpoint.\n const unit = roots[i] === 0 || roots[i] === 1 ? 0.5 : 1;\n\n const x_ = quadraticAt(x0, x1, x2, roots[i]);\n if (x_ < x) {\n // Quick reject\n continue;\n }\n if (roots[i] < t) {\n w += y_ < y0 ? unit : -unit;\n } else {\n w += y2 < y_ ? unit : -unit;\n }\n }\n return w;\n }\n\n // Remove one endpoint.\n const unit = roots[0] === 0 || roots[0] === 1 ? 0.5 : 1;\n\n const x_ = quadraticAt(x0, x1, x2, roots[0]);\n if (x_ < x) {\n // Quick reject\n return 0;\n }\n return y2 < y0 ? unit : -unit;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\n// TODO\n// Arc 旋转\n// startAngle, endAngle has been normalized by normalizeArcAngles\nfunction windingArc(\n cx: number,\n cy: number,\n r: number,\n startAngle: number,\n endAngle: number,\n anticlockwise: boolean,\n x: number,\n y: number\n) {\n y -= cy;\n if (y > r || y < -r) {\n return 0;\n }\n const tmp = Math.sqrt(r * r - y * y);\n roots[0] = -tmp;\n roots[1] = tmp;\n\n const dTheta = Math.abs(startAngle - endAngle);\n if (dTheta < 1e-4) {\n return 0;\n }\n if (dTheta >= pi2 - 1e-4) {\n // Is a circle\n startAngle = 0;\n endAngle = pi2;\n const dir = anticlockwise ? 1 : -1;\n if (x >= roots[0] + cx && x <= roots[1] + cx) {\n return dir;\n }\n\n return 0;\n }\n\n if (startAngle > endAngle) {\n // Swap, make sure startAngle is smaller than endAngle.\n const tmp = startAngle;\n startAngle = endAngle;\n endAngle = tmp;\n }\n // endAngle - startAngle is normalized to 0 - 2*pi.\n // So following will normalize them to 0 - 4*pi\n if (startAngle < 0) {\n startAngle += pi2;\n endAngle += pi2;\n }\n\n let w = 0;\n for (let i = 0; i < 2; i++) {\n const x_ = roots[i];\n if (x_ + cx > x) {\n let angle = Math.atan2(y, x_);\n let dir = anticlockwise ? 1 : -1;\n if (angle < 0) {\n angle = pi2 + angle;\n }\n if ((angle >= startAngle && angle <= endAngle) || (angle + pi2 >= startAngle && angle + pi2 <= endAngle)) {\n if (angle > pi / 2 && angle < pi * 1.5) {\n dir = -dir;\n }\n w += dir;\n }\n }\n }\n return w;\n}\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/core/PathProxy.ts\nfunction modpi2(radian: number) {\n const n = Math.round((radian / pi) * 1e8) / 1e8;\n return (n % 2) * pi;\n}\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/core/PathProxy.ts\nfunction normalizeArcAngles(angles: [number, number], anticlockwise: boolean) {\n let newStartAngle = modpi2(angles[0]);\n if (newStartAngle < 0) {\n newStartAngle += pi2;\n }\n const delta = newStartAngle - angles[0];\n let newEndAngle = angles[1];\n newEndAngle += delta;\n if (!anticlockwise && newEndAngle - newStartAngle >= pi2) {\n newEndAngle = newStartAngle + pi2;\n } else if (anticlockwise && newStartAngle - newEndAngle >= pi2) {\n newEndAngle = newStartAngle - pi2;\n } else if (!anticlockwise && newStartAngle > newEndAngle) {\n newEndAngle = newStartAngle + (pi2 - modpi2(newStartAngle - newEndAngle));\n } else if (anticlockwise && newStartAngle < newEndAngle) {\n newEndAngle = newStartAngle - (pi2 - modpi2(newEndAngle - newStartAngle));\n }\n angles[0] = newStartAngle;\n angles[1] = newEndAngle;\n}\n\nconst tmpAngles: [number, number] = [0, 0];\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nfunction containPath(commands: CommandType[], lineWidth: number, isStroke: boolean, x: number, y: number): boolean {\n const data = commands;\n const len = commands.length;\n let w = 0;\n let xi = 0;\n let yi = 0;\n let x0 = 0;\n let y0 = 0;\n let x1;\n let y1;\n\n for (let i = 0; i < len; i++) {\n const command = data[i];\n const isFirst = i === 0;\n // Begin a new subpath\n if (command[0] === CMD.M && i > 1) {\n // Close previous subpath\n if (!isStroke) {\n w += windingLine(xi, yi, x0, y0, x, y);\n }\n }\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n //\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = command[1] as number;\n yi = command[2] as number;\n\n x0 = xi;\n y0 = yi;\n }\n\n const c0 = command[0];\n const c1 = command[1] as number;\n const c2 = command[2] as number;\n const c3 = command[3] as number;\n const c4 = command[4] as number;\n const c5 = command[5] as number;\n const c6 = command[6] as number;\n\n // TODO Arc 判断的开销比较大\n let startAngle = c4;\n let endAngle = c5;\n tmpAngles[0] = startAngle;\n tmpAngles[1] = endAngle;\n normalizeArcAngles(tmpAngles, Boolean(command[6]));\n startAngle = tmpAngles[0];\n endAngle = tmpAngles[1];\n const theta = startAngle;\n const dTheta = endAngle - startAngle;\n const anticlockwise = !!(1 - (command[6] ? 0 : 1));\n const _x = ((x - c1) * c3) / c3 + c1;\n switch (c0) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n x0 = c1;\n y0 = c2;\n xi = x0;\n yi = y0;\n break;\n case CMD.L:\n if (isStroke) {\n if (containLineStroke(xi, yi, c1, c2, lineWidth, x, y)) {\n return true;\n }\n } else {\n // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN\n w += windingLine(xi, yi, c1, c2, x, y) || 0;\n }\n xi = c1;\n yi = c2;\n break;\n case CMD.C:\n if (isStroke) {\n if (containCubicStroke(xi, yi, c1, c2, c3, c4, c5, c6, lineWidth, x, y)) {\n return true;\n }\n } else {\n w += windingCubic(xi, yi, c1, c2, c3, c4, c5, c6, x, y) || 0;\n }\n xi = c5;\n yi = c6;\n break;\n case CMD.Q:\n if (isStroke) {\n if (containQuadStroke(xi, yi, c1, c2, c3, c4, lineWidth, x, y)) {\n return true;\n }\n } else {\n w += windingQuadratic(xi, yi, c1, c2, c3, c4, x, y) || 0;\n }\n xi = c3;\n yi = c4;\n break;\n case CMD.A:\n // TODO Arc 旋转\n x1 = Math.cos(theta) * c3 + c1;\n y1 = Math.sin(theta) * c3 + c2;\n // 不是直接使用 arc 命令\n if (!isFirst) {\n w += windingLine(xi, yi, x1, y1, x, y);\n } else {\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n }\n // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n if (isStroke) {\n if (containArcStroke(c1, c2, c3, theta, theta + dTheta, anticlockwise, lineWidth, _x, y)) {\n return true;\n }\n } else {\n w += windingArc(c1, c2, c3, theta, theta + dTheta, anticlockwise, _x, y);\n }\n xi = Math.cos(theta + dTheta) * c3 + c1;\n yi = Math.sin(theta + dTheta) * c3 + c2;\n break;\n case CMD.R:\n x0 = xi = c1;\n y0 = yi = c2;\n x1 = x0 + c3;\n y1 = y0 + c4;\n if (isStroke) {\n if (\n containLineStroke(x0, y0, x1, y0, lineWidth, x, y) ||\n containLineStroke(x1, y0, x1, y1, lineWidth, x, y) ||\n containLineStroke(x1, y1, x0, y1, lineWidth, x, y) ||\n containLineStroke(x0, y1, x0, y0, lineWidth, x, y)\n ) {\n return true;\n }\n } else {\n // FIXME Clockwise ?\n w += windingLine(x1, y0, x1, y1, x, y);\n w += windingLine(x0, y1, x0, y0, x, y);\n }\n break;\n case CMD.Z:\n if (isStroke) {\n if (containLineStroke(xi, yi, x0, y0, lineWidth, x, y)) {\n return true;\n }\n } else {\n // Close a subpath\n w += windingLine(xi, yi, x0, y0, x, y);\n // 如果被任何一个 subpath 包含\n // FIXME subpaths may overlap\n // if (w !== 0) {\n // return true;\n // }\n }\n xi = x0;\n yi = y0;\n break;\n }\n }\n if (!isStroke && !isAroundEqual(yi, y0)) {\n w += windingLine(xi, yi, x0, y0, x, y) || 0;\n }\n return w !== 0;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nexport function contain(commands: CommandType[], x: number, y: number): boolean {\n return containPath(commands, 0, false, x, y);\n}\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nexport function containStroke(commands: CommandType[], lineWidth: number, x: number, y: number): boolean {\n return containPath(commands, lineWidth, true, x, y);\n}\n"]}
1
+ {"version":3,"sources":["../src/canvas/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import type { IPointLike, vec2 } from '@visactor/vutils';\nimport { isPointInLine, pi, pi2 } from '@visactor/vutils';\nimport { enumCommandMap as CMD } from '../common/path-svg';\nimport type { CommandType, IContext2d } from '../interface';\nimport { container } from '../container';\nimport { application } from '../application';\nimport { CanvasFactory, Context2dFactory } from './constants';\nimport type { CanvasConfigType, ICanvas, ICanvasFactory, IContext2dFactory } from '../interface';\n\nexport function wrapCanvas(params: CanvasConfigType) {\n return container.getNamed<ICanvasFactory>(CanvasFactory, application.global.env)(params);\n}\n\nexport function wrapContext(canvas: ICanvas, dpr: number) {\n return container.getNamed<IContext2dFactory>(Context2dFactory, application.global.env)(canvas, dpr);\n}\n// 源码参考 http://pomax.github.io/bezierinfo/#projections\n/**\n * 源码参考zrender https://github.com/ecomfe/zrender/\n * BSD 3-Clause License\n\n Copyright (c) 2017, Baidu Inc.\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// todo: 优化逻辑\n\nconst EPSILON_NUMERIC = 1e-4;\n\nconst THREE_SQRT = Math.sqrt(3);\nconst ONE_THIRD = 1 / 3;\nfunction isAroundZero(val: number) {\n return val > -EPSILON && val < EPSILON;\n}\nfunction isNotAroundZero(val: number) {\n return val > EPSILON || val < -EPSILON;\n}\nexport function vec2Equals(d1: vec2, d2: vec2): boolean {\n return Math.abs(d1[0] - d2[0]) + Math.abs(d1[1] - d2[1]) < 1e-10;\n}\n\nexport function isNumber(data: any): boolean {\n return typeof data === 'number' && Number.isFinite(data);\n}\n\nconst _v0: [number, number] = [0, 0];\nconst _v1: [number, number] = [0, 0];\nconst _v2: [number, number] = [0, 0];\n\nfunction distanceSquare(v1: [number, number], v2: [number, number]): number {\n return (v1[0] - v2[0]) * (v1[0] - v2[0]) + (v1[1] - v2[1]) * (v1[1] - v2[1]);\n}\n\n/**\n * 计算二次方贝塞尔值\n */\nexport function quadraticAt(p0: number, p1: number, p2: number, t: number): number {\n const onet = 1 - t;\n return onet * (onet * p0 + 2 * t * p1) + t * t * p2;\n}\n\n/**\n * 计算三次贝塞尔值\n */\nexport function cubicAt(p0: number, p1: number, p2: number, p3: number, t: number): number {\n const onet = 1 - t;\n return onet * onet * (onet * p0 + 3 * t * p1) + t * t * (t * p3 + 3 * onet * p2);\n}\n\n/**\n * 计算二次方贝塞尔方程根\n * @return 有效根数目\n */\nexport function quadraticRootAt(p0: number, p1: number, p2: number, val: number, roots: number[]): number {\n const a = p0 - 2 * p1 + p2;\n const b = 2 * (p1 - p0);\n const c = p0 - val;\n\n let n = 0;\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n const t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n } else {\n const disc = b * b - 4 * a * c;\n if (isAroundZero(disc)) {\n const t1 = -b / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n } else if (disc > 0) {\n const discSqrt = Math.sqrt(disc);\n const t1 = (-b + discSqrt) / (2 * a);\n const t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n }\n }\n return n;\n}\n\n/**\n * 计算二次贝塞尔方程极限值\n */\nexport function quadraticExtremum(p0: number, p1: number, p2: number): number {\n const divider = p0 + p2 - 2 * p1;\n if (divider === 0) {\n // p1 is center of p0 and p2\n return 0.5;\n }\n\n return (p0 - p1) / divider;\n}\n\n/**\n * 投射点到二次贝塞尔曲线上,返回投射距离。\n * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n * @param {Array.<number>} out 投射点\n * @return {number}\n */\nexport function quadraticProjectPoint(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x: number,\n y: number,\n out: [number, number] | null\n): number {\n // http://pomax.github.io/bezierinfo/#projections\n let t: number = 0;\n let interval = 0.005;\n let d = Infinity;\n\n _v0[0] = x;\n _v0[1] = y;\n\n // 先粗略估计一下可能的最小距离的 t 值\n // PENDING\n for (let _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = quadraticAt(x0, x1, x2, _t);\n _v1[1] = quadraticAt(y0, y1, y2, _t);\n const d1 = distanceSquare(_v0, _v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n\n // At most 32 iteration\n for (let i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n const prev = t - interval;\n const next = t + interval;\n // t - interval\n _v1[0] = quadraticAt(x0, x1, x2, prev);\n _v1[1] = quadraticAt(y0, y1, y2, prev);\n\n const d1 = distanceSquare(_v1, _v0);\n\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n } else {\n // t + interval\n _v2[0] = quadraticAt(x0, x1, x2, next);\n _v2[1] = quadraticAt(y0, y1, y2, next);\n const d2 = distanceSquare(_v2, _v0);\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n } else {\n interval *= 0.5;\n }\n }\n }\n // t\n if (out) {\n out[0] = quadraticAt(x0, x1, x2, t);\n out[1] = quadraticAt(y0, y1, y2, t);\n }\n\n return Math.sqrt(d);\n}\n\n/**\n * 投射点到三次贝塞尔曲线上,返回投射距离。\n * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。\n */\nexport function cubicProjectPoint(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n x: number,\n y: number,\n out: [number, number] | null\n): number {\n // http://pomax.github.io/bezierinfo/#projections\n let t: number = 0;\n let interval = 0.005;\n let d = Infinity;\n let prev;\n let next;\n let d1;\n let d2;\n\n _v0[0] = x;\n _v0[1] = y;\n\n // 先粗略估计一下可能的最小距离的 t 值\n // PENDING\n for (let _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = cubicAt(x0, x1, x2, x3, _t);\n _v1[1] = cubicAt(y0, y1, y2, y3, _t);\n d1 = distanceSquare(_v0, _v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n\n // At most 32 iteration\n for (let i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n prev = t - interval;\n next = t + interval;\n // t - interval\n _v1[0] = cubicAt(x0, x1, x2, x3, prev);\n _v1[1] = cubicAt(y0, y1, y2, y3, prev);\n\n d1 = distanceSquare(_v1, _v0);\n\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n } else {\n // t + interval\n _v2[0] = cubicAt(x0, x1, x2, x3, next);\n _v2[1] = cubicAt(y0, y1, y2, y3, next);\n d2 = distanceSquare(_v2, _v0);\n\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n } else {\n interval *= 0.5;\n }\n }\n }\n // t\n if (out) {\n out[0] = cubicAt(x0, x1, x2, x3, t);\n out[1] = cubicAt(y0, y1, y2, y3, t);\n }\n // console.log(interval, i);\n return Math.sqrt(d);\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/util.ts\nexport function normalizeRadian(angle: number): number {\n angle %= pi2;\n if (angle < 0) {\n angle += pi2;\n }\n return angle;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/quadratic.ts\nexport function containQuadStroke(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n lineWidth: number,\n x: number,\n y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n // Quick reject\n if (\n (y > y0 + _l && y > y1 + _l && y > y2 + _l) ||\n (y < y0 - _l && y < y1 - _l && y < y2 - _l) ||\n (x > x0 + _l && x > x1 + _l && x > x2 + _l) ||\n (x < x0 - _l && x < x1 - _l && x < x2 - _l)\n ) {\n return false;\n }\n const d = quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, null);\n return d <= _l / 2;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/cubic.ts\n/**\n * 三次贝塞尔曲线描边包含判断\n */\nexport function containCubicStroke(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n lineWidth: number,\n x: number,\n y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n // Quick reject\n if (\n (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l) ||\n (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l) ||\n (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l) ||\n (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l)\n ) {\n return false;\n }\n const d = cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, null);\n return d <= _l / 2;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/arc.ts\n/**\n * 圆弧描边包含判断\n */\nexport function containArcStroke(\n cx: number,\n cy: number,\n r: number,\n startAngle: number,\n endAngle: number,\n anticlockwise: boolean,\n lineWidth: number,\n x: number,\n y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n\n x -= cx;\n y -= cy;\n const d = Math.sqrt(x * x + y * y);\n\n if (d - _l > r || d + _l < r) {\n return false;\n }\n // TODO\n if (Math.abs(startAngle - endAngle) % pi2 < 1e-4) {\n // Is a circle\n return true;\n }\n if (anticlockwise) {\n const tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n if (startAngle > endAngle) {\n endAngle += pi2;\n }\n\n let angle = Math.atan2(y, x);\n if (angle < 0) {\n angle += pi2;\n }\n return (angle >= startAngle && angle <= endAngle) || (angle + pi2 >= startAngle && angle + pi2 <= endAngle);\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/line.ts\n/**\n * 线段包含判断\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} lineWidth\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\nexport function containLineStroke(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n lineWidth: number,\n x: number,\n y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n const _halfL = lineWidth / 2;\n let _a = 0;\n let _b = x0;\n // Quick reject\n if (\n (y > y0 + _halfL && y > y1 + _halfL) ||\n (y < y0 - _halfL && y < y1 - _halfL) ||\n (x > x0 + _halfL && x > x1 + _halfL) ||\n (x < x0 - _halfL && x < x1 - _halfL)\n ) {\n return false;\n }\n\n if (x0 !== x1) {\n _a = (y0 - y1) / (x0 - x1);\n _b = (x0 * y1 - x1 * y0) / (x0 - x1);\n } else {\n return Math.abs(x - x0) <= _l / 2;\n }\n const tmp = _a * x - y + _b;\n const _s = (tmp * tmp) / (_a * _a + 1);\n return _s <= ((_l / 2) * _l) / 2;\n}\n\nconst globalPoint: IPointLike = { x: 0, y: 0 };\nexport function transformPoint(pos: IPointLike, ctx: IContext2d, out?: IPointLike): IPointLike {\n const matrix = ctx.currentMatrix.getInverse();\n out = out || globalPoint;\n out.x = pos.x * matrix.a + pos.y * matrix.c + matrix.e;\n out.y = pos.x * matrix.b + pos.y * matrix.d + matrix.f;\n return out;\n}\n\nconst EPSILON = 1e-4;\n\n/**\n * 计算三次贝塞尔方程根,使用盛金公式\n */\nexport function cubicRootAt(p0: number, p1: number, p2: number, p3: number, val: number, roots: number[]): number {\n // Evaluate roots of cubic functions\n const a = p3 + 3 * (p1 - p2) - p0;\n const b = 3 * (p2 - p1 * 2 + p0);\n const c = 3 * (p1 - p0);\n const d = p0 - val;\n\n const A = b * b - 3 * a * c;\n const B = b * c - 9 * a * d;\n const C = c * c - 3 * b * d;\n\n let n = 0;\n\n if (isAroundZero(A) && isAroundZero(B)) {\n if (isAroundZero(b)) {\n roots[0] = 0;\n } else {\n const t1 = -c / b; //t1, t2, t3, b is not zero\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n } else {\n const disc = B * B - 4 * A * C;\n\n if (isAroundZero(disc)) {\n const K = B / A;\n const t1 = -b / a + K; // t1, a is not zero\n const t2 = -K / 2; // t2, t3\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n } else if (disc > 0) {\n const discSqrt = Math.sqrt(disc);\n let Y1 = A * b + 1.5 * a * (-B + discSqrt);\n let Y2 = A * b + 1.5 * a * (-B - discSqrt);\n if (Y1 < 0) {\n Y1 = -Math.pow(-Y1, ONE_THIRD);\n } else {\n Y1 = Math.pow(Y1, ONE_THIRD);\n }\n if (Y2 < 0) {\n Y2 = -Math.pow(-Y2, ONE_THIRD);\n } else {\n Y2 = Math.pow(Y2, ONE_THIRD);\n }\n const t1 = (-b - (Y1 + Y2)) / (3 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n } else {\n const T = (2 * A * b - 3 * a * B) / (2 * Math.sqrt(A * A * A));\n const theta = Math.acos(T) / 3;\n const ASqrt = Math.sqrt(A);\n const tmp = Math.cos(theta);\n\n const t1 = (-b - 2 * ASqrt * tmp) / (3 * a);\n const t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);\n const t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n if (t3 >= 0 && t3 <= 1) {\n roots[n++] = t3;\n }\n }\n }\n return n;\n}\n\n/**\n * 计算三次贝塞尔方程极限值的位置\n * @return 有效数目\n */\nexport function cubicExtrema(p0: number, p1: number, p2: number, p3: number, extrema: number[]): number {\n const b = 6 * p2 - 12 * p1 + 6 * p0;\n const a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;\n const c = 3 * p1 - 3 * p0;\n\n let n = 0;\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n const t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n }\n } else {\n const disc = b * b - 4 * a * c;\n if (isAroundZero(disc)) {\n extrema[0] = -b / (2 * a);\n } else if (disc > 0) {\n const discSqrt = Math.sqrt(disc);\n const t1 = (-b + discSqrt) / (2 * a);\n const t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n extrema[n++] = t2;\n }\n }\n }\n return n;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nfunction isAroundEqual(a: number, b: number) {\n return Math.abs(a - b) < EPSILON;\n}\n\n// 临时数组\nconst roots = [-1, -1, -1];\nconst extrema = [-1, -1];\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nfunction swapExtrema() {\n const tmp = extrema[0];\n extrema[0] = extrema[1];\n extrema[1] = tmp;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nfunction windingCubic(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n x: number,\n y: number\n): number {\n // Quick reject\n if ((y > y0 && y > y1 && y > y2 && y > y3) || (y < y0 && y < y1 && y < y2 && y < y3)) {\n return 0;\n }\n const nRoots = cubicRootAt(y0, y1, y2, y3, y, roots);\n if (nRoots === 0) {\n return 0;\n }\n\n let w = 0;\n let nExtrema = -1;\n let y0_ = 0;\n let y1_ = 0;\n for (let i = 0; i < nRoots; i++) {\n const t = roots[i];\n\n // Avoid winding error when intersection point is the connect point of two line of polygon\n const unit = t === 0 || t === 1 ? 0.5 : 1;\n\n const x_ = cubicAt(x0, x1, x2, x3, t);\n if (x_ < x) {\n // Quick reject\n continue;\n }\n if (nExtrema < 0) {\n nExtrema = cubicExtrema(y0, y1, y2, y3, extrema);\n if (extrema[1] < extrema[0] && nExtrema > 1) {\n swapExtrema();\n }\n y0_ = cubicAt(y0, y1, y2, y3, extrema[0]);\n if (nExtrema > 1) {\n y1_ = cubicAt(y0, y1, y2, y3, extrema[1]);\n }\n }\n if (nExtrema === 2) {\n // 分成三段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n } else if (t < extrema[1]) {\n w += y1_ < y0_ ? unit : -unit;\n } else {\n w += y3 < y1_ ? unit : -unit;\n }\n } else {\n // 分成两段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n } else {\n w += y3 < y0_ ? unit : -unit;\n }\n }\n }\n return w;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nfunction windingQuadratic(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x: number,\n y: number\n): number {\n // Quick reject\n if ((y > y0 && y > y1 && y > y2) || (y < y0 && y < y1 && y < y2)) {\n return 0;\n }\n const nRoots = quadraticRootAt(y0, y1, y2, y, roots);\n if (nRoots === 0) {\n return 0;\n }\n\n const t = quadraticExtremum(y0, y1, y2);\n if (t >= 0 && t <= 1) {\n let w = 0;\n const y_ = quadraticAt(y0, y1, y2, t);\n for (let i = 0; i < nRoots; i++) {\n // Remove one endpoint.\n const unit = roots[i] === 0 || roots[i] === 1 ? 0.5 : 1;\n\n const x_ = quadraticAt(x0, x1, x2, roots[i]);\n if (x_ < x) {\n // Quick reject\n continue;\n }\n if (roots[i] < t) {\n w += y_ < y0 ? unit : -unit;\n } else {\n w += y2 < y_ ? unit : -unit;\n }\n }\n return w;\n }\n\n // Remove one endpoint.\n const unit = roots[0] === 0 || roots[0] === 1 ? 0.5 : 1;\n\n const x_ = quadraticAt(x0, x1, x2, roots[0]);\n if (x_ < x) {\n // Quick reject\n return 0;\n }\n return y2 < y0 ? unit : -unit;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\n// TODO\n// Arc 旋转\n// startAngle, endAngle has been normalized by normalizeArcAngles\nfunction windingArc(\n cx: number,\n cy: number,\n r: number,\n startAngle: number,\n endAngle: number,\n anticlockwise: boolean,\n x: number,\n y: number\n) {\n y -= cy;\n if (y > r || y < -r) {\n return 0;\n }\n const tmp = Math.sqrt(r * r - y * y);\n roots[0] = -tmp;\n roots[1] = tmp;\n\n const dTheta = Math.abs(startAngle - endAngle);\n if (dTheta < 1e-4) {\n return 0;\n }\n if (dTheta >= pi2 - 1e-4) {\n // Is a circle\n startAngle = 0;\n endAngle = pi2;\n const dir = anticlockwise ? 1 : -1;\n if (x >= roots[0] + cx && x <= roots[1] + cx) {\n return dir;\n }\n\n return 0;\n }\n\n if (startAngle > endAngle) {\n // Swap, make sure startAngle is smaller than endAngle.\n const tmp = startAngle;\n startAngle = endAngle;\n endAngle = tmp;\n }\n // endAngle - startAngle is normalized to 0 - 2*pi.\n // So following will normalize them to 0 - 4*pi\n if (startAngle < 0) {\n startAngle += pi2;\n endAngle += pi2;\n }\n\n let w = 0;\n for (let i = 0; i < 2; i++) {\n const x_ = roots[i];\n if (x_ + cx > x) {\n let angle = Math.atan2(y, x_);\n let dir = anticlockwise ? 1 : -1;\n if (angle < 0) {\n angle = pi2 + angle;\n }\n if ((angle >= startAngle && angle <= endAngle) || (angle + pi2 >= startAngle && angle + pi2 <= endAngle)) {\n if (angle > pi / 2 && angle < pi * 1.5) {\n dir = -dir;\n }\n w += dir;\n }\n }\n }\n return w;\n}\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/core/PathProxy.ts\nfunction modpi2(radian: number) {\n const n = Math.round((radian / pi) * 1e8) / 1e8;\n return (n % 2) * pi;\n}\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/core/PathProxy.ts\nfunction normalizeArcAngles(angles: [number, number], anticlockwise: boolean) {\n let newStartAngle = modpi2(angles[0]);\n if (newStartAngle < 0) {\n newStartAngle += pi2;\n }\n const delta = newStartAngle - angles[0];\n let newEndAngle = angles[1];\n newEndAngle += delta;\n if (!anticlockwise && newEndAngle - newStartAngle >= pi2) {\n newEndAngle = newStartAngle + pi2;\n } else if (anticlockwise && newStartAngle - newEndAngle >= pi2) {\n newEndAngle = newStartAngle - pi2;\n } else if (!anticlockwise && newStartAngle > newEndAngle) {\n newEndAngle = newStartAngle + (pi2 - modpi2(newStartAngle - newEndAngle));\n } else if (anticlockwise && newStartAngle < newEndAngle) {\n newEndAngle = newStartAngle - (pi2 - modpi2(newEndAngle - newStartAngle));\n }\n angles[0] = newStartAngle;\n angles[1] = newEndAngle;\n}\n\nconst tmpAngles: [number, number] = [0, 0];\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nfunction containPath(commands: CommandType[], lineWidth: number, isStroke: boolean, x: number, y: number): boolean {\n const data = commands;\n const len = commands.length;\n let w = 0;\n let xi = 0;\n let yi = 0;\n let x0 = 0;\n let y0 = 0;\n let x1;\n let y1;\n\n for (let i = 0; i < len; i++) {\n const command = data[i];\n const isFirst = i === 0;\n // Begin a new subpath\n if (command[0] === CMD.M && i > 1) {\n // Close previous subpath\n if (!isStroke) {\n w += isPointInLine(xi, yi, x0, y0, x, y);\n }\n }\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n //\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = command[1] as number;\n yi = command[2] as number;\n\n x0 = xi;\n y0 = yi;\n }\n\n const c0 = command[0];\n const c1 = command[1] as number;\n const c2 = command[2] as number;\n const c3 = command[3] as number;\n const c4 = command[4] as number;\n const c5 = command[5] as number;\n const c6 = command[6] as number;\n\n // TODO Arc 判断的开销比较大\n let startAngle = c4;\n let endAngle = c5;\n tmpAngles[0] = startAngle;\n tmpAngles[1] = endAngle;\n normalizeArcAngles(tmpAngles, Boolean(command[6]));\n startAngle = tmpAngles[0];\n endAngle = tmpAngles[1];\n const theta = startAngle;\n const dTheta = endAngle - startAngle;\n const anticlockwise = !!(1 - (command[6] ? 0 : 1));\n const _x = ((x - c1) * c3) / c3 + c1;\n switch (c0) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n x0 = c1;\n y0 = c2;\n xi = x0;\n yi = y0;\n break;\n case CMD.L:\n if (isStroke) {\n if (containLineStroke(xi, yi, c1, c2, lineWidth, x, y)) {\n return true;\n }\n } else {\n // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN\n w += isPointInLine(xi, yi, c1, c2, x, y) || 0;\n }\n xi = c1;\n yi = c2;\n break;\n case CMD.C:\n if (isStroke) {\n if (containCubicStroke(xi, yi, c1, c2, c3, c4, c5, c6, lineWidth, x, y)) {\n return true;\n }\n } else {\n w += windingCubic(xi, yi, c1, c2, c3, c4, c5, c6, x, y) || 0;\n }\n xi = c5;\n yi = c6;\n break;\n case CMD.Q:\n if (isStroke) {\n if (containQuadStroke(xi, yi, c1, c2, c3, c4, lineWidth, x, y)) {\n return true;\n }\n } else {\n w += windingQuadratic(xi, yi, c1, c2, c3, c4, x, y) || 0;\n }\n xi = c3;\n yi = c4;\n break;\n case CMD.A:\n // TODO Arc 旋转\n x1 = Math.cos(theta) * c3 + c1;\n y1 = Math.sin(theta) * c3 + c2;\n // 不是直接使用 arc 命令\n if (!isFirst) {\n w += isPointInLine(xi, yi, x1, y1, x, y);\n } else {\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n }\n // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n if (isStroke) {\n if (containArcStroke(c1, c2, c3, theta, theta + dTheta, anticlockwise, lineWidth, _x, y)) {\n return true;\n }\n } else {\n w += windingArc(c1, c2, c3, theta, theta + dTheta, anticlockwise, _x, y);\n }\n xi = Math.cos(theta + dTheta) * c3 + c1;\n yi = Math.sin(theta + dTheta) * c3 + c2;\n break;\n case CMD.R:\n x0 = xi = c1;\n y0 = yi = c2;\n x1 = x0 + c3;\n y1 = y0 + c4;\n if (isStroke) {\n if (\n containLineStroke(x0, y0, x1, y0, lineWidth, x, y) ||\n containLineStroke(x1, y0, x1, y1, lineWidth, x, y) ||\n containLineStroke(x1, y1, x0, y1, lineWidth, x, y) ||\n containLineStroke(x0, y1, x0, y0, lineWidth, x, y)\n ) {\n return true;\n }\n } else {\n // FIXME Clockwise ?\n w += isPointInLine(x1, y0, x1, y1, x, y);\n w += isPointInLine(x0, y1, x0, y0, x, y);\n }\n break;\n case CMD.Z:\n if (isStroke) {\n if (containLineStroke(xi, yi, x0, y0, lineWidth, x, y)) {\n return true;\n }\n } else {\n // Close a subpath\n w += isPointInLine(xi, yi, x0, y0, x, y);\n // 如果被任何一个 subpath 包含\n // FIXME subpaths may overlap\n // if (w !== 0) {\n // return true;\n // }\n }\n xi = x0;\n yi = y0;\n break;\n }\n }\n if (!isStroke && !isAroundEqual(yi, y0)) {\n w += isPointInLine(xi, yi, x0, y0, x, y) || 0;\n }\n return w !== 0;\n}\n\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nexport function contain(commands: CommandType[], x: number, y: number): boolean {\n return containPath(commands, 0, false, x, y);\n}\n// 基于zrender\n// https://github.com/ecomfe/zrender/blob/master/src/contain/path.ts\nexport function containStroke(commands: CommandType[], lineWidth: number, x: number, y: number): boolean {\n return containPath(commands, lineWidth, true, x, y);\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { IGraphic } from '../interface/graphic';
2
+ import type { IContext2d } from '../interface/context';
3
+ export declare const draw3dItem: (context: IContext2d, graphic: IGraphic, callback: (isPie: boolean, is3d: boolean) => any, output: any) => any;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.draw3dItem = void 0;
6
+
7
+ const vutils_1 = require("@visactor/vutils"), constants_1 = require("../graphic/constants"), draw3dItem = (context, graphic, callback, output) => {
8
+ let result, isPie = !1, is3d = !1;
9
+ if (graphic.forEachChildren((c => (isPie = c.numberType === constants_1.ARC3D_NUMBER_TYPE,
10
+ !isPie))), graphic.forEachChildren((c => (is3d = !!c.findFace, !is3d))), isPie) {
11
+ const children = graphic.getChildren(), sortedChildren = [ ...children ];
12
+ sortedChildren.sort(((a, b) => {
13
+ var _a, _b, _c, _d;
14
+ let angle1 = (null !== (_b = null !== (_a = a.attribute.startAngle) && void 0 !== _a ? _a : 0 + a.attribute.endAngle) && void 0 !== _b ? _b : 0) / 2, angle2 = (null !== (_d = null !== (_c = b.attribute.startAngle) && void 0 !== _c ? _c : 0 + b.attribute.endAngle) && void 0 !== _d ? _d : 0) / 2;
15
+ for (;angle1 < 0; ) angle1 += vutils_1.pi2;
16
+ for (;angle2 < 0; ) angle2 += vutils_1.pi2;
17
+ return angle2 - angle1;
18
+ })), sortedChildren.forEach((c => {
19
+ c._next = null, c._prev = null;
20
+ })), graphic.removeAllChild(), graphic.update(), sortedChildren.forEach((c => {
21
+ graphic.appendChild(c);
22
+ })), output.hack_pieFace = "outside", result = callback(isPie, is3d), result && result.graphic || (output.hack_pieFace = "inside",
23
+ result = callback(isPie, is3d)), result && result.graphic || (output.hack_pieFace = "top",
24
+ result = callback(isPie, is3d)), graphic.removeAllChild(), children.forEach((c => {
25
+ c._next = null, c._prev = null;
26
+ })), children.forEach((c => {
27
+ graphic.appendChild(c);
28
+ }));
29
+ } else if (is3d) {
30
+ const children = graphic.getChildren(), zChildren = children.map((g => ({
31
+ ave_z: g.findFace().vertices.map((v => {
32
+ var _a;
33
+ return context.view(v[0], v[1], null !== (_a = v[2] + g.attribute.z) && void 0 !== _a ? _a : 0)[2];
34
+ })).reduce(((a, b) => a + b), 0),
35
+ g: g
36
+ })));
37
+ zChildren.sort(((a, b) => b.ave_z - a.ave_z)), graphic.removeAllChild(), zChildren.forEach((i => {
38
+ i.g._next = null, i.g._prev = null;
39
+ })), graphic.update(), zChildren.forEach((i => {
40
+ graphic.add(i.g);
41
+ })), result = callback(isPie, is3d), graphic.removeAllChild(), children.forEach((g => {
42
+ g._next = null, g._prev = null;
43
+ })), graphic.update(), children.forEach((g => {
44
+ graphic.add(g);
45
+ }));
46
+ } else result = callback(isPie, is3d);
47
+ return result;
48
+ };
49
+
50
+ exports.draw3dItem = draw3dItem;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/3d-interceptor.ts"],"names":[],"mappings":"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","file":"3d-interceptor.js","sourcesContent":["import { pi2 } from '@visactor/vutils';\nimport { ARC3D_NUMBER_TYPE } from '../graphic/constants';\nimport type { IGraphic } from '../interface/graphic';\nimport type { IArc } from '../interface/graphic/arc';\nimport type { IContext2d } from '../interface/context';\n\nexport const draw3dItem = (\n context: IContext2d,\n graphic: IGraphic,\n callback: (isPie: boolean, is3d: boolean) => any,\n output: any\n) => {\n // hack逻辑,如果是饼图的话,需要依次绘制不同的边\n let isPie: boolean = false;\n let is3d: boolean = false;\n graphic.forEachChildren((c: IGraphic) => {\n isPie = c.numberType === ARC3D_NUMBER_TYPE;\n return !isPie;\n });\n graphic.forEachChildren((c: IGraphic) => {\n is3d = !!c.findFace;\n return !is3d;\n });\n\n let result: any;\n if (isPie) {\n const children = graphic.getChildren() as IArc[];\n // 绘制内层\n // drawContext.hack_pieFace = 'inside';\n // drawContribution.renderGroup(graphic as IGroup, drawContext);\n // 绘制底部\n // drawContext.hack_pieFace = 'bottom';\n // drawContribution.renderGroup(graphic as IGroup, drawContext);\n // 绘制外部\n // 排序一下\n const sortedChildren = [...children];\n sortedChildren.sort((a, b) => {\n let angle1 = (a.attribute.startAngle ?? 0 + a.attribute.endAngle ?? 0) / 2;\n let angle2 = (b.attribute.startAngle ?? 0 + b.attribute.endAngle ?? 0) / 2;\n while (angle1 < 0) {\n angle1 += pi2;\n }\n while (angle2 < 0) {\n angle2 += pi2;\n }\n return angle2 - angle1;\n });\n sortedChildren.forEach(c => {\n c._next = null;\n c._prev = null;\n });\n graphic.removeAllChild();\n graphic.update();\n sortedChildren.forEach(c => {\n graphic.appendChild(c);\n });\n output.hack_pieFace = 'outside';\n result = callback(isPie, is3d);\n if (!result || !result.graphic) {\n // 绘制内部\n output.hack_pieFace = 'inside';\n result = callback(isPie, is3d);\n }\n if (!result || !result.graphic) {\n // 绘制顶部\n output.hack_pieFace = 'top';\n result = callback(isPie, is3d);\n }\n graphic.removeAllChild();\n children.forEach(c => {\n c._next = null;\n c._prev = null;\n });\n children.forEach(c => {\n graphic.appendChild(c);\n });\n } else if (is3d) {\n // 排序这些图元\n const children = graphic.getChildren() as IGraphic[];\n const zChildren = children.map(g => {\n const face3d = g.findFace();\n const vertices = face3d.vertices;\n // 计算每个顶点的view\n const viewdVerticesZ = vertices.map(v => {\n return context.view(v[0], v[1], v[2] + g.attribute.z ?? 0)[2];\n });\n const ave_z = viewdVerticesZ.reduce((a, b) => a + b, 0);\n return {\n ave_z,\n g\n };\n });\n zChildren.sort((a, b) => b.ave_z - a.ave_z);\n graphic.removeAllChild();\n zChildren.forEach(i => {\n i.g._next = null;\n i.g._prev = null;\n });\n graphic.update();\n zChildren.forEach(i => {\n graphic.add(i.g);\n });\n\n result = callback(isPie, is3d);\n\n graphic.removeAllChild();\n children.forEach(g => {\n g._next = null;\n g._prev = null;\n });\n graphic.update();\n children.forEach(g => {\n graphic.add(g);\n });\n } else {\n result = callback(isPie, is3d);\n }\n\n return result;\n};\n"]}
@@ -31,4 +31,5 @@ function cubicPointAt(p0, p1, p2, p3, t) {
31
31
  }
32
32
 
33
33
  exports.snapLength = snapLength, exports.cubicLength = cubicLength, exports.cubicCalc = cubicCalc,
34
- exports.cubicPointAt = cubicPointAt;
34
+ exports.cubicPointAt = cubicPointAt;
35
+ //# sourceMappingURL=bezier-utils.js.map
@@ -5,4 +5,4 @@ export declare function getScaledStroke(context: IContext2d, width: number, dpr:
5
5
  export declare function createColor(context: IContext2d, c: string | IColor | Array<string | IColor> | boolean, params: {
6
6
  AABBBounds?: IBoundsLike;
7
7
  attribute?: Partial<ITransform>;
8
- }, offsetX: number, offsetY: number): string | CanvasGradient;
8
+ }, offsetX?: number, offsetY?: number): string | CanvasGradient;
@@ -13,56 +13,41 @@ function getScaledStroke(context, width, dpr) {
13
13
  strokeWidth);
14
14
  }
15
15
 
16
- function createColor(context, c, params, offsetX, offsetY) {
16
+ function createColor(context, c, params, offsetX = 0, offsetY = 0) {
17
17
  if (!c || !0 === c) return "black";
18
18
  let result, color;
19
19
  if ((0, vutils_1.isArray)(c)) for (let i = 0; i < c.length && (color = c[i], !color); i++) ; else color = c;
20
- return color = color_utils_1.GradientParser.Parse(color), "string" == typeof color ? color : ("linear" === color.gradient ? result = createLinearGradient(context, color, params, offsetX, offsetY) : "conical" === color.gradient ? result = createConicGradient(context, color, params, offsetX, offsetY) : "radial" === color.gradient && (result = createRadialGradient(context, color, params, offsetX, offsetY)),
21
- result || "orange");
20
+ if (color = color_utils_1.GradientParser.Parse(color), "string" == typeof color) return color;
21
+ if (params.AABBBounds && (!params.attribute || 0 !== params.attribute.scaleX || 0 !== params.attribute.scaleY)) {
22
+ const bounds = params.AABBBounds;
23
+ let w = bounds.x2 - bounds.x1, h = bounds.y2 - bounds.y1, x = bounds.x1 - offsetX, y = bounds.y1 - offsetY;
24
+ if (params.attribute) {
25
+ const {scaleX: scaleX = 1, scaleY: scaleY = 1} = params.attribute;
26
+ w /= scaleX, h /= scaleY, x /= scaleX, y /= scaleY;
27
+ }
28
+ "linear" === color.gradient ? result = createLinearGradient(context, color, x, y, w, h) : "conical" === color.gradient ? result = createConicGradient(context, color, x, y, w, h) : "radial" === color.gradient && (result = createRadialGradient(context, color, x, y, w, h));
29
+ }
30
+ return result || "orange";
22
31
  }
23
32
 
24
- function createLinearGradient(context, color, params, offsetX = 0, offsetY = 0) {
33
+ function createLinearGradient(context, color, x, y, w, h) {
25
34
  var _a, _b, _c, _d;
26
- const bounds = params.AABBBounds;
27
- if (!bounds) return;
28
- let w = bounds.x2 - bounds.x1, h = bounds.y2 - bounds.y1, x = bounds.x1 - offsetX, y = bounds.y1 - offsetY;
29
- if (params.attribute) {
30
- const {scaleX: scaleX = 1, scaleY: scaleY = 1} = params.attribute;
31
- if (scaleX * scaleY == 0) return;
32
- w /= scaleX, h /= scaleY, x /= scaleX, y /= scaleY;
33
- }
34
35
  const canvasGradient = context.createLinearGradient(x + (null !== (_a = color.x0) && void 0 !== _a ? _a : 0) * w, y + (null !== (_b = color.y0) && void 0 !== _b ? _b : 0) * h, x + (null !== (_c = color.x1) && void 0 !== _c ? _c : 1) * w, y + (null !== (_d = color.y1) && void 0 !== _d ? _d : 0) * h);
35
36
  return color.stops.forEach((stop => {
36
37
  canvasGradient.addColorStop(stop.offset, stop.color);
37
38
  })), canvasGradient;
38
39
  }
39
40
 
40
- function createRadialGradient(context, color, params, offsetX = 0, offsetY = 0) {
41
+ function createRadialGradient(context, color, x, y, w, h) {
41
42
  var _a, _b, _c, _d, _e, _f;
42
- const bounds = params.AABBBounds;
43
- if (!bounds) return;
44
- let w = bounds.x2 - bounds.x1, h = bounds.y2 - bounds.y1, x = bounds.x1 - offsetX, y = bounds.y1 - offsetY;
45
- if (params.attribute) {
46
- const {scaleX: scaleX = 1, scaleY: scaleY = 1} = params.attribute;
47
- if (scaleX * scaleY == 0) return;
48
- x /= scaleX, y /= scaleY, w /= scaleX, h /= scaleY;
49
- }
50
43
  const canvasGradient = context.createRadialGradient(x + (null !== (_a = color.x0) && void 0 !== _a ? _a : .5) * w, y + (null !== (_b = color.y0) && void 0 !== _b ? _b : .5) * h, Math.max(w, h) * (null !== (_c = color.r0) && void 0 !== _c ? _c : 0), x + (null !== (_d = color.x1) && void 0 !== _d ? _d : .5) * w, y + (null !== (_e = color.y1) && void 0 !== _e ? _e : .5) * h, Math.max(w, h) * (null !== (_f = color.r1) && void 0 !== _f ? _f : .5));
51
44
  return color.stops.forEach((stop => {
52
45
  canvasGradient.addColorStop(stop.offset, stop.color);
53
46
  })), canvasGradient;
54
47
  }
55
48
 
56
- function createConicGradient(context, color, params, offsetX = 0, offsetY = 0) {
49
+ function createConicGradient(context, color, x, y, w, h) {
57
50
  var _a, _b;
58
- const bounds = params.AABBBounds;
59
- if (!bounds) return;
60
- let w = bounds.x2 - bounds.x1, h = bounds.y2 - bounds.y1, x = bounds.x1 - offsetX, y = bounds.y1 - offsetY;
61
- if (params.attribute) {
62
- const {scaleX: scaleX = 1, scaleY: scaleY = 1} = params.attribute;
63
- if (scaleX * scaleY == 0) return;
64
- w /= scaleX, h /= scaleY, x /= scaleX, y /= scaleY;
65
- }
66
51
  const canvasGradient = context.createConicGradient(x + (null !== (_a = color.x) && void 0 !== _a ? _a : 0) * w, y + (null !== (_b = color.y) && void 0 !== _b ? _b : 0) * h, color.startAngle, color.endAngle);
67
52
  return color.stops.forEach((stop => {
68
53
  canvasGradient.addColorStop(stop.offset, stop.color);