簡體   English   中英

使用GraphSharp圖形布局WPF庫繪制圖形並編輯頂點標簽

[英]Using GraphSharp graph layout WPF library to plot a graph and edit vertex label

我是一名大學生,這是我的算法分析教授傳遞給我們班級的一項家庭作業。 我不使用作業標簽,因為它已被棄用,但基本上是作業。 任何幫助是極大的贊賞。

我們將使用任何以<graphml...>標准讀取xml的語言來<graphml...>程序,並將其繪制到程序屏幕上,使用BFS算法計算該圖具有多少個節點,邊和連接的組件。 。

我已經使用graphsharp的c#圖形布局庫制作了該程序,並且具有將圖形繪制在xml讀取的圖形上的優點,但是只對單擊按鈕時的項目進行計數以使其具有交互性。

我已經完成了這個繪圖+計數部分。 問題是這個graphsharp項目幾乎沒有文檔,我需要顯示BFS通過我的圖形的運行順序。 我做了一些非常簡單的事情,例如在執行BFS的過程中更改節點的標簽名稱,如下所示:

  • “ n0”變為“ n0-1”
  • “ n1”變為“ n1-2”
  • 等等...

我得到的問題是:

Property or indexer 'QuickGraph.IVertexSet<object>.Vertices'
cannot be assigned to -- it is read only

頂點僅“可創建”而不是可編輯嗎?

創建一個具有屬性Name的自定義頂點類。 並且不要創建新的頂點(因為graph.vertices [i] =“ newstr”意味着您將第i個對象更改為全新的對象/字符串),請更改現有頂點的內容(定義的Name屬性)。

如果使用自定義頂點類型,則應定義一個自定義DataTemplate以便能夠按預期呈現頂點。

我想我有一個想法,為什么將此組件的Edge-部分設為只讀。 這些圖形可能與渲染方式有關。 我在下面制作了另一個示例代碼,該示例代碼刪除了Edge並將其添加回圖形中(這在某種程度上可以實現您的目標,但可能也不希望您這樣做(似乎沒有其他方法可以更改圖形中的Edge) ))。

在我看來,您希望在實際繪制圖形之前對樹進行布局(我認為這也是組件的意圖)。 讓我知道您能否完成它。

    string edgeSource = "n3";
    string edgeTarget = "n4";
    string newEdgeSource = "n0";
    string newEdgeTarget = "n4";

    IEnumerator<IEdge<object>> edgeEnumeratoer = g.Edges.GetEnumerator();
    edgeEnumeratoer.MoveNext();
    while (edgeEnumeratoer.Current != null)
    {
        var edge = edgeEnumeratoer.Current;
        string source = (string)(edge.Source);
        string target = (string)(edge.Target);
        if ((source.CompareTo(edgeSource) == 0) && (target.CompareTo(edgeTarget) == 0))
        {
            if (g.RemoveEdge(edge))
            {
                IEdge<object> newEdge = new Edge<object>(newEdgeSource, newEdgeTarget);
                g.AddEdge(newEdge);
                break;
            }
            else
            {
                Debug.WriteLine("Could not remove edge from graph.");
            }
        }
        edgeEnumeratoer.MoveNext();
    }

    graphLayout.Graph = g;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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