上一篇文章中我介绍了使用Autodesk Viewer的UI API来给viewer添加自定义工具条的方法,看起来很简单是吧。不过有个问题,就是关于自定义工具条的信息(包括按钮的文本、图标、样式、callback等等)全都散落在代码中,如果要添加或者修改的话,得特别小心的扫描代码,非常容易出错。有没有更好的办法呢?这篇文章就来介绍一下。

既然关于Toolbar button等京城需要更改的部分散落到各处不方便维护,那我就把他们集中到一起独立出来。于是我写了个自定义的toolbarConfig对象,采用JSON格式,刚好符合JavaScript的语法,如果我需要添加或者修改工具条或按钮,只需要修改这个config对象就可以了: /

// custom toobar config

var toolbarConfig = {

‘id‘: ‘toolbar_id_1‘,

‘containerId‘: ‘toolbarContainer‘,

‘subToolbars‘: [

{

‘id‘: ‘subToolbar_id_non_radio_1‘,

‘isRadio‘: false,

‘visible‘: true,

‘buttons‘: [

{

‘id‘: ‘buttonRotation‘,

‘buttonText‘ : ‘Rotation‘,

‘tooltip‘: ‘Ratate the model at X direction‘,

‘cssClassName‘: ‘glyphicon glyphicon glyphicon-play-circle‘,

‘iconUrl‘ :‘Images/3d_rotation.png‘,

‘onclick‘: buttonRotationClick

},

{

‘id‘: ‘buttonExplode‘,

‘buttonText‘: ‘Explode‘,

‘tooltip‘: ‘Explode the model‘,

‘cssClassName‘: ‘‘,

‘iconUrl‘: ‘Images/explode_icon.jpg‘,

‘onclick‘: buttonExplodeClick

}

]

},

{

‘id‘: ‘subToolbar_id_radio_1‘,

‘isRadio‘: true,

‘visible‘: true,

‘buttons‘: [

{

‘id‘: ‘radio_button1‘,

‘buttonText‘: ‘radio_button1‘,

‘tooltip‘: ‘this is tooltip for radio button1‘,

‘cssClassName‘: ‘‘,

‘iconUrl‘: ‘‘,

‘onclick‘: radioButton1ClickCallback

},

{

‘id‘: ‘radio_button2‘,

‘buttonText‘: ‘radio_button2‘,

‘tooltip‘: ‘this is tooltip for radio button2‘,

‘cssClassName‘: ‘‘,

‘iconUrl‘: ‘‘,

‘onclick‘: radioButton2ClickCallback

}

]

}

]

};

function buttonRotationClick(e) {

}

function buttonExplodeClick() {

}

function button2ClickCallback(e) {

alert(‘Button2 is clicked‘);

}

function radioButton1ClickCallback(e) {

alert(‘radio Button1 is clicked‘);

}

function radioButton2ClickCallback(e) {

alert(‘radio Button2 is clicked‘);

}

接下来创建一个工具方法,解读这个toolbarConfig并利用viewer UI API来创建对于的工具条和按钮,使用方法也和简单:

add custom toolbar , usage example:

//addToolbar(toolbarConfig);

function addToolbar(toolbarConfig, viewer) {

//find the container element in client webpage first

var containter = document.getElementById(toolbarConfig.containerId);

// if no toolbar container on client‘s webpage, create one and append it to viewer

if (!containter) {

containter = document.createElement(‘div‘);

containter.id = ‘custom_toolbar‘;

//‘position: relative;top: 75px;left: 0px;z-index: 200;‘;

containter.style.position = ‘relative‘;

containter.style.top = ‘75px‘;

containter.style.left = ‘0px‘;

containter.style.zIndex= ‘200‘;

viewer.clientContainer.appendChild(containter);

}

//create a toolbar

var toolbar = new Autodesk.Viewing.UI.ToolBar(containter);

for (var i = 0, len = toolbarConfig.subToolbars.length; i < len; i++) {

var stb = toolbarConfig.subToolbars[i];

//create a subToolbar

var subToolbar = toolbar.addSubToolbar(stb.id, stb.isRadio);

subToolbar.setToolVisibility(stb.visible);

//create buttons

for (var j = 0, len2 = stb.buttons.length; j < len2; j++) {

var btn = stb.buttons[j];

var button = Autodesk.Viewing.UI.ToolBar.createMenuButton(btn.id, btn.tooltip, btn.onclick);

//set css calss if availible

if (btn.cssClassName) {

button.className = btn.cssClassName;

}

//set button text if availible

if (btn.buttonText) {

var btnText = document.createElement(‘span‘);

btnText.innerText = btn.buttonText;

button.appendChild(btnText);

}

//set icon image if availible

if (btn.iconUrl) {

var ico = document.createElement(‘img‘);

ico.src = btn.iconUrl;

ico.className = ‘toolbar-button‘;

button.appendChild(ico);

}

//add button to sub toolbar

toolbar.addToSubToolbar(stb.id, button);

}

}

下面就是运行效果了:

原文:http://www.cnblogs.com/junqilian/p/3912274.html

html自定义工具条,为Autodesk Viewer添加自定义工具条的更好方法相关推荐

  1. 为Autodesk Viewer添加自定义工具条

    如果你参加过我们近期的活动,你就会频繁的听到我们现在正在做的Autodesk Viewer大模型浏览器,这是一个不需要下载任何插件,基于WebGL技术的浏览器,可以支持几十种数据格式.同时viewer ...

  2. R语言使用ggpubr包可视化分组条形图(grouped bar plot)、并添加误差条(error bar、误差条显示平均值+/-sd)、添加分组填充色、添加jitter、自定义分组抖动数据点形状

    R语言使用ggpubr包的ggbarplot函数可视化分组条形图(grouped bar plot).并添加误差条(error bar.误差条显示平均值+/-sd).添加分组填充色.添加jitter抖 ...

  3. arcgis超级工具安装教程_【软件安装管家】Autodesk卸载官方工具安装教程

    点击上面"蓝字"关注,获取更多资源!用心分享 一黑一白我不是灵魂导师一个分享软件/影视/音乐/网站/教程的公众号星标/置顶公众号?因公众号改版,不再按时间推送文章,为不错过最新资源 ...

  4. android 动态画直线,Android使用自定义view在指定时间内匀速画一条直线的实例代码...

    本文讲述了Android使用自定义view在指定时间内匀速画一条直线的实例代码.分享给大家供大家参考,具体如下: 1.效果图: 2.自定义view实现 public class UniformLine ...

  5. android 动态生成直线,Android使用自定义view在指定时间内匀速画一条直线的实例代码...

    本文讲述了Android使用自定义view在指定时间内匀速画一条直线的实例代码.分享给大家供大家参考,具体如下: 1.效果图: 2.自定义view实现 public class UniformLine ...

  6. cad官方卸载工具_【软件安装管家】Autodesk卸载官方工具安装教程

    点击上面"蓝字"关注,获取更多资源!用心分享 一黑一白我不是灵魂导师一个分享软件/影视/音乐/网站/教程的公众号星标/置顶公众号?因公众号改版,不再按时间推送文章,为不错过最新资源 ...

  7. google有自定义文章流畅度的伪原创工具吗

    写好文章是googleseo里面非常重要的一项工作,seo永远遵从:内容为王.外链为黄的基本原则,一篇好的文章是做好seo的关键,也能带来很多的流量曝光,从而提升转化. 那好的文章怎么来呢?有两种方式 ...

  8. java 自定义json解析注解 复杂json解析 工具类

    java 自定义json解析注解 复杂json解析 工具类 目录 java 自定义json解析注解 复杂json解析 工具类 1.背景 2.需求-各式各样的json 一.一星难度json[json对象 ...

  9. Android自定义成长值、等级、积分进度条(带属性动画)

    现在很多APP的会员进度条.等级.积分进度条都是按分段显示的,由于最近自己的项目也用到类似的控件,如下图所示,于是就自己撸了一个! package progressandanimation.wtt.c ...

最新文章

  1. 相册权限_苹果手机惊现漏洞?App在未获取相册权限的情况下成功读取照片
  2. Shell中的循环语句
  3. 【Socket网络编程】16.UDP 循环读取recvfrom() 与 循环发送 sendto()
  4. strncmp实现方式之一
  5. 直接调用android原生接口实现点击直接拨打电话功能
  6. POPTEST老李分享修改dns ip的vbs代码
  7. yii_wiki_145_yii-cjuidialog-for-create-new-model (通过CJuiDialog来创建新的Model)
  8. 萌宠历险记html5游戏在线玩,《神武2》天外魔境现世 萌宠历险记首发
  9. 微信小程序动态更改标题栏_微信小程序实现动态设置页面标题的方法【附源码下载】...
  10. AXD+H-JTAG环境搭建总结
  11. 分治法解决组合总和问题(leetcode216)
  12. luogu P1156 垃圾陷阱
  13. Wcf使用Net.Tcp做回调操作
  14. ssm连接mysql引入外部配置文件username无法被正确解析
  15. 【动画消消乐】HTML+CSS 自定义加载动画 055
  16. 数字化转型|利用现代技术和通信手段|改变企业为客户创造价值的方式
  17. 计算机安全模式什么意思,什么是电脑安全模式 电脑怎么解除安全模式
  18. 硬盘(IDE硬盘与SCSI硬盘)在Linux标识的命名规则
  19. Activiti6.0 多级审批流程 代码执行
  20. 中国农业机械融资租赁市场预测与投资战略报告(2023版)

热门文章

  1. linux neo4j 服务器,如何在linux服务器上配置Neo4j · Digital World
  2. google reader很有用的技巧 F+F11
  3. 梅捷SY-A780G+冷启动黑屏,需Reset才能进入系统
  4. ECCV 2020 《Improving One-stage Visual Grounding by Recursive Sub-query Construction》论文笔记
  5. 2019年, SGG论文汇总
  6. qt调试时变量十六进制_QT-串口调试助手自动定时收发、十六进制转换
  7. j - cyk追楠神系列一_阿迪达斯双十一携手脱口秀大咖,开启“羽绒不服·不服请就位”专场直播 - 消费...
  8. mysql架设_服务器架设MySQL开发规范与使用技巧
  9. jQuery中的表单对象属性过滤选择器(四、八)::enabled、:disabled、:checked、:selected...
  10. 部署不能产生class文件的问题