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

校准面板display:block时是否存在类FINISHED_CALIBRATION事件 自定义逗号分隔校准弹窗

问题答复

当calibration panel被设置为display: block唤起时,没有和FINISHED_CALIBRATION遵循完全同名规则、专门对应面板显示的独立事件,但你可以通过更稳定的方案实现自定义校准对话框替换,不需要依赖DOM类名轮询检测点位。


推荐实现方案

1. 监听校准实例状态变更事件(稳定性最高)

校准流程全生命周期的状态变更都会通过校准实例对外派发,你可以直接监听CALIBRATION_STARTED状态,该状态触发时机和你当前检测2个带editable类名校准点的时机完全一致,不会受DOM结构迭代影响:

// 从视图实例中获取校准模块实例,不同SDK的获取路径可参考对应初始化文档
const calibrator = viewer.getPlugin('calibration');

calibrator.on('stateChange', (currentState) => {
  // 校准启动、默认面板即将弹出的节点
  if (currentState === 'CALIBRATION_STARTED') {
    // 阻止默认对话框渲染
    calibrator.options.showDefaultDialog = false;
    // 唤起自定义的、支持逗号做小数分隔符的校准对话框
    this.openCalibrationDialog();
  }

  // 你已知的FINISHED_CALIBRATION事件也可以在同个监听里处理
  if (currentState === 'FINISHED_CALIBRATION') {
    // 校准完成后的自定义逻辑
  }
})

2. 初始化时直接禁用默认对话框

如果你的场景支持在初始化阶段配置校准模块,可以直接关掉默认对话框的渲染开关,从根源上跳过默认弹窗逻辑:

const calibrator = new Calibrator({
  // 其余初始化配置
  dialog: {
    enable: false
  }
});

// 监听校准启动动作,直接唤起自定义弹窗
calibrator.on('start', () => {
  this.openCalibrationDialog();
});

注意:你当前使用的DOM类名检测方案存在兼容风险,如果后续版本调整了calibration-endpoint类名、或者改为分步加载点位,判断逻辑会直接失效,不建议长期使用。

自定义对话框的小数分隔符适配

在自定义对话框的数值提交逻辑中,只需要在传值给校准实例前做一次格式转换即可兼容逗号分隔符,避免数值解析报错:

// 从自定义输入框拿到用户输入的带逗号的小数值
const inputVal = (document.querySelector('#custom-cal-length') as HTMLInputElement).value;
// 将逗号替换为点后转为数值类型
const realLength = Number(inputVal.replace(',', '.'));
// 把真实长度传给校准实例完成计算
calibrator.setMeasureLength(realLength);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:45:34