From ff3ce279780d66524ebcaa87471885716ee26797 Mon Sep 17 00:00:00 2001 From: gaozheng Date: Tue, 16 Jun 2026 09:57:34 +0800 Subject: [PATCH] =?UTF-8?q?fix(vtk):=20=E5=88=87=E7=89=87=20widget=20Inter?= =?UTF-8?q?actionOff=20=E2=80=94=E2=80=94=20=E4=BF=AE=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E9=80=89=E4=B8=AD/=E5=8F=8C=E5=87=BB/=E7=BB=95=E7=82=B9?= =?UTF-8?q?=E6=97=8B=E8=BD=AC=E5=85=A8=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实测根因: vtkImagePlaneWidget 默认消费落在切片面上的左键(窗位/光标), 自定义 PickInteractorStyle 收不到 → 单击选中/双击正视/绕点旋转/滚轮推进选中项 全失效; 滚轮看似只对最后新增切片有效, 实为选中从未改变(addSlice 设的 last)。 关掉 widget 自身交互(Interaction off): 其事件回调提前 return 不设 AbortFlag → 事件穿透到样式; 切片面 actor 可被 cellPicker 拾取 → 选中/双击/旋转恢复。切面移动由滚轮 advance 驱动。 --- src/render/interact/SliceTool.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/render/interact/SliceTool.cpp b/src/render/interact/SliceTool.cpp index b40a537..774b0e3 100644 --- a/src/render/interact/SliceTool.cpp +++ b/src/render/interact/SliceTool.cpp @@ -76,6 +76,10 @@ SliceTool::SliceTool(vtkImageData* image, vtkRenderWindowInteractor* interactor, } widget_->On(); + // 关闭 widget 自身的鼠标交互(窗位/光标/拖动):否则它会"吃掉"落在切片面上的左键, + // 自定义 PickInteractorStyle 收不到 → 单击选中/双击正视/绕点旋转全失效(实测根因)。 + // 关掉后切片仍正常显示,点击穿透到样式;切面移动改由滚轮(advance)驱动。 + widget_->InteractionOff(); } SliceTool::~SliceTool() { close(); }