Forge Viewer激活Autodesk.PropertiesManager扩展时,如何指定显示单个/多个元素ID对应的属性而非模型整体属性?
Forge Viewer激活Autodesk.PropertiesManager扩展时,如何指定显示单个/多个元素ID对应的属性而非模型整体属性?
嗨,我完全懂你的需求啦!你在PowerBI里集成Forge Viewer,现在已经能成功唤起PropertiesManager扩展,但默认弹出来的是模型整体的属性,而你想要的是:当PowerBI里选中某个元素(对应Viewer里的dbId)后,Viewer不仅隔离这个元素,还能让属性面板直接展示该元素的属性,对吧?
其实核心问题在于PropertiesManager是跟随Viewer当前的选择集来展示属性的,默认显示模型属性是因为此时没有选中任何具体元素,所以我们只要先把目标元素设为Viewer的选中状态,再激活扩展(或者刷新扩展的显示)就可以了。
给你整理个可行的步骤和代码示例:
- 先设置正确的选择集
你已经用了isolate(dbIds)来隐藏其他元素,但isolate只是视觉上隔离,并不会设置选中状态。所以得先调用select(dbIds)把目标元素设为选中项:
// 把这里的dbIds换成你从PowerBI拿到的目标元素ID(单个的话就写成[你的单个ID]) const targetDbIds = [123]; // 先设置选中状态 this.forge_viewer.select(targetDbIds); // 可选:如果你需要隔离显示该元素 this.forge_viewer.isolate(targetDbIds);
- 激活扩展并强制刷新属性面板
激活PropertiesManager的时候,最好拿到扩展实例后手动调用刷新方法,确保它能读取到最新的选择集:
this.forge_viewer.activateExtension("Autodesk.PropertiesManager").then(propertiesExt => { // 强制刷新属性面板,让它显示当前选中元素的属性 propertiesExt.refresh(); });
另外你之前用到的this.forge_viewer.setPropertiesOnSelect(true),这个配置是用来开启「用户手动点击元素时自动弹出属性面板」的功能,对你这种通过代码设置选择集的场景,还是需要手动调用扩展的refresh来触发属性更新。
如果还是没生效,可以先打印this.forge_viewer.getSelection()看看返回的ID是不是你预期的,确认选择集设置正确了再排查扩展的问题。
备注:内容来源于stack exchange,提问作者cmm28
相关产品推荐
相关产品推荐

