节点类型
撰写时间:2023-07-10
修订时间:2024-02-19
从节点的形状上来分类,节点共分为3种类型:基于多边形的、基于记录的,以及用户自定义的节点。
基于多边形的节点
shape属性指定多边形形状
Graphviz的多边形节点有丰富的节点形状。默认的形状为ellipse
,也即椭圆型,我们可以通过设置节点的shape属性来指定更多形状。
多边形节点的所有形状
下面列出了所有的多边形形状。
一些特殊的多边形形状节点
同名的形状
box, rect与rectangle都是表示矩形的同一形状;而ellipse与oval都是表示椭圆的同一形状。
plaintext, none, plain及underline
其他多边形节点都有边框,而plaintext, none, plain及undeline均没有边框。前3个甚至没有任何线条,后者则只有一条下划线。尽管如此,默认情况下,它们都带有标签。
可以同时将它们的标签也取消掉,但由于没有边框,若对plaintext, none, plain设置边框颜色值则无效。而undeline则可设置边框底部的颜色。
可以为它们设置背景颜色。
上面可看出,plain的width, height及margin属性均被强制设置为0
。此时,背景颜色的范围仅紧紧围绕其标签的内容而设定。而plaintext及none均可设置这些值。
margin属性类似于CSS中的padding属性。
none是plaintext的别名。none
主要是指没有边框
。
point
可为point指定width及height属性值,以inch
为单位。这两个值如果不相等,则取最小值。
为point指定label属性值无效。
point适用于无需文本而又想显式地表示为节点的场合。
基于记录的节点
共有2种记录节点:record
及Mrecord
。record
的边框为直角,Mrecord
的边框为圆角。
最简单的记录节点
先将node的shape设置为record
,然后设置其label属性,格式为:item1 | item2 | item3等,即单元格的内容以|
号分隔。首部与尾部不需加|
号。
这种排列其实与画布的rankdir的设置有关。如果布局是竖直的,则最外层的节点按水平方向排列。如果布局是水平的,则最外层的节点按竖直方向排列。
默认情况下,画布的布局是竖直排列的:rankdir=TB,因此记录节点水平排列。
因此,我们可以通过改变画布的布局方向来改变最外层的记录节点的排列方向。
鉴于此,在使用记录节点时,建议显式地设置rankdir的值,在出现bug时,能第一时间检查该属性值。
行或列的翻转
如果需要翻转行列,只需使用{item1 | item2 | item3}的格式即可。
这就实现了表格跨行或跨列的功能。并且我们还可以不断地细分:
这个特点,比起在table中笨拙地跨行跨列来讲,方便了许多:table要返回原来的标签来人工写入跨多行跨多少列,而这里不需要。从最外层到最里层,不断地进行细分就行。
连接记录节点
记录节点可以实现子元素级别的直接连接,在需要进行连接的子元素前面加上<id>来声明箭头起始位置,然后连接时使用item:id进行引用即可。
使用转义字符
| one | \
"]; }范例
这一节中,我们实现WebGL中的例子。
我们看到,vbo是一个数组,共有6个元素,其中每两个元素为一个顶点的一组坐标,因此共3组坐标。而顶点属性aPosition也是一个数组,但只有4个空位。我们现在需要考虑的是,如何将vbo中各个顶点的坐标值传输至aPosition数组中。
下面的图示实现连接。
