[英]Using GraphSharp graph layout WPF library to plot a graph and edit vertex label
我是一名大學生,這是我的算法分析教授傳遞給我們班級的一項家庭作業。 我不使用作業標簽,因為它已被棄用,但基本上是作業。 任何幫助是極大的贊賞。
我們將使用任何以<graphml...>
標准讀取xml的語言來<graphml...>
程序,並將其繪制到程序屏幕上,使用BFS算法計算該圖具有多少個節點,邊和連接的組件。 。
我已經使用graphsharp的c#圖形布局庫制作了該程序,並且具有將圖形繪制在xml讀取的圖形上的優點,但是只對單擊按鈕時的項目進行計數以使其具有交互性。
我已經完成了這個繪圖+計數部分。 問題是這個graphsharp項目幾乎沒有文檔,我需要顯示BFS通過我的圖形的運行順序。 我做了一些非常簡單的事情,例如在執行BFS的過程中更改節點的標簽名稱,如下所示:
我得到的問題是:
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.