`

如何创建环型、树型双层布局

阅读更多

TWaver的Demo中有常用的环型布局和树型布局,但是当网元数量较多,又不想zoomOverView,聪明的我们自然会想到使用双层布局,整体效果既不会显得很拥挤,也能刚好充满整个窗口,如下图的效果:


实现这样布局效果实现的步骤:
1.将link个数最多的Node作为圆点或顶点。
2.分别计算所有点的位置。
查找圆点或顶点的核心代码如下:

1 var sizes = [];
2 this.box.forEach(function (element) {
3     if (element instanceof  twaver.Node) {
4         sizes.push(element.getLinks().size());
5     }
6 });
7  
8 Array.max=function(array)
9 {
10     return Math.max.apply(Math,array);
11 }
12 this.box.forEach(function(element){
13    if(element instanceof  twaver.Node){
14        if(Array.max(sizes) == element.getLinks().size()){
15            <a href='http://twaver.servasoft.com/wp-content/uploads/2014/09/AutoLayoutDemo.html'>AutoLayoutDemo</a>element.setClient('center','center');
16        }
17    }
18 });

圆形布局核心代码如下:

1 function roundLayout() {
2             var datas = box.getDatas().toArray();
3             var size = box.getDatas().toArray().length;
4             if (window.innerWidth)
5                 winWidth = window.innerWidth;
6             else if ((document.body) && (document.body.clientWidth))
7                 winWidth = document.body.clientWidth;
8 // 获取窗口高度
9             if (window.innerHeight)
10                 winHeight = window.innerHeight;
11             else if ((document.body) && (document.body.clientHeight))
12                 winHeight = document.body.clientHeight;
13             var centerX = winWidth / 2;//圆心坐标
14             var centerY = winHeight / 2;
15             var radius = 0;//半径
16             var N = 0//total number of node
17  
18             box.forEach(function (data) {
19                 if (data.getClient('center') !== undefined) {
20                     data.setCenterLocation(centerX, centerY);
21                 }
22                 if (data instanceof  twaver.Node && data.getClient('center') == undefined) {
23                     N++;
24                 }
25             });
26  
27             var c = getCRound(N);
28             var i = 0;
29             var n = parseInt(N / c);
30             radius = network.viewRect.height / 2 / c - 30 / c;
31             if (box.getClient("radius")) {
32                 radius = parseInt(box.getClient("radius"));
33             }
34             box.forEach(function (data) {
35                 if (data instanceof  twaver.Node && data.getClient('center') == undefined) {
36                     var e = parseInt(i / n);
37                     var x = centerX + (radius * Math.pow(1.5, e) * Math.cos(Math.PI * 2 / n * i + 0.2 * e));
38                     var y = centerY + (radius * Math.pow(1.5, e) * Math.sin(Math.PI * 2 / n * i + 0.2 * e));
39                     i++;
40                     data.setCenterLocation(x, y);
41                     data.setClient('level', e);
42                 }
43             });
44         }

树型布局核心代码:

1 function roundLayout() {
2             var datas = box.getDatas().toArray();
3             var size = box.getDatas().toArray().length;
4             if (window.innerWidth)
5                 winWidth = window.innerWidth;
6             else if ((document.body) && (document.body.clientWidth))
7                 winWidth = document.body.clientWidth;
8 // 获取窗口高度
9             if (window.innerHeight)
10                 winHeight = window.innerHeight;
11             else if ((document.body) && (document.body.clientHeight))
12                 winHeight = document.body.clientHeight;
13             var centerX = winWidth / 2;//圆心坐标
14             var centerY = winHeight / 2;
15             var radius = 0;//半径
16             var N = 0//total number of node
17  
18             box.forEach(function (data) {
19                 if (data.getClient('center') !== undefined) {
20                     data.setCenterLocation(centerX, centerY);
21                 }
22                 if (data instanceof  twaver.Node && data.getClient('center') == undefined) {
23                     N++;
24                 }
25             });
26  
27             var c = getCRound(N);
28             var i = 0;
29             var n = parseInt(N / c);
30             radius = network.viewRect.height / 2 / c - 30 / c;
31             if (box.getClient("radius")) {
32                 radius = parseInt(box.getClient("radius"));
33             }
34             box.forEach(function (data) {
35                 if (data instanceof  twaver.Node && data.getClient('center') == undefined) {
36                     var e = parseInt(i / n);
37                     var x = centerX + (radius * Math.pow(1.5, e) * Math.cos(Math.PI * 2 / n * i + 0.2 * e));
38                     var y = centerY + (radius * Math.pow(1.5, e) * Math.sin(Math.PI * 2 / n * i + 0.2 * e));
39                     i++;
40                     data.setCenterLocation(x, y);
41                     data.setClient('level', e);
42                 }
43             });
44         }
分享到:
评论

相关推荐

    网络拓扑结构大全和图片星型总线型环型树型分布式网状拓扑结构.doc

    网络拓扑结构大全和图片星型总线型环型树型分布式网状拓扑结构.doc

    网络拓扑结构大全和图片星型总线型环型树型分布式网状拓扑结构.pdf

    本篇文章将详细介绍几种常见的网络拓扑结构:星型、总线型、环型、树型以及分布式网状结构。 1. **星型结构** 星型拓扑是最常见的一种网络结构,其中每个节点都直接连接到一个中心节点,通常是集线器或交换机。...

    Node.js-tre创建文件树型结构展示

    标题"Node.js-tre创建文件树型结构展示"指的是使用tre模块在Node.js环境中创建并展示文件系统的树状视图。这个功能对于开发者来说是相当实用的,因为它可以直观地呈现复杂的目录结构,使代码更易于理解和维护。 tre...

    网络拓扑结构大全和图片星型、总线型、环型、树型、分布式、网状拓扑结构.doc

    网络拓扑结构大全和图片星型、总线型、环型、树型、分布式、网状拓扑结构.doc

    php创建无限级树型菜单

    在介绍PHP创建无限级树型菜单的相关知识点之前,首先需要了解树型结构的概念。树型结构是一种非线性数据结构,它用于表示元素之间的层次关系,类似于自然界中的树木,其中每个元素称为节点,一个节点可能有零个或多...

    js做的树型结构javascript作的树型结构javascript作的树型结构

    js做的树型结构,应该是很好的,javascript作的树型结构javascript作的树型结构javascript作的树型结构javascript作的树型结构javascript作的树型结构javascript作的树型结构javascript作的树型结构javascript作的树型...

    变色的树型控件 变色的树型控件 变色的树型控件

    在Windows系统中,树型控件是通过API函数如CreateWindow或CreateWindowEx创建的,并通过SendMessage或PostMessage发送消息来操作。开发者可以使用如TV_INSERTITEM、TV_DELETEITEM等消息插入或删除节点,TV_...

    网络拓扑结构大全和图片(星型、总线型、环型、树型、分布式、网状拓扑结构

    环型拓扑结构是由一系列通过点到点的链路首尾相连形成的闭合环路,其中数据沿着一个固定的方向在各节点间循环传递。这种结构常用于令牌网中,数据包以令牌的形式在环内传递。环型拓扑结构的特点如下: 1. **传输...

    java 树型菜单建立

    本文将详细讲解如何使用Java来构建一个动态的、可交互的树型菜单,包括从数据库获取数据、创建树节点、实现添加和删除节点的功能。 首先,我们需要了解Java中的树型组件。在Java Swing库中,`JTree`是用于展示树型...

    jquery树型

    当我们谈论“jQuery树型”时,我们指的是利用jQuery来创建和操作树形数据结构的用户界面。树型结构通常用于展现层次化信息,如文件系统、组织结构或导航菜单。在网页应用中,它可以帮助用户更直观地理解和操作复杂的...

    精美的ajax树型菜单

    - `treeStyle.css`:这是样式表文件,定义了树型菜单的视觉样式,包括颜色、字体、布局等。CSS(Cascading Style Sheets)是用于描述HTML或XML(包括各种XML方言如SVG、XHTML等)文档样式的语言,通过分离内容和表现...

    易语言树型框扩充

    "子程序_树形框形成"是这个扩充中的一个重要部分,它可能包含创建和初始化树型框,设置节点,添加子节点,以及构建整个树形结构的相关函数。开发者可以通过调用这个子程序来快速构建出符合需求的树型框界面,减少...

    网络拓扑结构大全和图片(星型、总线型、环型、树型、分布式、网状拓扑结构)[整理].pdf

    环型结构由网络中若干节点通过点到点的链路首尾相连形成一个闭合的环,这种结构使公共传输电缆组成环型连接,数据在环路中沿着一个方向在各个节点间传输,信息从一个节点传到另一个节点。 特点: 这种网络结构...

    Javascript树型菜单

    这些库提供了丰富的API和预定义的样式,使得创建交互式树型菜单变得简单。 8. **数据结构与交互**:在实际实现中,树型菜单的数据结构可能是JSON对象或XML,其中包含节点信息(如ID、文本、子节点数组等)。...

    超酷多种风格树型菜单效果

    如压缩包中的“dhtml-tree-menu-200”,这可能是一个JavaScript库,专门用于创建动态的、交互式的树型菜单。JavaScript允许动态地创建和修改DOM元素,实现菜单的展开和折叠,同时还可以处理用户的交互事件。CSS则...

    vc++树型列表控件

    标题"vc++树型列表控件"指的是在VC++项目中创建一个模拟树形结构的列表控件,这通常涉及到对CListCtrl类的扩展或利用其他方法来模拟树节点的展开、折叠以及父子节点的管理。 描述中的"在普通的列表控件中显示树型...

    易语言简单树型框分割文本

    1. **树型框控件**:理解易语言中的TreeCtrl控件,包括创建、设置其属性(如是否允许多选、节点图标等)、以及添加、删除和操作节点的方法。 2. **字符串处理**:学习如何分割字符串,可以使用易语言的字符串函数,...

    树型结构算法

    树型结构算法树型结构算法树型结构算法树型结构算法

    datawindow树型控件.rar

    在本压缩包“datawindow树型控件.rar”中,包含了一系列与在PowerBuilder中创建和使用树型结构DataWindow相关的资源。这些资源旨在帮助开发者理解和应用DataWindow树控件,从而提供更丰富的用户界面体验。 1. **...

Global site tag (gtag.js) - Google Analytics