@visactor/vrender-core 1.0.0-alpha.2 → 1.0.0-alpha.21
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.
- package/cjs/animate/config.d.ts +1 -2
- package/cjs/animate/config.js +1 -5
- package/cjs/animate/config.js.map +1 -1
- package/cjs/application.d.ts +2 -1
- package/cjs/application.js.map +1 -1
- package/cjs/color-string/interpolate.js +5 -2
- package/cjs/color-string/interpolate.js.map +1 -1
- package/cjs/common/canvas-utils.js +6 -3
- package/cjs/common/canvas-utils.js.map +1 -1
- package/cjs/common/contribution-provider.d.ts +16 -0
- package/cjs/common/contribution-provider.js +21 -2
- package/cjs/common/contribution-provider.js.map +1 -1
- package/cjs/common/custom-path2d.js +2 -2
- package/cjs/common/custom-path2d.js.map +1 -1
- package/cjs/common/event-listener-manager.d.ts +14 -0
- package/cjs/common/event-listener-manager.js +52 -0
- package/cjs/common/event-listener-manager.js.map +1 -0
- package/cjs/common/event-transformer.d.ts +12 -0
- package/cjs/common/event-transformer.js +91 -0
- package/cjs/common/event-transformer.js.map +1 -0
- package/cjs/common/morphing-utils.js +32 -124
- package/cjs/common/morphing-utils.js.map +1 -1
- package/cjs/common/performance-raf.d.ts +1 -1
- package/cjs/common/performance-raf.js +9 -8
- package/cjs/common/performance-raf.js.map +1 -1
- package/cjs/common/polygon.js +4 -2
- package/cjs/common/polygon.js.map +1 -1
- package/cjs/common/segment/curve/cubic-bezier.d.ts +1 -2
- package/cjs/common/segment/curve/cubic-bezier.js +3 -8
- package/cjs/common/segment/curve/cubic-bezier.js.map +1 -1
- package/cjs/common/segment/curve/quadratic-bezier.d.ts +1 -0
- package/cjs/common/segment/curve/quadratic-bezier.js +10 -3
- package/cjs/common/segment/curve/quadratic-bezier.js.map +1 -1
- package/cjs/common/segment/index.d.ts +1 -0
- package/cjs/common/segment/index.js +4 -1
- package/cjs/common/segment/index.js.map +1 -1
- package/cjs/common/segment/step.d.ts +6 -0
- package/cjs/common/segment/step.js +19 -2
- package/cjs/common/segment/step.js.map +1 -1
- package/cjs/common/shape/arc.d.ts +1 -1
- package/cjs/common/shape/arc.js +7 -3
- package/cjs/common/shape/arc.js.map +1 -1
- package/cjs/common/simplify.js +1 -2
- package/cjs/common/split-path.js +3 -2
- package/cjs/common/split-path.js.map +1 -1
- package/cjs/common/utils.d.ts +0 -2
- package/cjs/common/utils.js +4 -8
- package/cjs/common/utils.js.map +1 -1
- package/cjs/core/constants.js +1 -1
- package/cjs/core/core-modules.js +1 -1
- package/cjs/core/global.d.ts +7 -5
- package/cjs/core/global.js +14 -13
- package/cjs/core/global.js.map +1 -1
- package/cjs/core/stage.d.ts +6 -2
- package/cjs/core/stage.js +22 -10
- package/cjs/core/stage.js.map +1 -1
- package/cjs/core/window.d.ts +5 -4
- package/cjs/core/window.js +14 -13
- package/cjs/core/window.js.map +1 -1
- package/cjs/event/event-system.js +11 -10
- package/cjs/event/event-system.js.map +1 -1
- package/cjs/graphic/arc.d.ts +1 -2
- package/cjs/graphic/arc.js +4 -3
- package/cjs/graphic/arc.js.map +1 -1
- package/cjs/graphic/area.d.ts +1 -2
- package/cjs/graphic/area.js +5 -2
- package/cjs/graphic/area.js.map +1 -1
- package/cjs/graphic/circle.d.ts +1 -2
- package/cjs/graphic/circle.js +7 -3
- package/cjs/graphic/circle.js.map +1 -1
- package/cjs/graphic/config.d.ts +2 -1
- package/cjs/graphic/config.js +10 -3
- package/cjs/graphic/config.js.map +1 -1
- package/cjs/graphic/constants.d.ts +1 -0
- package/cjs/graphic/constants.js +4 -3
- package/cjs/graphic/constants.js.map +1 -1
- package/cjs/graphic/graphic-service/graphic-module.js +1 -2
- package/cjs/graphic/graphic-service/graphic-module.js.map +1 -1
- package/cjs/graphic/graphic-service/graphic-service.js +2 -3
- package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
- package/cjs/graphic/graphic.d.ts +8 -1
- package/cjs/graphic/graphic.js +32 -20
- package/cjs/graphic/graphic.js.map +1 -1
- package/cjs/graphic/group.js +8 -8
- package/cjs/graphic/group.js.map +1 -1
- package/cjs/graphic/image.js +2 -1
- package/cjs/graphic/image.js.map +1 -1
- package/cjs/graphic/index.d.ts +1 -0
- package/cjs/graphic/index.js +8 -8
- package/cjs/graphic/index.js.map +1 -1
- package/cjs/graphic/line.d.ts +1 -2
- package/cjs/graphic/line.js +7 -2
- package/cjs/graphic/line.js.map +1 -1
- package/cjs/graphic/path.js +2 -1
- package/cjs/graphic/path.js.map +1 -1
- package/cjs/graphic/polygon.js +2 -1
- package/cjs/graphic/polygon.js.map +1 -1
- package/cjs/graphic/rect.js +7 -3
- package/cjs/graphic/rect.js.map +1 -1
- package/cjs/graphic/richtext/icon.d.ts +1 -1
- package/cjs/graphic/richtext/icon.js.map +1 -1
- package/cjs/graphic/richtext.js +3 -2
- package/cjs/graphic/richtext.js.map +1 -1
- package/cjs/graphic/star.d.ts +52 -0
- package/cjs/graphic/star.js +78 -0
- package/cjs/graphic/star.js.map +1 -0
- package/cjs/graphic/symbol.js +3 -1
- package/cjs/graphic/symbol.js.map +1 -1
- package/cjs/graphic/text.js +1 -0
- package/cjs/graphic/text.js.map +1 -1
- package/cjs/graphic/theme.js +2 -0
- package/cjs/graphic/theme.js.map +1 -1
- package/cjs/index.d.ts +4 -0
- package/cjs/index.js +10 -9
- package/cjs/index.js.map +1 -1
- package/cjs/interface/animation/animate.d.ts +17 -0
- package/cjs/interface/animation/animate.js.map +1 -1
- package/cjs/interface/animation/ticker.d.ts +2 -0
- package/cjs/interface/animation/ticker.js.map +1 -1
- package/cjs/interface/common.d.ts +1 -1
- package/cjs/interface/common.js.map +1 -1
- package/cjs/interface/contribution.d.ts +2 -0
- package/cjs/interface/contribution.js.map +1 -1
- package/cjs/interface/event-listener-manager.d.ts +7 -0
- package/cjs/interface/event-listener-manager.js +6 -0
- package/cjs/interface/event-listener-manager.js.map +1 -0
- package/cjs/interface/global.d.ts +2 -1
- package/cjs/interface/global.js.map +1 -1
- package/cjs/interface/graphic/index.d.ts +1 -0
- package/cjs/interface/graphic/index.js +3 -2
- package/cjs/interface/graphic/index.js.map +1 -1
- package/cjs/interface/graphic/star.d.ts +12 -0
- package/cjs/interface/graphic/star.js +6 -0
- package/cjs/interface/graphic/star.js.map +1 -0
- package/cjs/interface/graphic/theme.d.ts +3 -0
- package/cjs/interface/graphic/theme.js.map +1 -1
- package/cjs/interface/graphic.d.ts +12 -1
- package/cjs/interface/graphic.js.map +1 -1
- package/cjs/interface/picker.d.ts +1 -0
- package/cjs/interface/picker.js.map +1 -1
- package/cjs/interface/render.d.ts +4 -0
- package/cjs/interface/render.js.map +1 -1
- package/cjs/interface/stage.d.ts +2 -0
- package/cjs/interface/stage.js.map +1 -1
- package/cjs/interface/window.d.ts +1 -0
- package/cjs/interface/window.js.map +1 -1
- package/cjs/modules.d.ts +2 -1
- package/cjs/modules.js +4 -3
- package/cjs/modules.js.map +1 -1
- package/cjs/picker/global-picker-service.d.ts +1 -0
- package/cjs/picker/global-picker-service.js +1 -0
- package/cjs/picker/global-picker-service.js.map +1 -1
- package/cjs/picker/picker-service.d.ts +1 -0
- package/cjs/picker/picker-service.js +3 -0
- package/cjs/picker/picker-service.js.map +1 -1
- package/cjs/plugins/builtin-plugin/auto-render-plugin.js +9 -8
- package/cjs/plugins/builtin-plugin/auto-render-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/dirty-bounds-plugin.js +14 -11
- package/cjs/plugins/builtin-plugin/dirty-bounds-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/flex-layout-plugin.js +13 -10
- package/cjs/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/html-attribute-plugin.js +0 -1
- package/cjs/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/incremental-auto-render-plugin.js +8 -5
- package/cjs/plugins/builtin-plugin/incremental-auto-render-plugin.js.map +1 -1
- package/cjs/register/register-star.d.ts +1 -0
- package/cjs/register/register-star.js +14 -0
- package/cjs/register/register-star.js.map +1 -0
- package/cjs/render/contributions/render/arc-render.d.ts +2 -2
- package/cjs/render/contributions/render/arc-render.js +7 -7
- package/cjs/render/contributions/render/arc-render.js.map +1 -1
- package/cjs/render/contributions/render/area-render.d.ts +2 -2
- package/cjs/render/contributions/render/area-render.js +5 -5
- package/cjs/render/contributions/render/area-render.js.map +1 -1
- package/cjs/render/contributions/render/base-render.d.ts +2 -0
- package/cjs/render/contributions/render/base-render.js +3 -0
- package/cjs/render/contributions/render/base-render.js.map +1 -1
- package/cjs/render/contributions/render/circle-render.d.ts +2 -2
- package/cjs/render/contributions/render/circle-render.js +3 -3
- package/cjs/render/contributions/render/circle-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/constants.d.ts +1 -0
- package/cjs/render/contributions/render/contributions/constants.js +3 -2
- package/cjs/render/contributions/render/contributions/constants.js.map +1 -1
- package/cjs/render/contributions/render/contributions/index.d.ts +1 -0
- package/cjs/render/contributions/render/contributions/index.js +2 -2
- package/cjs/render/contributions/render/contributions/index.js.map +1 -1
- package/cjs/render/contributions/render/contributions/star-contribution-render.d.ts +2 -0
- package/cjs/render/contributions/render/contributions/star-contribution-render.js +11 -0
- package/cjs/render/contributions/render/contributions/star-contribution-render.js.map +1 -0
- package/cjs/render/contributions/render/draw-contribution.d.ts +1 -0
- package/cjs/render/contributions/render/draw-contribution.js +6 -1
- package/cjs/render/contributions/render/draw-contribution.js.map +1 -1
- package/cjs/render/contributions/render/draw-interceptor.js +2 -2
- package/cjs/render/contributions/render/draw-interceptor.js.map +1 -1
- package/cjs/render/contributions/render/glyph-render.d.ts +1 -0
- package/cjs/render/contributions/render/glyph-render.js +1 -0
- package/cjs/render/contributions/render/glyph-render.js.map +1 -1
- package/cjs/render/contributions/render/graphic-render.d.ts +1 -0
- package/cjs/render/contributions/render/graphic-render.js.map +1 -1
- package/cjs/render/contributions/render/group-render.d.ts +1 -0
- package/cjs/render/contributions/render/group-render.js +8 -4
- package/cjs/render/contributions/render/group-render.js.map +1 -1
- package/cjs/render/contributions/render/image-render.d.ts +2 -2
- package/cjs/render/contributions/render/image-render.js +3 -3
- package/cjs/render/contributions/render/image-render.js.map +1 -1
- package/cjs/render/contributions/render/line-render.js +1 -1
- package/cjs/render/contributions/render/line-render.js.map +1 -1
- package/cjs/render/contributions/render/path-render.d.ts +2 -2
- package/cjs/render/contributions/render/path-render.js +3 -3
- package/cjs/render/contributions/render/path-render.js.map +1 -1
- package/cjs/render/contributions/render/polygon-render.d.ts +2 -2
- package/cjs/render/contributions/render/polygon-render.js +3 -3
- package/cjs/render/contributions/render/polygon-render.js.map +1 -1
- package/cjs/render/contributions/render/rect-render.d.ts +2 -2
- package/cjs/render/contributions/render/rect-render.js +3 -3
- package/cjs/render/contributions/render/rect-render.js.map +1 -1
- package/cjs/render/contributions/render/star-module.d.ts +2 -0
- package/cjs/render/contributions/render/star-module.js +15 -0
- package/cjs/render/contributions/render/star-module.js.map +1 -0
- package/cjs/render/contributions/render/star-render.d.ts +10 -0
- package/cjs/render/contributions/render/star-render.js +54 -0
- package/cjs/render/contributions/render/star-render.js.map +1 -0
- package/cjs/render/contributions/render/symbol-render.d.ts +2 -2
- package/cjs/render/contributions/render/symbol-render.js +3 -3
- package/cjs/render/contributions/render/symbol-render.js.map +1 -1
- package/cjs/render/contributions/render/symbol.d.ts +1 -0
- package/cjs/render/contributions/render/symbol.js +2 -2
- package/cjs/render/contributions/render/symbol.js.map +1 -1
- package/cjs/render/contributions/render/text-render.d.ts +2 -2
- package/cjs/render/contributions/render/text-render.js +3 -3
- package/cjs/render/contributions/render/text-render.js.map +1 -1
- package/cjs/render/render-service.d.ts +2 -1
- package/cjs/render/render-service.js +3 -0
- package/cjs/render/render-service.js.map +1 -1
- package/dist/index.es.js +12657 -12230
- package/es/animate/config.d.ts +1 -2
- package/es/animate/config.js +0 -5
- package/es/animate/config.js.map +1 -1
- package/es/application.d.ts +2 -1
- package/es/application.js.map +1 -1
- package/es/color-string/interpolate.js +4 -1
- package/es/color-string/interpolate.js.map +1 -1
- package/es/common/canvas-utils.js +6 -3
- package/es/common/canvas-utils.js.map +1 -1
- package/es/common/contribution-provider.d.ts +16 -0
- package/es/common/contribution-provider.js +20 -1
- package/es/common/contribution-provider.js.map +1 -1
- package/es/common/custom-path2d.js +2 -2
- package/es/common/custom-path2d.js.map +1 -1
- package/es/common/event-listener-manager.d.ts +14 -0
- package/es/common/event-listener-manager.js +44 -0
- package/es/common/event-listener-manager.js.map +1 -0
- package/es/common/event-transformer.d.ts +12 -0
- package/es/common/event-transformer.js +81 -0
- package/es/common/event-transformer.js.map +1 -0
- package/es/common/morphing-utils.js +29 -124
- package/es/common/morphing-utils.js.map +1 -1
- package/es/common/performance-raf.d.ts +1 -1
- package/es/common/performance-raf.js +9 -8
- package/es/common/performance-raf.js.map +1 -1
- package/es/common/polygon.js +4 -2
- package/es/common/polygon.js.map +1 -1
- package/es/common/segment/curve/cubic-bezier.d.ts +1 -2
- package/es/common/segment/curve/cubic-bezier.js +1 -8
- package/es/common/segment/curve/cubic-bezier.js.map +1 -1
- package/es/common/segment/curve/quadratic-bezier.d.ts +1 -0
- package/es/common/segment/curve/quadratic-bezier.js +5 -2
- package/es/common/segment/curve/quadratic-bezier.js.map +1 -1
- package/es/common/segment/index.d.ts +1 -0
- package/es/common/segment/index.js +6 -1
- package/es/common/segment/index.js.map +1 -1
- package/es/common/segment/step.d.ts +6 -0
- package/es/common/segment/step.js +13 -0
- package/es/common/segment/step.js.map +1 -1
- package/es/common/shape/arc.d.ts +1 -1
- package/es/common/shape/arc.js +7 -3
- package/es/common/shape/arc.js.map +1 -1
- package/es/common/simplify.js +1 -2
- package/es/common/split-path.js +3 -2
- package/es/common/split-path.js.map +1 -1
- package/es/common/utils.d.ts +0 -2
- package/es/common/utils.js +0 -4
- package/es/common/utils.js.map +1 -1
- package/es/core/constants.js +1 -1
- package/es/core/core-modules.js +1 -1
- package/es/core/global.d.ts +7 -5
- package/es/core/global.js +15 -12
- package/es/core/global.js.map +1 -1
- package/es/core/stage.d.ts +6 -2
- package/es/core/stage.js +23 -9
- package/es/core/stage.js.map +1 -1
- package/es/core/window.d.ts +5 -4
- package/es/core/window.js +15 -12
- package/es/core/window.js.map +1 -1
- package/es/event/event-system.js +11 -10
- package/es/event/event-system.js.map +1 -1
- package/es/graphic/arc.d.ts +1 -2
- package/es/graphic/arc.js +4 -3
- package/es/graphic/arc.js.map +1 -1
- package/es/graphic/area.d.ts +1 -2
- package/es/graphic/area.js +5 -2
- package/es/graphic/area.js.map +1 -1
- package/es/graphic/circle.d.ts +1 -2
- package/es/graphic/circle.js +6 -3
- package/es/graphic/circle.js.map +1 -1
- package/es/graphic/config.d.ts +2 -1
- package/es/graphic/config.js +11 -2
- package/es/graphic/config.js.map +1 -1
- package/es/graphic/constants.d.ts +1 -0
- package/es/graphic/constants.js +2 -0
- package/es/graphic/constants.js.map +1 -1
- package/es/graphic/graphic-service/graphic-module.js +1 -1
- package/es/graphic/graphic-service/graphic-module.js.map +1 -1
- package/es/graphic/graphic-service/graphic-service.js +1 -4
- package/es/graphic/graphic-service/graphic-service.js.map +1 -1
- package/es/graphic/graphic.d.ts +8 -1
- package/es/graphic/graphic.js +33 -19
- package/es/graphic/graphic.js.map +1 -1
- package/es/graphic/group.js +7 -7
- package/es/graphic/group.js.map +1 -1
- package/es/graphic/image.js +2 -1
- package/es/graphic/image.js.map +1 -1
- package/es/graphic/index.d.ts +1 -0
- package/es/graphic/index.js +2 -0
- package/es/graphic/index.js.map +1 -1
- package/es/graphic/line.d.ts +1 -2
- package/es/graphic/line.js +7 -2
- package/es/graphic/line.js.map +1 -1
- package/es/graphic/path.js +2 -1
- package/es/graphic/path.js.map +1 -1
- package/es/graphic/polygon.js +2 -1
- package/es/graphic/polygon.js.map +1 -1
- package/es/graphic/rect.js +7 -3
- package/es/graphic/rect.js.map +1 -1
- package/es/graphic/richtext/icon.d.ts +1 -1
- package/es/graphic/richtext/icon.js.map +1 -1
- package/es/graphic/richtext.js +3 -2
- package/es/graphic/richtext.js.map +1 -1
- package/es/graphic/star.d.ts +52 -0
- package/es/graphic/star.js +82 -0
- package/es/graphic/star.js.map +1 -0
- package/es/graphic/symbol.js +3 -1
- package/es/graphic/symbol.js.map +1 -1
- package/es/graphic/text.js +1 -0
- package/es/graphic/text.js.map +1 -1
- package/es/graphic/theme.js +3 -1
- package/es/graphic/theme.js.map +1 -1
- package/es/index.d.ts +4 -0
- package/es/index.js +8 -0
- package/es/index.js.map +1 -1
- package/es/interface/animation/animate.d.ts +17 -0
- package/es/interface/animation/animate.js.map +1 -1
- package/es/interface/animation/ticker.d.ts +2 -0
- package/es/interface/animation/ticker.js.map +1 -1
- package/es/interface/common.d.ts +1 -1
- package/es/interface/common.js.map +1 -1
- package/es/interface/contribution.d.ts +2 -0
- package/es/interface/contribution.js.map +1 -1
- package/es/interface/event-listener-manager.d.ts +7 -0
- package/es/interface/event-listener-manager.js +2 -0
- package/es/interface/event-listener-manager.js.map +1 -0
- package/es/interface/global.d.ts +2 -1
- package/es/interface/global.js.map +1 -1
- package/es/interface/graphic/index.d.ts +1 -0
- package/es/interface/graphic/index.js +2 -0
- package/es/interface/graphic/index.js.map +1 -1
- package/es/interface/graphic/star.d.ts +12 -0
- package/es/interface/graphic/star.js +2 -0
- package/es/interface/graphic/star.js.map +1 -0
- package/es/interface/graphic/theme.d.ts +3 -0
- package/es/interface/graphic/theme.js.map +1 -1
- package/es/interface/graphic.d.ts +12 -1
- package/es/interface/graphic.js.map +1 -1
- package/es/interface/picker.d.ts +1 -0
- package/es/interface/picker.js.map +1 -1
- package/es/interface/render.d.ts +4 -0
- package/es/interface/render.js.map +1 -1
- package/es/interface/stage.d.ts +2 -0
- package/es/interface/stage.js.map +1 -1
- package/es/interface/window.d.ts +1 -0
- package/es/interface/window.js.map +1 -1
- package/es/modules.d.ts +2 -1
- package/es/modules.js +6 -0
- package/es/modules.js.map +1 -1
- package/es/picker/global-picker-service.d.ts +1 -0
- package/es/picker/global-picker-service.js +1 -0
- package/es/picker/global-picker-service.js.map +1 -1
- package/es/picker/picker-service.d.ts +1 -0
- package/es/picker/picker-service.js +3 -0
- package/es/picker/picker-service.js.map +1 -1
- package/es/plugins/builtin-plugin/auto-render-plugin.js +8 -8
- package/es/plugins/builtin-plugin/auto-render-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/dirty-bounds-plugin.js +13 -12
- package/es/plugins/builtin-plugin/dirty-bounds-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/flex-layout-plugin.js +12 -11
- package/es/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/html-attribute-plugin.js +0 -1
- package/es/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/incremental-auto-render-plugin.js +8 -5
- package/es/plugins/builtin-plugin/incremental-auto-render-plugin.js.map +1 -1
- package/es/register/register-star.d.ts +1 -0
- package/es/register/register-star.js +8 -0
- package/es/register/register-star.js.map +1 -0
- package/es/render/contributions/render/arc-render.d.ts +2 -2
- package/es/render/contributions/render/arc-render.js +7 -7
- package/es/render/contributions/render/arc-render.js.map +1 -1
- package/es/render/contributions/render/area-render.d.ts +2 -2
- package/es/render/contributions/render/area-render.js +5 -5
- package/es/render/contributions/render/area-render.js.map +1 -1
- package/es/render/contributions/render/base-render.d.ts +2 -0
- package/es/render/contributions/render/base-render.js +3 -0
- package/es/render/contributions/render/base-render.js.map +1 -1
- package/es/render/contributions/render/circle-render.d.ts +2 -2
- package/es/render/contributions/render/circle-render.js +3 -3
- package/es/render/contributions/render/circle-render.js.map +1 -1
- package/es/render/contributions/render/contributions/constants.d.ts +1 -0
- package/es/render/contributions/render/contributions/constants.js +2 -0
- package/es/render/contributions/render/contributions/constants.js.map +1 -1
- package/es/render/contributions/render/contributions/index.d.ts +1 -0
- package/es/render/contributions/render/contributions/index.js +2 -0
- package/es/render/contributions/render/contributions/index.js.map +1 -1
- package/es/render/contributions/render/contributions/star-contribution-render.d.ts +2 -0
- package/es/render/contributions/render/contributions/star-contribution-render.js +8 -0
- package/es/render/contributions/render/contributions/star-contribution-render.js.map +1 -0
- package/es/render/contributions/render/draw-contribution.d.ts +1 -0
- package/es/render/contributions/render/draw-contribution.js +6 -1
- package/es/render/contributions/render/draw-contribution.js.map +1 -1
- package/es/render/contributions/render/draw-interceptor.js +2 -2
- package/es/render/contributions/render/draw-interceptor.js.map +1 -1
- package/es/render/contributions/render/glyph-render.d.ts +1 -0
- package/es/render/contributions/render/glyph-render.js +1 -0
- package/es/render/contributions/render/glyph-render.js.map +1 -1
- package/es/render/contributions/render/graphic-render.d.ts +1 -0
- package/es/render/contributions/render/graphic-render.js.map +1 -1
- package/es/render/contributions/render/group-render.d.ts +1 -0
- package/es/render/contributions/render/group-render.js +8 -4
- package/es/render/contributions/render/group-render.js.map +1 -1
- package/es/render/contributions/render/image-render.d.ts +2 -2
- package/es/render/contributions/render/image-render.js +3 -3
- package/es/render/contributions/render/image-render.js.map +1 -1
- package/es/render/contributions/render/line-render.js +1 -1
- package/es/render/contributions/render/line-render.js.map +1 -1
- package/es/render/contributions/render/path-render.d.ts +2 -2
- package/es/render/contributions/render/path-render.js +3 -3
- package/es/render/contributions/render/path-render.js.map +1 -1
- package/es/render/contributions/render/polygon-render.d.ts +2 -2
- package/es/render/contributions/render/polygon-render.js +3 -3
- package/es/render/contributions/render/polygon-render.js.map +1 -1
- package/es/render/contributions/render/rect-render.d.ts +2 -2
- package/es/render/contributions/render/rect-render.js +3 -3
- package/es/render/contributions/render/rect-render.js.map +1 -1
- package/es/render/contributions/render/star-module.d.ts +2 -0
- package/es/render/contributions/render/star-module.js +13 -0
- package/es/render/contributions/render/star-module.js.map +1 -0
- package/es/render/contributions/render/star-render.d.ts +10 -0
- package/es/render/contributions/render/star-render.js +59 -0
- package/es/render/contributions/render/star-render.js.map +1 -0
- package/es/render/contributions/render/symbol-render.d.ts +2 -2
- package/es/render/contributions/render/symbol-render.js +3 -3
- package/es/render/contributions/render/symbol-render.js.map +1 -1
- package/es/render/contributions/render/symbol.d.ts +1 -0
- package/es/render/contributions/render/symbol.js +2 -0
- package/es/render/contributions/render/symbol.js.map +1 -1
- package/es/render/contributions/render/text-render.d.ts +2 -2
- package/es/render/contributions/render/text-render.js +3 -3
- package/es/render/contributions/render/text-render.js.map +1 -1
- package/es/render/render-service.d.ts +2 -1
- package/es/render/render-service.js +3 -0
- package/es/render/render-service.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.EventListenerManager = void 0;
|
|
6
|
+
|
|
7
|
+
class EventListenerManager {
|
|
8
|
+
constructor() {
|
|
9
|
+
this._listenerMap = new Map, this._eventListenerTransformer = event => event;
|
|
10
|
+
}
|
|
11
|
+
setEventListenerTransformer(transformer) {
|
|
12
|
+
this._eventListenerTransformer = transformer || (event => event);
|
|
13
|
+
}
|
|
14
|
+
addEventListener(type, listener, options) {
|
|
15
|
+
if (!listener) return;
|
|
16
|
+
const wrappedListener = event => {
|
|
17
|
+
const transformedEvent = this._eventListenerTransformer(event);
|
|
18
|
+
"function" == typeof listener ? listener(transformedEvent) : listener.handleEvent && listener.handleEvent(transformedEvent);
|
|
19
|
+
};
|
|
20
|
+
this._listenerMap.has(type) || this._listenerMap.set(type, new Map), this._listenerMap.get(type).set(listener, wrappedListener),
|
|
21
|
+
this._nativeAddEventListener(type, wrappedListener, options);
|
|
22
|
+
}
|
|
23
|
+
removeEventListener(type, listener, options) {
|
|
24
|
+
var _a;
|
|
25
|
+
if (!listener) return;
|
|
26
|
+
const wrappedListener = null === (_a = this._listenerMap.get(type)) || void 0 === _a ? void 0 : _a.get(listener);
|
|
27
|
+
wrappedListener && (this._nativeRemoveEventListener(type, wrappedListener, options),
|
|
28
|
+
this._listenerMap.get(type).delete(listener), 0 === this._listenerMap.get(type).size && this._listenerMap.delete(type));
|
|
29
|
+
}
|
|
30
|
+
dispatchEvent(event) {
|
|
31
|
+
return this._nativeDispatchEvent(event);
|
|
32
|
+
}
|
|
33
|
+
clearAllEventListeners() {
|
|
34
|
+
this._listenerMap.forEach(((listenersMap, type) => {
|
|
35
|
+
listenersMap.forEach(((wrappedListener, originalListener) => {
|
|
36
|
+
this._nativeRemoveEventListener(type, wrappedListener, void 0);
|
|
37
|
+
}));
|
|
38
|
+
})), this._listenerMap.clear();
|
|
39
|
+
}
|
|
40
|
+
_nativeAddEventListener(type, listener, options) {
|
|
41
|
+
throw new Error("_nativeAddEventListener must be implemented by derived classes");
|
|
42
|
+
}
|
|
43
|
+
_nativeRemoveEventListener(type, listener, options) {
|
|
44
|
+
throw new Error("_nativeRemoveEventListener must be implemented by derived classes");
|
|
45
|
+
}
|
|
46
|
+
_nativeDispatchEvent(event) {
|
|
47
|
+
throw new Error("_nativeDispatchEvent must be implemented by derived classes");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
exports.EventListenerManager = EventListenerManager;
|
|
52
|
+
//# sourceMappingURL=event-listener-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/event-listener-manager.ts"],"names":[],"mappings":"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","file":"event-listener-manager.js","sourcesContent":["import type { IEventListenerManager } from '../interface/event-listener-manager';\n\n/**\n * Base class to manage event listeners with support for event transformation\n * Used by DefaultGlobal and DefaultWindow to handle the transformation of event coordinates\n */\nexport class EventListenerManager implements IEventListenerManager {\n /**\n * Map that stores the mapping from original listeners to wrapped listeners\n * Structure: Map<eventType, Map<originalListener, wrappedListener>>\n */\n protected _listenerMap: Map<string, Map<EventListenerOrEventListenerObject, EventListener>>;\n\n /**\n * Transformer function that transforms the event\n */\n protected _eventListenerTransformer: (event: Event) => Event;\n\n constructor() {\n this._listenerMap = new Map();\n this._eventListenerTransformer = event => event; // Default: no transformation\n }\n\n /**\n * Set the event transformer function\n * @param transformer Function that transforms events\n */\n setEventListenerTransformer(transformer: (event: Event) => Event): void {\n this._eventListenerTransformer = transformer || (event => event);\n }\n\n /**\n * Add an event listener with event transformation\n * @param type Event type\n * @param listener Original event listener\n * @param options Event listener options\n */\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): void {\n if (!listener) {\n return;\n }\n\n // Create a wrapped listener that applies the transformation\n const wrappedListener = (event: Event) => {\n const transformedEvent = this._eventListenerTransformer(event);\n if (typeof listener === 'function') {\n listener(transformedEvent);\n } else if (listener.handleEvent) {\n listener.handleEvent(transformedEvent);\n }\n };\n\n // Store the mapping between original and wrapped listener\n if (!this._listenerMap.has(type)) {\n this._listenerMap.set(type, new Map());\n }\n this._listenerMap.get(type)!.set(listener, wrappedListener);\n\n // Add the wrapped listener\n this._nativeAddEventListener(type, wrappedListener, options);\n }\n\n /**\n * Remove an event listener\n * @param type Event type\n * @param listener Event listener to remove\n * @param options Event listener options\n */\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n if (!listener) {\n return;\n }\n\n // Get the wrapped listener from our map\n const wrappedListener = this._listenerMap.get(type)?.get(listener);\n if (wrappedListener) {\n // Remove the wrapped listener\n this._nativeRemoveEventListener(type, wrappedListener, options);\n\n // Remove from our map\n this._listenerMap.get(type)!.delete(listener);\n if (this._listenerMap.get(type)!.size === 0) {\n this._listenerMap.delete(type);\n }\n }\n }\n\n /**\n * Dispatch an event\n * @param event Event to dispatch\n */\n dispatchEvent(event: Event): boolean {\n return this._nativeDispatchEvent(event);\n }\n\n /**\n * Clear all event listeners\n */\n clearAllEventListeners(): void {\n this._listenerMap.forEach((listenersMap, type) => {\n listenersMap.forEach((wrappedListener, originalListener) => {\n this._nativeRemoveEventListener(type, wrappedListener, undefined);\n });\n });\n this._listenerMap.clear();\n }\n\n /**\n * Native implementation of addEventListener\n * To be implemented by derived classes\n */\n protected _nativeAddEventListener(\n type: string,\n listener: EventListener,\n options?: boolean | AddEventListenerOptions\n ): void {\n throw new Error('_nativeAddEventListener must be implemented by derived classes');\n }\n\n /**\n * Native implementation of removeEventListener\n * To be implemented by derived classes\n */\n protected _nativeRemoveEventListener(\n type: string,\n listener: EventListener,\n options?: boolean | EventListenerOptions\n ): void {\n throw new Error('_nativeRemoveEventListener must be implemented by derived classes');\n }\n\n /**\n * Native implementation of dispatchEvent\n * To be implemented by derived classes\n */\n protected _nativeDispatchEvent(event: Event): boolean {\n throw new Error('_nativeDispatchEvent must be implemented by derived classes');\n }\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IAABBBounds } from '@visactor/vutils';
|
|
2
|
+
import type { Matrix } from '@visactor/vutils';
|
|
3
|
+
import type { IGlobal, IWindow } from '../interface';
|
|
4
|
+
export declare function createEventTransformer(containerElement: HTMLElement, getMatrix: () => Matrix, getRect: () => IAABBBounds, transformPoint: (clientX: number, clientY: number, matrix: Matrix, rect: IAABBBounds, transformedEvent: Event) => void): (event: Event) => Event;
|
|
5
|
+
export declare function createCanvasEventTransformer(canvasElement: HTMLCanvasElement, getMatrix: () => Matrix, getRect: () => IAABBBounds, transformPoint: (clientX: number, clientY: number, matrix: Matrix, rect: IAABBBounds, transformedEvent: Event) => void): (event: Event) => Event;
|
|
6
|
+
export declare function registerWindowEventTransformer(window: IWindow, container: HTMLElement, getMatrix: () => Matrix, getRect: () => IAABBBounds, transformPoint: (clientX: number, clientY: number, matrix: Matrix, rect: IAABBBounds, transformedEvent: Event) => void): void;
|
|
7
|
+
export declare function registerGlobalEventTransformer(global: IGlobal, container: HTMLElement, getMatrix: () => Matrix, getRect: () => IAABBBounds, transformPoint: (clientX: number, clientY: number, matrix: Matrix, rect: IAABBBounds, transformedEvent: Event) => void): void;
|
|
8
|
+
export declare function transformPointForCanvas(clientX: number, clientY: number, matrix: Matrix, rect: IAABBBounds, transformedEvent: Event): void;
|
|
9
|
+
export declare function mapToCanvasPointForCanvas(nativeEvent: any): {
|
|
10
|
+
x: any;
|
|
11
|
+
y: any;
|
|
12
|
+
};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.mapToCanvasPointForCanvas = exports.transformPointForCanvas = exports.registerGlobalEventTransformer = exports.registerWindowEventTransformer = exports.createCanvasEventTransformer = exports.createEventTransformer = void 0;
|
|
6
|
+
|
|
7
|
+
const util_1 = require("../canvas/util");
|
|
8
|
+
|
|
9
|
+
function isIdentityMatrix(matrix) {
|
|
10
|
+
return 1 === matrix.a && 0 === matrix.b && 0 === matrix.c && 1 === matrix.d && 0 === matrix.e && 0 === matrix.f;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function createEventTransformer(containerElement, getMatrix, getRect, transformPoint) {
|
|
14
|
+
return event => {
|
|
15
|
+
if (!(event instanceof MouseEvent || event instanceof TouchEvent || event instanceof PointerEvent)) return event;
|
|
16
|
+
const transformMatrix = getMatrix();
|
|
17
|
+
if (isIdentityMatrix(transformMatrix)) return event;
|
|
18
|
+
const containerRect = getRect(), transformedEvent = new event.constructor(event.type, event);
|
|
19
|
+
if (Object.defineProperties(transformedEvent, {
|
|
20
|
+
target: {
|
|
21
|
+
value: event.target
|
|
22
|
+
},
|
|
23
|
+
currentTarget: {
|
|
24
|
+
value: event.currentTarget
|
|
25
|
+
}
|
|
26
|
+
}), event instanceof MouseEvent || event instanceof PointerEvent) transformPoint(event.clientX, event.clientY, transformMatrix, containerRect, transformedEvent); else if (event instanceof TouchEvent) {
|
|
27
|
+
if (event.touches.length > 0) {
|
|
28
|
+
const touch = transformedEvent.touches[0];
|
|
29
|
+
transformPoint(touch.clientX, touch.clientY, transformMatrix, containerRect, touch);
|
|
30
|
+
}
|
|
31
|
+
if (event.changedTouches.length > 0) {
|
|
32
|
+
const touch = transformedEvent.changedTouches[0];
|
|
33
|
+
transformPoint(touch.clientX, touch.clientY, transformMatrix, containerRect, touch);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return transformedEvent;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function createCanvasEventTransformer(canvasElement, getMatrix, getRect, transformPoint) {
|
|
41
|
+
return createEventTransformer(canvasElement.parentElement || canvasElement, getMatrix, getRect, transformPoint);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function registerWindowEventTransformer(window, container, getMatrix, getRect, transformPoint) {
|
|
45
|
+
const transformer = createEventTransformer(container, getMatrix, getRect, transformPoint);
|
|
46
|
+
window.setEventListenerTransformer(transformer);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function registerGlobalEventTransformer(global, container, getMatrix, getRect, transformPoint) {
|
|
50
|
+
const transformer = createEventTransformer(container, getMatrix, getRect, transformPoint);
|
|
51
|
+
global.setEventListenerTransformer(transformer);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function transformPointForCanvas(clientX, clientY, matrix, rect, transformedEvent) {
|
|
55
|
+
const transformedPoint = {
|
|
56
|
+
x: clientX,
|
|
57
|
+
y: clientY
|
|
58
|
+
};
|
|
59
|
+
matrix.transformPoint(transformedPoint, transformedPoint), Object.defineProperties(transformedEvent, {
|
|
60
|
+
_canvasX: {
|
|
61
|
+
value: transformedPoint.x
|
|
62
|
+
},
|
|
63
|
+
_canvasY: {
|
|
64
|
+
value: transformedPoint.y
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function mapToCanvasPointForCanvas(nativeEvent) {
|
|
70
|
+
var _a;
|
|
71
|
+
if ((0, util_1.isNumber)(nativeEvent._canvasX) && (0, util_1.isNumber)(nativeEvent._canvasY)) return {
|
|
72
|
+
x: nativeEvent._canvasX,
|
|
73
|
+
y: nativeEvent._canvasY
|
|
74
|
+
};
|
|
75
|
+
if (nativeEvent.changedTouches) {
|
|
76
|
+
const data = null !== (_a = nativeEvent.changedTouches[0]) && void 0 !== _a ? _a : {};
|
|
77
|
+
return {
|
|
78
|
+
x: data._canvasX,
|
|
79
|
+
y: data._canvasY
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
x: nativeEvent._canvasX || 0,
|
|
84
|
+
y: nativeEvent._canvasY || 0
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
exports.createEventTransformer = createEventTransformer, exports.createCanvasEventTransformer = createCanvasEventTransformer,
|
|
89
|
+
exports.registerWindowEventTransformer = registerWindowEventTransformer, exports.registerGlobalEventTransformer = registerGlobalEventTransformer,
|
|
90
|
+
exports.transformPointForCanvas = transformPointForCanvas, exports.mapToCanvasPointForCanvas = mapToCanvasPointForCanvas;
|
|
91
|
+
//# sourceMappingURL=event-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/event-transformer.ts"],"names":[],"mappings":"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","file":"event-transformer.js","sourcesContent":["import type { IAABBBounds } from '@visactor/vutils';\nimport type { Matrix } from '@visactor/vutils';\nimport type { IGlobal, IWindow } from '../interface';\nimport { isNumber } from '../canvas/util';\n\nfunction isIdentityMatrix(matrix: Matrix): boolean {\n return matrix.a === 1 && matrix.b === 0 && matrix.c === 0 && matrix.d === 1 && matrix.e === 0 && matrix.f === 0;\n}\n\n/**\n * Create an event transformer that corrects event coordinates based on container transformations\n * @param containerElement The container element\n * @param matrix The transformation matrix to apply\n * @param rect Optional DOMRect of the container, if not provided will use getBoundingClientRect\n * @returns A function that transforms events to correct coordinates\n */\nexport function createEventTransformer(\n containerElement: HTMLElement,\n getMatrix: () => Matrix,\n getRect: () => IAABBBounds,\n transformPoint: (clientX: number, clientY: number, matrix: Matrix, rect: IAABBBounds, transformedEvent: Event) => void\n): (event: Event) => Event {\n return (event: Event): Event => {\n // Only transform mouse and touch events that have coordinates\n if (!(event instanceof MouseEvent) && !(event instanceof TouchEvent) && !(event instanceof PointerEvent)) {\n return event;\n }\n\n // Use provided matrix\n const transformMatrix = getMatrix();\n\n // If there's no transformation, return the original event\n if (isIdentityMatrix(transformMatrix)) {\n return event;\n }\n\n // Get the container's bounding rect for coordinate conversion\n const containerRect = getRect();\n\n // Create a copy of the event to modify\n const transformedEvent = new (event.constructor as any)(event.type, event);\n Object.defineProperties(transformedEvent, {\n target: { value: event.target },\n currentTarget: { value: event.currentTarget }\n });\n\n if (event instanceof MouseEvent || event instanceof PointerEvent) {\n transformPoint(event.clientX, event.clientY, transformMatrix, containerRect, transformedEvent);\n } else if (event instanceof TouchEvent) {\n // For touch events, we need to transform each touch point\n // This is a simplified version that assumes we're only using the first touch\n if (event.touches.length > 0) {\n const touch = transformedEvent.touches[0];\n transformPoint(touch.clientX, touch.clientY, transformMatrix, containerRect, touch);\n }\n if (event.changedTouches.length > 0) {\n const touch = transformedEvent.changedTouches[0];\n transformPoint(touch.clientX, touch.clientY, transformMatrix, containerRect, touch);\n }\n }\n\n return transformedEvent;\n };\n}\n\n/**\n * Create an event transformer for the given canvas element\n * @param canvasElement The canvas element\n * @param getMatrix The transformation matrix to apply\n * @param getRect Optional DOMRect of the container\n * @returns A function that transforms events to correct coordinates\n */\nexport function createCanvasEventTransformer(\n canvasElement: HTMLCanvasElement,\n getMatrix: () => Matrix,\n getRect: () => IAABBBounds,\n transformPoint: (clientX: number, clientY: number, matrix: Matrix, rect: IAABBBounds, transformedEvent: Event) => void\n): (event: Event) => Event {\n return createEventTransformer(canvasElement.parentElement || canvasElement, getMatrix, getRect, transformPoint);\n}\n\n/**\n * Register the event transformer with a DefaultWindow instance\n * @param window The window instance\n * @param container The container element\n * @param getMatrix The transformation matrix to apply\n * @param getRect Optional DOMRect of the container\n */\nexport function registerWindowEventTransformer(\n window: IWindow,\n container: HTMLElement,\n getMatrix: () => Matrix,\n getRect: () => IAABBBounds,\n transformPoint: (clientX: number, clientY: number, matrix: Matrix, rect: IAABBBounds, transformedEvent: Event) => void\n): void {\n const transformer = createEventTransformer(container, getMatrix, getRect, transformPoint);\n window.setEventListenerTransformer(transformer);\n}\n\n/**\n * Register the event transformer with a DefaultGlobal instance\n * @param global The global instance\n * @param container The container element\n * @param getMatrix The transformation matrix to apply\n * @param getRect Optional DOMRect of the container\n */\nexport function registerGlobalEventTransformer(\n global: IGlobal,\n container: HTMLElement,\n getMatrix: () => Matrix,\n getRect: () => IAABBBounds,\n transformPoint: (clientX: number, clientY: number, matrix: Matrix, rect: IAABBBounds, transformedEvent: Event) => void\n): void {\n const transformer = createEventTransformer(container, getMatrix, getRect, transformPoint);\n global.setEventListenerTransformer(transformer);\n}\n\nexport function transformPointForCanvas(\n clientX: number,\n clientY: number,\n matrix: Matrix,\n rect: IAABBBounds,\n transformedEvent: Event\n) {\n // Apply the inverse transformation\n const transformedPoint = { x: clientX, y: clientY };\n\n matrix.transformPoint(transformedPoint, transformedPoint);\n\n // Update the event properties\n Object.defineProperties(transformedEvent, {\n _canvasX: { value: transformedPoint.x },\n _canvasY: { value: transformedPoint.y }\n });\n return;\n}\n\nexport function mapToCanvasPointForCanvas(nativeEvent: any) {\n if (isNumber(nativeEvent._canvasX) && isNumber(nativeEvent._canvasY)) {\n return {\n x: nativeEvent._canvasX,\n y: nativeEvent._canvasY\n };\n } else if ((nativeEvent as TouchEvent).changedTouches) {\n const data = (nativeEvent as TouchEvent).changedTouches[0] ?? ({} as any);\n return {\n x: data._canvasX,\n y: data._canvasY\n };\n }\n const x = (nativeEvent as any)._canvasX || 0;\n const y = (nativeEvent as any)._canvasY || 0;\n return {\n x,\n y\n };\n}\n"]}
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: !0
|
|
5
5
|
}), exports.bezierCurversToPath = exports.applyTransformOnBezierCurves = exports.pathToBezierCurves = exports.alignBezierCurves = exports.findBestMorphingRotation = exports.centroidOfSubpath = exports.alignSubpath = exports.cubicSubdivide = void 0;
|
|
6
6
|
|
|
7
|
-
const
|
|
7
|
+
const custom_path2d_1 = require("./custom-path2d");
|
|
8
8
|
|
|
9
9
|
function cubicSubdivide(p0, p1, p2, p3, t, out) {
|
|
10
10
|
const p01 = (p1 - p0) * t + p0, p12 = (p2 - p1) * t + p1, p23 = (p3 - p2) * t + p2, p012 = (p12 - p01) * t + p01, p123 = (p23 - p12) * t + p12, p0123 = (p123 - p012) * t + p012;
|
|
@@ -134,132 +134,38 @@ function alignBezierCurves(array1, array2) {
|
|
|
134
134
|
return [ newArray1, newArray2 ];
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
exports.cubicSubdivide = cubicSubdivide, exports.alignSubpath = alignSubpath, exports.centroidOfSubpath = centroidOfSubpath,
|
|
138
|
-
exports.findBestMorphingRotation = findBestMorphingRotation, exports.alignBezierCurves = alignBezierCurves;
|
|
139
|
-
|
|
140
|
-
const addLineToBezierPath = (bezierPath, x0, y0, x1, y1) => {
|
|
141
|
-
(0, vutils_1.isNumberClose)(x0, x1) && (0, vutils_1.isNumberClose)(y0, y1) || bezierPath.push(x0, y0, x1, y1, x1, y1);
|
|
142
|
-
};
|
|
143
|
-
|
|
144
137
|
function pathToBezierCurves(path) {
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
let
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
x1
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
break;
|
|
173
|
-
|
|
174
|
-
case path_svg_1.enumCommandMap.A:
|
|
175
|
-
{
|
|
176
|
-
const cx = cmd[1], cy = cmd[2], rx = cmd[3], ry = rx, startAngle = cmd[4], endAngle = cmd[5], counterClockwise = !!cmd[6];
|
|
177
|
-
x1 = Math.cos(startAngle) * rx + cx, y1 = Math.sin(startAngle) * rx + cy, isFirst ? (x0 = x1,
|
|
178
|
-
y0 = y1, createNewSubpath(x0, y0)) : addLineToBezierPath(currentSubpath, xi, yi, x1, y1),
|
|
179
|
-
xi = Math.cos(endAngle) * rx + cx, yi = Math.sin(endAngle) * rx + cy;
|
|
180
|
-
const step = (counterClockwise ? -1 : 1) * Math.PI / 2;
|
|
181
|
-
for (let angle = startAngle; counterClockwise ? angle > endAngle : angle < endAngle; angle += step) {
|
|
182
|
-
const nextAngle = counterClockwise ? Math.max(angle + step, endAngle) : Math.min(angle + step, endAngle);
|
|
183
|
-
(0, arc_1.addArcToBezierPath)(currentSubpath, angle, nextAngle, cx, cy, rx, ry);
|
|
184
|
-
}
|
|
185
|
-
break;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
case path_svg_1.enumCommandMap.E:
|
|
189
|
-
{
|
|
190
|
-
const cx = cmd[1], cy = cmd[2], rx = cmd[3], ry = cmd[4], rotate = cmd[5], startAngle = cmd[6], endAngle = cmd[7] + startAngle, anticlockwise = !!cmd[8], hasRotate = !(0,
|
|
191
|
-
vutils_1.isNumberClose)(rotate, 0), rc = Math.cos(rotate), rs = Math.sin(rotate);
|
|
192
|
-
let xTemp = Math.cos(startAngle) * rx, yTemp = Math.sin(startAngle) * ry;
|
|
193
|
-
hasRotate ? (x1 = xTemp * rc - yTemp * rs + cx, y1 = xTemp * rs + yTemp * rc + cy) : (x1 = xTemp + cx,
|
|
194
|
-
y1 = yTemp + cy), isFirst ? (x0 = x1, y0 = y1, createNewSubpath(x0, y0)) : addLineToBezierPath(currentSubpath, xi, yi, x1, y1),
|
|
195
|
-
xTemp = Math.cos(endAngle) * rx, yTemp = Math.sin(endAngle) * ry, hasRotate ? (xi = xTemp * rc - yTemp * rs + cx,
|
|
196
|
-
yi = xTemp * rs + yTemp * rc + cy) : (xi = xTemp + cx, yi = yTemp + cy);
|
|
197
|
-
const step = (anticlockwise ? -1 : 1) * Math.PI / 2;
|
|
198
|
-
for (let angle = startAngle; anticlockwise ? angle > endAngle : angle < endAngle; angle += step) {
|
|
199
|
-
const nextAngle = anticlockwise ? Math.max(angle + step, endAngle) : Math.min(angle + step, endAngle);
|
|
200
|
-
if ((0, arc_1.addArcToBezierPath)(currentSubpath, angle, nextAngle, cx, cy, rx, ry),
|
|
201
|
-
hasRotate) {
|
|
202
|
-
const curLen = currentSubpath.length;
|
|
203
|
-
for (let j = curLen - 6; j <= curLen - 1; j += 2) xTemp = currentSubpath[j], yTemp = currentSubpath[j + 1],
|
|
204
|
-
currentSubpath[j] = (xTemp - cx) * rc - (yTemp - cy) * rs + cx, currentSubpath[j + 1] = (xTemp - cx) * rs + (yTemp - cy) * rc + cy;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
break;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
case path_svg_1.enumCommandMap.R:
|
|
211
|
-
x0 = xi = cmd[1], y0 = yi = cmd[2], x1 = x0 + cmd[3], y1 = y0 + cmd[4], createNewSubpath(x1, y0),
|
|
212
|
-
addLineToBezierPath(currentSubpath, x1, y0, x1, y1), addLineToBezierPath(currentSubpath, x1, y1, x0, y1),
|
|
213
|
-
addLineToBezierPath(currentSubpath, x0, y1, x0, y0), addLineToBezierPath(currentSubpath, x0, y0, x1, y0);
|
|
214
|
-
break;
|
|
215
|
-
|
|
216
|
-
case path_svg_1.enumCommandMap.AT:
|
|
217
|
-
{
|
|
218
|
-
const tx1 = cmd[1], ty1 = cmd[2], tx2 = cmd[3], ty2 = cmd[4], r = cmd[5], dis1 = vutils_1.PointService.distancePP({
|
|
219
|
-
x: xi,
|
|
220
|
-
y: yi
|
|
221
|
-
}, {
|
|
222
|
-
x: tx1,
|
|
223
|
-
y: ty1
|
|
224
|
-
}), dis2 = vutils_1.PointService.distancePP({
|
|
225
|
-
x: tx2,
|
|
226
|
-
y: ty2
|
|
227
|
-
}, {
|
|
228
|
-
x: tx1,
|
|
229
|
-
y: ty1
|
|
230
|
-
}), theta = ((xi - tx1) * (tx2 - tx1) + (yi - ty1) * (ty2 - ty1)) / (dis1 * dis2), dis = r / Math.sin(theta / 2), midX = (xi + tx2 - 2 * tx1) / 2, midY = (yi + ty2 - 2 * ty1) / 2, midLen = vutils_1.PointService.distancePP({
|
|
231
|
-
x: midX,
|
|
232
|
-
y: midY
|
|
233
|
-
}, {
|
|
234
|
-
x: 0,
|
|
235
|
-
y: 0
|
|
236
|
-
}), cx = tx1 + dis * midX / midLen, cy = tx2 + dis * midY / midLen, disP = Math.sqrt(dis * dis - r * r);
|
|
237
|
-
x0 = tx1 + disP * (xi - tx1) / dis1, y0 = ty1 + disP * (yi - ty1) / dis1, addLineToBezierPath(currentSubpath, xi, yi, x0, y0),
|
|
238
|
-
xi = tx1 + disP * (tx2 - tx1) / dis2, yi = ty1 + disP * (ty2 - ty1) / dis2;
|
|
239
|
-
const startAngle = (0, vutils_1.getAngleByPoint)({
|
|
240
|
-
x: cx,
|
|
241
|
-
y: cy
|
|
242
|
-
}, {
|
|
243
|
-
x: x0,
|
|
244
|
-
y: y0
|
|
245
|
-
}), endAngle = (0, vutils_1.getAngleByPoint)({
|
|
246
|
-
x: cx,
|
|
247
|
-
y: cy
|
|
248
|
-
}, {
|
|
249
|
-
x: xi,
|
|
250
|
-
y: yi
|
|
251
|
-
});
|
|
252
|
-
(0, arc_1.addArcToBezierPath)(currentSubpath, startAngle, endAngle, cx, cy, r, r);
|
|
253
|
-
break;
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
case path_svg_1.enumCommandMap.Z:
|
|
257
|
-
currentSubpath && addLineToBezierPath(currentSubpath, xi, yi, x0, y0), xi = x0,
|
|
258
|
-
yi = y0;
|
|
138
|
+
const tempPath = new custom_path2d_1.CustomPath2D, svgPathString = path.toString();
|
|
139
|
+
if (!svgPathString) return [];
|
|
140
|
+
tempPath.fromString(svgPathString);
|
|
141
|
+
const curves = tempPath.tryBuildCurves();
|
|
142
|
+
if (!curves || 0 === curves.length) return [];
|
|
143
|
+
const bezierSubpaths = [];
|
|
144
|
+
let currentSubpath = null;
|
|
145
|
+
currentSubpath = [];
|
|
146
|
+
let firstX = 0, firstY = 0, lastX = 0, lastY = 0, isSubpathStart = !0, isPathClosed = !1;
|
|
147
|
+
for (let i = 0; i < curves.length; i++) {
|
|
148
|
+
const curve = curves[i];
|
|
149
|
+
if (isSubpathStart && (firstX = curve.p0.x, firstY = curve.p0.y, lastX = firstX,
|
|
150
|
+
lastY = firstY, currentSubpath = [ firstX, firstY ], bezierSubpaths.push(currentSubpath),
|
|
151
|
+
isSubpathStart = !1), curve.p1 && curve.p2 && curve.p3) currentSubpath.push(curve.p1.x, curve.p1.y, curve.p2.x, curve.p2.y, curve.p3.x, curve.p3.y),
|
|
152
|
+
lastX = curve.p3.x, lastY = curve.p3.y; else if (curve.p1 && curve.p2) {
|
|
153
|
+
const x1 = curve.p1.x, y1 = curve.p1.y, x2 = curve.p2.x, y2 = curve.p2.y;
|
|
154
|
+
currentSubpath.push(lastX + 2 / 3 * (x1 - lastX), lastY + 2 / 3 * (y1 - lastY), x2 + 2 / 3 * (x1 - x2), y2 + 2 / 3 * (y1 - y2), x2, y2),
|
|
155
|
+
lastX = x2, lastY = y2;
|
|
156
|
+
} else if (curve.p1) {
|
|
157
|
+
const endX = curve.p1.x, endY = curve.p1.y;
|
|
158
|
+
Math.abs(lastX - endX) < 1e-10 && Math.abs(lastY - endY) < 1e-10 || currentSubpath.push(lastX, lastY, endX, endY, endX, endY),
|
|
159
|
+
lastX = endX, lastY = endY;
|
|
160
|
+
}
|
|
161
|
+
if (i === curves.length - 1 && Math.abs(lastX - firstX) < 1e-10 && Math.abs(lastY - firstY) < 1e-10 && (isPathClosed = !0),
|
|
162
|
+
i < curves.length - 1) {
|
|
163
|
+
const nextCurve = curves[i + 1];
|
|
164
|
+
(Math.abs(lastX - nextCurve.p0.x) > 1e-10 || Math.abs(lastY - nextCurve.p0.y) > 1e-10) && (isSubpathStart = !0);
|
|
259
165
|
}
|
|
260
166
|
}
|
|
261
|
-
|
|
262
|
-
|
|
167
|
+
const validSubpaths = bezierSubpaths.filter((subpath => subpath.length > 2));
|
|
168
|
+
return 1 === validSubpaths.length ? [ validSubpaths[0] ] : validSubpaths;
|
|
263
169
|
}
|
|
264
170
|
|
|
265
171
|
function applyTransformOnBezierCurves(bezierCurves, martrix) {
|
|
@@ -290,6 +196,8 @@ function bezierCurversToPath(bezierCurves) {
|
|
|
290
196
|
return path;
|
|
291
197
|
}
|
|
292
198
|
|
|
199
|
+
exports.cubicSubdivide = cubicSubdivide, exports.alignSubpath = alignSubpath, exports.centroidOfSubpath = centroidOfSubpath,
|
|
200
|
+
exports.findBestMorphingRotation = findBestMorphingRotation, exports.alignBezierCurves = alignBezierCurves,
|
|
293
201
|
exports.pathToBezierCurves = pathToBezierCurves, exports.applyTransformOnBezierCurves = applyTransformOnBezierCurves,
|
|
294
202
|
exports.bezierCurversToPath = bezierCurversToPath;
|
|
295
203
|
//# sourceMappingURL=morphing-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/morphing-utils.ts"],"names":[],"mappings":"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","file":"morphing-utils.js","sourcesContent":["/* Adapted from zrender by ecomfe\n * https://github.com/ecomfe/zrender\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/ecomfe/zrender/blob/master/src/tool/morphPath.ts\n * License: https://github.com/ecomfe/zrender/blob/master/LICENSE\n * @license\n */\n\nimport type { IMatrix } from '@visactor/vutils';\nimport { getAngleByPoint, isNumberClose, PointService } from '@visactor/vutils';\nimport type { ICustomPath2D } from '../interface';\nimport { CustomPath2D } from './custom-path2d';\nimport { enumCommandMap } from './path-svg';\nimport { addArcToBezierPath } from './shape/arc';\n\nexport function cubicSubdivide(p0: number, p1: number, p2: number, p3: number, t: number, out: number[]) {\n const p01 = (p1 - p0) * t + p0;\n const p12 = (p2 - p1) * t + p1;\n const p23 = (p3 - p2) * t + p2;\n\n const p012 = (p12 - p01) * t + p01;\n const p123 = (p23 - p12) * t + p12;\n\n const p0123 = (p123 - p012) * t + p012;\n // Seg0\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n out[3] = p0123;\n // Seg1\n out[4] = p0123;\n out[5] = p123;\n out[6] = p23;\n out[7] = p3;\n}\n\nexport function alignSubpath(subpath1: number[], subpath2: number[]): [number[], number[]] {\n const len1 = subpath1.length;\n const len2 = subpath2.length;\n if (len1 === len2) {\n return [subpath1, subpath2];\n }\n const tmpSegX: number[] = [];\n const tmpSegY: number[] = [];\n\n const shorterPath = len1 < len2 ? subpath1 : subpath2;\n const shorterLen = Math.min(len1, len2);\n // Should divide excatly\n const diff = Math.abs(len2 - len1) / 6;\n const shorterBezierCount = (shorterLen - 2) / 6;\n // Add `diff` number of beziers\n const eachCurveSubDivCount = Math.ceil(diff / shorterBezierCount);\n\n const newSubpath = [shorterPath[0], shorterPath[1]];\n let remained = diff;\n\n for (let i = 2; i < shorterLen; i += 6) {\n let x0 = shorterPath[i - 2];\n let y0 = shorterPath[i - 1];\n let x1 = shorterPath[i];\n let y1 = shorterPath[i + 1];\n let x2 = shorterPath[i + 2];\n let y2 = shorterPath[i + 3];\n const x3 = shorterPath[i + 4];\n const y3 = shorterPath[i + 5];\n\n if (remained <= 0) {\n newSubpath.push(x1, y1, x2, y2, x3, y3);\n continue;\n }\n\n const actualSubDivCount = Math.min(remained, eachCurveSubDivCount) + 1;\n for (let k = 1; k <= actualSubDivCount; k++) {\n const p = k / actualSubDivCount;\n\n cubicSubdivide(x0, x1, x2, x3, p, tmpSegX);\n cubicSubdivide(y0, y1, y2, y3, p, tmpSegY);\n\n // tmpSegX[3] === tmpSegX[4]\n x0 = tmpSegX[3];\n y0 = tmpSegY[3];\n\n newSubpath.push(tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], x0, y0);\n x1 = tmpSegX[5];\n y1 = tmpSegY[5];\n x2 = tmpSegX[6];\n y2 = tmpSegY[6];\n // The last point (x3, y3) is still the same.\n }\n remained -= actualSubDivCount - 1;\n }\n\n return shorterPath === subpath1 ? [newSubpath, subpath2] : [subpath1, newSubpath];\n}\n\nfunction createSubpath(lastSubpath: number[], otherSubpath: number[]) {\n const prevSubPath = lastSubpath || otherSubpath;\n const len = prevSubPath.length;\n const lastX = prevSubPath[len - 2];\n const lastY = prevSubPath[len - 1];\n\n const newSubpath: number[] = [];\n for (let i = 0; i < otherSubpath.length; i += 2) {\n newSubpath[i] = lastX;\n newSubpath[i + 1] = lastY;\n }\n return newSubpath;\n}\n\nfunction reverseSubpath(array: number[]) {\n const newArr: number[] = [];\n const len = array.length;\n for (let i = 0; i < len; i += 2) {\n newArr[i] = array[len - i - 2];\n newArr[i + 1] = array[len - i - 1];\n }\n return newArr;\n}\n/**\n * 用于计算内部不相交的多边形中心点\n */\nexport function centroidOfSubpath(array: number[]) {\n // https://en.wikipedia.org/wiki/Centroid#Of_a_polygon\n let signedArea = 0;\n let cx = 0;\n let cy = 0;\n const len = array.length;\n // Polygon should been closed.\n for (let i = 0, j = len - 2; i < len; j = i, i += 2) {\n const x0 = array[j];\n const y0 = array[j + 1];\n const x1 = array[i];\n const y1 = array[i + 1];\n const a = x0 * y1 - x1 * y0;\n signedArea += a;\n cx += (x0 + x1) * a;\n cy += (y0 + y1) * a;\n }\n\n if (signedArea === 0) {\n return [array[0] || 0, array[1] || 0, 0];\n }\n\n return [cx / signedArea / 3, cy / signedArea / 3, signedArea];\n}\n\n/**\n * 针对闭合的曲线,查找最适合的旋转offset\n */\nfunction findBestRotationOffset(fromSubBeziers: number[], toSubBeziers: number[], fromCp: number[], toCp: number[]) {\n const bezierCount = (fromSubBeziers.length - 2) / 6;\n let bestScore = Infinity;\n let bestOffset = 0;\n\n const len = fromSubBeziers.length;\n const len2 = len - 2;\n\n for (let offset = 0; offset < bezierCount; offset++) {\n const cursorOffset = offset * 6;\n let score = 0;\n\n for (let k = 0; k < len; k += 2) {\n const idx = k === 0 ? cursorOffset : ((cursorOffset + k - 2) % len2) + 2;\n\n const x0 = fromSubBeziers[idx] - fromCp[0];\n const y0 = fromSubBeziers[idx + 1] - fromCp[1];\n const x1 = toSubBeziers[k] - toCp[0];\n const y1 = toSubBeziers[k + 1] - toCp[1];\n\n const dx = x1 - x0;\n const dy = y1 - y0;\n score += dx * dx + dy * dy;\n }\n if (score < bestScore) {\n bestScore = score;\n bestOffset = offset;\n }\n }\n\n return bestOffset;\n}\n\n/**\n * If we interpolating between two bezier curve arrays.\n * It will have many broken effects during the transition.\n * So we try to apply an extra rotation which can make each bezier curve morph as small as possible.\n */\nexport function findBestMorphingRotation(\n fromArr: number[][],\n toArr: number[][],\n searchAngleIteration: number,\n searchAngleRange: number\n) {\n const result = [];\n\n let fromNeedsReverse: boolean;\n\n for (let i = 0; i < fromArr.length; i++) {\n let fromSubpathBezier = fromArr[i];\n const toSubpathBezier = toArr[i];\n\n const fromCp = centroidOfSubpath(fromSubpathBezier);\n const toCp = centroidOfSubpath(toSubpathBezier);\n\n if (fromNeedsReverse == null) {\n // Reverse from array if two have different directions.\n // Determine the clockwise based on the first subpath.\n // Reverse all subpaths or not. Avoid winding rule changed.\n fromNeedsReverse = fromCp[2] < 0 !== toCp[2] < 0;\n }\n\n const newFromSubpathBezier: number[] = [];\n const newToSubpathBezier: number[] = [];\n let bestAngle = 0;\n let bestScore = Infinity;\n const tmpArr: number[] = [];\n\n const len = fromSubpathBezier.length;\n if (fromNeedsReverse) {\n // Make sure clockwise\n fromSubpathBezier = reverseSubpath(fromSubpathBezier);\n }\n const offset = findBestRotationOffset(fromSubpathBezier, toSubpathBezier, fromCp, toCp) * 6;\n\n const len2 = len - 2;\n\n for (let k = 0; k < len2; k += 2) {\n // Not include the start point.\n const idx = ((offset + k) % len2) + 2;\n newFromSubpathBezier[k + 2] = fromSubpathBezier[idx] - fromCp[0];\n newFromSubpathBezier[k + 3] = fromSubpathBezier[idx + 1] - fromCp[1];\n }\n newFromSubpathBezier[0] = fromSubpathBezier[offset] - fromCp[0];\n newFromSubpathBezier[1] = fromSubpathBezier[offset + 1] - fromCp[1];\n\n if (searchAngleIteration > 0) {\n const step = searchAngleRange / searchAngleIteration;\n for (let angle = -searchAngleRange / 2; angle <= searchAngleRange / 2; angle += step) {\n const sa = Math.sin(angle);\n const ca = Math.cos(angle);\n let score = 0;\n\n for (let k = 0; k < fromSubpathBezier.length; k += 2) {\n const x0 = newFromSubpathBezier[k];\n const y0 = newFromSubpathBezier[k + 1];\n const x1 = toSubpathBezier[k] - toCp[0];\n const y1 = toSubpathBezier[k + 1] - toCp[1];\n\n // Apply rotation on the target point.\n const newX1 = x1 * ca - y1 * sa;\n const newY1 = x1 * sa + y1 * ca;\n\n tmpArr[k] = newX1;\n tmpArr[k + 1] = newY1;\n\n const dx = newX1 - x0;\n const dy = newY1 - y0;\n\n // Use dot product to have min direction change.\n // const d = Math.sqrt(x0 * x0 + y0 * y0);\n // score += x0 * dx / d + y0 * dy / d;\n score += dx * dx + dy * dy;\n }\n\n if (score < bestScore) {\n bestScore = score;\n bestAngle = angle;\n // Copy.\n for (let m = 0; m < tmpArr.length; m++) {\n newToSubpathBezier[m] = tmpArr[m];\n }\n }\n }\n } else {\n for (let i = 0; i < len; i += 2) {\n newToSubpathBezier[i] = toSubpathBezier[i] - toCp[0];\n newToSubpathBezier[i + 1] = toSubpathBezier[i + 1] - toCp[1];\n }\n }\n\n result.push({\n from: newFromSubpathBezier,\n to: newToSubpathBezier,\n fromCp,\n toCp,\n rotation: -bestAngle\n });\n }\n return result;\n}\n\n/**\n * Make two bezier arrays aligns on structure. To have better animation.\n *\n * It will:\n * Make two bezier arrays have same number of subpaths.\n * Make each subpath has equal number of bezier curves.\n *\n * array is the convert result of pathToBezierCurves.\n */\nexport function alignBezierCurves(array1: number[][], array2: number[][]) {\n let lastSubpath1;\n let lastSubpath2;\n\n const newArray1 = [];\n const newArray2 = [];\n\n for (let i = 0; i < Math.max(array1.length, array2.length); i++) {\n const subpath1 = array1[i];\n const subpath2 = array2[i];\n\n let newSubpath1;\n let newSubpath2;\n\n if (!subpath1) {\n newSubpath1 = createSubpath(lastSubpath1, subpath2);\n newSubpath2 = subpath2;\n } else if (!subpath2) {\n newSubpath2 = createSubpath(lastSubpath2, subpath1);\n newSubpath1 = subpath1;\n } else {\n [newSubpath1, newSubpath2] = alignSubpath(subpath1, subpath2);\n lastSubpath1 = newSubpath1;\n lastSubpath2 = newSubpath2;\n }\n\n newArray1.push(newSubpath1);\n newArray2.push(newSubpath2);\n }\n\n return [newArray1, newArray2];\n}\n\nconst addLineToBezierPath = (bezierPath: number[], x0: number, y0: number, x1: number, y1: number) => {\n if (!(isNumberClose(x0, x1) && isNumberClose(y0, y1))) {\n bezierPath.push(x0, y0, x1, y1, x1, y1);\n }\n};\n\nexport function pathToBezierCurves(path: ICustomPath2D): number[][] {\n const commandList = path.commandList;\n\n const bezierArrayGroups: number[][] = [];\n let currentSubpath: number[];\n\n // end point\n let xi: number = 0;\n let yi: number = 0;\n // start point\n let x0: number = 0;\n let y0: number = 0;\n\n const createNewSubpath = (x: number, y: number) => {\n // More than one M command\n if (currentSubpath && currentSubpath.length > 2) {\n bezierArrayGroups.push(currentSubpath);\n }\n currentSubpath = [x, y];\n };\n\n // the first control point\n let x1: number;\n let y1: number;\n // the second control point\n let x2: number;\n let y2: number;\n\n for (let i = 0, len = commandList.length; i < len; i++) {\n const cmd = commandList[i];\n\n const isFirst = i === 0;\n\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n x0 = xi = cmd[1] as number;\n y0 = yi = cmd[2] as number;\n\n if ([enumCommandMap.L, enumCommandMap.C, enumCommandMap.Q].includes(cmd[0])) {\n // Start point\n currentSubpath = [x0, y0];\n }\n }\n\n switch (cmd[0]) {\n case enumCommandMap.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n xi = x0 = cmd[1] as number;\n yi = y0 = cmd[2] as number;\n\n createNewSubpath(x0, y0);\n break;\n case enumCommandMap.L:\n x1 = cmd[1] as number;\n y1 = cmd[2] as number;\n addLineToBezierPath(currentSubpath, xi, yi, x1, y1);\n xi = x1;\n yi = y1;\n break;\n case enumCommandMap.C:\n currentSubpath.push(\n cmd[1] as number,\n cmd[2] as number,\n cmd[3] as number,\n cmd[4] as number,\n (xi = cmd[5] as number),\n (yi = cmd[6] as number)\n );\n break;\n case enumCommandMap.Q:\n x1 = cmd[1] as number;\n y1 = cmd[2] as number;\n x2 = cmd[3] as number;\n y2 = cmd[4] as number;\n currentSubpath.push(\n // Convert quadratic to cubic\n xi + (2 / 3) * (x1 - xi),\n yi + (2 / 3) * (y1 - yi),\n x2 + (2 / 3) * (x1 - x2),\n y2 + (2 / 3) * (y1 - y2),\n x2,\n y2\n );\n xi = x2;\n yi = y2;\n break;\n case enumCommandMap.A: {\n const cx = cmd[1] as number;\n const cy = cmd[2] as number;\n const rx = cmd[3] as number;\n const ry = rx;\n const startAngle = cmd[4] as number;\n const endAngle = cmd[5] as number;\n\n const counterClockwise = !!(cmd[6] as number);\n\n x1 = Math.cos(startAngle) * rx + cx;\n y1 = Math.sin(startAngle) * rx + cy;\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n createNewSubpath(x0, y0);\n } else {\n // Connect a line between current point to arc start point.\n addLineToBezierPath(currentSubpath, xi, yi, x1, y1);\n }\n\n xi = Math.cos(endAngle) * rx + cx;\n yi = Math.sin(endAngle) * rx + cy;\n\n const step = ((counterClockwise ? -1 : 1) * Math.PI) / 2;\n\n for (let angle = startAngle; counterClockwise ? angle > endAngle : angle < endAngle; angle += step) {\n const nextAngle = counterClockwise ? Math.max(angle + step, endAngle) : Math.min(angle + step, endAngle);\n addArcToBezierPath(currentSubpath, angle, nextAngle, cx, cy, rx, ry);\n }\n break;\n }\n case enumCommandMap.E: {\n const cx = cmd[1] as number;\n const cy = cmd[2] as number;\n const rx = cmd[3] as number;\n const ry = cmd[4] as number;\n const rotate = cmd[5] as number;\n const startAngle = cmd[6] as number;\n const endAngle = (cmd[7] as number) + startAngle;\n\n const anticlockwise = !!(cmd[8] as number);\n const hasRotate = !isNumberClose(rotate, 0);\n const rc = Math.cos(rotate);\n const rs = Math.sin(rotate);\n\n let xTemp = Math.cos(startAngle) * rx;\n let yTemp = Math.sin(startAngle) * ry;\n\n if (hasRotate) {\n x1 = xTemp * rc - yTemp * rs + cx;\n y1 = xTemp * rs + yTemp * rc + cy;\n } else {\n x1 = xTemp + cx;\n y1 = yTemp + cy;\n }\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n createNewSubpath(x0, y0);\n } else {\n // Connect a line between current point to arc start point.\n addLineToBezierPath(currentSubpath, xi, yi, x1, y1);\n }\n\n xTemp = Math.cos(endAngle) * rx;\n yTemp = Math.sin(endAngle) * ry;\n if (hasRotate) {\n xi = xTemp * rc - yTemp * rs + cx;\n yi = xTemp * rs + yTemp * rc + cy;\n } else {\n xi = xTemp + cx;\n yi = yTemp + cy;\n }\n\n const step = ((anticlockwise ? -1 : 1) * Math.PI) / 2;\n\n for (let angle = startAngle; anticlockwise ? angle > endAngle : angle < endAngle; angle += step) {\n const nextAngle = anticlockwise ? Math.max(angle + step, endAngle) : Math.min(angle + step, endAngle);\n addArcToBezierPath(currentSubpath, angle, nextAngle, cx, cy, rx, ry);\n\n if (hasRotate) {\n const curLen = currentSubpath.length;\n\n for (let j = curLen - 6; j <= curLen - 1; j += 2) {\n xTemp = currentSubpath[j];\n yTemp = currentSubpath[j + 1];\n\n currentSubpath[j] = (xTemp - cx) * rc - (yTemp - cy) * rs + cx;\n currentSubpath[j + 1] = (xTemp - cx) * rs + (yTemp - cy) * rc + cy;\n }\n }\n }\n\n break;\n }\n case enumCommandMap.R: {\n x0 = xi = cmd[1] as number;\n y0 = yi = cmd[2] as number;\n x1 = x0 + (cmd[3] as number);\n y1 = y0 + (cmd[4] as number);\n\n // rect is an individual path.\n createNewSubpath(x1, y0);\n addLineToBezierPath(currentSubpath, x1, y0, x1, y1);\n addLineToBezierPath(currentSubpath, x1, y1, x0, y1);\n addLineToBezierPath(currentSubpath, x0, y1, x0, y0);\n addLineToBezierPath(currentSubpath, x0, y0, x1, y0);\n break;\n }\n case enumCommandMap.AT: {\n const tx1 = cmd[1] as number;\n const ty1 = cmd[2] as number;\n const tx2 = cmd[3] as number;\n const ty2 = cmd[4] as number;\n const r = cmd[5] as number;\n\n const dis1 = PointService.distancePP({ x: xi, y: yi }, { x: tx1, y: ty1 });\n const dis2 = PointService.distancePP({ x: tx2, y: ty2 }, { x: tx1, y: ty1 });\n const theta = ((xi - tx1) * (tx2 - tx1) + (yi - ty1) * (ty2 - ty1)) / (dis1 * dis2);\n const dis = r / Math.sin(theta / 2);\n const midX = (xi + tx2 - 2 * tx1) / 2;\n const midY = (yi + ty2 - 2 * ty1) / 2;\n const midLen = PointService.distancePP({ x: midX, y: midY }, { x: 0, y: 0 });\n const cx = tx1 + (dis * midX) / midLen;\n const cy = tx2 + (dis * midY) / midLen;\n const disP = Math.sqrt(dis * dis - r * r);\n x0 = tx1 + (disP * (xi - tx1)) / dis1;\n y0 = ty1 + (disP * (yi - ty1)) / dis1;\n\n // Connect a line between current point to arc start point.\n addLineToBezierPath(currentSubpath, xi, yi, x0, y0);\n\n xi = tx1 + (disP * (tx2 - tx1)) / dis2;\n yi = ty1 + (disP * (ty2 - ty1)) / dis2;\n\n const startAngle = getAngleByPoint({ x: cx, y: cy }, { x: x0, y: y0 });\n\n const endAngle = getAngleByPoint({ x: cx, y: cy }, { x: xi, y: yi });\n\n addArcToBezierPath(currentSubpath, startAngle, endAngle, cx, cy, r, r);\n\n break;\n }\n case enumCommandMap.Z: {\n currentSubpath && addLineToBezierPath(currentSubpath, xi, yi, x0, y0);\n xi = x0;\n yi = y0;\n break;\n }\n }\n }\n\n if (currentSubpath && currentSubpath.length > 2) {\n bezierArrayGroups.push(currentSubpath);\n }\n\n return bezierArrayGroups;\n}\n\nexport function applyTransformOnBezierCurves(bezierCurves: number[][], martrix: IMatrix) {\n for (let i = 0; i < bezierCurves.length; i++) {\n const subPath = bezierCurves[i];\n for (let k = 0; k < subPath.length; k += 2) {\n const x = subPath[k];\n const y = subPath[k + 1];\n const res = { x, y };\n\n martrix.transformPoint({ x, y }, res);\n\n subPath[k] = res.x;\n subPath[k + 1] = res.y;\n }\n }\n}\n\nexport function bezierCurversToPath(bezierCurves: number[][]) {\n const path = new CustomPath2D();\n\n for (let i = 0; i < bezierCurves.length; i++) {\n const subPath = bezierCurves[i];\n\n if (subPath.length > 2) {\n path.moveTo(subPath[0], subPath[1]);\n for (let k = 2; k < subPath.length; k += 6) {\n path.bezierCurveTo(subPath[k], subPath[k + 1], subPath[k + 2], subPath[k + 3], subPath[k + 4], subPath[k + 5]);\n }\n }\n }\n\n return path;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/common/morphing-utils.ts"],"names":[],"mappings":"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","file":"morphing-utils.js","sourcesContent":["/* Adapted from zrender by ecomfe\n * https://github.com/ecomfe/zrender\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/ecomfe/zrender/blob/master/src/tool/morphPath.ts\n * License: https://github.com/ecomfe/zrender/blob/master/LICENSE\n * @license\n */\n\nimport type { IMatrix } from '@visactor/vutils';\nimport { getAngleByPoint, isNumberClose, PointService } from '@visactor/vutils';\nimport type { ICustomPath2D } from '../interface';\nimport { CustomPath2D } from './custom-path2d';\nimport { enumCommandMap } from './path-svg';\nimport { addArcToBezierPath } from './shape/arc';\n\nexport function cubicSubdivide(p0: number, p1: number, p2: number, p3: number, t: number, out: number[]) {\n const p01 = (p1 - p0) * t + p0;\n const p12 = (p2 - p1) * t + p1;\n const p23 = (p3 - p2) * t + p2;\n\n const p012 = (p12 - p01) * t + p01;\n const p123 = (p23 - p12) * t + p12;\n\n const p0123 = (p123 - p012) * t + p012;\n // Seg0\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n out[3] = p0123;\n // Seg1\n out[4] = p0123;\n out[5] = p123;\n out[6] = p23;\n out[7] = p3;\n}\n\nexport function alignSubpath(subpath1: number[], subpath2: number[]): [number[], number[]] {\n const len1 = subpath1.length;\n const len2 = subpath2.length;\n if (len1 === len2) {\n return [subpath1, subpath2];\n }\n const tmpSegX: number[] = [];\n const tmpSegY: number[] = [];\n\n const shorterPath = len1 < len2 ? subpath1 : subpath2;\n const shorterLen = Math.min(len1, len2);\n // Should divide excatly\n const diff = Math.abs(len2 - len1) / 6;\n const shorterBezierCount = (shorterLen - 2) / 6;\n // Add `diff` number of beziers\n const eachCurveSubDivCount = Math.ceil(diff / shorterBezierCount);\n\n const newSubpath = [shorterPath[0], shorterPath[1]];\n let remained = diff;\n\n for (let i = 2; i < shorterLen; i += 6) {\n let x0 = shorterPath[i - 2];\n let y0 = shorterPath[i - 1];\n let x1 = shorterPath[i];\n let y1 = shorterPath[i + 1];\n let x2 = shorterPath[i + 2];\n let y2 = shorterPath[i + 3];\n const x3 = shorterPath[i + 4];\n const y3 = shorterPath[i + 5];\n\n if (remained <= 0) {\n newSubpath.push(x1, y1, x2, y2, x3, y3);\n continue;\n }\n\n const actualSubDivCount = Math.min(remained, eachCurveSubDivCount) + 1;\n for (let k = 1; k <= actualSubDivCount; k++) {\n const p = k / actualSubDivCount;\n\n cubicSubdivide(x0, x1, x2, x3, p, tmpSegX);\n cubicSubdivide(y0, y1, y2, y3, p, tmpSegY);\n\n // tmpSegX[3] === tmpSegX[4]\n x0 = tmpSegX[3];\n y0 = tmpSegY[3];\n\n newSubpath.push(tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], x0, y0);\n x1 = tmpSegX[5];\n y1 = tmpSegY[5];\n x2 = tmpSegX[6];\n y2 = tmpSegY[6];\n // The last point (x3, y3) is still the same.\n }\n remained -= actualSubDivCount - 1;\n }\n\n return shorterPath === subpath1 ? [newSubpath, subpath2] : [subpath1, newSubpath];\n}\n\nfunction createSubpath(lastSubpath: number[], otherSubpath: number[]) {\n const prevSubPath = lastSubpath || otherSubpath;\n const len = prevSubPath.length;\n const lastX = prevSubPath[len - 2];\n const lastY = prevSubPath[len - 1];\n\n const newSubpath: number[] = [];\n for (let i = 0; i < otherSubpath.length; i += 2) {\n newSubpath[i] = lastX;\n newSubpath[i + 1] = lastY;\n }\n return newSubpath;\n}\n\nfunction reverseSubpath(array: number[]) {\n const newArr: number[] = [];\n const len = array.length;\n for (let i = 0; i < len; i += 2) {\n newArr[i] = array[len - i - 2];\n newArr[i + 1] = array[len - i - 1];\n }\n return newArr;\n}\n/**\n * 用于计算内部不相交的多边形中心点\n */\nexport function centroidOfSubpath(array: number[]) {\n // https://en.wikipedia.org/wiki/Centroid#Of_a_polygon\n let signedArea = 0;\n let cx = 0;\n let cy = 0;\n const len = array.length;\n // Polygon should been closed.\n for (let i = 0, j = len - 2; i < len; j = i, i += 2) {\n const x0 = array[j];\n const y0 = array[j + 1];\n const x1 = array[i];\n const y1 = array[i + 1];\n const a = x0 * y1 - x1 * y0;\n signedArea += a;\n cx += (x0 + x1) * a;\n cy += (y0 + y1) * a;\n }\n\n if (signedArea === 0) {\n return [array[0] || 0, array[1] || 0, 0];\n }\n\n return [cx / signedArea / 3, cy / signedArea / 3, signedArea];\n}\n\n/**\n * 针对闭合的曲线,查找最适合的旋转offset\n */\nfunction findBestRotationOffset(fromSubBeziers: number[], toSubBeziers: number[], fromCp: number[], toCp: number[]) {\n const bezierCount = (fromSubBeziers.length - 2) / 6;\n let bestScore = Infinity;\n let bestOffset = 0;\n\n const len = fromSubBeziers.length;\n const len2 = len - 2;\n\n for (let offset = 0; offset < bezierCount; offset++) {\n const cursorOffset = offset * 6;\n let score = 0;\n\n for (let k = 0; k < len; k += 2) {\n const idx = k === 0 ? cursorOffset : ((cursorOffset + k - 2) % len2) + 2;\n\n const x0 = fromSubBeziers[idx] - fromCp[0];\n const y0 = fromSubBeziers[idx + 1] - fromCp[1];\n const x1 = toSubBeziers[k] - toCp[0];\n const y1 = toSubBeziers[k + 1] - toCp[1];\n\n const dx = x1 - x0;\n const dy = y1 - y0;\n score += dx * dx + dy * dy;\n }\n if (score < bestScore) {\n bestScore = score;\n bestOffset = offset;\n }\n }\n\n return bestOffset;\n}\n\n/**\n * If we interpolating between two bezier curve arrays.\n * It will have many broken effects during the transition.\n * So we try to apply an extra rotation which can make each bezier curve morph as small as possible.\n */\nexport function findBestMorphingRotation(\n fromArr: number[][],\n toArr: number[][],\n searchAngleIteration: number,\n searchAngleRange: number\n) {\n const result = [];\n\n let fromNeedsReverse: boolean;\n\n for (let i = 0; i < fromArr.length; i++) {\n let fromSubpathBezier = fromArr[i];\n const toSubpathBezier = toArr[i];\n\n const fromCp = centroidOfSubpath(fromSubpathBezier);\n const toCp = centroidOfSubpath(toSubpathBezier);\n\n if (fromNeedsReverse == null) {\n // Reverse from array if two have different directions.\n // Determine the clockwise based on the first subpath.\n // Reverse all subpaths or not. Avoid winding rule changed.\n fromNeedsReverse = fromCp[2] < 0 !== toCp[2] < 0;\n }\n\n const newFromSubpathBezier: number[] = [];\n const newToSubpathBezier: number[] = [];\n let bestAngle = 0;\n let bestScore = Infinity;\n const tmpArr: number[] = [];\n\n const len = fromSubpathBezier.length;\n if (fromNeedsReverse) {\n // Make sure clockwise\n fromSubpathBezier = reverseSubpath(fromSubpathBezier);\n }\n const offset = findBestRotationOffset(fromSubpathBezier, toSubpathBezier, fromCp, toCp) * 6;\n\n const len2 = len - 2;\n\n for (let k = 0; k < len2; k += 2) {\n // Not include the start point.\n const idx = ((offset + k) % len2) + 2;\n newFromSubpathBezier[k + 2] = fromSubpathBezier[idx] - fromCp[0];\n newFromSubpathBezier[k + 3] = fromSubpathBezier[idx + 1] - fromCp[1];\n }\n newFromSubpathBezier[0] = fromSubpathBezier[offset] - fromCp[0];\n newFromSubpathBezier[1] = fromSubpathBezier[offset + 1] - fromCp[1];\n\n if (searchAngleIteration > 0) {\n const step = searchAngleRange / searchAngleIteration;\n for (let angle = -searchAngleRange / 2; angle <= searchAngleRange / 2; angle += step) {\n const sa = Math.sin(angle);\n const ca = Math.cos(angle);\n let score = 0;\n\n for (let k = 0; k < fromSubpathBezier.length; k += 2) {\n const x0 = newFromSubpathBezier[k];\n const y0 = newFromSubpathBezier[k + 1];\n const x1 = toSubpathBezier[k] - toCp[0];\n const y1 = toSubpathBezier[k + 1] - toCp[1];\n\n // Apply rotation on the target point.\n const newX1 = x1 * ca - y1 * sa;\n const newY1 = x1 * sa + y1 * ca;\n\n tmpArr[k] = newX1;\n tmpArr[k + 1] = newY1;\n\n const dx = newX1 - x0;\n const dy = newY1 - y0;\n\n // Use dot product to have min direction change.\n // const d = Math.sqrt(x0 * x0 + y0 * y0);\n // score += x0 * dx / d + y0 * dy / d;\n score += dx * dx + dy * dy;\n }\n\n if (score < bestScore) {\n bestScore = score;\n bestAngle = angle;\n // Copy.\n for (let m = 0; m < tmpArr.length; m++) {\n newToSubpathBezier[m] = tmpArr[m];\n }\n }\n }\n } else {\n for (let i = 0; i < len; i += 2) {\n newToSubpathBezier[i] = toSubpathBezier[i] - toCp[0];\n newToSubpathBezier[i + 1] = toSubpathBezier[i + 1] - toCp[1];\n }\n }\n\n result.push({\n from: newFromSubpathBezier,\n to: newToSubpathBezier,\n fromCp,\n toCp,\n rotation: -bestAngle\n });\n }\n return result;\n}\n\n/**\n * Make two bezier arrays aligns on structure. To have better animation.\n *\n * It will:\n * Make two bezier arrays have same number of subpaths.\n * Make each subpath has equal number of bezier curves.\n *\n * array is the convert result of pathToBezierCurves.\n */\nexport function alignBezierCurves(array1: number[][], array2: number[][]) {\n let lastSubpath1;\n let lastSubpath2;\n\n const newArray1 = [];\n const newArray2 = [];\n\n for (let i = 0; i < Math.max(array1.length, array2.length); i++) {\n const subpath1 = array1[i];\n const subpath2 = array2[i];\n\n let newSubpath1;\n let newSubpath2;\n\n if (!subpath1) {\n newSubpath1 = createSubpath(lastSubpath1, subpath2);\n newSubpath2 = subpath2;\n } else if (!subpath2) {\n newSubpath2 = createSubpath(lastSubpath2, subpath1);\n newSubpath1 = subpath1;\n } else {\n [newSubpath1, newSubpath2] = alignSubpath(subpath1, subpath2);\n lastSubpath1 = newSubpath1;\n lastSubpath2 = newSubpath2;\n }\n\n newArray1.push(newSubpath1);\n newArray2.push(newSubpath2);\n }\n\n return [newArray1, newArray2];\n}\n\n/**\n * 将路径转换为贝塞尔曲线数组\n * 通过复用CustomPath2D中的方法,确保处理的一致性\n * @param path 要转换的路径\n * @returns 贝塞尔曲线数组\n */\nexport function pathToBezierCurves(path: ICustomPath2D): number[][] {\n // 创建临时路径和临时上下文\n const tempPath = new CustomPath2D();\n\n // 将路径转换为SVG路径字符串,这样可以利用CustomPath2D中的解析能力\n const svgPathString = path.toString();\n\n // 如果路径为空,直接返回空数组\n if (!svgPathString) {\n return [];\n }\n\n // 使用临时路径解析SVG字符串\n tempPath.fromString(svgPathString);\n\n // 确保曲线已经构建\n const curves = tempPath.tryBuildCurves();\n\n if (!curves || curves.length === 0) {\n return [];\n }\n\n // 用于存储分离的子路径\n const bezierSubpaths: number[][] = [];\n let currentSubpath: number[] = null;\n\n // 初始化当前子路径\n currentSubpath = [];\n let firstX = 0; // 记录子路径起点X (用于闭合路径)\n let firstY = 0; // 记录子路径起点Y (用于闭合路径)\n let lastX = 0; // 记录上一个点的X (用于连续线段)\n let lastY = 0; // 记录上一个点的Y (用于连续线段)\n let isSubpathStart = true;\n let isPathClosed = false;\n\n for (let i = 0; i < curves.length; i++) {\n const curve = curves[i];\n\n // 如果是新的子路径开始或者第一个点\n if (isSubpathStart) {\n firstX = curve.p0.x;\n firstY = curve.p0.y;\n lastX = firstX;\n lastY = firstY;\n currentSubpath = [firstX, firstY];\n bezierSubpaths.push(currentSubpath);\n isSubpathStart = false;\n }\n\n // 处理不同类型的曲线\n if (curve.p1 && curve.p2 && curve.p3) {\n // 三次贝塞尔曲线\n currentSubpath.push(curve.p1.x, curve.p1.y, curve.p2.x, curve.p2.y, curve.p3.x, curve.p3.y);\n lastX = curve.p3.x;\n lastY = curve.p3.y;\n } else if (curve.p1 && curve.p2) {\n // 二次贝塞尔曲线,转换为三次贝塞尔曲线\n const x1 = curve.p1.x;\n const y1 = curve.p1.y;\n const x2 = curve.p2.x;\n const y2 = curve.p2.y;\n\n currentSubpath.push(\n lastX + (2 / 3) * (x1 - lastX),\n lastY + (2 / 3) * (y1 - lastY),\n x2 + (2 / 3) * (x1 - x2),\n y2 + (2 / 3) * (y1 - y2),\n x2,\n y2\n );\n\n lastX = x2;\n lastY = y2;\n } else if (curve.p1) {\n // 直线段,转换为贝塞尔曲线格式\n // 直线的情况,p1就是终点\n const endX = curve.p1.x;\n const endY = curve.p1.y;\n\n // 避免添加长度为0的线段\n if (!(Math.abs(lastX - endX) < 1e-10 && Math.abs(lastY - endY) < 1e-10)) {\n // 使用addLineToBezierPath的逻辑:x0,y0, x1,y1, x1,y1\n // 第一个控制点等于起点,第二个控制点等于终点,终点等于终点\n currentSubpath.push(\n lastX,\n lastY, // 第一个控制点 = 起点\n endX,\n endY, // 第二个控制点 = 终点\n endX,\n endY // 终点\n );\n }\n\n lastX = endX;\n lastY = endY;\n }\n\n // 检查是否是闭合路径(最后一个点回到起点)\n if (i === curves.length - 1) {\n if (Math.abs(lastX - firstX) < 1e-10 && Math.abs(lastY - firstY) < 1e-10) {\n isPathClosed = true;\n }\n }\n\n // 检查是否需要开始新的子路径\n // 只有在检测到明确的路径中断(不连续的点)时才开始新子路径\n if (i < curves.length - 1) {\n const nextCurve = curves[i + 1];\n if (Math.abs(lastX - nextCurve.p0.x) > 1e-10 || Math.abs(lastY - nextCurve.p0.y) > 1e-10) {\n // 当前子路径结束,需要创建新的子路径\n isSubpathStart = true;\n }\n }\n }\n\n // 移除空的子路径\n const validSubpaths = bezierSubpaths.filter(subpath => subpath.length > 2);\n\n // 为了保持与原始函数一致,如果只有一个子路径,返回它的数组\n return validSubpaths.length === 1 ? [validSubpaths[0]] : validSubpaths;\n}\n\nexport function applyTransformOnBezierCurves(bezierCurves: number[][], martrix: IMatrix) {\n for (let i = 0; i < bezierCurves.length; i++) {\n const subPath = bezierCurves[i];\n for (let k = 0; k < subPath.length; k += 2) {\n const x = subPath[k];\n const y = subPath[k + 1];\n const res = { x, y };\n\n martrix.transformPoint({ x, y }, res);\n\n subPath[k] = res.x;\n subPath[k + 1] = res.y;\n }\n }\n}\n\nexport function bezierCurversToPath(bezierCurves: number[][]) {\n const path = new CustomPath2D();\n\n for (let i = 0; i < bezierCurves.length; i++) {\n const subPath = bezierCurves[i];\n\n if (subPath.length > 2) {\n path.moveTo(subPath[0], subPath[1]);\n for (let k = 2; k < subPath.length; k += 6) {\n path.bezierCurveTo(subPath[k], subPath[k + 1], subPath[k + 2], subPath[k + 3], subPath[k + 4], subPath[k + 5]);\n }\n }\n }\n\n return path;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare class PerformanceRAF {
|
|
2
|
-
nextAnimationFrameCbs: FrameRequestCallback
|
|
2
|
+
nextAnimationFrameCbs: Map<number, FrameRequestCallback>;
|
|
3
3
|
private _rafHandle;
|
|
4
4
|
addAnimationFrameCb(callback: FrameRequestCallback): number;
|
|
5
5
|
removeAnimationFrameCb(index: number): boolean;
|
|
@@ -4,25 +4,26 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: !0
|
|
5
5
|
}), exports.PerformanceRAF = void 0;
|
|
6
6
|
|
|
7
|
-
const
|
|
7
|
+
const application_1 = require("../application");
|
|
8
|
+
|
|
9
|
+
let idx = 0;
|
|
8
10
|
|
|
9
11
|
class PerformanceRAF {
|
|
10
12
|
constructor() {
|
|
11
|
-
this.nextAnimationFrameCbs =
|
|
13
|
+
this.nextAnimationFrameCbs = new Map, this._rafHandle = null, this.runAnimationFrame = time => {
|
|
12
14
|
this._rafHandle = null;
|
|
13
15
|
const cbs = this.nextAnimationFrameCbs;
|
|
14
|
-
this.nextAnimationFrameCbs =
|
|
15
|
-
for (let i = 0; i < cbs.length; i++) cbs[i] && cbs[i](time);
|
|
16
|
+
this.nextAnimationFrameCbs = new Map, cbs.forEach((cb => cb(time)));
|
|
16
17
|
}, this.tryRunAnimationFrameNextFrame = () => {
|
|
17
|
-
null === this._rafHandle && 0 !== this.nextAnimationFrameCbs.
|
|
18
|
+
null === this._rafHandle && 0 !== this.nextAnimationFrameCbs.size && (this._rafHandle = application_1.application.global.getRequestAnimationFrame()(this.runAnimationFrame));
|
|
18
19
|
};
|
|
19
20
|
}
|
|
20
21
|
addAnimationFrameCb(callback) {
|
|
21
|
-
return this.nextAnimationFrameCbs.
|
|
22
|
-
|
|
22
|
+
return this.nextAnimationFrameCbs.set(++idx, callback), this.tryRunAnimationFrameNextFrame(),
|
|
23
|
+
idx;
|
|
23
24
|
}
|
|
24
25
|
removeAnimationFrameCb(index) {
|
|
25
|
-
return
|
|
26
|
+
return !!this.nextAnimationFrameCbs.has(index) && (this.nextAnimationFrameCbs.delete(index),
|
|
26
27
|
!0);
|
|
27
28
|
}
|
|
28
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/performance-raf.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"sources":["../src/common/performance-raf.ts"],"names":[],"mappings":";;;AAAA,gDAA6C;AAE7C,IAAI,GAAG,GAAG,CAAC,CAAC;AAKZ,MAAa,cAAc;IAA3B;QACE,0BAAqB,GAAsC,IAAI,GAAG,EAAE,CAAC;QAC7D,eAAU,GAAkB,IAAI,CAAC;QAsB/B,sBAAiB,GAAG,CAAC,IAAY,EAAE,EAAE;YAC7C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC;YACvC,IAAI,CAAC,qBAAqB,GAAG,IAAI,GAAG,EAAE,CAAC;YACvC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEQ,kCAA6B,GAAG,GAAG,EAAE;YAC7C,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,EAAE;gBACrE,OAAO;aACR;YACD,IAAI,CAAC,UAAU,GAAG,yBAAW,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC1F,CAAC,CAAC;IACJ,CAAC;IAjCC,mBAAmB,CAAC,QAA8B;QAChD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAEhD,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,OAAO,GAAG,CAAC;IACb,CAAC;IAOD,sBAAsB,CAAC,KAAa;QAClC,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACzC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CAeF;AArCD,wCAqCC","file":"performance-raf.js","sourcesContent":["import { application } from '../application';\n\nlet idx = 0;\n\n/**\n * 性能优化,将requestAnimationFrame的回调函数存储起来,在下一帧执行\n */\nexport class PerformanceRAF {\n nextAnimationFrameCbs: Map<number, FrameRequestCallback> = new Map();\n private _rafHandle: number | null = null;\n\n addAnimationFrameCb(callback: FrameRequestCallback) {\n this.nextAnimationFrameCbs.set(++idx, callback);\n // 下一帧执行nextAnimationFrameCbs\n this.tryRunAnimationFrameNextFrame();\n return idx;\n }\n\n /**\n * 移除指定索引的回调函数\n * @param index raf索引,从1开始,相当于内部nextAnimationFrameCbs的idx + 1\n * @returns 是否移除成功\n */\n removeAnimationFrameCb(index: number): boolean {\n if (this.nextAnimationFrameCbs.has(index)) {\n this.nextAnimationFrameCbs.delete(index);\n return true;\n }\n return false;\n }\n\n protected runAnimationFrame = (time: number) => {\n this._rafHandle = null;\n const cbs = this.nextAnimationFrameCbs;\n this.nextAnimationFrameCbs = new Map();\n cbs.forEach(cb => cb(time));\n };\n\n protected tryRunAnimationFrameNextFrame = () => {\n if (this._rafHandle !== null || this.nextAnimationFrameCbs.size === 0) {\n return;\n }\n this._rafHandle = application.global.getRequestAnimationFrame()(this.runAnimationFrame);\n };\n}\n"]}
|