![](/img/trans.png)
[英]Why does the read_graphviz() function of the boost graph library changes the index of the nodes
[英]Deletion of nodes with Graphviz as library
我正在使用graphviz作為C ++中的庫。 我用它來布局我的圖,例如計算節點和邊的位置,但是自己做渲染。
我的問題涉及節點的刪除及其對相鄰邊緣的影響。 不幸的是,graphviz主頁上提供的文檔都沒有解決這個問題。 這是在帖子中隱式詢問的( 有關Graphviz API的問題(Graphviz作為庫) ),但也未回答。 我希望在這里找到答案。
我有:Agraph_t * myGraph,其中一個節點為Agnode_t * myNode。 當我使用agdelnode(myGraph,myNode)時,與myNode相鄰的邊緣會發生什么? 他們是從頭上/尾巴上刪除還是卸下了它們?
而agdelnode的返回類型(也包括agdeledge和agclose)是什么意思? 我的猜測是,它表示函數成功(0 =成功滿)和(其他所有值=發生錯誤)。
當我使用agdelnode(myGraph,myNode)時,與myNode相鄰的邊緣會發生什么? 他們是從頭上/尾巴上刪除還是卸下了它們?
與myNode相鄰的所有邊將被刪除,並釋放其內存。
而agdelnode的返回類型(也包括agdeledge和agclose)是什么意思? 我的猜測是,它表示函數成功(0 =成功滿)和(其他所有值=發生錯誤)。
如果成功釋放了節點的內存,則返回的值為SUCCESS,否則返回FAILURE。
這是我對源代碼的解釋(鏈接來自Tim Biegeleisen的回答)。
下面是源代碼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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.