如何修改Autodesk AggregatedView中ModelStructurePanel的节点标签?
解决Autodesk AggregatedView中ModelStructurePanel节点重命名问题
方法一:直接修改模型文档名称(最简单)
ModelStructurePanel的根节点名称默认取自模型的model.doc.name属性,该属性对应上传OSS的文件名。直接修改这个属性后刷新面板即可:
// 获取你的AggregatedView实例 const aggregatedView = this.aggregatedView; // 获取所有视图项 const viewables = aggregatedView.getViewables(); // 遍历每个视图项对应的模型,修改根节点名称 viewables.forEach((viewable, index) => { const model = aggregatedView.getModel(viewable); // 可根据index或viewable信息设置自定义名称 model.doc.name = `自定义模型${index + 1}`; }); // 刷新ModelStructure面板 const modelStructureExt = this.viewer.getExtension('Autodesk.ModelStructure'); modelStructureExt.panel.refresh();
方法二:扩展ModelStructurePanel(灵活控制所有节点)
如果需要更灵活的节点名称控制(比如不同模型/节点设置不同名称),可以正确扩展面板类,重写getNodeLabel方法,同时确保替换面板后正确刷新:
class CustomModelStructurePanel extends Autodesk.Viewing.UI.ModelStructurePanel { constructor(container, id, title, options) { super(container, id, title, options); // 存储模型ID到自定义名称的映射 this.customRootNames = new Map(); } // 设置指定模型的根节点名称 setModelRootName(modelId, customName) { this.customRootNames.set(modelId, customName); this.refresh(); } getNodeLabel(node) { const model = this.viewer.model; const instanceTree = model.getInstanceTree(); // 判断当前节点是否为模型根节点 if (node.dbId === instanceTree.getRootId()) { const customName = this.customRootNames.get(model.id); if (customName) { return customName; } } // 非根节点沿用默认逻辑 return super.getNodeLabel(node); } } // 替换默认面板 const modelStructureExt = this.viewer.getExtension('Autodesk.ModelStructure'); const customPanel = new CustomModelStructurePanel( this.viewer.container, 'customModelStruct', '我的模型结构', { viewer: this.viewer } ); modelStructureExt.setModelStructurePanel(customPanel); // 为每个模型设置自定义根名称 const aggregatedView = this.aggregatedView; const viewables = aggregatedView.getViewables(); viewables.forEach((viewable, index) => { const model = aggregatedView.getModel(viewable); customPanel.setModelRootName(model.id, `自定义模型${index + 1}`); });
你之前方法的问题
- 第一种方法:InstanceTree确实没有
setNodeName方法,因为它是只读的模型结构数据。 - 第二种方法:
- 重写
getNodeLabel时未区分根节点,直接返回固定值会导致所有节点名称相同。 - 构造面板时可能缺少
viewer参数,导致面板初始化异常。 - 替换面板后未主动刷新,新的标签逻辑无法生效。
- 重写
内容的提问来源于stack exchange,提问作者Rodrigo Ferreira
相关产品推荐
相关产品推荐

