QuickGraph GraphvizRecord 不显示在顶点中
我正在尝试使用 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"];
}
I'm trying to build a Graphviz graph containing record vertices using QuickGraph. So far, I have this:
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;
}
When I generate the graph, however, the vertices show a label instead of a record. What am I doing wrong?
EDIT
Here's the dot output.
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"];
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
根单元格中缺少详细信息,特别是对象方法的名称。我猜
dot
输出行...应该是:
(...而且我猜它们不应该全部命名为
EntityMap.Entity
?)我真的无法告诉在程序中引入了边,但似乎边是根据与顶点不同的信息来渲染的。
手动运行
dot
(dot foo.dot -Tpng -o foo.png
) 可能会为您提供更多信息丰富的错误/警告消息。There are details missing in the root cells, specifically the names of the object methods. I guess the
dot
output line...should really be:
(...and I guess they shouldn't all be named
EntityMap.Entity
?)I cannot really tell where in your program the edges are introduced, but it seems like the edges are rendered based on different information than the vertices.
Running
dot
manually (dot foo.dot -Tpng -o foo.png
) might give you more informative error/warning messages.