@visactor/vrender-animate 1.0.37 → 1.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/animate.js +1 -2
- package/cjs/animate.js.map +1 -1
- package/cjs/custom/clip-graphic.js +3 -3
- package/cjs/custom/clip-graphic.js.map +1 -1
- package/cjs/custom/custom-animate.d.ts +2 -1
- package/cjs/custom/custom-animate.js +3 -3
- package/cjs/custom/custom-animate.js.map +1 -1
- package/cjs/custom/disappear/base/DisappearAnimateBase.js.map +1 -1
- package/cjs/custom/disappear/base/ImageProcessUtils.js.map +1 -1
- package/cjs/custom/disappear/gaussian-blur.js.map +1 -1
- package/cjs/custom/disappear/pixelation.js.map +1 -1
- package/cjs/custom/morphing.js +9 -9
- package/cjs/custom/morphing.js.map +1 -1
- package/cjs/custom/streamLight.js +2 -2
- package/cjs/custom/streamLight.js.map +1 -1
- package/cjs/register.js +2 -1
- package/cjs/register.js.map +1 -1
- package/cjs/ticker/default-ticker.js +2 -2
- package/cjs/ticker/default-ticker.js.map +1 -1
- package/cjs/timeline.js.map +1 -1
- package/dist/index.es.js +27 -29
- package/es/animate.js +1 -2
- package/es/animate.js.map +1 -1
- package/es/custom/clip-graphic.js +4 -4
- package/es/custom/clip-graphic.js.map +1 -1
- package/es/custom/custom-animate.d.ts +2 -1
- package/es/custom/custom-animate.js +4 -2
- package/es/custom/custom-animate.js.map +1 -1
- package/es/custom/disappear/base/DisappearAnimateBase.js.map +1 -1
- package/es/custom/disappear/base/ImageProcessUtils.js.map +1 -1
- package/es/custom/disappear/gaussian-blur.js.map +1 -1
- package/es/custom/disappear/pixelation.js.map +1 -1
- package/es/custom/morphing.js +10 -10
- package/es/custom/morphing.js.map +1 -1
- package/es/custom/streamLight.js +3 -3
- package/es/custom/streamLight.js.map +1 -1
- package/es/register.js +2 -2
- package/es/register.js.map +1 -1
- package/es/ticker/default-ticker.js +3 -3
- package/es/ticker/default-ticker.js.map +1 -1
- package/es/timeline.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/custom/disappear/base/DisappearAnimateBase.ts"],"names":[],"mappings":"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","file":"DisappearAnimateBase.js","sourcesContent":["import type { EasingType } from '@visactor/vrender-core';\nimport { vglobal } from '@visactor/vrender-core';\nimport { AStageAnimate } from '../../custom-animate';\n\n/**\n * 特效动画基类,提取公共的WebGL和Canvas 2D操作\n */\nexport abstract class DisappearAnimateBase<T = any> extends AStageAnimate<T> {\n protected webglCanvas: HTMLCanvasElement | null = null;\n protected gl: WebGLRenderingContext | null = null;\n protected program: WebGLProgram | null = null;\n protected currentAnimationRatio = 0;\n protected animationTime = 0;\n\n constructor(from: null, to: null, duration: number, easing: EasingType, params: any) {\n super(from, to, duration, easing, params);\n }\n\n onUpdate(end: boolean, ratio: number, out: any): void {\n super.onUpdate(end, ratio, out);\n this.currentAnimationRatio = ratio;\n this.animationTime = ratio * Math.PI * 2;\n }\n\n /**\n * 获取基于动画进度的时间\n */\n protected getAnimationTime(): number {\n if (this.currentAnimationRatio > 0) {\n return this.animationTime;\n }\n return Date.now() / 1000.0;\n }\n\n /**\n * 获取动画持续时间\n */\n protected getDurationFromParent(): number {\n return this.duration || 1000;\n }\n\n /**\n * 初始化WebGL上下文 - WebGL公共逻辑\n */\n protected initWebGL(canvas: HTMLCanvasElement): boolean {\n try {\n this.webglCanvas = vglobal.createCanvas({\n width: canvas.width,\n height: canvas.height,\n dpr: vglobal.devicePixelRatio\n });\n\n if (!this.webglCanvas) {\n console.warn('WebGL canvas creation failed');\n return false;\n }\n\n this.webglCanvas.style.width = canvas.style.width || `${canvas.width}px`;\n this.webglCanvas.style.height = canvas.style.height || `${canvas.height}px`;\n\n let glContext: WebGLRenderingContext | null = null;\n try {\n glContext = this.webglCanvas.getContext('webgl') as WebGLRenderingContext;\n if (!glContext) {\n glContext = this.webglCanvas.getContext('experimental-webgl') as WebGLRenderingContext;\n }\n } catch (e) {\n console.warn('Failed to get WebGL context:', e);\n }\n\n this.gl = glContext;\n if (!this.gl) {\n console.warn('WebGL not supported');\n return false;\n }\n\n const shaders = this.getShaderSources();\n this.program = this.createShaderProgram(shaders.vertex, shaders.fragment);\n return this.program !== null;\n } catch (error) {\n console.warn('Failed to initialize WebGL:', error);\n return false;\n }\n }\n\n /**\n * 创建着色器程序 - WebGL公共逻辑\n */\n protected createShaderProgram(vertexSource: string, fragmentSource: string): WebGLProgram | null {\n if (!this.gl) {\n return null;\n }\n\n const vertexShader = this.createShader(this.gl.VERTEX_SHADER, vertexSource);\n const fragmentShader = this.createShader(this.gl.FRAGMENT_SHADER, fragmentSource);\n\n if (!vertexShader || !fragmentShader) {\n return null;\n }\n\n const program = this.gl.createProgram();\n if (!program) {\n return null;\n }\n\n this.gl.attachShader(program, vertexShader);\n this.gl.attachShader(program, fragmentShader);\n this.gl.linkProgram(program);\n\n if (!this.gl.getProgramParameter(program, this.gl.LINK_STATUS)) {\n console.error('Shader program link error:', this.gl.getProgramInfoLog(program));\n return null;\n }\n\n return program;\n }\n\n /**\n * 创建着色器 - WebGL公共逻辑\n */\n protected createShader(type: number, source: string): WebGLShader | null {\n if (!this.gl) {\n return null;\n }\n\n const shader = this.gl.createShader(type);\n if (!shader) {\n return null;\n }\n\n this.gl.shaderSource(shader, source);\n this.gl.compileShader(shader);\n\n if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {\n console.error('Shader compile error:', this.gl.getShaderInfoLog(shader));\n this.gl.deleteShader(shader);\n return null;\n }\n\n return shader;\n }\n\n /**\n * 设置WebGL视口和基本状态 - WebGL公共逻辑\n */\n protected setupWebGLState(canvas: HTMLCanvasElement): void {\n if (!this.gl || !this.webglCanvas) {\n return;\n }\n\n // 确保WebGL canvas尺寸正确\n if (this.webglCanvas.width !== canvas.width || this.webglCanvas.height !== canvas.height) {\n this.webglCanvas.width = canvas.width;\n this.webglCanvas.height = canvas.height;\n }\n\n this.gl.viewport(0, 0, this.webglCanvas.width, this.webglCanvas.height);\n this.gl.clearColor(0.0, 0.0, 0.0, 0.0);\n this.gl.clear(this.gl.COLOR_BUFFER_BIT);\n }\n\n /**\n * 创建标准的全屏四边形顶点缓冲区 - WebGL公共逻辑\n */\n protected createFullScreenQuad(): WebGLBuffer | null {\n if (!this.gl) {\n return null;\n }\n\n const vertices = new Float32Array([\n // 位置 纹理坐标\n -1,\n -1,\n 0,\n 1, // 左下角 -> 左上角纹理\n 1,\n -1,\n 1,\n 1, // 右下角 -> 右上角纹理\n -1,\n 1,\n 0,\n 0, // 左上角 -> 左下角纹理\n 1,\n 1,\n 1,\n 0 // 右上角 -> 右下角纹理\n ]);\n\n const vertexBuffer = this.gl.createBuffer();\n this.gl.bindBuffer(this.gl.ARRAY_BUFFER, vertexBuffer);\n this.gl.bufferData(this.gl.ARRAY_BUFFER, vertices, this.gl.STATIC_DRAW);\n\n return vertexBuffer;\n }\n\n /**\n * 创建纹理 - WebGL公共逻辑\n */\n protected createTextureFromCanvas(canvas: HTMLCanvasElement): WebGLTexture | null {\n if (!this.gl) {\n return null;\n }\n\n const texture = this.gl.createTexture();\n this.gl.activeTexture(this.gl.TEXTURE0); // 激活纹理单元0\n this.gl.bindTexture(this.gl.TEXTURE_2D, texture);\n this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.RGBA, this.gl.RGBA, this.gl.UNSIGNED_BYTE, canvas);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, this.gl.CLAMP_TO_EDGE);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, this.gl.CLAMP_TO_EDGE);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, this.gl.LINEAR);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MAG_FILTER, this.gl.LINEAR);\n\n return texture;\n }\n\n /**\n * 设置顶点属性 - WebGL公共逻辑\n */\n protected setupVertexAttributes(): void {\n if (!this.gl || !this.program) {\n return;\n }\n\n const positionLocation = this.gl.getAttribLocation(this.program, 'a_position');\n const texCoordLocation = this.gl.getAttribLocation(this.program, 'a_texCoord');\n\n this.gl.enableVertexAttribArray(positionLocation);\n this.gl.vertexAttribPointer(positionLocation, 2, this.gl.FLOAT, false, 16, 0);\n\n this.gl.enableVertexAttribArray(texCoordLocation);\n this.gl.vertexAttribPointer(texCoordLocation, 2, this.gl.FLOAT, false, 16, 8);\n }\n\n /**\n * 创建Canvas 2D输出画布 - Canvas 2D公共逻辑\n */\n protected createOutputCanvas(\n canvas: HTMLCanvasElement\n ): { canvas: HTMLCanvasElement; ctx: CanvasRenderingContext2D } | null {\n const outputCanvas = vglobal.createCanvas({\n width: canvas.width,\n height: canvas.height,\n dpr: vglobal.devicePixelRatio\n });\n const ctx = outputCanvas.getContext('2d');\n if (!ctx) {\n return null;\n }\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(canvas, 0, 0);\n\n return { canvas: outputCanvas, ctx };\n }\n\n // 可选的抽象方法,由子类选择性实现\n protected getShaderSources(): { vertex: string; fragment: string } | null {\n // 默认返回null,表示不支持WebGL实现\n return null;\n }\n\n protected applyWebGLEffect(canvas: HTMLCanvasElement): HTMLCanvasElement | null {\n // 默认返回null,表示不支持WebGL实现\n return null;\n }\n\n protected applyCanvas2DEffect(canvas: HTMLCanvasElement): HTMLCanvasElement | null {\n // 默认返回null,表示不支持Canvas 2D实现\n return null;\n }\n\n /**\n * 检查是否支持WebGL实现\n */\n protected supportsWebGL(): boolean {\n return this.getShaderSources() !== null;\n }\n\n /**\n * 检查是否支持Canvas 2D实现\n */\n protected supportsCanvas2D(): boolean {\n // 通过尝试调用来检查是否有实现\n // 这里通过检查方法是否被重写来判断\n return this.applyCanvas2DEffect !== DisappearAnimateBase.prototype.applyCanvas2DEffect;\n }\n\n /**\n * 释放WebGL资源\n */\n release(): void {\n super.release();\n\n // 清理WebGL资源\n if (this.gl) {\n // 删除着色器程序\n if (this.program) {\n this.gl.deleteProgram(this.program);\n this.program = null;\n }\n\n // WebGL上下文会在canvas被垃圾回收时自动清理\n this.gl = null;\n }\n\n // 清理WebGL canvas\n if (this.webglCanvas) {\n this.webglCanvas = null;\n }\n\n // 重置动画状态\n this.currentAnimationRatio = 0;\n this.animationTime = 0;\n }\n\n protected afterStageRender(stage: any, canvas: HTMLCanvasElement): HTMLCanvasElement | void | null | false {\n let result: HTMLCanvasElement | null = null;\n\n // 优先尝试WebGL实现\n if (this.supportsWebGL()) {\n if (!this.gl && !this.initWebGL(canvas)) {\n console.warn('WebGL初始化失败,尝试Canvas 2D回退');\n }\n\n if (this.gl) {\n result = this.applyWebGLEffect(canvas);\n if (result) {\n return result;\n }\n console.warn('WebGL特效执行失败,尝试Canvas 2D回退');\n }\n }\n\n // 尝试Canvas 2D实现\n if (this.supportsCanvas2D()) {\n result = this.applyCanvas2DEffect(canvas);\n if (result) {\n return result;\n }\n console.warn('Canvas 2D特效执行失败');\n }\n\n // 如果都不支持或都失败了,给出明确的错误信息\n if (!this.supportsWebGL() && !this.supportsCanvas2D()) {\n console.error(\n `特效类 ${this.constructor.name} 未实现任何渲染方法。请实现 applyWebGLEffect 或 applyCanvas2DEffect 方法。`\n );\n }\n\n // 返回原图作为最后的回退\n return canvas;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/custom/disappear/base/DisappearAnimateBase.ts"],"names":[],"mappings":"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","file":"DisappearAnimateBase.js","sourcesContent":["import type { EasingType } from '@visactor/vrender-core';\nimport { VGlobal, vglobal } from '@visactor/vrender-core';\nimport { AStageAnimate } from '../../custom-animate';\n\n/**\n * 特效动画基类,提取公共的WebGL和Canvas 2D操作\n */\nexport abstract class DisappearAnimateBase<T = any> extends AStageAnimate<T> {\n protected webglCanvas: HTMLCanvasElement | null = null;\n protected gl: WebGLRenderingContext | null = null;\n protected program: WebGLProgram | null = null;\n protected currentAnimationRatio = 0;\n protected animationTime = 0;\n\n constructor(from: null, to: null, duration: number, easing: EasingType, params: any) {\n super(from, to, duration, easing, params);\n }\n\n onUpdate(end: boolean, ratio: number, out: any): void {\n super.onUpdate(end, ratio, out);\n this.currentAnimationRatio = ratio;\n this.animationTime = ratio * Math.PI * 2;\n }\n\n /**\n * 获取基于动画进度的时间\n */\n protected getAnimationTime(): number {\n if (this.currentAnimationRatio > 0) {\n return this.animationTime;\n }\n return Date.now() / 1000.0;\n }\n\n /**\n * 获取动画持续时间\n */\n protected getDurationFromParent(): number {\n return this.duration || 1000;\n }\n\n /**\n * 初始化WebGL上下文 - WebGL公共逻辑\n */\n protected initWebGL(canvas: HTMLCanvasElement): boolean {\n try {\n this.webglCanvas = vglobal.createCanvas({\n width: canvas.width,\n height: canvas.height,\n dpr: vglobal.devicePixelRatio\n });\n\n if (!this.webglCanvas) {\n console.warn('WebGL canvas creation failed');\n return false;\n }\n\n this.webglCanvas.style.width = canvas.style.width || `${canvas.width}px`;\n this.webglCanvas.style.height = canvas.style.height || `${canvas.height}px`;\n\n let glContext: WebGLRenderingContext | null = null;\n try {\n glContext = this.webglCanvas.getContext('webgl') as WebGLRenderingContext;\n if (!glContext) {\n glContext = this.webglCanvas.getContext('experimental-webgl') as WebGLRenderingContext;\n }\n } catch (e) {\n console.warn('Failed to get WebGL context:', e);\n }\n\n this.gl = glContext;\n if (!this.gl) {\n console.warn('WebGL not supported');\n return false;\n }\n\n const shaders = this.getShaderSources();\n this.program = this.createShaderProgram(shaders.vertex, shaders.fragment);\n return this.program !== null;\n } catch (error) {\n console.warn('Failed to initialize WebGL:', error);\n return false;\n }\n }\n\n /**\n * 创建着色器程序 - WebGL公共逻辑\n */\n protected createShaderProgram(vertexSource: string, fragmentSource: string): WebGLProgram | null {\n if (!this.gl) {\n return null;\n }\n\n const vertexShader = this.createShader(this.gl.VERTEX_SHADER, vertexSource);\n const fragmentShader = this.createShader(this.gl.FRAGMENT_SHADER, fragmentSource);\n\n if (!vertexShader || !fragmentShader) {\n return null;\n }\n\n const program = this.gl.createProgram();\n if (!program) {\n return null;\n }\n\n this.gl.attachShader(program, vertexShader);\n this.gl.attachShader(program, fragmentShader);\n this.gl.linkProgram(program);\n\n if (!this.gl.getProgramParameter(program, this.gl.LINK_STATUS)) {\n console.error('Shader program link error:', this.gl.getProgramInfoLog(program));\n return null;\n }\n\n return program;\n }\n\n /**\n * 创建着色器 - WebGL公共逻辑\n */\n protected createShader(type: number, source: string): WebGLShader | null {\n if (!this.gl) {\n return null;\n }\n\n const shader = this.gl.createShader(type);\n if (!shader) {\n return null;\n }\n\n this.gl.shaderSource(shader, source);\n this.gl.compileShader(shader);\n\n if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {\n console.error('Shader compile error:', this.gl.getShaderInfoLog(shader));\n this.gl.deleteShader(shader);\n return null;\n }\n\n return shader;\n }\n\n /**\n * 设置WebGL视口和基本状态 - WebGL公共逻辑\n */\n protected setupWebGLState(canvas: HTMLCanvasElement): void {\n if (!this.gl || !this.webglCanvas) {\n return;\n }\n\n // 确保WebGL canvas尺寸正确\n if (this.webglCanvas.width !== canvas.width || this.webglCanvas.height !== canvas.height) {\n this.webglCanvas.width = canvas.width;\n this.webglCanvas.height = canvas.height;\n }\n\n this.gl.viewport(0, 0, this.webglCanvas.width, this.webglCanvas.height);\n this.gl.clearColor(0.0, 0.0, 0.0, 0.0);\n this.gl.clear(this.gl.COLOR_BUFFER_BIT);\n }\n\n /**\n * 创建标准的全屏四边形顶点缓冲区 - WebGL公共逻辑\n */\n protected createFullScreenQuad(): WebGLBuffer | null {\n if (!this.gl) {\n return null;\n }\n\n const vertices = new Float32Array([\n // 位置 纹理坐标\n -1,\n -1,\n 0,\n 1, // 左下角 -> 左上角纹理\n 1,\n -1,\n 1,\n 1, // 右下角 -> 右上角纹理\n -1,\n 1,\n 0,\n 0, // 左上角 -> 左下角纹理\n 1,\n 1,\n 1,\n 0 // 右上角 -> 右下角纹理\n ]);\n\n const vertexBuffer = this.gl.createBuffer();\n this.gl.bindBuffer(this.gl.ARRAY_BUFFER, vertexBuffer);\n this.gl.bufferData(this.gl.ARRAY_BUFFER, vertices, this.gl.STATIC_DRAW);\n\n return vertexBuffer;\n }\n\n /**\n * 创建纹理 - WebGL公共逻辑\n */\n protected createTextureFromCanvas(canvas: HTMLCanvasElement): WebGLTexture | null {\n if (!this.gl) {\n return null;\n }\n\n const texture = this.gl.createTexture();\n this.gl.activeTexture(this.gl.TEXTURE0); // 激活纹理单元0\n this.gl.bindTexture(this.gl.TEXTURE_2D, texture);\n this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.RGBA, this.gl.RGBA, this.gl.UNSIGNED_BYTE, canvas);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, this.gl.CLAMP_TO_EDGE);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, this.gl.CLAMP_TO_EDGE);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, this.gl.LINEAR);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MAG_FILTER, this.gl.LINEAR);\n\n return texture;\n }\n\n /**\n * 设置顶点属性 - WebGL公共逻辑\n */\n protected setupVertexAttributes(): void {\n if (!this.gl || !this.program) {\n return;\n }\n\n const positionLocation = this.gl.getAttribLocation(this.program, 'a_position');\n const texCoordLocation = this.gl.getAttribLocation(this.program, 'a_texCoord');\n\n this.gl.enableVertexAttribArray(positionLocation);\n this.gl.vertexAttribPointer(positionLocation, 2, this.gl.FLOAT, false, 16, 0);\n\n this.gl.enableVertexAttribArray(texCoordLocation);\n this.gl.vertexAttribPointer(texCoordLocation, 2, this.gl.FLOAT, false, 16, 8);\n }\n\n /**\n * 创建Canvas 2D输出画布 - Canvas 2D公共逻辑\n */\n protected createOutputCanvas(\n canvas: HTMLCanvasElement\n ): { canvas: HTMLCanvasElement; ctx: CanvasRenderingContext2D } | null {\n const outputCanvas = vglobal.createCanvas({\n width: canvas.width,\n height: canvas.height,\n dpr: vglobal.devicePixelRatio\n });\n const ctx = outputCanvas.getContext('2d');\n if (!ctx) {\n return null;\n }\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(canvas, 0, 0);\n\n return { canvas: outputCanvas, ctx };\n }\n\n // 可选的抽象方法,由子类选择性实现\n protected getShaderSources(): { vertex: string; fragment: string } | null {\n // 默认返回null,表示不支持WebGL实现\n return null;\n }\n\n protected applyWebGLEffect(canvas: HTMLCanvasElement): HTMLCanvasElement | null {\n // 默认返回null,表示不支持WebGL实现\n return null;\n }\n\n protected applyCanvas2DEffect(canvas: HTMLCanvasElement): HTMLCanvasElement | null {\n // 默认返回null,表示不支持Canvas 2D实现\n return null;\n }\n\n /**\n * 检查是否支持WebGL实现\n */\n protected supportsWebGL(): boolean {\n return this.getShaderSources() !== null;\n }\n\n /**\n * 检查是否支持Canvas 2D实现\n */\n protected supportsCanvas2D(): boolean {\n // 通过尝试调用来检查是否有实现\n // 这里通过检查方法是否被重写来判断\n return this.applyCanvas2DEffect !== DisappearAnimateBase.prototype.applyCanvas2DEffect;\n }\n\n /**\n * 释放WebGL资源\n */\n release(): void {\n super.release();\n\n // 清理WebGL资源\n if (this.gl) {\n // 删除着色器程序\n if (this.program) {\n this.gl.deleteProgram(this.program);\n this.program = null;\n }\n\n // WebGL上下文会在canvas被垃圾回收时自动清理\n this.gl = null;\n }\n\n // 清理WebGL canvas\n if (this.webglCanvas) {\n this.webglCanvas = null;\n }\n\n // 重置动画状态\n this.currentAnimationRatio = 0;\n this.animationTime = 0;\n }\n\n protected afterStageRender(stage: any, canvas: HTMLCanvasElement): HTMLCanvasElement | void | null | false {\n let result: HTMLCanvasElement | null = null;\n\n // 优先尝试WebGL实现\n if (this.supportsWebGL()) {\n if (!this.gl && !this.initWebGL(canvas)) {\n console.warn('WebGL初始化失败,尝试Canvas 2D回退');\n }\n\n if (this.gl) {\n result = this.applyWebGLEffect(canvas);\n if (result) {\n return result;\n }\n console.warn('WebGL特效执行失败,尝试Canvas 2D回退');\n }\n }\n\n // 尝试Canvas 2D实现\n if (this.supportsCanvas2D()) {\n result = this.applyCanvas2DEffect(canvas);\n if (result) {\n return result;\n }\n console.warn('Canvas 2D特效执行失败');\n }\n\n // 如果都不支持或都失败了,给出明确的错误信息\n if (!this.supportsWebGL() && !this.supportsCanvas2D()) {\n console.error(\n `特效类 ${this.constructor.name} 未实现任何渲染方法。请实现 applyWebGLEffect 或 applyCanvas2DEffect 方法。`\n );\n }\n\n // 返回原图作为最后的回退\n return canvas;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/custom/disappear/base/ImageProcessUtils.ts"],"names":[],"mappings":"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","file":"ImageProcessUtils.js","sourcesContent":["import { vglobal } from '@visactor/vrender-core';\n\n/**\n * 图像处理工具类,公共的图像处理逻辑\n */\nexport class ImageProcessUtils {\n /**\n * 创建临时Canvas用于图像处理\n */\n static createTempCanvas(width: number, height: number, dpr?: number): HTMLCanvasElement {\n return vglobal.createCanvas({\n width,\n height,\n dpr: dpr || vglobal.devicePixelRatio\n });\n }\n\n /**\n * 复制图像数据\n */\n static cloneImageData(imageData: ImageData): ImageData {\n const clonedData = new Uint8ClampedArray(imageData.data);\n return new ImageData(clonedData, imageData.width, imageData.height);\n }\n\n /**\n * 线性插值\n */\n static lerp(start: number, end: number, t: number): number {\n return start * (1 - t) + end * t;\n }\n\n /**\n * 平滑步进函数\n */\n static smoothstep(edge0: number, edge1: number, x: number): number {\n const t = Math.max(0, Math.min(1, (x - edge0) / (edge1 - edge0)));\n return t * t * (3 - 2 * t);\n }\n\n /**\n * 计算两点之间的距离\n */\n static distance(x1: number, y1: number, x2: number, y2: number): number {\n const dx = x2 - x1;\n const dy = y2 - y1;\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n /**\n * 归一化角度到0-1范围\n */\n static normalizeAngle(angle: number): number {\n return (angle + Math.PI) / (2 * Math.PI);\n }\n\n /**\n * 基于像素网格的噪声函数\n */\n static pixelNoise(x: number, y: number, pixelSize: number): number {\n if (pixelSize <= 0) {\n return 0;\n }\n\n const gridX = Math.floor(x / pixelSize) * pixelSize;\n const gridY = Math.floor(y / pixelSize) * pixelSize;\n\n const n = Math.sin(gridX * 12.9898 + gridY * 78.233) * 43758.5453;\n return n - Math.floor(n);\n }\n\n /**\n * 生成噪声纹理数据\n */\n static generateNoiseTexture(width: number, height: number): Uint8Array {\n const data = new Uint8Array(width * height);\n for (let i = 0; i < data.length; i++) {\n data[i] = Math.floor(Math.random() * 256);\n }\n return data;\n }\n\n /**\n * 应用CSS滤镜(如果支持)\n */\n static applyCSSFilter(canvas: HTMLCanvasElement, filter: string): HTMLCanvasElement {\n const outputCanvas = this.createTempCanvas(canvas.width, canvas.height);\n const ctx = outputCanvas.getContext('2d');\n if (!ctx) {\n return canvas;\n }\n\n ctx.filter = filter;\n ctx.drawImage(canvas, 0, 0);\n ctx.filter = 'none';\n\n return outputCanvas;\n }\n\n /**\n * 提取颜色通道\n */\n static extractChannel(imageData: ImageData, channelIndex: number): ImageData {\n const { data, width, height } = imageData;\n const channelData = new Uint8ClampedArray(data.length);\n\n for (let i = 0; i < data.length; i += 4) {\n // 清空所有通道\n channelData[i] = 0; // R\n channelData[i + 1] = 0; // G\n channelData[i + 2] = 0; // B\n channelData[i + 3] = data[i + 3]; // 保持Alpha通道\n\n // 只保留指定通道的数据\n if (channelIndex >= 0 && channelIndex <= 2) {\n channelData[i + channelIndex] = data[i + channelIndex];\n }\n }\n\n return new ImageData(channelData, width, height);\n }\n\n /**\n * 混合两个图像数据\n */\n static blendImageData(imageData1: ImageData, imageData2: ImageData, ratio: number): ImageData {\n const { data: data1, width, height } = imageData1;\n const { data: data2 } = imageData2;\n const result = new Uint8ClampedArray(data1.length);\n\n for (let i = 0; i < data1.length; i += 4) {\n result[i] = Math.round(this.lerp(data1[i], data2[i], ratio)); // R\n result[i + 1] = Math.round(this.lerp(data1[i + 1], data2[i + 1], ratio)); // G\n result[i + 2] = Math.round(this.lerp(data1[i + 2], data2[i + 2], ratio)); // B\n result[i + 3] = Math.round(this.lerp(data1[i + 3], data2[i + 3], ratio)); // A\n }\n\n return new ImageData(result, width, height);\n }\n\n /**\n * 计算像素亮度\n */\n static getLuminance(r: number, g: number, b: number): number {\n return r * 0.299 + g * 0.587 + b * 0.114;\n }\n\n /**\n * 应用褐色调效果\n */\n static applySepiaToPixel(r: number, g: number, b: number): [number, number, number] {\n const sepiaR = Math.min(255, r * 0.393 + g * 0.769 + b * 0.189);\n const sepiaG = Math.min(255, r * 0.349 + g * 0.686 + b * 0.168);\n const sepiaB = Math.min(255, r * 0.272 + g * 0.534 + b * 0.131);\n return [sepiaR, sepiaG, sepiaB];\n }\n\n /**\n * 动态计算强度(基于动画时间的线性增长)\n */\n static calculateDynamicStrength(baseStrength: number, animationTime: number): number {\n // 时间范围0-2π,标准化到0-1\n return baseStrength * (animationTime / (Math.PI * 2));\n }\n}\n\n/**\n * WebGL着色器片段库\n */\nexport class ShaderLibrary {\n /**\n * 标准顶点着色器\n */\n static readonly STANDARD_VERTEX_SHADER = `\n attribute vec2 a_position;\n attribute vec2 a_texCoord;\n varying vec2 v_texCoord;\n\n void main() {\n gl_Position = vec4(a_position, 0.0, 1.0);\n v_texCoord = a_texCoord;\n }\n `;\n\n /**\n * 常用的着色器函数库\n */\n static readonly SHADER_FUNCTIONS = `\n // 亮度计算函数\n float luminance(vec3 color) {\n return dot(color, vec3(0.299, 0.587, 0.114));\n }\n\n // 褐色调函数\n vec3 sepia(vec3 color) {\n float r = color.r * 0.393 + color.g * 0.769 + color.b * 0.189;\n float g = color.r * 0.349 + color.g * 0.686 + color.b * 0.168;\n float b = color.r * 0.272 + color.g * 0.534 + color.b * 0.131;\n return vec3(r, g, b);\n }\n\n // 线性插值函数\n float lerp(float a, float b, float t) {\n return a * (1.0 - t) + b * t;\n }\n\n\n // 简单噪声函数\n float pixelNoise(vec2 coord, float pixelSize) {\n vec2 gridCoord = floor(coord / pixelSize) * pixelSize;\n return fract(sin(dot(gridCoord, vec2(12.9898, 78.233))) * 43758.5453123);\n }\n\n // 动态强度计算\n float calculateDynamicStrength(float baseStrength, float time) {\n return baseStrength * (time / 6.28318531); // 2π\n }\n `;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/custom/disappear/base/ImageProcessUtils.ts"],"names":[],"mappings":"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","file":"ImageProcessUtils.js","sourcesContent":["import { VGlobal, vglobal } from '@visactor/vrender-core';\n\n/**\n * 图像处理工具类,公共的图像处理逻辑\n */\nexport class ImageProcessUtils {\n /**\n * 创建临时Canvas用于图像处理\n */\n static createTempCanvas(width: number, height: number, dpr?: number): HTMLCanvasElement {\n return vglobal.createCanvas({\n width,\n height,\n dpr: dpr || vglobal.devicePixelRatio\n });\n }\n\n /**\n * 复制图像数据\n */\n static cloneImageData(imageData: ImageData): ImageData {\n const clonedData = new Uint8ClampedArray(imageData.data);\n return new ImageData(clonedData, imageData.width, imageData.height);\n }\n\n /**\n * 线性插值\n */\n static lerp(start: number, end: number, t: number): number {\n return start * (1 - t) + end * t;\n }\n\n /**\n * 平滑步进函数\n */\n static smoothstep(edge0: number, edge1: number, x: number): number {\n const t = Math.max(0, Math.min(1, (x - edge0) / (edge1 - edge0)));\n return t * t * (3 - 2 * t);\n }\n\n /**\n * 计算两点之间的距离\n */\n static distance(x1: number, y1: number, x2: number, y2: number): number {\n const dx = x2 - x1;\n const dy = y2 - y1;\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n /**\n * 归一化角度到0-1范围\n */\n static normalizeAngle(angle: number): number {\n return (angle + Math.PI) / (2 * Math.PI);\n }\n\n /**\n * 基于像素网格的噪声函数\n */\n static pixelNoise(x: number, y: number, pixelSize: number): number {\n if (pixelSize <= 0) {\n return 0;\n }\n\n const gridX = Math.floor(x / pixelSize) * pixelSize;\n const gridY = Math.floor(y / pixelSize) * pixelSize;\n\n const n = Math.sin(gridX * 12.9898 + gridY * 78.233) * 43758.5453;\n return n - Math.floor(n);\n }\n\n /**\n * 生成噪声纹理数据\n */\n static generateNoiseTexture(width: number, height: number): Uint8Array {\n const data = new Uint8Array(width * height);\n for (let i = 0; i < data.length; i++) {\n data[i] = Math.floor(Math.random() * 256);\n }\n return data;\n }\n\n /**\n * 应用CSS滤镜(如果支持)\n */\n static applyCSSFilter(canvas: HTMLCanvasElement, filter: string): HTMLCanvasElement {\n const outputCanvas = this.createTempCanvas(canvas.width, canvas.height);\n const ctx = outputCanvas.getContext('2d');\n if (!ctx) {\n return canvas;\n }\n\n ctx.filter = filter;\n ctx.drawImage(canvas, 0, 0);\n ctx.filter = 'none';\n\n return outputCanvas;\n }\n\n /**\n * 提取颜色通道\n */\n static extractChannel(imageData: ImageData, channelIndex: number): ImageData {\n const { data, width, height } = imageData;\n const channelData = new Uint8ClampedArray(data.length);\n\n for (let i = 0; i < data.length; i += 4) {\n // 清空所有通道\n channelData[i] = 0; // R\n channelData[i + 1] = 0; // G\n channelData[i + 2] = 0; // B\n channelData[i + 3] = data[i + 3]; // 保持Alpha通道\n\n // 只保留指定通道的数据\n if (channelIndex >= 0 && channelIndex <= 2) {\n channelData[i + channelIndex] = data[i + channelIndex];\n }\n }\n\n return new ImageData(channelData, width, height);\n }\n\n /**\n * 混合两个图像数据\n */\n static blendImageData(imageData1: ImageData, imageData2: ImageData, ratio: number): ImageData {\n const { data: data1, width, height } = imageData1;\n const { data: data2 } = imageData2;\n const result = new Uint8ClampedArray(data1.length);\n\n for (let i = 0; i < data1.length; i += 4) {\n result[i] = Math.round(this.lerp(data1[i], data2[i], ratio)); // R\n result[i + 1] = Math.round(this.lerp(data1[i + 1], data2[i + 1], ratio)); // G\n result[i + 2] = Math.round(this.lerp(data1[i + 2], data2[i + 2], ratio)); // B\n result[i + 3] = Math.round(this.lerp(data1[i + 3], data2[i + 3], ratio)); // A\n }\n\n return new ImageData(result, width, height);\n }\n\n /**\n * 计算像素亮度\n */\n static getLuminance(r: number, g: number, b: number): number {\n return r * 0.299 + g * 0.587 + b * 0.114;\n }\n\n /**\n * 应用褐色调效果\n */\n static applySepiaToPixel(r: number, g: number, b: number): [number, number, number] {\n const sepiaR = Math.min(255, r * 0.393 + g * 0.769 + b * 0.189);\n const sepiaG = Math.min(255, r * 0.349 + g * 0.686 + b * 0.168);\n const sepiaB = Math.min(255, r * 0.272 + g * 0.534 + b * 0.131);\n return [sepiaR, sepiaG, sepiaB];\n }\n\n /**\n * 动态计算强度(基于动画时间的线性增长)\n */\n static calculateDynamicStrength(baseStrength: number, animationTime: number): number {\n // 时间范围0-2π,标准化到0-1\n return baseStrength * (animationTime / (Math.PI * 2));\n }\n}\n\n/**\n * WebGL着色器片段库\n */\nexport class ShaderLibrary {\n /**\n * 标准顶点着色器\n */\n static readonly STANDARD_VERTEX_SHADER = `\n attribute vec2 a_position;\n attribute vec2 a_texCoord;\n varying vec2 v_texCoord;\n\n void main() {\n gl_Position = vec4(a_position, 0.0, 1.0);\n v_texCoord = a_texCoord;\n }\n `;\n\n /**\n * 常用的着色器函数库\n */\n static readonly SHADER_FUNCTIONS = `\n // 亮度计算函数\n float luminance(vec3 color) {\n return dot(color, vec3(0.299, 0.587, 0.114));\n }\n\n // 褐色调函数\n vec3 sepia(vec3 color) {\n float r = color.r * 0.393 + color.g * 0.769 + color.b * 0.189;\n float g = color.r * 0.349 + color.g * 0.686 + color.b * 0.168;\n float b = color.r * 0.272 + color.g * 0.534 + color.b * 0.131;\n return vec3(r, g, b);\n }\n\n // 线性插值函数\n float lerp(float a, float b, float t) {\n return a * (1.0 - t) + b * t;\n }\n\n\n // 简单噪声函数\n float pixelNoise(vec2 coord, float pixelSize) {\n vec2 gridCoord = floor(coord / pixelSize) * pixelSize;\n return fract(sin(dot(gridCoord, vec2(12.9898, 78.233))) * 43758.5453123);\n }\n\n // 动态强度计算\n float calculateDynamicStrength(float baseStrength, float time) {\n return baseStrength * (time / 6.28318531); // 2π\n }\n `;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/custom/disappear/gaussian-blur.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"sources":["../src/custom/disappear/gaussian-blur.ts"],"names":[],"mappings":"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","file":"gaussian-blur.js","sourcesContent":["import type { EasingType } from '@visactor/vrender-core';\nimport { VGlobal, vglobal } from '@visactor/vrender-core';\nimport { AStageAnimate } from '../custom-animate';\n\n// 模糊效果配置接口\nexport interface BlurConfig {\n blurRadius: number;\n useOptimizedBlur: boolean;\n}\n\nexport class GaussianBlur extends AStageAnimate<any> {\n // 模糊配置\n private blurConfig: BlurConfig;\n\n constructor(from: null, to: null, duration: number, easing: EasingType, params: any) {\n super(from, to, duration, easing, params);\n\n this.blurConfig = {\n blurRadius: params?.options?.blurRadius || 8,\n useOptimizedBlur: params?.options?.useOptimizedBlur !== undefined ? params.options.useOptimizedBlur : true\n };\n }\n // 使用CSS滤镜(性能最好)\n private applyCSSBlur(canvas: HTMLCanvasElement, radius: number): HTMLCanvasElement {\n const c = vglobal.createCanvas({\n width: canvas.width,\n height: canvas.height,\n dpr: vglobal.devicePixelRatio\n });\n const ctx = c.getContext('2d');\n if (!ctx) {\n return canvas;\n }\n\n // 使用CSS滤镜进行模糊\n ctx.filter = `blur(${radius}px)`;\n ctx.drawImage(canvas, 0, 0);\n ctx.filter = 'none';\n\n return c;\n }\n\n // 降采样模糊(减少计算量)\n private applyDownsampleBlur(imageData: ImageData, radius: number): ImageData {\n const { width, height } = imageData;\n\n // 降采样因子,减少计算量\n const downsample = Math.max(1, Math.floor(radius / 2));\n const smallWidth = Math.floor(width / downsample);\n const smallHeight = Math.floor(height / downsample);\n\n // 创建小尺寸的临时canvas\n const tempCanvas = vglobal.createCanvas({\n width: smallWidth,\n height: smallHeight,\n dpr: 1\n });\n const tempCtx = tempCanvas.getContext('2d');\n if (!tempCtx) {\n return imageData;\n }\n\n // 将图像绘制到小canvas上\n const originalCanvas = vglobal.createCanvas({\n width: width,\n height: height,\n dpr: 1\n });\n const originalCtx = originalCanvas.getContext('2d');\n if (!originalCtx) {\n return imageData;\n }\n\n originalCtx.putImageData(imageData, 0, 0);\n\n // 缩小绘制(自动插值)\n tempCtx.drawImage(originalCanvas, 0, 0, smallWidth, smallHeight);\n\n // 应用模糊到小图像\n tempCtx.filter = `blur(${radius / downsample}px)`;\n tempCtx.drawImage(tempCanvas, 0, 0);\n tempCtx.filter = 'none';\n\n // 放大回原尺寸\n originalCtx.clearRect(0, 0, width, height);\n originalCtx.drawImage(tempCanvas, 0, 0, width, height);\n\n return originalCtx.getImageData(0, 0, width, height);\n }\n\n protected afterStageRender(stage: any, canvas: HTMLCanvasElement): HTMLCanvasElement | void | null | false {\n // 如果模糊强度为0,直接返回原图\n if (this.blurConfig.blurRadius <= 0) {\n return canvas;\n }\n\n let result: HTMLCanvasElement;\n\n if (this.blurConfig.useOptimizedBlur) {\n // 使用CSS滤镜(性能最好)\n result = this.applyCSSBlur(canvas, this.blurConfig.blurRadius);\n } else {\n // 使用传统的像素级模糊\n const c = vglobal.createCanvas({\n width: canvas.width,\n height: canvas.height,\n dpr: vglobal.devicePixelRatio\n });\n const ctx = c.getContext('2d');\n if (!ctx) {\n return false;\n }\n\n // 清空画布\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // 绘制原始图像\n ctx.drawImage(canvas, 0, 0);\n\n // 获取图像数据\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n\n // 高质量模式下统一使用降采样模糊\n const blurredImageData = this.applyDownsampleBlur(imageData, this.blurConfig.blurRadius);\n\n // 将模糊后的图像数据绘制到画布上\n ctx.putImageData(blurredImageData, 0, 0);\n\n result = c;\n }\n\n // 添加一个半透明的覆盖层来增强效果\n const ctx = result.getContext('2d');\n if (ctx) {\n ctx.globalCompositeOperation = 'overlay';\n ctx.fillStyle = 'rgba(255, 255, 255, 0.1)';\n ctx.fillRect(0, 0, result.width, result.height);\n ctx.globalCompositeOperation = 'source-over';\n }\n\n return result;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/custom/disappear/pixelation.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"sources":["../src/custom/disappear/pixelation.ts"],"names":[],"mappings":"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","file":"pixelation.js","sourcesContent":["import type { EasingType } from '@visactor/vrender-core';\nimport { VGlobal, vglobal } from '@visactor/vrender-core';\nimport { DisappearAnimateBase } from './base/DisappearAnimateBase';\n\nexport interface PixelationConfig {\n maxPixelSize?: number; // 最大像素化强度\n method?: 'out' | 'in'; // 像素化方法:out为出场效果,in为入场效果\n}\n\nexport class Pixelation extends DisappearAnimateBase<any> {\n private pixelationConfig: Required<PixelationConfig>;\n\n constructor(from: null, to: null, duration: number, easing: EasingType, params: any) {\n super(from, to, duration, easing, params);\n\n this.pixelationConfig = {\n maxPixelSize: params?.options?.maxPixelSize || 20,\n method: params?.options?.method || 'out'\n };\n }\n\n // Canvas 2D 降采样像素化\n private applyDownsamplePixelation(canvas: HTMLCanvasElement, pixelSize: number): HTMLCanvasElement {\n if (pixelSize <= 1) {\n return canvas;\n }\n\n const { width, height } = canvas;\n\n // 创建小尺寸的离屏Canvas\n const smallWidth = Math.ceil(width / pixelSize);\n const smallHeight = Math.ceil(height / pixelSize);\n\n const smallCanvas = vglobal.createCanvas({\n width: smallWidth,\n height: smallHeight,\n dpr: 1\n });\n const smallCtx = smallCanvas.getContext('2d');\n if (!smallCtx) {\n return canvas;\n }\n\n // 创建输出Canvas\n const outputCanvas = vglobal.createCanvas({\n width: width,\n height: height,\n dpr: vglobal.devicePixelRatio\n });\n const outputCtx = outputCanvas.getContext('2d');\n if (!outputCtx) {\n return canvas;\n }\n\n // 关闭图像平滑以获得清晰的像素块效果\n smallCtx.imageSmoothingEnabled = false;\n outputCtx.imageSmoothingEnabled = false;\n\n // 将原图绘制到小Canvas上(自动降采样)\n smallCtx.drawImage(canvas, 0, 0, smallWidth, smallHeight);\n\n // 将小图放大绘制到输出Canvas上\n outputCtx.drawImage(smallCanvas, 0, 0, width, height);\n\n return outputCanvas;\n }\n\n private updateAnimationProgress(): number {\n // 直接根据动画进度计算像素化强度\n\n if (this.pixelationConfig.method === 'in') {\n // 入场效果:从最大值逐渐减小到1\n const currentPixelSize =\n this.pixelationConfig.maxPixelSize - this.currentAnimationRatio * (this.pixelationConfig.maxPixelSize - 1);\n return currentPixelSize;\n }\n // 退场效果:从1逐渐增加到最大值(默认行为)\n const currentPixelSize = 1 + this.currentAnimationRatio * (this.pixelationConfig.maxPixelSize - 1);\n return currentPixelSize;\n }\n\n protected afterStageRender(stage: any, canvas: HTMLCanvasElement): HTMLCanvasElement | void | null | false {\n // 更新动画进度并获取当前像素化强度\n const currentPixelSize = this.updateAnimationProgress();\n\n // 如果像素化强度为1或更小,直接返回原图\n if (currentPixelSize <= 1) {\n return canvas;\n }\n\n // 直接使用降采样像素化方法\n const result: HTMLCanvasElement = this.applyDownsamplePixelation(canvas, currentPixelSize);\n return result;\n }\n}\n"]}
|
package/es/custom/morphing.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { splitArc, splitCircle, splitLine, splitRect, splitPolygon, splitArea, splitPath, CustomPath2D,
|
|
1
|
+
import { splitArc, splitCircle, splitLine, splitRect, splitPolygon, splitArea, splitPath, CustomPath2D, graphicService, interpolateColor, ColorStore, ColorType, alignBezierCurves, applyTransformOnBezierCurves, findBestMorphingRotation, pathToBezierCurves, AttributeUpdateType } from "@visactor/vrender-core";
|
|
2
2
|
|
|
3
3
|
import { isArray, isNil } from "@visactor/vutils";
|
|
4
4
|
|
|
@@ -177,7 +177,7 @@ const parseShadowChildAttrs = graphicAttrs => {
|
|
|
177
177
|
shadowRoot.setTheme({
|
|
178
178
|
rect: childAttrs
|
|
179
179
|
}), new Array(count).fill(0).forEach((el => {
|
|
180
|
-
const child =
|
|
180
|
+
const child = graphicService.creator.rect({
|
|
181
181
|
x: 0,
|
|
182
182
|
y: 0,
|
|
183
183
|
width: width,
|
|
@@ -195,7 +195,7 @@ export const cloneGraphic = (graphic, count, needAppend) => {
|
|
|
195
195
|
const element = {
|
|
196
196
|
path: (new CustomPath2D).fromCustomPath2D(path)
|
|
197
197
|
};
|
|
198
|
-
children.push(
|
|
198
|
+
children.push(graphicService.creator.path(needAppend ? element : Object.assign({}, childAttrs, element)));
|
|
199
199
|
}
|
|
200
200
|
return needAppend && appendShadowChildrenToGraphic(graphic, children, count), children;
|
|
201
201
|
};
|
|
@@ -204,15 +204,15 @@ export const splitGraphic = (graphic, count, needAppend) => {
|
|
|
204
204
|
const children = [], childAttrs = needAppend ? null : parseShadowChildAttrs(graphic.attribute);
|
|
205
205
|
if ("rect" === graphic.type) {
|
|
206
206
|
splitRect(graphic, count).forEach((element => {
|
|
207
|
-
children.push(
|
|
207
|
+
children.push(graphicService.creator.rect(needAppend ? element : Object.assign({}, childAttrs, element)));
|
|
208
208
|
}));
|
|
209
209
|
} else if ("arc" === graphic.type) {
|
|
210
210
|
splitArc(graphic, count).forEach((element => {
|
|
211
|
-
children.push(
|
|
211
|
+
children.push(graphicService.creator.arc(needAppend ? element : Object.assign({}, childAttrs, element)));
|
|
212
212
|
}));
|
|
213
213
|
} else if ("circle" === graphic.type) {
|
|
214
214
|
splitCircle(graphic, count).forEach((element => {
|
|
215
|
-
children.push(
|
|
215
|
+
children.push(graphicService.creator.arc(needAppend ? element : Object.assign({}, childAttrs, element)));
|
|
216
216
|
}));
|
|
217
217
|
} else if ("line" === graphic.type) {
|
|
218
218
|
const childrenAttrs = splitLine(graphic, count), defaultSymbol = {
|
|
@@ -220,19 +220,19 @@ export const splitGraphic = (graphic, count, needAppend) => {
|
|
|
220
220
|
symbolType: "circle"
|
|
221
221
|
};
|
|
222
222
|
childrenAttrs.forEach((element => {
|
|
223
|
-
children.push(
|
|
223
|
+
children.push(graphicService.creator.symbol(needAppend ? Object.assign({}, element, defaultSymbol) : Object.assign({}, childAttrs, element, defaultSymbol)));
|
|
224
224
|
}));
|
|
225
225
|
} else if ("polygon" === graphic.type) {
|
|
226
226
|
splitPolygon(graphic, count).forEach((element => {
|
|
227
|
-
children.push(
|
|
227
|
+
children.push(graphicService.creator.polygon(needAppend ? element : Object.assign({}, childAttrs, element)));
|
|
228
228
|
}));
|
|
229
229
|
} else if ("area" === graphic.type) {
|
|
230
230
|
splitArea(graphic, count).forEach((element => {
|
|
231
|
-
children.push(
|
|
231
|
+
children.push(graphicService.creator.polygon(needAppend ? element : Object.assign({}, childAttrs, element)));
|
|
232
232
|
}));
|
|
233
233
|
} else if ("path" === graphic.type) {
|
|
234
234
|
splitPath(graphic, count).forEach((element => {
|
|
235
|
-
"path" in element ? children.push(
|
|
235
|
+
"path" in element ? children.push(graphicService.creator.path(needAppend ? element : Object.assign({}, childAttrs, element))) : children.push(graphicService.creator.polygon(needAppend ? element : Object.assign({}, childAttrs, element)));
|
|
236
236
|
}));
|
|
237
237
|
}
|
|
238
238
|
return needAppend && appendShadowChildrenToGraphic(graphic, children, count), children;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/custom/morphing.ts"],"names":[],"mappings":"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","file":"morphing.js","sourcesContent":["import {\n splitArc,\n splitCircle,\n splitLine,\n splitRect,\n splitPolygon,\n splitArea,\n splitPath,\n CustomPath2D,\n application,\n interpolateColor,\n ColorStore,\n ColorType,\n alignBezierCurves,\n applyTransformOnBezierCurves,\n findBestMorphingRotation,\n pathToBezierCurves,\n AttributeUpdateType,\n type MorphingAnimateConfig,\n type MultiMorphingAnimateConfig,\n type ICustomPath2D,\n type IGraphic,\n type IRect,\n type EasingType,\n type IArc,\n type ICircle,\n type IGraphicAttribute,\n type ILine,\n type IPolygon,\n type IArea,\n type IPath\n} from '@visactor/vrender-core';\nimport { isArray, isNil, type IMatrix } from '@visactor/vutils';\nimport { ACustomAnimate } from './custom-animate';\nimport { DefaultMorphingAnimateConfig } from '../config/morphing';\nimport { isTransformKey } from '../utils/transform';\n\ndeclare const __DEV__: boolean;\n\ninterface MorphingDataItem {\n from: number[];\n to: number[];\n fromCp: number[];\n toCp: number[];\n rotation: number;\n}\n\ninterface OtherAttrItem {\n from: any;\n to: any;\n key: string;\n}\n\n/**\n * 插值计算非路径属性(如颜色、透明度等)\n * @param attrs 要插值的属性数组\n * @param out 输出对象\n * @param ratio 插值比例\n */\nconst interpolateOtherAttrs = (attrs: OtherAttrItem[], out: any, ratio: number) => {\n attrs.forEach(entry => {\n if (Number.isFinite(entry.to)) {\n out[entry.key] = entry.from + (entry.to - entry.from) * ratio;\n } else if (entry.key === 'fill' || entry.key === 'stroke') {\n // 保存解析的结果到step\n const color = interpolateColor(entry.from, entry.to, ratio, false);\n if (color) {\n out[entry.key] = color;\n }\n }\n });\n};\n\n/* Adapted from zrender by ecomfe\n * https://github.com/ecomfe/zrender\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/ecomfe/zrender/blob/master/src/tool/morphPath.ts\n * License: https://github.com/ecomfe/zrender/blob/master/LICENSE\n * @license\n */\n/**\n * 根据给定比例插值计算形变数据并应用到路径\n * @param morphingData 形变数据\n * @param path 目标路径对象\n * @param ratio 插值比例\n */\nconst interpolateMorphingData = (morphingData: MorphingDataItem[], path: ICustomPath2D, ratio: number) => {\n const tmpArr: number[] = [];\n const newCp: number[] = [];\n path.clear();\n\n for (let i = 0; i < morphingData.length; i++) {\n const item = morphingData[i];\n const from = item.from;\n const to = item.to;\n const angle = item.rotation * ratio;\n const fromCp = item.fromCp;\n const toCp = item.toCp;\n const sa = Math.sin(angle);\n const ca = Math.cos(angle);\n\n newCp[0] = fromCp[0] + (toCp[0] - fromCp[0]) * ratio;\n newCp[1] = fromCp[1] + (toCp[1] - fromCp[1]) * ratio;\n\n for (let m = 0; m < from.length; m += 2) {\n const x0 = from[m];\n const y0 = from[m + 1];\n const x1 = to[m];\n const y1 = to[m + 1];\n\n const x = x0 * (1 - ratio) + x1 * ratio;\n const y = y0 * (1 - ratio) + y1 * ratio;\n\n tmpArr[m] = x * ca - y * sa + newCp[0];\n tmpArr[m + 1] = x * sa + y * ca + newCp[1];\n }\n\n let x0 = tmpArr[0];\n let y0 = tmpArr[1];\n\n path.moveTo(x0, y0);\n\n for (let m = 2; m < from.length; m += 6) {\n const x1 = tmpArr[m];\n const y1 = tmpArr[m + 1];\n const x2 = tmpArr[m + 2];\n const y2 = tmpArr[m + 3];\n const x3 = tmpArr[m + 4];\n const y3 = tmpArr[m + 5];\n\n // Is a line.\n if (x0 === x1 && y0 === y1 && x2 === x3 && y2 === y3) {\n path.lineTo(x3, y3);\n } else {\n path.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n }\n x0 = x3;\n y0 = y3;\n }\n }\n};\n\n/**\n * 解析形变数据,将源路径和目标路径转换为贝塞尔曲线并找到最佳旋转角度\n * @param fromPath 源路径\n * @param toPath 目标路径\n * @param config 变换配置\n * @returns 形变数据数组\n */\nconst parseMorphingData = (\n fromPath: ICustomPath2D | null,\n toPath: ICustomPath2D,\n config?: {\n fromTransform?: IMatrix;\n toTransfrom: IMatrix;\n }\n) => {\n // [fromPath, toPath] = [toPath, fromPath];\n const fromBezier = fromPath ? pathToBezierCurves(fromPath) : [];\n const toBezier = pathToBezierCurves(toPath);\n\n if (config && fromBezier) {\n config.fromTransform && applyTransformOnBezierCurves(fromBezier, config.fromTransform.clone().getInverse());\n applyTransformOnBezierCurves(fromBezier, config.toTransfrom);\n // applyTransformOnBezierCurves(toBezier, config.toTransfrom.clone().getInverse());\n }\n\n const [fromBezierCurves, toBezierCurves] = alignBezierCurves(fromBezier, toBezier);\n\n return fromPath\n ? findBestMorphingRotation(fromBezierCurves, toBezierCurves, 10, Math.PI)\n : toBezierCurves.map((to, index) => {\n return {\n from: fromBezierCurves[index],\n to,\n fromCp: [0, 0],\n toCp: [0, 0],\n rotation: 0\n };\n });\n};\n\nconst validateOtherAttrs = [\n 'fill',\n 'fillOpacity',\n 'shadowBlur',\n 'shadowColor',\n 'shadowOffsetX',\n 'shadowOffsetY',\n 'stroke',\n 'strokeOpacity',\n 'lineDashOffset'\n // 'lineWidth'\n];\n\n/**\n * 解析可动画属性,提取源属性和目标属性的差异\n * @param fromAttrs 源属性\n * @param toAttrs 目标属性\n * @returns 可动画属性数组\n */\nconst parseOtherAnimateAttrs = (\n fromAttrs: Partial<IGraphicAttribute> | null,\n toAttrs: Partial<IGraphicAttribute> | null\n) => {\n if (!fromAttrs || !toAttrs) {\n return null;\n }\n const res: OtherAttrItem[] = [];\n let hasAttr = false;\n\n Object.keys(fromAttrs).forEach(fromKey => {\n if (!validateOtherAttrs.includes(fromKey)) {\n return;\n }\n\n const toValue = (toAttrs as any)[fromKey];\n if (!isNil(toValue) && !isNil((fromAttrs as any)[fromKey]) && toValue !== (fromAttrs as any)[fromKey]) {\n if (fromKey === 'fill' || fromKey === 'stroke') {\n const parseColor = (color: string) => {\n return typeof color === 'string' ? ColorStore.Get(color, ColorType.Color255) : color;\n };\n res.push({\n from: isArray(fromAttrs[fromKey])\n ? (fromAttrs[fromKey] as any).map(parseColor)\n : parseColor((fromAttrs as any)[fromKey]),\n to: isArray(toValue) ? toValue.map(parseColor) : parseColor(toValue),\n key: fromKey\n });\n } else {\n res.push({ from: (fromAttrs as any)[fromKey], to: toValue, key: fromKey });\n }\n\n hasAttr = true;\n }\n });\n\n return hasAttr ? res : null;\n};\n\n/**\n * 形变路径动画类,用于处理路径和其他属性的形变\n */\nexport class MorphingPath extends ACustomAnimate<Record<string, any>> {\n declare path: CustomPath2D;\n\n saveOnEnd?: boolean;\n otherAttrs?: OtherAttrItem[];\n\n constructor(\n config: { morphingData: MorphingDataItem[]; otherAttrs?: OtherAttrItem[]; saveOnEnd?: boolean },\n duration: number,\n easing: EasingType\n ) {\n super({}, {}, duration, easing);\n this.morphingData = config.morphingData;\n this.otherAttrs = config.otherAttrs;\n this.saveOnEnd = config.saveOnEnd;\n }\n\n private morphingData?: MorphingDataItem[];\n\n getEndProps(): Record<string, any> {\n return {};\n }\n\n onBind(): void {\n (this.target as IGraphic).createPathProxy();\n this.onUpdate(false, 0, (this.target as IGraphic).attribute);\n }\n\n onEnd(): void {\n return;\n }\n\n /**\n * 更新动画状态\n * @param end 是否结束\n * @param ratio 动画进度比例\n * @param out 输出属性对象\n */\n onUpdate(end: boolean, ratio: number, out: Record<string, any>): void {\n const target = this.target as IGraphic;\n const pathProxy = typeof target.pathProxy === 'function' ? target.pathProxy(target.attribute) : target.pathProxy;\n interpolateMorphingData(this.morphingData, pathProxy, ratio);\n if (this.otherAttrs && this.otherAttrs.length) {\n interpolateOtherAttrs(this.otherAttrs, out, ratio);\n }\n this.target.setAttributes(out);\n // 计算位置\n if (end && !this.saveOnEnd) {\n (this.target as IGraphic).pathProxy = null;\n }\n }\n}\n\n/**\n * 创建从一个图形到另一个图形的形变动画\n * @param fromGraphic 源图形\n * @param toGraphic 目标图形\n * @param animationConfig 动画配置\n * @param fromGraphicTransform 源图形变换矩阵\n * @returns 动画实例\n */\nexport const morphPath = (\n fromGraphic: IGraphic | null,\n toGraphic: IGraphic,\n animationConfig?: MorphingAnimateConfig,\n fromGraphicTransform?: IMatrix\n) => {\n if (fromGraphic && (!fromGraphic.valid || !fromGraphic.toCustomPath)) {\n if (__DEV__) {\n console.error(fromGraphic, ' is not validate');\n }\n return null;\n }\n\n if (!toGraphic.valid || !toGraphic.toCustomPath) {\n if (__DEV__) {\n console.error(toGraphic, ' is not validate');\n }\n return null;\n }\n\n let fromTransform = fromGraphic?.globalTransMatrix;\n\n if (fromGraphicTransform && fromTransform) {\n fromTransform = fromGraphicTransform\n .clone()\n .multiply(fromTransform.a, fromTransform.b, fromTransform.c, fromTransform.d, fromTransform.e, fromTransform.f);\n }\n const morphingData = parseMorphingData(fromGraphic?.toCustomPath?.(), toGraphic.toCustomPath(), {\n fromTransform,\n toTransfrom: toGraphic.globalTransMatrix\n });\n\n const attrs = parseOtherAnimateAttrs(fromGraphic?.attribute, toGraphic.attribute);\n const animate = toGraphic.animate(animationConfig);\n\n if (animationConfig?.delay) {\n animate.wait(animationConfig.delay);\n }\n\n const morphingPath = new MorphingPath(\n { morphingData, otherAttrs: attrs },\n animationConfig?.duration ?? DefaultMorphingAnimateConfig.duration,\n animationConfig?.easing ?? DefaultMorphingAnimateConfig.easing\n );\n animate.play(morphingPath);\n\n return animate;\n};\n\n/**\n * 创建从一个图形到多个图形的形变动画\n * @param fromGraphic 源图形\n * @param toGraphics 目标图形数组\n * @param animationConfig 动画配置\n */\nexport const oneToMultiMorph = (\n fromGraphic: IGraphic,\n toGraphics: IGraphic[],\n animationConfig?: MultiMorphingAnimateConfig\n) => {\n const validateToGraphics = toGraphics.filter(graphic => graphic && graphic.toCustomPath && graphic.valid);\n if (!validateToGraphics.length) {\n if (__DEV__) {\n console.error(validateToGraphics, ' is not validate');\n }\n }\n\n if (!fromGraphic.valid || !fromGraphic.toCustomPath) {\n if (__DEV__) {\n console.error(fromGraphic, ' is not validate');\n }\n }\n\n const childGraphics: IGraphic[] = (\n animationConfig?.splitPath === 'clone' ? cloneGraphic : (animationConfig?.splitPath ?? splitGraphic)\n )(fromGraphic, validateToGraphics.length, false);\n\n const oldOnEnd = animationConfig?.onEnd;\n let count = validateToGraphics.length;\n const onEachEnd = () => {\n count--;\n if (count === 0 && oldOnEnd) {\n oldOnEnd();\n }\n };\n\n validateToGraphics.forEach((toChild, index) => {\n const fromChild = childGraphics[index];\n const delay =\n (animationConfig?.delay ?? 0) +\n (animationConfig?.individualDelay\n ? animationConfig.individualDelay(index, validateToGraphics.length, fromChild, toChild)\n : 0);\n morphPath(\n fromChild,\n toChild,\n Object.assign({}, animationConfig, { onEnd: onEachEnd, delay }),\n fromGraphic.globalTransMatrix\n );\n });\n};\n\n/**\n * 多对一形变路径动画类,用于处理多个路径形变为一个目标路径\n */\nexport class MultiToOneMorphingPath extends ACustomAnimate<Record<string, any>> {\n declare path: CustomPath2D;\n\n otherAttrs?: OtherAttrItem[][];\n\n constructor(\n config: { morphingData: MorphingDataItem[][]; otherAttrs?: OtherAttrItem[][] },\n duration: number,\n easing: EasingType\n ) {\n super({}, {}, duration, easing);\n this.morphingData = config.morphingData;\n this.otherAttrs = config.otherAttrs;\n }\n\n private morphingData?: MorphingDataItem[][];\n\n getEndProps(): Record<string, any> {\n return {};\n }\n\n onBind(): void {\n this.addPathProxy();\n }\n\n /**\n * 为每个子图形添加路径代理\n */\n private addPathProxy() {\n const shadowRoot = (this.target as IGraphic).shadowRoot;\n\n shadowRoot.forEachChildren(child => {\n (child as IGraphic).createPathProxy();\n });\n\n this.onUpdate(false, 0, (this.target as IGraphic).attribute);\n }\n\n /**\n * 清除所有子图形的路径代理\n */\n private clearPathProxy() {\n const shadowRoot = (this.target as IGraphic).shadowRoot;\n\n shadowRoot.forEachChildren(child => {\n (child as IGraphic).pathProxy = null;\n });\n }\n\n onEnd(): void {\n return;\n }\n\n /**\n * 更新动画状态\n * @param end 是否结束\n * @param ratio 动画进度比例\n * @param out 输出属性对象\n */\n onUpdate(end: boolean, ratio: number, out: Record<string, any>): void {\n const shadowRoot = (this.target as IGraphic).shadowRoot;\n\n shadowRoot.forEachChildren((child: IGraphic, index) => {\n interpolateMorphingData(\n this.morphingData[index],\n typeof child.pathProxy === 'function' ? child.pathProxy(child.attribute) : child.pathProxy,\n ratio\n );\n\n if (this.otherAttrs?.[index] && this.otherAttrs[index].length) {\n interpolateOtherAttrs(this.otherAttrs[index], child.attribute, ratio);\n }\n });\n\n // 计算位置\n if (end) {\n this.clearPathProxy();\n this.morphingData = null;\n }\n }\n}\n\n/**\n * 解析图形的阴影子元素属性(排除变换相关属性)\n * @param graphicAttrs 图形属性\n * @returns 阴影子元素属性\n */\nconst parseShadowChildAttrs = (graphicAttrs: Partial<IGraphicAttribute>) => {\n const attrs: Partial<IGraphicAttribute> = {};\n\n Object.keys(graphicAttrs).forEach(key => {\n if (!isTransformKey(key)) {\n (attrs as any)[key] = (graphicAttrs as any)[key];\n }\n });\n\n // if (attrs.fill == null) {\n // attrs.fill = !!attrs.fillColor;\n // }\n // if (attrs.stroke == null) {\n // attrs.stroke = !!attrs.strokeColor;\n // }\n\n return attrs;\n};\n\n/**\n * 将阴影子元素添加到图形中\n * @param graphic 目标图形\n * @param children 子元素数组\n * @param count 子元素数量\n */\nconst appendShadowChildrenToGraphic = (graphic: IGraphic, children: IGraphic[], count: number) => {\n const childAttrs = parseShadowChildAttrs(graphic.attribute);\n const shadowRoot = graphic.attachShadow();\n\n if (children.length) {\n shadowRoot.setTheme({\n [children[0].type]: childAttrs\n });\n children.forEach(element => {\n element.setAttributes({ pickable: false });\n shadowRoot.appendChild(element);\n });\n } else {\n const box = graphic.AABBBounds;\n const width = box.width();\n const height = box.height();\n\n shadowRoot.setTheme({\n rect: childAttrs\n });\n new Array(count).fill(0).forEach(el => {\n const child = application.graphicService.creator.rect({\n x: 0,\n y: 0,\n width,\n height: height,\n pickable: false\n });\n shadowRoot.appendChild(child);\n children.push(child);\n });\n }\n};\n\n/**\n * 克隆图形为多个相同的图形\n * @param graphic 源图形\n * @param count 克隆数量\n * @param needAppend 是否需要添加到源图形中\n * @returns 克隆的图形数组\n */\nexport const cloneGraphic = (graphic: IGraphic, count: number, needAppend?: boolean) => {\n const children: IGraphic[] = [];\n const childAttrs = needAppend ? null : parseShadowChildAttrs(graphic.attribute);\n const path = graphic.toCustomPath();\n\n for (let i = 0; i < count; i++) {\n const element = {\n path: new CustomPath2D().fromCustomPath2D(path)\n };\n\n children.push(\n application.graphicService.creator.path(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n }\n\n if (needAppend) {\n appendShadowChildrenToGraphic(graphic, children, count);\n }\n\n return children;\n};\n\n/**\n * 将图形分割为多个子图形\n * @param graphic 源图形\n * @param count 分割数量\n * @param needAppend 是否需要添加到源图形中\n * @returns 分割后的图形数组\n */\nexport const splitGraphic = (graphic: IGraphic, count: number, needAppend?: boolean) => {\n const children: IGraphic[] = [];\n const childAttrs = needAppend ? null : parseShadowChildAttrs(graphic.attribute);\n\n if (graphic.type === 'rect') {\n const childrenAttrs = splitRect(graphic as IRect, count);\n childrenAttrs.forEach(element => {\n children.push(\n application.graphicService.creator.rect(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n });\n } else if (graphic.type === 'arc') {\n const childrenAttrs = splitArc(graphic as IArc, count);\n childrenAttrs.forEach(element => {\n children.push(\n application.graphicService.creator.arc(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n });\n } else if (graphic.type === 'circle') {\n const childrenAttrs = splitCircle(graphic as ICircle, count);\n childrenAttrs.forEach(element => {\n children.push(\n application.graphicService.creator.arc(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n });\n } else if (graphic.type === 'line') {\n const childrenAttrs = splitLine(graphic as ILine, count);\n const defaultSymbol = { size: 10, symbolType: 'circle' };\n\n childrenAttrs.forEach(element => {\n children.push(\n application.graphicService.creator.symbol(\n needAppend ? Object.assign({}, element, defaultSymbol) : Object.assign({}, childAttrs, element, defaultSymbol)\n )\n );\n });\n } else if (graphic.type === 'polygon') {\n const childrenAttrs = splitPolygon(graphic as IPolygon, count);\n childrenAttrs.forEach(element => {\n children.push(\n application.graphicService.creator.polygon(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n });\n } else if (graphic.type === 'area') {\n const childrenAttrs = splitArea(graphic as IArea, count);\n childrenAttrs.forEach(element => {\n children.push(\n application.graphicService.creator.polygon(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n });\n } else if (graphic.type === 'path') {\n const childrenAttrs = splitPath(graphic as IPath, count);\n childrenAttrs.forEach(element => {\n if ('path' in element) {\n children.push(\n application.graphicService.creator.path(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n } else {\n children.push(\n application.graphicService.creator.polygon(needAppend ? element : Object.assign({}, childAttrs, element))\n );\n }\n });\n }\n\n if (needAppend) {\n appendShadowChildrenToGraphic(graphic, children, count);\n }\n\n return children;\n};\n\n/**\n * 创建从多个图形到一个图形的形变动画\n * @param fromGraphics 源图形数组\n * @param toGraphic 目标图形\n * @param animationConfig 动画配置\n */\nexport const multiToOneMorph = (\n fromGraphics: IGraphic[],\n toGraphic: IGraphic,\n animationConfig?: MultiMorphingAnimateConfig\n) => {\n const validateFromGraphics = fromGraphics.filter(graphic => graphic.toCustomPath && graphic.valid);\n if (!validateFromGraphics.length) {\n if (__DEV__) {\n console.error(fromGraphics, ' is not validate');\n }\n }\n\n if (!toGraphic.valid || !toGraphic.toCustomPath) {\n if (__DEV__) {\n console.error(toGraphic, ' is not validate');\n }\n }\n\n const childGraphics: IGraphic[] = (\n animationConfig?.splitPath === 'clone' ? cloneGraphic : (animationConfig?.splitPath ?? splitGraphic)\n )(toGraphic, validateFromGraphics.length, true);\n\n const toAttrs = toGraphic.attribute;\n toGraphic.setAttribute('visible', false);\n\n const morphingData = validateFromGraphics.map((graphic, index) => {\n return parseMorphingData(graphic.toCustomPath(), childGraphics[index].toCustomPath(), {\n fromTransform: graphic.globalTransMatrix,\n toTransfrom: childGraphics[index].globalTransMatrix\n });\n });\n const otherAttrs = validateFromGraphics.map((graphic, index) => {\n return parseOtherAnimateAttrs(graphic.attribute, toAttrs);\n });\n\n if (animationConfig?.individualDelay) {\n const oldOnEnd = animationConfig.onEnd;\n let count = validateFromGraphics.length;\n const onEachEnd = () => {\n count--;\n if (count === 0) {\n toGraphic.setAttributes({ visible: true, ratio: null } as any, false, {\n type: AttributeUpdateType.ANIMATE_END\n });\n toGraphic.detachShadow();\n if (oldOnEnd) {\n oldOnEnd();\n }\n }\n };\n childGraphics.forEach((to, index) => {\n const delay =\n (animationConfig.delay ?? 0) +\n animationConfig.individualDelay(index, validateFromGraphics.length, fromGraphics[index], to);\n const animate = to.animate(Object.assign({}, animationConfig, { onEnd: onEachEnd }));\n animate.wait(delay);\n\n animate.play(\n new MorphingPath(\n {\n morphingData: morphingData[index],\n saveOnEnd: true,\n otherAttrs: otherAttrs[index]\n },\n animationConfig.duration ?? DefaultMorphingAnimateConfig.duration,\n animationConfig.easing ?? DefaultMorphingAnimateConfig.easing\n )\n );\n });\n } else {\n const oldOnEnd = animationConfig?.onEnd;\n const config = animationConfig ? Object.assign({}, animationConfig) : {};\n\n config.onEnd = () => {\n toGraphic.setAttribute('visible', true, false, { type: AttributeUpdateType.ANIMATE_END });\n toGraphic.detachShadow();\n\n if (oldOnEnd) {\n oldOnEnd();\n }\n };\n\n const animate = toGraphic.animate(config);\n\n if (animationConfig?.delay) {\n animate.wait(animationConfig.delay);\n }\n\n animate.play(\n new MultiToOneMorphingPath(\n { morphingData, otherAttrs },\n animationConfig?.duration ?? DefaultMorphingAnimateConfig.duration,\n animationConfig?.easing ?? DefaultMorphingAnimateConfig.easing\n )\n );\n }\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/custom/morphing.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,4BAA4B,EAC5B,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EAcpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAgB,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAwBpD,MAAM,qBAAqB,GAAG,CAAC,KAAsB,EAAE,GAAQ,EAAE,KAAa,EAAE,EAAE;IAChF,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACpB,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YAC7B,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;SAC/D;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAEzD,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACnE,IAAI,KAAK,EAAE;gBACT,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aACxB;SACF;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAgBF,MAAM,uBAAuB,GAAG,CAAC,YAAgC,EAAE,IAAmB,EAAE,KAAa,EAAE,EAAE;IACvG,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE3B,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACrD,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAErD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACvC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAErB,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YACxC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAExC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;SAC5C;QAED,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAEnB,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACvC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAGzB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;gBACpD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aACrB;iBAAM;gBACL,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;aAC5C;YACD,EAAE,GAAG,EAAE,CAAC;YACR,EAAE,GAAG,EAAE,CAAC;SACT;KACF;AACH,CAAC,CAAC;AASF,MAAM,iBAAiB,GAAG,CACxB,QAA8B,EAC9B,MAAqB,EACrB,MAGC,EACD,EAAE;IAEF,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE5C,IAAI,MAAM,IAAI,UAAU,EAAE;QACxB,MAAM,CAAC,aAAa,IAAI,4BAA4B,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5G,4BAA4B,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;KAE9D;IAED,MAAM,CAAC,gBAAgB,EAAE,cAAc,CAAC,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEnF,OAAO,QAAQ;QACb,CAAC,CAAC,wBAAwB,CAAC,gBAAgB,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QACzE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;YAC/B,OAAO;gBACL,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC;gBAC7B,EAAE;gBACF,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBACd,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBACZ,QAAQ,EAAE,CAAC;aACZ,CAAC;QACJ,CAAC,CAAC,CAAC;AACT,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG;IACzB,MAAM;IACN,aAAa;IACb,YAAY;IACZ,aAAa;IACb,eAAe;IACf,eAAe;IACf,QAAQ;IACR,eAAe;IACf,gBAAgB;CAEjB,CAAC;AAQF,MAAM,sBAAsB,GAAG,CAC7B,SAA4C,EAC5C,OAA0C,EAC1C,EAAE;IACF,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE;QAC1B,OAAO,IAAI,CAAC;KACb;IACD,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QACvC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACzC,OAAO;SACR;QAED,MAAM,OAAO,GAAI,OAAe,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAE,SAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,KAAM,SAAiB,CAAC,OAAO,CAAC,EAAE;YACrG,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,EAAE;gBAC9C,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE;oBACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACvF,CAAC,CAAC;gBACF,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;wBAC/B,CAAC,CAAE,SAAS,CAAC,OAAO,CAAS,CAAC,GAAG,CAAC,UAAU,CAAC;wBAC7C,CAAC,CAAC,UAAU,CAAE,SAAiB,CAAC,OAAO,CAAC,CAAC;oBAC3C,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;oBACpE,GAAG,EAAE,OAAO;iBACb,CAAC,CAAC;aACJ;iBAAM;gBACL,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAG,SAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;aAC5E;YAED,OAAO,GAAG,IAAI,CAAC;SAChB;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9B,CAAC,CAAC;AAKF,MAAM,OAAO,YAAa,SAAQ,cAAmC;IAMnE,YACE,MAA+F,EAC/F,QAAgB,EAChB,MAAkB;QAElB,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACpC,CAAC;IAID,WAAW;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM;QACH,IAAI,CAAC,MAAmB,CAAC,eAAe,EAAE,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAG,IAAI,CAAC,MAAmB,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK;QACH,OAAO;IACT,CAAC;IAQD,QAAQ,CAAC,GAAY,EAAE,KAAa,EAAE,GAAwB;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAkB,CAAC;QACvC,MAAM,SAAS,GAAG,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;QACjH,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YAC7C,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;SACpD;QACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAE/B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACzB,IAAI,CAAC,MAAmB,CAAC,SAAS,GAAG,IAAI,CAAC;SAC5C;IACH,CAAC;CACF;AAUD,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,WAA4B,EAC5B,SAAmB,EACnB,eAAuC,EACvC,oBAA8B,EAC9B,EAAE;;IACF,IAAI,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE;QACpE,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;SAChD;QACD,OAAO,IAAI,CAAC;KACb;IAED,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;QAC/C,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;SAC9C;QACD,OAAO,IAAI,CAAC;KACb;IAED,IAAI,aAAa,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,iBAAiB,CAAC;IAEnD,IAAI,oBAAoB,IAAI,aAAa,EAAE;QACzC,aAAa,GAAG,oBAAoB;aACjC,KAAK,EAAE;aACP,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;KACnH;IACD,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,YAAY,2DAAI,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE;QAC9F,aAAa;QACb,WAAW,EAAE,SAAS,CAAC,iBAAiB;KACzC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,sBAAsB,CAAC,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAEnD,IAAI,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,KAAK,EAAE;QAC1B,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;KACrC;IAED,MAAM,YAAY,GAAG,IAAI,YAAY,CACnC,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,EACnC,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,QAAQ,mCAAI,4BAA4B,CAAC,QAAQ,EAClE,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,mCAAI,4BAA4B,CAAC,MAAM,CAC/D,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE3B,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAQF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,WAAqB,EACrB,UAAsB,EACtB,eAA4C,EAC5C,EAAE;;IACF,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1G,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;QAC9B,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;SACvD;KACF;IAED,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;QACnD,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;SAChD;KACF;IAED,MAAM,aAAa,GAAe,CAChC,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,SAAS,MAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,SAAS,mCAAI,YAAY,CACnG,CAAC,WAAW,EAAE,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,KAAK,CAAC;IACxC,IAAI,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC;IACtC,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,KAAK,EAAE,CAAC;QACR,IAAI,KAAK,KAAK,CAAC,IAAI,QAAQ,EAAE;YAC3B,QAAQ,EAAE,CAAC;SACZ;IACH,CAAC,CAAC;IAEF,kBAAkB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;;QAC5C,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GACT,CAAC,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,KAAK,mCAAI,CAAC,CAAC;YAC7B,CAAC,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,eAAe;gBAC/B,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,KAAK,EAAE,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;gBACvF,CAAC,CAAC,CAAC,CAAC,CAAC;QACT,SAAS,CACP,SAAS,EACT,OAAO,EACP,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAC/D,WAAW,CAAC,iBAAiB,CAC9B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAKF,MAAM,OAAO,sBAAuB,SAAQ,cAAmC;IAK7E,YACE,MAA8E,EAC9E,QAAgB,EAChB,MAAkB;QAElB,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACtC,CAAC;IAID,WAAW;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAKO,YAAY;QAClB,MAAM,UAAU,GAAI,IAAI,CAAC,MAAmB,CAAC,UAAU,CAAC;QAExD,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;YAChC,KAAkB,CAAC,eAAe,EAAE,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAG,IAAI,CAAC,MAAmB,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;IAKO,cAAc;QACpB,MAAM,UAAU,GAAI,IAAI,CAAC,MAAmB,CAAC,UAAU,CAAC;QAExD,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;YAChC,KAAkB,CAAC,SAAS,GAAG,IAAI,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,OAAO;IACT,CAAC;IAQD,QAAQ,CAAC,GAAY,EAAE,KAAa,EAAE,GAAwB;QAC5D,MAAM,UAAU,GAAI,IAAI,CAAC,MAAmB,CAAC,UAAU,CAAC;QAExD,UAAU,CAAC,eAAe,CAAC,CAAC,KAAe,EAAE,KAAK,EAAE,EAAE;;YACpD,uBAAuB,CACrB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EACxB,OAAO,KAAK,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAC1F,KAAK,CACN,CAAC;YAEF,IAAI,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAG,KAAK,CAAC,KAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;gBAC7D,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;aACvE;QACH,CAAC,CAAC,CAAC;QAGH,IAAI,GAAG,EAAE;YACP,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC1B;IACH,CAAC;CACF;AAOD,MAAM,qBAAqB,GAAG,CAAC,YAAwC,EAAE,EAAE;IACzE,MAAM,KAAK,GAA+B,EAAE,CAAC;IAE7C,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;YACvB,KAAa,CAAC,GAAG,CAAC,GAAI,YAAoB,CAAC,GAAG,CAAC,CAAC;SAClD;IACH,CAAC,CAAC,CAAC;IASH,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAQF,MAAM,6BAA6B,GAAG,CAAC,OAAiB,EAAE,QAAoB,EAAE,KAAa,EAAE,EAAE;IAC/F,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAE1C,IAAI,QAAQ,CAAC,MAAM,EAAE;QACnB,UAAU,CAAC,QAAQ,CAAC;YAClB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU;SAC/B,CAAC,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3C,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;KACJ;SAAM;QACL,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAE5B,UAAU,CAAC,QAAQ,CAAC;YAClB,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACpC,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;gBACxC,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;gBACJ,KAAK;gBACL,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YACH,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;KACJ;AACH,CAAC,CAAC;AASF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAiB,EAAE,KAAa,EAAE,UAAoB,EAAE,EAAE;IACrF,MAAM,QAAQ,GAAe,EAAE,CAAC;IAChC,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,IAAI,YAAY,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;SAChD,CAAC;QAEF,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;KAC3G;IAED,IAAI,UAAU,EAAE;QACd,6BAA6B,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;KACzD;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AASF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAiB,EAAE,KAAa,EAAE,UAAoB,EAAE,EAAE;IACrF,MAAM,QAAQ,GAAe,EAAE,CAAC;IAChC,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhF,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;QAC3B,MAAM,aAAa,GAAG,SAAS,CAAC,OAAgB,EAAE,KAAK,CAAC,CAAC;QACzD,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC9B,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5G,CAAC,CAAC,CAAC;KACJ;SAAM,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE;QACjC,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAe,EAAE,KAAK,CAAC,CAAC;QACvD,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC9B,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3G,CAAC,CAAC,CAAC;KACJ;SAAM,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;QACpC,MAAM,aAAa,GAAG,WAAW,CAAC,OAAkB,EAAE,KAAK,CAAC,CAAC;QAC7D,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC9B,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3G,CAAC,CAAC,CAAC;KACJ;SAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;QAClC,MAAM,aAAa,GAAG,SAAS,CAAC,OAAgB,EAAE,KAAK,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAEzD,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC9B,QAAQ,CAAC,IAAI,CACX,cAAc,CAAC,OAAO,CAAC,MAAM,CAC3B,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,CAAC,CAC/G,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;KACJ;SAAM,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;QACrC,MAAM,aAAa,GAAG,YAAY,CAAC,OAAmB,EAAE,KAAK,CAAC,CAAC;QAC/D,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC9B,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/G,CAAC,CAAC,CAAC;KACJ;SAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;QAClC,MAAM,aAAa,GAAG,SAAS,CAAC,OAAgB,EAAE,KAAK,CAAC,CAAC;QACzD,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC9B,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/G,CAAC,CAAC,CAAC;KACJ;SAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;QAClC,MAAM,aAAa,GAAG,SAAS,CAAC,OAAgB,EAAE,KAAK,CAAC,CAAC;QACzD,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC9B,IAAI,MAAM,IAAI,OAAO,EAAE;gBACrB,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;aAC3G;iBAAM;gBACL,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;aAC9G;QACH,CAAC,CAAC,CAAC;KACJ;IAED,IAAI,UAAU,EAAE;QACd,6BAA6B,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;KACzD;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAQF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,YAAwB,EACxB,SAAmB,EACnB,eAA4C,EAC5C,EAAE;;IACF,MAAM,oBAAoB,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IACnG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE;QAChC,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;SACjD;KACF;IAED,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;QAC/C,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;SAC9C;KACF;IAED,MAAM,aAAa,GAAe,CAChC,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,SAAS,MAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,SAAS,mCAAI,YAAY,CACnG,CAAC,SAAS,EAAE,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEhD,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC;IACpC,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEzC,MAAM,YAAY,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAC/D,OAAO,iBAAiB,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,EAAE;YACpF,aAAa,EAAE,OAAO,CAAC,iBAAiB;YACxC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,iBAAiB;SACpD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAC7D,OAAO,sBAAsB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,IAAI,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,eAAe,EAAE;QACpC,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC;QACvC,IAAI,KAAK,GAAG,oBAAoB,CAAC,MAAM,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,EAAE;YACrB,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf,SAAS,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAS,EAAE,KAAK,EAAE;oBACpE,IAAI,EAAE,mBAAmB,CAAC,WAAW;iBACtC,CAAC,CAAC;gBACH,SAAS,CAAC,YAAY,EAAE,CAAC;gBACzB,IAAI,QAAQ,EAAE;oBACZ,QAAQ,EAAE,CAAC;iBACZ;aACF;QACH,CAAC,CAAC;QACF,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;;YAClC,MAAM,KAAK,GACT,CAAC,MAAA,eAAe,CAAC,KAAK,mCAAI,CAAC,CAAC;gBAC5B,eAAe,CAAC,eAAe,CAAC,KAAK,EAAE,oBAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/F,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEpB,OAAO,CAAC,IAAI,CACV,IAAI,YAAY,CACd;gBACE,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC;gBACjC,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC;aAC9B,EACD,MAAA,eAAe,CAAC,QAAQ,mCAAI,4BAA4B,CAAC,QAAQ,EACjE,MAAA,eAAe,CAAC,MAAM,mCAAI,4BAA4B,CAAC,MAAM,CAC9D,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;KACJ;SAAM;QACL,MAAM,QAAQ,GAAG,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,KAAK,CAAC;QACxC,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEzE,MAAM,CAAC,KAAK,GAAG,GAAG,EAAE;YAClB,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAmB,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1F,SAAS,CAAC,YAAY,EAAE,CAAC;YAEzB,IAAI,QAAQ,EAAE;gBACZ,QAAQ,EAAE,CAAC;aACZ;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,KAAK,EAAE;YAC1B,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;SACrC;QAED,OAAO,CAAC,IAAI,CACV,IAAI,sBAAsB,CACxB,EAAE,YAAY,EAAE,UAAU,EAAE,EAC5B,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,QAAQ,mCAAI,4BAA4B,CAAC,QAAQ,EAClE,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,mCAAI,4BAA4B,CAAC,MAAM,CAC/D,CACF,CAAC;KACH;AACH,CAAC,CAAC","file":"morphing.js","sourcesContent":["import {\n splitArc,\n splitCircle,\n splitLine,\n splitRect,\n splitPolygon,\n splitArea,\n splitPath,\n CustomPath2D,\n graphicService,\n interpolateColor,\n ColorStore,\n ColorType,\n alignBezierCurves,\n applyTransformOnBezierCurves,\n findBestMorphingRotation,\n pathToBezierCurves,\n AttributeUpdateType,\n type MorphingAnimateConfig,\n type MultiMorphingAnimateConfig,\n type ICustomPath2D,\n type IGraphic,\n type IRect,\n type EasingType,\n type IArc,\n type ICircle,\n type IGraphicAttribute,\n type ILine,\n type IPolygon,\n type IArea,\n type IPath\n} from '@visactor/vrender-core';\nimport { isArray, isNil, type IMatrix } from '@visactor/vutils';\nimport { ACustomAnimate } from './custom-animate';\nimport { DefaultMorphingAnimateConfig } from '../config/morphing';\nimport { isTransformKey } from '../utils/transform';\n\ndeclare const __DEV__: boolean;\n\ninterface MorphingDataItem {\n from: number[];\n to: number[];\n fromCp: number[];\n toCp: number[];\n rotation: number;\n}\n\ninterface OtherAttrItem {\n from: any;\n to: any;\n key: string;\n}\n\n/**\n * 插值计算非路径属性(如颜色、透明度等)\n * @param attrs 要插值的属性数组\n * @param out 输出对象\n * @param ratio 插值比例\n */\nconst interpolateOtherAttrs = (attrs: OtherAttrItem[], out: any, ratio: number) => {\n attrs.forEach(entry => {\n if (Number.isFinite(entry.to)) {\n out[entry.key] = entry.from + (entry.to - entry.from) * ratio;\n } else if (entry.key === 'fill' || entry.key === 'stroke') {\n // 保存解析的结果到step\n const color = interpolateColor(entry.from, entry.to, ratio, false);\n if (color) {\n out[entry.key] = color;\n }\n }\n });\n};\n\n/* Adapted from zrender by ecomfe\n * https://github.com/ecomfe/zrender\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/ecomfe/zrender/blob/master/src/tool/morphPath.ts\n * License: https://github.com/ecomfe/zrender/blob/master/LICENSE\n * @license\n */\n/**\n * 根据给定比例插值计算形变数据并应用到路径\n * @param morphingData 形变数据\n * @param path 目标路径对象\n * @param ratio 插值比例\n */\nconst interpolateMorphingData = (morphingData: MorphingDataItem[], path: ICustomPath2D, ratio: number) => {\n const tmpArr: number[] = [];\n const newCp: number[] = [];\n path.clear();\n\n for (let i = 0; i < morphingData.length; i++) {\n const item = morphingData[i];\n const from = item.from;\n const to = item.to;\n const angle = item.rotation * ratio;\n const fromCp = item.fromCp;\n const toCp = item.toCp;\n const sa = Math.sin(angle);\n const ca = Math.cos(angle);\n\n newCp[0] = fromCp[0] + (toCp[0] - fromCp[0]) * ratio;\n newCp[1] = fromCp[1] + (toCp[1] - fromCp[1]) * ratio;\n\n for (let m = 0; m < from.length; m += 2) {\n const x0 = from[m];\n const y0 = from[m + 1];\n const x1 = to[m];\n const y1 = to[m + 1];\n\n const x = x0 * (1 - ratio) + x1 * ratio;\n const y = y0 * (1 - ratio) + y1 * ratio;\n\n tmpArr[m] = x * ca - y * sa + newCp[0];\n tmpArr[m + 1] = x * sa + y * ca + newCp[1];\n }\n\n let x0 = tmpArr[0];\n let y0 = tmpArr[1];\n\n path.moveTo(x0, y0);\n\n for (let m = 2; m < from.length; m += 6) {\n const x1 = tmpArr[m];\n const y1 = tmpArr[m + 1];\n const x2 = tmpArr[m + 2];\n const y2 = tmpArr[m + 3];\n const x3 = tmpArr[m + 4];\n const y3 = tmpArr[m + 5];\n\n // Is a line.\n if (x0 === x1 && y0 === y1 && x2 === x3 && y2 === y3) {\n path.lineTo(x3, y3);\n } else {\n path.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n }\n x0 = x3;\n y0 = y3;\n }\n }\n};\n\n/**\n * 解析形变数据,将源路径和目标路径转换为贝塞尔曲线并找到最佳旋转角度\n * @param fromPath 源路径\n * @param toPath 目标路径\n * @param config 变换配置\n * @returns 形变数据数组\n */\nconst parseMorphingData = (\n fromPath: ICustomPath2D | null,\n toPath: ICustomPath2D,\n config?: {\n fromTransform?: IMatrix;\n toTransfrom: IMatrix;\n }\n) => {\n // [fromPath, toPath] = [toPath, fromPath];\n const fromBezier = fromPath ? pathToBezierCurves(fromPath) : [];\n const toBezier = pathToBezierCurves(toPath);\n\n if (config && fromBezier) {\n config.fromTransform && applyTransformOnBezierCurves(fromBezier, config.fromTransform.clone().getInverse());\n applyTransformOnBezierCurves(fromBezier, config.toTransfrom);\n // applyTransformOnBezierCurves(toBezier, config.toTransfrom.clone().getInverse());\n }\n\n const [fromBezierCurves, toBezierCurves] = alignBezierCurves(fromBezier, toBezier);\n\n return fromPath\n ? findBestMorphingRotation(fromBezierCurves, toBezierCurves, 10, Math.PI)\n : toBezierCurves.map((to, index) => {\n return {\n from: fromBezierCurves[index],\n to,\n fromCp: [0, 0],\n toCp: [0, 0],\n rotation: 0\n };\n });\n};\n\nconst validateOtherAttrs = [\n 'fill',\n 'fillOpacity',\n 'shadowBlur',\n 'shadowColor',\n 'shadowOffsetX',\n 'shadowOffsetY',\n 'stroke',\n 'strokeOpacity',\n 'lineDashOffset'\n // 'lineWidth'\n];\n\n/**\n * 解析可动画属性,提取源属性和目标属性的差异\n * @param fromAttrs 源属性\n * @param toAttrs 目标属性\n * @returns 可动画属性数组\n */\nconst parseOtherAnimateAttrs = (\n fromAttrs: Partial<IGraphicAttribute> | null,\n toAttrs: Partial<IGraphicAttribute> | null\n) => {\n if (!fromAttrs || !toAttrs) {\n return null;\n }\n const res: OtherAttrItem[] = [];\n let hasAttr = false;\n\n Object.keys(fromAttrs).forEach(fromKey => {\n if (!validateOtherAttrs.includes(fromKey)) {\n return;\n }\n\n const toValue = (toAttrs as any)[fromKey];\n if (!isNil(toValue) && !isNil((fromAttrs as any)[fromKey]) && toValue !== (fromAttrs as any)[fromKey]) {\n if (fromKey === 'fill' || fromKey === 'stroke') {\n const parseColor = (color: string) => {\n return typeof color === 'string' ? ColorStore.Get(color, ColorType.Color255) : color;\n };\n res.push({\n from: isArray(fromAttrs[fromKey])\n ? (fromAttrs[fromKey] as any).map(parseColor)\n : parseColor((fromAttrs as any)[fromKey]),\n to: isArray(toValue) ? toValue.map(parseColor) : parseColor(toValue),\n key: fromKey\n });\n } else {\n res.push({ from: (fromAttrs as any)[fromKey], to: toValue, key: fromKey });\n }\n\n hasAttr = true;\n }\n });\n\n return hasAttr ? res : null;\n};\n\n/**\n * 形变路径动画类,用于处理路径和其他属性的形变\n */\nexport class MorphingPath extends ACustomAnimate<Record<string, any>> {\n declare path: CustomPath2D;\n\n saveOnEnd?: boolean;\n otherAttrs?: OtherAttrItem[];\n\n constructor(\n config: { morphingData: MorphingDataItem[]; otherAttrs?: OtherAttrItem[]; saveOnEnd?: boolean },\n duration: number,\n easing: EasingType\n ) {\n super({}, {}, duration, easing);\n this.morphingData = config.morphingData;\n this.otherAttrs = config.otherAttrs;\n this.saveOnEnd = config.saveOnEnd;\n }\n\n private morphingData?: MorphingDataItem[];\n\n getEndProps(): Record<string, any> {\n return {};\n }\n\n onBind(): void {\n (this.target as IGraphic).createPathProxy();\n this.onUpdate(false, 0, (this.target as IGraphic).attribute);\n }\n\n onEnd(): void {\n return;\n }\n\n /**\n * 更新动画状态\n * @param end 是否结束\n * @param ratio 动画进度比例\n * @param out 输出属性对象\n */\n onUpdate(end: boolean, ratio: number, out: Record<string, any>): void {\n const target = this.target as IGraphic;\n const pathProxy = typeof target.pathProxy === 'function' ? target.pathProxy(target.attribute) : target.pathProxy;\n interpolateMorphingData(this.morphingData, pathProxy, ratio);\n if (this.otherAttrs && this.otherAttrs.length) {\n interpolateOtherAttrs(this.otherAttrs, out, ratio);\n }\n this.target.setAttributes(out);\n // 计算位置\n if (end && !this.saveOnEnd) {\n (this.target as IGraphic).pathProxy = null;\n }\n }\n}\n\n/**\n * 创建从一个图形到另一个图形的形变动画\n * @param fromGraphic 源图形\n * @param toGraphic 目标图形\n * @param animationConfig 动画配置\n * @param fromGraphicTransform 源图形变换矩阵\n * @returns 动画实例\n */\nexport const morphPath = (\n fromGraphic: IGraphic | null,\n toGraphic: IGraphic,\n animationConfig?: MorphingAnimateConfig,\n fromGraphicTransform?: IMatrix\n) => {\n if (fromGraphic && (!fromGraphic.valid || !fromGraphic.toCustomPath)) {\n if (__DEV__) {\n console.error(fromGraphic, ' is not validate');\n }\n return null;\n }\n\n if (!toGraphic.valid || !toGraphic.toCustomPath) {\n if (__DEV__) {\n console.error(toGraphic, ' is not validate');\n }\n return null;\n }\n\n let fromTransform = fromGraphic?.globalTransMatrix;\n\n if (fromGraphicTransform && fromTransform) {\n fromTransform = fromGraphicTransform\n .clone()\n .multiply(fromTransform.a, fromTransform.b, fromTransform.c, fromTransform.d, fromTransform.e, fromTransform.f);\n }\n const morphingData = parseMorphingData(fromGraphic?.toCustomPath?.(), toGraphic.toCustomPath(), {\n fromTransform,\n toTransfrom: toGraphic.globalTransMatrix\n });\n\n const attrs = parseOtherAnimateAttrs(fromGraphic?.attribute, toGraphic.attribute);\n const animate = toGraphic.animate(animationConfig);\n\n if (animationConfig?.delay) {\n animate.wait(animationConfig.delay);\n }\n\n const morphingPath = new MorphingPath(\n { morphingData, otherAttrs: attrs },\n animationConfig?.duration ?? DefaultMorphingAnimateConfig.duration,\n animationConfig?.easing ?? DefaultMorphingAnimateConfig.easing\n );\n animate.play(morphingPath);\n\n return animate;\n};\n\n/**\n * 创建从一个图形到多个图形的形变动画\n * @param fromGraphic 源图形\n * @param toGraphics 目标图形数组\n * @param animationConfig 动画配置\n */\nexport const oneToMultiMorph = (\n fromGraphic: IGraphic,\n toGraphics: IGraphic[],\n animationConfig?: MultiMorphingAnimateConfig\n) => {\n const validateToGraphics = toGraphics.filter(graphic => graphic && graphic.toCustomPath && graphic.valid);\n if (!validateToGraphics.length) {\n if (__DEV__) {\n console.error(validateToGraphics, ' is not validate');\n }\n }\n\n if (!fromGraphic.valid || !fromGraphic.toCustomPath) {\n if (__DEV__) {\n console.error(fromGraphic, ' is not validate');\n }\n }\n\n const childGraphics: IGraphic[] = (\n animationConfig?.splitPath === 'clone' ? cloneGraphic : animationConfig?.splitPath ?? splitGraphic\n )(fromGraphic, validateToGraphics.length, false);\n\n const oldOnEnd = animationConfig?.onEnd;\n let count = validateToGraphics.length;\n const onEachEnd = () => {\n count--;\n if (count === 0 && oldOnEnd) {\n oldOnEnd();\n }\n };\n\n validateToGraphics.forEach((toChild, index) => {\n const fromChild = childGraphics[index];\n const delay =\n (animationConfig?.delay ?? 0) +\n (animationConfig?.individualDelay\n ? animationConfig.individualDelay(index, validateToGraphics.length, fromChild, toChild)\n : 0);\n morphPath(\n fromChild,\n toChild,\n Object.assign({}, animationConfig, { onEnd: onEachEnd, delay }),\n fromGraphic.globalTransMatrix\n );\n });\n};\n\n/**\n * 多对一形变路径动画类,用于处理多个路径形变为一个目标路径\n */\nexport class MultiToOneMorphingPath extends ACustomAnimate<Record<string, any>> {\n declare path: CustomPath2D;\n\n otherAttrs?: OtherAttrItem[][];\n\n constructor(\n config: { morphingData: MorphingDataItem[][]; otherAttrs?: OtherAttrItem[][] },\n duration: number,\n easing: EasingType\n ) {\n super({}, {}, duration, easing);\n this.morphingData = config.morphingData;\n this.otherAttrs = config.otherAttrs;\n }\n\n private morphingData?: MorphingDataItem[][];\n\n getEndProps(): Record<string, any> {\n return {};\n }\n\n onBind(): void {\n this.addPathProxy();\n }\n\n /**\n * 为每个子图形添加路径代理\n */\n private addPathProxy() {\n const shadowRoot = (this.target as IGraphic).shadowRoot;\n\n shadowRoot.forEachChildren(child => {\n (child as IGraphic).createPathProxy();\n });\n\n this.onUpdate(false, 0, (this.target as IGraphic).attribute);\n }\n\n /**\n * 清除所有子图形的路径代理\n */\n private clearPathProxy() {\n const shadowRoot = (this.target as IGraphic).shadowRoot;\n\n shadowRoot.forEachChildren(child => {\n (child as IGraphic).pathProxy = null;\n });\n }\n\n onEnd(): void {\n return;\n }\n\n /**\n * 更新动画状态\n * @param end 是否结束\n * @param ratio 动画进度比例\n * @param out 输出属性对象\n */\n onUpdate(end: boolean, ratio: number, out: Record<string, any>): void {\n const shadowRoot = (this.target as IGraphic).shadowRoot;\n\n shadowRoot.forEachChildren((child: IGraphic, index) => {\n interpolateMorphingData(\n this.morphingData[index],\n typeof child.pathProxy === 'function' ? child.pathProxy(child.attribute) : child.pathProxy,\n ratio\n );\n\n if (this.otherAttrs?.[index] && this.otherAttrs[index].length) {\n interpolateOtherAttrs(this.otherAttrs[index], child.attribute, ratio);\n }\n });\n\n // 计算位置\n if (end) {\n this.clearPathProxy();\n this.morphingData = null;\n }\n }\n}\n\n/**\n * 解析图形的阴影子元素属性(排除变换相关属性)\n * @param graphicAttrs 图形属性\n * @returns 阴影子元素属性\n */\nconst parseShadowChildAttrs = (graphicAttrs: Partial<IGraphicAttribute>) => {\n const attrs: Partial<IGraphicAttribute> = {};\n\n Object.keys(graphicAttrs).forEach(key => {\n if (!isTransformKey(key)) {\n (attrs as any)[key] = (graphicAttrs as any)[key];\n }\n });\n\n // if (attrs.fill == null) {\n // attrs.fill = !!attrs.fillColor;\n // }\n // if (attrs.stroke == null) {\n // attrs.stroke = !!attrs.strokeColor;\n // }\n\n return attrs;\n};\n\n/**\n * 将阴影子元素添加到图形中\n * @param graphic 目标图形\n * @param children 子元素数组\n * @param count 子元素数量\n */\nconst appendShadowChildrenToGraphic = (graphic: IGraphic, children: IGraphic[], count: number) => {\n const childAttrs = parseShadowChildAttrs(graphic.attribute);\n const shadowRoot = graphic.attachShadow();\n\n if (children.length) {\n shadowRoot.setTheme({\n [children[0].type]: childAttrs\n });\n children.forEach(element => {\n element.setAttributes({ pickable: false });\n shadowRoot.appendChild(element);\n });\n } else {\n const box = graphic.AABBBounds;\n const width = box.width();\n const height = box.height();\n\n shadowRoot.setTheme({\n rect: childAttrs\n });\n new Array(count).fill(0).forEach(el => {\n const child = graphicService.creator.rect({\n x: 0,\n y: 0,\n width,\n height: height,\n pickable: false\n });\n shadowRoot.appendChild(child);\n children.push(child);\n });\n }\n};\n\n/**\n * 克隆图形为多个相同的图形\n * @param graphic 源图形\n * @param count 克隆数量\n * @param needAppend 是否需要添加到源图形中\n * @returns 克隆的图形数组\n */\nexport const cloneGraphic = (graphic: IGraphic, count: number, needAppend?: boolean) => {\n const children: IGraphic[] = [];\n const childAttrs = needAppend ? null : parseShadowChildAttrs(graphic.attribute);\n const path = graphic.toCustomPath();\n\n for (let i = 0; i < count; i++) {\n const element = {\n path: new CustomPath2D().fromCustomPath2D(path)\n };\n\n children.push(graphicService.creator.path(needAppend ? element : Object.assign({}, childAttrs, element)));\n }\n\n if (needAppend) {\n appendShadowChildrenToGraphic(graphic, children, count);\n }\n\n return children;\n};\n\n/**\n * 将图形分割为多个子图形\n * @param graphic 源图形\n * @param count 分割数量\n * @param needAppend 是否需要添加到源图形中\n * @returns 分割后的图形数组\n */\nexport const splitGraphic = (graphic: IGraphic, count: number, needAppend?: boolean) => {\n const children: IGraphic[] = [];\n const childAttrs = needAppend ? null : parseShadowChildAttrs(graphic.attribute);\n\n if (graphic.type === 'rect') {\n const childrenAttrs = splitRect(graphic as IRect, count);\n childrenAttrs.forEach(element => {\n children.push(graphicService.creator.rect(needAppend ? element : Object.assign({}, childAttrs, element)));\n });\n } else if (graphic.type === 'arc') {\n const childrenAttrs = splitArc(graphic as IArc, count);\n childrenAttrs.forEach(element => {\n children.push(graphicService.creator.arc(needAppend ? element : Object.assign({}, childAttrs, element)));\n });\n } else if (graphic.type === 'circle') {\n const childrenAttrs = splitCircle(graphic as ICircle, count);\n childrenAttrs.forEach(element => {\n children.push(graphicService.creator.arc(needAppend ? element : Object.assign({}, childAttrs, element)));\n });\n } else if (graphic.type === 'line') {\n const childrenAttrs = splitLine(graphic as ILine, count);\n const defaultSymbol = { size: 10, symbolType: 'circle' };\n\n childrenAttrs.forEach(element => {\n children.push(\n graphicService.creator.symbol(\n needAppend ? Object.assign({}, element, defaultSymbol) : Object.assign({}, childAttrs, element, defaultSymbol)\n )\n );\n });\n } else if (graphic.type === 'polygon') {\n const childrenAttrs = splitPolygon(graphic as IPolygon, count);\n childrenAttrs.forEach(element => {\n children.push(graphicService.creator.polygon(needAppend ? element : Object.assign({}, childAttrs, element)));\n });\n } else if (graphic.type === 'area') {\n const childrenAttrs = splitArea(graphic as IArea, count);\n childrenAttrs.forEach(element => {\n children.push(graphicService.creator.polygon(needAppend ? element : Object.assign({}, childAttrs, element)));\n });\n } else if (graphic.type === 'path') {\n const childrenAttrs = splitPath(graphic as IPath, count);\n childrenAttrs.forEach(element => {\n if ('path' in element) {\n children.push(graphicService.creator.path(needAppend ? element : Object.assign({}, childAttrs, element)));\n } else {\n children.push(graphicService.creator.polygon(needAppend ? element : Object.assign({}, childAttrs, element)));\n }\n });\n }\n\n if (needAppend) {\n appendShadowChildrenToGraphic(graphic, children, count);\n }\n\n return children;\n};\n\n/**\n * 创建从多个图形到一个图形的形变动画\n * @param fromGraphics 源图形数组\n * @param toGraphic 目标图形\n * @param animationConfig 动画配置\n */\nexport const multiToOneMorph = (\n fromGraphics: IGraphic[],\n toGraphic: IGraphic,\n animationConfig?: MultiMorphingAnimateConfig\n) => {\n const validateFromGraphics = fromGraphics.filter(graphic => graphic.toCustomPath && graphic.valid);\n if (!validateFromGraphics.length) {\n if (__DEV__) {\n console.error(fromGraphics, ' is not validate');\n }\n }\n\n if (!toGraphic.valid || !toGraphic.toCustomPath) {\n if (__DEV__) {\n console.error(toGraphic, ' is not validate');\n }\n }\n\n const childGraphics: IGraphic[] = (\n animationConfig?.splitPath === 'clone' ? cloneGraphic : animationConfig?.splitPath ?? splitGraphic\n )(toGraphic, validateFromGraphics.length, true);\n\n const toAttrs = toGraphic.attribute;\n toGraphic.setAttribute('visible', false);\n\n const morphingData = validateFromGraphics.map((graphic, index) => {\n return parseMorphingData(graphic.toCustomPath(), childGraphics[index].toCustomPath(), {\n fromTransform: graphic.globalTransMatrix,\n toTransfrom: childGraphics[index].globalTransMatrix\n });\n });\n const otherAttrs = validateFromGraphics.map((graphic, index) => {\n return parseOtherAnimateAttrs(graphic.attribute, toAttrs);\n });\n\n if (animationConfig?.individualDelay) {\n const oldOnEnd = animationConfig.onEnd;\n let count = validateFromGraphics.length;\n const onEachEnd = () => {\n count--;\n if (count === 0) {\n toGraphic.setAttributes({ visible: true, ratio: null } as any, false, {\n type: AttributeUpdateType.ANIMATE_END\n });\n toGraphic.detachShadow();\n if (oldOnEnd) {\n oldOnEnd();\n }\n }\n };\n childGraphics.forEach((to, index) => {\n const delay =\n (animationConfig.delay ?? 0) +\n animationConfig.individualDelay(index, validateFromGraphics.length, fromGraphics[index], to);\n const animate = to.animate(Object.assign({}, animationConfig, { onEnd: onEachEnd }));\n animate.wait(delay);\n\n animate.play(\n new MorphingPath(\n {\n morphingData: morphingData[index],\n saveOnEnd: true,\n otherAttrs: otherAttrs[index]\n },\n animationConfig.duration ?? DefaultMorphingAnimateConfig.duration,\n animationConfig.easing ?? DefaultMorphingAnimateConfig.easing\n )\n );\n });\n } else {\n const oldOnEnd = animationConfig?.onEnd;\n const config = animationConfig ? Object.assign({}, animationConfig) : {};\n\n config.onEnd = () => {\n toGraphic.setAttribute('visible', true, false, { type: AttributeUpdateType.ANIMATE_END });\n toGraphic.detachShadow();\n\n if (oldOnEnd) {\n oldOnEnd();\n }\n };\n\n const animate = toGraphic.animate(config);\n\n if (animationConfig?.delay) {\n animate.wait(animationConfig.delay);\n }\n\n animate.play(\n new MultiToOneMorphingPath(\n { morphingData, otherAttrs },\n animationConfig?.duration ?? DefaultMorphingAnimateConfig.duration,\n animationConfig?.easing ?? DefaultMorphingAnimateConfig.easing\n )\n );\n }\n};\n"]}
|
package/es/custom/streamLight.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AttributeUpdateType, CustomPath2D, divideCubic, graphicService } from "@visactor/vrender-core";
|
|
2
2
|
|
|
3
3
|
import { ACustomAnimate } from "./custom-animate";
|
|
4
4
|
|
|
@@ -16,12 +16,12 @@ export class StreamLight extends ACustomAnimate {
|
|
|
16
16
|
}
|
|
17
17
|
onStartLineOrArea(type) {
|
|
18
18
|
var _a;
|
|
19
|
-
const root = this.target.attachShadow(), line =
|
|
19
|
+
const root = this.target.attachShadow(), line = graphicService.creator[type](Object.assign({}, null === (_a = this.params) || void 0 === _a ? void 0 : _a.attribute));
|
|
20
20
|
this[type] = line, line.pathProxy = new CustomPath2D, root.add(line);
|
|
21
21
|
}
|
|
22
22
|
onStartRect() {
|
|
23
23
|
var _a, _b, _c;
|
|
24
|
-
const root = this.target.attachShadow(), isHorizontal = null === (_b = null === (_a = this.params) || void 0 === _a ? void 0 : _a.isHorizontal) || void 0 === _b || _b, sizeAttr = isHorizontal ? "height" : "width", otherSizeAttr = isHorizontal ? "width" : "height", size = this.target.AABBBounds[sizeAttr](), y = isHorizontal ? 0 : this.target.AABBBounds.y1, rect =
|
|
24
|
+
const root = this.target.attachShadow(), isHorizontal = null === (_b = null === (_a = this.params) || void 0 === _a ? void 0 : _a.isHorizontal) || void 0 === _b || _b, sizeAttr = isHorizontal ? "height" : "width", otherSizeAttr = isHorizontal ? "width" : "height", size = this.target.AABBBounds[sizeAttr](), y = isHorizontal ? 0 : this.target.AABBBounds.y1, rect = graphicService.creator.rect(Object.assign(Object.assign({
|
|
25
25
|
[sizeAttr]: size,
|
|
26
26
|
fill: "#bcdeff",
|
|
27
27
|
shadowBlur: 30,
|