删除以 Graphviz 为库的节点
Deletion of nodes with Graphviz as library
我正在使用 graphviz 作为 C++ 中的库。我用它来布局我的图表,例如计算节点和边缘的位置,但自己进行渲染。
我的问题涉及节点的删除及其对相邻边的影响。不幸的是,graphviz 主页上提供的 none 文档解决了这个问题。在这个 post (Questions about Graphviz API (Graphviz as a library)) 中被隐含地询问但也没有回答。希望能在这里找到答案。
我有:
Agraph_t* myGraph 和它的节点之一作为 Agnode_t* myNode。
当我使用 agdelnode(myGraph, myNode) 时,与 myNode 相邻的边会发生什么变化?他们是否已从 head/tail 中删除或分离?
return 类型的 agdelnode(还有 agdeledge 和 agclose)是什么意思?我的猜测是它表明函数成功(0 = 成功)和(所有其他值 = 发生错误)。
这是我从 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;
}
When I use agdelnode(myGraph, myNode), what happens to the edges adjacent to myNode? Are they deleted or detatched from their head/tail?
所有与 myNode 相邻的边都将被删除并释放它们的内存。
And what does the return type of agdelnode (also agdeledge and agclose) mean? My guess is that it indicates the function's success with (0 = succesfull) and (every other value = error occurred).
如果节点的内存已成功释放,则返回值为 SUCCESS;否则,返回值为 FAILURE。
这是我对 source code 的解释(link 摘自 Tim Biegeleisen 的回答)。
我正在使用 graphviz 作为 C++ 中的库。我用它来布局我的图表,例如计算节点和边缘的位置,但自己进行渲染。
我的问题涉及节点的删除及其对相邻边的影响。不幸的是,graphviz 主页上提供的 none 文档解决了这个问题。在这个 post (Questions about Graphviz API (Graphviz as a library)) 中被隐含地询问但也没有回答。希望能在这里找到答案。
我有: Agraph_t* myGraph 和它的节点之一作为 Agnode_t* myNode。 当我使用 agdelnode(myGraph, myNode) 时,与 myNode 相邻的边会发生什么变化?他们是否已从 head/tail 中删除或分离?
return 类型的 agdelnode(还有 agdeledge 和 agclose)是什么意思?我的猜测是它表明函数成功(0 = 成功)和(所有其他值 = 发生错误)。
这是我从 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;
}
When I use agdelnode(myGraph, myNode), what happens to the edges adjacent to myNode? Are they deleted or detatched from their head/tail?
所有与 myNode 相邻的边都将被删除并释放它们的内存。
And what does the return type of agdelnode (also agdeledge and agclose) mean? My guess is that it indicates the function's success with (0 = succesfull) and (every other value = error occurred).
如果节点的内存已成功释放,则返回值为 SUCCESS;否则,返回值为 FAILURE。
这是我对 source code 的解释(link 摘自 Tim Biegeleisen 的回答)。