You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cornerstone.js中FreehandRoiSculptorTool轮廓编辑不直观问题咨询

解决方案

针对你使用FreehandRoiSculptorTool遇到的三个问题,逐一解决如下:

1. 工具不可见问题

工具不可见并非单纯因视图放大导致,核心原因是默认配置未启用可视化指示器,且未明确开启光标显示。解决方式:

  • 激活工具时配置showCursor: true,启用雕刻区域的圆形指示器
  • cornerstone-tools 6.x版本的FreehandRoiSculptorTool默认支持视图缩放适配,只要正确传递配置参数,指示器会自动跟随视图缩放调整

2. 无法移除轮廓延伸部分的问题

默认情况下FreehandRoiSculptorTool处于添加模式(往轮廓外扩展),要实现移除效果需切换为擦除模式。操作时需按住鼠标左键在需要移除的轮廓区域拖动,即可完成雕刻修改。

若希望用单一工具完成添加/移除操作,可通过键盘快捷键动态切换模式,无需切换工具。

3. 控制工具半径

完全可以通过工具配置参数radius控制雕刻半径,单位为图像像素(会自动适配视图缩放),也可通过交互(如鼠标滚轮)动态调整半径大小。


代码修改示例

以下是针对你的测试代码的关键修改点:

1. 移除初始化阶段的不必要激活

删除初始化时的这行冗余代码:

cornerstoneTools.setToolActive('FreehandRoiSculptor', {});

2. 修改轮廓雕刻按钮的事件处理,添加工具配置

// Step 1.4.4.2 - Events for contourSculptorButton
contourSculptorButton.addEventListener('click', function() {
  isContourSculptorActive = !isContourSculptorActive;
  const sculptorConfig = {
    mouseButtonMask: 1,
    radius: 15, // 设置初始雕刻半径,可按需调整
    showCursor: true, // 启用圆形指示器
    sculptMode: 'remove' // 默认设置为移除模式
  };

  if (isContourSculptorActive) {
    cornerstoneTools.setToolActive('FreehandRoiSculptor', sculptorConfig);
    contourSculptorButton.classList.add('pressed');
    cornerstoneTools.setToolPassive('FreehandRoi', {});
    freehandRoiButton.classList.remove('pressed');
    isFreehandRoiActive = false;
  } else {
    cornerstoneTools.setToolPassive('FreehandRoiSculptor', {});
    contourSculptorButton.classList.remove('pressed');
  }
});

3. 添加快捷键切换雕刻模式(可选)

在键盘事件监听中新增切换逻辑:

if (event.key === 'e') {
  event.preventDefault();
  const tool = cornerstoneTools.getToolInstance('FreehandRoiSculptor');
  if (tool) {
    // 切换添加/移除模式
    tool.configuration.sculptMode = tool.configuration.sculptMode === 'remove' ? 'add' : 'remove';
  }
}

4. 添加鼠标滚轮调整半径(可选)

为元素添加滚轮事件,动态调整雕刻半径:

element.addEventListener('wheel', function(event) {
  if (isContourSculptorActive) {
    event.preventDefault();
    const tool = cornerstoneTools.getToolInstance('FreehandRoiSculptor');
    if (tool) {
      // 每次滚轮调整±2像素,限制半径范围5-50
      const delta = event.deltaY > 0 ? -2 : 2;
      tool.configuration.radius = Math.max(5, Math.min(50, tool.configuration.radius + delta));
      cornerstone.updateImage(element);
    }
  }
});

额外注意事项
  • 确保FreehandRoi创建的轮廓是闭合且已完成的(松开鼠标后形成的闭合轮廓),未完成的active轮廓无法被雕刻工具编辑
  • 视图缩放后,雕刻工具的圆形指示器会自动适配当前缩放比例,无需手动调整
  • 若要贴近商业工具的交互体验,可进一步优化:比如按住Alt键临时切换雕刻模式,或添加当前半径的文本提示

内容的提问来源于stack exchange,提问作者prerakmody

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 14:23:09