diff --git a/common/changes/@visactor/vtable/feat-support-detailPath-when-pick-vchart_2025-09-03-08-27.json b/common/changes/@visactor/vtable/feat-support-detailPath-when-pick-vchart_2025-09-03-08-27.json new file mode 100644 index 0000000000..983aa1033f --- /dev/null +++ b/common/changes/@visactor/vtable/feat-support-detailPath-when-pick-vchart_2025-09-03-08-27.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "feat: support detailPath when pick vchart\n\n", + "type": "none", + "packageName": "@visactor/vtable" + } + ], + "packageName": "@visactor/vtable", + "email": "lixuef1313@163.com" +} \ No newline at end of file diff --git a/packages/vtable/src/scenegraph/graphic/contributions/chart-render-helper.ts b/packages/vtable/src/scenegraph/graphic/contributions/chart-render-helper.ts index db8b44fe71..43bad04a12 100644 --- a/packages/vtable/src/scenegraph/graphic/contributions/chart-render-helper.ts +++ b/packages/vtable/src/scenegraph/graphic/contributions/chart-render-helper.ts @@ -98,7 +98,7 @@ export function renderChart(chart: Chart) { const formatResult = table.options.specFormat(chart.attribute.spec, chartInstance, chart); if (formatResult.needFormatSpec && formatResult.spec) { const spec = formatResult.spec; - chartInstance.updateSpecSync(spec); + chartInstance.updateSpecSync(spec, false, { reuse: false, morph: false }); updateSpec = formatResult.updateSpec ?? true; } } diff --git a/packages/vtable/src/scenegraph/graphic/contributions/chart-render.ts b/packages/vtable/src/scenegraph/graphic/contributions/chart-render.ts index 02d716faed..326d29dacf 100644 --- a/packages/vtable/src/scenegraph/graphic/contributions/chart-render.ts +++ b/packages/vtable/src/scenegraph/graphic/contributions/chart-render.ts @@ -82,7 +82,7 @@ export class DefaultCanvasChartRender extends BaseRender implements IGrap const formatResult = table.options.specFormat(chart.attribute.spec, activeChartInstance, chart); if (formatResult.needFormatSpec && formatResult.spec) { const spec = formatResult.spec; - activeChartInstance.updateSpecSync(spec); + activeChartInstance.updateSpecSync(spec, false, { reuse: false, morph: false }); // return; } } diff --git a/packages/vtable/src/scenegraph/graphic/contributions/vchart-graphic-picker.ts b/packages/vtable/src/scenegraph/graphic/contributions/vchart-graphic-picker.ts index 56d3f5471e..b4b345a336 100644 --- a/packages/vtable/src/scenegraph/graphic/contributions/vchart-graphic-picker.ts +++ b/packages/vtable/src/scenegraph/graphic/contributions/vchart-graphic-picker.ts @@ -9,9 +9,19 @@ export class VChartPicker implements IGraphicPicker { numberType: number = CHART_NUMBER_TYPE; contains(chart: any, point: any, params?: IPickParams): boolean | any { - if (!chart.AABBBounds.containsPoint(point)) { + const vChart = (chart as VChartGraphic).activeChartInstance; + if (!vChart) { return false; } - return true; + // 得到 vchart stage + const vchartStage = vChart.getStage(); + vchartStage.dirtyBounds?.clear(); + // 因为vchart 在 vtable 内始坐标变换始终等于在group中的坐标变换,所以这里不需要再做坐标转换 + const pick = vchartStage.pick(point.x, point.y); + // @ts-ignore + if (pick.graphic === null && pick.group.name === 'root') { + return false; + } + return pick; } }