前阵子,项目中碰到这样一个显示难题:一组树形的网络设备,要在拓扑图上同时显示出树形从属关系,以及动态存在于任意两个设备之间的业务关系。也就是说,拓扑图上要同时显示两组数据:一套是树形的从属关系,一套是随机在节点之间产生的某种业务关系。当然要求是用连线显示,而且形状要清晰、不要混乱。
这是一个难题。一个树形结构并不难显示,也可以很方便的布局。例如,设置一下节点、连线样式,并设置数据到twaver的databox中,通过layout()函数即可得到下面的图:
twaver.Styles.setStyle('label.position','right.right'); twaver.Styles.setStyle('label.font','10px arial'); twaver.Styles.setStyle('link.from.xoffset',4); twaver.Styles.setStyle('link.to.xoffset',-4); twaver.Styles.setStyle('link.width',2); twaver.Styles.setStyle('link.color','#CCCCCC'); twaver.Styles.setStyle('select.style','none');
非常清晰可人。不过如果再加上随机的两点之间的连线,就很乱了,而且也无法很好的布局。
继续想想办法。当层级关系很深之后,这种平铺的tree会延展的很宽,左右滚来滚去很不方便。如果能把树环形排列起来,就不怕层级太多,如下图:
var root=new twaver.Node(); root.setLocation(x,y); root.setClient('level',0); root.setSize(50,50); root.setImage('circle'); root.setName(name); root.setClient('group', groupID); root.setClient('root', root); root.setStyle('label.position','center'); root.setStyle('label.color','white'); root.setStyle('label.font','12px "Microsoft Yahei"'); box.add(root);
这样排列的好处是,当层级很多,整个树也会尽量盘踞蜷缩在一起,不至于太宽或太高。而且层次也非常清晰。
如果加上动态业务连接关系呢?例如这些点表示计算机,连线表示他们之间的socket连接。随机生成一些连线,颜色用红色区分,则大概如下:
var connection=new twaver.Link(node, target); connection.setStyle('link.width',0.2); connection.setStyle('link.color', 'red');//#aaaaaa'); connection.setClient('connection',true); connection.setClient('angle', (target.getClient('angle')+node.getClient('angle'))/2); box.add(connection);
瞬间就凌乱了,有木有。这样肯定不行,用户眼都花了。而且两组线交织在一起,哪个都看不清。
于是进一步考虑视觉优化。由于业务连线是动态的、根据设备来查看的,所以不需要一下子显示清楚所有的业务连线。所以可以考虑用淡淡的颜色来弱化业务线的存在。还好html5的canvas允许我们使用小数的线宽和带透明度的颜色。这里就用0.2的线宽和#aaaaaa的淡灰色来设置业务线试试,效果如下:
link.setStyle('link.width',0.2); link.setStyle('link.color', '#aaaaaa');
这样效果好了很多。主要是淡淡的灰色线条不影响全图的主结构关系,用户依旧可以一眼看清全图结构。不过业务连接线的存在感并不太强,需要加强一下。继续改进:鼠标划过一个节点,让它关联的连线都通过换颜色高亮起来,看效果如何:
if(link.getClient('connection')){ if(link.getFromNode()==element || link.getToNode()==element){ link.setStyle('link.color', 'red'); link.setStyle('link.width', 1); link.getFromNode().setClient('rover', true); link.getToNode().setClient('rover', true); link.getFromNode().setClient('alpha', 1); link.getToNode().setClient('alpha', 1); }else{ link.setStyle('link.width',0.2); link.setStyle('link.color', '#aaaaaa'); } }
这样就清晰多了。当层级再多,也不会显得混乱。
如果进一步控制环形的布局角度和方向,还可以做出更多有意思的形状:
看,谁说拓扑图一定要死板呢?两套连线也可以非常清晰的显示和同时存在。对代码感兴趣的同学可以留言探讨,谢谢!
相关推荐
4. **布局算法**:GoJS内置了多种布局算法,如树形布局、环形布局、网格布局等,可以帮助自动调整节点的位置,使得拓扑图更加整洁美观。在这个实例中,可能使用了适合设备和端口关系的特定布局。 5. **动画效果**:...
5. **第三方插件或库**:虽然jQuery自身并不直接提供绘制拓扑图的功能,但通常会与其他图形库(如D3.js、JointJS或GoJS)结合使用。这些库专门处理图形渲染和布局算法,而jQuery则处理用户交互和数据处理。 6. **...
常见的网络拓扑类型包括总线型、环形、星形、网状和树形等。了解不同拓扑类型有助于设计高效、可靠和可扩展的网络架构。 2. **系统拓扑**:在服务器集群或分布式系统中,系统拓扑描述了各个节点如何协同工作。这...
**d3.js 树形结构**是数据可视化领域中一种常用的数据展示方式,它通过图形化的方式呈现层次化的数据,通常用于展现组织架构、文件系统或者网络拓扑等具有层级关系的信息。d3.js,全称Data-Driven Documents,是由...
2. 选择适合的网站类型(例如静态或动态)和拓扑结构(例如星型、环形或树形)。 3. 硬件选型包括服务器、物理设备、交换机和路由器,考虑性能、稳定性和成本等因素。 4. 子网划分和IP地址分配需遵循IP规划原则,...
在页面布局方面,ht-for-web 提供了多种布局算法,如网格布局、树形布局、环形布局等,可以根据需要灵活调整。这使得开发者在构建复杂页面时,能够轻松地组织和管理各个组件的位置和大小,提高用户体验。此外,框架...
Go.js 是一个强大的JavaScript库,专门用于创建交互式的图表和图形,特别是在网络应用中构建复杂的拓扑图和流程图。这个资源提供的是无水印版本的Go.js,以及去除Go.js水印的具体方法,这对于那些希望在自己的项目中...
此外,由于提到了“拓扑结构的层级关系”,这可能意味着这个例子还使用了D3的树布局或力导向布局来展示层次结构。D3的`d3.tree()`或`d3.cluster()`函数可以生成节点和边的布局,然后通过`d3.hierarchy()`处理数据...
* 按拓扑:星形网、树形网、环形网、总线网 * 按覆盖范围:局域网、城域网、广域网 三、Internet 的结构 * 五个接入级:网络接入点NAP、多个公司经营的国家主干网、地区ISP、本地ISP、校园网、企业或家庭PC机上网...
19. 网络拓扑结构:常见的网络拓扑结构有星形、环形、总线型,分支(或树形)也是常见的拓扑结构形式之一。 20. Internet与Intranet的区别:Internet是全球范围的公共互联网,而Intranet是企业内部的私有网络,它们...
8. **结构化分析工具**:结构化分析的工具通常包括数据流图(DFD)、数据字典(DD)和判定树,PAD图是结构化程序设计的图形表示,不是结构化分析的工具。 9. **SQL插入语句**:在SQL中,`INSERT INTO`语句用于向表...
此外,网络的拓扑结构,如星形、总线、环形、树形、网状和混合拓扑,也是理解网络架构的关键。 接着,第二部分探讨“网络操作技术”,以Windows网络操作系统为例。这部分涵盖了Windows网络的基本概念、功能,如文件...
17. 网络拓扑结构:分支结构不属于常见的网络拓扑结构形式,常见的有星形、环形、总线形等(正确答案:D)。 18. Word快捷键:Ctrl+Home组合键可以将插入光标快速移动到文档开头。 19. Word绘图工具栏:单击常用...
4. 结构化分析(Structured Analysis,SA)是一种软件开发方法,常用的工具包括判定树、数据字典和PAD图,但数据流图(Data Flow Diagram, DFD)也是结构化分析的一部分,所以选项C是错误的。 5. 在Visual FoxPro中...
11. 网络分类:按拓扑结构分类,计算机网络可以分为总线网、环形网和星形网等。 12. HTML标题标记:在HTML文档中,表示页面标题的标记对是`<title>`和`</title>`。 13. 数据操作:日期型数据可以加减整数,例如...
9. 网络分类:网络根据拓扑结构可以分为总线型、环形、星形、树形和网状网。 10. 计算机病毒:良性病毒不会破坏系统,但可能影响系统性能。 11. Word2000 功能:Word 允许用户使用鼠标和键盘移动插入点,方便文档...
计算机网络的拓扑构型包括总线型、环形、星形、树形和网状等,每种结构都有其特定的应用场景和优缺点。网络的分类主要包括局域网(LAN)、城域网(MAN)和广域网(WAN),以及近年来新兴的无线网络和移动网络。 ...
15. 网络拓扑结构:常见的有星形、环形、总线形,但没有“分支”这种形式。 16. VBA过程:Sub过程和Function过程都是VBA中定义的代码块,可以公开(Public)、私有(Private)或静态(Static)。 17. 文本框事件:...
22. 网络拓扑结构通常包括星形、环形和总线形,分支不属于常见的网络拓扑结构。 23. 测试数据属于软件开发中的辅助资源,是确保软件质量的重要组成部分。 以上知识点详细介绍了计算机二级等级考试中的部分重要内容...
6. 图结构:表示对象之间的关系,常用于网络拓扑、社交网络分析等场景。 三、实战问题 本项目中的实战问题可能涵盖各种实际场景,如: 1. 图像处理:如图像搜索、相似度计算等,涉及图像特征提取和匹配算法。 2. ...