我正在尝试使用QuickGraph构建包含记录顶点的Graphviz图。到目前为止,我有这个:
var algo = new GraphvizAlgorithm<Entity, EntityEdge>(this);
algo.CommonVertexFormat.Shape = GraphvizVertexShape.Record;
algo.CommonVertexFormat.Style = GraphvizVertexStyle.Filled;
algo.FormatVertex += new FormatVertexEventHandler<Entity>(FormatVertex);
private void FormatVertex(object sender, FormatVertexEventArgs<Entity> e) {
Entity ent = e.Vertex;
GraphvizRecord rec = new GraphvizRecord();
GraphvizRecordCell rootCell = new GraphvizRecordCell();
rootCell.Text = ent.ClassName + "\\n" + ent.TargetName;
var inputs = ent.GetUniqueInputNames();
foreach (string input in inputs) {
GraphvizRecordCell cell = new GraphvizRecordCell();
cell.Text = input;
cell.Port = input;
rootCell.Cells.Add(cell);
}
rec.Cells.Add(rootCell);
e.VertexFormatter.Record = rec;
}
但是,当我生成图形时,顶点显示标签而不是记录。我做错了什么?
修改
这是点输出。
digraph G {
bgcolor="#454545FF"
node [fillcolor="#505050FF", color="#2A2A2AFF", shape=record, fontname="Verdana", fontsize=10, label="", style=filled, fontcolor="#FFFFFFFF"];
edge [ fontsize=10, fontcolor="#FFFFFFFF", color="#ECA706FF", fontname="Verdana"];
0 [label="EntityMap.Entity"];
1 [label="EntityMap.Entity"];
2 [label="EntityMap.Entity"];
3 [label="EntityMap.Entity"];
4 [label="EntityMap.Entity"];
5 [label="EntityMap.Entity"];
6 [label="EntityMap.Entity"];
7 [label="EntityMap.Entity"];
8 [label="EntityMap.Entity"];
9 [label="EntityMap.Entity"];
10 [label="EntityMap.Entity"];
11 [label="EntityMap.Entity"];
12 [label="EntityMap.Entity"];
13 [label="EntityMap.Entity"];
14 [label="EntityMap.Entity"];
15 [label="EntityMap.Entity"];
0 -> 0 [ label="OnPlayerUse", headport="EnableMotion", headlabel=""];
0 -> 1 [ label="OnPlayerUse", headport="Explode", headlabel=""];
0 -> 6 [ label="OnPlayerUse", headport="Compare", headlabel=""];
0 -> 5 [ label="OnPlayerUse", headport="RevertToDefaultRelationship", headlabel=""];
3 -> 4 [ label="OnTrigger", headport="Wake", headlabel=""];
4 -> 2 [ label="OnFoundEnemy", headport="Display", headlabel=""];
6 -> 15 [ label="OnEqualTo", headport="EmitAISound", headlabel=""];
6 -> 4 [ label="OnEqualTo", headport="Wake", headlabel=""];
7 -> 8 [ label="OnStartTouch", headport="Command", headlabel="+duck"];
7 -> 8 [ label="OnEndTouch", headport="Command", headlabel="-duck"];
7 -> 9 [ label="OnEndTouch", headport="Enable", headlabel=""];
7 -> 10 [ label="OnEndTouch", headport="Fade", headlabel=""];
7 -> 7 [ label="OnEndTouch", headport="Disable", headlabel=""];
12 -> 11 [ label="OnMapSpawn", headport="Fade", headlabel=""];
13 -> 6 [ label="OnPass", headport="SetValue", headlabel="1"];
14 -> 6 [ label="OnPass", headport="SetValue", headlabel="1"];
}
答案 0 :(得分:0)
根单元格中缺少细节,特别是对象方法的名称。我想dot
输出行
0 [label="EntityMap.Entity"];
......应该是:
0 [label="<EnableMotion> EntityMap.Entity"];
(...我猜他们不应该都被命名为EntityMap.Entity
?)
我无法确定程序中边缘的引入位置,但看起来边缘的渲染基于与顶点不同的信息。
手动运行dot
(dot foo.dot -Tpng -o foo.png
)可能会为您提供更多信息性错误/警告消息。