簡體   English   中英

使用Graphviz作為庫刪除節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM