private void SetGraph() { var graph = new Graph(); graph.AddEdge("a", "b"); graph.AddEdge("e", "b"); graph.AddEdge("d", "b"); graph.AddEdge("b", "c"); graph.AddEdge("a22", "b22"); graph.AddEdge("e22", "b22"); graph.AddEdge("d22", "b22"); graph.AddEdge("b22", "c22"); graph.AddEdge("a0", "b0"); graph.AddEdge("b0", "c0"); graph.AddEdge("a33", "b33"); graph.AddEdge("e33", "b33"); graph.AddEdge("d33", "b33"); graph.AddEdge("b33", "c33"); graph.AddEdge("a11", "b11"); graph.AddEdge("b11", "c11").LabelText = "Test labels!"; graph.CreateGeometryGraph(); foreach (Node node in graph.Nodes) node.GeometryNode.BoundaryCurve = CreateLabelAndBoundary(node); foreach (var edge in graph.Edges) { if (edge.Label != null) { var geomEdge = edge.GeometryEdge; double width; double height; StringMeasure.MeasureWithFont(edge.LabelText, new Font(edge.Label.FontName, (float)edge.Label.FontSize), out width, out height); edge.Label.GeometryLabel=geomEdge.Label = new Label(width, height, geomEdge); } } var geomGraph=graph.GeometryGraph; var geomGraphComponents = GraphConnectedComponents.CreateComponents(geomGraph.Nodes, geomGraph.Edges); var settings = new SugiyamaLayoutSettings(); foreach (var subgraph in geomGraphComponents) { var layout=new LayeredLayout(subgraph, settings); subgraph.Margins = settings.NodeSeparation/2; layout.Run(); } Microsoft.Msagl.Layout.MDS.MdsGraphLayout.PackGraphs(geomGraphComponents, settings); geomGraph.UpdateBoundingBox(); gViewer1.NeedToCalculateLayout = false; gViewer1.Graph = graph; }
static Graph CtreateDrawingGraph(out FastIncrementalLayoutSettings settings) { settings = new FastIncrementalLayoutSettings { RouteEdges = true, NodeSeparation = 30}; var drawingGraph = new Graph(); const string id0 = "0"; const string id1 = "1"; AddEdge(drawingGraph, id0, id1); AddEdge(drawingGraph, "0", "2"); AddEdge(drawingGraph, "1", "3"); AddEdge(drawingGraph, "2", "4"); AddEdge(drawingGraph, "2", "5"); AddEdge(drawingGraph, "2", "6"); AddEdge(drawingGraph, "5", "7"); AddEdge(drawingGraph, "5", "6"); AddEdge(drawingGraph, "7", "8"); AddEdge(drawingGraph, "8", "6"); drawingGraph.CreateGeometryGraph(); foreach (Microsoft.Msagl.Drawing.Node node in drawingGraph.Nodes) { double w, h; var label = node.Label; var font = new Font(label.FontName, (float)label.FontSize); StringMeasure.MeasureWithFont(label.Text, font, out w, out h); node.Label.Width = w; node.Label.Height = h; node.Attr.Shape = Shape.DrawFromGeometry; node.GeometryNode.BoundaryCurve=CurveFactory.CreateRectangleWithRoundedCorners(1.2*w,1.2*h,3,3,new Point()); } return drawingGraph; }
void ShowGraph(bool showMes) { this.groupBoxResult.Controls.Clear(); Microsoft.Msagl.GraphViewerGdi.GViewer viewer = new Microsoft.Msagl.GraphViewerGdi.GViewer(); Microsoft.Msagl.Drawing.Graph graph = new Microsoft.Msagl.Drawing.Graph("graph"); graph.CreateGeometryGraph(); int i = 1; foreach (var item in lstPoint) { Node node = new Node(i.ToString()); node.Attr.Shape = Shape.Circle; graph.AddNode(node); i++; } graph.FindNode((this.start + 1).ToString()).Attr.FillColor = Color.Blue; graph.FindNode((this.end + 1).ToString()).Attr.FillColor = Color.Red; viewer.Pan(5, 2); for (int j = 0; j < this.soDinh; j++) { for (int k = 0; k < this.soDinh; k++) { if (this.distance[j, k] != this.VOCUNG && this.distance[j, k] != 0) { String tmp = "," + (j + 1).ToString() + "," + (k + 1).ToString() + ","; double dis = Math.Round(this.distance[j, k], 2); if (this.path.Contains(tmp)) { if (this.checkBox.Checked) { graph.AddEdge((j + 1).ToString(), dis.ToString(), (k + 1).ToString()).Attr.Color = Color.Green; } else { graph.AddEdge((j + 1).ToString(), (k + 1).ToString()).Attr.Color = Color.Green; } // Microsoft.Msagl.Core.Layout.Node node = new Microsoft.Msagl.Core.Layout.Node(1, 2); } else { if (this.checkBox.Checked) { graph.AddEdge((j + 1).ToString(), dis.ToString(), (k + 1).ToString()); } else { graph.AddEdge((j + 1).ToString(), (k + 1).ToString()); } } } } } /*graph.AddEdge("A", "C").Attr.Color = Microsoft.Msagl.Drawing.Color.Green; * Edge edge = new Edge("14","sonnx","15"); * * graph.AddEdge("14", "sonnx", "15"); * graph.FindNode("A").Attr.FillColor = Microsoft.Msagl.Drawing.Color.Magenta; * graph.FindNode("B").Attr.FillColor = Microsoft.Msagl.Drawing.Color.MistyRose; * Microsoft.Msagl.Drawing.Node c = graph.FindNode("C"); * c.Attr.FillColor = Microsoft.Msagl.Drawing.Color.PaleGreen; * c.Attr.Shape = Microsoft.Msagl.Drawing.Shape.Circle;*/ /* * * Microsoft.Msagl.Core.Geometry.Point p1 = new Microsoft.Msagl.Core.Geometry.Point(-497.12352212078628, 1689.84931190121); * Microsoft.Msagl.Core.Geometry.Point p2 = new Microsoft.Msagl.Core.Geometry.Point(198.64235142705752, 2139.4677380013277); * Microsoft.Msagl.Core.Geometry.Point bl = new Microsoft.Msagl.Core.Geometry.Point(-5191.0147700187063, -4395.7850131819132); * double gridSize = 553.23948409846571; * * GridTraversal grid = new GridTraversal(new Rectangle(bl, bl + new Microsoft.Msagl.Core.Geometry.Point(gridSize, gridSize)), 20); * var tiles = grid.GetTilesIntersectedByLineSeg(p1, p2); */ //bind the graph to the viewer viewer.Graph = graph; // viewer.Click += new EventHandler(Group_Click); // viewer.MouseClick += new MouseEventHandler(Group_Click); this.groupBoxResult.SuspendLayout(); viewer.Dock = System.Windows.Forms.DockStyle.Fill; this.groupBoxResult.Controls.Add(viewer); this.groupBoxResult.ResumeLayout(); if (showMes) { if (this.daxet[this.end]) { MessageBox.Show("Độ dài đường đi ngắn nhất " + (Math.Round(d[this.end], 2)).ToString(), "Thành công"); this.txtLoTrinh.Text = this.path; this.txtDoDai.Text = (Math.Round(d[this.end], 2)).ToString(); } else { MessageBox.Show("Không tìm được đường đi ngắn nhất", "Có lỗi xảy ra"); this.txtLoTrinh.Text = ""; this.txtDoDai.Text = ""; } } }
static Graph CreateGraphFromParsedStuff(Dictionary<string, Tuple<int, int, int, int>> labelsToGeom, List<Tuple<string, string>> edges) { var graph = new Graph(); foreach (var label in labelsToGeom.Keys) graph.AddNode(label); foreach (var tuple in edges) { var e=graph.AddEdge(tuple.Item1, tuple.Item2); e.Attr.ArrowheadAtTarget = ArrowStyle.None; } graph.CreateGeometryGraph(); foreach (var node in graph.Nodes) { var tuple = labelsToGeom[node.Id]; int centerX = tuple.Item1; int centerY = tuple.Item2; int w=tuple.Item3; int h = tuple.Item4; node.GeometryNode.BoundaryCurve = new RoundedRect( new Rectangle(centerX-(double)w/2, centerY-(double)h/2, new Microsoft.Msagl.Core.Geometry.Point(tuple.Item3, tuple.Item4)), 3, 3); } var router = new SplineRouter(graph.GeometryGraph, 1, 1, Math.PI / 6, null); router.Run(); graph.GeometryGraph.UpdateBoundingBox(); //LayoutAlgorithmSettings.ShowGraph(graph.GeometryGraph); return graph; }