资讯专栏INFORMATION COLUMN

在 Forge Viewer 载入外部扩展

LinkedME2016 / 820人阅读

摘要:本文章的原作是的在版的里引入了一个重大的变革,开始支持载入外部扩展,细节可以参考这篇文章重大变更。这个函数自此刻起的函数回传值不在是布林值,取而代之的是一个实例,这表示开始支持使用非同步的方法在载入扩展。

本文章的原作是 Autodesk ADN 的 Philippe Leefsma

在 v2.15 版的 Forge Viewer API 里引入了一个重大的变革,Viewer开始支持载入外部扩展,细节可以参考这篇文章重大变更 - Forge Viewer.loadExtension。

Viewer3D.loadExtension()这个函数自此刻起的函数回传值(Return Value)不在是布林值(Boolean),取而代之的是一个 Promise 实例,这表示 Viewer 开始支持使用非同步的方法在载入扩展。这个变革使得扩展的代码可以被放置在外部文档里,可以在被使用者要求或者觸發时在载入即可,那要怎麼做到呢?

开发者只要调用registerExternalExtension 这个函数来注册外部扩展就可以让 Viewer 知道这个扩展是必需额外载入的,它不被包含在现在网页页面里,像 Viewer 自带的 Markups 和 BimWalker 两个扩展都是这样被载入的。但如果我想要将这个套用在自定扩展要怎么做?

下方示例代码是我们的扩展本体,被放置在 external.js 这个文档里,并将这个文档放在我们网页服务器的 /resources/extensions/ 路径底下:

(function(){

  "use strict";

  function MyExternalExtension(viewer, options) {

    Autodesk.Viewing.Extension.call(this, viewer, options)
  }

  MyExternalExtension.prototype = Object.create(Autodesk.Viewing.Extension.prototype)
  MyExternalExtension.prototype.constructor = MyExternalExtension

  var proto = MyExternalExtension.prototype

  proto.load = function () {

    console.log("External Extension loaded!")

    return true
  }

  proto.unload = function () {

    console.log("External Extension unloaded!")

    return true
  }

  proto.sayHello = function (name) {

    console.log("Hi " + name + "!")

    return true
  }

  Autodesk.Viewing.theExtensionManager.registerExtension(
    "MyExternal.Extension.Id",
    MyExternalExtension)
})()

现在假设我们的网页服务器的位址是 localhost:3000,在我们的 Viewer 应用的代码里可以加上下面这行来注册 external.js 这个外部扩展:

Autodesk.Viewing.theExtensionManager.registerExternalExtension(
  "MyExternal.Extension.Id",
  "http://localhost:3000/resources/extensions/external.js")

在透过这些代码将我们的外部扩展载入:

viewer.addEventListener(
  Autodesk.Viewing.GEOMETRY_LOADED_EVENT, () => {

    viewer.loadExtension("MyExternal.Extension.Id").then(
      function(externalExtension) {

        externalExtension.sayHello("Bob")
      })
  });

一但扩展被载入后就可以透拓浏览器的 Console 看到下面的信息(实作在外部扩展里):

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88902.html

相关文章

  • Forge Viewer 里切换模型视图(Viewables)

    摘要:有提供类似的功能,但这并不包含在里头。条列清单或是切换视图是非常容易的,你主要是要建立一个使用者介面让使用者去选取他们想观看的内容。我使用了来确保当前载入模型占用的内存可以都被释出。 此篇文章原作是 Autodesk ADN Philippe Leefsma,以下以我简称。 这有一个简易的博客用来说明一个我刚加入 https://forge-rcdb.autodesk.io 的一个新功...

    BlackHole1 评论0 收藏0
  • 透过 three.js Forge Viewer 里头创建 3D 文字(使用部份 r81 的功能

    摘要:但很不幸的,新功能要加入里头这件事对于开发团队而言绝非一件易事,是需要一些时间来完成的这篇文章将带领大家用最少的工作量将上的新功能拿来上使用。在这个案例里头,我们可以只将和其他相依文档引入例如。 showImg(https://segmentfault.com/img/bV25af?w=1311&h=696); 对于 Forge Viewer 比较熟悉的朋友可能知道 Forge Vie...

    xuhong 评论0 收藏0
  • 使用 Forge Viewer 序列中聚合多模型

    摘要:但模型载入程序并不是同步执行的载入文档和几何等动作在里都是异步的,我们没办法知道哪一个模型是第一个被完整载入,和下个一个完全载入的是谁而在一些应用场景里是有可能需要在一个序列聚合多个模型。 showImg(https://segmentfault.com/img/bVVaPI?w=600&h=390); 此篇博客原著为 Autodesk ADN 的梁晓冬,以下以我简称。 我的同事创作了...

    graf 评论0 收藏0
  • 「翻译」Forge Viewer上实作简易的模型版本比较

    摘要:现在让我们修改这个示例让他可以展示两个同项目但不同版号的模型及。示例执行结果如下这边是这个比较模型的括展代码英文原文 showImg(https://segmentfault.com/img/bVOmjp?w=1542&h=925); 熟悉 BIM360 Team 的朋友可能知道他有一个很牛的模型文档版本比较的功能,但如果模型是放在 Google 云盘或是百度云盘上有可能做到吗? Au...

    JowayYoung 评论0 收藏0

发表评论

0条评论

LinkedME2016

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<