diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 6e658c881..0df543148 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -22,7 +22,7 @@ importers: specifier: ~0.5.7 version: 0.5.7 '@visactor/vrender': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../packages/vrender '@visactor/vutils': specifier: ~1.0.12 @@ -95,7 +95,7 @@ importers: ../../packages/react-vrender: dependencies: '@visactor/vrender': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../vrender '@visactor/vutils': specifier: ~1.0.12 @@ -168,10 +168,10 @@ importers: ../../packages/react-vrender-utils: dependencies: '@visactor/react-vrender': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../react-vrender '@visactor/vrender': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../vrender '@visactor/vutils': specifier: ~1.0.12 @@ -241,16 +241,16 @@ importers: ../../packages/vrender: dependencies: '@visactor/vrender-animate': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../vrender-animate '@visactor/vrender-components': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../vrender-components '@visactor/vrender-core': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../vrender-core '@visactor/vrender-kits': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../vrender-kits devDependencies: '@internal/bundler': @@ -320,7 +320,7 @@ importers: ../../packages/vrender-animate: dependencies: '@visactor/vrender-core': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../vrender-core '@visactor/vutils': specifier: ~1.0.12 @@ -393,13 +393,13 @@ importers: ../../packages/vrender-components: dependencies: '@visactor/vrender-animate': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../vrender-animate '@visactor/vrender-core': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../vrender-core '@visactor/vrender-kits': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../vrender-kits '@visactor/vscale': specifier: ~1.0.12 @@ -518,7 +518,7 @@ importers: specifier: 2.4.1 version: 2.4.1 '@visactor/vrender-core': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../vrender-core '@visactor/vutils': specifier: ~1.0.12 @@ -649,19 +649,19 @@ importers: ../../tools/bugserver-trigger: dependencies: '@visactor/vrender': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../../packages/vrender '@visactor/vrender-animate': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../../packages/vrender-animate '@visactor/vrender-components': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../../packages/vrender-components '@visactor/vrender-core': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../../packages/vrender-core '@visactor/vrender-kits': - specifier: workspace:1.1.6 + specifier: workspace:1.1.7 version: link:../../packages/vrender-kits devDependencies: '@internal/bundler': diff --git a/common/config/rush/version-policies.json b/common/config/rush/version-policies.json index 75ffa5e77..21357d4e1 100644 --- a/common/config/rush/version-policies.json +++ b/common/config/rush/version-policies.json @@ -1 +1 @@ -[{"definitionName":"lockStepVersion","policyName":"vrenderMain","version":"1.1.6","nextBump":"patch"}] +[{"definitionName":"lockStepVersion","policyName":"vrenderMain","version":"1.1.7","nextBump":"patch"}] diff --git a/docs/package.json b/docs/package.json index 2f05f4d66..5089b2c57 100644 --- a/docs/package.json +++ b/docs/package.json @@ -13,7 +13,7 @@ "@visactor/vchart": "1.3.0", "@visactor/vutils": "~1.0.12", "@visactor/vgrammar": "~0.5.7", - "@visactor/vrender": "workspace:1.1.6", + "@visactor/vrender": "workspace:1.1.7", "markdown-it": "^13.0.0", "highlight.js": "^11.8.0", "axios": "^1.4.0", diff --git a/packages/react-vrender-utils/CHANGELOG.json b/packages/react-vrender-utils/CHANGELOG.json index ee3066034..06508e324 100644 --- a/packages/react-vrender-utils/CHANGELOG.json +++ b/packages/react-vrender-utils/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@visactor/react-vrender-utils", "entries": [ + { + "version": "1.1.7", + "tag": "@visactor/react-vrender-utils_v1.1.7", + "date": "Sun, 02 Aug 2026 07:21:46 GMT", + "comments": {} + }, { "version": "1.1.6", "tag": "@visactor/react-vrender-utils_v1.1.6", diff --git a/packages/react-vrender-utils/CHANGELOG.md b/packages/react-vrender-utils/CHANGELOG.md index b1273edb3..bde7968d3 100644 --- a/packages/react-vrender-utils/CHANGELOG.md +++ b/packages/react-vrender-utils/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @visactor/react-vrender-utils -This log was last generated on Wed, 29 Jul 2026 11:52:34 GMT and should not be manually modified. +This log was last generated on Sun, 02 Aug 2026 07:21:46 GMT and should not be manually modified. + +## 1.1.7 +Sun, 02 Aug 2026 07:21:46 GMT + +_Version update only_ ## 1.1.6 Wed, 29 Jul 2026 11:52:34 GMT diff --git a/packages/react-vrender-utils/package.json b/packages/react-vrender-utils/package.json index 63577c069..e74d19840 100644 --- a/packages/react-vrender-utils/package.json +++ b/packages/react-vrender-utils/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/react-vrender-utils", - "version": "1.1.6", + "version": "1.1.7", "description": "", "sideEffects": false, "main": "cjs/index.js", @@ -27,8 +27,8 @@ "react-dom": "^18.2.0" }, "dependencies": { - "@visactor/vrender": "workspace:1.1.6", - "@visactor/react-vrender": "workspace:1.1.6", + "@visactor/vrender": "workspace:1.1.7", + "@visactor/react-vrender": "workspace:1.1.7", "@visactor/vutils": "~1.0.12", "react-reconciler": "^0.29.0", "tslib": "^2.3.1" diff --git a/packages/react-vrender/CHANGELOG.json b/packages/react-vrender/CHANGELOG.json index 62079d205..1a0d7a02b 100644 --- a/packages/react-vrender/CHANGELOG.json +++ b/packages/react-vrender/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@visactor/react-vrender", "entries": [ + { + "version": "1.1.7", + "tag": "@visactor/react-vrender_v1.1.7", + "date": "Sun, 02 Aug 2026 07:21:46 GMT", + "comments": {} + }, { "version": "1.1.6", "tag": "@visactor/react-vrender_v1.1.6", diff --git a/packages/react-vrender/CHANGELOG.md b/packages/react-vrender/CHANGELOG.md index 1b8bdf8f6..f8fb7d41e 100644 --- a/packages/react-vrender/CHANGELOG.md +++ b/packages/react-vrender/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @visactor/react-vrender -This log was last generated on Wed, 29 Jul 2026 11:52:34 GMT and should not be manually modified. +This log was last generated on Sun, 02 Aug 2026 07:21:46 GMT and should not be manually modified. + +## 1.1.7 +Sun, 02 Aug 2026 07:21:46 GMT + +_Version update only_ ## 1.1.6 Wed, 29 Jul 2026 11:52:34 GMT diff --git a/packages/react-vrender/package.json b/packages/react-vrender/package.json index de40bc430..ddf802916 100644 --- a/packages/react-vrender/package.json +++ b/packages/react-vrender/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/react-vrender", - "version": "1.1.6", + "version": "1.1.7", "description": "", "sideEffects": false, "main": "cjs/index.js", @@ -26,7 +26,7 @@ "react": "^18.2.0" }, "dependencies": { - "@visactor/vrender": "workspace:1.1.6", + "@visactor/vrender": "workspace:1.1.7", "@visactor/vutils": "~1.0.12", "react-reconciler": "^0.29.0", "tslib": "^2.3.1" diff --git a/packages/vrender-animate/CHANGELOG.json b/packages/vrender-animate/CHANGELOG.json index 7d0a9034c..bc3f382c0 100644 --- a/packages/vrender-animate/CHANGELOG.json +++ b/packages/vrender-animate/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@visactor/vrender-animate", "entries": [ + { + "version": "1.1.7", + "tag": "@visactor/vrender-animate_v1.1.7", + "date": "Sun, 02 Aug 2026 07:21:46 GMT", + "comments": {} + }, { "version": "1.1.6", "tag": "@visactor/vrender-animate_v1.1.6", diff --git a/packages/vrender-animate/CHANGELOG.md b/packages/vrender-animate/CHANGELOG.md index 870e38d0c..6ab9e5acb 100644 --- a/packages/vrender-animate/CHANGELOG.md +++ b/packages/vrender-animate/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @visactor/vrender-animate -This log was last generated on Wed, 29 Jul 2026 11:52:34 GMT and should not be manually modified. +This log was last generated on Sun, 02 Aug 2026 07:21:46 GMT and should not be manually modified. + +## 1.1.7 +Sun, 02 Aug 2026 07:21:46 GMT + +_Version update only_ ## 1.1.6 Wed, 29 Jul 2026 11:52:34 GMT diff --git a/packages/vrender-animate/package.json b/packages/vrender-animate/package.json index ada94c229..1a603a49d 100644 --- a/packages/vrender-animate/package.json +++ b/packages/vrender-animate/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vrender-animate", - "version": "1.1.6", + "version": "1.1.7", "description": "", "sideEffects": false, "main": "cjs/index.js", @@ -37,7 +37,7 @@ }, "dependencies": { "@visactor/vutils": "~1.0.12", - "@visactor/vrender-core": "workspace:1.1.6" + "@visactor/vrender-core": "workspace:1.1.7" }, "devDependencies": { "@internal/bundler": "workspace:*", diff --git a/packages/vrender-components/CHANGELOG.json b/packages/vrender-components/CHANGELOG.json index ac8dabca8..81aa21cc9 100644 --- a/packages/vrender-components/CHANGELOG.json +++ b/packages/vrender-components/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@visactor/vrender-components", "entries": [ + { + "version": "1.1.7", + "tag": "@visactor/vrender-components_v1.1.7", + "date": "Sun, 02 Aug 2026 07:21:46 GMT", + "comments": {} + }, { "version": "1.1.6", "tag": "@visactor/vrender-components_v1.1.6", diff --git a/packages/vrender-components/CHANGELOG.md b/packages/vrender-components/CHANGELOG.md index 49f277631..410ef5d09 100644 --- a/packages/vrender-components/CHANGELOG.md +++ b/packages/vrender-components/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @visactor/vrender-components -This log was last generated on Wed, 29 Jul 2026 11:52:34 GMT and should not be manually modified. +This log was last generated on Sun, 02 Aug 2026 07:21:46 GMT and should not be manually modified. + +## 1.1.7 +Sun, 02 Aug 2026 07:21:46 GMT + +_Version update only_ ## 1.1.6 Wed, 29 Jul 2026 11:52:34 GMT diff --git a/packages/vrender-components/package.json b/packages/vrender-components/package.json index 3ac630cbc..6226e854c 100644 --- a/packages/vrender-components/package.json +++ b/packages/vrender-components/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vrender-components", - "version": "1.1.6", + "version": "1.1.7", "description": "components library for dp visualization", "sideEffects": false, "main": "cjs/index.js", @@ -69,9 +69,9 @@ "dependencies": { "@visactor/vutils": "~1.0.12", "@visactor/vscale": "~1.0.12", - "@visactor/vrender-core": "workspace:1.1.6", - "@visactor/vrender-kits": "workspace:1.1.6", - "@visactor/vrender-animate": "workspace:1.1.6" + "@visactor/vrender-core": "workspace:1.1.7", + "@visactor/vrender-kits": "workspace:1.1.7", + "@visactor/vrender-animate": "workspace:1.1.7" }, "devDependencies": { "@internal/bundler": "workspace:*", diff --git a/packages/vrender-core/CHANGELOG.json b/packages/vrender-core/CHANGELOG.json index 521eee7bb..6e53b0513 100644 --- a/packages/vrender-core/CHANGELOG.json +++ b/packages/vrender-core/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@visactor/vrender-core", "entries": [ + { + "version": "1.1.7", + "tag": "@visactor/vrender-core_v1.1.7", + "date": "Sun, 02 Aug 2026 07:21:46 GMT", + "comments": {} + }, { "version": "1.1.6", "tag": "@visactor/vrender-core_v1.1.6", diff --git a/packages/vrender-core/CHANGELOG.md b/packages/vrender-core/CHANGELOG.md index 519b1d978..8d8381c71 100644 --- a/packages/vrender-core/CHANGELOG.md +++ b/packages/vrender-core/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @visactor/vrender-core -This log was last generated on Wed, 29 Jul 2026 11:52:34 GMT and should not be manually modified. +This log was last generated on Sun, 02 Aug 2026 07:21:46 GMT and should not be manually modified. + +## 1.1.7 +Sun, 02 Aug 2026 07:21:46 GMT + +_Version update only_ ## 1.1.6 Wed, 29 Jul 2026 11:52:34 GMT diff --git a/packages/vrender-core/__tests__/unit/render/interactive-graphic-bounds.test.ts b/packages/vrender-core/__tests__/unit/render/interactive-graphic-bounds.test.ts new file mode 100644 index 000000000..6fb9c1b1e --- /dev/null +++ b/packages/vrender-core/__tests__/unit/render/interactive-graphic-bounds.test.ts @@ -0,0 +1,160 @@ +import { Matrix } from '@visactor/vutils'; +import { InteractiveDrawItemInterceptorContribution } from '../../../src/render/contributions/render/draw-interceptor'; +import { createCircle } from '../../../src/graphic/circle'; +import { createGroup } from '../../../src/graphic/group'; + +/** + * 交互层只需要一个能收下克隆的 shadowRoot,这里直接给现成的, + * 免得为了走通 attachShadow 再搭一套 application 环境。 + */ +function createDrawContextStub() { + const hoisted: any[] = []; + const interactiveGroup = { + id: '_interactive_group', + shadowRoot: { + add: (child: any): void => { + hoisted.push(child); + }, + removeChild: (child: any): void => { + const index = hoisted.indexOf(child); + if (index >= 0) { + hoisted.splice(index, 1); + } + } + } + }; + const interactiveLayer = { + getElementById: (id: string): any => (id === '_interactive_group' ? interactiveGroup : undefined), + add: (): void => undefined + }; + return { + hoisted, + drawContext: { + stage: { + tryInitInteractiveLayer: (): void => undefined, + getLayer: (name: string): any => (name === '_builtin_interactive' ? interactiveLayer : undefined) + } + } + }; +} + +function expectSamePlacement(actual: any, expected: any) { + expect(actual.a).toBeCloseTo(expected.a); + expect(actual.b).toBeCloseTo(expected.b); + expect(actual.c).toBeCloseTo(expected.c); + expect(actual.d).toBeCloseTo(expected.d); + expect(actual.e).toBeCloseTo(expected.e); + expect(actual.f).toBeCloseTo(expected.f); +} + +function hoist(graphic: any) { + const { hoisted, drawContext } = createDrawContextStub(); + const handled = new InteractiveDrawItemInterceptorContribution().beforeSetInteractive( + graphic, + {} as any, + drawContext as any, + {} as any + ); + return { handled, hoisted }; +} + +describe('interactive graphic bounds', () => { + test('keeps the hoisted clone aligned with the source graphic under a transformed parent', () => { + const parent = createGroup({ x: 100, y: 80 }); + const circle = createCircle({ x: 150, y: 100, radius: 12, globalZIndex: 100 }); + parent.add(circle); + + const { hoisted, drawContext } = createDrawContextStub(); + const handled = new InteractiveDrawItemInterceptorContribution().beforeSetInteractive( + circle as any, + {} as any, + drawContext as any, + {} as any + ); + + expect(handled).toBe(true); + expect(hoisted).toHaveLength(1); + + // 克隆是绘制层级的占位,拾取的包围盒预筛读的也是它,所以必须和原图元落在同一处 + expectSamePlacement(circle.interactiveGraphic.globalTransMatrix, circle.globalTransMatrix); + }); + + test('leaves the clone untouched when the source graphic has no parent', () => { + const circle = createCircle({ x: 150, y: 100, radius: 12, globalZIndex: 100 }); + + const { drawContext } = createDrawContextStub(); + new InteractiveDrawItemInterceptorContribution().beforeSetInteractive( + circle as any, + {} as any, + drawContext as any, + {} as any + ); + + expect(circle.interactiveGraphic.attribute.postMatrix).toBeUndefined(); + expectSamePlacement(circle.interactiveGraphic.globalTransMatrix, circle.globalTransMatrix); + }); + + test('keeps the source postMatrix while adding the ancestor transform', () => { + const parent = createGroup({ x: 100, y: 80 }); + const circle = createCircle({ + x: 150, + y: 100, + radius: 12, + globalZIndex: 100, + postMatrix: new Matrix(1, 0, 0, 1, 30, 20) + }); + parent.add(circle); + + hoist(circle); + + expectSamePlacement(circle.interactiveGraphic.globalTransMatrix, circle.globalTransMatrix); + }); + + test('leaves the parent scroll out, because globalAABBBounds does not carry it either', () => { + const parent = createGroup({ x: 100, y: 80, scrollX: 30, scrollY: 20 }); + const circle = createCircle({ x: 150, y: 100, radius: 12, globalZIndex: 100 }); + parent.add(circle); + + hoist(circle); + + // doUpdateGlobalMatrix 把 scroll 叠进 globalTransMatrix,globalAABBBounds 却不含它, + // 而拾取预筛读的是后者 —— 克隆要跟着 bounds 走,所以只补祖先变换、不补 scroll + const ancestor = parent.globalTransMatrix; + const placement = circle.interactiveGraphic.globalTransMatrix; + expect(placement.e).toBeCloseTo(ancestor.e + circle.transMatrix.e); + expect(placement.f).toBeCloseTo(ancestor.f + circle.transMatrix.f); + expect(placement.e).not.toBeCloseTo(circle.globalTransMatrix.e); + }); + + test('handles a scaled ancestor together with a source postMatrix and a rotated source', () => { + const parent = createGroup({ x: 100, y: 80, scaleX: 2, scaleY: 3 }); + const circle = createCircle({ + x: 150, + y: 100, + radius: 12, + scaleX: 1.5, + angle: Math.PI / 6, + globalZIndex: 100, + postMatrix: new Matrix(1, 0, 0, 1, 30, 20) + }); + parent.add(circle); + + hoist(circle); + + expectSamePlacement(circle.interactiveGraphic.globalTransMatrix, circle.globalTransMatrix); + }); + + test('reuses the cached matrix instead of allocating one per pass', () => { + const parent = createGroup({ x: 100, y: 80 }); + const circle = createCircle({ x: 150, y: 100, radius: 12, globalZIndex: 100 }); + parent.add(circle); + + hoist(circle); + const first = circle.interactiveGraphic.attribute.postMatrix; + + hoist(circle); + + expect(circle.interactiveGraphic.attribute.postMatrix).toBe(first); + expectSamePlacement(circle.interactiveGraphic.globalTransMatrix, circle.globalTransMatrix); + }); +}); diff --git a/packages/vrender-core/package.json b/packages/vrender-core/package.json index 3ff125c38..4a3347806 100644 --- a/packages/vrender-core/package.json +++ b/packages/vrender-core/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vrender-core", - "version": "1.1.6", + "version": "1.1.7", "description": "", "sideEffects": [ "./src/modules.ts", diff --git a/packages/vrender-core/src/render/contributions/render/draw-interceptor.ts b/packages/vrender-core/src/render/contributions/render/draw-interceptor.ts index ca7cec6a6..22e3261ba 100644 --- a/packages/vrender-core/src/render/contributions/render/draw-interceptor.ts +++ b/packages/vrender-core/src/render/contributions/render/draw-interceptor.ts @@ -1,4 +1,4 @@ -import { AABBBounds } from '@visactor/vutils'; +import { AABBBounds, Matrix } from '@visactor/vutils'; import { mat3Tomat4, multiplyMat4Mat4 } from '../../../common/matrix'; import { createGraphic } from '../../../graphic/graphic-creator'; import type { @@ -18,6 +18,9 @@ import { draw3dItem } from '../../../common/3d-interceptor'; // 拦截器 export const DrawItemInterceptor = Symbol.for('DrawItemInterceptor'); +/** 挂在交互层克隆上的 postMatrix 缓存,避免每帧重新分配 */ +const INTERACTIVE_POST_MATRIX = '_interactivePostMatrix'; + // export class DefaultDrawItemInterceptor implements IDrawItemInterceptor { // drawItem(graphic: IGraphic, renderService: IRenderService, params?: IGraphicRenderDrawParams): boolean { // return false; @@ -277,6 +280,54 @@ export class InteractiveDrawItemInterceptorContribution implements IDrawItemInte * @param drawContribution * @param params */ + /** + * 算出克隆的 postMatrix,让它的包围盒落回原图元所在的位置。 + * + * 对齐的目标是 `globalAABBBounds` —— 拾取预筛读的就是它。克隆和原图元的属性一致,局部矩阵 `L` + * (不含 postMatrix)相同,所以只要把祖先贡献补在 `L` 之外即可: + * clonePost = P × ownPost + * + * 注意这里刻意不带父级的 scroll。`doUpdateGlobalMatrix` 会把 scroll 叠进 `globalTransMatrix`,但 + * `globalAABBBounds` 并不包含它(父级 `scrollX/scrollY` 为 30/20 时,普通图元的 matrix.e 是 180 而 + * bounds 中心是 150),所以按 matrix 去对齐反而会把克隆的包围盒推出去一个 scroll。 + * + * 每帧复用挂在克隆上的同一个 Matrix,避免反复分配。 + */ + protected resolveInteractivePostMatrix(graphic: IGraphic, interactiveGraphic: IGraphic): Matrix | undefined { + const parent = graphic.parent; + // 没有祖先时克隆自身的 postMatrix 就已经是完整变换,保持原样 + if (!parent) { + return graphic.attribute.postMatrix; + } + let matrix: Matrix = (interactiveGraphic as any)[INTERACTIVE_POST_MATRIX]; + if (!matrix) { + matrix = new Matrix(); + (interactiveGraphic as any)[INTERACTIVE_POST_MATRIX] = matrix; + } + const ancestorMatrix = (parent as IGroup).globalTransMatrix; + matrix.setValue( + ancestorMatrix.a, + ancestorMatrix.b, + ancestorMatrix.c, + ancestorMatrix.d, + ancestorMatrix.e, + ancestorMatrix.f + ); + // 克隆是从原图元 clone 来的,自带原图元的 postMatrix,不能被祖先变换顶掉 + const ownPostMatrix = graphic.attribute.postMatrix; + if (ownPostMatrix) { + matrix.multiply( + ownPostMatrix.a, + ownPostMatrix.b, + ownPostMatrix.c, + ownPostMatrix.d, + ownPostMatrix.e, + ownPostMatrix.f + ); + } + return matrix; + } + beforeSetInteractive( graphic: IGraphic, renderService: IRenderService, @@ -292,11 +343,14 @@ export class InteractiveDrawItemInterceptorContribution implements IDrawItemInte interactiveGraphic.baseGraphic = graphic; } // 设置位置 - // const m = graphic.globalTransMatrix; + // 克隆挂进交互层后就脱离了原图元的祖先链,只剩自身的局部变换。绘制由 beforeDrawInteractive 用 + // baseGraphic.parent.globalTransMatrix 手动补偿,但克隆自身的包围盒补不到,会整体少一个祖先变换; + // pickGroup 的 insideGroup 预筛读的正是这个包围盒,落在偏移框外的图元会被整层跳过而拾取不到。 interactiveGraphic.setAttributes( { globalZIndex: 0, - zIndex: graphic.attribute.globalZIndex + zIndex: graphic.attribute.globalZIndex, + postMatrix: this.resolveInteractivePostMatrix(graphic, interactiveGraphic) }, false, { skipUpdateCallback: true } diff --git a/packages/vrender-kits/CHANGELOG.json b/packages/vrender-kits/CHANGELOG.json index c15c42833..132271af8 100644 --- a/packages/vrender-kits/CHANGELOG.json +++ b/packages/vrender-kits/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@visactor/vrender-kits", "entries": [ + { + "version": "1.1.7", + "tag": "@visactor/vrender-kits_v1.1.7", + "date": "Sun, 02 Aug 2026 07:21:46 GMT", + "comments": {} + }, { "version": "1.1.6", "tag": "@visactor/vrender-kits_v1.1.6", diff --git a/packages/vrender-kits/CHANGELOG.md b/packages/vrender-kits/CHANGELOG.md index fce0a6cc4..7fad3ed40 100644 --- a/packages/vrender-kits/CHANGELOG.md +++ b/packages/vrender-kits/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @visactor/vrender-kits -This log was last generated on Wed, 29 Jul 2026 11:52:34 GMT and should not be manually modified. +This log was last generated on Sun, 02 Aug 2026 07:21:46 GMT and should not be manually modified. + +## 1.1.7 +Sun, 02 Aug 2026 07:21:46 GMT + +_Version update only_ ## 1.1.6 Wed, 29 Jul 2026 11:52:34 GMT diff --git a/packages/vrender-kits/package.json b/packages/vrender-kits/package.json index d6bca3620..382bd26e4 100644 --- a/packages/vrender-kits/package.json +++ b/packages/vrender-kits/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vrender-kits", - "version": "1.1.6", + "version": "1.1.7", "description": "", "sideEffects": false, "main": "cjs/index-node.js", @@ -37,7 +37,7 @@ }, "dependencies": { "@visactor/vutils": "~1.0.12", - "@visactor/vrender-core": "workspace:1.1.6", + "@visactor/vrender-core": "workspace:1.1.7", "@resvg/resvg-js": "2.4.1", "roughjs": "4.6.6", "gifuct-js": "2.1.2", diff --git a/packages/vrender/CHANGELOG.json b/packages/vrender/CHANGELOG.json index a46060be3..efaea660a 100644 --- a/packages/vrender/CHANGELOG.json +++ b/packages/vrender/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@visactor/vrender", "entries": [ + { + "version": "1.1.7", + "tag": "@visactor/vrender_v1.1.7", + "date": "Sun, 02 Aug 2026 07:21:46 GMT", + "comments": {} + }, { "version": "1.1.6", "tag": "@visactor/vrender_v1.1.6", diff --git a/packages/vrender/CHANGELOG.md b/packages/vrender/CHANGELOG.md index d45011b3c..4eed5e83f 100644 --- a/packages/vrender/CHANGELOG.md +++ b/packages/vrender/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @visactor/vrender -This log was last generated on Wed, 29 Jul 2026 11:52:34 GMT and should not be manually modified. +This log was last generated on Sun, 02 Aug 2026 07:21:46 GMT and should not be manually modified. + +## 1.1.7 +Sun, 02 Aug 2026 07:21:46 GMT + +_Version update only_ ## 1.1.6 Wed, 29 Jul 2026 11:52:34 GMT diff --git a/packages/vrender/package.json b/packages/vrender/package.json index a2b1af86b..20d9fef8a 100644 --- a/packages/vrender/package.json +++ b/packages/vrender/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vrender", - "version": "1.1.6", + "version": "1.1.7", "description": "", "sideEffects": true, "main": "cjs/index.js", @@ -31,10 +31,10 @@ "test-watch": "cross-env DEBUG_MODE=1 jest --watch -c jest.config.js" }, "dependencies": { - "@visactor/vrender-core": "workspace:1.1.6", - "@visactor/vrender-kits": "workspace:1.1.6", - "@visactor/vrender-animate": "workspace:1.1.6", - "@visactor/vrender-components": "workspace:1.1.6" + "@visactor/vrender-core": "workspace:1.1.7", + "@visactor/vrender-kits": "workspace:1.1.7", + "@visactor/vrender-animate": "workspace:1.1.7", + "@visactor/vrender-components": "workspace:1.1.7" }, "devDependencies": { "@internal/bundler": "workspace:*", diff --git a/tools/bugserver-trigger/package.json b/tools/bugserver-trigger/package.json index 072a96f3e..083c32645 100644 --- a/tools/bugserver-trigger/package.json +++ b/tools/bugserver-trigger/package.json @@ -8,11 +8,11 @@ "ci": "ts-node --transpileOnly --skipProject ./scripts/trigger-test.ts" }, "dependencies": { - "@visactor/vrender": "workspace:1.1.6", - "@visactor/vrender-core": "workspace:1.1.6", - "@visactor/vrender-kits": "workspace:1.1.6", - "@visactor/vrender-components": "workspace:1.1.6", - "@visactor/vrender-animate": "workspace:1.1.6" + "@visactor/vrender": "workspace:1.1.7", + "@visactor/vrender-core": "workspace:1.1.7", + "@visactor/vrender-kits": "workspace:1.1.7", + "@visactor/vrender-components": "workspace:1.1.7", + "@visactor/vrender-animate": "workspace:1.1.7" }, "devDependencies": { "@rushstack/eslint-patch": "~1.1.4",