2011-08-09 8 views
2

私はノードにポートを追加しようとしていますが、明らかに何か不足しています。Agraph_tのノードにポートを追加する方法は?

aginit(); 
Agraph_t *g = agopen("g", AGFLAG_DIRECTED); 

Agsym_t *symRankdir = agraphattr(g, "rankdir", "LR"); 
Agsym_t *symShape = agnodeattr(g, "shape", "Mrecord"); 
Agsym_t *symLabel = agnodeattr(g, "label", ""); 

Agnode_t *n1 = agnode(g, "n1"); 
n1->attr[1] = "n1|<p1>p1|<p2>p2"; 
Agnode_t *n2 = agnode(g, "n2"); 
n2->attr[1] = "n2|<p1>p1|<p2>p2"; 
Agedge_t *e = agedge(g, n1, n2); 
e->u.tail_port.defined = true; 
e->u.tail_port.name = "p1"; 
e->u.head_port.defined = true; 
e->u.head_port.name = "p2"; 

FILE *fp = fopen(argv[1], "w"); 
agwrite(g, fp); 

出力:

digraph g { 
    graph [rankdir=LR]; 
    node [shape=Mrecord]; 
    n1 [label="n1|<p1>p1|<p2>p2"]; 
    n2 [label="n2|<p1>p1|<p2>p2"]; 
    n1 -> n2; 
} 

出力のエッジがn1:p1 -> n2:p2であるべきです。それを実現するためにコードに何を設定する必要がありますか?

答えて

1

これを置換する -

e->u.tail_port.defined = true; 
e->u.tail_port.name = "p1"; 
e->u.head_port.defined = true; 
e->u.head_port.name = "p2"; 

- これに -

#define TAILX    1 
#define HEADX    2 
agxset(e, TAILX, "p1"); 
agxset(e, HEADX, "p2"); 

を(私はGraphvizのソースコードを見てから、それを考え出した - LIB /グラフ/ parser.yとlib/graph/libgraph.h)

関連する問題