被忽视的TWaver功能(1)
应客户需求写个Demo,Demo中包括一些经常使用的功能。包括解析JSON数据生成TWaver中的网元和连线。网元右下角带上不同标识的小图标,连线须要是二次曲线。弹出菜单和信息板。跟大家分享下。先上图让大家看看效果(大家在学习的同一时候,是否能发现这次Demo有所不同)
解析JSON数据生成TWaver中的网元和连线
以下是Demo中用到的JSON数据格式例子
1 |
var topo_data |
2 |
{ "element" : "node" , "name" : "网关" , "id" : "gateway1" , "image" : "group" , "icon" : "icon_wall" }, |
3 |
{ "element" : "node" , "name" : "网关" , "id" : "gateway2" , "image" : "subnetwork" , "icon" : "icon_wall" }, |
4 |
{ "element" : "link" , "from" : "cloud" , "to" : "center1" , "name" : "包括关系" }, |
5 |
{ "element" : "link" , "from" : "gather2" , "to" : "firewall" , "arrow" : "11" } |
6 |
]; |
依据element推断创建何种对象,是网元还是连线;image设置网元图片的名称(这些图片都是事先须要注冊。假设使用TWaver内置的图片,则不须要。直接使用TWaver的图片注冊名称就可以。比如twaver.Defaults.IMAGE_GROUP),icon设置网元上的标识,arrow设置连线的箭头方向,以下上代码
1 |
function createElement(item){ |
2 |
var element; |
3 |
if (item.element 'link' ){ |
4 |
var from this .box.getDataById(item.from); |
5 |
var to this .box.getDataById(item.to); |
6 |
var link new MyLink(from, |
7 |
if (item.arrow){ |
8 |
if (item.arrow== "10" || "11" ) 'arrow.from' , true ); |
9 |
if (item.arrow== "01" || "11" ) 'arrow.to' , true ); |
10 |
} |
11 |
this .box.add(link); |
12 |
element=link; |
13 |
} |
14 |
if (item.element 'node' ){ |
15 |
var node new twaver.Node(item.id); |
16 |
if (item.image){ |
17 |
node.setImage(item.image); |
18 |
if (item.image== 'group' ) |
19 |
if (item.image== 'subnetwork' ) |
20 |
} |
21 |
if (item.icon){ |
22 |
node.setStyle( 'icons.names' , |
23 |
node.setStyle( 'icons.position' , 'bottomright.topleft' ); |
24 |
} |
25 |
node.setStyle( 'shadow.blur' ,10); |
26 |
node.setStyle( 'shadow.xoffset' ,5); |
27 |
node.setStyle( 'shadow.yoffset' ,5); |
28 |
this .box.add(node); |
29 |
element=node; |
30 |
} |
31 |
32 |
if (element){ |
33 |
element.setStyle( 'label.font' , '11px ); |
34 |
element.setName(item.name); |
35 |
} |
36 |
} |
网元右下角带上不同标识的小图标
在TWaver里这个很easy,使用网元自带的IconAttachment就能实现。在上面的代码中,处理icon部分实用到,icon的names能够是一个数组,同一时候放多个图标;还能够设置图标的X或Y轴上Y的偏移量,很多其它属性能够參考TWaver文档
1 |
node.setStyle( 'icons.names' , |
2 |
node.setStyle( 'icons.position' , 'bottomright.topleft' ); |
来个大图赞赏赞赏
连线须要是二次曲线
这个须要重写LinkUI,仅仅须要重写getLinkPoints的方法就能够。默认此方法返回是的是from和to两个点。假设须要二次曲线,那就须要一共3个点。这里计算from和to的中心点,并做了一个偏移,方法最后返回的是一个list。第一个元素是from点,第二个元素是包括中间点和to点的list,假设须要连线是贝塞尔曲线第二个元素应是包括3个元素的list,TWaver内部做了个识别
1 |
getLinkPoints: function () |
2 |
MyLinkUI.superClass.getLinkPoints.call( this ); |
3 |
4 |
var f this .getFromPoint(); |
5 |
var t this .getToPoint(); |
6 |
7 |
var points new twaver.List(); |
8 |
points.add(f); |
9 |
points.add(t); |
10 |
11 |
this ._lineLength |
12 |
var offset this ._lineLength/10; |
13 |
var m |
14 |
x: |
15 |
y: |
16 |
} |
17 |
var cps new twaver.List(); |
18 |
cps.add(m); |
19 |
cps.add(t); |
20 |
21 |
points.removeAt(1); |
22 |
points.add(cps); |
23 |
this ._linkPoints |
24 |
25 |
return this ._linkPoints; |
26 |
} |
弹出菜单和信息板
弹出菜单使用TWaver的PopupMenu机制,轻松搞定,直接上代码
1 |
var popupMenu new twaver.controls.PopupMenu(network); |
2 |
popupMenu.setMenuItems([ |
3 |
{ '加入设备' }, |
4 |
{ '删除设备' }, |
5 |
{ true }, |
6 |
{ '具体信息...' }, |
7 |
]); |
8 |
popupMenu.onMenuItemRendered function (div, |
9 |
div.childNodes[1].style[ 'font-family' ]= "'Microsoft ; |
10 |
div.childNodes[1].style[ 'font-size' ]= '12px' ; |
11 |
}; |
信息板并不须要TWaver的机制,仅仅须要监听network的事件,控制DOM就能够实现。能够每次生成一个div显示,也缓存一个div,通过CSS控制它的display属性。依据详细需求所定。
这里缓存了一个div,依据点击的网元不同,改动div上的标题和图标
1 |
this .network.addInteractionListener( function (e){ |
2 |
if (e.kind 'clickElement' && 'twaver.Node' && |
3 |
var titleImg 'titleImg' ); |
4 |
var ei |
5 |
titleImg.src |
6 |
7 |
var titleTxt 'titleTxt' ); |
8 |
var txt '' ; |
9 |
if (e.element.getName()){ |
10 |
txt |
11 |
} |
12 |
titleTxt.innerHTML |
13 |
var s |
14 |
s.display 'block' ; |
15 |
s.left 'px' ; |
16 |
s.top 'px' ; |
17 |
} else { |
18 |
dialog.style.display 'none' ; |
19 |
} |
20 |
}); |
开头括弧中问题,大家肯定已经明确。指的是网元的图标发生了。是不是比以往更加美丽了,感谢大家的支持。
被忽视的TWaver功能(1)的更多相关文章
- 巧用TWaver 3D 矢量图形功能
的确,提起TWaver,大家想到的首先是“电信拓扑图组件”.其实,由于其灵活的MVC架构.矢量化设计.方便定制等特点,TWaver可以做的还有很多.例如房地产行业常见到的“户型图”. 户型推荐是销售接 ...
- 运用TWaver 3D 矢量图形处理能力
的确,提起TWaver,大家想到的首先是"电信拓扑图组件".事实上.因为其灵活的MVC架构.矢量化设计.方便定制等特点.TWaver能够做的还有非常多.比如房地产行业常见到的&qu ...
- SWIG 3 中文手册——6. SWIG 和 C++
目录 6 SWIG 和 C++ 6.1 关于包装 C++ 6.2 方法 6.3 支持的 C++ 功能 6.4 命令行选项与编译 6.5.1 代理类的构造 6.5.2 代理类中的资源管理 6.5.3 语 ...
- 几个超级好用但很少有人知道的 webstorm技巧
我总结一些我发现的比较实用的功能,内容来自日常工作中用到的功能.图片来自PPT,是在公司内部的分享. 你不知道的webstorm进阶使用技巧 1.双击shift 全局搜索,可以搜索代码.设置等. 如果 ...
- 2017年"程序媛和工程狮"绝对不能忽视的编程语言、框架和工具
2017年"程序媛和工程狮"绝对不能忽视的编程语言.框架和工具 在过去的一年里,软件开发行业继续大踏步地向前迈进.回顾 2016 年,我们看到了更多新兴的流行语言.框架和工具, ...
- JQuery的一些简单功能
JQuery js的缺点总结 1.入口函数只能有一个,如果出现多个,后面的会覆盖掉前面的 2.代码容错性差,容易出错,出错会导致后面的代码不执行 3.存在浏览器兼容性,比如innerText在火狐浏览 ...
- Chrome开发者工具不完全指南(一、基础功能篇)
就算你不是一名前端开发工程师,相信你也不会对Chrome浏览器感到陌生.根据最新的一份(2015/06)的浏览器市场占有率报告,Chrome近乎占有浏览器天下的半壁江山.简单.快捷使它成为了新时代人们 ...
- .NET框架设计(常被忽视的C#设计技巧)
阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你的对象如虎添翼(要学会使用扩展方法的设计思 ...
- 货运APP产品魔力=卓越功能×情感诉求
货运APP产品魔力=卓越功能×情感诉求 [导语]在滴滴打车.快的打车软件风靡全国之际,很多企业也在探索如何将其应用到公路货运领域用以整合社会运力资源.但一方面大多数人聚焦的是干线运输中的长途货车运 ...
随机推荐
- search_word
一个小程序,用asc码输出自己的名字.要求是,a~z两路输入,输出了一个完整的拼音之后还需要输出一个空格.—— 信息硬件过滤的雏形. module search_word ( clock , rese ...
- ASP.NET Core (一):简介
下一篇:ASP.NET Core(二):入门 英文原版:Introduction to ASP.NET Core 关于ASP.NET Core ASP.NET Core 是一个全新的开源.跨平台框架, ...
- hdu2243之AC自动机+矩阵乘法
考研路茫茫——单词情结 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- [置顶] hdu3018解题报告--也是白话几笔画学习总结
1.题意 2.分析难点(结合图形) 1.首先说说题意吧...题意很简单...但是一开始很菜的我就很迷惑..在想啊...题目怎么就会有没有连接边的点呢....因为你每次给出一条边..就把 a,b连接啦. ...
- UVA - 10057 A mid-summer night's dream.
偶数时,中位数之间的数都是能够的(包含中位数) 奇数时,一定是中位数 推导请找初中老师 #include<iostream> #include<cstdio> #include ...
- 10 - 应用程序间通信、本地通知、加速计、URL传输中文
一.应用间通信 URL 调用系统服务: tel:11111 sms:xxx@163.com http:// URL深入 类型://主机:端口/地址?参数 label框等于文字大小快捷键:command ...
- 设计模式(二)单件模式Singleton(创建型)
SINGLETON(单件)—对象创建型模式 几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的.您希望在应用程序中共享数据库句柄,因为在保持连接打开或关 ...
- 浅谈PPM (Project Portfolio Management) - 1
前言: 本文以纯理论性的PPM解说为主,不会涉及到具体怎样实施,我会在以后介绍具体的PPM实施方案介绍. PPM,可能非常多人并不清楚甚至可能没听说过,这是一个近些年才流行起来的概念,是Project ...
- HTTP协议--状态码
HTTP状态码负责表示客户端HTTP请求返回的结果.标记服务器端的处理是否正常.通知出现的错误等工作. 常用状态码共分5大类: 1XX:Informational,信息性状态码,接收的请求正在处理. ...
- wamp安装后打开默认网页显示dir,图标红点
首先网页显示dir,是因为服务这些没启动,跟图标红点是一个原因,解决了图标红点,就能解决只显示dir的问题. 先测试是不是端口占用问题,如图: 如果是,那就继续往下走. 单击图标左键(记住是左键),然 ...