我使用graphviz作为C ++中的库。我用它来布局我的图表,例如计算节点和边的位置,但自己进行渲染。
我的问题涉及删除节点及其对相邻边缘的影响。遗憾的是,graphviz主页上提供的所有文档都没有解决这个问题。在这篇文章(Questions about Graphviz API (Graphviz as a library))中暗示了这一点,但也没有回答。我希望在这里找到答案。
我有: Agraph_t * myGraph和其中一个节点为Agnode_t * myNode。 当我使用agdelnode(myGraph,myNode)时,myNode附近的边缘会发生什么?它们是从头/尾删除还是脱离了?
agdelnode(也是agdeledge和agclose)的返回类型是什么意思?我的猜测是它表示函数的成功(0 =成功)和(每隔一个值=发生错误)。
答案 0 :(得分:1)
当我使用agdelnode(myGraph,myNode)时,myNode附近的边缘会发生什么?它们是从头/尾删除还是脱离了?
将删除与myNode相邻的所有边缘并释放其内存。
agdelnode(也是agdeledge和agclose)的返回类型是什么意思?我的猜测是它表示函数的成功(0 =成功)和(每隔一个值=发生错误)。
如果成功释放节点的内存,则返回的值为SUCCESS,否则返回FAILURE。
这是我对source code的解释(链接取自Tim Biegeleisen的回答)。
答案 1 :(得分:-2)
以下是我从this网站获取的agdelnode()
的源代码。你可以通读它并回答你的问题。
int agdelnode(Agraph_t * g, Agnode_t * n) {
Agedge_t *e, *f;
if (!agfindnode_by_id(g, AGID(n)))
return FAILURE; /* bad arg */
if (g == agroot(g)) {
for (e = agfstedge(g, n); e; e = f) {
f = agnxtedge(g, e, n);
agdeledge(g, e);
}
if (g->desc.has_attrs)
agnodeattr_delete(n);
agmethod_delete(g, n);
agrecclose((Agobj_t *) n);
agfreeid(g, AGNODE, AGID(n));
}
if (agapply (g, (Agobj_t *) n, (agobjfn_t) agdelnodeimage, NILnode, FALSE) == SUCCESS) {
if (g == agroot(g))
agfree(g, n);
return SUCCESS;
} else
return FAILURE;
}