### Basic MSAGL Viewer Sample in C# Source: https://github.com/microsoft/automatic-graph-layout/blob/master/README.md Demonstrates how to create a graph, add nodes and edges with custom attributes, and display it using the MSAGL GDI viewer within a Windows Forms application. Ensure the necessary MSAGL NuGet packages are installed. ```csharp using System; using System.Collections.Generic; using System.Windows.Forms; class ViewerSample { public static void Main() { //create a form System.Windows.Forms.Form form = new System.Windows.Forms.Form(); //create a viewer object Microsoft.Msagl.GraphViewerGdi.GViewer viewer = new Microsoft.Msagl.GraphViewerGdi.GViewer(); //create a graph object Microsoft.Msagl.Drawing.Graph graph = new Microsoft.Msagl.Drawing.Graph("graph"); //create the graph content graph.AddEdge("A", "B"); graph.AddEdge("B", "C"); graph.AddEdge("A", "C").Attr.Color = Microsoft.Msagl.Drawing.Color.Green; 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.Diamond; //bind the graph to the viewer viewer.Graph = graph; //associate the viewer with the form form.SuspendLayout(); viewer.Dock = System.Windows.Forms.DockStyle.Fill; form.Controls.Add(viewer); form.ResumeLayout(); //show the form form.ShowDialog(); } } ``` -------------------------------- ### Create and Render SVG Graph Source: https://github.com/microsoft/automatic-graph-layout/blob/master/GraphLayout/Samples/SvgLayerSample/README.md Sets up a DrawingGraph, adds various node types (ComponentNode, LabeledNode) and edges, organizes nodes into subgraphs, and finally renders the graph as an SVG string. The output SVG is automatically copied to the clipboard for easy use in external tools like JSBin. ```csharp var drawingGraph = new Graph(); drawingGraph.AddNode(new ComponentNode("Foo")); drawingGraph.AddNode(new ComponentNode("Bar", "Bar Component", "[Azure Functions]", "This is the Bar component, really really important!")); drawingGraph.AddNode(new ComponentNode("Component01", "First Component", null, "Bizar")); drawingGraph.AddNode(new ComponentNode("Component02")); drawingGraph.AddNode(new LabeledNode("Component05", new System.Collections.Generic.List { "Component Nr. 5" })); drawingGraph.AddNode(new ComponentNode("Component06")); drawingGraph.AddNode(new ComponentNode("Component08")); drawingGraph.AddNode(new ComponentNode("Component03")); drawingGraph.AddNode(new ComponentNode("Component04")); drawingGraph.AddNode(new ComponentNode("Component07")); var subGraph = new Subgraph("Section01"); subGraph.AddNode(drawingGraph.FindNode("Component02")); subGraph.AddNode(drawingGraph.FindNode("Component07")); subGraph.AddNode(drawingGraph.FindNode("Bar")); subGraph.AddNode(drawingGraph.FindNode("Component01")); drawingGraph.RootSubgraph.AddSubgraph(subGraph); var labels = new List { new Svg.Label("Component Nr. 9") { Font = new System.Drawing.Font("Consolas", 20f, System.Drawing.FontStyle.Bold), Color = Color.Azure }, new Svg.Label("This is the description. It can become quite large and if all goes to plan; it will wrap itself.") { Color = Color.MediumOrchid } }; var labeledNode = new LabeledNode("Component09", labels); labeledNode.SvgElement.BackgroundColor = Color.Maroon; drawingGraph.AddNode(labeledNode); drawingGraph.AddEdge("Foo", "Something", "Bar"); drawingGraph.AddEdge("Bar", "Bar_Component01", "Component01"); drawingGraph.AddEdge("Bar", "Bar_Component02", "Component02"); drawingGraph.AddEdge("Component01", "Bar_Component01", "Component03"); drawingGraph.AddEdge("Component01", "Bar_Component01", "Component02"); drawingGraph.AddEdge("Component02", "Bar_Component01", "Component04"); drawingGraph.AddEdge("Component02", "Bar_Component01", "Component05"); drawingGraph.AddEdge("Component02", "Bar_Component01", "Component06"); drawingGraph.AddEdge("Component02", "Bar_Component01", "Component07"); drawingGraph.AddEdge("Component02", "Bar_Component01", "Component08"); drawingGraph.AddEdge("Component03", "Bar_Component01", "Component09"); var doc = new Diagram(drawingGraph); doc.Run(); System.Console.WriteLine(doc.ToString()); TextCopy.ClipboardService.SetText(doc.ToString()); ``` -------------------------------- ### DOT Language Routing Specifications Source: https://github.com/microsoft/automatic-graph-layout/blob/master/GraphLayout/Test/MSAGLTests/Resources/Rectilinear/Data/dirs.dot_SparseVg.txt Defines edges and their attributes in a DOT language format. Used for specifying graph connectivity and edge properties. ```dot 8 -> 19 aS False aT True aL 10 aW 0 lW 1 8 -> 50 aS False aT True aL 10 aW 0 lW 1 8 -> 71 aS False aT True aL 10 aW 0 lW 1 8 -> 73 aS False aT True aL 10 aW 0 lW 1 74 -> 8 aS False aT True aL 10 aW 0 lW 1 24 -> 57 aS False aT True aL 10 aW 0 lW 1 74 -> 24 aS False aT True aL 10 aW 0 lW 1 74 -> 18 aS False aT True aL 10 aW 0 lW 1 8 -> 18 aS False aT True aL 10 aW 0 lW 1 8 -> 52 aS False aT True aL 10 aW 0 lW 1 18 -> 2 aS False aT True aL 10 aW 0 lW 1 8 -> 24 aS False aT True aL 10 aW 0 lW 1 8 -> 14 aS False aT True aL 10 aW 0 lW 1 52 -> 18 aS False aT True aL 10 aW 0 lW 1 52 -> 65 aS False aT True aL 10 aW 0 lW 1 8 -> 21 aS False aT True aL 10 aW 0 lW 1 52 -> 24 aS False aT True aL 10 aW 0 lW 1 65 -> 43 aS False aT True aL 10 aW 0 lW 1 65 -> 13 aS False aT True aL 10 aW 0 lW 1 52 -> 16 aS False aT True aL 10 aW 0 lW 1 65 -> 26 aS False aT True aL 10 aW 0 lW 1 8 -> 9 aS False aT True aL 10 aW 0 lW 1 8 -> 61 aS False aT True aL 10 aW 0 lW 1 8 -> 25 aS False aT True aL 10 aW 0 lW 1 8 -> 55 aS False aT True aL 10 aW 0 lW 1 8 -> 51 aS False aT True aL 10 aW 0 lW 1 8 -> 30 aS False aT True aL 10 aW 0 lW 1 8 -> 23 aS False aT True aL 10 aW 0 lW 1 8 -> 68 aS False aT True aL 10 aW 0 lW 1 8 -> 53 aS False aT True aL 10 aW 0 lW 1 54 -> 66 aS False aT True aL 10 aW 0 lW 1 54 -> 63 aS False aT True aL 10 aW 0 lW 1 54 -> 58 aS False aT True aL 10 aW 0 lW 1 54 -> 13 aS False aT True aL 10 aW 0 lW 1 58 -> 26 aS False aT True aL 10 aW 0 lW 1 58 -> 43 aS False aT True aL 10 aW 0 lW 1 6 -> 26 aS False aT True aL 10 aW 0 lW 1 6 -> 43 aS False aT True aL 10 aW 0 lW 1 54 -> 1 aS False aT True aL 10 aW 0 lW 1 22 -> 54 aS False aT True aL 10 aW 0 lW 1 54 -> 26 aS False aT True aL 10 aW 0 lW 1 22 -> 24 aS False aT True aL 10 aW 0 lW 1 22 -> 18 aS False aT True aL 10 aW 0 lW 1 54 -> 65 aS False aT True aL 10 aW 0 lW 1 54 -> 5 aS False aT True aL 10 aW 0 lW 1 54 -> 43 aS False aT True aL 10 aW 0 lW 1 54 -> 6 aS False aT True aL 10 aW 0 lW 1 58 -> 6 aS False aT True aL 10 aW 0 lW 1 63 -> 65 aS False aT True aL 10 aW 0 lW 1 63 -> 13 aS False aT True aL 10 aW 0 lW 1 63 -> 26 aS False aT True aL 10 aW 0 lW 1 63 -> 43 aS False aT True aL 10 aW 0 lW 1 50 -> 6 aS False aT True aL 10 aW 0 lW 1 71 -> 24 aS False aT True aL 10 aW 0 lW 1 50 -> 24 aS False aT True aL 10 aW 0 lW 1 50 -> 18 aS False aT True aL 10 aW 0 lW 1 66 -> 13 aS False aT True aL 10 aW 0 lW 1 58 -> 13 aS False aT True aL 10 aW 0 lW 1 58 -> 66 aS False aT True aL 10 aW 0 lW 1 58 -> 65 aS False aT True aL 10 aW 0 lW 1 58 -> 5 aS False aT True aL 10 aW 0 lW 1 66 -> 6 aS False aT True aL 10 aW 0 lW 1 66 -> 65 aS False aT True aL 10 aW 0 lW 1 66 -> 26 aS False aT True aL 10 aW 0 lW 1 66 -> 43 aS False aT True aL 10 aW 0 lW 1 40 -> 20 aS False aT True aL 10 aW 0 lW 1 32 -> 24 aS False aT True aL 10 aW 0 lW 1 69 -> 13 aS False aT True aL 10 aW 0 lW 1 69 -> 62 aS False aT True aL 10 aW 0 lW 1 32 -> 44 aS False aT True aL 10 aW 0 lW 1 72 -> 26 aS False aT True aL 10 aW 0 lW 1 32 -> 18 aS False aT True aL 10 aW 0 lW 1 32 -> 72 aS False aT True aL 10 aW 0 lW 1 69 -> 5 aS False aT True aL 10 aW 0 lW 1 62 -> 65 aS False aT True aL 10 aW 0 lW 1 62 -> 13 aS False aT True aL 10 aW 0 lW 1 62 -> 26 aS False aT True aL 10 aW 0 lW 1 62 -> 43 aS False aT True aL 10 aW 0 lW 1 69 -> 43 aS False aT True aL 10 aW 0 lW 1 69 -> 65 aS False aT True aL 10 aW 0 lW 1 69 -> 26 aS False aT True aL 10 aW 0 lW 1 69 -> 40 aS False aT True aL 10 aW 0 lW 1 72 -> 43 aS False aT True aL 10 aW 0 lW 1 15 -> 26 aS False aT True aL 10 aW 0 lW 1 15 -> 43 aS False aT True aL 10 aW 0 lW 1 1 -> 65 aS False aT True aL 10 aW 0 lW 1 1 -> 13 aS False aT True aL 10 aW 0 lW 1 15 -> 13 aS False aT True aL 10 aW 0 lW 1 15 -> 1 aS False aT True aL 10 aW 0 lW 1 15 -> 65 aS False aT True aL 10 aW 0 lW 1 15 -> 5 aS False aT True aL 10 aW 0 lW 1 1 -> 43 aS False aT True aL 10 aW 0 lW 1 44 -> 72 aS False aT True aL 10 aW 0 lW 1 46 -> 24 aS False aT True aL 10 aW 0 lW 1 44 -> 26 aS False aT True aL 10 aW 0 lW 1 44 -> 43 aS False aT True aL 10 aW 0 lW 1 46 -> 15 aS False aT True aL 10 aW 0 lW 1 1 -> 26 aS False aT True aL 10 aW 0 lW 1 46 -> 18 aS False aT True aL 10 aW 0 lW 1 46 -> 1 aS False aT True aL 10 aW 0 lW 1 ``` -------------------------------- ### Copy SVG to Clipboard Source: https://github.com/microsoft/automatic-graph-layout/blob/master/GraphLayout/Samples/SvgLayerSample/README.md This line specifically copies the generated SVG string to the system clipboard, allowing for easy pasting into other applications or web-based tools for viewing and further manipulation. ```csharp TextCopy.ClipboardService.SetText(doc.ToString()); ``` -------------------------------- ### Path Curve Definition Source: https://github.com/microsoft/automatic-graph-layout/blob/master/GraphLayout/Test/MSAGLTests/Resources/Rectilinear/Data/dirs.dot_SparseVg.txt Defines a path segment with a series of connected curve points. Used for visualizing complex paths in a graph. ```text Source 0 Target 33 Begin Curve [[3296.44532012939, 612.273433] -> [3287.5, 612.273433]] [[3287.5, 612.273433] -> [3286.5, 611.273433]] [[3286.5, 611.273433] -> [3286.5, 582.2187461853]] End Curve ``` ```text Source 1 Target 13 Begin Curve [[1885.403533, 902.87498474121] -> [1885.403533, 839.04873]] [[1885.403533, 839.04873] -> [1886.403533, 838.04873]] [[1886.403533, 838.04873] -> [1893.403533, 838.04873]] [[1893.403533, 838.04873] -> [1894.403533, 837.04873]] [[1894.403533, 837.04873] -> [1894.403533, 832.76561164856]] End Curve ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.