被忽视的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 fromthis.box.getDataById(item.from); |
5 |
var tothis.box.getDataById(item.to); |
6 |
var linknew 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 nodenew 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 fthis.getFromPoint(); |
5 |
var tthis.getToPoint(); |
6 |
7 |
var pointsnew twaver.List(); |
8 |
points.add(f); |
9 |
points.add(t); |
10 |
11 |
this._lineLength |
12 |
var offsetthis._lineLength/10; |
13 |
var m |
14 |
x: |
15 |
y: |
16 |
} |
17 |
var cpsnew 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 popupMenunew twaver.controls.PopupMenu(network); |
2 |
popupMenu.setMenuItems([ |
3 |
{'加入设备'}, |
4 |
{'删除设备'}, |
5 |
{true}, |
6 |
{'具体信息...'}, |
7 |
]); |
8 |
popupMenu.onMenuItemRenderedfunction (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产品魔力=卓越功能×情感诉求 [导语]在滴滴打车.快的打车软件风靡全国之际,很多企业也在探索如何将其应用到公路货运领域用以整合社会运力资源.但一方面大多数人聚焦的是干线运输中的长途货车运 ...
随机推荐
- Calling 64-bit assembly language functions lodged inside the Delphi source code
Code: http://www.atelierweb.com/calling-64-bit-assembly-language-functions-lodged-inside-the-delphi- ...
- html中事件处理中的this和event对象
在用js编写页面事件处理代码时,会经常涉及到this和event对象,但有时在采用不同的事件处理,尤其是在与自定义的对象关联时,这些对象的指向变的有些复杂. 本文来详细介绍下各种场景下 这些对象 真正 ...
- Debian上安装TightVNC Server
from:www.penlug.org/twiki/bin/view/Main/TightVNC Using VNC The tool vncserver allows you to run ad ...
- Linux命令之find(一)
find命令的使用格式为:find options path expressions find命令事实上有两种options,一种是"真正属于自己的",还有一种位于expressi ...
- 前序 中序 后序 遍历 递归 非递归算法 java实现
前序遍历 非递归 public void preordernorec(TreeNode root){ //System.out.println("先序遍历(非递归):"); //用 ...
- 网页制作之html基础学习6-CSS浏览器兼容问题
初学html和css时,每天切图,总会遇到很多浏览器兼容性问题.最近一直关注移动平台开发,就html和css来说,不用考虑那么多浏览器兼容性问题.到现在,以至于很多浏览器兼容性几乎忘光了.今天把以前总 ...
- JavaScript下全选反选的Demo程序里实现checkmeonly函数 DOM
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ZOJ 3609 求逆元
Modular Inverse Time Limit: 2 Seconds Memory Limit: 65536 KB The modular modular multiplicative ...
- js判断IP js判断域名
<html> <head> <script language="javascript" type="text/javascript" ...
- windows phone 8的新特性
<1>硬件的升级WP8在硬件上有了极大的提升,处理器支持双核或多核 理论最大支持64核,分辨率支持800x480.1280x720/768,屏幕支持720p或WXGA:支持存储卡扩展.同时 ...