博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在 Forge Viewer 载入外部扩展
阅读量:6904 次
发布时间:2019-06-27

本文共 1752 字,大约阅读时间需要 5 分钟。

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

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

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 看到下面的信息(实作在外部扩展里):

图片描述

转载地址:http://jymdl.baihongyu.com/

你可能感兴趣的文章
优化中的subgradient方法
查看>>
fastDFS 一二事 - 简易服务器搭建(单linux)
查看>>
Elasticsearch初步使用(安装、Head配置、分词器配置)
查看>>
thinkphp 3.2.3 计划任务具体实现实例教程
查看>>
php源码解读
查看>>
linux编译ruby1.8.7 出现OPENSSL错误
查看>>
设计模式(五):中介者模式
查看>>
grep(Global Regular Expression Print)
查看>>
WCF学习之旅—WCF服务的批量寄宿(十三)
查看>>
解决“不是有效的win32应用程序”问题
查看>>
安装opencv以及遇到的坑
查看>>
C# 匿名函数
查看>>
MySQL锁系列2 表锁
查看>>
Lua中的closure(闭合函数)
查看>>
一个int类型引发的bug
查看>>
js 片段 - 控制类型为 text 的 input 类型
查看>>
CentOS安装中文支持(linux中文文件名乱码)
查看>>
[原创]ExtAspNet秘密花园(二) — 一切从头开始
查看>>
Delphi 常用控件之TlistView总结
查看>>
QUnit系列 -- 1.介绍单元测试(上)
查看>>