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

如何从外部触发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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:02:41