|
XML卷之实战锦囊(5):结构树图(3) (2)当前节点是父节点的左边子节点
1)判断的条件是: 当前对象父节点的名称='iNextYes' … 2)如果存在右边子叶子,则公式为: 当前节点的left=父节点的left - 当前节点的右边子叶子的总宽度- 当前节点的宽度
3)如果不存在右边子叶子,但存在左边子叶子,则公式为: 当前节点的left=父节点的left - 当前节点的左边子叶子的总宽度
4)如果当前节点本身就是叶子,则公式为: 当前节点的left=父节点的left - 当前节点的宽度 …
(3)当前节点是父节点的右边子节点
1)判断的条件是: 当前对象父节点的名称='iNextNo' … 2)如果存在左边子叶子,则公式为: 当前节点的left=父节点的left + 当前节点的左边子叶子的总宽度 + 当前节点的宽度
3)如果不存在左边子叶子,但存在右边子叶子,则公式为: 当前节点的left=父节点的left + 当前节点的右边子叶子的总宽度
4)如果当前节点本身就是叶子,则公式为: 当前节点的left=父节点的left + 当前节点的宽度 …
(2)和(3)的公式都是得到当前节点的left,我们还需要得到当前节点的top 很简单的公式:当前节点的top=父节点的top + 偏移量(80)
二叉树思路(3) 连接线条的定位思路: (1)找到当前节点和父节点的位置 (2)判断当前节点是父节点的左边子节点,还是右边子节点 (3)画线条
这里定义了一些变量。
objOval //当前节点,是一个object objParentOval //当前对象的父节点,是一个object objLine //当前线条,是一个object
线条的定位公式:
from="x1,y1" to="x2,y2" 是 VML 里定位线条的方式
当前节点是父节点的左边子节点,则公式为: from = 父节点的left + 偏移量(15) , 父节点的top + 偏移量(32) to = 父节点的left + 偏移量(30) , 父节点的top - 偏移量(2)
当前节点是父节点的右边子节点,则公式为: from = 父节点的left + 偏移量(35) ,父节点的top + 偏移量(32) to = 父节点的left + 偏移量(20) ,父节点的top - 偏移量(2)
我所能想到的也就这么多了。
如果只是单纯的做一个公司结构图的话,会更简单很多。 下面是赛扬的思路,我也是在他的基础上深入一点而已。
首先计算最下层节点个数,得出宽度, 然后应该根据节点的从属关系计算其上层节点位置,递归。 每一层级的节点要按从属关系先排序 首先设“基本值”=节点应向右偏移量 每个包含子节点的节点的left值等于它所拥有的节点所占宽度的一半加上基本值
后话:
最近不知为何,网络一直都不好。断线的时间比在线的时间多。 所以没对代码简化,其实,要完善的功能还有很多,比如: 需要加右键菜单 右键菜单内含新建节点、修改节点名称、改变关联关系等 在每一个节点上都可右键打开这个节点的右键菜单
讲解: 1)flow2.xml 是数据文件,相信大家都不会有问题。 2)flow2.xsl 是格式文件,有几个地方要注意。 (1)脚本中:
(1) <xsl:value-of select="./iProcess/text()" /> ; (2) {./iProcess/text()}
(1)和(2)的作用都是返回由 select 参数给出的表达式的字符串值。 他们的搜索条件相同,所以返回的值也一样。
|