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

ifc.js Hiding示例问题求助:隐藏子集后Hover仍高亮元素

解决Web IFC Viewer隐藏子集后悬停仍高亮的问题

问题背景

对应文件为helloworld/main/examples/web-ifc-viewer/hiding/bundle.js,当通过复选框隐藏子集后,隐藏子集中的元素仍会在鼠标悬停时被高亮。Discord给出的解决方案是将子集对应的模型从ifcviewer.context.items.pickableIfcModels数组中移除,以下是具体操作方法:

具体实现步骤

1. 定位隐藏子集的逻辑代码

在bundle.js中找到处理复选框切换、控制子集显示/隐藏的回调函数,通常是监听复选框change事件的代码块,类似如下结构:

checkbox.addEventListener('change', (event) => {
  const subsetId = event.target.dataset.subsetId;
  const subset = ifcviewer.context.items.subsets[subsetId];
  if (event.target.checked) {
    subset.visible = true;
  } else {
    subset.visible = false;
  }
});

2. 修改逻辑,同步拾取模型数组

在切换子集显示状态时,同步修改pickableIfcModels数组:隐藏子集时移除对应模型,显示子集时重新添加。修改后的代码如下:

checkbox.addEventListener('change', (event) => {
  const subsetId = event.target.dataset.subsetId;
  const subset = ifcviewer.context.items.subsets[subsetId];
  const pickableModels = ifcviewer.context.items.pickableIfcModels;
  const modelPosition = pickableModels.indexOf(subset.model);
  
  if (event.target.checked) {
    subset.visible = true;
    // 恢复显示时,若模型不在拾取数组则添加
    if (modelPosition === -1) {
      pickableModels.push(subset.model);
    }
  } else {
    subset.visible = false;
    // 隐藏时,若模型在拾取数组则移除
    if (modelPosition !== -1) {
      pickableModels.splice(modelPosition, 1);
    }
  }
});

3. 关键细节说明

  • subset.model是子集关联的IFC模型实例,需确保获取的对象正确
  • 用indexOf检查模型是否在拾取数组中,避免重复添加或无效移除
  • splice用于移除数组中指定位置的元素,push用于重新将模型加入拾取队列

效果验证

修改完成后测试:勾选复选框显示子集,鼠标悬停可正常高亮;取消勾选隐藏子集,原子集区域不会再触发悬停高亮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:06:18