Как добавить порты к узлам в Agraph_t? - PullRequest
2 голосов
/ 09 августа 2011

Я пытаюсь добавить порты к узлам, но, видимо, я что-то упустил.

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 Ответ

1 голос
/ 10 августа 2011

Замените это -

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 / graph / parser.y и lib / graph / libgraph.h.)

...