博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
「翻译」新增自订义工具列及按钮
阅读量:6477 次
发布时间:2019-06-23

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

这篇文章翻译自 Autodesk Forge 官方教程 ,更多细节请参考原文。

在这个教程里,我们会透过自定的扩展在 Viewer 的画面上新增一个自订义的工具列,这个工具列会有两个按钮,每个按钮会有自个的提示,也有自个的点击事件,可以让摄像头绕著标的旋转90度。以下示例会分成3个片段一一介绍:

图片描述

第一步 - 取得工具列:

在扩展被载入的时候,工具列可能还没产生。在这个情况下你必需去监听 TOOLBAR_CREATED_EVENT,等到这个事件被触发后才能将将自订义的内容加上去,下面是这部份的代码片段:

load() {  if( this.viewer.toolbar ) {    // Toolbar is already available, create the UI    this.createUI();  } else {    // Toolbar hasn't been created yet, wait until we get notification of its creation    this.onToolbarCreatedBinded = this.onToolbarCreated.bind(this);    this.viewer.addEventListener( Autoesek.Viewing.TOOLBAR_CREATED_EVENT, this.onToolbarCreatedBinded );  }  return true;}onToolbarCreated = () => {  this.viewer.removeEventListener(av.TOOLBAR_CREATED_EVENT, this.onToolbarCreatedBinded);  this.onToolbarCreatedBinded = null;  this.createUI();};

第二步 - 新增按钮:

实作 createUI 函数,当这个函数被调用的时候,就会在画面上产生自订义的工具列及按钮。

createUI() {  const viewer = this.viewer;  // 自订义按钮 1  const button1 = new Autodesk.Viewing.UI.Button( 'my-view-front-button' );  button1.onClick = () => {      viewer.setViewCube( 'front' );  };  button1.addClass( 'my-view-front-button' );  button1.setToolTip( 'View front' );  // 自订义按钮 2  const button2 = new Autodesk.Viewing.UI.Button( 'my-view-back-button' );  button2.onClick = () => {      viewer.setViewCube('back');  };  button2.addClass( 'my-view-back-button' );  button2.setToolTip( 'View Back' );  // 自订义工具列  this.subToolbar = new Autodesk.Viewing.UI.ControlGroup( 'my-custom-view-toolbar' );  this.subToolbar.addControl( button1 );  this.subToolbar.addControl( button2 );  viewer.toolbar.addControl(this.subToolbar);}

你可能有注意到在上面示例里有调用到 addClass 函数,这个函数是用来设置一个 CSS 样示到自定义的按钮上来定义按钮的外观。但在那之前我们还没有新增这个样示到我们的网页页面上,所以我们必需将下面的样示新增到页面上,自订义的按钮才会长个像我们想要的样子:

第三步 - 清除自订义工具列及按钮:

透过下方的代码片段就可以将上面新增的自订义工具列及按钮从画面上移除:

unload() {  this.viewer.toolbar.removeControl( this.subToolbar );  return true;}

上面的扩展全貌(使用 ES6 语法)

export default class ToolbarExtension extends Autodesk.Viewing.Extension {    constructor( viewer, options ) {        super( viewer, options );    }        createUI() {      const viewer = this.viewer;          // 自订义按钮 1      const button1 = new Autodesk.Viewing.UI.Button( 'my-view-front-button' );      button1.onClick = () => {          viewer.setViewCube( 'front' );      };      button1.addClass( 'my-view-front-button' );      button1.setToolTip( 'View front' );          // 自订义按钮 2      const button2 = new Autodesk.Viewing.UI.Button( 'my-view-back-button' );      button2.onClick = () => {          viewer.setViewCube('back');      };      button2.addClass( 'my-view-back-button' );      button2.setToolTip( 'View Back' );          // 自订义工具列      this.subToolbar = new Autodesk.Viewing.UI.ControlGroup( 'my-custom-view-toolbar' );      this.subToolbar.addControl( button1 );      this.subToolbar.addControl( button2 );          viewer.toolbar.addControl(this.subToolbar);    }        onToolbarCreated = () => {      this.viewer.removeEventListener(av.TOOLBAR_CREATED_EVENT, this.onToolbarCreatedBinded);      this.onToolbarCreatedBinded = null;      this.createUI();    };        load() {      if( this.viewer.toolbar ) {        // Toolbar is already available, create the UI        this.createUI();      } else {        // Toolbar hasn't been created yet, wait until we get notification of its creation        this.onToolbarCreatedBinded = this.onToolbarCreated.bind(this);        this.viewer.addEventListener( Autoesek.Viewing.TOOLBAR_CREATED_EVENT, this.onToolbarCreatedBinded );      }          return true;    }        unload() {      this.viewer.toolbar.removeControl( this.subToolbar );      return true;    }}Autodesk.Viewing.theExtensionManager.registerExtension( 'Autodesk.ADN.Demo.ToolbarExtension', ToolbarExtension );

附註:上面样例使用到浏览器尚未支持的语法,如遇到无法加载的问题请改用下面样例

class ToolbarExtension extends Autodesk.Viewing.Extension {    constructor( viewer, options ) {        super( viewer, options );        this.onToolbarCreated = this.onToolbarCreated.bind( this );    }        createUI() {      const viewer = this.viewer;          // 自订义按钮 1      const button1 = new Autodesk.Viewing.UI.Button( 'my-view-front-button' );      button1.onClick = () => {          viewer.setViewCube( 'front' );      };      button1.addClass( 'my-view-front-button' );      button1.setToolTip( 'View front' );          // 自订义按钮 2      const button2 = new Autodesk.Viewing.UI.Button( 'my-view-back-button' );      button2.onClick = () => {          viewer.setViewCube('back');      };      button2.addClass( 'my-view-back-button' );      button2.setToolTip( 'View Back' );          // 自订义工具列      this.subToolbar = new Autodesk.Viewing.UI.ControlGroup( 'my-custom-view-toolbar' );      this.subToolbar.addControl( button1 );      this.subToolbar.addControl( button2 );          viewer.toolbar.addControl(this.subToolbar);    }        onToolbarCreated() {      this.viewer.removeEventListener(av.TOOLBAR_CREATED_EVENT, this.onToolbarCreatedBinded);      this.onToolbarCreatedBinded = null;      this.createUI();    }        load() {      if( this.viewer.toolbar ) {        // Toolbar is already available, create the UI        this.createUI();      } else {        // Toolbar hasn't been created yet, wait until we get notification of its creation        this.onToolbarCreatedBinded = this.onToolbarCreated.bind(this);        this.viewer.addEventListener( Autoesek.Viewing.TOOLBAR_CREATED_EVENT, this.onToolbarCreatedBinded );      }          return true;    }        unload() {      this.viewer.toolbar.removeControl( this.subToolbar );      return true;    }}Autodesk.Viewing.theExtensionManager.registerExtension( 'Autodesk.ADN.Demo.ToolbarExtension', ToolbarExtension );

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

你可能感兴趣的文章
Windows 10 /win10 上使用GIT慢的问题,或者命令行反应慢的问题
查看>>
梯度下降(Gradient descent)
查看>>
Windows平台分布式架构实践 - 负载均衡
查看>>
iOS自定制tabbar与系统的tabbar冲突,造成第一次点击各个item图片更换选中,第二次选中部分item图片不改变...
查看>>
SVN服务器使用(二)
查看>>
反射获取内部类以及调用内部类方法
查看>>
App里面如何正确显示用户头像
查看>>
U-BOOT之一:BootLoader 的概念与功能
查看>>
我的路上
查看>>
Velocity处理多余空白和多余空白行问题
查看>>
DB2与oracle有什么区别
查看>>
创建一个多级文件目录
查看>>
Picasa生成图片幻灯片页面图文教程
查看>>
js获取当前时间的前一天/后一天
查看>>
svn status 显示 ~xx
查看>>
常用HiveQL总结
查看>>
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
查看>>
POJ 3311 Hie with the Pie(状压DP + Floyd)
查看>>
Security updates and resources
查看>>
深入理解JavaScript系列(25):设计模式之单例模式
查看>>