Библиотека генерации ориентированного графа C # - PullRequest
23 голосов
/ 20 ноября 2011

Я заметил, что Visual Studio может генерировать графики, используя что-то под названием DGML.

Я хотел бы создать график, подобный следующему, в моем приложении C #.

http://bishoponvsto.files.wordpress.com/2010/02/dgml-graph1.jpg

Он не должен быть интерактивным, как VS. Я просто хочу сгенерировать такое статическое изображение и сохранить его как обычный графический файл, такой как PNG.

Есть ли для этого бесплатная библиотека .NET?

Ответы [ 3 ]

32 голосов
/ 18 сентября 2012

Немного поздно, но на самом деле реализовать себя относительно просто:

public class DGMLWriter
{
    public struct Graph
    {
        public Node[] Nodes;
        public Link[] Links;
    }

    public struct Node
    {
        [XmlAttribute]
        public string Id;
        [XmlAttribute]
        public string Label;

        public Node(string id, string label)
        {
            this.Id = id;
            this.Label = label;
        }
    }

    public struct Link
    {
        [XmlAttribute]
        public string Source;
        [XmlAttribute]
        public string Target;
        [XmlAttribute]
        public string Label;

        public Link(string source, string target, string label)
        {
            this.Source = source;
            this.Target = target;
            this.Label = label;
        }
    }

    public List<Node> Nodes { get; protected set; }
    public List<Link> Links { get; protected set; }

    public DGMLWriter()
    {
        Nodes = new List<Node>();
        Links = new List<Link>();
    }

    public void AddNode(Node n)
    {
        this.Nodes.Add(n);
    }

    public void AddLink(Link l)
    {
        this.Links.Add(l);
    }

    public void Serialize(string xmlpath)
    {
        Graph g = new Graph();
        g.Nodes = this.Nodes.ToArray();
        g.Links = this.Links.ToArray();

        XmlRootAttribute root = new XmlRootAttribute("DirectedGraph");
        root.Namespace = "http://schemas.microsoft.com/vs/2009/dgml";
        XmlSerializer serializer = new XmlSerializer(typeof(Graph), root);
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Indent = true;
        XmlWriter xmlWriter = XmlWriter.Create(xmlpath, settings);
        serializer.Serialize(xmlWriter, g);
    }
}
3 голосов
/ 09 июня 2012

В прошлом я использовал NodeXL для создания графиков рабочих процессов в веб-приложении, но он также подходит для настольных приложений и взаимодействия.

Описание может сбить вас с толкунемного, заставляя вас думать, что это только для Excel.Вовсе нет, вы можете напрямую использовать его объектную модель и строить графики в любом виде из .NET.

1 голос
/ 20 ноября 2011

Сам не пробовал, но прочитал некоторые рекомендации для Графика №:

http://graphsharp.codeplex.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...