应客户需求写个Demo,Demo中包含一些常用的功能,包括解析JSON数据生成TWaver中的网元和连线,网元右下角带上不同标识的小图标,连线需要是二次曲线,弹出菜单和信息板,跟大家分享下。先上图让大家看看效果(大家在学习的同时,能否发现这次Demo有所不同)
解析JSON数据生成TWaver中的网元和连线
下面是Demo中用到的JSON数据格式样例
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" }
|
根据element判断创建何种对象,是网元还是连线;image设置网元图片的名称(这些图片都是事先需要注册,如果使用TWaver内置的图片,则不需要,直接使用TWaver的图片注册名称即可,例如twaver.Defaults.IMAGE_GROUP),icon设置网元上的标识,arrow设置连线的箭头方向,下面上代码
1 |
function createElement(item){
|
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, to);
|
8 |
if (item.arrow== "10" || item.arrow== "11" ) link.setStyle( 'arrow.from' , true );
|
9 |
if (item.arrow== "01" || item.arrow== "11" ) link.setStyle( 'arrow.to' , true );
|
14 |
if (item.element == 'node' ){
|
15 |
var node = new twaver.Node(item.id);
|
17 |
node.setImage(item.image);
|
18 |
if (item.image== 'group' ) node.setImage(twaver.Defaults.IMAGE_GROUP);
|
19 |
if (item.image== 'subnetwork' ) node.setImage(twaver.Defaults.IMAGE_SUBNETWORK);
|
22 |
node.setStyle( 'icons.names' , [item.icon]);
|
23 |
node.setStyle( 'icons.position' , 'bottomright.topleft' );
|
25 |
node.setStyle( 'shadow.blur' ,10);
|
26 |
node.setStyle( 'shadow.xoffset' ,5);
|
27 |
node.setStyle( 'shadow.yoffset' ,5);
|
33 |
element.setStyle( 'label.font' , '11px "Microsoft Yahei"' );
|
34 |
element.setName(item.name);
|
网元右下角带上不同标识的小图标
在TWaver里这个非常简单,使用网元自带的IconAttachment就能实现,在上面的代码中,处理icon部分有用到,icon的names可以是一个数组,同时放多个图标;还可以设置图标的X或Y轴上Y的偏移量,更多属性可以参考TWaver文档
1 |
node.setStyle( 'icons.names' , [item.icon]);
|
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 );
|
4 |
var f = this .getFromPoint();
|
5 |
var t = this .getToPoint();
|
7 |
var points = new twaver.List();
|
11 |
this ._lineLength = _twaver.math.calculateLineLength(points);
|
12 |
var offset = this ._lineLength/10;
|
14 |
x: (f.x+t.x)/2 + offset,
|
15 |
y: (f.y+t.y)/2 + offset,
|
17 |
var cps = new twaver.List();
|
23 |
this ._linkPoints = points;
|
25 |
return this ._linkPoints;
|
弹出菜单和信息板
弹出菜单使用TWaver的PopupMenu机制,轻松搞定,直接上代码
1 |
var popupMenu = new twaver.controls.PopupMenu(network);
|
2 |
popupMenu.setMenuItems([ |
8 |
popupMenu.onMenuItemRendered = function (div, menuItem) {
|
9 |
div.childNodes[1].style[ 'font-family' ]= "'Microsoft Yahei', 'Open Sans',sans-serif" ;
|
10 |
div.childNodes[1].style[ 'font-size' ]= '12px' ;
|
信息板并不需要TWaver的机制,只需要监听network的事件,控制DOM就可以实现。可以每次生成一个div显示,也缓存一个div,通过CSS控制它的display属性,根据具体需求所定。这里缓存了一个div,根据点击的网元不同,修改div上的标题和图标
1 |
this .network.addInteractionListener( function (e){
|
2 |
if (e.kind == 'clickElement' && e.element && e.element.getClassName() == 'twaver.Node' && e.element.getName()){
|
3 |
var titleImg = document.getElementById( 'titleImg' );
|
4 |
var ei = twaver.Util.getImageAsset(e.element.getImage())._cache;
|
5 |
titleImg.src = ei.toDataURL();
|
7 |
var titleTxt = document.getElementById( 'titleTxt' );
|
9 |
if (e.element.getName()){
|
10 |
txt = e.element.getName();
|
12 |
titleTxt.innerHTML = txt;
|
15 |
s.left = e.event.x+ 'px' ;
|
16 |
s.top = e.event.y+ 'px' ;
|
18 |
dialog.style.display = 'none' ;
|
开头括弧中问题,大家肯定已经明白,指的是网元的图标发生了,是不是比以往更加漂亮了,感谢大家的支持。
分享到:
相关推荐
1. **Twaver.js库介绍**:Twaver.js是一个用于图形化建模和可视化的JavaScript库,支持多种图表类型,如网络拓扑图、流程图等。 2. **图形化界面构建**:通过twaver.js,开发者可以创建动态、交互的图形界面,便于...
1. **index.html**:这是主要的HTML入口文件,通常包含对API文档的导航和概述,可能会引导开发者到各个API模块和功能。 2. **api.js**:这个JavaScript文件可能包含了Twaver 5.9.0的源代码或者API函数的定义,方便...
1. **TWaver库**:TWaver是一个强大的图表和数据可视化库,提供了丰富的图表类型,包括2D和3D图形。它支持动态数据更新、交互式操作,以及自定义样式和行为。 2. **HTML5 3D图形**:TWaver的3D功能基于HTML5,利用...
1. demo.bat:这是一个Windows批处理文件,用于启动Demo程序,开发者可以借此了解TWaver的功能和用法。 2. demo.jar:这是TWaver的演示示例程序的Java可执行文件,包含了用TWaver实现的各种图表和图形案例。 3. demo...
TWaver是一个强大的数据可视化工具,它提供了丰富的图表类型和交互功能,让数据展示更加直观易懂。 【描述】该开发包的亮点在于其强大的可视化能力,通过TWaver,开发者可以轻松地构建出各种炫酷的图形,如流程图、...
1. **图形绘制**:TWaver支持自定义图形和形状,可以创建任何复杂的图表。 2. **数据绑定**:将图形与数据源绑定,实现数据驱动的动态更新。 3. **交互性**:支持拖放、点击、选中、高亮等多种用户交互方式。 4. **...
这样便可以访问TWaver提供的各种功能和组件。 TWaver Flex的数据模型核心是`twaver.IData`和`twaver.DataBox`。`IData`是基本数据元素,而`DataBox`作为基本数据容器,可以存储和管理这些数据。此外,TWaver Flex还...
"官方demo" 表明这是由Twaver官方发布的,因此可以确保展示的功能是最完整、最准确的,对于开发者来说,它是学习和评估Twaver功能的重要资源。 在压缩包文件"twaver-flex-3.6.5"中,用户可以找到关于如何在Flex项目...
“twaver-java-3.7”文档包含了详细的使用指南和示例代码,帮助开发者快速上手并充分利用Twaver的功能。文档通常会涵盖以下几个部分: 1. **快速入门**:介绍如何安装Twaver库,以及创建第一个图表的基本步骤。 2....
- 这种跨平台的支持意味着TWaver可以被集成到不同的应用场景中,无论是桌面应用、Web应用还是移动应用,都能找到合适的版本。 ### TWaver的优势 #### 高效性 - TWaver在处理大量数据时表现出了极高的效率,例如在*...
1. demo.bat 和 demo.sh:这些是Windows和Linux下的可执行脚本,用于启动Demo应用,让我们可以直观地看到TWaver的功能。 2. demo.jar:这是Demo应用程序的Java可执行文件,包含TWaver的实例代码和测试案例。 3. ...
Twaver学习案例的例子
【标签】"拓扑"表明twaver的核心功能是拓扑图的构建和管理。在IT领域,拓扑图通常用于表示网络设备的物理布局或逻辑连接。通过这种图表,可以清晰地看到设备间的连接关系、流量路径以及潜在的故障点,对于网络规划、...
1. **多平台支持**:TWaver提供了跨平台的支持,包括Windows、Linux和Mac OS等操作系统。压缩包中的`demo.bat`和`demo.sh`分别是Windows和Linux下的运行脚本,便于在不同环境下运行示例。 2. **丰富的图表类型**:...
通过上述内容的学习和实践,你可以熟练地使用Twaver构建出专业且功能丰富的可视化应用,无论是电信行业的网络管理还是其他领域的复杂系统展示,Twaver都能成为你的得力工具。在实际操作中,结合压缩包内的资源,按照...
TWaver Java是一个功能丰富的可视化组件库,适用于构建复杂的图形用户界面(GUI),特别是在网络监控、数据分析和展示应用中。 ### 概述 TWaver Java提供了多种图形组件,包括但不限于网络、树形、表格、树表、...
### TWaver for Flex 开发手册知识点总结 #### 一、TWaver for Flex 概述 TWaver for Flex 是一款由 Serva Software 开发的高级图形组件库,它为 Flex 应用程序提供了一系列丰富的图形控件和服务。这些控件允许...
即使是在极端情况下(如连接比例达到5:1),Twaver Java仍能保持较高的响应速度和稳定性,证明其在网络通信方面具有出色的技术优势。 #### 结论 通过对Twaver Java在不同节点和连接情况下的性能测试,我们可以得出...
1. 设备建模:每个设备(如服务器、路由器等)都被精确地建模,包括形状、颜色和大小,以便真实反映实际机房环境。 2. 设备布局:TWaver支持自动布局算法,可以智能地排列和连接设备,减少手动调整的工作量。 3. ...