为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添加自定义工具条的更好方法

时间: 2024-07-30 10:33:45

为Autodesk Viewer添加自定义工具条的更好方法的相关文章

为Autodesk Viewer添加自定义工具条

如果你参加过我们近期的活动,你就会频繁的听到我们现在正在做的Autodesk Viewer大模型浏览器,这是一个不需要下载任何插件,基于WebGL技术的浏览器,可以支持几十种数据格式.同时viewer也提供了API,你可以把这个viewer嵌入到你自己的web程序中.我们也写了不少sample,发布到了 github 上,这些示例都需要ConsumerKey,你需要向Autodesk来申请,目前该产品还没有正式发布,我们只邀请了一些客户做测试,很快就会发布,大家还需要耐心等待一下. 在最近的co

无插件的大模型浏览器Autodesk Viewer开发培训-武汉-2014年8月28日 9:00 &ndash; 12:00

武汉附近的同学们有福了,这是全球第一次关于Autodesk viewer的教室培训. :) 你可能已经在各种场合听过或看过Autodesk最新推出的大模型浏览器,这是无需插件的浏览器模型,支持几十种数据格式.目前该产品还没有正式发布,但如果你感兴趣,座位紧张,赶紧报名:   http://www.autodesk.com.cn/adsk/servlet/item?siteID=1170359&id=23581540  (这是系列培训中的一部分)   通用无插件大模型浏览器–Autodesk Vi

MapControl Application 添加自定义的工具条

现在想用二次开发做一些东西,然后需要自定义的工具条,但是如何向MapControl Application 添加自定义的工具条呢,经过多次试验后,终于找到了相应的方法(左图是添加自定义的工具条之前,右图是添加自定义的工具条之后) 在MapControl Application中一共有四个控件,即arcengine ToolbarControl,arcengine TOCControl,arcengine MapControl,还有arcengine LicenseControl. 在这里只需要将

[原创]ObjectARX开发环境搭建之VS2010+ObjectARX2012Wizard+Addin工具条问题修复

目前ObjectARX版本越来越高,也越来越简化开发,如果需要同时开发低版本和高版本的ARX程序,就需要搭建批量编译环境,以满足ARX开发的需要. 批量编译的搭建网络上已经有了很多的教程,基本上都是基于vs2010+arx2012wizard,原因是arx2012的wizard有addin工具条,而高版本不再有此功能,对于新手来说,这是很不方便的.可是arx2012的wizard存在一些未修改的错误,导致addin工具条有的无法使用,甚至会引起vs2010的崩溃.经过我的研究发现了问题的所在,原

窗体皮肤实现 - 在标题栏上增加快速工具条(四)

前面做的工作就是想在标题区域增加快速工具条.前续的基础工作完成,想要在标题区域增加特殊区域都非常方便.只要在绘制时控制自定义区域需要占用标题区域多少空间,然后直接在所占位置绘制.做这个事情前,稍微把代码规整了下.所以界面皮肤处理放到一个单元中. 主要处理步骤 1.划出一个新区域(整个工具条作为一个区域) 2.处理区域检测(HitTest) 3.如果是新区域,把相应消息传给这个区域处理. 4.响应鼠标点击,执行Action 通过上述步骤就能扩展出所想要的标题区快速工具条的. 标题按钮区域是作为一个

侧栏工具条开发

我们能学到什么 1.使用Sass更好的书写CSS 2.使用RequireJS进行模块化开发,编写出方便复用的代码 3.使用CSS3实现简单的动画效果 ########################################################################################## 使用Sass编写css Sass的基础知识 将sass编译成css -- koala工具的使用 http://koala-app.com/index-zh.html 在

SVG开发包, 20 个有用的 SVG 工具,提供更好的图像处理

20 个有用的 SVG 工具,提供更好的图像处理 SVG 现正在 Web 设计领域变得越发流行, 你可以使用 Illustrator 或者 Inkscape 来创建 SVG 图像. 但当进行 Web 设计时,我们还需要做一些优化来使得 SVG 变得更加轻量. 下面介绍的 20 个工具,可以帮助你快速有效的创建 SVG 图像.现有的在线工具已经可以帮助我们进行优化.转换.新建模式等工作. 更详细的介绍,参见:How To Create SVG Animation Using CSS 交互式 SVG

浅析WINFORM工具条的重用实现

摘要: 一直以来,我都想看看别人家的工具栏重用(图1)到底是如何实现的,但在网上搜索了很久都没有找到过,即使找到一些程序,要么就是把这个工具栏写在具体的画面(图2),要么就是没有源代码的, 我在想,是否别人也有这个需求呢? 于是我决定把我自己的程序代码帖出来,一来可以分享给到需要的朋友,二来,希望有大侠经过,指点一二. (图1) (图2). 对于图2, 当然好实现了, 只是对当前画面的功能实现. 相当于单独画面的一个按钮而已. 现在,我们主要讲一下图1的实现方法. 在首先,在讲工具栏之前,讲一下

工具让生活更美好

工欲善其事,必先利其器. 如果你工作中使用MySQL数据库,却从来没安装其他的MySQL工具,我只能说:牛逼中的战斗机.我就一打酱油的,都是使用MySQL工具操作的:偶尔使用cmd命令行,结果总是蛋疼不断,遂决定弃用. 1.MySQL Workbench 这是官方的工具,其实很强大,如何强大我们这里就不说了,谁用谁知道! 最近一直在使用Workbench,发现个问题,把查询结果复制到excel中记录数不对,已经三次了. 比如select count(*) from tableA,显示数量为110