Skip to content

feat: semantic zoom - 保持文字图标大小恒定,放大时只改变节点间距#452

Open
wangpi26 wants to merge 1 commit intotirth8205:mainfrom
wangpi26:feat/semantic-zoom
Open

feat: semantic zoom - 保持文字图标大小恒定,放大时只改变节点间距#452
wangpi26 wants to merge 1 commit intotirth8205:mainfrom
wangpi26:feat/semantic-zoom

Conversation

@wangpi26
Copy link
Copy Markdown

@wangpi26 wangpi26 commented May 8, 2026

问题

当前图谱使用几何缩放(geographic zoom):放大时所有元素等比放大,包括文字和图标。这导致放大后文字图标变得很大,而节点之间的间距比例不变,无法看清更多结构细节。节点密集时尤其不便。

修复内容

实现语义缩放(semantic zoom):

  1. 添加 counterScale() 函数:缩放时对节点组和标签施加反向缩放 1/k,使文字和图标保持屏幕上恒定大小
  2. 边线粗细随缩放反调stroke-width 除以 currentTransform.k,保持视觉恒定
  3. 高亮关联边线同样反调highlightConnected 中所有 stroke-width 值都除以 k
  4. 标签偏移量反调:标签与节点的间距除以 k,保持视觉恒定
  5. 修复 d3.select("svg") bug:改为 d3.select("#graph-svg"),避免选中 legend 内联 SVG

标准视图和社区视图两套模板均做了相同改动。

效果

  • 放大时:节点间距拉大,文字和图标大小不变 → 更容易看清结构细节
  • 缩小时:节点间距收缩,文字和图标大小不变 → 全局概览时不会文字过小
  • 边线和高亮边粗细视觉恒定

Closes #450

实现语义缩放(semantic zoom)替代原有的几何缩放(geographic zoom):
- 添加 counterScale() 函数,缩放时对节点和标签施加反向缩放(1/k)
- 放大时节点间距拉大,但文字和图标保持屏幕恒定大小
- 边线粗细随缩放反调,保持视觉恒定
- 高亮关联边线粗细同样随缩放反调
- 修复 d3.select('svg') 选中 legend 内联 SVG 的问题,改为 d3.select('#graph-svg')
- 同时修改标准视图和社区视图两套模板
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: d3.select("svg") selects legend inline SVG instead of main canvas (#graph-svg)

1 participant