/// <summary> /// Desenha o grafo atual. /// </summary> private void DrawGraph(EDA.Graph graphToDraw, EDA.Node[] highlightedNodes) { List <EDA.Edge> edges = new List <EDA.Edge>(); Glee.Graph drawingGraph = new Glee.Graph("Grafo - EDA2"); // Adiciona nós ao grafo.. foreach (EDA.Node node in graphToDraw.Nodes) { Glee.Node drawingNode = drawingGraph.AddNode(node.Name); drawingNode.Attr.Shape = Glee.Shape.Circle; if (highlightedNodes != null && Array.IndexOf(highlightedNodes, node) >= 0) { drawingNode.Attr.Color = Glee.Color.Red; } // Consolida os arcos.. edges.AddRange(node.Edges); } foreach (EDA.Edge edge in edges) { Glee.Edge drawingEdge = drawingGraph.AddEdge(edge.From.Name, edge.To.Name); drawingEdge.Attr.Label = String.Format("{0:F4}", edge.Cost); } // Gera controle de desenho.. GleeUI.GViewer viewer = new GleeUI.GViewer(); viewer.NavigationVisible = false; viewer.OutsideAreaBrush = Brushes.White; viewer.RemoveToolbar(); viewer.Graph = drawingGraph; viewer.Dock = System.Windows.Forms.DockStyle.Fill; pnlGraph.Controls.Clear(); pnlGraph.Controls.Add(viewer); }
/// <summary> /// Atribui aos controles o conteúdo do grafo. /// </summary> private void SetGraphControls(EDA.Graph graphToDraw, bool drawGraph = true) { List <EDA.Edge> edges = new List <EDA.Edge>(); EDA.Node[] nodes = graphToDraw.Nodes; // Limpa controles.. txtNodeName.Clear(); cmbNodeFrom.Items.Clear(); cmbNodeTo.Items.Clear(); cmbNodeNeighbourhood.Items.Clear(); lstArcs.Items.Clear(); // Carrega nós e agrupa arcos.. foreach (EDA.Node node in nodes) { edges.AddRange(node.Edges); // Adiciona nós ao combo.. cmbNodeFrom.Items.Add(node); cmbNodeTo.Items.Add(node); cmbNodeNeighbourhood.Items.Add(node); } // Adiciona os arcos ao listbox.. foreach (EDA.Edge edge in edges) { lstArcs.Items.Add(edge); } if (drawGraph) { DrawGraph(graphToDraw, null); } }
private void btnKruskal_Click(object sender, EventArgs e) { EDA.Graph kruskalGraph = this.graph.Kruskal(); if (kruskalGraph != null) { SetGraphControls(kruskalGraph); } }
private void btnPrim_Click(object sender, EventArgs e) { EDA.Graph primGraph = this.graph.Prim(); if (primGraph != null) { SetGraphControls(primGraph); } }
/// <summary> /// Cria nova instância do form principal. /// </summary> public Principal() { InitializeComponent(); this.graph = new EDA.Graph(); }