如何从外部触发Autodesk.Viewing.Extension类的函数?
如何从外部触发Autodesk Viewer扩展的函数?
要在Autodesk.Viewing.Extension类外部调用其内部函数,核心是获取已加载的扩展实例,再直接调用目标方法,具体实现如下:
实现步骤
- 利用Viewer实例的
getExtension方法,传入扩展注册的ID(示例中为PinMarkExtension),获取扩展的实例对象 - 通过该实例直接调用扩展内的
someFunc方法
修改后的代码示例
ObjectViewer.js
. . . this.$Autodesk.Viewing.Initializer(options, async() => { const viewerDiv = document.getElementById("viewer") const config = { extensions: ['PinMarkExtension'] // 这里已声明加载扩展,可省略后续重复的loadExtension调用 }; this.viewer = new this.$Autodesk.Viewing.GuiViewer3D(viewerDiv, config) this.viewer.start() this.$Autodesk.Viewing.Document.load( documentId, this.onDocumentLoadSuccess, this.onDocumentLoadFailure ) // 若需要传入自定义初始化参数,可保留此调用覆盖默认配置,否则无需重复执行 // await this.viewer.loadExtension('PinMarkExtension', { initialValues: [...] }) }) . . . // After extension loaded - 触发扩展函数的位置 // 确保this.viewer已初始化且扩展完成加载 const pinMarkExt = this.viewer.getExtension('PinMarkExtension'); if (pinMarkExt) { // 增加判断避免扩展未加载时抛出错误 pinMarkExt.someFunc(); // 若函数需要参数,直接传入即可:pinMarkExt.someFunc(参数1, 参数2) }
额外提示
如果需要确保扩展完全加载后再执行调用,可以监听Viewer的extensionLoaded事件:
this.viewer.addEventListener(Autodesk.Viewing.EXTENSION_LOADED_EVENT, (event) => { if (event.extensionId === 'PinMarkExtension') { const pinMarkExt = this.viewer.getExtension('PinMarkExtension'); pinMarkExt.someFunc(); } });
内容的提问来源于stack exchange,提问作者Yusuke
相关产品推荐
相关产品推荐

