0

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"];
}
4

1 に答える 1

0

ルート セル、特にオブジェクト メソッドの名前に詳細がありません。私はdot出力行を推測します

0 [label="EntityMap.Entity"];

...実際には次のようになります。

0 [label="<EnableMotion> EntityMap.Entity"];

(...そして、それらすべてに名前を付けるべきではないと思いEntityMap.Entityますか?)

プログラムのどこにエッジが導入されているかはわかりませんが、頂点とは異なる情報に基づいてエッジがレンダリングされているようです。

dot手動で実行すると ( dot foo.dot -Tpng -o foo.png)、より有益なエラー/警告メッセージが表示される場合があります。

于 2009-12-25T08:23:16.207 に答える