@visactor/vrender-core 0.19.10-beta.1 → 0.19.10

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphic/graphic.ts"],"names":[],"mappings":"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","file":"graphic.js","sourcesContent":["import type { ICustomPath2D } from './../interface/path';\nimport type { OBBBounds, Dict, IPointLike, IAABBBounds } from '@visactor/vutils';\nimport {\n AABBBounds,\n Matrix,\n normalTransform,\n Point,\n isNil,\n has,\n isString,\n isValidUrl,\n isBase64,\n isObject\n} from '@visactor/vutils';\nimport type {\n GraphicType,\n IAnimateConfig,\n IGraphicAttribute,\n IGraphic,\n IGraphicAnimateParams,\n IGraphicJson,\n ISetAttributeContext,\n ITransform,\n GraphicReleaseStatus\n} from '../interface/graphic';\nimport { Node } from './node-tree';\nimport type {\n IAnimate,\n IAnimateTarget,\n IGlyphGraphicAttribute,\n IGroup,\n ILayer,\n IPickerService,\n IShadowRoot,\n IStage,\n IStep,\n ISubAnimate\n} from '../interface';\nimport { EventTarget, CustomEvent } from '../event';\nimport { DefaultTransform } from './config';\nimport { application } from '../application';\nimport { Animate, DefaultStateAnimateConfig } from '../animate';\nimport { interpolateColor } from '../color-string/interpolate';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { getTheme } from './theme';\nimport { ResourceLoader } from '../resource-loader/loader';\nimport { AttributeUpdateType, IContainPointMode, UpdateTag } from '../common/enums';\n\n/**\n * pathProxy参考自zrender\n * BSD 3-Clause License\n\n Copyright (c) 2017, Baidu Inc.\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst tempMatrix = new Matrix();\nconst tempBounds = new AABBBounds();\n\nexport const PURE_STYLE_KEY = [\n 'stroke',\n 'opacity',\n 'strokeOpacity',\n 'lineDash',\n 'lineDashOffset',\n 'lineCap',\n 'lineJoin',\n 'miterLimit',\n 'fill',\n 'fillOpacity'\n];\n\nexport const GRAPHIC_UPDATE_TAG_KEY = [\n 'lineWidth',\n // 'lineCap',\n // 'lineJoin',\n // 'miterLimit',\n 'scaleX',\n 'scaleY',\n 'angle',\n 'anchor',\n 'visible'\n];\n\nconst tempConstantXYKey = ['x', 'y'];\nconst tempConstantScaleXYKey = ['scaleX', 'scaleY'];\nconst tempConstantAngleKey = ['angle'];\n\nconst point = new Point();\n\nexport const NOWORK_ANIMATE_ATTR = {\n strokeSeg: 1,\n boundsPadding: 2,\n pickMode: 1,\n boundsMode: 1,\n customPickShape: 1,\n pickable: 1,\n childrenPickable: 1,\n visible: 1,\n zIndex: 1,\n layout: 1,\n keepDirIn3d: 1,\n globalZIndex: 1,\n\n outerBorder: 1,\n innerBorder: 1,\n lineDash: 1,\n lineCap: 1,\n lineJoin: 1,\n miterLimit: 2,\n strokeBoundsBuffer: 2,\n\n scaleCenter: 1,\n anchor: 1,\n anchor3d: 1,\n postMatrix: 1,\n\n backgroundMode: 2,\n background: 1,\n texture: 1,\n cursor: 1,\n html: 1\n};\n\n/**\n * globalTransMatrix更新逻辑\n * 1. group的transform修改,会下发到所有下层group,将所有下层的tag修改\n * 2. 叶子graphic每次获取globalTransMatrix都重新计算\n * 3. 所有节点的transform修改,或者globalTransform修改,都会下发到自己的shadowRoot上\n */\n\nexport abstract class Graphic<T extends Partial<IGraphicAttribute> = Partial<IGraphicAttribute>>\n extends Node\n implements IGraphic<T>, IAnimateTarget\n{\n /**\n * Mixes all enumerable properties and methods from a source object to Element.\n * @param source - The source of properties and methods to mix in.\n */\n static mixin(source: Dict<any>): void {\n // in ES8/ES2017, this would be really easy:\n // Object.defineProperties(Element.prototype, Object.getOwnPropertyDescriptors(source));\n\n // get all the enumerable property keys\n const keys = Object.keys(source);\n\n // loop through properties\n for (let i = 0; i < keys.length; ++i) {\n const propertyName = keys[i];\n\n // Set the property using the property descriptor - this works for accessors and normal value properties\n Object.defineProperty(\n Graphic.prototype,\n propertyName,\n Object.getOwnPropertyDescriptor(source, propertyName) as PropertyDecorator\n );\n }\n }\n\n declare _events?: any;\n\n declare onBeforeAttributeUpdate?: (\n val: any,\n attributes: Partial<T>,\n key: null | string | string[],\n context?: ISetAttributeContext\n ) => T | undefined;\n declare parent: any;\n\n declare resources?: Map<\n string,\n { state: 'init' | 'loading' | 'success' | 'fail'; data?: HTMLImageElement | HTMLCanvasElement }\n >;\n declare backgroundImg?: boolean;\n\n declare type: GraphicType;\n declare prefixed: string;\n declare numberType: number;\n declare isContainer?: boolean;\n declare valid: boolean;\n declare stage?: IStage;\n declare layer?: ILayer;\n declare incremental?: number;\n declare glyphHost?: IGraphic<IGlyphGraphicAttribute>;\n declare _onSetStage?: (g: IGraphic, stage: IStage, layer: ILayer) => void;\n // declare _beforeAttributeUpdate?: (key: string | string, value: any) => void;\n // 标记是否是在3d模式下\n declare in3dMode?: boolean;\n\n // aabbBounds,所有图形都需要有,所以初始化即赋值\n protected declare _AABBBounds: AABBBounds;\n get AABBBounds(): AABBBounds {\n return this.tryUpdateAABBBounds(this.attribute.boundsMode === 'imprecise');\n }\n // 具有旋转的包围盒,部分图元需要,动态初始化\n protected declare _OBBBounds?: OBBBounds;\n get OBBBounds(): OBBBounds {\n return this.tryUpdateOBBBounds();\n }\n protected declare _globalAABBBounds: AABBBounds;\n // 全局包围盒,部分图元需要,动态初始化,建议使用AABBBounds\n get globalAABBBounds(): AABBBounds {\n return this.tryUpdateGlobalAABBBounds();\n }\n protected declare _transMatrix: Matrix;\n get transMatrix(): Matrix {\n return this.tryUpdateLocalTransMatrix(true);\n }\n protected declare _globalTransMatrix: Matrix;\n get globalTransMatrix(): Matrix {\n return this.tryUpdateGlobalTransMatrix(true);\n }\n protected declare _updateTag: number;\n\n // 上次更新的stamp\n declare stamp?: number;\n\n declare attribute: T;\n\n declare shadowRoot?: IShadowRoot;\n\n declare releaseStatus?: GraphicReleaseStatus;\n\n /** 记录state对应的图形属性 */\n declare states?: Record<string, Partial<T>>;\n /** 当前state值 */\n declare currentStates?: string[];\n /** TODO: state更新对应的动画配置 */\n declare stateAnimateConfig?: IAnimateConfig;\n /** 记录应用state之前,attribute对应的原始图形属性 */\n declare normalAttrs?: Partial<T>;\n /** 获取state图形属性的方法 */\n declare stateProxy?: (stateName: string, targetStates?: string[]) => T;\n declare animates: Map<string | number, IAnimate>;\n\n declare nextAttrs?: T;\n declare prevAttrs?: T;\n declare finalAttrs?: T;\n\n declare pathProxy?: ICustomPath2D;\n // 依附于某个theme,如果该节点不存在parent,那么这个Theme就作为节点的Theme,避免添加到节点前计算属性\n declare attachedThemeGraphic?: IGraphic;\n\n constructor(params: T = {} as T) {\n super();\n this._AABBBounds = new AABBBounds();\n this._updateTag = UpdateTag.INIT;\n this.attribute = params;\n this.valid = this.isValid();\n if (params.background) {\n this.loadImage((params.background as any).background ?? params.background, true);\n } else if (params.shadowGraphic) {\n this.setShadowGraphic(params.shadowGraphic);\n }\n }\n\n setMode(mode: '2d' | '3d') {\n mode === '3d' ? this.set3dMode() : this.set2dMode();\n }\n\n set3dMode() {\n this.in3dMode = true;\n }\n set2dMode() {\n this.in3dMode = false;\n }\n getOffsetXY(attr?: ITransform, includeScroll: boolean = false) {\n const { dx = attr.dx, dy = attr.dy } = this.attribute;\n if (includeScroll && this.parent) {\n // const groupTheme = getTheme(this.parent).group;\n const attribute = this.parent.attribute;\n point.x = dx + (attribute.scrollX ?? 0);\n point.y = dy + (attribute.scrollY ?? 0);\n } else {\n point.x = dx;\n point.y = dy;\n }\n return point;\n }\n\n onAnimateBind(animate: IAnimate | ISubAnimate) {\n this._emitCustomEvent('animate-bind', animate);\n }\n\n protected tryUpdateAABBBounds(full?: boolean): AABBBounds {\n if (!this.shouldUpdateAABBBounds()) {\n return this._AABBBounds;\n }\n if (!this.valid) {\n this._AABBBounds.clear();\n return this._AABBBounds;\n }\n\n application.graphicService.beforeUpdateAABBBounds(this, this.stage, true, this._AABBBounds);\n const bounds = this.doUpdateAABBBounds(full);\n // this.addUpdateLayoutTag();\n application.graphicService.afterUpdateAABBBounds(this, this.stage, this._AABBBounds, this, true);\n return bounds;\n }\n\n protected combindShadowAABBBounds(bounds: IAABBBounds) {\n // 合并shadowRoot的Bounds\n if (this.shadowRoot) {\n const b = this.shadowRoot.AABBBounds.clone();\n bounds.union(b);\n }\n }\n\n protected abstract doUpdateAABBBounds(full?: boolean): AABBBounds;\n\n protected abstract tryUpdateOBBBounds(): OBBBounds;\n\n protected tryUpdateGlobalAABBBounds(): AABBBounds {\n const b = this.AABBBounds;\n if (!this._globalAABBBounds) {\n this._globalAABBBounds = b.clone();\n } else {\n this._globalAABBBounds.setValue(b.x1, b.y1, b.x2, b.y2);\n }\n if (this._globalAABBBounds.empty()) {\n return this._globalAABBBounds;\n }\n // 使用parent的grloalAABBBounds\n // todo: 考虑是否需要性能优化\n if (this.parent) {\n this._globalAABBBounds.transformWithMatrix((this.parent as IGroup).globalTransMatrix);\n }\n return this._globalAABBBounds;\n }\n\n /**\n * 这里都是叶子节点的UpdateGlobalTransMatrix函数,只要走进来就直接计算\n * @param clearTag\n * @returns\n */\n protected tryUpdateGlobalTransMatrix(clearTag: boolean = true): Matrix {\n if (!this._globalTransMatrix) {\n this._globalTransMatrix = this.parent\n ? (this.parent as IGroup).globalTransMatrix.clone()\n : this.transMatrix.clone();\n } else if (this.parent) {\n const m = (this.parent as IGroup).globalTransMatrix;\n this._globalTransMatrix.setValue(m.a, m.b, m.c, m.d, m.e, m.f);\n }\n if (this.shouldUpdateGlobalMatrix()) {\n this.doUpdateGlobalMatrix();\n }\n return this._globalTransMatrix;\n }\n\n shouldUpdateGlobalMatrix(): boolean {\n return true;\n }\n\n protected tryUpdateLocalTransMatrix(clearTag: boolean = true) {\n if (!this._transMatrix) {\n this._transMatrix = new Matrix();\n }\n if (this.shouldUpdateLocalMatrix()) {\n this.doUpdateLocalMatrix();\n clearTag && this.clearUpdateLocalPositionTag();\n }\n return this._transMatrix;\n }\n\n shouldUpdateAABBBounds(): boolean {\n // 如果存在shadowRoot,那么判断shadowRoot是否需要更新\n if (this.shadowRoot) {\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS) || this.shadowRoot.shouldUpdateAABBBounds();\n }\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS);\n }\n\n // 自身变化导致的AABBBounds的变化\n shouldSelfChangeUpdateAABBBounds(): boolean {\n // 如果存在shadowRoot,那么判断shadowRoot是否需要更新\n if (this.shadowRoot) {\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS) || this.shadowRoot.shouldUpdateAABBBounds();\n }\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS);\n }\n\n protected shouldUpdateLocalMatrix(): boolean {\n return !!(this._updateTag & UpdateTag.UPDATE_LOCAL_MATRIX);\n }\n\n isValid(): boolean {\n const attribute = this.attribute;\n return Number.isFinite((attribute.x ?? 0) + (attribute.y ?? 0));\n }\n\n protected _validNumber(num?: number) {\n return num == null || Number.isFinite(num);\n }\n\n shouldUpdateShape(): boolean {\n return !!(this._updateTag & UpdateTag.UPDATE_SHAPE);\n }\n clearUpdateShapeTag() {\n this._updateTag &= UpdateTag.CLEAR_SHAPE;\n }\n\n /**\n * 是否包含某个点(点需要是全局坐标系)\n * @param x\n * @param y\n * @param mode\n * @returns\n */\n containsPoint(x: number, y: number, mode: IContainPointMode, picker?: IPickerService): boolean {\n if (!picker) {\n return false;\n }\n if (mode === IContainPointMode.GLOBAL) {\n // 转换x,y更精准\n const point = new Point(x, y);\n if (this.parent) {\n this.parent.globalTransMatrix.transformPoint(point, point);\n }\n x = point.x;\n y = point.y;\n }\n return picker.containsPoint(this, { x, y });\n }\n\n setAttributes(params: Partial<T>, forceUpdateTag: boolean = false, context?: ISetAttributeContext) {\n params =\n (this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate(params, this.attribute, null, context)) || params;\n\n if (params.background) {\n this.loadImage(params.background, true);\n } else if (params.shadowGraphic) {\n this.setShadowGraphic(params.shadowGraphic);\n }\n this._setAttributes(params, forceUpdateTag, context);\n }\n\n _setAttributes(params: Partial<T>, forceUpdateTag: boolean = false, context?: ISetAttributeContext) {\n const keys = Object.keys(params);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n\n this.attribute[key] = params[key];\n }\n this.valid = this.isValid();\n // 没有设置shape&bounds的tag\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTags(keys))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n }\n\n setAttribute(key: string, value: any, forceUpdateTag?: boolean, context?: ISetAttributeContext) {\n const params =\n this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate({ [key]: value }, this.attribute, key, context);\n if (!params) {\n if (!isNil(this.normalAttrs?.[key])) {\n this.normalAttrs[key] = value;\n } else {\n this.attribute[key] = value;\n this.valid = this.isValid();\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTag(key))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n }\n } else {\n this._setAttributes(params, forceUpdateTag, context);\n }\n if (key === 'background') {\n this.loadImage(value, true);\n } else if (key === 'shadowGraphic') {\n this.setShadowGraphic(value);\n }\n }\n\n protected needUpdateTags(keys: string[], k: string[] = GRAPHIC_UPDATE_TAG_KEY): boolean {\n for (let i = 0; i < k.length; i++) {\n const attrKey = k[i];\n if (keys.indexOf(attrKey) !== -1) {\n return true;\n }\n }\n return false;\n }\n\n protected needUpdateTag(key: string, k: string[] = GRAPHIC_UPDATE_TAG_KEY): boolean {\n for (let i = 0; i < k.length; i++) {\n const attrKey = k[i];\n if (key === attrKey) {\n return true;\n }\n }\n return false;\n }\n\n initAttributes(params: T) {\n // this.setAttributes(params, true);\n const context = { type: AttributeUpdateType.INIT };\n params =\n (this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate(params, this.attribute, null, context)) || params;\n this.attribute = params;\n if (params.background) {\n this.loadImage(params.background, true);\n } else if (params.shadowGraphic) {\n this.setShadowGraphic(params.shadowGraphic);\n }\n this._updateTag = UpdateTag.INIT;\n this.valid = this.isValid();\n this.onAttributeUpdate(context);\n }\n\n translate(x: number, y: number) {\n if (x === 0 && y === 0) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.TRANSLATE\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ x, y }, this.attribute, tempConstantXYKey, context);\n if (params) {\n x = params.x;\n y = params.y;\n delete params.x;\n delete params.y;\n this._setAttributes(params);\n }\n const attribute = this.attribute;\n const postMatrix = attribute.postMatrix;\n if (!postMatrix) {\n attribute.x = (attribute.x ?? DefaultTransform.x) + x;\n attribute.y = (attribute.y ?? DefaultTransform.y) + y;\n } else {\n application.transformUtil.fromMatrix(postMatrix, postMatrix).translate(x, y);\n }\n\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n translateTo(x: number, y: number) {\n const attribute = this.attribute;\n if (attribute.x === x && attribute.y === y) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.TRANSLATE_TO\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ x, y }, this.attribute, tempConstantXYKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n attribute.x = x;\n attribute.y = y;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n scale(scaleX: number, scaleY: number, scaleCenter?: IPointLike) {\n if (scaleX === 1 && scaleY === 1) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.SCALE\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ scaleX, scaleY, scaleCenter }, this.attribute, tempConstantScaleXYKey, context);\n if (params) {\n scaleX = params.scaleX;\n scaleY = params.scaleY;\n delete params.scaleX;\n delete params.scaleY;\n this._setAttributes(params);\n }\n const attribute = this.attribute;\n if (!scaleCenter) {\n attribute.scaleX = (attribute.scaleX ?? DefaultTransform.scaleX) * scaleX;\n attribute.scaleY = (attribute.scaleY ?? DefaultTransform.scaleY) * scaleY;\n } else {\n let { postMatrix } = this.attribute;\n if (!postMatrix) {\n postMatrix = new Matrix();\n attribute.postMatrix = postMatrix;\n }\n application.transformUtil.fromMatrix(postMatrix, postMatrix).scale(scaleX, scaleY, scaleCenter);\n }\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n scaleTo(scaleX: number, scaleY: number) {\n const attribute = this.attribute;\n if (attribute.scaleX === scaleX && attribute.scaleY === scaleY) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.SCALE_TO\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ scaleX, scaleY }, this.attribute, tempConstantScaleXYKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n attribute.scaleX = scaleX;\n attribute.scaleY = scaleY;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n rotate(angle: number, rotateCenter?: IPointLike) {\n if (angle === 0) {\n return this;\n }\n const context = { type: AttributeUpdateType.ROTATE };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ angle, rotateCenter }, this.attribute, tempConstantAngleKey, context);\n if (params) {\n delete params.angle;\n this._setAttributes(params, false, context);\n // return this;\n }\n const attribute = this.attribute;\n if (!rotateCenter) {\n attribute.angle = (attribute.angle ?? DefaultTransform.angle) + angle;\n } else {\n let { postMatrix } = this.attribute;\n if (!postMatrix) {\n postMatrix = new Matrix();\n attribute.postMatrix = postMatrix;\n }\n application.transformUtil.fromMatrix(postMatrix, postMatrix).rotate(angle, rotateCenter);\n }\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n rotateTo(angle: number) {\n const attribute = this.attribute;\n if (attribute.angle === angle) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.ROTATE_TO\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate(angle, this.attribute, tempConstantAngleKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n attribute.angle = angle;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n skewTo(b: number, c: number) {\n return this;\n }\n\n animate(params?: IGraphicAnimateParams) {\n if (!this.animates) {\n this.animates = new Map();\n }\n const animate = new Animate(params?.id, this.stage && this.stage.getTimeline()).bind(this);\n if (params) {\n const { onStart, onFrame, onEnd, onRemove } = params;\n onStart != null && animate.onStart(onStart);\n onFrame != null && animate.onFrame(onFrame);\n onEnd != null && animate.onEnd(onEnd);\n onRemove != null && animate.onRemove(onRemove);\n animate.interpolateFunc = params.interpolate;\n }\n this.animates.set(animate.id, animate);\n animate.onRemove(() => {\n this.animates.delete(animate.id);\n });\n\n return animate;\n }\n\n onAttributeUpdate(context?: ISetAttributeContext) {\n if (context && context.skipUpdateCallback) {\n return;\n }\n application.graphicService.onAttributeUpdate(this);\n this._emitCustomEvent('afterAttributeUpdate', context);\n }\n\n // hasListener(event: string) {\n // const prefix = this.prefixed;\n // var evt = prefix ? prefix + event : event;\n // return this._events[evt];\n // }\n\n update(d?: { bounds: boolean; trans: boolean }) {\n if (d) {\n d.bounds && this.tryUpdateAABBBounds(this.attribute.boundsMode === 'imprecise');\n d.trans && this.tryUpdateLocalTransMatrix();\n } else {\n this.tryUpdateAABBBounds(this.attribute.boundsMode === 'imprecise');\n this.tryUpdateLocalTransMatrix();\n }\n }\n\n hasState(stateName?: string) {\n if (!this.currentStates || !this.currentStates.length) {\n return false;\n }\n\n if (!isNil(stateName)) {\n return this.currentStates.includes(stateName);\n }\n\n return true;\n }\n getState(stateName: string) {\n return this.states?.[stateName];\n }\n\n applyStateAttrs(attrs: Partial<T>, stateNames: string[], hasAnimation?: boolean, isClear?: boolean) {\n if (hasAnimation) {\n const keys = Object.keys(attrs);\n const noWorkAttrs = this.getNoWorkAnimateAttr();\n const animateAttrs: Partial<T> = {};\n let noAnimateAttrs: Partial<T> | undefined;\n\n keys.forEach(key => {\n if (!noWorkAttrs[key]) {\n animateAttrs[key] = isClear && attrs[key] === undefined ? this.getDefaultAttribute(key) : attrs[key];\n } else {\n if (!noAnimateAttrs) {\n noAnimateAttrs = {};\n }\n noAnimateAttrs[key] = attrs[key];\n }\n });\n\n const animate = this.animate();\n (animate as any).stateNames = stateNames;\n animate.to(\n animateAttrs,\n this.stateAnimateConfig?.duration ?? DefaultStateAnimateConfig.duration,\n this.stateAnimateConfig?.easing ?? DefaultStateAnimateConfig.easing\n );\n noAnimateAttrs && this.setAttributes(noAnimateAttrs, false, { type: AttributeUpdateType.STATE });\n } else {\n this.setAttributes(attrs, false, { type: AttributeUpdateType.STATE });\n }\n }\n\n updateNormalAttrs(stateAttrs: Partial<T>) {\n const newNormalAttrs = {};\n if (this.normalAttrs) {\n Object.keys(stateAttrs).forEach(key => {\n if (key in this.normalAttrs) {\n newNormalAttrs[key] = this.normalAttrs[key];\n delete this.normalAttrs[key];\n } else {\n newNormalAttrs[key] = this.getNormalAttribute(key);\n }\n });\n Object.keys(this.normalAttrs).forEach(key => {\n stateAttrs[key] = this.normalAttrs[key];\n });\n } else {\n Object.keys(stateAttrs).forEach(key => {\n newNormalAttrs[key] = this.getNormalAttribute(key);\n });\n }\n\n this.normalAttrs = newNormalAttrs;\n }\n\n protected stopStateAnimates(type: 'start' | 'end' = 'end') {\n if (this.animates) {\n this.animates.forEach(animate => {\n if ((animate as any).stateNames) {\n animate.stop(type);\n this.animates.delete(animate.id);\n }\n });\n }\n }\n\n private getNormalAttribute(key: string) {\n let value = this.attribute[key];\n\n if (this.animates) {\n this.animates.forEach(animate => {\n if ((animate as any).stateNames) {\n const endProps = animate.getEndProps();\n\n if (has(endProps, key)) {\n value = endProps[key];\n }\n }\n });\n }\n\n return value;\n }\n\n clearStates(hasAnimation?: boolean) {\n this.stopStateAnimates();\n if (this.hasState() && this.normalAttrs) {\n this.currentStates = [];\n this.applyStateAttrs(this.normalAttrs, this.currentStates, hasAnimation, true);\n } else {\n this.currentStates = [];\n }\n this.normalAttrs = null;\n }\n\n removeState(stateName: string, hasAnimation?: boolean) {\n const index = this.currentStates ? this.currentStates.indexOf(stateName) : -1;\n\n if (index >= 0) {\n const currentStates = this.currentStates.filter(state => state !== stateName);\n\n this.useStates(currentStates, hasAnimation);\n }\n }\n\n toggleState(stateName: string, hasAnimation?: boolean) {\n if (this.hasState(stateName)) {\n this.removeState(stateName, hasAnimation);\n } else {\n const index = this.currentStates ? this.currentStates.indexOf(stateName) : -1;\n if (index < 0) {\n const nextStates = this.currentStates ? this.currentStates.slice() : [];\n nextStates.push(stateName);\n this.useStates(nextStates, hasAnimation);\n }\n }\n }\n\n addState(stateName: string, keepCurrentStates?: boolean, hasAnimation?: boolean) {\n if (\n this.currentStates &&\n this.currentStates.includes(stateName) &&\n (keepCurrentStates || this.currentStates.length === 1)\n ) {\n return;\n }\n\n const newStates =\n keepCurrentStates && this.currentStates?.length ? this.currentStates.concat([stateName]) : [stateName];\n\n this.useStates(newStates, hasAnimation);\n }\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!states.length) {\n this.clearStates(hasAnimation);\n return;\n }\n\n const isChange =\n this.currentStates?.length !== states.length ||\n states.some((stateName, index) => this.currentStates[index] !== stateName);\n\n if (!isChange) {\n return;\n }\n this.stopStateAnimates();\n\n const stateAttrs = {};\n states.forEach(stateName => {\n const attrs = this.stateProxy ? this.stateProxy(stateName, states) : this.states?.[stateName];\n\n if (attrs) {\n Object.assign(stateAttrs, attrs);\n }\n });\n\n this.updateNormalAttrs(stateAttrs);\n\n this.currentStates = states;\n this.applyStateAttrs(stateAttrs, states, hasAnimation);\n }\n\n addUpdateBoundTag() {\n this._updateTag |= UpdateTag.UPDATE_BOUNDS; // for bounds\n if (this.parent) {\n this.parent.addChildUpdateBoundTag();\n }\n if (this.glyphHost) {\n this.glyphHost.addUpdateBoundTag();\n }\n }\n\n addUpdateShapeTag() {\n this._updateTag |= UpdateTag.UPDATE_SHAPE; // for shape\n }\n\n addUpdateShapeAndBoundsTag() {\n this._updateTag |= UpdateTag.UPDATE_SHAPE_AND_BOUNDS; // for shape&bounds\n if (this.parent) {\n this.parent.addChildUpdateBoundTag();\n }\n if (this.glyphHost) {\n this.glyphHost.addUpdateBoundTag();\n }\n }\n\n protected updateShapeAndBoundsTagSetted(): boolean {\n return (this._updateTag & UpdateTag.UPDATE_SHAPE_AND_BOUNDS) === UpdateTag.UPDATE_SHAPE_AND_BOUNDS;\n }\n\n protected clearUpdateBoundTag() {\n this._updateTag &= UpdateTag.CLEAR_BOUNDS;\n }\n /**\n * 更新位置tag,包括全局tag和局部tag\n */\n addUpdatePositionTag() {\n // 更新shadowRoot的全局位置\n this.shadowRoot && this.shadowRoot.addUpdateGlobalPositionTag();\n this._updateTag |= UpdateTag.UPDATE_GLOBAL_LOCAL_MATRIX;\n }\n /**\n * 更新全局位置tag\n */\n addUpdateGlobalPositionTag() {\n // 更新shadowRoot的全局位置\n this.shadowRoot && this.shadowRoot.addUpdateGlobalPositionTag();\n this._updateTag |= UpdateTag.UPDATE_GLOBAL_MATRIX;\n }\n /**\n * 清除局部位置tag\n */\n protected clearUpdateLocalPositionTag() {\n this._updateTag &= UpdateTag.CLEAR_LOCAL_MATRIX;\n }\n /**\n * 清除全局位置tag\n */\n protected clearUpdateGlobalPositionTag() {\n this._updateTag &= UpdateTag.CLEAR_GLOBAL_MATRIX;\n }\n\n addUpdateLayoutTag() {\n this._updateTag |= UpdateTag.UPDATE_LAYOUT;\n }\n\n protected clearUpdateLayoutTag() {\n this._updateTag &= UpdateTag.CLEAR_LAYOUT;\n }\n\n protected needUpdateLayout(): boolean {\n return !!(this._updateTag & UpdateTag.UPDATE_LAYOUT);\n }\n\n protected getAnchor(anchor: [string | number, string | number], params: { b?: IAABBBounds }) {\n const _anchor: [number, number] = [0, 0];\n const getBounds = () => {\n if (params.b) {\n return params.b;\n }\n const { scaleX, scaleY, angle } = this.attribute;\n // 拷贝一份,避免计算bounds的过程中计算matrix,然后matrix又修改了bounds\n tempBounds.copy(this._AABBBounds);\n // @ts-ignore\n this.setAttributes({ scaleX: 1, scaleY: 1, angle: 0 });\n params.b = this.AABBBounds.clone();\n this._AABBBounds.copy(tempBounds);\n // @ts-ignore\n this.setAttributes({ scaleX, scaleY, angle });\n return params.b;\n };\n if (typeof anchor[0] === 'string') {\n const ratio = parseFloat(anchor[0]) / 100;\n const bounds = getBounds();\n _anchor[0] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[0] = anchor[0];\n }\n if (typeof anchor[1] === 'string') {\n const ratio = parseFloat(anchor[1]) / 100;\n const bounds = getBounds();\n _anchor[1] = bounds.y1 + (bounds.y2 - bounds.y1) * ratio;\n } else {\n _anchor[1] = anchor[1];\n }\n\n return _anchor;\n }\n\n /**\n * 更新局部matrix的具体函数\n */\n protected doUpdateLocalMatrix() {\n const {\n x = DefaultTransform.x,\n y = DefaultTransform.y,\n scaleX = DefaultTransform.scaleX,\n scaleY = DefaultTransform.scaleY,\n angle = DefaultTransform.angle,\n scaleCenter,\n anchor,\n postMatrix\n } = this.attribute;\n let _anchor: [number, number] = [0, 0];\n const params = {};\n if (anchor) {\n _anchor = this.getAnchor(anchor, params);\n }\n if (scaleCenter && (scaleX !== 1 || scaleY !== 1)) {\n const m = this._transMatrix;\n m.reset();\n m.translate(_anchor[0], _anchor[1]);\n m.rotate(angle);\n m.translate(-_anchor[0], -_anchor[1]);\n\n m.translate(x, y);\n // m.translate(scaleCenter[0] * scaleX, scaleCenter[1] * scaleY);\n // 计算bounds\n _anchor = this.getAnchor(scaleCenter, params);\n application.transformUtil.fromMatrix(m, m).scale(scaleX, scaleY, { x: _anchor[0], y: _anchor[1] });\n // m.translate(-scaleCenter[0], -scaleCenter[1]);\n } else {\n normalTransform(this._transMatrix, this._transMatrix.reset(), x, y, scaleX, scaleY, angle, anchor && _anchor);\n }\n const p = this.getOffsetXY(DefaultTransform);\n this._transMatrix.e += p.x;\n this._transMatrix.f += p.y;\n\n if (postMatrix) {\n const m1 = tempMatrix.setValue(\n postMatrix.a,\n postMatrix.b,\n postMatrix.c,\n postMatrix.d,\n postMatrix.e,\n postMatrix.f\n );\n const m2 = this._transMatrix;\n m1.multiply(m2.a, m2.b, m2.c, m2.d, m2.e, m2.f);\n m2.setValue(m1.a, m1.b, m1.c, m1.d, m1.e, m1.f);\n }\n }\n /**\n * 更新全局matrix的具体函数\n */\n protected doUpdateGlobalMatrix() {\n // 基于parent的matrix修改\n if (this.parent) {\n this._globalTransMatrix.multiply(\n this.transMatrix.a,\n this.transMatrix.b,\n this.transMatrix.c,\n this.transMatrix.d,\n this.transMatrix.e,\n this.transMatrix.f\n );\n const { scrollX = 0, scrollY = 0 } = this.parent.attribute;\n this._globalTransMatrix.translate(scrollX, scrollY);\n }\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n if (this.stage !== stage) {\n this.stage = stage;\n this.layer = layer;\n this.setStageToShadowRoot(stage, layer);\n if (this.animates && this.animates.size) {\n const timeline = stage.getTimeline();\n this.animates.forEach(a => {\n a.setTimeline(timeline);\n });\n }\n this._onSetStage && this._onSetStage(this, stage, layer);\n application.graphicService.onSetStage(this, stage);\n }\n }\n\n setStageToShadowRoot(stage?: IStage, layer?: ILayer) {\n if (this.shadowRoot) {\n this.shadowRoot.setStage(stage, layer);\n }\n }\n\n onAddStep(step: IStep) {\n return;\n }\n onStop(props?: Partial<T>): void {\n if (props) {\n this.setAttributes(props, false, { type: AttributeUpdateType.ANIMATE_END });\n }\n }\n // step时调用\n onStep(subAnimate: ISubAnimate, animate: IAnimate, step: IStep, ratio: number, end: boolean) {\n const nextAttributes = {};\n if (step.customAnimate) {\n step.customAnimate.update(end, ratio, nextAttributes);\n } else {\n const nextProps = step.props;\n const nextParsedProps = step.parsedProps;\n const propKeys = step.propKeys;\n this.stepInterpolate(\n subAnimate,\n animate,\n nextAttributes,\n step,\n ratio,\n end,\n nextProps,\n undefined,\n nextParsedProps,\n propKeys\n );\n }\n this.setAttributes(nextAttributes, false, {\n type: AttributeUpdateType.ANIMATE_UPDATE,\n animationState: {\n ratio,\n end,\n step,\n isFirstFrameOfStep: subAnimate.getLastStep() !== step\n }\n });\n this.stage && this.stage.renderNextFrame();\n }\n\n stepInterpolate(\n subAnimate: ISubAnimate,\n animate: IAnimate,\n nextAttributes: Record<string, any>,\n step: IStep,\n ratio: number,\n end: boolean,\n nextProps: Record<string, any>,\n lastProps?: Record<string, any>,\n nextParsedProps?: any,\n propKeys?: string[]\n ) {\n if (!propKeys) {\n propKeys = Object.keys(nextProps);\n step.propKeys = propKeys;\n }\n if (end) {\n step.propKeys.forEach(key => {\n if (!animate.validAttr(key)) {\n return;\n }\n nextAttributes[key] = nextProps[key];\n });\n } else {\n propKeys.forEach(key => {\n // 如果属性不合法,那直接return\n if (!animate.validAttr(key)) {\n return;\n }\n const nextStepVal = nextProps[key];\n const lastStepVal = (lastProps && lastProps[key]) ?? subAnimate.getLastPropByName(key, step);\n if (nextStepVal == null || lastStepVal == null) {\n // 用户直接调用stepInterpolate可能会走进来,如果传入的参数出现null或者undefined,直接赋值最终的值\n nextAttributes[key] = nextStepVal;\n return;\n }\n let match: boolean;\n match =\n animate.interpolateFunc && animate.interpolateFunc(key, ratio, lastStepVal, nextStepVal, nextAttributes);\n if (match) {\n return;\n }\n match = animate.customInterpolate(key, ratio, lastStepVal, nextStepVal, this, nextAttributes);\n if (match) {\n return;\n }\n if (!this.defaultInterpolate(nextStepVal, lastStepVal, key, nextAttributes, nextParsedProps, ratio)) {\n this._interpolate(key, ratio, lastStepVal, nextStepVal, nextAttributes);\n }\n });\n }\n\n step.parsedProps = nextParsedProps;\n }\n\n defaultInterpolate(\n nextStepVal: any,\n lastStepVal: any,\n key: string,\n nextAttributes: Record<string, any>,\n nextParsedProps: any,\n ratio: number\n ) {\n if (Number.isFinite(nextStepVal)) {\n nextAttributes[key] = lastStepVal + (nextStepVal - lastStepVal) * ratio;\n return true;\n } else if (key === 'fill') {\n if (!nextParsedProps) {\n nextParsedProps = {};\n }\n // 保存解析的结果到step\n const fillColorArray: [number, number, number, number] = nextParsedProps.fillColorArray;\n const color = interpolateColor(lastStepVal, fillColorArray ?? nextStepVal, ratio, false, (fArray, tArray) => {\n nextParsedProps.fillColorArray = tArray;\n });\n if (color) {\n nextAttributes[key] = color;\n }\n return true;\n } else if (key === 'stroke') {\n if (!nextParsedProps) {\n nextParsedProps = {};\n }\n // 保存解析的结果到step\n const strokeColorArray: [number, number, number, number] = nextParsedProps.strokeColorArray;\n const color = interpolateColor(lastStepVal, strokeColorArray ?? nextStepVal, ratio, false, (fArray, tArray) => {\n nextParsedProps.strokeColorArray = tArray;\n });\n if (color) {\n nextAttributes[key] = color;\n }\n return true;\n } else if (key === 'shadowColor') {\n if (!nextParsedProps) {\n nextParsedProps = {};\n }\n // 保存解析的结果到step\n const shadowColorArray: [number, number, number, number] = nextParsedProps.shadowColorArray;\n const color = interpolateColor(lastStepVal, shadowColorArray ?? nextStepVal, ratio, true, (fArray, tArray) => {\n nextParsedProps.shadowColorArray = tArray;\n });\n if (color) {\n nextAttributes[key] = color;\n }\n\n return true;\n }\n\n return false;\n }\n\n protected _interpolate(key: string, ratio: number, lastStepVal: any, nextStepVal: any, nextAttributes: any) {\n return;\n }\n\n getDefaultAttribute(name: string) {\n return getTheme(this as any)[this.type][name];\n }\n\n // 获取属性\n getComputedAttribute(name: string) {\n return this.attribute[name] ?? this.getDefaultAttribute(name);\n }\n /**\n * 添加onSetStage钩子\n * @param cb 回调函数\n * @param immediate 是否立刻执行,如果在回调添加之前stage就已经绑定,那么如果第二个参数为true就立刻执行回调\n */\n onSetStage(cb: (g: IGraphic, stage: IStage) => void, immediate: boolean = false) {\n this._onSetStage = cb;\n if (immediate && this.stage) {\n cb(this, this.stage);\n }\n }\n\n /******************** shadow graphic *********************/\n attachShadow(shadowRoot?: IShadowRoot) {\n if (shadowRoot) {\n shadowRoot.shadowHost = this;\n }\n\n this.shadowRoot = shadowRoot ?? application.graphicService.creator.shadowRoot(this);\n this.addUpdateBoundTag();\n this.shadowRoot.setStage(this.stage, this.layer);\n return this.shadowRoot;\n }\n\n detachShadow() {\n if (this.shadowRoot) {\n this.addUpdateBoundTag();\n this.shadowRoot = null;\n }\n }\n\n toJson(): IGraphicJson {\n return {\n attribute: this.attribute,\n _uid: this._uid,\n type: this.type,\n name: this.name,\n children: this.children.map((item: IGraphic) => item.toJson())\n };\n }\n\n createPathProxy(path?: string) {\n if (isString(path, true)) {\n this.pathProxy = new CustomPath2D().fromString(path as string);\n } else {\n this.pathProxy = new CustomPath2D();\n }\n\n return this.pathProxy;\n }\n\n loadImage(image: any, background: boolean = false) {\n if (!image || (background && backgroundNotImage(image))) {\n return;\n }\n const url = image;\n if (!this.resources) {\n this.resources = new Map();\n }\n const cache: {\n state: 'loading' | 'success' | 'init' | 'fail';\n data: any;\n } = {\n data: 'init',\n state: null\n };\n this.resources.set(url, cache);\n if (typeof image === 'string') {\n cache.state = 'loading';\n if (image.startsWith('<svg')) {\n // TODO 封装isSvg到@visactor/vutils\n ResourceLoader.GetSvg(image, this);\n this.backgroundImg = this.backgroundImg || background;\n } else if (isValidUrl(image) || image.includes('/') || isBase64(image)) {\n ResourceLoader.GetImage(image, this);\n this.backgroundImg = this.backgroundImg || background;\n }\n } else if (isObject(image)) {\n (cache.state = 'success'), (cache.data = image);\n this.backgroundImg = this.backgroundImg || background;\n } else {\n cache.state = 'fail';\n }\n }\n\n setShadowGraphic(graphic: IGraphic) {\n if (!graphic) {\n this.detachShadow();\n } else {\n const root = this.attachShadow();\n root.add(graphic);\n }\n }\n\n imageLoadSuccess(url: string, image: HTMLImageElement, cb?: () => void) {\n // 更新属性\n // this.resourceState = 'success';\n // this.resource = image;\n if (!this.resources) {\n return;\n }\n const res = this.resources.get(url);\n if (!res) {\n return;\n }\n res.state = 'success';\n res.data = image;\n\n cb && cb();\n\n // 触发重绘\n // 暂时全量,TODO 启动局部重绘\n // this.stage.enableDirtyBounds();\n // this.stage.dirty(this.AABBBounds);\n this.addUpdateBoundTag(); // 添加bounds更新tag重绘才会绘制这个mark\n this.stage && this.stage.renderNextFrame();\n }\n\n imageLoadFail(url: string, cb?: () => void) {\n if (!this.resources) {\n return;\n }\n const res = this.resources.get(url);\n if (!res) {\n return;\n }\n res.state = 'fail';\n\n cb && cb();\n }\n\n private _stopAnimates(animates: Map<string | number, IAnimate>) {\n if (animates) {\n animates.forEach(animate => {\n animate.stop();\n });\n }\n }\n\n stopAnimates(stopChildren: boolean = false) {\n this._stopAnimates(this.animates);\n\n if (this.shadowRoot) {\n // 停止所有影子节点的动画\n this.shadowRoot.stopAnimates(true);\n }\n if (this.isContainer && stopChildren) {\n this.forEachChildren((c: IGraphic) => {\n c.stopAnimates(stopChildren);\n });\n }\n }\n\n release(): void {\n this.releaseStatus = 'released';\n application.graphicService.onRelease(this);\n }\n\n protected _emitCustomEvent(type: string, context?: any) {\n if (this._events && type in this._events) {\n const changeEvent = new CustomEvent(type, context);\n changeEvent.bubbles = false;\n\n (changeEvent as any).manager = (this.stage as any)?.eventSystem?.manager;\n this.dispatchEvent(changeEvent);\n }\n }\n\n abstract getNoWorkAnimateAttr(): Record<string, number>;\n\n abstract clone(): Graphic<any>;\n}\n\nGraphic.mixin(EventTarget);\n\nfunction backgroundNotImage(image: any) {\n if (image.fill || image.stroke) {\n return true;\n }\n return false;\n}\n"]}
1
+ {"version":3,"sources":["../src/graphic/graphic.ts"],"names":[],"mappings":"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","file":"graphic.js","sourcesContent":["import type { ICustomPath2D } from './../interface/path';\nimport type { OBBBounds, Dict, IPointLike, IAABBBounds } from '@visactor/vutils';\nimport {\n AABBBounds,\n Matrix,\n normalTransform,\n Point,\n isNil,\n has,\n isString,\n isValidUrl,\n isBase64,\n isObject\n} from '@visactor/vutils';\nimport type {\n GraphicType,\n IAnimateConfig,\n IGraphicAttribute,\n IGraphic,\n IGraphicAnimateParams,\n IGraphicJson,\n ISetAttributeContext,\n ITransform,\n GraphicReleaseStatus\n} from '../interface/graphic';\nimport { Node } from './node-tree';\nimport type {\n IAnimate,\n IAnimateTarget,\n IGlyphGraphicAttribute,\n IGroup,\n ILayer,\n IPickerService,\n IShadowRoot,\n IStage,\n IStep,\n ISubAnimate\n} from '../interface';\nimport { EventTarget, CustomEvent } from '../event';\nimport { DefaultTransform } from './config';\nimport { application } from '../application';\nimport { Animate, DefaultStateAnimateConfig } from '../animate';\nimport { interpolateColor } from '../color-string/interpolate';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { getTheme } from './theme';\nimport { ResourceLoader } from '../resource-loader/loader';\nimport { AttributeUpdateType, IContainPointMode, UpdateTag } from '../common/enums';\n\n/**\n * pathProxy参考自zrender\n * BSD 3-Clause License\n\n Copyright (c) 2017, Baidu Inc.\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst tempMatrix = new Matrix();\nconst tempBounds = new AABBBounds();\n\nexport const PURE_STYLE_KEY = [\n 'stroke',\n 'opacity',\n 'strokeOpacity',\n 'lineDash',\n 'lineDashOffset',\n 'lineCap',\n 'lineJoin',\n 'miterLimit',\n 'fill',\n 'fillOpacity'\n];\n\nexport const GRAPHIC_UPDATE_TAG_KEY = [\n 'lineWidth',\n // 'lineCap',\n // 'lineJoin',\n // 'miterLimit',\n 'scaleX',\n 'scaleY',\n 'angle',\n 'anchor',\n 'visible'\n];\n\nconst tempConstantXYKey = ['x', 'y'];\nconst tempConstantScaleXYKey = ['scaleX', 'scaleY'];\nconst tempConstantAngleKey = ['angle'];\n\nconst point = new Point();\n\nexport const NOWORK_ANIMATE_ATTR = {\n strokeSeg: 1,\n boundsPadding: 2,\n pickMode: 1,\n boundsMode: 1,\n customPickShape: 1,\n pickable: 1,\n childrenPickable: 1,\n visible: 1,\n zIndex: 1,\n layout: 1,\n keepDirIn3d: 1,\n globalZIndex: 1,\n\n outerBorder: 1,\n innerBorder: 1,\n lineDash: 1,\n lineCap: 1,\n lineJoin: 1,\n miterLimit: 2,\n strokeBoundsBuffer: 2,\n\n scaleCenter: 1,\n anchor: 1,\n anchor3d: 1,\n postMatrix: 1,\n\n backgroundMode: 2,\n background: 1,\n texture: 1,\n cursor: 1,\n html: 1\n};\n\n/**\n * globalTransMatrix更新逻辑\n * 1. group的transform修改,会下发到所有下层group,将所有下层的tag修改\n * 2. 叶子graphic每次获取globalTransMatrix都重新计算\n * 3. 所有节点的transform修改,或者globalTransform修改,都会下发到自己的shadowRoot上\n */\n\nexport abstract class Graphic<T extends Partial<IGraphicAttribute> = Partial<IGraphicAttribute>>\n extends Node\n implements IGraphic<T>, IAnimateTarget\n{\n /**\n * Mixes all enumerable properties and methods from a source object to Element.\n * @param source - The source of properties and methods to mix in.\n */\n static mixin(source: Dict<any>): void {\n // in ES8/ES2017, this would be really easy:\n // Object.defineProperties(Element.prototype, Object.getOwnPropertyDescriptors(source));\n\n // get all the enumerable property keys\n const keys = Object.keys(source);\n\n // loop through properties\n for (let i = 0; i < keys.length; ++i) {\n const propertyName = keys[i];\n\n // Set the property using the property descriptor - this works for accessors and normal value properties\n Object.defineProperty(\n Graphic.prototype,\n propertyName,\n Object.getOwnPropertyDescriptor(source, propertyName) as PropertyDecorator\n );\n }\n }\n\n declare _events?: any;\n\n declare onBeforeAttributeUpdate?: (\n val: any,\n attributes: Partial<T>,\n key: null | string | string[],\n context?: ISetAttributeContext\n ) => T | undefined;\n declare parent: any;\n\n declare resources?: Map<\n string,\n { state: 'init' | 'loading' | 'success' | 'fail'; data?: HTMLImageElement | HTMLCanvasElement }\n >;\n declare backgroundImg?: boolean;\n\n declare type: GraphicType;\n declare prefixed: string;\n declare numberType: number;\n declare isContainer?: boolean;\n declare valid: boolean;\n declare stage?: IStage;\n declare layer?: ILayer;\n declare incremental?: number;\n declare glyphHost?: IGraphic<IGlyphGraphicAttribute>;\n declare _onSetStage?: (g: IGraphic, stage: IStage, layer: ILayer) => void;\n // declare _beforeAttributeUpdate?: (key: string | string, value: any) => void;\n // 标记是否是在3d模式下\n declare in3dMode?: boolean;\n\n // aabbBounds,所有图形都需要有,所以初始化即赋值\n protected declare _AABBBounds: AABBBounds;\n get AABBBounds(): AABBBounds {\n return this.tryUpdateAABBBounds(this.attribute.boundsMode === 'imprecise');\n }\n // 具有旋转的包围盒,部分图元需要,动态初始化\n protected declare _OBBBounds?: OBBBounds;\n get OBBBounds(): OBBBounds {\n return this.tryUpdateOBBBounds();\n }\n protected declare _globalAABBBounds: AABBBounds;\n // 全局包围盒,部分图元需要,动态初始化,建议使用AABBBounds\n get globalAABBBounds(): AABBBounds {\n return this.tryUpdateGlobalAABBBounds();\n }\n protected declare _transMatrix: Matrix;\n get transMatrix(): Matrix {\n return this.tryUpdateLocalTransMatrix(true);\n }\n protected declare _globalTransMatrix: Matrix;\n get globalTransMatrix(): Matrix {\n return this.tryUpdateGlobalTransMatrix(true);\n }\n protected declare _updateTag: number;\n\n // 上次更新的stamp\n declare stamp?: number;\n\n declare attribute: T;\n\n declare shadowRoot?: IShadowRoot;\n\n declare releaseStatus?: GraphicReleaseStatus;\n\n /** 记录state对应的图形属性 */\n declare states?: Record<string, Partial<T>>;\n /** 当前state值 */\n declare currentStates?: string[];\n /** TODO: state更新对应的动画配置 */\n declare stateAnimateConfig?: IAnimateConfig;\n /** 记录应用state之前,attribute对应的原始图形属性 */\n declare normalAttrs?: Partial<T>;\n /** 获取state图形属性的方法 */\n declare stateProxy?: (stateName: string, targetStates?: string[]) => T;\n declare animates: Map<string | number, IAnimate>;\n\n declare nextAttrs?: T;\n declare prevAttrs?: T;\n declare finalAttrs?: T;\n\n declare pathProxy?: ICustomPath2D;\n // 依附于某个theme,如果该节点不存在parent,那么这个Theme就作为节点的Theme,避免添加到节点前计算属性\n declare attachedThemeGraphic?: IGraphic;\n\n constructor(params: T = {} as T) {\n super();\n this._AABBBounds = new AABBBounds();\n this._updateTag = UpdateTag.INIT;\n this.attribute = params;\n this.valid = this.isValid();\n if (params.background) {\n this.loadImage((params.background as any).background ?? params.background, true);\n } else if (params.shadowGraphic) {\n this.setShadowGraphic(params.shadowGraphic);\n }\n }\n\n setMode(mode: '2d' | '3d') {\n mode === '3d' ? this.set3dMode() : this.set2dMode();\n }\n\n set3dMode() {\n this.in3dMode = true;\n }\n set2dMode() {\n this.in3dMode = false;\n }\n getOffsetXY(attr?: ITransform, includeScroll: boolean = false) {\n const { dx = attr.dx, dy = attr.dy } = this.attribute;\n if (includeScroll && this.parent) {\n // const groupTheme = getTheme(this.parent).group;\n const attribute = this.parent.attribute;\n point.x = dx + (attribute.scrollX ?? 0);\n point.y = dy + (attribute.scrollY ?? 0);\n } else {\n point.x = dx;\n point.y = dy;\n }\n return point;\n }\n\n onAnimateBind(animate: IAnimate | ISubAnimate) {\n this._emitCustomEvent('animate-bind', animate);\n }\n\n protected tryUpdateAABBBounds(full?: boolean): AABBBounds {\n if (!this.shouldUpdateAABBBounds()) {\n return this._AABBBounds;\n }\n if (!this.valid) {\n this._AABBBounds.clear();\n return this._AABBBounds;\n }\n\n application.graphicService.beforeUpdateAABBBounds(this, this.stage, true, this._AABBBounds);\n const bounds = this.doUpdateAABBBounds(full);\n // this.addUpdateLayoutTag();\n application.graphicService.afterUpdateAABBBounds(this, this.stage, this._AABBBounds, this, true);\n return bounds;\n }\n\n protected combindShadowAABBBounds(bounds: IAABBBounds) {\n // 合并shadowRoot的Bounds\n if (this.shadowRoot) {\n const b = this.shadowRoot.AABBBounds.clone();\n bounds.union(b);\n }\n }\n\n protected abstract doUpdateAABBBounds(full?: boolean): AABBBounds;\n\n protected abstract tryUpdateOBBBounds(): OBBBounds;\n\n protected tryUpdateGlobalAABBBounds(): AABBBounds {\n const b = this.AABBBounds;\n if (!this._globalAABBBounds) {\n this._globalAABBBounds = b.clone();\n } else {\n this._globalAABBBounds.setValue(b.x1, b.y1, b.x2, b.y2);\n }\n if (this._globalAABBBounds.empty()) {\n return this._globalAABBBounds;\n }\n // 使用parent的grloalAABBBounds\n // todo: 考虑是否需要性能优化\n if (this.parent) {\n this._globalAABBBounds.transformWithMatrix((this.parent as IGroup).globalTransMatrix);\n }\n return this._globalAABBBounds;\n }\n\n /**\n * 这里都是叶子节点的UpdateGlobalTransMatrix函数,只要走进来就直接计算\n * @param clearTag\n * @returns\n */\n protected tryUpdateGlobalTransMatrix(clearTag: boolean = true): Matrix {\n if (!this._globalTransMatrix) {\n this._globalTransMatrix = this.parent\n ? (this.parent as IGroup).globalTransMatrix.clone()\n : this.transMatrix.clone();\n } else if (this.parent) {\n const m = (this.parent as IGroup).globalTransMatrix;\n this._globalTransMatrix.setValue(m.a, m.b, m.c, m.d, m.e, m.f);\n }\n if (this.shouldUpdateGlobalMatrix()) {\n this.doUpdateGlobalMatrix();\n }\n return this._globalTransMatrix;\n }\n\n shouldUpdateGlobalMatrix(): boolean {\n return true;\n }\n\n protected tryUpdateLocalTransMatrix(clearTag: boolean = true) {\n if (!this._transMatrix) {\n this._transMatrix = new Matrix();\n }\n if (this.shouldUpdateLocalMatrix()) {\n this.doUpdateLocalMatrix();\n clearTag && this.clearUpdateLocalPositionTag();\n }\n return this._transMatrix;\n }\n\n shouldUpdateAABBBounds(): boolean {\n // 如果存在shadowRoot,那么判断shadowRoot是否需要更新\n if (this.shadowRoot) {\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS) || this.shadowRoot.shouldUpdateAABBBounds();\n }\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS);\n }\n\n // 自身变化导致的AABBBounds的变化\n shouldSelfChangeUpdateAABBBounds(): boolean {\n // 如果存在shadowRoot,那么判断shadowRoot是否需要更新\n if (this.shadowRoot) {\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS) || this.shadowRoot.shouldUpdateAABBBounds();\n }\n return !!(this._updateTag & UpdateTag.UPDATE_BOUNDS);\n }\n\n protected shouldUpdateLocalMatrix(): boolean {\n return !!(this._updateTag & UpdateTag.UPDATE_LOCAL_MATRIX);\n }\n\n isValid(): boolean {\n const attribute = this.attribute;\n return Number.isFinite((attribute.x ?? 0) + (attribute.y ?? 0));\n }\n\n protected _validNumber(num?: number) {\n return num == null || Number.isFinite(num);\n }\n\n shouldUpdateShape(): boolean {\n return !!(this._updateTag & UpdateTag.UPDATE_SHAPE);\n }\n clearUpdateShapeTag() {\n this._updateTag &= UpdateTag.CLEAR_SHAPE;\n }\n\n /**\n * 是否包含某个点(点需要是全局坐标系)\n * @param x\n * @param y\n * @param mode\n * @returns\n */\n containsPoint(x: number, y: number, mode: IContainPointMode, picker?: IPickerService): boolean {\n if (!picker) {\n return false;\n }\n if (mode === IContainPointMode.GLOBAL) {\n // 转换x,y更精准\n const point = new Point(x, y);\n if (this.parent) {\n this.parent.globalTransMatrix.transformPoint(point, point);\n }\n x = point.x;\n y = point.y;\n }\n return picker.containsPoint(this, { x, y });\n }\n\n setAttributes(params: Partial<T>, forceUpdateTag: boolean = false, context?: ISetAttributeContext) {\n params =\n (this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate(params, this.attribute, null, context)) || params;\n\n if (params.background) {\n this.loadImage(params.background, true);\n } else if (params.shadowGraphic) {\n this.setShadowGraphic(params.shadowGraphic);\n }\n this._setAttributes(params, forceUpdateTag, context);\n }\n\n _setAttributes(params: Partial<T>, forceUpdateTag: boolean = false, context?: ISetAttributeContext) {\n const keys = Object.keys(params);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n\n this.attribute[key] = params[key];\n }\n this.valid = this.isValid();\n // 没有设置shape&bounds的tag\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTags(keys))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n }\n\n setAttribute(key: string, value: any, forceUpdateTag?: boolean, context?: ISetAttributeContext) {\n const params =\n this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate({ [key]: value }, this.attribute, key, context);\n if (!params) {\n if (!isNil(this.normalAttrs?.[key])) {\n this.normalAttrs[key] = value;\n } else {\n this.attribute[key] = value;\n this.valid = this.isValid();\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTag(key))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n }\n } else {\n this._setAttributes(params, forceUpdateTag, context);\n }\n if (key === 'background') {\n this.loadImage(value, true);\n } else if (key === 'shadowGraphic') {\n this.setShadowGraphic(value);\n }\n }\n\n protected needUpdateTags(keys: string[], k: string[] = GRAPHIC_UPDATE_TAG_KEY): boolean {\n for (let i = 0; i < k.length; i++) {\n const attrKey = k[i];\n if (keys.indexOf(attrKey) !== -1) {\n return true;\n }\n }\n return false;\n }\n\n protected needUpdateTag(key: string, k: string[] = GRAPHIC_UPDATE_TAG_KEY): boolean {\n for (let i = 0; i < k.length; i++) {\n const attrKey = k[i];\n if (key === attrKey) {\n return true;\n }\n }\n return false;\n }\n\n initAttributes(params: T) {\n // this.setAttributes(params, true);\n const context = { type: AttributeUpdateType.INIT };\n params =\n (this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate(params, this.attribute, null, context)) || params;\n this.attribute = params;\n if (params.background) {\n this.loadImage(params.background, true);\n } else if (params.shadowGraphic) {\n this.setShadowGraphic(params.shadowGraphic);\n }\n this._updateTag = UpdateTag.INIT;\n this.valid = this.isValid();\n this.onAttributeUpdate(context);\n }\n\n translate(x: number, y: number) {\n if (x === 0 && y === 0) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.TRANSLATE\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ x, y }, this.attribute, tempConstantXYKey, context);\n if (params) {\n x = params.x;\n y = params.y;\n delete params.x;\n delete params.y;\n this._setAttributes(params);\n }\n const attribute = this.attribute;\n const postMatrix = attribute.postMatrix;\n if (!postMatrix) {\n attribute.x = (attribute.x ?? DefaultTransform.x) + x;\n attribute.y = (attribute.y ?? DefaultTransform.y) + y;\n } else {\n application.transformUtil.fromMatrix(postMatrix, postMatrix).translate(x, y);\n }\n\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n translateTo(x: number, y: number) {\n const attribute = this.attribute;\n if (attribute.x === x && attribute.y === y) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.TRANSLATE_TO\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ x, y }, this.attribute, tempConstantXYKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n attribute.x = x;\n attribute.y = y;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n scale(scaleX: number, scaleY: number, scaleCenter?: IPointLike) {\n if (scaleX === 1 && scaleY === 1) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.SCALE\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ scaleX, scaleY, scaleCenter }, this.attribute, tempConstantScaleXYKey, context);\n if (params) {\n scaleX = params.scaleX;\n scaleY = params.scaleY;\n delete params.scaleX;\n delete params.scaleY;\n this._setAttributes(params);\n }\n const attribute = this.attribute;\n if (!scaleCenter) {\n attribute.scaleX = (attribute.scaleX ?? DefaultTransform.scaleX) * scaleX;\n attribute.scaleY = (attribute.scaleY ?? DefaultTransform.scaleY) * scaleY;\n } else {\n let { postMatrix } = this.attribute;\n if (!postMatrix) {\n postMatrix = new Matrix();\n attribute.postMatrix = postMatrix;\n }\n application.transformUtil.fromMatrix(postMatrix, postMatrix).scale(scaleX, scaleY, scaleCenter);\n }\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n scaleTo(scaleX: number, scaleY: number) {\n const attribute = this.attribute;\n if (attribute.scaleX === scaleX && attribute.scaleY === scaleY) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.SCALE_TO\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ scaleX, scaleY }, this.attribute, tempConstantScaleXYKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n attribute.scaleX = scaleX;\n attribute.scaleY = scaleY;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n rotate(angle: number, rotateCenter?: IPointLike) {\n if (angle === 0) {\n return this;\n }\n const context = { type: AttributeUpdateType.ROTATE };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate({ angle, rotateCenter }, this.attribute, tempConstantAngleKey, context);\n if (params) {\n delete params.angle;\n this._setAttributes(params, false, context);\n // return this;\n }\n const attribute = this.attribute;\n if (!rotateCenter) {\n attribute.angle = (attribute.angle ?? DefaultTransform.angle) + angle;\n } else {\n let { postMatrix } = this.attribute;\n if (!postMatrix) {\n postMatrix = new Matrix();\n attribute.postMatrix = postMatrix;\n }\n application.transformUtil.fromMatrix(postMatrix, postMatrix).rotate(angle, rotateCenter);\n }\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n rotateTo(angle: number) {\n const attribute = this.attribute;\n if (attribute.angle === angle) {\n return this;\n }\n const context = {\n type: AttributeUpdateType.ROTATE_TO\n };\n const params =\n this.onBeforeAttributeUpdate &&\n this.onBeforeAttributeUpdate(angle, this.attribute, tempConstantAngleKey, context);\n if (params) {\n this._setAttributes(params, false, context);\n return this;\n }\n attribute.angle = angle;\n this.addUpdatePositionTag();\n this.addUpdateBoundTag();\n this.addUpdateLayoutTag();\n this.onAttributeUpdate(context);\n return this;\n }\n\n skewTo(b: number, c: number) {\n return this;\n }\n\n animate(params?: IGraphicAnimateParams) {\n if (!this.animates) {\n this.animates = new Map();\n }\n const animate = new Animate(params?.id, this.stage && this.stage.getTimeline()).bind(this);\n if (params) {\n const { onStart, onFrame, onEnd, onRemove } = params;\n onStart != null && animate.onStart(onStart);\n onFrame != null && animate.onFrame(onFrame);\n onEnd != null && animate.onEnd(onEnd);\n onRemove != null && animate.onRemove(onRemove);\n animate.interpolateFunc = params.interpolate;\n }\n this.animates.set(animate.id, animate);\n animate.onRemove(() => {\n this.animates.delete(animate.id);\n });\n\n return animate;\n }\n\n onAttributeUpdate(context?: ISetAttributeContext) {\n if (context && context.skipUpdateCallback) {\n return;\n }\n application.graphicService.onAttributeUpdate(this);\n this._emitCustomEvent('afterAttributeUpdate', context);\n }\n\n // hasListener(event: string) {\n // const prefix = this.prefixed;\n // var evt = prefix ? prefix + event : event;\n // return this._events[evt];\n // }\n\n update(d?: { bounds: boolean; trans: boolean }) {\n if (d) {\n d.bounds && this.tryUpdateAABBBounds(this.attribute.boundsMode === 'imprecise');\n d.trans && this.tryUpdateLocalTransMatrix();\n } else {\n this.tryUpdateAABBBounds(this.attribute.boundsMode === 'imprecise');\n this.tryUpdateLocalTransMatrix();\n }\n }\n\n hasState(stateName?: string) {\n if (!this.currentStates || !this.currentStates.length) {\n return false;\n }\n\n if (!isNil(stateName)) {\n return this.currentStates.includes(stateName);\n }\n\n return true;\n }\n getState(stateName: string) {\n return this.states?.[stateName];\n }\n\n applyStateAttrs(attrs: Partial<T>, stateNames: string[], hasAnimation?: boolean, isClear?: boolean) {\n if (hasAnimation) {\n const keys = Object.keys(attrs);\n const noWorkAttrs = this.getNoWorkAnimateAttr();\n const animateAttrs: Partial<T> = {};\n let noAnimateAttrs: Partial<T> | undefined;\n\n keys.forEach(key => {\n if (!noWorkAttrs[key]) {\n animateAttrs[key] = isClear && attrs[key] === undefined ? this.getDefaultAttribute(key) : attrs[key];\n } else {\n if (!noAnimateAttrs) {\n noAnimateAttrs = {};\n }\n noAnimateAttrs[key] = attrs[key];\n }\n });\n\n const animate = this.animate();\n (animate as any).stateNames = stateNames;\n animate.to(\n animateAttrs,\n this.stateAnimateConfig?.duration ?? DefaultStateAnimateConfig.duration,\n this.stateAnimateConfig?.easing ?? DefaultStateAnimateConfig.easing\n );\n noAnimateAttrs && this.setAttributes(noAnimateAttrs, false, { type: AttributeUpdateType.STATE });\n } else {\n this.stopStateAnimates();\n this.setAttributes(attrs, false, { type: AttributeUpdateType.STATE });\n }\n }\n\n updateNormalAttrs(stateAttrs: Partial<T>) {\n const newNormalAttrs = {};\n if (this.normalAttrs) {\n Object.keys(stateAttrs).forEach(key => {\n if (key in this.normalAttrs) {\n newNormalAttrs[key] = this.normalAttrs[key];\n delete this.normalAttrs[key];\n } else {\n newNormalAttrs[key] = this.getNormalAttribute(key);\n }\n });\n Object.keys(this.normalAttrs).forEach(key => {\n stateAttrs[key] = this.normalAttrs[key];\n });\n } else {\n Object.keys(stateAttrs).forEach(key => {\n newNormalAttrs[key] = this.getNormalAttribute(key);\n });\n }\n\n this.normalAttrs = newNormalAttrs;\n }\n\n protected stopStateAnimates(type: 'start' | 'end' = 'end') {\n if (this.animates) {\n this.animates.forEach(animate => {\n if ((animate as any).stateNames) {\n animate.stop(type);\n this.animates.delete(animate.id);\n }\n });\n }\n }\n\n private getNormalAttribute(key: string) {\n let value = this.attribute[key];\n\n if (this.animates) {\n this.animates.forEach(animate => {\n if ((animate as any).stateNames) {\n const endProps = animate.getEndProps();\n if (has(endProps, key)) {\n value = endProps[key];\n }\n }\n });\n }\n\n return value;\n }\n\n clearStates(hasAnimation?: boolean) {\n if (this.hasState() && this.normalAttrs) {\n this.currentStates = [];\n this.applyStateAttrs(this.normalAttrs, this.currentStates, hasAnimation, true);\n } else {\n this.currentStates = [];\n }\n this.normalAttrs = null;\n }\n\n removeState(stateName: string, hasAnimation?: boolean) {\n const index = this.currentStates ? this.currentStates.indexOf(stateName) : -1;\n\n if (index >= 0) {\n const currentStates = this.currentStates.filter(state => state !== stateName);\n\n this.useStates(currentStates, hasAnimation);\n }\n }\n\n toggleState(stateName: string, hasAnimation?: boolean) {\n if (this.hasState(stateName)) {\n this.removeState(stateName, hasAnimation);\n } else {\n const index = this.currentStates ? this.currentStates.indexOf(stateName) : -1;\n if (index < 0) {\n const nextStates = this.currentStates ? this.currentStates.slice() : [];\n nextStates.push(stateName);\n this.useStates(nextStates, hasAnimation);\n }\n }\n }\n\n addState(stateName: string, keepCurrentStates?: boolean, hasAnimation?: boolean) {\n if (\n this.currentStates &&\n this.currentStates.includes(stateName) &&\n (keepCurrentStates || this.currentStates.length === 1)\n ) {\n return;\n }\n\n const newStates =\n keepCurrentStates && this.currentStates?.length ? this.currentStates.concat([stateName]) : [stateName];\n\n this.useStates(newStates, hasAnimation);\n }\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!states.length) {\n this.clearStates(hasAnimation);\n return;\n }\n\n const isChange =\n this.currentStates?.length !== states.length ||\n states.some((stateName, index) => this.currentStates[index] !== stateName);\n\n if (!isChange) {\n return;\n }\n\n const stateAttrs = {};\n states.forEach(stateName => {\n const attrs = this.stateProxy ? this.stateProxy(stateName, states) : this.states?.[stateName];\n\n if (attrs) {\n Object.assign(stateAttrs, attrs);\n }\n });\n\n this.updateNormalAttrs(stateAttrs);\n\n this.currentStates = states;\n this.applyStateAttrs(stateAttrs, states, hasAnimation);\n }\n\n addUpdateBoundTag() {\n this._updateTag |= UpdateTag.UPDATE_BOUNDS; // for bounds\n if (this.parent) {\n this.parent.addChildUpdateBoundTag();\n }\n if (this.glyphHost) {\n this.glyphHost.addUpdateBoundTag();\n }\n }\n\n addUpdateShapeTag() {\n this._updateTag |= UpdateTag.UPDATE_SHAPE; // for shape\n }\n\n addUpdateShapeAndBoundsTag() {\n this._updateTag |= UpdateTag.UPDATE_SHAPE_AND_BOUNDS; // for shape&bounds\n if (this.parent) {\n this.parent.addChildUpdateBoundTag();\n }\n if (this.glyphHost) {\n this.glyphHost.addUpdateBoundTag();\n }\n }\n\n protected updateShapeAndBoundsTagSetted(): boolean {\n return (this._updateTag & UpdateTag.UPDATE_SHAPE_AND_BOUNDS) === UpdateTag.UPDATE_SHAPE_AND_BOUNDS;\n }\n\n protected clearUpdateBoundTag() {\n this._updateTag &= UpdateTag.CLEAR_BOUNDS;\n }\n /**\n * 更新位置tag,包括全局tag和局部tag\n */\n addUpdatePositionTag() {\n // 更新shadowRoot的全局位置\n this.shadowRoot && this.shadowRoot.addUpdateGlobalPositionTag();\n this._updateTag |= UpdateTag.UPDATE_GLOBAL_LOCAL_MATRIX;\n }\n /**\n * 更新全局位置tag\n */\n addUpdateGlobalPositionTag() {\n // 更新shadowRoot的全局位置\n this.shadowRoot && this.shadowRoot.addUpdateGlobalPositionTag();\n this._updateTag |= UpdateTag.UPDATE_GLOBAL_MATRIX;\n }\n /**\n * 清除局部位置tag\n */\n protected clearUpdateLocalPositionTag() {\n this._updateTag &= UpdateTag.CLEAR_LOCAL_MATRIX;\n }\n /**\n * 清除全局位置tag\n */\n protected clearUpdateGlobalPositionTag() {\n this._updateTag &= UpdateTag.CLEAR_GLOBAL_MATRIX;\n }\n\n addUpdateLayoutTag() {\n this._updateTag |= UpdateTag.UPDATE_LAYOUT;\n }\n\n protected clearUpdateLayoutTag() {\n this._updateTag &= UpdateTag.CLEAR_LAYOUT;\n }\n\n protected needUpdateLayout(): boolean {\n return !!(this._updateTag & UpdateTag.UPDATE_LAYOUT);\n }\n\n protected getAnchor(anchor: [string | number, string | number], params: { b?: IAABBBounds }) {\n const _anchor: [number, number] = [0, 0];\n const getBounds = () => {\n if (params.b) {\n return params.b;\n }\n const { scaleX, scaleY, angle } = this.attribute;\n // 拷贝一份,避免计算bounds的过程中计算matrix,然后matrix又修改了bounds\n tempBounds.copy(this._AABBBounds);\n // @ts-ignore\n this.setAttributes({ scaleX: 1, scaleY: 1, angle: 0 });\n params.b = this.AABBBounds.clone();\n this._AABBBounds.copy(tempBounds);\n // @ts-ignore\n this.setAttributes({ scaleX, scaleY, angle });\n return params.b;\n };\n if (typeof anchor[0] === 'string') {\n const ratio = parseFloat(anchor[0]) / 100;\n const bounds = getBounds();\n _anchor[0] = bounds.x1 + (bounds.x2 - bounds.x1) * ratio;\n } else {\n _anchor[0] = anchor[0];\n }\n if (typeof anchor[1] === 'string') {\n const ratio = parseFloat(anchor[1]) / 100;\n const bounds = getBounds();\n _anchor[1] = bounds.y1 + (bounds.y2 - bounds.y1) * ratio;\n } else {\n _anchor[1] = anchor[1];\n }\n\n return _anchor;\n }\n\n /**\n * 更新局部matrix的具体函数\n */\n protected doUpdateLocalMatrix() {\n const {\n x = DefaultTransform.x,\n y = DefaultTransform.y,\n scaleX = DefaultTransform.scaleX,\n scaleY = DefaultTransform.scaleY,\n angle = DefaultTransform.angle,\n scaleCenter,\n anchor,\n postMatrix\n } = this.attribute;\n let _anchor: [number, number] = [0, 0];\n const params = {};\n if (anchor) {\n _anchor = this.getAnchor(anchor, params);\n }\n if (scaleCenter && (scaleX !== 1 || scaleY !== 1)) {\n const m = this._transMatrix;\n m.reset();\n m.translate(_anchor[0], _anchor[1]);\n m.rotate(angle);\n m.translate(-_anchor[0], -_anchor[1]);\n\n m.translate(x, y);\n // m.translate(scaleCenter[0] * scaleX, scaleCenter[1] * scaleY);\n // 计算bounds\n _anchor = this.getAnchor(scaleCenter, params);\n application.transformUtil.fromMatrix(m, m).scale(scaleX, scaleY, { x: _anchor[0], y: _anchor[1] });\n // m.translate(-scaleCenter[0], -scaleCenter[1]);\n } else {\n normalTransform(this._transMatrix, this._transMatrix.reset(), x, y, scaleX, scaleY, angle, anchor && _anchor);\n }\n const p = this.getOffsetXY(DefaultTransform);\n this._transMatrix.e += p.x;\n this._transMatrix.f += p.y;\n\n if (postMatrix) {\n const m1 = tempMatrix.setValue(\n postMatrix.a,\n postMatrix.b,\n postMatrix.c,\n postMatrix.d,\n postMatrix.e,\n postMatrix.f\n );\n const m2 = this._transMatrix;\n m1.multiply(m2.a, m2.b, m2.c, m2.d, m2.e, m2.f);\n m2.setValue(m1.a, m1.b, m1.c, m1.d, m1.e, m1.f);\n }\n }\n /**\n * 更新全局matrix的具体函数\n */\n protected doUpdateGlobalMatrix() {\n // 基于parent的matrix修改\n if (this.parent) {\n this._globalTransMatrix.multiply(\n this.transMatrix.a,\n this.transMatrix.b,\n this.transMatrix.c,\n this.transMatrix.d,\n this.transMatrix.e,\n this.transMatrix.f\n );\n const { scrollX = 0, scrollY = 0 } = this.parent.attribute;\n this._globalTransMatrix.translate(scrollX, scrollY);\n }\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n if (this.stage !== stage) {\n this.stage = stage;\n this.layer = layer;\n this.setStageToShadowRoot(stage, layer);\n if (this.animates && this.animates.size) {\n const timeline = stage.getTimeline();\n this.animates.forEach(a => {\n a.setTimeline(timeline);\n });\n }\n this._onSetStage && this._onSetStage(this, stage, layer);\n application.graphicService.onSetStage(this, stage);\n }\n }\n\n setStageToShadowRoot(stage?: IStage, layer?: ILayer) {\n if (this.shadowRoot) {\n this.shadowRoot.setStage(stage, layer);\n }\n }\n\n onAddStep(step: IStep) {\n return;\n }\n onStop(props?: Partial<T>): void {\n if (props) {\n this.setAttributes(props, false, { type: AttributeUpdateType.ANIMATE_END });\n }\n }\n // step时调用\n onStep(subAnimate: ISubAnimate, animate: IAnimate, step: IStep, ratio: number, end: boolean) {\n const nextAttributes = {};\n if (step.customAnimate) {\n step.customAnimate.update(end, ratio, nextAttributes);\n } else {\n const nextProps = step.props;\n const nextParsedProps = step.parsedProps;\n const propKeys = step.propKeys;\n this.stepInterpolate(\n subAnimate,\n animate,\n nextAttributes,\n step,\n ratio,\n end,\n nextProps,\n undefined,\n nextParsedProps,\n propKeys\n );\n }\n this.setAttributes(nextAttributes, false, {\n type: AttributeUpdateType.ANIMATE_UPDATE,\n animationState: {\n ratio,\n end,\n step,\n isFirstFrameOfStep: subAnimate.getLastStep() !== step\n }\n });\n this.stage && this.stage.renderNextFrame();\n }\n\n stepInterpolate(\n subAnimate: ISubAnimate,\n animate: IAnimate,\n nextAttributes: Record<string, any>,\n step: IStep,\n ratio: number,\n end: boolean,\n nextProps: Record<string, any>,\n lastProps?: Record<string, any>,\n nextParsedProps?: any,\n propKeys?: string[]\n ) {\n if (!propKeys) {\n propKeys = Object.keys(nextProps);\n step.propKeys = propKeys;\n }\n if (end) {\n step.propKeys.forEach(key => {\n if (!animate.validAttr(key)) {\n return;\n }\n nextAttributes[key] = nextProps[key];\n });\n } else {\n propKeys.forEach(key => {\n // 如果属性不合法,那直接return\n if (!animate.validAttr(key)) {\n return;\n }\n const nextStepVal = nextProps[key];\n const lastStepVal = (lastProps && lastProps[key]) ?? subAnimate.getLastPropByName(key, step);\n if (nextStepVal == null || lastStepVal == null) {\n // 用户直接调用stepInterpolate可能会走进来,如果传入的参数出现null或者undefined,直接赋值最终的值\n nextAttributes[key] = nextStepVal;\n return;\n }\n let match: boolean;\n match =\n animate.interpolateFunc && animate.interpolateFunc(key, ratio, lastStepVal, nextStepVal, nextAttributes);\n if (match) {\n return;\n }\n match = animate.customInterpolate(key, ratio, lastStepVal, nextStepVal, this, nextAttributes);\n if (match) {\n return;\n }\n if (!this.defaultInterpolate(nextStepVal, lastStepVal, key, nextAttributes, nextParsedProps, ratio)) {\n this._interpolate(key, ratio, lastStepVal, nextStepVal, nextAttributes);\n }\n });\n }\n\n step.parsedProps = nextParsedProps;\n }\n\n defaultInterpolate(\n nextStepVal: any,\n lastStepVal: any,\n key: string,\n nextAttributes: Record<string, any>,\n nextParsedProps: any,\n ratio: number\n ) {\n if (Number.isFinite(nextStepVal)) {\n nextAttributes[key] = lastStepVal + (nextStepVal - lastStepVal) * ratio;\n return true;\n } else if (key === 'fill') {\n if (!nextParsedProps) {\n nextParsedProps = {};\n }\n // 保存解析的结果到step\n const fillColorArray: [number, number, number, number] = nextParsedProps.fillColorArray;\n const color = interpolateColor(lastStepVal, fillColorArray ?? nextStepVal, ratio, false, (fArray, tArray) => {\n nextParsedProps.fillColorArray = tArray;\n });\n if (color) {\n nextAttributes[key] = color;\n }\n return true;\n } else if (key === 'stroke') {\n if (!nextParsedProps) {\n nextParsedProps = {};\n }\n // 保存解析的结果到step\n const strokeColorArray: [number, number, number, number] = nextParsedProps.strokeColorArray;\n const color = interpolateColor(lastStepVal, strokeColorArray ?? nextStepVal, ratio, false, (fArray, tArray) => {\n nextParsedProps.strokeColorArray = tArray;\n });\n if (color) {\n nextAttributes[key] = color;\n }\n return true;\n } else if (key === 'shadowColor') {\n if (!nextParsedProps) {\n nextParsedProps = {};\n }\n // 保存解析的结果到step\n const shadowColorArray: [number, number, number, number] = nextParsedProps.shadowColorArray;\n const color = interpolateColor(lastStepVal, shadowColorArray ?? nextStepVal, ratio, true, (fArray, tArray) => {\n nextParsedProps.shadowColorArray = tArray;\n });\n if (color) {\n nextAttributes[key] = color;\n }\n\n return true;\n }\n\n return false;\n }\n\n protected _interpolate(key: string, ratio: number, lastStepVal: any, nextStepVal: any, nextAttributes: any) {\n return;\n }\n\n getDefaultAttribute(name: string) {\n return getTheme(this as any)[this.type][name];\n }\n\n // 获取属性\n getComputedAttribute(name: string) {\n return this.attribute[name] ?? this.getDefaultAttribute(name);\n }\n /**\n * 添加onSetStage钩子\n * @param cb 回调函数\n * @param immediate 是否立刻执行,如果在回调添加之前stage就已经绑定,那么如果第二个参数为true就立刻执行回调\n */\n onSetStage(cb: (g: IGraphic, stage: IStage) => void, immediate: boolean = false) {\n this._onSetStage = cb;\n if (immediate && this.stage) {\n cb(this, this.stage);\n }\n }\n\n /******************** shadow graphic *********************/\n attachShadow(shadowRoot?: IShadowRoot) {\n if (shadowRoot) {\n shadowRoot.shadowHost = this;\n }\n\n this.shadowRoot = shadowRoot ?? application.graphicService.creator.shadowRoot(this);\n this.addUpdateBoundTag();\n this.shadowRoot.setStage(this.stage, this.layer);\n return this.shadowRoot;\n }\n\n detachShadow() {\n if (this.shadowRoot) {\n this.addUpdateBoundTag();\n this.shadowRoot = null;\n }\n }\n\n toJson(): IGraphicJson {\n return {\n attribute: this.attribute,\n _uid: this._uid,\n type: this.type,\n name: this.name,\n children: this.children.map((item: IGraphic) => item.toJson())\n };\n }\n\n createPathProxy(path?: string) {\n if (isString(path, true)) {\n this.pathProxy = new CustomPath2D().fromString(path as string);\n } else {\n this.pathProxy = new CustomPath2D();\n }\n\n return this.pathProxy;\n }\n\n loadImage(image: any, background: boolean = false) {\n if (!image || (background && backgroundNotImage(image))) {\n return;\n }\n const url = image;\n if (!this.resources) {\n this.resources = new Map();\n }\n const cache: {\n state: 'loading' | 'success' | 'init' | 'fail';\n data: any;\n } = {\n data: 'init',\n state: null\n };\n this.resources.set(url, cache);\n if (typeof image === 'string') {\n cache.state = 'loading';\n if (image.startsWith('<svg')) {\n // TODO 封装isSvg到@visactor/vutils\n ResourceLoader.GetSvg(image, this);\n this.backgroundImg = this.backgroundImg || background;\n } else if (isValidUrl(image) || image.includes('/') || isBase64(image)) {\n ResourceLoader.GetImage(image, this);\n this.backgroundImg = this.backgroundImg || background;\n }\n } else if (isObject(image)) {\n (cache.state = 'success'), (cache.data = image);\n this.backgroundImg = this.backgroundImg || background;\n } else {\n cache.state = 'fail';\n }\n }\n\n setShadowGraphic(graphic: IGraphic) {\n if (!graphic) {\n this.detachShadow();\n } else {\n const root = this.attachShadow();\n root.add(graphic);\n }\n }\n\n imageLoadSuccess(url: string, image: HTMLImageElement, cb?: () => void) {\n // 更新属性\n // this.resourceState = 'success';\n // this.resource = image;\n if (!this.resources) {\n return;\n }\n const res = this.resources.get(url);\n if (!res) {\n return;\n }\n res.state = 'success';\n res.data = image;\n\n cb && cb();\n\n // 触发重绘\n // 暂时全量,TODO 启动局部重绘\n // this.stage.enableDirtyBounds();\n // this.stage.dirty(this.AABBBounds);\n this.addUpdateBoundTag(); // 添加bounds更新tag重绘才会绘制这个mark\n this.stage && this.stage.renderNextFrame();\n }\n\n imageLoadFail(url: string, cb?: () => void) {\n if (!this.resources) {\n return;\n }\n const res = this.resources.get(url);\n if (!res) {\n return;\n }\n res.state = 'fail';\n\n cb && cb();\n }\n\n private _stopAnimates(animates: Map<string | number, IAnimate>) {\n if (animates) {\n animates.forEach(animate => {\n animate.stop();\n });\n }\n }\n\n stopAnimates(stopChildren: boolean = false) {\n this._stopAnimates(this.animates);\n\n if (this.shadowRoot) {\n // 停止所有影子节点的动画\n this.shadowRoot.stopAnimates(true);\n }\n if (this.isContainer && stopChildren) {\n this.forEachChildren((c: IGraphic) => {\n c.stopAnimates(stopChildren);\n });\n }\n }\n\n release(): void {\n this.releaseStatus = 'released';\n application.graphicService.onRelease(this);\n }\n\n protected _emitCustomEvent(type: string, context?: any) {\n if (this._events && type in this._events) {\n const changeEvent = new CustomEvent(type, context);\n changeEvent.bubbles = false;\n\n (changeEvent as any).manager = (this.stage as any)?.eventSystem?.manager;\n this.dispatchEvent(changeEvent);\n }\n }\n\n abstract getNoWorkAnimateAttr(): Record<string, number>;\n\n abstract clone(): Graphic<any>;\n}\n\nGraphic.mixin(EventTarget);\n\nfunction backgroundNotImage(image: any) {\n if (image.fill || image.stroke) {\n return true;\n }\n return false;\n}\n"]}
@@ -18,7 +18,7 @@ import { ARC3D_NUMBER_TYPE } from "../../../graphic/constants";
18
18
 
19
19
  export const DrawItemInterceptor = Symbol.for("DrawItemInterceptor");
20
20
 
21
- const tempDirtyBounds = new AABBBounds;
21
+ const tempDirtyBounds = new AABBBounds, tempBackupDirtyBounds = new AABBBounds;
22
22
 
23
23
  export class ShadowRootDrawItemInterceptorContribution {
24
24
  constructor() {
@@ -37,13 +37,14 @@ export class ShadowRootDrawItemInterceptorContribution {
37
37
  const {context: context} = drawContext;
38
38
  if (context.highPerformanceSave(), context.transformFromMatrix(graphic.transMatrix, !0),
39
39
  drawContribution.dirtyBounds && drawContribution.backupDirtyBounds) {
40
- tempDirtyBounds.copy(drawContribution.dirtyBounds);
40
+ tempDirtyBounds.copy(drawContribution.dirtyBounds), tempBackupDirtyBounds.copy(drawContribution.backupDirtyBounds);
41
41
  const m = graphic.globalTransMatrix.getInverse();
42
- drawContribution.dirtyBounds.copy(drawContribution.backupDirtyBounds).transformWithMatrix(m);
42
+ drawContribution.dirtyBounds.copy(drawContribution.backupDirtyBounds).transformWithMatrix(m),
43
+ drawContribution.backupDirtyBounds.copy(drawContribution.dirtyBounds);
43
44
  }
44
45
  return drawContribution.renderGroup(graphic.shadowRoot, drawContext, graphic.parent.globalTransMatrix),
45
- context.highPerformanceRestore(), drawContribution.dirtyBounds && drawContribution.backupDirtyBounds && drawContribution.dirtyBounds.copy(tempDirtyBounds),
46
- !0;
46
+ context.highPerformanceRestore(), drawContribution.dirtyBounds && drawContribution.backupDirtyBounds && (drawContribution.dirtyBounds.copy(tempDirtyBounds),
47
+ drawContribution.backupDirtyBounds.copy(tempBackupDirtyBounds)), !0;
47
48
  }
48
49
  }
49
50
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/render/contributions/render/draw-interceptor.ts"],"names":[],"mappings":"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","file":"draw-interceptor.js","sourcesContent":["import { injectable } from '../../../common/inversify-lite';\nimport { AABBBounds, pi2 } from '@visactor/vutils';\nimport { graphicCreator, mat3Tomat4, multiplyMat4Mat4 } from '../../../graphic';\nimport type {\n IArc,\n IContext2d,\n IDrawContext,\n IDrawContribution,\n IDrawItemInterceptorContribution,\n IGraphic,\n IGraphicAttribute,\n IGraphicRenderDrawParams,\n IGroup,\n ILayer,\n IRenderService\n} from '../../../interface';\nimport { mat4Allocate } from '../../../allocator/matrix-allocate';\nimport { ARC3D_NUMBER_TYPE } from '../../../graphic/constants';\n\n// 拦截器\nexport const DrawItemInterceptor = Symbol.for('DrawItemInterceptor');\n\n// @injectable()\n// export class DefaultDrawItemInterceptor implements IDrawItemInterceptor {\n// drawItem(graphic: IGraphic, renderService: IRenderService, params?: IGraphicRenderDrawParams): boolean {\n// return false;\n// }\n// }\n\nconst tempDirtyBounds = new AABBBounds();\n/**\n * 影子节点拦截器,用于渲染影子节点\n */\n// @injectable()\nexport class ShadowRootDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n afterDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (graphic.attribute.shadowRootIdx > 0 || !graphic.attribute.shadowRootIdx) {\n this.drawItem(graphic, renderService, drawContext, drawContribution, params);\n }\n return false;\n }\n\n beforeDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (graphic.attribute.shadowRootIdx < 0) {\n this.drawItem(graphic, renderService, drawContext, drawContribution, params);\n }\n return false;\n }\n\n protected drawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (!graphic.shadowRoot) {\n return false;\n }\n\n const { context } = drawContext;\n context.highPerformanceSave();\n // 直接transform\n context.transformFromMatrix(graphic.transMatrix, true);\n\n // 变换dirtyBounds\n if (drawContribution.dirtyBounds && drawContribution.backupDirtyBounds) {\n tempDirtyBounds.copy(drawContribution.dirtyBounds);\n const m = graphic.globalTransMatrix.getInverse();\n drawContribution.dirtyBounds.copy(drawContribution.backupDirtyBounds).transformWithMatrix(m);\n }\n\n // 设置context的transform到上一个节点\n drawContribution.renderGroup(graphic.shadowRoot, drawContext, graphic.parent.globalTransMatrix);\n\n context.highPerformanceRestore();\n\n if (drawContribution.dirtyBounds && drawContribution.backupDirtyBounds) {\n drawContribution.dirtyBounds.copy(tempDirtyBounds);\n }\n\n return true;\n }\n}\n\n// @injectable()\nexport class DebugDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n\n afterDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (graphic.attribute._debug_bounds) {\n this.drawItem(graphic, renderService, drawContext, drawContribution, params);\n }\n return false;\n }\n\n protected drawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (!graphic.attribute._debug_bounds) {\n return false;\n }\n\n const { context } = drawContext;\n context.highPerformanceSave();\n // 直接transform\n graphic.parent && context.setTransformFromMatrix(graphic.parent.globalTransMatrix, true);\n graphic.glyphHost &&\n graphic.glyphHost.parent &&\n context.setTransformFromMatrix(graphic.glyphHost.parent.globalTransMatrix, true);\n\n const b = graphic.AABBBounds;\n\n if (graphic.attribute._debug_bounds !== true) {\n graphic.attribute._debug_bounds(context, graphic);\n }\n context.strokeRect(b.x1, b.y1, b.width(), b.height());\n\n context.highPerformanceRestore();\n\n return true;\n }\n}\n\n@injectable()\nexport class CommonDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n interceptors: IDrawItemInterceptorContribution[];\n constructor() {\n this.interceptors = [\n new ShadowRootDrawItemInterceptorContribution(),\n new Canvas3DDrawItemInterceptor(),\n new InteractiveDrawItemInterceptorContribution(),\n new DebugDrawItemInterceptorContribution()\n ];\n }\n afterDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n for (let i = 0; i < this.interceptors.length; i++) {\n if (\n this.interceptors[i].afterDrawItem &&\n this.interceptors[i].afterDrawItem(graphic, renderService, drawContext, drawContribution, params)\n ) {\n return true;\n }\n }\n return false;\n }\n\n beforeDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n // 【性能方案】判定写在外层,减少遍历判断耗时,10000条数据减少1ms\n if (\n (!graphic.in3dMode || drawContext.in3dInterceptor) &&\n !graphic.shadowRoot &&\n !(graphic.baseGraphic || graphic.attribute.globalZIndex || graphic.interactiveGraphic)\n ) {\n return false;\n }\n\n for (let i = 0; i < this.interceptors.length; i++) {\n if (\n this.interceptors[i].beforeDrawItem &&\n this.interceptors[i].beforeDrawItem(graphic, renderService, drawContext, drawContribution, params)\n ) {\n return true;\n }\n }\n return false;\n }\n}\n\n/**\n * 交互层节点拦截器,用于支持交互层图元\n */\n// @injectable()\nexport class InteractiveDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n processing: boolean;\n // afterDrawItem(\n // graphic: IGraphic,\n // renderService: IRenderService,\n // drawContext: IDrawContext,\n // drawContribution: IDrawContribution,\n // params?: IGraphicRenderDrawParams\n // ): boolean {\n\n // if (graphic.attribute.shadowRootIdx > 0 || !graphic.attribute.shadowRootIdx) {\n // this.drawItem(graphic, renderService, drawContext, drawContribution, params);\n // }\n // return false;\n // }\n\n beforeDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (this.processing) {\n return false;\n }\n // 判断是否在交互层\n if (graphic.baseGraphic) {\n return this.beforeDrawInteractive(graphic, renderService, drawContext, drawContribution, params);\n }\n return this.beforeSetInteractive(graphic, renderService, drawContext, drawContribution, params);\n }\n\n /**\n * 用于提升interactive\n * @param graphic\n * @param renderService\n * @param drawContext\n * @param drawContribution\n * @param params\n */\n beforeSetInteractive(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n let interactiveGraphic: IGraphic = graphic.interactiveGraphic;\n if (graphic.attribute.globalZIndex) {\n if (!interactiveGraphic) {\n interactiveGraphic = graphic.clone();\n graphic.interactiveGraphic = interactiveGraphic;\n interactiveGraphic.baseGraphic = graphic;\n }\n // 设置位置\n // const m = graphic.globalTransMatrix;\n interactiveGraphic.setAttributes(\n {\n globalZIndex: 0,\n zIndex: graphic.attribute.globalZIndex\n },\n false,\n { skipUpdateCallback: true }\n );\n // 添加到交互层中\n drawContext.stage.tryInitInteractiveLayer();\n const interactiveLayer = drawContext.stage.getLayer('_builtin_interactive');\n if (interactiveLayer) {\n const shadowRoot = this.getShadowRoot(interactiveLayer);\n shadowRoot.add(interactiveGraphic);\n }\n return true;\n } else if (interactiveGraphic) {\n // 从交互层中删除\n drawContext.stage.tryInitInteractiveLayer();\n const interactiveLayer = drawContext.stage.getLayer('_builtin_interactive');\n if (interactiveLayer) {\n const shadowRoot = this.getShadowRoot(interactiveLayer);\n shadowRoot.removeChild(interactiveGraphic);\n }\n graphic.interactiveGraphic = null;\n interactiveGraphic.baseGraphic = null;\n }\n return false;\n }\n\n /**\n * 用于绘制interactive\n * @param graphic\n * @param renderService\n * @param drawContext\n * @param drawContribution\n * @param params\n */\n beforeDrawInteractive(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n // 默认使用原始的图元\n const baseGraphic = graphic.baseGraphic as IGraphic;\n // 如果主图元被删除了,那把交互图元这个也删除\n if (!baseGraphic.stage) {\n const interactiveLayer = drawContext.stage.getLayer('_builtin_interactive');\n if (interactiveLayer) {\n const shadowRoot = this.getShadowRoot(interactiveLayer);\n shadowRoot.removeChild(graphic);\n }\n return true;\n }\n if (baseGraphic) {\n this.processing = true;\n const { context } = drawContext;\n context.highPerformanceSave();\n // 直接transform\n context.setTransformFromMatrix(baseGraphic.parent.globalTransMatrix, true);\n // context.fillRect(0, 0, 100, 100);\n // 设置context的transform到上一个节点\n baseGraphic.isContainer\n ? drawContribution.renderGroup(baseGraphic as IGroup, drawContext, baseGraphic.parent.globalTransMatrix)\n : drawContribution.renderItem(baseGraphic, drawContext);\n\n context.highPerformanceRestore();\n this.processing = false;\n\n return true;\n }\n return false;\n }\n getShadowRoot(interactiveLayer: ILayer) {\n // 获取绑定影子节点的group\n let group = interactiveLayer.getElementById('_interactive_group') as IGroup;\n if (!group) {\n group = graphicCreator.CreateGraphic('group', {});\n group.id = '_interactive_group';\n interactiveLayer.add(group);\n }\n return group.shadowRoot ?? group.attachShadow();\n }\n}\n\n/**\n * 3d拦截器,用于渲染3d视角\n */\n// @injectable()\nexport class Canvas3DDrawItemInterceptor implements IDrawItemInterceptorContribution {\n // canvas?: ICanvas;\n order: number = 1;\n\n beforeDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ) {\n if (!graphic.in3dMode || drawContext.in3dInterceptor) {\n return false;\n }\n\n drawContext.in3dInterceptor = true;\n const { context, stage } = renderService.drawParams;\n const canvas = context.canvas;\n\n // 使用3d模式渲染\n context.save();\n this.initCanvasCtx(context);\n context.camera = stage.camera;\n\n // 将三维矩阵换成四维矩阵\n const m = context.currentMatrix;\n m.a /= context.dpr;\n m.b /= context.dpr;\n m.c /= context.dpr;\n m.d /= context.dpr;\n m.e /= context.dpr;\n m.f /= context.dpr;\n const matrix = mat4Allocate.allocate();\n mat3Tomat4(matrix, m);\n const lastModelMatrix = context.modelMatrix;\n if (lastModelMatrix) {\n if (matrix) {\n const m = mat4Allocate.allocate();\n context.modelMatrix = multiplyMat4Mat4(m, lastModelMatrix, matrix);\n }\n } else {\n context.modelMatrix = matrix;\n }\n context.setTransform(1, 0, 0, 1, 0, 0, true);\n\n // 设置context的transform到上一个节点\n if (graphic.isContainer) {\n // hack逻辑,如果是饼图的话,需要依次绘制不同的边\n let isPie: boolean = false;\n let is3d: boolean = false;\n graphic.forEachChildren((c: IGraphic) => {\n isPie = c.numberType === ARC3D_NUMBER_TYPE;\n return !isPie;\n });\n graphic.forEachChildren((c: IGraphic) => {\n is3d = !!c.findFace;\n return !is3d;\n });\n if (isPie) {\n const children = graphic.getChildren() as IArc[];\n // 绘制内层\n // drawContext.hack_pieFace = 'inside';\n // drawContribution.renderGroup(graphic as IGroup, drawContext);\n // 绘制底部\n // drawContext.hack_pieFace = 'bottom';\n // drawContribution.renderGroup(graphic as IGroup, drawContext);\n // 绘制外部\n // 排序一下\n const sortedChildren = [...children];\n sortedChildren.sort((a, b) => {\n let angle1 = ((a.attribute.startAngle ?? 0) + (a.attribute.endAngle ?? 0)) / 2;\n let angle2 = ((b.attribute.startAngle ?? 0) + (b.attribute.endAngle ?? 0)) / 2;\n while (angle1 < 0) {\n angle1 += pi2;\n }\n while (angle2 < 0) {\n angle2 += pi2;\n }\n return angle2 - angle1;\n });\n sortedChildren.forEach(c => {\n c._next = null;\n c._prev = null;\n });\n graphic.removeAllChild();\n graphic.update();\n sortedChildren.forEach(c => {\n graphic.appendChild(c);\n });\n const m = graphic.parent.globalTransMatrix;\n drawContext.hack_pieFace = 'outside';\n drawContribution.renderGroup(graphic as IGroup, drawContext, m);\n // 绘制内部\n drawContext.hack_pieFace = 'inside';\n drawContribution.renderGroup(graphic as IGroup, drawContext, m);\n // 绘制顶部\n drawContext.hack_pieFace = 'top';\n drawContribution.renderGroup(graphic as IGroup, drawContext, m);\n graphic.removeAllChild();\n children.forEach(c => {\n c._next = null;\n c._prev = null;\n });\n children.forEach(c => {\n graphic.appendChild(c);\n });\n } else if (is3d) {\n // 排序这些图元\n const children = graphic.getChildren() as IGraphic[];\n const zChildren = children.map(g => {\n const face3d = g.findFace();\n const vertices = face3d.vertices;\n // 计算每个顶点的view\n const viewdVerticesZ = vertices.map(v => {\n return context.view(v[0], v[1], v[2] + g.attribute.z ?? 0)[2];\n });\n const ave_z = viewdVerticesZ.reduce((a, b) => a + b, 0);\n return {\n ave_z,\n g\n };\n });\n zChildren.sort((a, b) => b.ave_z - a.ave_z);\n graphic.removeAllChild();\n zChildren.forEach(i => {\n i.g._next = null;\n i.g._prev = null;\n });\n graphic.update();\n zChildren.forEach(i => {\n graphic.add(i.g);\n });\n\n drawContribution.renderGroup(graphic as IGroup, drawContext, graphic.parent.globalTransMatrix, true);\n\n graphic.removeAllChild();\n children.forEach(g => {\n g._next = null;\n g._prev = null;\n });\n graphic.update();\n children.forEach(g => {\n graphic.add(g);\n });\n } else {\n drawContribution.renderGroup(graphic as IGroup, drawContext, graphic.parent.globalTransMatrix);\n }\n } else {\n drawContribution.renderItem(graphic, drawContext);\n }\n context.camera = null;\n context.restore();\n\n if (context.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(context.modelMatrix);\n }\n context.modelMatrix = lastModelMatrix;\n\n drawContext.in3dInterceptor = false;\n return true;\n }\n\n initCanvasCtx(context: IContext2d) {\n context.setTransformForCurrent();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/render/contributions/render/draw-interceptor.ts"],"names":[],"mappings":"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","file":"draw-interceptor.js","sourcesContent":["import { injectable } from '../../../common/inversify-lite';\nimport { AABBBounds, pi2 } from '@visactor/vutils';\nimport { graphicCreator, mat3Tomat4, multiplyMat4Mat4 } from '../../../graphic';\nimport type {\n IArc,\n IContext2d,\n IDrawContext,\n IDrawContribution,\n IDrawItemInterceptorContribution,\n IGraphic,\n IGraphicAttribute,\n IGraphicRenderDrawParams,\n IGroup,\n ILayer,\n IRenderService\n} from '../../../interface';\nimport { mat4Allocate } from '../../../allocator/matrix-allocate';\nimport { ARC3D_NUMBER_TYPE } from '../../../graphic/constants';\n\n// 拦截器\nexport const DrawItemInterceptor = Symbol.for('DrawItemInterceptor');\n\n// @injectable()\n// export class DefaultDrawItemInterceptor implements IDrawItemInterceptor {\n// drawItem(graphic: IGraphic, renderService: IRenderService, params?: IGraphicRenderDrawParams): boolean {\n// return false;\n// }\n// }\n\nconst tempDirtyBounds = new AABBBounds();\nconst tempBackupDirtyBounds = new AABBBounds();\n/**\n * 影子节点拦截器,用于渲染影子节点\n */\n// @injectable()\nexport class ShadowRootDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n afterDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (graphic.attribute.shadowRootIdx > 0 || !graphic.attribute.shadowRootIdx) {\n this.drawItem(graphic, renderService, drawContext, drawContribution, params);\n }\n return false;\n }\n\n beforeDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (graphic.attribute.shadowRootIdx < 0) {\n this.drawItem(graphic, renderService, drawContext, drawContribution, params);\n }\n return false;\n }\n\n protected drawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (!graphic.shadowRoot) {\n return false;\n }\n\n const { context } = drawContext;\n context.highPerformanceSave();\n // 直接transform\n context.transformFromMatrix(graphic.transMatrix, true);\n\n // 变换dirtyBounds\n if (drawContribution.dirtyBounds && drawContribution.backupDirtyBounds) {\n tempDirtyBounds.copy(drawContribution.dirtyBounds);\n tempBackupDirtyBounds.copy(drawContribution.backupDirtyBounds);\n const m = graphic.globalTransMatrix.getInverse();\n drawContribution.dirtyBounds.copy(drawContribution.backupDirtyBounds).transformWithMatrix(m);\n drawContribution.backupDirtyBounds.copy(drawContribution.dirtyBounds);\n }\n\n // 设置context的transform到上一个节点\n drawContribution.renderGroup(graphic.shadowRoot, drawContext, graphic.parent.globalTransMatrix);\n\n context.highPerformanceRestore();\n\n if (drawContribution.dirtyBounds && drawContribution.backupDirtyBounds) {\n drawContribution.dirtyBounds.copy(tempDirtyBounds);\n drawContribution.backupDirtyBounds.copy(tempBackupDirtyBounds);\n }\n\n return true;\n }\n}\n\n// @injectable()\nexport class DebugDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n\n afterDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (graphic.attribute._debug_bounds) {\n this.drawItem(graphic, renderService, drawContext, drawContribution, params);\n }\n return false;\n }\n\n protected drawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (!graphic.attribute._debug_bounds) {\n return false;\n }\n\n const { context } = drawContext;\n context.highPerformanceSave();\n // 直接transform\n graphic.parent && context.setTransformFromMatrix(graphic.parent.globalTransMatrix, true);\n graphic.glyphHost &&\n graphic.glyphHost.parent &&\n context.setTransformFromMatrix(graphic.glyphHost.parent.globalTransMatrix, true);\n\n const b = graphic.AABBBounds;\n\n if (graphic.attribute._debug_bounds !== true) {\n graphic.attribute._debug_bounds(context, graphic);\n }\n context.strokeRect(b.x1, b.y1, b.width(), b.height());\n\n context.highPerformanceRestore();\n\n return true;\n }\n}\n\n@injectable()\nexport class CommonDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n interceptors: IDrawItemInterceptorContribution[];\n constructor() {\n this.interceptors = [\n new ShadowRootDrawItemInterceptorContribution(),\n new Canvas3DDrawItemInterceptor(),\n new InteractiveDrawItemInterceptorContribution(),\n new DebugDrawItemInterceptorContribution()\n ];\n }\n afterDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n for (let i = 0; i < this.interceptors.length; i++) {\n if (\n this.interceptors[i].afterDrawItem &&\n this.interceptors[i].afterDrawItem(graphic, renderService, drawContext, drawContribution, params)\n ) {\n return true;\n }\n }\n return false;\n }\n\n beforeDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n // 【性能方案】判定写在外层,减少遍历判断耗时,10000条数据减少1ms\n if (\n (!graphic.in3dMode || drawContext.in3dInterceptor) &&\n !graphic.shadowRoot &&\n !(graphic.baseGraphic || graphic.attribute.globalZIndex || graphic.interactiveGraphic)\n ) {\n return false;\n }\n\n for (let i = 0; i < this.interceptors.length; i++) {\n if (\n this.interceptors[i].beforeDrawItem &&\n this.interceptors[i].beforeDrawItem(graphic, renderService, drawContext, drawContribution, params)\n ) {\n return true;\n }\n }\n return false;\n }\n}\n\n/**\n * 交互层节点拦截器,用于支持交互层图元\n */\n// @injectable()\nexport class InteractiveDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n processing: boolean;\n // afterDrawItem(\n // graphic: IGraphic,\n // renderService: IRenderService,\n // drawContext: IDrawContext,\n // drawContribution: IDrawContribution,\n // params?: IGraphicRenderDrawParams\n // ): boolean {\n\n // if (graphic.attribute.shadowRootIdx > 0 || !graphic.attribute.shadowRootIdx) {\n // this.drawItem(graphic, renderService, drawContext, drawContribution, params);\n // }\n // return false;\n // }\n\n beforeDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (this.processing) {\n return false;\n }\n // 判断是否在交互层\n if (graphic.baseGraphic) {\n return this.beforeDrawInteractive(graphic, renderService, drawContext, drawContribution, params);\n }\n return this.beforeSetInteractive(graphic, renderService, drawContext, drawContribution, params);\n }\n\n /**\n * 用于提升interactive\n * @param graphic\n * @param renderService\n * @param drawContext\n * @param drawContribution\n * @param params\n */\n beforeSetInteractive(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n let interactiveGraphic: IGraphic = graphic.interactiveGraphic;\n if (graphic.attribute.globalZIndex) {\n if (!interactiveGraphic) {\n interactiveGraphic = graphic.clone();\n graphic.interactiveGraphic = interactiveGraphic;\n interactiveGraphic.baseGraphic = graphic;\n }\n // 设置位置\n // const m = graphic.globalTransMatrix;\n interactiveGraphic.setAttributes(\n {\n globalZIndex: 0,\n zIndex: graphic.attribute.globalZIndex\n },\n false,\n { skipUpdateCallback: true }\n );\n // 添加到交互层中\n drawContext.stage.tryInitInteractiveLayer();\n const interactiveLayer = drawContext.stage.getLayer('_builtin_interactive');\n if (interactiveLayer) {\n const shadowRoot = this.getShadowRoot(interactiveLayer);\n shadowRoot.add(interactiveGraphic);\n }\n return true;\n } else if (interactiveGraphic) {\n // 从交互层中删除\n drawContext.stage.tryInitInteractiveLayer();\n const interactiveLayer = drawContext.stage.getLayer('_builtin_interactive');\n if (interactiveLayer) {\n const shadowRoot = this.getShadowRoot(interactiveLayer);\n shadowRoot.removeChild(interactiveGraphic);\n }\n graphic.interactiveGraphic = null;\n interactiveGraphic.baseGraphic = null;\n }\n return false;\n }\n\n /**\n * 用于绘制interactive\n * @param graphic\n * @param renderService\n * @param drawContext\n * @param drawContribution\n * @param params\n */\n beforeDrawInteractive(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n // 默认使用原始的图元\n const baseGraphic = graphic.baseGraphic as IGraphic;\n // 如果主图元被删除了,那把交互图元这个也删除\n if (!baseGraphic.stage) {\n const interactiveLayer = drawContext.stage.getLayer('_builtin_interactive');\n if (interactiveLayer) {\n const shadowRoot = this.getShadowRoot(interactiveLayer);\n shadowRoot.removeChild(graphic);\n }\n return true;\n }\n if (baseGraphic) {\n this.processing = true;\n const { context } = drawContext;\n context.highPerformanceSave();\n // 直接transform\n context.setTransformFromMatrix(baseGraphic.parent.globalTransMatrix, true);\n // context.fillRect(0, 0, 100, 100);\n // 设置context的transform到上一个节点\n baseGraphic.isContainer\n ? drawContribution.renderGroup(baseGraphic as IGroup, drawContext, baseGraphic.parent.globalTransMatrix)\n : drawContribution.renderItem(baseGraphic, drawContext);\n\n context.highPerformanceRestore();\n this.processing = false;\n\n return true;\n }\n return false;\n }\n getShadowRoot(interactiveLayer: ILayer) {\n // 获取绑定影子节点的group\n let group = interactiveLayer.getElementById('_interactive_group') as IGroup;\n if (!group) {\n group = graphicCreator.CreateGraphic('group', {});\n group.id = '_interactive_group';\n interactiveLayer.add(group);\n }\n return group.shadowRoot ?? group.attachShadow();\n }\n}\n\n/**\n * 3d拦截器,用于渲染3d视角\n */\n// @injectable()\nexport class Canvas3DDrawItemInterceptor implements IDrawItemInterceptorContribution {\n // canvas?: ICanvas;\n order: number = 1;\n\n beforeDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ) {\n if (!graphic.in3dMode || drawContext.in3dInterceptor) {\n return false;\n }\n\n drawContext.in3dInterceptor = true;\n const { context, stage } = renderService.drawParams;\n const canvas = context.canvas;\n\n // 使用3d模式渲染\n context.save();\n this.initCanvasCtx(context);\n context.camera = stage.camera;\n\n // 将三维矩阵换成四维矩阵\n const m = context.currentMatrix;\n m.a /= context.dpr;\n m.b /= context.dpr;\n m.c /= context.dpr;\n m.d /= context.dpr;\n m.e /= context.dpr;\n m.f /= context.dpr;\n const matrix = mat4Allocate.allocate();\n mat3Tomat4(matrix, m);\n const lastModelMatrix = context.modelMatrix;\n if (lastModelMatrix) {\n if (matrix) {\n const m = mat4Allocate.allocate();\n context.modelMatrix = multiplyMat4Mat4(m, lastModelMatrix, matrix);\n }\n } else {\n context.modelMatrix = matrix;\n }\n context.setTransform(1, 0, 0, 1, 0, 0, true);\n\n // 设置context的transform到上一个节点\n if (graphic.isContainer) {\n // hack逻辑,如果是饼图的话,需要依次绘制不同的边\n let isPie: boolean = false;\n let is3d: boolean = false;\n graphic.forEachChildren((c: IGraphic) => {\n isPie = c.numberType === ARC3D_NUMBER_TYPE;\n return !isPie;\n });\n graphic.forEachChildren((c: IGraphic) => {\n is3d = !!c.findFace;\n return !is3d;\n });\n if (isPie) {\n const children = graphic.getChildren() as IArc[];\n // 绘制内层\n // drawContext.hack_pieFace = 'inside';\n // drawContribution.renderGroup(graphic as IGroup, drawContext);\n // 绘制底部\n // drawContext.hack_pieFace = 'bottom';\n // drawContribution.renderGroup(graphic as IGroup, drawContext);\n // 绘制外部\n // 排序一下\n const sortedChildren = [...children];\n sortedChildren.sort((a, b) => {\n let angle1 = ((a.attribute.startAngle ?? 0) + (a.attribute.endAngle ?? 0)) / 2;\n let angle2 = ((b.attribute.startAngle ?? 0) + (b.attribute.endAngle ?? 0)) / 2;\n while (angle1 < 0) {\n angle1 += pi2;\n }\n while (angle2 < 0) {\n angle2 += pi2;\n }\n return angle2 - angle1;\n });\n sortedChildren.forEach(c => {\n c._next = null;\n c._prev = null;\n });\n graphic.removeAllChild();\n graphic.update();\n sortedChildren.forEach(c => {\n graphic.appendChild(c);\n });\n const m = graphic.parent.globalTransMatrix;\n drawContext.hack_pieFace = 'outside';\n drawContribution.renderGroup(graphic as IGroup, drawContext, m);\n // 绘制内部\n drawContext.hack_pieFace = 'inside';\n drawContribution.renderGroup(graphic as IGroup, drawContext, m);\n // 绘制顶部\n drawContext.hack_pieFace = 'top';\n drawContribution.renderGroup(graphic as IGroup, drawContext, m);\n graphic.removeAllChild();\n children.forEach(c => {\n c._next = null;\n c._prev = null;\n });\n children.forEach(c => {\n graphic.appendChild(c);\n });\n } else if (is3d) {\n // 排序这些图元\n const children = graphic.getChildren() as IGraphic[];\n const zChildren = children.map(g => {\n const face3d = g.findFace();\n const vertices = face3d.vertices;\n // 计算每个顶点的view\n const viewdVerticesZ = vertices.map(v => {\n return context.view(v[0], v[1], v[2] + g.attribute.z ?? 0)[2];\n });\n const ave_z = viewdVerticesZ.reduce((a, b) => a + b, 0);\n return {\n ave_z,\n g\n };\n });\n zChildren.sort((a, b) => b.ave_z - a.ave_z);\n graphic.removeAllChild();\n zChildren.forEach(i => {\n i.g._next = null;\n i.g._prev = null;\n });\n graphic.update();\n zChildren.forEach(i => {\n graphic.add(i.g);\n });\n\n drawContribution.renderGroup(graphic as IGroup, drawContext, graphic.parent.globalTransMatrix, true);\n\n graphic.removeAllChild();\n children.forEach(g => {\n g._next = null;\n g._prev = null;\n });\n graphic.update();\n children.forEach(g => {\n graphic.add(g);\n });\n } else {\n drawContribution.renderGroup(graphic as IGroup, drawContext, graphic.parent.globalTransMatrix);\n }\n } else {\n drawContribution.renderItem(graphic, drawContext);\n }\n context.camera = null;\n context.restore();\n\n if (context.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(context.modelMatrix);\n }\n context.modelMatrix = lastModelMatrix;\n\n drawContext.in3dInterceptor = false;\n return true;\n }\n\n initCanvasCtx(context: IContext2d) {\n context.setTransformForCurrent();\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visactor/vrender-core",
3
- "version": "0.19.10-beta.1",
3
+ "version": "0.19.10",
4
4
  "description": "",
5
5
  "sideEffects": [
6
6
  "./src/modules.ts",
@@ -36,8 +36,8 @@
36
36
  "typescript": "4.9.5",
37
37
  "cross-env": "^7.0.3",
38
38
  "@internal/bundler": "0.0.1",
39
- "@internal/ts-config": "0.0.1",
40
- "@internal/eslint-config": "0.0.1"
39
+ "@internal/eslint-config": "0.0.1",
40
+ "@internal/ts-config": "0.0.1"
41
41
  },
42
42
  "keywords": [
43
43
  "VisActor",