为Autodesk Viewer添加自定义工具条的更好方法
上一篇文章中我介绍了使用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);
}
}
下面就是运行效果了:
为Autodesk Viewer添加自定义工具条的更好方法的更多相关文章
- 为Autodesk Viewer添加自定义工具条
如果你参加过我们近期的活动,你就会频繁的听到我们现在正在做的Autodesk Viewer大模型浏览器,这是一个不需要下载任何插件,基于WebGL技术的浏览器,可以支持几十种数据格式.同时viewer ...
- 无插件的大模型浏览器Autodesk Viewer开发培训-武汉-2014年8月28日 9:00 – 12:00
武汉附近的同学们有福了,这是全球第一次关于Autodesk viewer的教室培训. :) 你可能已经在各种场合听过或看过Autodesk最新推出的大模型浏览器,这是无需插件的浏览器模型,支持几十种数 ...
- MapControl Application 添加自定义的工具条
现在想用二次开发做一些东西,然后需要自定义的工具条,但是如何向MapControl Application 添加自定义的工具条呢,经过多次试验后,终于找到了相应的方法(左图是添加自定义的工具条之前,右 ...
- Autodesk 产品开发培训开始报名-8月26~28-武汉– Revit, Vault, Autodesk Viewer, Navisworks
为了帮助Autodesk中国地区的二次开发人员有机会系统地了解与学习Autodesk 在BIM解决方案中的旗舰产品 Revit以及Navisworks等产品的最新开发技术,并有机会与Autodesk ...
- 如何往IE工具条添加按钮(转载)
如何往IE工具条添加按钮 问题提出:金山词霸.网络蚂蚁等软件安装后会向IE的工具条添加自己的按钮.按下按钮后还会作出相应的动作,这种功能是如何实现的呢?读完本文,您也可以将自己应用程序的按钮添加到IE ...
- [原创]ObjectARX开发环境搭建之VS2010+ObjectARX2012Wizard+Addin工具条问题修复
目前ObjectARX版本越来越高,也越来越简化开发,如果需要同时开发低版本和高版本的ARX程序,就需要搭建批量编译环境,以满足ARX开发的需要. 批量编译的搭建网络上已经有了很多的教程,基本上都是基 ...
- Navisworks API 简单二次开发 (自定义工具条)
在Navisworks软件运行的时候界面右侧有个工具条.比较方便.但是在二次开发的时候我不知道在Api那里调用.如果有网友知道请告诉我.谢谢. 我用就自己设置一个工具.界面比较丑!没有美工. 代码: ...
- 小菜的系统框架界面设计-灰姑娘到白雪公主的蜕变(工具条OutLookBar)
灰姑娘本身也有自已的优点,但是却可能因为外貌不讨人喜欢,要变成白雪公主却需要有很多勇气和决心去改变自已: 有一颗善良的心 讨人喜爱的外貌 --蜕变--> 我这里讲的是一个工具条的蜕变过程, ...
- 浅析WINFORM工具条的重用实现
一直以来,我都想看看别人家的工具栏重用(图1)到底是如何实现的,但在网上搜索了很久都没有找到过,即使找到一些程序,要么就是把这个工具栏写在具体的画面(图2),要么就是没有源代码的, 我在想,是否别人也 ...
随机推荐
- 深入浅出JSONP--解决ajax跨域问题
取不到数据! 上周客户新买了服务器,原本在旧的服务器上放着客户的Web主页信息和一个后台程序(asp.net),在客户的主页中有一个动态显示最新消息的处理,这个处理就是通过ajax异步从那个后台程序中 ...
- [java] 汇率换算器实现(2)
[java] 汇率换算器实现(2) // */ // ]]> // */ // ]]> [java] 汇率换算器实现(2) Table of Contents 1 系列文章地址 2 前 ...
- Azure China (1) Azure公有云落地中国
<Windows Azure Platform 系列文章目录> 微软公有云Microsoft Azure已经落地中国,官方网址:http://www.windowsazure.cn/. 在 ...
- STM32 DMA使用详解
DMA部分我用到的相对简单,当然,可能这是新东西,我暂时还用不到它的复杂功能吧.下面用问答的形式表达我的思路. DMA有什么用? 直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数 ...
- [Asp.net 5] Configuration-新一代的配置文件(神奇的Binder)
关于配置文件的目录:[Asp.net 5] Configuration-新一代的配置文件 之前看过MVC4.0的源码,里面就有Binder.作用是将前台页面传递过来的键值对/字典表绑定到特定的对象.此 ...
- Web API应用架构在Winform混合框架中的应用(2)--自定义异常结果的处理
在上篇随笔<Web API应用架构在Winform混合框架中的应用(1)>中我介绍了关于如何在Winfrom里面整合WebAPI,作为一个新型数据源的接入方式,从而形成了三种不同的数据提供 ...
- javascript事件分类解析
最近在学习javascript,就顺便把常用事件给大家整理整理,也让自己加深印象.不足之处欢迎各位补充. 一般事件 onclick 鼠标点击时触发此事件 ondblclick 鼠标双击时触发此事件 ...
- 常用Eclipse快捷方式
Ctrl+1 快速修复 Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加) Alt+↓ 当前行和下面一行交互位置(特 ...
- 同样的MVC,不同的实现方法(Spring MVC .Net MVC)
由于工作需要,最近将Net的MVC又重新好好的学习了一遍.学习教材是博客园里的大神的作品<ASP.NET MVC5框架揭秘>. <ASP.NET MVC5框架揭秘>这本书,说了 ...
- SSH实例(4)
Clas.hbm.xml文件如下: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibe ...