Microsoft Automatic Graph Layout
Microsoft Automatic Graph Layout

MSAGL is a .NET tool for graph layout and viewing. It was developed in Microsoft Research by Lev Nachmanson. MSAGL is built on the principle of the Sugiyama scheme; it produces so called layered, or hierarchical layouts. This kind of a layout naturally applies to graphs with some flow of information. For example, the graph could represent a control flow graph of a program, a state machine, or a C++ class hierarchy.

The Distribution Content and Important Features

The package contains the following:

  • Layout engine (Microsoft.MSAGL.dll) - The core layout functionality. This component can be used directly in cases when visualization is handled by a tool other than MSAGL.
  • Drawing module (Microsoft.MSAGL.Drawing.dll) - The Definitions of different drawing attributes like colors, line styles, etc. It also contains definitions of a node class, an edge class, and a graph class. By using these classes a user can create a graph object and use it later for layout, and rendering.
  • Viewer control (Microsoft.MSAGL.GraphViewerGDIGraph.dll) - The viewer control, and  some other rendering functionality.

Some important features of the viewer are:

  • Pan and Zoom of the graph.

  • Forward and Backward navigation.

  • Ability to configure tooltips and highlighting of graph entities.

  • Ability to search for and focus on entities of the graph.

Code Samples

The code snippet demonstrates the basic usage of the viewer. It uses the C# language.

The Viewer sample

Drawing of the graph from the sampleDrawing of the graph from the sample

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").EdgeAttr.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 
        viewer.Dock = System.Windows.Forms.DockStyle.Fill; 
    //show the form 

More code samples…

Layouts Created by MSAGL


The Microsoft Automatic Graph Layout (MSAGL) tool can be purchased at the Microsoft online store or through MSDN subscription.