TWaver - 专注UI技术

http://twaver.servasoft.com/
posts - 171, comments - 191, trackbacks - 0, articles - 2
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
前段时间,有个项目需要显示一个很大的树形拓扑结构图,而布局怎么都不好看。要生成一颗比较布局规矩、好看的树状图,一个成熟、高效的树形布局算法必不可少。Reingold Tilford是常用的一个,大家可以google一下。这个算法最先是由Edward Reingold和John Tilford一起发表的,并由他们的名字命名。有兴趣的同学,可以研究一下这篇1981年的论文:http://emr.cs.iit.edu/~reingold/tidier-drawings.pdf,里面给出了这个算法的原理和逻辑代码。这个算法的优点是逻辑相对简单,效率高。不过用js写一遍也要消耗很多脑细胞。还要,twaver直接提供了这种算法和自动布局,我们可以直接使用。 下面看一看这种布局的用途。利用Reingold Tilford树算法,我们可以把一个树形结构的数据,用不重叠、紧凑、分层的形式展示出来。最直接的用法就是直接生成一棵从左到右的树,如下图: HTML5拓扑树1
图比较长,所以我们咔嚓了一刀,下面是后面一半的图:
    HTML5拓扑树2  
其实RT树也可以做各种变化。例如我们把纵向旋转成一圈进行排列,就会形成环形的RT树:
HTML5拓扑树3
看到这些,我们可能会想起D3.js。D3也可以做出这些图形效果。相比之下,twaver使用起来会比较简单,两行代码就可以调用任意形状的自动布局算法:
1 //创建Autolayouter并绑定DataBox
2 
3 var autoLayouter = new twaver.layout.AutoLayouter(box);
4 
5 //开始布局,参数分别为布局类型和回掉函数
6 
7 autoLayouter.doLayout(type,callback);

另外,在实际项目使用中,数据往往需要多种形式进行展现,例如树、表格等配合拓扑图进行一体的、全方位的展示。这时twaver的优势就比较明显了。
下面这张图,数据通过右边的拓扑图和左边的树同时展示,甚至树上直接提供了勾选功能,选中后拓扑图也会跟着选中(深色阴影)。这种应用在twaver里面可以直接new一个Tree和Network,与同一个box关联即可。用D3估计还要其它的树组件并做交互同步,可能比较麻烦。
HTML5拓扑布局  
不论哪种技术和产品,只要适合我们的使用需求就好。简单、轻量、好用,就是好产品。
需要源代码的同学请与我们联系索取: info@servasoft.com



评论

# re: HTML5复杂拓扑图(五) Reingold Tilford树  回复  更多评论   

2016-01-10 16:26 by 流量村
现在一般用第三方的更合理些

# re: HTML5复杂拓扑图(五) Reingold Tilford树  回复  更多评论   

2016-04-25 18:14 by 司马青衫
这个太复杂了。看起啦都累啊

膜拜大神司马懿和诸葛亮谁厉害http://www.simaqingshan.com/post/569.html

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问