BundledEdgeRouter类 可用 来 将图中的边“绑”起来 ,也就是让那些边在分叉附近更集中,然后发散开,形成曲线,而不是赤裸裸的直线。 可看一下Flare的示例程序中那个“Dependency graph”示例,里面就用BundledEdgeRouter将线绑了起来,否则都是直线的话看着狠乱。看看 截图 ,感觉就像电工布线时把线绑在一起一样 :
本座在最近的这个数据可视化项目中,曾经也尝试这样做,可惜由于 是初学FLEX 和Flare,没有领悟到这两个东西的精妙之处,所以当时没弄出这种绑线的效果,暂时放弃了。
昨天 在小结的时候,翻译了BundledEdgeRouter的文档, 在一句句阅读了文档,并且做了实验之后,知道这个东西该怎么用了。
BundledEdgeRouter 要求关联 到一个图(Flare里用Data类来表示)上 ,而不是关联到一棵树上 ,并且要求这个图上定义了一棵生成树(Flare里用Tree类表示树)。 在这里 ,对于本座来说的关 键 之处就是, 所关联的这个图应当是一个图,而不是严格的树,也就是说,图里最少要有两个节点之间存在两条以 上 的路径 。图要满足这个条件,才会有边被绘制成曲线,否则所有 的边仍然是直线。 本座最初使用的时候,所提供的图本身是一棵严格的树, 任何两个节点之间只有一条路径,结果绘制出来 的可视 化结果中所有边都是直的。 看下面这两个 图 就明白了 ,左边的图是一棵严格的树,右边的图中存在多对 有两条以上路径的节点 ,所以左边的图都是直线,右边的图里有些边被“绑线”搞成了曲线 :
|
|
本座大概看了 一下BundledEdgeRouter类的源代码 ,对于两个节点之间直接连 接的那条边,会以其它路径(至于存在 多条候选路径时选择哪一条,本座没研究 )中的节点作为该边的基样条曲线 (叫B样条曲线的话,妳可能更熟悉) 的控制点 。 这样,当两个距离为1的节点之间只存在一条路径时,这条路径自然就是连接它们的那条边了,由于不存在其它路径,所以这条边的基样条曲线没有其它的控制点 (只有起点和终点,也就是两个节点本身) ,于是就退化成一条直线了。于是 本座提供的那个严格是一棵树的图就被绘制成全部直线的边了。
如果实际 要绘制的图实在是一棵严格的树,那怎么办呢?人为加些不可见的边, 以产生出一些冗余路径吧。
HxLauncher: Launch Android applications by voice commands