@visactor/vrender-core 0.20.0-alpha.0 → 0.20.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/allocator/matrix-allocate.d.ts +1 -1
- package/cjs/allocator/matrix-allocate.js +2 -4
- package/cjs/allocator/matrix-allocate.js.map +1 -1
- package/cjs/animate/animate.js +4 -2
- package/cjs/animate/animate.js.map +1 -1
- package/cjs/animate/custom-animate.d.ts +5 -16
- package/cjs/animate/custom-animate.js +9 -62
- package/cjs/animate/custom-animate.js.map +1 -1
- package/cjs/animate/group-fade.d.ts +16 -0
- package/cjs/animate/group-fade.js +66 -0
- package/cjs/animate/group-fade.js.map +1 -0
- package/cjs/animate/index.d.ts +1 -0
- package/cjs/animate/index.js +2 -1
- package/cjs/animate/index.js.map +1 -1
- package/cjs/canvas/util.d.ts +0 -1
- package/cjs/canvas/util.js +7 -17
- package/cjs/canvas/util.js.map +1 -1
- package/cjs/common/3d-interceptor.d.ts +3 -0
- package/cjs/common/3d-interceptor.js +51 -0
- package/cjs/common/3d-interceptor.js.map +1 -0
- package/cjs/common/bezier-utils.js +2 -1
- package/cjs/common/bounds-context.js +1 -2
- package/cjs/common/canvas-utils.d.ts +1 -1
- package/cjs/common/canvas-utils.js +15 -30
- package/cjs/common/canvas-utils.js.map +1 -1
- package/cjs/common/matrix.d.ts +11 -3
- package/cjs/common/matrix.js +97 -19
- package/cjs/common/matrix.js.map +1 -1
- package/cjs/common/morphing-utils.js +1 -1
- package/cjs/common/path-svg.js +1 -1
- package/cjs/common/polygon.js +2 -2
- package/cjs/common/rect-utils.js +1 -1
- package/cjs/common/render-area.js +1 -1
- package/cjs/common/render-command-list.js +1 -1
- package/cjs/common/render-curve.js +23 -33
- package/cjs/common/render-curve.js.map +1 -1
- package/cjs/common/render-utils.js +2 -1
- package/cjs/common/seg-context.js +1 -1
- package/cjs/common/simplify.js +1 -1
- package/cjs/common/sort.js +16 -13
- package/cjs/common/sort.js.map +1 -1
- package/cjs/common/split-path.js +1 -1
- package/cjs/common/store.js +1 -1
- package/cjs/common/text.d.ts +0 -2
- package/cjs/common/text.js +4 -11
- package/cjs/common/text.js.map +1 -1
- package/cjs/common/utils.js +1 -1
- package/cjs/common/utils.js.map +1 -1
- package/cjs/core/application.js +1 -2
- package/cjs/core/camera.js +4 -4
- package/cjs/core/camera.js.map +1 -1
- package/cjs/core/constants.js +1 -1
- package/cjs/core/core-modules.js +1 -1
- package/cjs/core/global-module.js +0 -2
- package/cjs/core/global.js +1 -1
- package/cjs/core/graphic-utils.js +1 -1
- package/cjs/core/index.js +1 -1
- package/cjs/core/layer-service.js +1 -1
- package/cjs/core/layer.js +1 -1
- package/cjs/core/light.js +1 -1
- package/cjs/core/stage.js +15 -9
- package/cjs/core/stage.js.map +1 -1
- package/cjs/core/window.js +1 -1
- package/cjs/graphic/builtin-symbol/utils.js +1 -5
- package/cjs/graphic/builtin-symbol/utils.js.map +1 -1
- package/cjs/graphic/config.js +1 -0
- package/cjs/graphic/config.js.map +1 -1
- package/cjs/graphic/graphic-service/graphic-service.d.ts +2 -8
- package/cjs/graphic/graphic-service/graphic-service.js +17 -107
- package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
- package/cjs/graphic/richtext/utils.js +12 -21
- package/cjs/graphic/richtext/utils.js.map +1 -1
- package/cjs/graphic/richtext.d.ts +1 -1
- package/cjs/graphic/richtext.js +2 -2
- package/cjs/graphic/richtext.js.map +1 -1
- package/cjs/graphic/text.js +1 -1
- package/cjs/graphic/text.js.map +1 -1
- package/cjs/index.d.ts +1 -0
- package/cjs/index.js +3 -3
- package/cjs/index.js.map +1 -1
- package/cjs/interface/graphic/group.d.ts +1 -1
- package/cjs/interface/graphic/group.js.map +1 -1
- package/cjs/interface/graphic/richText.d.ts +1 -0
- package/cjs/interface/graphic/richText.js.map +1 -1
- package/cjs/picker/pick-interceptor.d.ts +1 -1
- package/cjs/picker/pick-interceptor.js +2 -42
- package/cjs/picker/pick-interceptor.js.map +1 -1
- package/cjs/picker/picker-service.js +4 -5
- package/cjs/picker/picker-service.js.map +1 -1
- package/cjs/plugins/builtin-plugin/edit-module.d.ts +22 -0
- package/cjs/plugins/builtin-plugin/edit-module.js +94 -0
- package/cjs/plugins/builtin-plugin/edit-module.js.map +1 -0
- package/cjs/plugins/builtin-plugin/html-attribute-plugin.js +1 -1
- package/cjs/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/react-attribute-plugin.d.ts +2 -1
- package/cjs/plugins/builtin-plugin/react-attribute-plugin.js +15 -7
- package/cjs/plugins/builtin-plugin/react-attribute-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/richtext-edit-plugin.d.ts +76 -0
- package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js +338 -0
- package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -0
- package/cjs/render/contributions/render/arc-render.js +1 -4
- package/cjs/render/contributions/render/arc-render.js.map +1 -1
- package/cjs/render/contributions/render/area-render.js +1 -1
- package/cjs/render/contributions/render/area-render.js.map +1 -1
- package/cjs/render/contributions/render/base-3d-render.d.ts +10 -0
- package/cjs/render/contributions/render/base-3d-render.js +63 -0
- package/cjs/render/contributions/render/base-3d-render.js.map +1 -0
- package/cjs/render/contributions/render/base-render.js +5 -5
- package/cjs/render/contributions/render/base-render.js.map +1 -1
- package/cjs/render/contributions/render/draw-interceptor.js +7 -51
- package/cjs/render/contributions/render/draw-interceptor.js.map +1 -1
- package/cjs/render/contributions/render/group-render.js +4 -5
- package/cjs/render/contributions/render/group-render.js.map +1 -1
- package/cjs/render/contributions/render/pyramid3d-render.d.ts +3 -5
- package/cjs/render/contributions/render/pyramid3d-render.js +4 -54
- package/cjs/render/contributions/render/pyramid3d-render.js.map +1 -1
- package/cjs/render/contributions/render/rect3d-render.d.ts +3 -5
- package/cjs/render/contributions/render/rect3d-render.js +4 -53
- package/cjs/render/contributions/render/rect3d-render.js.map +1 -1
- package/cjs/render/contributions/render/symbol-render.js +9 -18
- package/cjs/render/contributions/render/symbol-render.js.map +1 -1
- package/cjs/render/contributions/render/utils.js +2 -5
- package/cjs/render/contributions/render/utils.js.map +1 -1
- package/dist/index.es.js +1288 -978
- package/es/allocator/matrix-allocate.d.ts +1 -1
- package/es/allocator/matrix-allocate.js +3 -3
- package/es/allocator/matrix-allocate.js.map +1 -1
- package/es/animate/animate.js +4 -2
- package/es/animate/animate.js.map +1 -1
- package/es/animate/custom-animate.d.ts +5 -16
- package/es/animate/custom-animate.js +9 -58
- package/es/animate/custom-animate.js.map +1 -1
- package/es/animate/group-fade.d.ts +16 -0
- package/es/animate/group-fade.js +56 -0
- package/es/animate/group-fade.js.map +1 -0
- package/es/animate/index.d.ts +1 -0
- package/es/animate/index.js +2 -0
- package/es/animate/index.js.map +1 -1
- package/es/canvas/util.d.ts +0 -1
- package/es/canvas/util.js +7 -17
- package/es/canvas/util.js.map +1 -1
- package/es/common/3d-interceptor.d.ts +3 -0
- package/es/common/3d-interceptor.js +47 -0
- package/es/common/3d-interceptor.js.map +1 -0
- package/es/common/bezier-utils.js +2 -1
- package/es/common/bounds-context.js +1 -2
- package/es/common/canvas-utils.d.ts +1 -1
- package/es/common/canvas-utils.js +15 -30
- package/es/common/canvas-utils.js.map +1 -1
- package/es/common/matrix.d.ts +11 -3
- package/es/common/matrix.js +90 -17
- package/es/common/matrix.js.map +1 -1
- package/es/common/morphing-utils.js +1 -1
- package/es/common/path-svg.js +1 -1
- package/es/common/polygon.js +1 -1
- package/es/common/rect-utils.js +1 -1
- package/es/common/render-area.js +1 -1
- package/es/common/render-command-list.js +1 -1
- package/es/common/render-curve.js +23 -33
- package/es/common/render-curve.js.map +1 -1
- package/es/common/render-utils.js +2 -1
- package/es/common/seg-context.js +1 -1
- package/es/common/simplify.js +1 -1
- package/es/common/sort.js +16 -13
- package/es/common/sort.js.map +1 -1
- package/es/common/split-path.js +1 -1
- package/es/common/store.js +1 -1
- package/es/common/text.d.ts +0 -2
- package/es/common/text.js +1 -7
- package/es/common/text.js.map +1 -1
- package/es/common/utils.js +1 -1
- package/es/common/utils.js.map +1 -1
- package/es/core/application.js +1 -2
- package/es/core/camera.js +6 -4
- package/es/core/camera.js.map +1 -1
- package/es/core/constants.js +1 -1
- package/es/core/core-modules.js +1 -1
- package/es/core/global-module.js +0 -2
- package/es/core/global.js +1 -1
- package/es/core/graphic-utils.js +1 -1
- package/es/core/index.js +1 -1
- package/es/core/layer-service.js +1 -1
- package/es/core/layer.js +1 -1
- package/es/core/light.js +1 -1
- package/es/core/stage.js +15 -9
- package/es/core/stage.js.map +1 -1
- package/es/core/window.js +1 -1
- package/es/graphic/builtin-symbol/utils.js +1 -4
- package/es/graphic/builtin-symbol/utils.js.map +1 -1
- package/es/graphic/config.js +1 -0
- package/es/graphic/config.js.map +1 -1
- package/es/graphic/graphic-service/graphic-service.d.ts +2 -8
- package/es/graphic/graphic-service/graphic-service.js +9 -97
- package/es/graphic/graphic-service/graphic-service.js.map +1 -1
- package/es/graphic/richtext/utils.js +9 -20
- package/es/graphic/richtext/utils.js.map +1 -1
- package/es/graphic/richtext.d.ts +1 -1
- package/es/graphic/richtext.js +2 -2
- package/es/graphic/richtext.js.map +1 -1
- package/es/graphic/text.js +2 -2
- package/es/graphic/text.js.map +1 -1
- package/es/index.d.ts +1 -0
- package/es/index.js +2 -0
- package/es/index.js.map +1 -1
- package/es/interface/graphic/group.d.ts +1 -1
- package/es/interface/graphic/group.js.map +1 -1
- package/es/interface/graphic/richText.d.ts +1 -0
- package/es/interface/graphic/richText.js.map +1 -1
- package/es/picker/pick-interceptor.d.ts +1 -1
- package/es/picker/pick-interceptor.js +4 -44
- package/es/picker/pick-interceptor.js.map +1 -1
- package/es/picker/picker-service.js +1 -1
- package/es/picker/picker-service.js.map +1 -1
- package/es/plugins/builtin-plugin/edit-module.d.ts +22 -0
- package/es/plugins/builtin-plugin/edit-module.js +86 -0
- package/es/plugins/builtin-plugin/edit-module.js.map +1 -0
- package/es/plugins/builtin-plugin/html-attribute-plugin.js +1 -1
- package/es/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/react-attribute-plugin.d.ts +2 -1
- package/es/plugins/builtin-plugin/react-attribute-plugin.js +15 -7
- package/es/plugins/builtin-plugin/react-attribute-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/richtext-edit-plugin.d.ts +76 -0
- package/es/plugins/builtin-plugin/richtext-edit-plugin.js +334 -0
- package/es/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -0
- package/es/render/contributions/render/arc-render.js +1 -4
- package/es/render/contributions/render/arc-render.js.map +1 -1
- package/es/render/contributions/render/area-render.js +1 -1
- package/es/render/contributions/render/area-render.js.map +1 -1
- package/es/render/contributions/render/base-3d-render.d.ts +10 -0
- package/es/render/contributions/render/base-3d-render.js +57 -0
- package/es/render/contributions/render/base-3d-render.js.map +1 -0
- package/es/render/contributions/render/base-render.js +3 -1
- package/es/render/contributions/render/base-render.js.map +1 -1
- package/es/render/contributions/render/draw-interceptor.js +7 -51
- package/es/render/contributions/render/draw-interceptor.js.map +1 -1
- package/es/render/contributions/render/group-render.js +3 -1
- package/es/render/contributions/render/group-render.js.map +1 -1
- package/es/render/contributions/render/pyramid3d-render.d.ts +3 -5
- package/es/render/contributions/render/pyramid3d-render.js +4 -56
- package/es/render/contributions/render/pyramid3d-render.js.map +1 -1
- package/es/render/contributions/render/rect3d-render.d.ts +3 -5
- package/es/render/contributions/render/rect3d-render.js +4 -55
- package/es/render/contributions/render/rect3d-render.js.map +1 -1
- package/es/render/contributions/render/symbol-render.js +9 -18
- package/es/render/contributions/render/symbol-render.js.map +1 -1
- package/es/render/contributions/render/utils.js +2 -5
- package/es/render/contributions/render/utils.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphic/graphic-service/graphic-service.ts"],"names":[],"mappings":"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G,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACnD,EAAE,GAAG,CAAC,CAAC;IACP,EAAE,GAAG,CAAC,CAAC;IACP,EAAE,GAAG,CAAC,CAAC;IACP,EAAE,GAAG,CAAC,CAAC;IACP,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACpD,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACpD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACT,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACT,EAAE,GAAG,CAAC,CAAC;IACP,EAAE,GAAG,CAAC,CAAC;IACP,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACpD,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACpD,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACpD,GAAG,CAAC,EAAE,CAAC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G,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACnD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACV,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACV,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACV,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACV,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACnD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACV,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACV,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACX,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,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","file":"graphic-service.js","sourcesContent":["import { inject, injectable } from '../../common/inversify-lite';\nimport type { IAABBBounds, IBounds, IMatrix } from '@visactor/vutils';\nimport { AABBBounds, epsilon, isArray, isNumber, pi2, transformBoundsWithMatrix } from '@visactor/vutils';\nimport { SyncHook } from '../../tapable';\nimport type {\n mat4,\n vec3,\n IArc,\n IArcGraphicAttribute,\n IArea,\n IAreaGraphicAttribute,\n IGraphicAttribute,\n ICircle,\n ICircleGraphicAttribute,\n IGraphic,\n IGroup,\n IGroupGraphicAttribute,\n ILine,\n ILineGraphicAttribute,\n IPath,\n IPathGraphicAttribute,\n IPolygon,\n IPolygonGraphicAttribute,\n IRectGraphicAttribute,\n IStage,\n ISymbol,\n ISymbolGraphicAttribute,\n IText,\n ITextGraphicAttribute,\n IGlyph,\n IGlyphGraphicAttribute,\n IRichTextGraphicAttribute,\n IRichText,\n IPyramid3dGraphicAttribute,\n IPyramid3d,\n IArc3dGraphicAttribute,\n IArc3d,\n IImageGraphicAttribute,\n ITransform,\n IGraphicService,\n IGraphicCreator,\n ISyncHook,\n IRectBoundsContribution,\n ISymbolBoundsContribution,\n ICircleBoundsContribution,\n IArcBoundsContribution,\n IPathBoundsContribution,\n IImageBoundsContribution\n} from '../../interface';\nimport { textDrawOffsetX, textLayoutOffsetY } from '../../common/text';\nimport { DefaultSymbolOuterBorderBoundsContribution } from './symbol-contribution';\nimport { boundStroke } from '../tools';\nimport { mat4Allocate } from '../../allocator/matrix-allocate';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { BoundsContext } from '../../common/bounds-context';\nimport { renderCommandList } from '../../common/render-command-list';\nimport { circleBounds } from '../../common/utils';\nimport { GraphicCreator } from '../constants';\nimport { DefaultOuterBorderBoundsContribution } from './common-contribution';\n\n/**\n * 部分代码参考 https://github.com/toji/gl-matrix\n * Copyright (c) 2015-2021, Brandon Jones, Colin MacKenzie IV.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n// 代码来自gl-matrix https://github.com/toji/gl-matrix\nfunction identity(out: mat4) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * 代码来自gl-matrix https://github.com/toji/gl-matrix\n * Rotates a matrix by the given angle around the X axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function rotateX(out: mat4, a: mat4, rad: number) {\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n // Perform axis-specific matrix multiplication\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n}\n\n/**\n * 代码来自gl-matrix https://github.com/toji/gl-matrix\n * Rotates a matrix by the given angle around the Y axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function rotateY(out: mat4, a: mat4, rad: number) {\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n}\n\n/**\n * 代码来自gl-matrix https://github.com/toji/gl-matrix\n * Rotates a matrix by the given angle around the Z axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nfunction rotateZ(out: mat4, a: mat4, rad: number) {\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n}\n\n// 代码来自gl-matrix https://github.com/toji/gl-matrix\nexport function translate(out: mat4, a: mat4, v: vec3) {\n const x = v[0];\n const y = v[1];\n const z = v[2];\n let a00;\n let a01;\n let a02;\n let a03;\n let a10;\n let a11;\n let a12;\n let a13;\n let a20;\n let a21;\n let a22;\n let a23;\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n return out;\n}\n\nexport function mat3Tomat4(out: mat4, b: IMatrix) {\n out[0] = b.a;\n out[1] = b.b;\n out[2] = 0;\n out[3] = 0;\n out[4] = b.c;\n out[5] = b.d;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = b.e;\n out[13] = b.f;\n out[14] = 0;\n out[15] = 1;\n}\n\n/**\n * 代码来自gl-matrix https://github.com/toji/gl-matrix\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function multiplyMat4Mat3(out: mat4, a: mat4, b: IMatrix) {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15]; // Cache only the current line of the second matrix\n\n let b0 = b.a;\n let b1 = b.b;\n let b2 = 0;\n let b3 = 0;\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b.c;\n b1 = b.d;\n b2 = 0;\n b3 = 0;\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = 0;\n b1 = 0;\n b2 = 1;\n b3 = 0;\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b.e;\n b1 = b.f;\n b2 = 0;\n b3 = 1;\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n\n/**\n * 代码来自gl-matrix https://github.com/toji/gl-matrix\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\nfunction scale(out: mat4, a: mat4, v: vec3) {\n const x = v[0];\n const y = v[1];\n const z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n\n/**\n * 代码来自gl-matrix https://github.com/toji/gl-matrix\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\nexport function multiplyMat4Mat4(out: mat4, a: mat4, b: mat4) {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15]; // Cache only the current line of the second matrix\n\n let b0 = b[0];\n let b1 = b[1];\n let b2 = b[2];\n let b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n\nexport function getExtraModelMatrix(dx: number, dy: number, graphic: IGraphic): mat4 | null {\n const { alpha, beta } = graphic.attribute;\n if (!alpha && !beta) {\n return null;\n }\n const { anchor3d = graphic.attribute.anchor } = graphic.attribute;\n\n const _anchor: [number, number] = [0, 0];\n if (anchor3d) {\n if (typeof anchor3d[0] === 'string') {\n const ratio = parseFloat(anchor3d[0]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[0] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[0] = anchor3d[0];\n }\n if (typeof anchor3d[1] === 'string') {\n const ratio = parseFloat(anchor3d[1]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[1] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[1] = anchor3d[1];\n }\n }\n\n if (graphic.type === 'text') {\n const { textAlign } = graphic.attribute as ITextGraphicAttribute;\n // 计算偏移\n _anchor[0] += textDrawOffsetX(textAlign, (graphic as IText).clipedWidth);\n }\n\n // 应用偏移,计算全局的偏移\n _anchor[0] += dx;\n _anchor[1] += dy;\n // matrix.scale(dpr, dpr);\n\n const modelMatrix = mat4Allocate.allocate();\n translate(modelMatrix, modelMatrix, [_anchor[0], _anchor[1], 0]);\n if (beta) {\n rotateX(modelMatrix, modelMatrix, beta);\n }\n if (alpha) {\n rotateY(modelMatrix, modelMatrix, alpha);\n }\n translate(modelMatrix, modelMatrix, [-_anchor[0], -_anchor[1], 0]);\n\n return modelMatrix;\n}\n\n// 计算3d下的模型矩阵\nexport function getModelMatrix(out: mat4, graphic: IGraphic, theme: ITransform) {\n const {\n x = theme.x,\n y = theme.y,\n z = theme.z,\n dx = theme.dx,\n dy = theme.dy,\n dz = theme.dz,\n scaleX = theme.scaleX,\n scaleY = theme.scaleY,\n scaleZ = theme.scaleZ,\n alpha = theme.alpha,\n beta = theme.beta,\n angle = theme.angle,\n anchor3d = graphic.attribute.anchor,\n anchor\n } = graphic.attribute;\n\n const _anchor: [number, number, number] = [0, 0, 0];\n if (anchor3d) {\n if (typeof anchor3d[0] === 'string') {\n const ratio = parseFloat(anchor3d[0]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[0] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[0] = anchor3d[0];\n }\n if (typeof anchor3d[1] === 'string') {\n const ratio = parseFloat(anchor3d[1]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[1] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[1] = anchor3d[1];\n }\n _anchor[2] = anchor3d[2] ?? 0;\n }\n\n // if (graphic.type === 'text') {\n // const { textAlign } = graphic.attribute as ITextGraphicAttribute;\n // // 计算偏移\n // _anchor[0] += textDrawOffsetX(textAlign, (graphic as IText).clipedWidth);\n // }\n\n identity(out);\n // 平移\n translate(out, out, [x + dx, y + dy, z + dz]);\n translate(out, out, [_anchor[0], _anchor[1], _anchor[2]]);\n rotateX(out, out, beta);\n rotateY(out, out, alpha);\n // 基于z轴的偏移基于anchor计算\n // rotateZ(out, out, angle);\n translate(out, out, [-_anchor[0], -_anchor[1], _anchor[2]]);\n scale(out, out, [scaleX, scaleY, scaleZ]);\n\n // 计算基于z轴的偏移\n if (angle) {\n const m = mat4Allocate.allocate();\n const _anchor: [number, number] = [0, 0];\n if (anchor) {\n if (typeof anchor3d[0] === 'string') {\n const ratio = parseFloat(anchor3d[0]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[0] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[0] = anchor3d[0];\n }\n if (typeof anchor3d[1] === 'string') {\n const ratio = parseFloat(anchor3d[1]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[1] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[1] = anchor3d[1];\n }\n }\n\n translate(m, m, [_anchor[0], _anchor[1], 0]);\n // 基于z轴的偏移基于anchor计算\n rotateZ(m, m, angle);\n translate(m, m, [-_anchor[0], -_anchor[1], 0]);\n\n multiplyMat4Mat4(out, out, m);\n }\n}\n\nexport function shouldUseMat4(graphic: IGraphic) {\n const { alpha, beta } = graphic.attribute;\n return alpha || beta;\n}\n\n// 管理graphic\n@injectable()\nexport class DefaultGraphicService implements IGraphicService {\n declare hooks: {\n onAttributeUpdate: ISyncHook<[IGraphic]>;\n onSetStage: ISyncHook<[IGraphic, IStage]>;\n onRemove: ISyncHook<[IGraphic]>;\n onRelease: ISyncHook<[IGraphic]>;\n onAddIncremental: ISyncHook<[IGraphic, IGroup, IStage]>;\n onClearIncremental: ISyncHook<[IGroup, IStage]>;\n beforeUpdateAABBBounds: ISyncHook<[IGraphic, IStage, boolean, IAABBBounds]>;\n afterUpdateAABBBounds: ISyncHook<[IGraphic, IStage, IAABBBounds, { globalAABBBounds: IAABBBounds }, boolean]>;\n };\n\n protected _rectBoundsContribitions: IRectBoundsContribution[];\n protected _symbolBoundsContribitions: ISymbolBoundsContribution[];\n protected _imageBoundsContribitions: IImageBoundsContribution[];\n protected _circleBoundsContribitions: ICircleBoundsContribution[];\n protected _arcBoundsContribitions: IArcBoundsContribution[];\n protected _pathBoundsContribitions: IPathBoundsContribution[];\n // 临时bounds,用作缓存\n protected tempAABBBounds1: AABBBounds;\n protected tempAABBBounds2: AABBBounds;\n constructor(@inject(GraphicCreator) public readonly creator: IGraphicCreator) {\n this.hooks = {\n onAttributeUpdate: new SyncHook<[IGraphic]>(['graphic']),\n onSetStage: new SyncHook<[IGraphic, IStage]>(['graphic', 'stage']),\n onRemove: new SyncHook<[IGraphic]>(['graphic']),\n onRelease: new SyncHook<[IGraphic]>(['graphic']),\n onAddIncremental: new SyncHook<[IGraphic, IGroup, IStage]>(['graphic', 'group', 'stage']),\n onClearIncremental: new SyncHook<[IGroup, IStage]>(['graphic', 'group', 'stage']),\n beforeUpdateAABBBounds: new SyncHook<[IGraphic, IStage, boolean, IAABBBounds]>([\n 'graphic',\n 'stage',\n 'willUpdate',\n 'aabbBounds'\n ]),\n afterUpdateAABBBounds: new SyncHook<[IGraphic, IStage, IAABBBounds, { globalAABBBounds: IAABBBounds }, boolean]>([\n 'graphic',\n 'stage',\n 'aabbBounds',\n 'globalAABBBounds',\n 'selfChange'\n ])\n };\n this.tempAABBBounds1 = new AABBBounds();\n this.tempAABBBounds2 = new AABBBounds();\n this._rectBoundsContribitions = [new DefaultOuterBorderBoundsContribution()];\n this._symbolBoundsContribitions = [new DefaultSymbolOuterBorderBoundsContribution()];\n this._imageBoundsContribitions = [new DefaultOuterBorderBoundsContribution()];\n this._circleBoundsContribitions = [new DefaultOuterBorderBoundsContribution()];\n this._arcBoundsContribitions = [new DefaultOuterBorderBoundsContribution()];\n this._pathBoundsContribitions = [new DefaultOuterBorderBoundsContribution()];\n }\n onAttributeUpdate(graphic: IGraphic) {\n if (this.hooks.onAttributeUpdate.taps.length) {\n this.hooks.onAttributeUpdate.call(graphic);\n }\n }\n onSetStage(graphic: IGraphic, stage: IStage): void {\n if (this.hooks.onSetStage.taps.length) {\n this.hooks.onSetStage.call(graphic, stage);\n }\n }\n onRemove(graphic: IGraphic<Partial<IGraphicAttribute>>): void {\n if (this.hooks.onRemove.taps.length) {\n this.hooks.onRemove.call(graphic);\n }\n }\n onRelease(graphic: IGraphic<Partial<IGraphicAttribute>>): void {\n if (this.hooks.onRelease.taps.length) {\n this.hooks.onRelease.call(graphic);\n }\n }\n onAddIncremental(graphic: IGraphic, group: IGroup, stage: IStage): void {\n if (this.hooks.onAddIncremental.taps.length) {\n this.hooks.onAddIncremental.call(graphic, group, stage);\n }\n }\n onClearIncremental(group: IGroup, stage: IStage): void {\n if (this.hooks.onClearIncremental.taps.length) {\n this.hooks.onClearIncremental.call(group, stage);\n }\n }\n beforeUpdateAABBBounds(graphic: IGraphic, stage: IStage, willUpdate: boolean, bounds: IAABBBounds) {\n if (this.hooks.beforeUpdateAABBBounds.taps.length) {\n this.hooks.beforeUpdateAABBBounds.call(graphic, stage, willUpdate, bounds);\n }\n }\n afterUpdateAABBBounds(\n graphic: IGraphic,\n stage: IStage,\n bounds: IAABBBounds,\n params: { globalAABBBounds: IAABBBounds },\n selfChange: boolean\n ) {\n if (this.hooks.afterUpdateAABBBounds.taps.length) {\n this.hooks.afterUpdateAABBBounds.call(graphic, stage, bounds, params, selfChange);\n }\n }\n\n updatePathProxyAABBBounds(aabbBounds: IAABBBounds, graphic?: IGraphic): boolean {\n const path = typeof graphic.pathProxy === 'function' ? graphic.pathProxy(graphic.attribute) : graphic.pathProxy;\n if (!path) {\n return false;\n }\n const boundsContext = new BoundsContext(aabbBounds);\n renderCommandList(path.commandList, boundsContext, 0, 0);\n return true;\n }\n\n updateRectAABBBounds(\n attribute: IRectGraphicAttribute,\n rectTheme: Required<IRectGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ) {\n if (!this._validCheck(attribute, rectTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n let { width, height } = attribute;\n const { x1, y1, x, y } = attribute;\n width = width ?? x1 - x;\n height = height ?? y1 - y;\n aabbBounds.set(0, 0, width || 0, height || 0);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._rectBoundsContribitions.length &&\n this._rectBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, rectTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n\n this.transformAABBBounds(attribute, aabbBounds, rectTheme, false, graphic);\n return aabbBounds;\n }\n\n updateGroupAABBBounds(\n attribute: IGroupGraphicAttribute,\n groupTheme: Required<IGroupGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGroup\n ) {\n const originalAABBBounds = aabbBounds; // fix aabbbounds update error in flex layout\n aabbBounds = aabbBounds.clone();\n\n const { width, height, path, clip = groupTheme.clip } = attribute;\n // 添加自身的fill或者clip\n if (path && path.length) {\n path.forEach(g => {\n aabbBounds.union(g.AABBBounds);\n });\n } else if (width != null && height != null) {\n aabbBounds.set(0, 0, Math.max(0, width), Math.max(0, height)); // fix bounds set when auto size in vtable\n }\n if (!clip) {\n // 添加子节点\n graphic.forEachChildren((node: IGraphic) => {\n aabbBounds.union(node.AABBBounds);\n });\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this.transformAABBBounds(attribute, aabbBounds, groupTheme, false, graphic);\n\n originalAABBBounds.copy(aabbBounds);\n return originalAABBBounds;\n }\n\n updateGlyphAABBBounds(\n attribute: IGlyphGraphicAttribute,\n theme: Required<IGlyphGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGlyph\n ) {\n if (!this._validCheck(attribute, theme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n // 添加子节点\n graphic.getSubGraphic().forEach((node: IGraphic) => {\n aabbBounds.union(node.AABBBounds);\n });\n\n // glyph不需要计算AABBBounds\n // this.transformAABBBounds(attribute, aabbBounds, theme, graphic);\n return aabbBounds;\n }\n\n updateHTMLTextAABBBounds(\n attribute: ITextGraphicAttribute,\n textTheme: Required<ITextGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IText\n ) {\n const { textAlign, textBaseline } = attribute;\n if (attribute.forceBoundsHeight != null) {\n const h = isNumber(attribute.forceBoundsHeight) ? attribute.forceBoundsHeight : attribute.forceBoundsHeight();\n const dy = textLayoutOffsetY(textBaseline, h, h);\n aabbBounds.set(aabbBounds.x1, dy, aabbBounds.x2, dy + h);\n }\n if (attribute.forceBoundsWidth != null) {\n const w = isNumber(attribute.forceBoundsWidth) ? attribute.forceBoundsWidth : attribute.forceBoundsWidth();\n const dx = textDrawOffsetX(textAlign, w);\n aabbBounds.set(dx, aabbBounds.y1, dx + w, aabbBounds.y2);\n }\n }\n\n updateRichTextAABBBounds(\n attribute: IRichTextGraphicAttribute,\n richtextTheme: Required<IRichTextGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IRichText\n ) {\n if (!this._validCheck(attribute, richtextTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!graphic) {\n return aabbBounds;\n }\n\n const {\n width = richtextTheme.width,\n height = richtextTheme.height,\n maxWidth = richtextTheme.maxWidth,\n maxHeight = richtextTheme.maxHeight,\n textAlign = richtextTheme.textAlign,\n textBaseline = richtextTheme.textBaseline\n } = attribute;\n\n if (width > 0 && height > 0) {\n // 外部设置宽高\n aabbBounds.set(0, 0, width, height);\n } else {\n // 获取内容宽高\n const frameCache = graphic.getFrameCache();\n const { width: actualWidth, height: actualHeight } = frameCache.getActualSize();\n let contentWidth = width || actualWidth || 0;\n let contentHeight = height || actualHeight || 0;\n\n contentHeight = typeof maxHeight === 'number' && contentHeight > maxHeight ? maxHeight : contentHeight || 0;\n contentWidth = typeof maxWidth === 'number' && contentWidth > maxWidth ? maxWidth : contentWidth || 0;\n\n aabbBounds.set(0, 0, contentWidth, contentHeight);\n }\n\n // 调整对齐方式\n let deltaY = 0;\n switch (textBaseline) {\n case 'top':\n deltaY = 0;\n break;\n case 'middle':\n deltaY = -aabbBounds.height() / 2;\n break;\n case 'bottom':\n deltaY = -aabbBounds.height();\n break;\n default:\n break;\n }\n let deltaX = 0;\n switch (textAlign) {\n case 'left':\n deltaX = 0;\n break;\n case 'center':\n deltaX = -aabbBounds.width() / 2;\n break;\n case 'right':\n deltaX = -aabbBounds.width();\n break;\n default:\n break;\n }\n aabbBounds.translate(deltaX, deltaY);\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n\n if (attribute.forceBoundsHeight != null || attribute.forceBoundsWidth != null) {\n this.updateHTMLTextAABBBounds(attribute, richtextTheme, aabbBounds);\n }\n this.transformAABBBounds(attribute, aabbBounds, richtextTheme, false, graphic);\n return aabbBounds;\n }\n\n updateTextAABBBounds(\n attribute: ITextGraphicAttribute,\n textTheme: Required<ITextGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IText\n ) {\n if (!this._validCheck(attribute, textTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!graphic) {\n return aabbBounds;\n }\n const { text = textTheme.text } = graphic.attribute;\n if (Array.isArray(text)) {\n graphic.updateMultilineAABBBounds(text as (number | string)[]);\n } else {\n graphic.updateSingallineAABBBounds(text as number | string);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n\n const {\n scaleX = textTheme.scaleX,\n scaleY = textTheme.scaleY,\n shadowBlur = textTheme.shadowBlur,\n strokeBoundsBuffer = textTheme.strokeBoundsBuffer\n } = attribute;\n if (shadowBlur) {\n const shadowBlurHalfWidth = shadowBlur / Math.abs(scaleX + scaleY);\n boundStroke(tb1, shadowBlurHalfWidth, true, strokeBoundsBuffer);\n aabbBounds.union(tb1);\n }\n // 合并shadowRoot的bounds\n this.combindShadowAABBBounds(aabbBounds, graphic);\n\n if (attribute.forceBoundsHeight != null || attribute.forceBoundsWidth != null) {\n this.updateHTMLTextAABBBounds(attribute, textTheme, aabbBounds);\n }\n\n transformBoundsWithMatrix(aabbBounds, aabbBounds, graphic.transMatrix);\n return aabbBounds;\n }\n\n updatePathAABBBounds(\n attribute: IPathGraphicAttribute,\n pathTheme: Required<IPathGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IPath\n ) {\n if (!this._validCheck(attribute, pathTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n this.updatePathAABBBoundsImprecise(attribute, pathTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._pathBoundsContribitions.length &&\n this._pathBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, pathTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n const { lineJoin = pathTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, pathTheme, lineJoin === 'miter', graphic);\n return aabbBounds;\n }\n\n protected updatePathAABBBoundsImprecise(\n attribute: IPathGraphicAttribute,\n pathTheme: Required<IPathGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IPath\n ): IAABBBounds {\n if (!graphic) {\n return aabbBounds;\n }\n const pathShape = graphic.getParsedPathShape();\n aabbBounds.union(pathShape.getBounds());\n\n return aabbBounds;\n }\n\n updatePyramid3dAABBBounds(\n attribute: IPyramid3dGraphicAttribute,\n polygonTheme: Required<IPyramid3dGraphicAttribute>,\n aabbBounds: IBounds,\n graphic?: IPyramid3d\n ) {\n if (!graphic) {\n return aabbBounds;\n }\n\n const stage = graphic.stage;\n if (!stage || !stage.camera) {\n return aabbBounds;\n }\n\n const faces = graphic.findFace();\n // const outP = [0, 0, 0];\n faces.vertices.forEach(v => {\n const x = v[0];\n const y = v[1];\n aabbBounds.add(x, y);\n });\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n\n this.transformAABBBounds(attribute, aabbBounds, polygonTheme, false, graphic);\n return aabbBounds;\n }\n\n updateArc3dAABBBounds(\n attribute: IArc3dGraphicAttribute,\n arcTheme: Required<IArc3dGraphicAttribute>,\n aabbBounds: IBounds,\n graphic?: IArc3d\n ) {\n if (!graphic) {\n return aabbBounds;\n }\n\n const stage = graphic.stage;\n if (!stage || !stage.camera) {\n return aabbBounds;\n }\n\n // 当做一个立方体计算\n const { outerRadius = arcTheme.outerRadius, height = 0 } = attribute;\n const r = outerRadius + height;\n aabbBounds.setValue(-r, -r, r, r);\n // const matrix = getExtraModelMatrix(graphic.globalTransMatrix, 1, graphic);\n // const { outerRadius=arcTheme.outerRadius, height=0 } = attribute;\n // const points = [\n // {x: -outerRadius, y: -outerRadius, z: 0 },\n // {x: outerRadius, y: -outerRadius, z: 0 },\n // {x: outerRadius, y: outerRadius, z: 0 },\n // {x: -outerRadius, y: outerRadius, z: 0 },\n // {x: -outerRadius, y: -outerRadius, z: height },\n // {x: outerRadius, y: -outerRadius, z: height },\n // {x: outerRadius, y: outerRadius, z: height },\n // {x: -outerRadius, y: outerRadius, z: height },\n // ]\n // const outP: vec3 = [0, 0, 0];\n // points.forEach(item => {\n // let x = item.x;\n // let y = item.y;\n // if (stage.camera) {\n // transformMat4(outP, [item.x, item.y, item.z], matrix);\n // const data = stage.camera.vp(outP[0], outP[1], outP[2]);\n // x = data.x;\n // y = data.y;\n // }\n // aabbBounds.add(x, y);\n // });\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n\n this.transformAABBBounds(attribute, aabbBounds, arcTheme, false, graphic);\n return aabbBounds;\n }\n\n updatePolygonAABBBounds(\n attribute: IPolygonGraphicAttribute,\n polygonTheme: Required<IPolygonGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IPolygon\n ) {\n if (!this._validCheck(attribute, polygonTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n this.updatePolygonAABBBoundsImprecise(attribute, polygonTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n // if (!this._pathBoundsContribitions) {\n // this._pathBoundsContribitions = this.pathBoundsContribitions.getContributions() || [];\n // }\n // this._pathBoundsContribitions.length &&\n // this._pathBoundsContribitions.forEach(c => {\n // c.updateBounds(attribute, polygonTheme, tb1, graphic);\n // aabbBounds.union(tb1);\n // tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n // });\n\n const { lineJoin = polygonTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, polygonTheme, lineJoin === 'miter', graphic);\n return aabbBounds;\n }\n\n protected updatePolygonAABBBoundsImprecise(\n attribute: IPolygonGraphicAttribute,\n polygonTheme: Required<IPolygonGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IPolygon\n ): IAABBBounds {\n const { points = polygonTheme.points } = attribute;\n points.forEach(p => {\n aabbBounds.add(p.x, p.y);\n });\n\n return aabbBounds;\n }\n\n updateLineAABBBounds(\n attribute: ILineGraphicAttribute,\n lineTheme: Required<ILineGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: ILine\n ) {\n if (!this._validCheck(attribute, lineTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n attribute.segments\n ? this.updateLineAABBBoundsBySegments(attribute, lineTheme, aabbBounds, graphic)\n : this.updateLineAABBBoundsByPoints(attribute, lineTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n // if (!this._rectBoundsContribitions) {\n // this._rectBoundsContribitions = this.rectBoundsContribitions.getContributions() || [];\n // }\n // this._rectBoundsContribitions.length &&\n // this._rectBoundsContribitions.forEach(c => {\n // c.updateBounds(attribute, areaTheme, tb1, graphic);\n // aabbBounds.union(tb1);\n // tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n // });\n\n const { lineJoin = lineTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, lineTheme, lineJoin === 'miter', graphic);\n return aabbBounds;\n }\n\n protected updateLineAABBBoundsByPoints(\n attribute: ILineGraphicAttribute,\n lineTheme: Required<ILineGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: ILine\n ): IAABBBounds {\n const { points = lineTheme.points } = attribute;\n const b = aabbBounds;\n points.forEach(p => {\n b.add(p.x, p.y);\n });\n return b;\n }\n protected updateLineAABBBoundsBySegments(\n attribute: ILineGraphicAttribute,\n lineTheme: Required<ILineGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: ILine\n ): IAABBBounds {\n const { segments = lineTheme.segments } = attribute;\n const b = aabbBounds;\n segments.forEach(s => {\n s.points.forEach(p => {\n b.add(p.x, p.y);\n });\n });\n return b;\n }\n\n updateAreaAABBBounds(\n attribute: IAreaGraphicAttribute,\n areaTheme: Required<IAreaGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IArea\n ) {\n if (!this._validCheck(attribute, areaTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n attribute.segments\n ? this.updateAreaAABBBoundsBySegments(attribute, areaTheme, aabbBounds, graphic)\n : this.updateAreaAABBBoundsByPoints(attribute, areaTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n // if (!this._rectBoundsContribitions) {\n // this._rectBoundsContribitions = this.rectBoundsContribitions.getContributions() || [];\n // }\n // this._rectBoundsContribitions.length &&\n // this._rectBoundsContribitions.forEach(c => {\n // c.updateBounds(attribute, areaTheme, tb1, graphic);\n // aabbBounds.union(tb1);\n // tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n // });\n\n const { lineJoin = areaTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, areaTheme, lineJoin === 'miter', graphic);\n return aabbBounds;\n }\n\n protected updateAreaAABBBoundsByPoints(\n attribute: IAreaGraphicAttribute,\n areaTheme: Required<IAreaGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IArea\n ): IAABBBounds {\n const { points = areaTheme.points } = attribute;\n const b = aabbBounds;\n points.forEach(p => {\n b.add(p.x, p.y);\n b.add(p.x1 ?? p.x, p.y1 ?? p.y); //面积图特殊性:由三个值构成,横向面积图,x1会省略;纵向面积图,y1会省略\n });\n return b;\n }\n protected updateAreaAABBBoundsBySegments(\n attribute: IAreaGraphicAttribute,\n areaTheme: Required<IAreaGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IArea\n ): IAABBBounds {\n const { segments = areaTheme.segments } = attribute;\n const b = aabbBounds;\n segments.forEach(s => {\n s.points.forEach(p => {\n b.add(p.x, p.y);\n b.add(p.x1 ?? p.x, p.y1 ?? p.y); //面积图特殊性:由三个值构成,横向面积图,x1会省略;纵向面积图,y1会省略\n });\n });\n return b;\n }\n\n updateCircleAABBBounds(\n attribute: ICircleGraphicAttribute,\n circleTheme: Required<ICircleGraphicAttribute>,\n aabbBounds: IAABBBounds,\n full?: boolean,\n graphic?: ICircle\n ) {\n if (!this._validCheck(attribute, circleTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n full\n ? this.updateCircleAABBBoundsImprecise(attribute, circleTheme, aabbBounds, graphic)\n : this.updateCircleAABBBoundsAccurate(attribute, circleTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._circleBoundsContribitions.length &&\n this._circleBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, circleTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n\n this.transformAABBBounds(attribute, aabbBounds, circleTheme, false, graphic);\n\n return aabbBounds;\n }\n\n protected updateCircleAABBBoundsImprecise(\n attribute: ICircleGraphicAttribute,\n circleTheme: Required<ICircleGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n const { radius = circleTheme.radius } = attribute;\n aabbBounds.set(-radius, -radius, radius, radius);\n\n return aabbBounds;\n }\n protected updateCircleAABBBoundsAccurate(\n attribute: ICircleGraphicAttribute,\n circleTheme: Required<ICircleGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n const {\n startAngle = circleTheme.startAngle,\n endAngle = circleTheme.endAngle,\n radius = circleTheme.radius\n } = attribute;\n\n if (endAngle - startAngle > pi2 - epsilon) {\n aabbBounds.set(-radius, -radius, radius, radius);\n } else {\n circleBounds(startAngle, endAngle, radius, aabbBounds);\n }\n\n return aabbBounds;\n }\n\n updateArcAABBBounds(\n attribute: IArcGraphicAttribute,\n arcTheme: Required<IArcGraphicAttribute>,\n aabbBounds: IAABBBounds,\n full?: boolean,\n graphic?: IArc\n ) {\n if (!this._validCheck(attribute, arcTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n full\n ? this.updateArcAABBBoundsImprecise(attribute, arcTheme, aabbBounds, graphic)\n : this.updateArcAABBBoundsAccurate(attribute, arcTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._arcBoundsContribitions.length &&\n this._arcBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, arcTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n\n const { lineJoin = arcTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, arcTheme, lineJoin === 'miter', graphic);\n\n return aabbBounds;\n }\n\n protected updateArcAABBBoundsImprecise(\n attribute: IArcGraphicAttribute,\n arcTheme: Required<IArcGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n let { outerRadius = arcTheme.outerRadius, innerRadius = arcTheme.innerRadius } = attribute;\n const { outerPadding = arcTheme.outerPadding, innerPadding = arcTheme.innerPadding } = attribute;\n outerRadius += outerPadding;\n innerRadius -= innerPadding;\n if (outerRadius < innerRadius) {\n outerRadius = innerRadius;\n }\n\n aabbBounds.set(-outerRadius, -outerRadius, outerRadius, outerRadius);\n\n return aabbBounds;\n }\n protected updateArcAABBBoundsAccurate(\n attribute: IArcGraphicAttribute,\n arcTheme: Required<IArcGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n let { outerRadius = arcTheme.outerRadius, innerRadius = arcTheme.innerRadius } = attribute;\n const { outerPadding = arcTheme.outerPadding, innerPadding = arcTheme.innerPadding } = attribute;\n outerRadius += outerPadding;\n innerRadius -= innerPadding;\n if (outerRadius < innerRadius) {\n // 不用解构,避免性能问题\n const temp = outerRadius;\n outerRadius = innerRadius;\n innerRadius = temp;\n }\n let { endAngle = arcTheme.endAngle, startAngle = arcTheme.startAngle } = attribute;\n\n if (startAngle > endAngle) {\n const temp = startAngle;\n startAngle = endAngle;\n endAngle = temp;\n }\n\n if (outerRadius <= epsilon) {\n aabbBounds.set(0, 0, 0, 0);\n } else if (Math.abs(endAngle - startAngle) > pi2 - epsilon) {\n aabbBounds.set(-outerRadius, -outerRadius, outerRadius, outerRadius);\n } else {\n // 直接内外两个radius叠加即可,不需要更精确\n circleBounds(startAngle, endAngle, outerRadius, aabbBounds);\n circleBounds(startAngle, endAngle, innerRadius, aabbBounds);\n }\n\n return aabbBounds;\n }\n\n updateSymbolAABBBounds(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required<ISymbolGraphicAttribute>,\n aabbBounds: IAABBBounds,\n full?: boolean,\n graphic?: ISymbol\n ) {\n if (!this._validCheck(attribute, symbolTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n full\n ? this.updateSymbolAABBBoundsImprecise(attribute, symbolTheme, aabbBounds, graphic)\n : this.updateSymbolAABBBoundsAccurate(attribute, symbolTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._symbolBoundsContribitions.length &&\n this._symbolBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, symbolTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n\n const { lineJoin = symbolTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, symbolTheme, lineJoin === 'miter', graphic);\n return aabbBounds;\n }\n\n protected updateSymbolAABBBoundsImprecise(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required<ISymbolGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n // 当做正方形计算\n const { size = symbolTheme.size } = attribute;\n\n if (isArray(size)) {\n aabbBounds.set(-size[0] / 2, -size[1] / 2, size[0] / 2, size[1] / 2);\n } else {\n const halfWH = size / 2;\n\n aabbBounds.set(-halfWH, -halfWH, halfWH, halfWH);\n }\n\n return aabbBounds;\n }\n\n protected updateSymbolAABBBoundsAccurate(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required<ISymbolGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: ISymbol\n ): IAABBBounds {\n if (!graphic) {\n return aabbBounds;\n }\n const { size = symbolTheme.size } = attribute;\n\n const symbolClass = graphic.getParsedPath();\n symbolClass.bounds(size, aabbBounds);\n\n return aabbBounds;\n }\n\n updateImageAABBBounds(\n attribute: IImageGraphicAttribute,\n imageTheme: Required<IImageGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ) {\n if (!this._validCheck(attribute, imageTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n const { width = imageTheme.width, height = imageTheme.height } = attribute;\n aabbBounds.set(0, 0, width, height);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._imageBoundsContribitions.length &&\n this._imageBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, imageTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n\n this.transformAABBBounds(attribute, aabbBounds, imageTheme, false, graphic);\n return aabbBounds;\n }\n\n combindShadowAABBBounds(bounds: IAABBBounds, graphic?: IGraphic) {\n // 合并shadowRoot的Bounds\n if (graphic && graphic.shadowRoot) {\n const b = graphic.shadowRoot.AABBBounds;\n bounds.union(b);\n }\n }\n\n transformAABBBounds(\n attribute: Partial<IGraphicAttribute>,\n aabbBounds: IAABBBounds,\n theme: Required<IGraphicAttribute>,\n miter: boolean,\n graphic?: IGraphic\n ) {\n if (!aabbBounds.empty()) {\n const {\n scaleX = theme.scaleX,\n scaleY = theme.scaleY,\n stroke = theme.stroke,\n shadowBlur = theme.shadowBlur,\n lineWidth = theme.lineWidth,\n pickStrokeBuffer = theme.pickStrokeBuffer,\n strokeBoundsBuffer = theme.strokeBoundsBuffer\n } = attribute;\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n if (stroke && lineWidth) {\n const scaledHalfLineWidth = (lineWidth + pickStrokeBuffer) / Math.abs(scaleX + scaleY);\n boundStroke(tb1, scaledHalfLineWidth, miter, strokeBoundsBuffer);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n }\n if (shadowBlur) {\n const { shadowOffsetX = theme.shadowOffsetX, shadowOffsetY = theme.shadowOffsetY } = attribute;\n const shadowBlurWidth = (shadowBlur / Math.abs(scaleX + scaleY)) * 2;\n boundStroke(tb1, shadowBlurWidth, false, strokeBoundsBuffer + 1);\n tb1.translate(shadowOffsetX, shadowOffsetY);\n aabbBounds.union(tb1);\n // tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n }\n }\n\n // 合并shadowRoot的bounds\n this.combindShadowAABBBounds(aabbBounds, graphic);\n if (aabbBounds.empty()) {\n return;\n }\n\n // 性能优化逻辑,group类型变换较少,不需要矩阵变换\n let updateMatrix = true;\n const m = graphic.transMatrix;\n if (graphic && graphic.isContainer) {\n updateMatrix = !(m.a === 1 && m.b === 0 && m.c === 0 && m.d === 1 && m.e === 0 && m.f === 0);\n }\n updateMatrix && transformBoundsWithMatrix(aabbBounds, aabbBounds, m);\n\n // TODO 加上锚点\n // transformBounds(aabbBounds, x, y, scaleX, scaleY, angle);\n // if (graphic.attribute.postMatrix) {\n // console.log('aaa');\n // transformBoundsWithMatrix(aabbBounds, graphic.attribute.postMatrix);\n // }\n // aabbBounds.translate(dx, dy);\n }\n\n protected _validCheck(\n attribute: Partial<IGraphicAttribute>,\n theme: Required<IGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): boolean {\n if (!graphic) {\n return true;\n }\n // 设置了强制wh,那就直接认为是合法的\n if (attribute.forceBoundsHeight != null || attribute.forceBoundsWidth != null) {\n return true;\n }\n if (!graphic.valid) {\n aabbBounds.clear();\n return false;\n }\n const { visible = theme.visible } = attribute;\n if (!visible) {\n aabbBounds.clear();\n return false;\n }\n return true;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/graphic/graphic-service/graphic-service.ts"],"names":[],"mappings":"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","file":"graphic-service.js","sourcesContent":["import { inject, injectable } from '../../common/inversify-lite';\nimport type { IAABBBounds, IBounds } from '@visactor/vutils';\nimport { AABBBounds, epsilon, isArray, isNumber, pi2, transformBoundsWithMatrix } from '@visactor/vutils';\nimport { SyncHook } from '../../tapable';\nimport type {\n mat4,\n IArc,\n IArcGraphicAttribute,\n IArea,\n IAreaGraphicAttribute,\n IGraphicAttribute,\n ICircle,\n ICircleGraphicAttribute,\n IGraphic,\n IGroup,\n IGroupGraphicAttribute,\n ILine,\n ILineGraphicAttribute,\n IPath,\n IPathGraphicAttribute,\n IPolygon,\n IPolygonGraphicAttribute,\n IRectGraphicAttribute,\n IStage,\n ISymbol,\n ISymbolGraphicAttribute,\n IText,\n ITextGraphicAttribute,\n IGlyph,\n IGlyphGraphicAttribute,\n IRichTextGraphicAttribute,\n IRichText,\n IPyramid3dGraphicAttribute,\n IPyramid3d,\n IArc3dGraphicAttribute,\n IArc3d,\n IImageGraphicAttribute,\n ITransform,\n IGraphicService,\n IGraphicCreator,\n ISyncHook,\n IRectBoundsContribution,\n ISymbolBoundsContribution,\n ICircleBoundsContribution,\n IArcBoundsContribution,\n IPathBoundsContribution,\n IImageBoundsContribution\n} from '../../interface';\nimport { textDrawOffsetX, textLayoutOffsetY } from '../../common/text';\nimport { DefaultSymbolOuterBorderBoundsContribution } from './symbol-contribution';\nimport { boundStroke } from '../tools';\nimport { mat4Allocate } from '../../allocator/matrix-allocate';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { BoundsContext } from '../../common/bounds-context';\nimport { renderCommandList } from '../../common/render-command-list';\nimport { circleBounds } from '../../common/utils';\nimport { GraphicCreator } from '../constants';\nimport { DefaultOuterBorderBoundsContribution } from './common-contribution';\nimport { identityMat4, multiplyMat4Mat4, rotateX, rotateY, rotateZ, scaleMat4, translate } from '../../common/matrix';\n\nexport function getExtraModelMatrix(dx: number, dy: number, graphic: IGraphic): mat4 | null {\n const { alpha, beta } = graphic.attribute;\n if (!alpha && !beta) {\n return null;\n }\n const { anchor3d = graphic.attribute.anchor } = graphic.attribute;\n\n const _anchor: [number, number] = [0, 0];\n if (anchor3d) {\n if (typeof anchor3d[0] === 'string') {\n const ratio = parseFloat(anchor3d[0]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[0] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[0] = anchor3d[0];\n }\n if (typeof anchor3d[1] === 'string') {\n const ratio = parseFloat(anchor3d[1]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[1] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[1] = anchor3d[1];\n }\n }\n\n if (graphic.type === 'text') {\n const { textAlign } = graphic.attribute as ITextGraphicAttribute;\n // 计算偏移\n _anchor[0] += textDrawOffsetX(textAlign, (graphic as IText).clipedWidth);\n }\n\n // 应用偏移,计算全局的偏移\n _anchor[0] += dx;\n _anchor[1] += dy;\n // matrix.scale(dpr, dpr);\n\n const modelMatrix = mat4Allocate.allocate();\n translate(modelMatrix, modelMatrix, [_anchor[0], _anchor[1], 0]);\n if (beta) {\n rotateX(modelMatrix, modelMatrix, beta);\n }\n if (alpha) {\n rotateY(modelMatrix, modelMatrix, alpha);\n }\n translate(modelMatrix, modelMatrix, [-_anchor[0], -_anchor[1], 0]);\n\n return modelMatrix;\n}\n\n// 计算3d下的模型矩阵\nexport function getModelMatrix(out: mat4, graphic: IGraphic, theme: ITransform) {\n const {\n x = theme.x,\n y = theme.y,\n z = theme.z,\n dx = theme.dx,\n dy = theme.dy,\n dz = theme.dz,\n scaleX = theme.scaleX,\n scaleY = theme.scaleY,\n scaleZ = theme.scaleZ,\n alpha = theme.alpha,\n beta = theme.beta,\n angle = theme.angle,\n anchor3d = graphic.attribute.anchor,\n anchor\n } = graphic.attribute;\n\n const _anchor: [number, number, number] = [0, 0, 0];\n if (anchor3d) {\n if (typeof anchor3d[0] === 'string') {\n const ratio = parseFloat(anchor3d[0]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[0] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[0] = anchor3d[0];\n }\n if (typeof anchor3d[1] === 'string') {\n const ratio = parseFloat(anchor3d[1]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[1] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[1] = anchor3d[1];\n }\n _anchor[2] = anchor3d[2] ?? 0;\n }\n\n // if (graphic.type === 'text') {\n // const { textAlign } = graphic.attribute as ITextGraphicAttribute;\n // // 计算偏移\n // _anchor[0] += textDrawOffsetX(textAlign, (graphic as IText).clipedWidth);\n // }\n\n identityMat4(out);\n // 平移\n translate(out, out, [x + dx, y + dy, z + dz]);\n translate(out, out, [_anchor[0], _anchor[1], _anchor[2]]);\n rotateX(out, out, beta);\n rotateY(out, out, alpha);\n // 基于z轴的偏移基于anchor计算\n // rotateZ(out, out, angle);\n translate(out, out, [-_anchor[0], -_anchor[1], _anchor[2]]);\n scaleMat4(out, out, [scaleX, scaleY, scaleZ]);\n\n // 计算基于z轴的偏移\n if (angle) {\n const m = mat4Allocate.allocate();\n const _anchor: [number, number] = [0, 0];\n if (anchor) {\n if (typeof anchor3d[0] === 'string') {\n const ratio = parseFloat(anchor3d[0]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[0] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[0] = anchor3d[0];\n }\n if (typeof anchor3d[1] === 'string') {\n const ratio = parseFloat(anchor3d[1]) / 100;\n const bounds = graphic.AABBBounds;\n _anchor[1] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[1] = anchor3d[1];\n }\n }\n\n translate(m, m, [_anchor[0], _anchor[1], 0]);\n // 基于z轴的偏移基于anchor计算\n rotateZ(m, m, angle);\n translate(m, m, [-_anchor[0], -_anchor[1], 0]);\n\n multiplyMat4Mat4(out, out, m);\n }\n}\n\nexport function shouldUseMat4(graphic: IGraphic) {\n const { alpha, beta } = graphic.attribute;\n return alpha || beta;\n}\n\n// 管理graphic\n@injectable()\nexport class DefaultGraphicService implements IGraphicService {\n declare hooks: {\n onAttributeUpdate: ISyncHook<[IGraphic]>;\n onSetStage: ISyncHook<[IGraphic, IStage]>;\n onRemove: ISyncHook<[IGraphic]>;\n onRelease: ISyncHook<[IGraphic]>;\n onAddIncremental: ISyncHook<[IGraphic, IGroup, IStage]>;\n onClearIncremental: ISyncHook<[IGroup, IStage]>;\n beforeUpdateAABBBounds: ISyncHook<[IGraphic, IStage, boolean, IAABBBounds]>;\n afterUpdateAABBBounds: ISyncHook<[IGraphic, IStage, IAABBBounds, { globalAABBBounds: IAABBBounds }, boolean]>;\n };\n\n protected _rectBoundsContribitions: IRectBoundsContribution[];\n protected _symbolBoundsContribitions: ISymbolBoundsContribution[];\n protected _imageBoundsContribitions: IImageBoundsContribution[];\n protected _circleBoundsContribitions: ICircleBoundsContribution[];\n protected _arcBoundsContribitions: IArcBoundsContribution[];\n protected _pathBoundsContribitions: IPathBoundsContribution[];\n // 临时bounds,用作缓存\n protected tempAABBBounds1: AABBBounds;\n protected tempAABBBounds2: AABBBounds;\n constructor(@inject(GraphicCreator) public readonly creator: IGraphicCreator) {\n this.hooks = {\n onAttributeUpdate: new SyncHook<[IGraphic]>(['graphic']),\n onSetStage: new SyncHook<[IGraphic, IStage]>(['graphic', 'stage']),\n onRemove: new SyncHook<[IGraphic]>(['graphic']),\n onRelease: new SyncHook<[IGraphic]>(['graphic']),\n onAddIncremental: new SyncHook<[IGraphic, IGroup, IStage]>(['graphic', 'group', 'stage']),\n onClearIncremental: new SyncHook<[IGroup, IStage]>(['graphic', 'group', 'stage']),\n beforeUpdateAABBBounds: new SyncHook<[IGraphic, IStage, boolean, IAABBBounds]>([\n 'graphic',\n 'stage',\n 'willUpdate',\n 'aabbBounds'\n ]),\n afterUpdateAABBBounds: new SyncHook<[IGraphic, IStage, IAABBBounds, { globalAABBBounds: IAABBBounds }, boolean]>([\n 'graphic',\n 'stage',\n 'aabbBounds',\n 'globalAABBBounds',\n 'selfChange'\n ])\n };\n this.tempAABBBounds1 = new AABBBounds();\n this.tempAABBBounds2 = new AABBBounds();\n this._rectBoundsContribitions = [new DefaultOuterBorderBoundsContribution()];\n this._symbolBoundsContribitions = [new DefaultSymbolOuterBorderBoundsContribution()];\n this._imageBoundsContribitions = [new DefaultOuterBorderBoundsContribution()];\n this._circleBoundsContribitions = [new DefaultOuterBorderBoundsContribution()];\n this._arcBoundsContribitions = [new DefaultOuterBorderBoundsContribution()];\n this._pathBoundsContribitions = [new DefaultOuterBorderBoundsContribution()];\n }\n onAttributeUpdate(graphic: IGraphic) {\n if (this.hooks.onAttributeUpdate.taps.length) {\n this.hooks.onAttributeUpdate.call(graphic);\n }\n }\n onSetStage(graphic: IGraphic, stage: IStage): void {\n if (this.hooks.onSetStage.taps.length) {\n this.hooks.onSetStage.call(graphic, stage);\n }\n }\n onRemove(graphic: IGraphic<Partial<IGraphicAttribute>>): void {\n if (this.hooks.onRemove.taps.length) {\n this.hooks.onRemove.call(graphic);\n }\n }\n onRelease(graphic: IGraphic<Partial<IGraphicAttribute>>): void {\n if (this.hooks.onRelease.taps.length) {\n this.hooks.onRelease.call(graphic);\n }\n }\n onAddIncremental(graphic: IGraphic, group: IGroup, stage: IStage): void {\n if (this.hooks.onAddIncremental.taps.length) {\n this.hooks.onAddIncremental.call(graphic, group, stage);\n }\n }\n onClearIncremental(group: IGroup, stage: IStage): void {\n if (this.hooks.onClearIncremental.taps.length) {\n this.hooks.onClearIncremental.call(group, stage);\n }\n }\n beforeUpdateAABBBounds(graphic: IGraphic, stage: IStage, willUpdate: boolean, bounds: IAABBBounds) {\n if (this.hooks.beforeUpdateAABBBounds.taps.length) {\n this.hooks.beforeUpdateAABBBounds.call(graphic, stage, willUpdate, bounds);\n }\n }\n afterUpdateAABBBounds(\n graphic: IGraphic,\n stage: IStage,\n bounds: IAABBBounds,\n params: { globalAABBBounds: IAABBBounds },\n selfChange: boolean\n ) {\n if (this.hooks.afterUpdateAABBBounds.taps.length) {\n this.hooks.afterUpdateAABBBounds.call(graphic, stage, bounds, params, selfChange);\n }\n }\n\n updatePathProxyAABBBounds(aabbBounds: IAABBBounds, graphic?: IGraphic): boolean {\n const path = typeof graphic.pathProxy === 'function' ? graphic.pathProxy(graphic.attribute) : graphic.pathProxy;\n if (!path) {\n return false;\n }\n const boundsContext = new BoundsContext(aabbBounds);\n renderCommandList(path.commandList, boundsContext, 0, 0);\n return true;\n }\n\n updateRectAABBBounds(\n attribute: IRectGraphicAttribute,\n rectTheme: Required<IRectGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ) {\n if (!this._validCheck(attribute, rectTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n let { width, height } = attribute;\n const { x1, y1, x, y } = attribute;\n width = width ?? x1 - x;\n height = height ?? y1 - y;\n if (isFinite(width) || isFinite(height) || isFinite(x) || isFinite(y)) {\n aabbBounds.set(0, 0, width || 0, height || 0);\n }\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._rectBoundsContribitions.length &&\n this._rectBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, rectTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n\n this.transformAABBBounds(attribute, aabbBounds, rectTheme, false, graphic);\n return aabbBounds;\n }\n\n updateGroupAABBBounds(\n attribute: IGroupGraphicAttribute,\n groupTheme: Required<IGroupGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGroup\n ) {\n const originalAABBBounds = aabbBounds; // fix aabbbounds update error in flex layout\n aabbBounds = aabbBounds.clone();\n\n const { width, height, path, clip = groupTheme.clip, display } = attribute;\n // 添加自身的fill或者clip\n if (path && path.length) {\n path.forEach(g => {\n aabbBounds.union(g.AABBBounds);\n });\n } else if (width != null && height != null) {\n aabbBounds.set(0, 0, Math.max(0, width), Math.max(0, height)); // fix bounds set when auto size in vtable\n }\n if (!clip) {\n // 添加子节点\n graphic.forEachChildren((node: IGraphic) => {\n aabbBounds.union(node.AABBBounds);\n });\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this.transformAABBBounds(attribute, aabbBounds, groupTheme, false, graphic);\n\n originalAABBBounds.copy(aabbBounds);\n return originalAABBBounds;\n }\n\n updateGlyphAABBBounds(\n attribute: IGlyphGraphicAttribute,\n theme: Required<IGlyphGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGlyph\n ) {\n if (!this._validCheck(attribute, theme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n // 添加子节点\n graphic.getSubGraphic().forEach((node: IGraphic) => {\n aabbBounds.union(node.AABBBounds);\n });\n\n // glyph不需要计算AABBBounds\n // this.transformAABBBounds(attribute, aabbBounds, theme, graphic);\n return aabbBounds;\n }\n\n updateHTMLTextAABBBounds(\n attribute: ITextGraphicAttribute,\n textTheme: Required<ITextGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IText\n ) {\n const { textAlign, textBaseline } = attribute;\n if (attribute.forceBoundsHeight != null) {\n const h = isNumber(attribute.forceBoundsHeight) ? attribute.forceBoundsHeight : attribute.forceBoundsHeight();\n const dy = textLayoutOffsetY(textBaseline, h, h);\n aabbBounds.set(aabbBounds.x1, dy, aabbBounds.x2, dy + h);\n }\n if (attribute.forceBoundsWidth != null) {\n const w = isNumber(attribute.forceBoundsWidth) ? attribute.forceBoundsWidth : attribute.forceBoundsWidth();\n const dx = textDrawOffsetX(textAlign, w);\n aabbBounds.set(dx, aabbBounds.y1, dx + w, aabbBounds.y2);\n }\n }\n\n updateRichTextAABBBounds(\n attribute: IRichTextGraphicAttribute,\n richtextTheme: Required<IRichTextGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IRichText\n ) {\n if (!this._validCheck(attribute, richtextTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!graphic) {\n return aabbBounds;\n }\n\n const {\n width = richtextTheme.width,\n height = richtextTheme.height,\n maxWidth = richtextTheme.maxWidth,\n maxHeight = richtextTheme.maxHeight,\n textAlign = richtextTheme.textAlign,\n textBaseline = richtextTheme.textBaseline\n } = attribute;\n\n if (width > 0 && height > 0) {\n // 外部设置宽高\n aabbBounds.set(0, 0, width, height);\n } else {\n // 获取内容宽高\n const frameCache = graphic.getFrameCache();\n const { width: actualWidth, height: actualHeight } = frameCache.getActualSize();\n let contentWidth = width || actualWidth || 0;\n let contentHeight = height || actualHeight || 0;\n\n contentHeight = typeof maxHeight === 'number' && contentHeight > maxHeight ? maxHeight : contentHeight || 0;\n contentWidth = typeof maxWidth === 'number' && contentWidth > maxWidth ? maxWidth : contentWidth || 0;\n\n aabbBounds.set(0, 0, contentWidth, contentHeight);\n }\n\n // 调整对齐方式\n let deltaY = 0;\n switch (textBaseline) {\n case 'top':\n deltaY = 0;\n break;\n case 'middle':\n deltaY = -aabbBounds.height() / 2;\n break;\n case 'bottom':\n deltaY = -aabbBounds.height();\n break;\n default:\n break;\n }\n let deltaX = 0;\n switch (textAlign) {\n case 'left':\n deltaX = 0;\n break;\n case 'center':\n deltaX = -aabbBounds.width() / 2;\n break;\n case 'right':\n deltaX = -aabbBounds.width();\n break;\n default:\n break;\n }\n aabbBounds.translate(deltaX, deltaY);\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n\n if (attribute.forceBoundsHeight != null || attribute.forceBoundsWidth != null) {\n this.updateHTMLTextAABBBounds(attribute, richtextTheme, aabbBounds);\n }\n this.transformAABBBounds(attribute, aabbBounds, richtextTheme, false, graphic);\n return aabbBounds;\n }\n\n updateTextAABBBounds(\n attribute: ITextGraphicAttribute,\n textTheme: Required<ITextGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IText\n ) {\n if (!this._validCheck(attribute, textTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!graphic) {\n return aabbBounds;\n }\n const { text = textTheme.text } = graphic.attribute;\n if (Array.isArray(text)) {\n graphic.updateMultilineAABBBounds(text as (number | string)[]);\n } else {\n graphic.updateSingallineAABBBounds(text as number | string);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n\n const {\n scaleX = textTheme.scaleX,\n scaleY = textTheme.scaleY,\n shadowBlur = textTheme.shadowBlur,\n strokeBoundsBuffer = textTheme.strokeBoundsBuffer\n } = attribute;\n if (shadowBlur) {\n const shadowBlurHalfWidth = shadowBlur / Math.abs(scaleX + scaleY);\n boundStroke(tb1, shadowBlurHalfWidth, true, strokeBoundsBuffer);\n aabbBounds.union(tb1);\n }\n // 合并shadowRoot的bounds\n this.combindShadowAABBBounds(aabbBounds, graphic);\n\n if (attribute.forceBoundsHeight != null || attribute.forceBoundsWidth != null) {\n this.updateHTMLTextAABBBounds(attribute, textTheme, aabbBounds);\n }\n\n transformBoundsWithMatrix(aabbBounds, aabbBounds, graphic.transMatrix);\n return aabbBounds;\n }\n\n updatePathAABBBounds(\n attribute: IPathGraphicAttribute,\n pathTheme: Required<IPathGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IPath\n ) {\n if (!this._validCheck(attribute, pathTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n this.updatePathAABBBoundsImprecise(attribute, pathTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._pathBoundsContribitions.length &&\n this._pathBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, pathTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n const { lineJoin = pathTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, pathTheme, lineJoin === 'miter', graphic);\n return aabbBounds;\n }\n\n protected updatePathAABBBoundsImprecise(\n attribute: IPathGraphicAttribute,\n pathTheme: Required<IPathGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IPath\n ): IAABBBounds {\n if (!graphic) {\n return aabbBounds;\n }\n const pathShape = graphic.getParsedPathShape();\n aabbBounds.union(pathShape.getBounds());\n\n return aabbBounds;\n }\n\n updatePyramid3dAABBBounds(\n attribute: IPyramid3dGraphicAttribute,\n polygonTheme: Required<IPyramid3dGraphicAttribute>,\n aabbBounds: IBounds,\n graphic?: IPyramid3d\n ) {\n if (!graphic) {\n return aabbBounds;\n }\n\n const stage = graphic.stage;\n if (!stage || !stage.camera) {\n return aabbBounds;\n }\n\n const faces = graphic.findFace();\n // const outP = [0, 0, 0];\n faces.vertices.forEach(v => {\n const x = v[0];\n const y = v[1];\n aabbBounds.add(x, y);\n });\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n\n this.transformAABBBounds(attribute, aabbBounds, polygonTheme, false, graphic);\n return aabbBounds;\n }\n\n updateArc3dAABBBounds(\n attribute: IArc3dGraphicAttribute,\n arcTheme: Required<IArc3dGraphicAttribute>,\n aabbBounds: IBounds,\n graphic?: IArc3d\n ) {\n if (!graphic) {\n return aabbBounds;\n }\n\n const stage = graphic.stage;\n if (!stage || !stage.camera) {\n return aabbBounds;\n }\n\n // 当做一个立方体计算\n const { outerRadius = arcTheme.outerRadius, height = 0 } = attribute;\n const r = outerRadius + height;\n aabbBounds.setValue(-r, -r, r, r);\n // const matrix = getExtraModelMatrix(graphic.globalTransMatrix, 1, graphic);\n // const { outerRadius=arcTheme.outerRadius, height=0 } = attribute;\n // const points = [\n // {x: -outerRadius, y: -outerRadius, z: 0 },\n // {x: outerRadius, y: -outerRadius, z: 0 },\n // {x: outerRadius, y: outerRadius, z: 0 },\n // {x: -outerRadius, y: outerRadius, z: 0 },\n // {x: -outerRadius, y: -outerRadius, z: height },\n // {x: outerRadius, y: -outerRadius, z: height },\n // {x: outerRadius, y: outerRadius, z: height },\n // {x: -outerRadius, y: outerRadius, z: height },\n // ]\n // const outP: vec3 = [0, 0, 0];\n // points.forEach(item => {\n // let x = item.x;\n // let y = item.y;\n // if (stage.camera) {\n // transformMat4(outP, [item.x, item.y, item.z], matrix);\n // const data = stage.camera.vp(outP[0], outP[1], outP[2]);\n // x = data.x;\n // y = data.y;\n // }\n // aabbBounds.add(x, y);\n // });\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n\n this.transformAABBBounds(attribute, aabbBounds, arcTheme, false, graphic);\n return aabbBounds;\n }\n\n updatePolygonAABBBounds(\n attribute: IPolygonGraphicAttribute,\n polygonTheme: Required<IPolygonGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IPolygon\n ) {\n if (!this._validCheck(attribute, polygonTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n this.updatePolygonAABBBoundsImprecise(attribute, polygonTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n // if (!this._pathBoundsContribitions) {\n // this._pathBoundsContribitions = this.pathBoundsContribitions.getContributions() || [];\n // }\n // this._pathBoundsContribitions.length &&\n // this._pathBoundsContribitions.forEach(c => {\n // c.updateBounds(attribute, polygonTheme, tb1, graphic);\n // aabbBounds.union(tb1);\n // tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n // });\n\n const { lineJoin = polygonTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, polygonTheme, lineJoin === 'miter', graphic);\n return aabbBounds;\n }\n\n protected updatePolygonAABBBoundsImprecise(\n attribute: IPolygonGraphicAttribute,\n polygonTheme: Required<IPolygonGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IPolygon\n ): IAABBBounds {\n const { points = polygonTheme.points } = attribute;\n points.forEach(p => {\n aabbBounds.add(p.x, p.y);\n });\n\n return aabbBounds;\n }\n\n updateLineAABBBounds(\n attribute: ILineGraphicAttribute,\n lineTheme: Required<ILineGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: ILine\n ) {\n if (!this._validCheck(attribute, lineTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n attribute.segments\n ? this.updateLineAABBBoundsBySegments(attribute, lineTheme, aabbBounds, graphic)\n : this.updateLineAABBBoundsByPoints(attribute, lineTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n // if (!this._rectBoundsContribitions) {\n // this._rectBoundsContribitions = this.rectBoundsContribitions.getContributions() || [];\n // }\n // this._rectBoundsContribitions.length &&\n // this._rectBoundsContribitions.forEach(c => {\n // c.updateBounds(attribute, areaTheme, tb1, graphic);\n // aabbBounds.union(tb1);\n // tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n // });\n\n const { lineJoin = lineTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, lineTheme, lineJoin === 'miter', graphic);\n return aabbBounds;\n }\n\n protected updateLineAABBBoundsByPoints(\n attribute: ILineGraphicAttribute,\n lineTheme: Required<ILineGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: ILine\n ): IAABBBounds {\n const { points = lineTheme.points, connectedType } = attribute;\n const b = aabbBounds;\n points.forEach(p => {\n if (p.defined !== false || connectedType === 'zero') {\n b.add(p.x, p.y);\n }\n });\n return b;\n }\n protected updateLineAABBBoundsBySegments(\n attribute: ILineGraphicAttribute,\n lineTheme: Required<ILineGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: ILine\n ): IAABBBounds {\n const { segments = lineTheme.segments, connectedType } = attribute;\n const b = aabbBounds;\n segments.forEach(s => {\n s.points.forEach(p => {\n if (p.defined !== false || connectedType === 'zero') {\n b.add(p.x, p.y);\n }\n });\n });\n return b;\n }\n\n updateAreaAABBBounds(\n attribute: IAreaGraphicAttribute,\n areaTheme: Required<IAreaGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IArea\n ) {\n if (!this._validCheck(attribute, areaTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n attribute.segments\n ? this.updateAreaAABBBoundsBySegments(attribute, areaTheme, aabbBounds, graphic)\n : this.updateAreaAABBBoundsByPoints(attribute, areaTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n // if (!this._rectBoundsContribitions) {\n // this._rectBoundsContribitions = this.rectBoundsContribitions.getContributions() || [];\n // }\n // this._rectBoundsContribitions.length &&\n // this._rectBoundsContribitions.forEach(c => {\n // c.updateBounds(attribute, areaTheme, tb1, graphic);\n // aabbBounds.union(tb1);\n // tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n // });\n\n const { lineJoin = areaTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, areaTheme, lineJoin === 'miter', graphic);\n return aabbBounds;\n }\n\n protected updateAreaAABBBoundsByPoints(\n attribute: IAreaGraphicAttribute,\n areaTheme: Required<IAreaGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IArea\n ): IAABBBounds {\n const { points = areaTheme.points } = attribute;\n const b = aabbBounds;\n points.forEach(p => {\n b.add(p.x, p.y);\n b.add(p.x1 ?? p.x, p.y1 ?? p.y); //面积图特殊性:由三个值构成,横向面积图,x1会省略;纵向面积图,y1会省略\n });\n return b;\n }\n protected updateAreaAABBBoundsBySegments(\n attribute: IAreaGraphicAttribute,\n areaTheme: Required<IAreaGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IArea\n ): IAABBBounds {\n const { segments = areaTheme.segments } = attribute;\n const b = aabbBounds;\n segments.forEach(s => {\n s.points.forEach(p => {\n b.add(p.x, p.y);\n b.add(p.x1 ?? p.x, p.y1 ?? p.y); //面积图特殊性:由三个值构成,横向面积图,x1会省略;纵向面积图,y1会省略\n });\n });\n return b;\n }\n\n updateCircleAABBBounds(\n attribute: ICircleGraphicAttribute,\n circleTheme: Required<ICircleGraphicAttribute>,\n aabbBounds: IAABBBounds,\n full?: boolean,\n graphic?: ICircle\n ) {\n if (!this._validCheck(attribute, circleTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n full\n ? this.updateCircleAABBBoundsImprecise(attribute, circleTheme, aabbBounds, graphic)\n : this.updateCircleAABBBoundsAccurate(attribute, circleTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._circleBoundsContribitions.length &&\n this._circleBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, circleTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n\n this.transformAABBBounds(attribute, aabbBounds, circleTheme, false, graphic);\n\n return aabbBounds;\n }\n\n protected updateCircleAABBBoundsImprecise(\n attribute: ICircleGraphicAttribute,\n circleTheme: Required<ICircleGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n const { radius = circleTheme.radius } = attribute;\n aabbBounds.set(-radius, -radius, radius, radius);\n\n return aabbBounds;\n }\n protected updateCircleAABBBoundsAccurate(\n attribute: ICircleGraphicAttribute,\n circleTheme: Required<ICircleGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n const {\n startAngle = circleTheme.startAngle,\n endAngle = circleTheme.endAngle,\n radius = circleTheme.radius\n } = attribute;\n\n if (endAngle - startAngle > pi2 - epsilon) {\n aabbBounds.set(-radius, -radius, radius, radius);\n } else {\n circleBounds(startAngle, endAngle, radius, aabbBounds);\n }\n\n return aabbBounds;\n }\n\n updateArcAABBBounds(\n attribute: IArcGraphicAttribute,\n arcTheme: Required<IArcGraphicAttribute>,\n aabbBounds: IAABBBounds,\n full?: boolean,\n graphic?: IArc\n ) {\n if (!this._validCheck(attribute, arcTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n full\n ? this.updateArcAABBBoundsImprecise(attribute, arcTheme, aabbBounds, graphic)\n : this.updateArcAABBBoundsAccurate(attribute, arcTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._arcBoundsContribitions.length &&\n this._arcBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, arcTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n\n const { lineJoin = arcTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, arcTheme, lineJoin === 'miter', graphic);\n\n return aabbBounds;\n }\n\n protected updateArcAABBBoundsImprecise(\n attribute: IArcGraphicAttribute,\n arcTheme: Required<IArcGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n let { outerRadius = arcTheme.outerRadius, innerRadius = arcTheme.innerRadius } = attribute;\n const { outerPadding = arcTheme.outerPadding, innerPadding = arcTheme.innerPadding } = attribute;\n outerRadius += outerPadding;\n innerRadius -= innerPadding;\n if (outerRadius < innerRadius) {\n outerRadius = innerRadius;\n }\n\n aabbBounds.set(-outerRadius, -outerRadius, outerRadius, outerRadius);\n\n return aabbBounds;\n }\n protected updateArcAABBBoundsAccurate(\n attribute: IArcGraphicAttribute,\n arcTheme: Required<IArcGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n let { outerRadius = arcTheme.outerRadius, innerRadius = arcTheme.innerRadius } = attribute;\n const { outerPadding = arcTheme.outerPadding, innerPadding = arcTheme.innerPadding } = attribute;\n outerRadius += outerPadding;\n innerRadius -= innerPadding;\n if (outerRadius < innerRadius) {\n // 不用解构,避免性能问题\n const temp = outerRadius;\n outerRadius = innerRadius;\n innerRadius = temp;\n }\n let { endAngle = arcTheme.endAngle, startAngle = arcTheme.startAngle } = attribute;\n\n if (startAngle > endAngle) {\n const temp = startAngle;\n startAngle = endAngle;\n endAngle = temp;\n }\n\n if (outerRadius <= epsilon) {\n aabbBounds.set(0, 0, 0, 0);\n } else if (Math.abs(endAngle - startAngle) > pi2 - epsilon) {\n aabbBounds.set(-outerRadius, -outerRadius, outerRadius, outerRadius);\n } else {\n // 直接内外两个radius叠加即可,不需要更精确\n circleBounds(startAngle, endAngle, outerRadius, aabbBounds);\n circleBounds(startAngle, endAngle, innerRadius, aabbBounds);\n }\n\n return aabbBounds;\n }\n\n updateSymbolAABBBounds(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required<ISymbolGraphicAttribute>,\n aabbBounds: IAABBBounds,\n full?: boolean,\n graphic?: ISymbol\n ) {\n if (!this._validCheck(attribute, symbolTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n full\n ? this.updateSymbolAABBBoundsImprecise(attribute, symbolTheme, aabbBounds, graphic)\n : this.updateSymbolAABBBoundsAccurate(attribute, symbolTheme, aabbBounds, graphic);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._symbolBoundsContribitions.length &&\n this._symbolBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, symbolTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n\n const { lineJoin = symbolTheme.lineJoin } = attribute;\n this.transformAABBBounds(attribute, aabbBounds, symbolTheme, lineJoin === 'miter', graphic);\n return aabbBounds;\n }\n\n protected updateSymbolAABBBoundsImprecise(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required<ISymbolGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): IAABBBounds {\n // 当做正方形计算\n const { size = symbolTheme.size } = attribute;\n\n if (isArray(size)) {\n aabbBounds.set(-size[0] / 2, -size[1] / 2, size[0] / 2, size[1] / 2);\n } else {\n const halfWH = size / 2;\n\n aabbBounds.set(-halfWH, -halfWH, halfWH, halfWH);\n }\n\n return aabbBounds;\n }\n\n protected updateSymbolAABBBoundsAccurate(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required<ISymbolGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: ISymbol\n ): IAABBBounds {\n if (!graphic) {\n return aabbBounds;\n }\n const { size = symbolTheme.size } = attribute;\n\n const symbolClass = graphic.getParsedPath();\n symbolClass.bounds(size, aabbBounds);\n\n return aabbBounds;\n }\n\n updateImageAABBBounds(\n attribute: IImageGraphicAttribute,\n imageTheme: Required<IImageGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ) {\n if (!this._validCheck(attribute, imageTheme, aabbBounds, graphic)) {\n return aabbBounds;\n }\n if (!this.updatePathProxyAABBBounds(aabbBounds, graphic)) {\n const { width = imageTheme.width, height = imageTheme.height } = attribute;\n aabbBounds.set(0, 0, width, height);\n }\n\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n tb1.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n tb2.setValue(aabbBounds.x1, aabbBounds.y1, aabbBounds.x2, aabbBounds.y2);\n this._imageBoundsContribitions.length &&\n this._imageBoundsContribitions.forEach(c => {\n c.updateBounds(attribute, imageTheme, tb1, graphic);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n });\n\n this.transformAABBBounds(attribute, aabbBounds, imageTheme, false, graphic);\n return aabbBounds;\n }\n\n combindShadowAABBBounds(bounds: IAABBBounds, graphic?: IGraphic) {\n // 合并shadowRoot的Bounds\n if (graphic && graphic.shadowRoot) {\n const b = graphic.shadowRoot.AABBBounds;\n bounds.union(b);\n }\n }\n\n transformAABBBounds(\n attribute: Partial<IGraphicAttribute>,\n aabbBounds: IAABBBounds,\n theme: Required<IGraphicAttribute>,\n miter: boolean,\n graphic?: IGraphic\n ) {\n if (!aabbBounds.empty()) {\n const {\n scaleX = theme.scaleX,\n scaleY = theme.scaleY,\n stroke = theme.stroke,\n shadowBlur = theme.shadowBlur,\n lineWidth = theme.lineWidth,\n pickStrokeBuffer = theme.pickStrokeBuffer,\n strokeBoundsBuffer = theme.strokeBoundsBuffer\n } = attribute;\n const tb1 = this.tempAABBBounds1;\n const tb2 = this.tempAABBBounds2;\n if (stroke && lineWidth) {\n const scaledHalfLineWidth = (lineWidth + pickStrokeBuffer) / Math.abs(scaleX + scaleY);\n boundStroke(tb1, scaledHalfLineWidth, miter, strokeBoundsBuffer);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n }\n if (shadowBlur) {\n const { shadowOffsetX = theme.shadowOffsetX, shadowOffsetY = theme.shadowOffsetY } = attribute;\n const shadowBlurWidth = (shadowBlur / Math.abs(scaleX + scaleY)) * 2;\n boundStroke(tb1, shadowBlurWidth, false, strokeBoundsBuffer + 1);\n tb1.translate(shadowOffsetX, shadowOffsetY);\n aabbBounds.union(tb1);\n // tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n }\n }\n\n // 合并shadowRoot的bounds\n this.combindShadowAABBBounds(aabbBounds, graphic);\n if (aabbBounds.empty()) {\n return;\n }\n\n // 性能优化逻辑,group类型变换较少,不需要矩阵变换\n let updateMatrix = true;\n const m = graphic.transMatrix;\n if (graphic && graphic.isContainer) {\n updateMatrix = !(m.a === 1 && m.b === 0 && m.c === 0 && m.d === 1 && m.e === 0 && m.f === 0);\n }\n updateMatrix && transformBoundsWithMatrix(aabbBounds, aabbBounds, m);\n\n // TODO 加上锚点\n // transformBounds(aabbBounds, x, y, scaleX, scaleY, angle);\n // if (graphic.attribute.postMatrix) {\n // console.log('aaa');\n // transformBoundsWithMatrix(aabbBounds, graphic.attribute.postMatrix);\n // }\n // aabbBounds.translate(dx, dy);\n }\n\n protected _validCheck(\n attribute: Partial<IGraphicAttribute>,\n theme: Required<IGraphicAttribute>,\n aabbBounds: IAABBBounds,\n graphic?: IGraphic\n ): boolean {\n if (!graphic) {\n return true;\n }\n // 设置了强制wh,那就直接认为是合法的\n if (attribute.forceBoundsHeight != null || attribute.forceBoundsWidth != null) {\n return true;\n }\n if (!graphic.valid) {\n aabbBounds.clear();\n return false;\n }\n const { visible = theme.visible } = attribute;\n if (!visible) {\n aabbBounds.clear();\n return false;\n }\n return true;\n }\n}\n"]}
|
|
@@ -44,11 +44,9 @@ exports.regLetter = /\w|\(|\)|-/;
|
|
|
44
44
|
|
|
45
45
|
const regPunctuation = /[.?!,;:/,。?!、;:]/;
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const {fillOpacity: fillOpacity = 1, opacity: opacity = 1} = character;
|
|
51
|
-
ctx.globalAlpha = fillOpacity * opacity, ctx.fillStyle = fillStyle;
|
|
47
|
+
exports.regFirstSpace = /\S/;
|
|
48
|
+
|
|
49
|
+
const setTextStyle = (ctx, character) => {
|
|
52
50
|
let fontSize = character.fontSize || 16;
|
|
53
51
|
switch (character.script) {
|
|
54
52
|
case "super":
|
|
@@ -63,6 +61,13 @@ function applyFillStyle(ctx, character) {
|
|
|
63
61
|
fontSize: fontSize,
|
|
64
62
|
fontFamily: character.fontFamily || "sans-serif"
|
|
65
63
|
});
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
function applyFillStyle(ctx, character) {
|
|
67
|
+
const fillStyle = character && character.fill || defaultFormatting.fill;
|
|
68
|
+
if (!fillStyle) return void (ctx.globalAlpha = 0);
|
|
69
|
+
const {fillOpacity: fillOpacity = 1, opacity: opacity = 1} = character;
|
|
70
|
+
ctx.globalAlpha = fillOpacity * opacity, ctx.fillStyle = fillStyle, setTextStyle(ctx, character);
|
|
66
71
|
}
|
|
67
72
|
|
|
68
73
|
function applyStrokeStyle(ctx, character) {
|
|
@@ -70,21 +75,7 @@ function applyStrokeStyle(ctx, character) {
|
|
|
70
75
|
if (!strokeStyle) return void (ctx.globalAlpha = 0);
|
|
71
76
|
const {strokeOpacity: strokeOpacity = 1, opacity: opacity = 1} = character;
|
|
72
77
|
ctx.globalAlpha = strokeOpacity * opacity, ctx.lineWidth = character && "number" == typeof character.lineWidth ? character.lineWidth : 1,
|
|
73
|
-
ctx.strokeStyle = strokeStyle;
|
|
74
|
-
let fontSize = character.fontSize || 16;
|
|
75
|
-
switch (character.script) {
|
|
76
|
-
case "super":
|
|
77
|
-
case "sub":
|
|
78
|
-
fontSize *= .8;
|
|
79
|
-
}
|
|
80
|
-
ctx.setTextStyle({
|
|
81
|
-
textAlign: "left",
|
|
82
|
-
textBaseline: character.textBaseline || "alphabetic",
|
|
83
|
-
fontStyle: character.fontStyle || "",
|
|
84
|
-
fontWeight: character.fontWeight || "",
|
|
85
|
-
fontSize: fontSize,
|
|
86
|
-
fontFamily: character.fontFamily || "sans-serif"
|
|
87
|
-
});
|
|
78
|
+
ctx.strokeStyle = strokeStyle, setTextStyle(ctx, character);
|
|
88
79
|
}
|
|
89
80
|
|
|
90
81
|
function prepareContext(ctx) {
|
|
@@ -183,7 +174,7 @@ function getFontString(character, ctx) {
|
|
|
183
174
|
return (character && character.fontStyle || "") + " " + (character && character.fontWeight || "") + " " + (fontSize || 12) + "px " + (character && character.fontFamily || defaultFormatting.fontFamily);
|
|
184
175
|
}
|
|
185
176
|
|
|
186
|
-
exports.
|
|
177
|
+
exports.applyFillStyle = applyFillStyle, exports.applyStrokeStyle = applyStrokeStyle,
|
|
187
178
|
exports.prepareContext = prepareContext, exports.getStrByWithDom = getStrByWithDom,
|
|
188
179
|
exports.getStrByWithCanvas = getStrByWithCanvas, exports.testLetter = testLetter,
|
|
189
180
|
exports.measureTextDom = measureTextDom, exports.measureTextCanvas = measureTextCanvas,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphic/richtext/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["import { application } from '../../application';\nimport type { IContext2d, ITextStyleParams, IRichTextParagraphCharacter } from '../../interface';\n\nexport const DIRECTION_KEY = {\n horizontal: {\n width: 'width',\n height: 'height',\n left: 'left',\n top: 'top',\n x: 'x',\n y: 'y',\n bottom: 'bottom'\n },\n vertical: {\n width: 'height',\n height: 'width',\n left: 'top',\n top: 'left',\n x: 'y',\n y: 'x',\n bottom: 'right'\n }\n};\n\nconst defaultFormatting = {\n fontSize: 16,\n fontFamily: 'sans-serif',\n fill: true,\n stroke: false,\n fontWeight: 'normal',\n lineHeight: 'normal',\n fontStyle: 'normal', // normal, italic, oblique\n textDecoration: 'none', // none, underline, line-through\n textAlign: 'left', // left, right, center\n script: 'normal' // normal, sub, super\n};\nconst nbsp = String.fromCharCode(160);\n\nexport const regLetter = /\\w|\\(|\\)|-/;\nconst regPunctuation = /[.?!,;:/,。?!、;:]/;\nexport const regFirstSpace = /\\S/;\n// Applies the style of a run to the canvas context\nexport function applyFillStyle(ctx: IContext2d, character: IRichTextParagraphCharacter) {\n const fillStyle = (character && (character.fill as string)) || defaultFormatting.fill;\n if (!fillStyle) {\n ctx.globalAlpha = 0;\n return;\n }\n\n const { fillOpacity = 1, opacity = 1 } = character;\n\n ctx.globalAlpha = fillOpacity * opacity;\n ctx.fillStyle = fillStyle as string;\n\n let fontSize = character.fontSize || 16;\n switch (character.script) {\n case 'super':\n case 'sub':\n fontSize *= 0.8;\n break;\n }\n\n ctx.setTextStyle({\n textAlign: 'left',\n textBaseline: character.textBaseline || 'alphabetic',\n fontStyle: character.fontStyle || '',\n fontWeight: character.fontWeight || '',\n fontSize,\n fontFamily: character.fontFamily || 'sans-serif'\n } as ITextStyleParams);\n}\n\nexport function applyStrokeStyle(ctx: IContext2d, character: IRichTextParagraphCharacter) {\n const strokeStyle = (character && (character.stroke as string)) || (defaultFormatting.stroke as any);\n if (!strokeStyle) {\n ctx.globalAlpha = 0;\n return;\n }\n\n const { strokeOpacity = 1, opacity = 1 } = character;\n\n ctx.globalAlpha = strokeOpacity * opacity;\n ctx.lineWidth = character && typeof character.lineWidth === 'number' ? character.lineWidth : 1;\n ctx.strokeStyle = strokeStyle as string;\n\n let fontSize = character.fontSize || 16;\n switch (character.script) {\n case 'super':\n case 'sub':\n fontSize *= 0.8;\n break;\n }\n\n ctx.setTextStyle({\n textAlign: 'left',\n textBaseline: character.textBaseline || 'alphabetic',\n fontStyle: character.fontStyle || '',\n fontWeight: character.fontWeight || '',\n fontSize,\n fontFamily: character.fontFamily || 'sans-serif'\n } as ITextStyleParams);\n}\n\nexport function prepareContext(ctx: IContext2d) {\n ctx.setTextStyle({\n textAlign: 'left',\n textBaseline: 'bottom'\n });\n}\n\n// 确认达到availableWidth的字符串截取index\nexport function getStrByWithDom(\n desc: string,\n width: number,\n style: string,\n guessIndex: number,\n needTestLetter?: boolean\n): number {\n desc = desc.replace(/\\s/g, nbsp);\n\n // 测量用DOM\n const span = document.createElement('span');\n span.setAttribute('style', style);\n span.style.visibility = 'hidden';\n span.style.whiteSpace = 'nowrap';\n document.body.appendChild(span);\n\n // 测量从头到当前位置宽度以及从头到下一个字符位置宽度\n let index = guessIndex;\n let temp = desc.slice(0, index);\n span.innerText = temp;\n let tempWidth = span.offsetWidth;\n\n let tempNext = desc.slice(0, index + 1);\n span.innerText = tempNext;\n let tempWidthNext = span.offsetWidth;\n\n // 到当前位置宽度 < width && 到下一个字符位置宽度 > width时,认为找到准确阶段位置\n while (tempWidth > width || tempWidthNext <= width) {\n if (tempWidth > width) {\n index--;\n } else {\n index++;\n }\n\n temp = desc.slice(0, index);\n span.innerText = temp;\n tempWidth = span.offsetWidth;\n\n tempNext = desc.slice(0, index + 1);\n span.innerText = tempNext;\n tempWidthNext = span.offsetWidth;\n }\n\n // 处理特殊情况\n if (needTestLetter) {\n index = testLetter(desc, index);\n }\n\n document.body.removeChild(span);\n return index;\n}\nexport function getStrByWithCanvas(\n desc: string,\n width: number,\n character: IRichTextParagraphCharacter,\n // ctx: IContext2d,\n guessIndex: number,\n needTestLetter?: boolean\n): number {\n if (!width || width <= 0) {\n return 0;\n }\n const textMeasure = application.graphicUtil.textMeasure;\n // const measurement = textMeasure.measureText(text, character);\n\n // 测量从头到当前位置宽度以及从头到下一个字符位置宽度\n let index = guessIndex;\n let temp = desc.slice(0, index);\n let tempWidth = Math.floor(textMeasure.measureText(temp, character).width);\n\n let tempNext = desc.slice(0, index + 1);\n let tempWidthNext = Math.floor(textMeasure.measureText(tempNext, character).width);\n\n // 到当前位置宽度 < width && 到下一个字符位置宽度 > width时,认为找到准确阶段位置\n while (tempWidth > width || tempWidthNext <= width) {\n if (tempWidth > width) {\n index--;\n } else {\n index++;\n }\n\n if (index > desc.length) {\n index = desc.length;\n break;\n } else if (index < 0) {\n index = 0;\n break;\n }\n\n temp = desc.slice(0, index);\n tempWidth = Math.floor(textMeasure.measureText(temp, character).width);\n\n tempNext = desc.slice(0, index + 1);\n tempWidthNext = Math.floor(textMeasure.measureText(tempNext, character).width);\n }\n\n // 处理特殊情况\n if (needTestLetter) {\n index = testLetter(desc, index);\n }\n\n return index;\n}\n\nexport function testLetter(string: string, index: number): number {\n let i = index;\n // 切分前后都是英文字母数字下划线,向前找到非英文字母处换行\n while (\n (regLetter.test(string[i - 1]) && regLetter.test(string[i])) ||\n // 行首标点符号处理\n regPunctuation.test(string[i])\n ) {\n i--;\n // 无法满足所有条件,放弃匹配,直接截断,避免陷入死循环\n if (i <= 0) {\n return index;\n }\n }\n return i;\n}\n\n// 测量文字详细信息\nexport function measureTextDom(\n text: string,\n style: string\n): { ascent?: number; height?: number; descent?: number; width?: number } {\n let div;\n\n const span = document.createElement('span');\n const block = document.createElement('div');\n div = document.createElement('div');\n\n block.style.display = 'inline-block';\n block.style.width = '1px';\n block.style.height = '0';\n\n div.style.visibility = 'hidden';\n div.style.position = 'absolute';\n div.style.top = '0';\n div.style.left = '0';\n div.style.width = '500px';\n div.style.height = '200px';\n div.style.whiteSpace = 'nowrap';\n\n div.appendChild(span);\n div.appendChild(block);\n document.body.appendChild(div);\n\n const result: { ascent?: number; height?: number; descent?: number; width?: number } = {};\n try {\n span.setAttribute('style', style);\n span.style.whiteSpace = 'nowrap';\n span.style.display = 'inline-block';\n\n span.innerHTML = '';\n span.appendChild(document.createTextNode(text.replace(/\\s/g, nbsp)));\n\n block.style.verticalAlign = 'baseline';\n result.ascent = block.offsetTop - span.offsetTop;\n block.style.verticalAlign = 'bottom';\n result.height = block.offsetTop - span.offsetTop;\n result.descent = result.height - result.ascent;\n result.width = span.offsetWidth;\n } finally {\n div.parentNode?.removeChild(div);\n div = null;\n }\n return result;\n}\n\n// 测量文字详细信息\nexport function measureTextCanvas(\n text: string,\n character: IRichTextParagraphCharacter\n): { ascent: number; height: number; descent: number; width: number } {\n const textMeasure = application.graphicUtil.textMeasure;\n const measurement = textMeasure.measureText(text, character) as TextMetrics;\n const result: { ascent: number; height: number; descent: number; width: number } = {\n ascent: 0,\n height: 0,\n descent: 0,\n width: 0\n };\n if (\n typeof measurement.actualBoundingBoxAscent !== 'number' ||\n typeof measurement.actualBoundingBoxDescent !== 'number'\n ) {\n result.width = Math.floor(measurement.width);\n result.height = character.fontSize || 0;\n result.ascent = result.height;\n result.descent = 0;\n } else {\n result.width = Math.floor(measurement.width);\n result.height = Math.floor(measurement.actualBoundingBoxAscent + measurement.actualBoundingBoxDescent);\n result.ascent = Math.floor(measurement.actualBoundingBoxAscent);\n result.descent = result.height - result.ascent;\n }\n return result;\n}\n\nexport function getFontString(character: IRichTextParagraphCharacter, ctx: IContext2d | null) {\n let fontSize = (character && character.fontSize) || defaultFormatting.fontSize;\n\n if (character) {\n switch (character.script) {\n case 'super':\n case 'sub':\n fontSize *= 0.8;\n break;\n }\n }\n\n return (\n ((character && character.fontStyle) || '') +\n ' ' +\n ((character && character.fontWeight) || '') +\n ' ' +\n (fontSize || 12) +\n 'px ' +\n ((character && character.fontFamily) || defaultFormatting.fontFamily)\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/graphic/richtext/utils.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAGnC,QAAA,aAAa,GAAG;IAC3B,UAAU,EAAE;QACV,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,KAAK;QACV,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,GAAG;QACN,MAAM,EAAE,QAAQ;KACjB;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,MAAM;QACX,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,GAAG;QACN,MAAM,EAAE,OAAO;KAChB;CACF,CAAC;AAEF,MAAM,iBAAiB,GAAG;IACxB,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,YAAY;IACxB,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,KAAK;IACb,UAAU,EAAE,QAAQ;IACpB,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,QAAQ;IACnB,cAAc,EAAE,MAAM;IACtB,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,QAAQ;CACjB,CAAC;AACF,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAEzB,QAAA,SAAS,GAAG,YAAY,CAAC;AACtC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAC7B,QAAA,aAAa,GAAG,IAAI,CAAC;AAElC,MAAM,YAAY,GAAG,CAAC,GAAe,EAAE,SAAsC,EAAE,EAAE;IAC/E,IAAI,QAAQ,GAAG,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,QAAQ,SAAS,CAAC,MAAM,EAAE;QACxB,KAAK,OAAO,CAAC;QACb,KAAK,KAAK;YACR,QAAQ,IAAI,GAAG,CAAC;YAChB,MAAM;KACT;IAED,GAAG,CAAC,YAAY,CAAC;QACf,SAAS,EAAE,MAAM;QACjB,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,YAAY;QACpD,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,EAAE;QACpC,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,EAAE;QACtC,QAAQ;QACR,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,YAAY;KAC7B,CAAC,CAAC;AACzB,CAAC,CAAC;AAGF,SAAgB,cAAc,CAAC,GAAe,EAAE,SAAsC;IACpF,MAAM,SAAS,GAAG,CAAC,SAAS,IAAK,SAAS,CAAC,IAAe,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC;IACtF,IAAI,CAAC,SAAS,EAAE;QACd,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;QACpB,OAAO;KACR;IAED,MAAM,EAAE,WAAW,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IAEnD,GAAG,CAAC,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC;IACxC,GAAG,CAAC,SAAS,GAAG,SAAmB,CAAC;IAEpC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAC/B,CAAC;AAbD,wCAaC;AAED,SAAgB,gBAAgB,CAAC,GAAe,EAAE,SAAsC;IACtF,MAAM,WAAW,GAAG,CAAC,SAAS,IAAK,SAAS,CAAC,MAAiB,CAAC,IAAK,iBAAiB,CAAC,MAAc,CAAC;IACrG,IAAI,CAAC,WAAW,EAAE;QAChB,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;QACpB,OAAO;KACR;IAED,MAAM,EAAE,aAAa,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IAErD,GAAG,CAAC,WAAW,GAAG,aAAa,GAAG,OAAO,CAAC;IAC1C,GAAG,CAAC,SAAS,GAAG,SAAS,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,GAAG,CAAC,WAAW,GAAG,WAAqB,CAAC;IAExC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAC/B,CAAC;AAdD,4CAcC;AAED,SAAgB,cAAc,CAAC,GAAe;IAC5C,GAAG,CAAC,YAAY,CAAC;QACf,SAAS,EAAE,MAAM;QACjB,YAAY,EAAE,QAAQ;KACvB,CAAC,CAAC;AACL,CAAC;AALD,wCAKC;AAGD,SAAgB,eAAe,CAC7B,IAAY,EACZ,KAAa,EACb,KAAa,EACb,UAAkB,EAClB,cAAwB;IAExB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAGjC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;IACjC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAGhC,IAAI,KAAK,GAAG,UAAU,CAAC;IACvB,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACtB,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;IAEjC,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC1B,IAAI,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC;IAGrC,OAAO,SAAS,GAAG,KAAK,IAAI,aAAa,IAAI,KAAK,EAAE;QAClD,IAAI,SAAS,GAAG,KAAK,EAAE;YACrB,KAAK,EAAE,CAAC;SACT;aAAM;YACL,KAAK,EAAE,CAAC;SACT;QAED,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;QAE7B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC;KAClC;IAGD,IAAI,cAAc,EAAE;QAClB,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACjC;IAED,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,KAAK,CAAC;AACf,CAAC;AAlDD,0CAkDC;AACD,SAAgB,kBAAkB,CAChC,IAAY,EACZ,KAAa,EACb,SAAsC,EAEtC,UAAkB,EAClB,cAAwB;IAExB,IAAI,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC,EAAE;QACxB,OAAO,CAAC,CAAC;KACV;IACD,MAAM,WAAW,GAAG,yBAAW,CAAC,WAAW,CAAC,WAAW,CAAC;IAIxD,IAAI,KAAK,GAAG,UAAU,CAAC;IACvB,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAChC,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;IAE3E,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACxC,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;IAGnF,OAAO,SAAS,GAAG,KAAK,IAAI,aAAa,IAAI,KAAK,EAAE;QAClD,IAAI,SAAS,GAAG,KAAK,EAAE;YACrB,KAAK,EAAE,CAAC;SACT;aAAM;YACL,KAAK,EAAE,CAAC;SACT;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;YACvB,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YACpB,MAAM;SACP;aAAM,IAAI,KAAK,GAAG,CAAC,EAAE;YACpB,KAAK,GAAG,CAAC,CAAC;YACV,MAAM;SACP;QAED,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5B,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;QAEvE,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACpC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;KAChF;IAGD,IAAI,cAAc,EAAE;QAClB,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACjC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAnDD,gDAmDC;AAED,SAAgB,UAAU,CAAC,MAAc,EAAE,KAAa;IACtD,IAAI,CAAC,GAAG,KAAK,CAAC;IAEd,OACE,CAAC,iBAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,iBAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5D,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAC9B;QACA,CAAC,EAAE,CAAC;QAEJ,IAAI,CAAC,IAAI,CAAC,EAAE;YACV,OAAO,KAAK,CAAC;SACd;KACF;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAfD,gCAeC;AAGD,SAAgB,cAAc,CAC5B,IAAY,EACZ,KAAa;;IAEb,IAAI,GAAG,CAAC;IAER,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5C,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAEpC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;IACrC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IAC1B,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IAEzB,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;IAChC,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IAChC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IACpB,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;IACrB,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;IAC1B,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;IAC3B,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;IAEhC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACtB,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAE/B,MAAM,MAAM,GAA2E,EAAE,CAAC;IAC1F,IAAI;QACF,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;QAEpC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAErE,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC;QACvC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjD,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;QACrC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjD,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC/C,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;KACjC;YAAS;QACR,MAAA,GAAG,CAAC,UAAU,0CAAE,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,GAAG,GAAG,IAAI,CAAC;KACZ;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AA9CD,wCA8CC;AAGD,SAAgB,iBAAiB,CAC/B,IAAY,EACZ,SAAsC;IAEtC,MAAM,WAAW,GAAG,yBAAW,CAAC,WAAW,CAAC,WAAW,CAAC;IACxD,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAgB,CAAC;IAC5E,MAAM,MAAM,GAAuE;QACjF,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;KACT,CAAC;IACF,IACE,OAAO,WAAW,CAAC,uBAAuB,KAAK,QAAQ;QACvD,OAAO,WAAW,CAAC,wBAAwB,KAAK,QAAQ,EACxD;QACA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,QAAQ,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;KACpB;SAAM;QACL,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,uBAAuB,GAAG,WAAW,CAAC,wBAAwB,CAAC,CAAC;QACvG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;KAChD;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AA3BD,8CA2BC;AAED,SAAgB,aAAa,CAAC,SAAsC,EAAE,GAAsB;IAC1F,IAAI,QAAQ,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC;IAE/E,IAAI,SAAS,EAAE;QACb,QAAQ,SAAS,CAAC,MAAM,EAAE;YACxB,KAAK,OAAO,CAAC;YACb,KAAK,KAAK;gBACR,QAAQ,IAAI,GAAG,CAAC;gBAChB,MAAM;SACT;KACF;IAED,OAAO,CACL,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC1C,GAAG;QACH,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC3C,GAAG;QACH,CAAC,QAAQ,IAAI,EAAE,CAAC;QAChB,KAAK;QACL,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,iBAAiB,CAAC,UAAU,CAAC,CACtE,CAAC;AACJ,CAAC;AArBD,sCAqBC","file":"utils.js","sourcesContent":["import { application } from '../../application';\nimport type { IContext2d, ITextStyleParams, IRichTextParagraphCharacter } from '../../interface';\n\nexport const DIRECTION_KEY = {\n horizontal: {\n width: 'width',\n height: 'height',\n left: 'left',\n top: 'top',\n x: 'x',\n y: 'y',\n bottom: 'bottom'\n },\n vertical: {\n width: 'height',\n height: 'width',\n left: 'top',\n top: 'left',\n x: 'y',\n y: 'x',\n bottom: 'right'\n }\n};\n\nconst defaultFormatting = {\n fontSize: 16,\n fontFamily: 'sans-serif',\n fill: true,\n stroke: false,\n fontWeight: 'normal',\n lineHeight: 'normal',\n fontStyle: 'normal', // normal, italic, oblique\n textDecoration: 'none', // none, underline, line-through\n textAlign: 'left', // left, right, center\n script: 'normal' // normal, sub, super\n};\nconst nbsp = String.fromCharCode(160);\n\nexport const regLetter = /\\w|\\(|\\)|-/;\nconst regPunctuation = /[.?!,;:/,。?!、;:]/;\nexport const regFirstSpace = /\\S/;\n\nconst setTextStyle = (ctx: IContext2d, character: IRichTextParagraphCharacter) => {\n let fontSize = character.fontSize || 16;\n switch (character.script) {\n case 'super':\n case 'sub':\n fontSize *= 0.8;\n break;\n }\n\n ctx.setTextStyle({\n textAlign: 'left',\n textBaseline: character.textBaseline || 'alphabetic',\n fontStyle: character.fontStyle || '',\n fontWeight: character.fontWeight || '',\n fontSize,\n fontFamily: character.fontFamily || 'sans-serif'\n } as ITextStyleParams);\n};\n\n// Applies the style of a run to the canvas context\nexport function applyFillStyle(ctx: IContext2d, character: IRichTextParagraphCharacter) {\n const fillStyle = (character && (character.fill as string)) || defaultFormatting.fill;\n if (!fillStyle) {\n ctx.globalAlpha = 0;\n return;\n }\n\n const { fillOpacity = 1, opacity = 1 } = character;\n\n ctx.globalAlpha = fillOpacity * opacity;\n ctx.fillStyle = fillStyle as string;\n\n setTextStyle(ctx, character);\n}\n\nexport function applyStrokeStyle(ctx: IContext2d, character: IRichTextParagraphCharacter) {\n const strokeStyle = (character && (character.stroke as string)) || (defaultFormatting.stroke as any);\n if (!strokeStyle) {\n ctx.globalAlpha = 0;\n return;\n }\n\n const { strokeOpacity = 1, opacity = 1 } = character;\n\n ctx.globalAlpha = strokeOpacity * opacity;\n ctx.lineWidth = character && typeof character.lineWidth === 'number' ? character.lineWidth : 1;\n ctx.strokeStyle = strokeStyle as string;\n\n setTextStyle(ctx, character);\n}\n\nexport function prepareContext(ctx: IContext2d) {\n ctx.setTextStyle({\n textAlign: 'left',\n textBaseline: 'bottom'\n });\n}\n\n// 确认达到availableWidth的字符串截取index\nexport function getStrByWithDom(\n desc: string,\n width: number,\n style: string,\n guessIndex: number,\n needTestLetter?: boolean\n): number {\n desc = desc.replace(/\\s/g, nbsp);\n\n // 测量用DOM\n const span = document.createElement('span');\n span.setAttribute('style', style);\n span.style.visibility = 'hidden';\n span.style.whiteSpace = 'nowrap';\n document.body.appendChild(span);\n\n // 测量从头到当前位置宽度以及从头到下一个字符位置宽度\n let index = guessIndex;\n let temp = desc.slice(0, index);\n span.innerText = temp;\n let tempWidth = span.offsetWidth;\n\n let tempNext = desc.slice(0, index + 1);\n span.innerText = tempNext;\n let tempWidthNext = span.offsetWidth;\n\n // 到当前位置宽度 < width && 到下一个字符位置宽度 > width时,认为找到准确阶段位置\n while (tempWidth > width || tempWidthNext <= width) {\n if (tempWidth > width) {\n index--;\n } else {\n index++;\n }\n\n temp = desc.slice(0, index);\n span.innerText = temp;\n tempWidth = span.offsetWidth;\n\n tempNext = desc.slice(0, index + 1);\n span.innerText = tempNext;\n tempWidthNext = span.offsetWidth;\n }\n\n // 处理特殊情况\n if (needTestLetter) {\n index = testLetter(desc, index);\n }\n\n document.body.removeChild(span);\n return index;\n}\nexport function getStrByWithCanvas(\n desc: string,\n width: number,\n character: IRichTextParagraphCharacter,\n // ctx: IContext2d,\n guessIndex: number,\n needTestLetter?: boolean\n): number {\n if (!width || width <= 0) {\n return 0;\n }\n const textMeasure = application.graphicUtil.textMeasure;\n // const measurement = textMeasure.measureText(text, character);\n\n // 测量从头到当前位置宽度以及从头到下一个字符位置宽度\n let index = guessIndex;\n let temp = desc.slice(0, index);\n let tempWidth = Math.floor(textMeasure.measureText(temp, character).width);\n\n let tempNext = desc.slice(0, index + 1);\n let tempWidthNext = Math.floor(textMeasure.measureText(tempNext, character).width);\n\n // 到当前位置宽度 < width && 到下一个字符位置宽度 > width时,认为找到准确阶段位置\n while (tempWidth > width || tempWidthNext <= width) {\n if (tempWidth > width) {\n index--;\n } else {\n index++;\n }\n\n if (index > desc.length) {\n index = desc.length;\n break;\n } else if (index < 0) {\n index = 0;\n break;\n }\n\n temp = desc.slice(0, index);\n tempWidth = Math.floor(textMeasure.measureText(temp, character).width);\n\n tempNext = desc.slice(0, index + 1);\n tempWidthNext = Math.floor(textMeasure.measureText(tempNext, character).width);\n }\n\n // 处理特殊情况\n if (needTestLetter) {\n index = testLetter(desc, index);\n }\n\n return index;\n}\n\nexport function testLetter(string: string, index: number): number {\n let i = index;\n // 切分前后都是英文字母数字下划线,向前找到非英文字母处换行\n while (\n (regLetter.test(string[i - 1]) && regLetter.test(string[i])) ||\n // 行首标点符号处理\n regPunctuation.test(string[i])\n ) {\n i--;\n // 无法满足所有条件,放弃匹配,直接截断,避免陷入死循环\n if (i <= 0) {\n return index;\n }\n }\n return i;\n}\n\n// 测量文字详细信息\nexport function measureTextDom(\n text: string,\n style: string\n): { ascent?: number; height?: number; descent?: number; width?: number } {\n let div;\n\n const span = document.createElement('span');\n const block = document.createElement('div');\n div = document.createElement('div');\n\n block.style.display = 'inline-block';\n block.style.width = '1px';\n block.style.height = '0';\n\n div.style.visibility = 'hidden';\n div.style.position = 'absolute';\n div.style.top = '0';\n div.style.left = '0';\n div.style.width = '500px';\n div.style.height = '200px';\n div.style.whiteSpace = 'nowrap';\n\n div.appendChild(span);\n div.appendChild(block);\n document.body.appendChild(div);\n\n const result: { ascent?: number; height?: number; descent?: number; width?: number } = {};\n try {\n span.setAttribute('style', style);\n span.style.whiteSpace = 'nowrap';\n span.style.display = 'inline-block';\n\n span.innerHTML = '';\n span.appendChild(document.createTextNode(text.replace(/\\s/g, nbsp)));\n\n block.style.verticalAlign = 'baseline';\n result.ascent = block.offsetTop - span.offsetTop;\n block.style.verticalAlign = 'bottom';\n result.height = block.offsetTop - span.offsetTop;\n result.descent = result.height - result.ascent;\n result.width = span.offsetWidth;\n } finally {\n div.parentNode?.removeChild(div);\n div = null;\n }\n return result;\n}\n\n// 测量文字详细信息\nexport function measureTextCanvas(\n text: string,\n character: IRichTextParagraphCharacter\n): { ascent: number; height: number; descent: number; width: number } {\n const textMeasure = application.graphicUtil.textMeasure;\n const measurement = textMeasure.measureText(text, character) as TextMetrics;\n const result: { ascent: number; height: number; descent: number; width: number } = {\n ascent: 0,\n height: 0,\n descent: 0,\n width: 0\n };\n if (\n typeof measurement.actualBoundingBoxAscent !== 'number' ||\n typeof measurement.actualBoundingBoxDescent !== 'number'\n ) {\n result.width = Math.floor(measurement.width);\n result.height = character.fontSize || 0;\n result.ascent = result.height;\n result.descent = 0;\n } else {\n result.width = Math.floor(measurement.width);\n result.height = Math.floor(measurement.actualBoundingBoxAscent + measurement.actualBoundingBoxDescent);\n result.ascent = Math.floor(measurement.actualBoundingBoxAscent);\n result.descent = result.height - result.ascent;\n }\n return result;\n}\n\nexport function getFontString(character: IRichTextParagraphCharacter, ctx: IContext2d | null) {\n let fontSize = (character && character.fontSize) || defaultFormatting.fontSize;\n\n if (character) {\n switch (character.script) {\n case 'super':\n case 'sub':\n fontSize *= 0.8;\n break;\n }\n }\n\n return (\n ((character && character.fontStyle) || '') +\n ' ' +\n ((character && character.fontWeight) || '') +\n ' ' +\n (fontSize || 12) +\n 'px ' +\n ((character && character.fontFamily) || defaultFormatting.fontFamily)\n );\n}\n"]}
|
|
@@ -120,7 +120,7 @@ export declare class RichText extends Graphic<IRichTextGraphicAttribute> impleme
|
|
|
120
120
|
fillOpacity: number;
|
|
121
121
|
strokeOpacity: number;
|
|
122
122
|
};
|
|
123
|
-
doUpdateFrameCache(): void;
|
|
123
|
+
doUpdateFrameCache(tc?: IRichTextCharacter[]): void;
|
|
124
124
|
clone(): RichText;
|
|
125
125
|
setStage(stage?: IStage, layer?: ILayer): void;
|
|
126
126
|
bindIconEvent(): void;
|
package/cjs/graphic/richtext.js
CHANGED
|
@@ -123,9 +123,9 @@ class RichText extends graphic_1.Graphic {
|
|
|
123
123
|
strokeOpacity: strokeOpacity
|
|
124
124
|
}, config);
|
|
125
125
|
}
|
|
126
|
-
doUpdateFrameCache() {
|
|
126
|
+
doUpdateFrameCache(tc) {
|
|
127
127
|
var _a;
|
|
128
|
-
const {textConfig:
|
|
128
|
+
const {textConfig: _tc = [], maxWidth: maxWidth, maxHeight: maxHeight, width: width, height: height, ellipsis: ellipsis, wordBreak: wordBreak, verticalDirection: verticalDirection, textAlign: textAlign, textBaseline: textBaseline, layoutDirection: layoutDirection, singleLine: singleLine, disableAutoWrapLine: disableAutoWrapLine} = this.attribute, paragraphs = [], textConfig = null != tc ? tc : _tc;
|
|
129
129
|
for (let i = 0; i < textConfig.length; i++) if ("image" in textConfig[i]) {
|
|
130
130
|
const config = this.combinedStyleToCharacter(textConfig[i]), iconCache = config.id && this._frameCache && this._frameCache.icons && this._frameCache.icons.get(config.id);
|
|
131
131
|
if (iconCache) paragraphs.push(iconCache); else {
|