Skip to content

The highlight is drawn last - #584

Merged
WaylandYang merged 3 commits into
devfrom
fix/the-highlight-is-drawn-last
Sep 10, 2026
Merged

WaylandYang merged 3 commits into
devfrom
fix/the-highlight-is-drawn-last

Conversation

@WaylandYang

Copy link
Copy Markdown
Contributor

选中/悬停时的高亮在画布上有三处对不上,都在这里收拾了。

高亮的边会被压暗的边切断

放大看,一条白边会被一条条黑细条打断。zIndex 一直在设(压暗 0、邻居 2、选中 3、指到 4、高亮的边 5),但两件事同时不成立:

  1. zIndex: true 没开,sigma 默认按缓冲区顺序画;
  2. 就算开了也不够——sigma 一个程序一批绘制,批次先后固定,层级只在批内排。直边走 line、弧边走 curved,是两批,所以一条压暗的直边照样盖在高亮的弧边上。

先试过把所有边并进曲线程序,这条路走不通:@sigma/edge-curve 的包围盒宽度里有 sign(curvature),曲率 0 时整个偏移为 0,四边形零面积,一个像素都不画——独一条的直边会全部消失,只剩标签飘着。内置代码分两个程序正是为了绕开它。

改成同一个类注册两遍,后注册的 lineTop / curvedTop 专给高亮的边用,借绘制批次的先后压在最上层。顺带修了一处真会切线的情况:boost() 之后还有一道时间过滤,会把「挨着选中项、但此刻不成立」的边压回背景色——颜色暗了却还留在置顶批里,那就成了画在所有高亮边之上的一条暗线。

量法:sigma 的 afterRendergl.readPixels 取边图层,沿高亮边中心线逐像素采样。

修前  5111 点,74 暗点(1.45%)
修后  5037 点,0 暗点
对照  法向挪开 6px:94.98% 是暗的(证明探针读的是真像素)

节点亮着,线却没画出来

悬停 Google DeepMind,Arthur Mensch 亮着,可它那条 former_employee_of 早就结束了,线被压回背景色——看着像凭空亮了一个。

边那边问了「时间轴停的这一刻它还成不成立」(liveNow / activeEdges),节点那边只用 g.areNeighbors(),只问图上有没有这条边。换成 isLiveNeighbor(),用同一个 activeEdges,派生边关掉的情况一并算进去。按焦点节点缓存一份:这个判断每帧要对每个节点问一次,枢纽点动辄几百条边。

20 个邻居,19 个亮,0 处对不上
Arthur Mensch  color rgba(80,69,65)  edgeBright=false   ← 跟着线一起退下去了

选中之后再指别处,指到的那一个孤零零

边那边悬停是压过选中的(boost() 在最前面),节点这边没跟上:sel 一旦成立就走不到悬停那一支,于是一圈亮着的边通向一圈黑着的点。指过去正是想读「它连着谁」,而那一问什么也答不出来。

选中 OpenAI + 悬停 Sam Altman
148 个可见节点逐个核对「亮不亮」==「有没有一条亮边通到 hover 或 selected」
不一致:0
Sam Altman 的邻居:16/16 亮

顺手

面板分组标题的方向箭头是 10,下面每条事实行是 12。它们是同一个记号、还特意排成一列,那 2px 只会读成没对齐。两页都统一到 12,实测两个箭头都是 x=459, 12×12


pnpm build(style-guard + tsc + vite)与 pnpm test(18 passed)干净。一次完整 refresh() 平均 7.3ms。

🤖 Generated with Claude Code

WaylandYang and others added 3 commits September 10, 2026 12:00
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
@WaylandYang
WaylandYang merged commit cebda7b into dev Sep 10, 2026
4 checks passed
@WaylandYang
WaylandYang deleted the fix/the-highlight-is-drawn-last branch September 10, 2026 04:09
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.

1 participant