如何正确修改Autodesk Viewer中selectionMode的选择模式设置
正确修改Autodesk Viewer IFC模型选择模式的方法及模式差异说明
一、正确的编程修改方式
别用ProfileSettings改selectionMode,这个参数不在Profile的管控范畴内,直接用Viewer原生API viewer.setSelectionMode()就行,但要注意得在IFC模型加载完成后执行,不然会被模型初始化覆盖:
// 监听模型几何加载完成事件 viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, () => { // 设置为Leaf Object(值0) viewer.setSelectionMode(0); // 要是想设成Last Object就用值2 // viewer.setSelectionMode(2); });
如果想在Viewer初始化时就指定,也可以直接在初始化配置里加:
const viewer = new Autodesk.Viewing.GuiViewer3D(container, { selectionMode: 0 // 直接指定初始选择模式 });
二、解决手动设置后重启失效的问题
手动改配置面板的选择模式后重启偶尔失效,是因为IFC模型加载时,IFC扩展会重置部分交互设置。解决办法就是在模型加载完成后,用代码强制覆盖设置,就是上面写的监听GEOMETRY_LOADED_EVENT的逻辑。
三、Leaf Object与Last Object模式的差异
- Leaf Object(值0):只选模型层级里最末端的叶子节点,比如IFC里的单个墙体、门窗、管线段,不会选中父级构件(比如包含多个墙体的建筑单元)。
- Last Object(值2):选鼠标点击位置最后渲染的对象,也就是视觉上最顶层的构件。如果有重叠构件(比如墙体上的装饰板),会选中挡在最前面的那个,不管它是不是叶子节点。
对比First Object(值1):会选中层级里第一个命中的父级构件,比如点墙体时会选中整个建筑单元,而不是单个墙体。
四、替换临时DOM操作方案
你之前用定时器操作DOM的方案依赖UI结构,容易出问题,换成官方API的写法更稳定:
// 监听IFC扩展加载完成事件 viewer.addEventListener(Autodesk.Viewing.EXTENSION_LOADED_EVENT, (event) => { if (event.extensionId === 'Autodesk.IFC') { viewer.setSelectionMode(0); } });
内容的提问来源于stack exchange,提问作者NoName
相关产品推荐
相关产品推荐

