C# graphe orienté la génération de la bibliothèque

J'ai remarqué que Visual Studio peut générer des graphiques en utilisant quelque chose appelé DGML.

je voudrais générer un graphique comme celui-ci dans mon application C#.

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

Il ne doit pas être interactif comme la VS. Je veux juste générer une statique de l'image et de l'enregistrer en tant que général de fichier graphique, comme le PNG.

y a-t-il une bibliothèque. net gratuite pour cela?

23
demandé sur bluevector 2011-11-20 09:11:16

3 réponses

un peu en retard, mais il est en fait relativement facile à mettre en œuvre vous-même:

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);
    }
}
31
répondu Simon Ejsing 2012-09-18 10:56:45

j'ai utilisé NodeXL dans le passé, pour générer des graphiques de flux de travail dans une application web, mais il est approprié pour les applications de bureau et l'interaction ainsi.

la description pourrait vous embrouiller un peu, vous faire penser que c'est juste pour Excel. Pas du tout, vous pouvez utiliser son modèle d'objet directement et graphe tout ce que vous voulez .NET.

3
répondu Pablo Romeo 2012-06-08 21:11:39

N'a pas essayé par moi-même, mais a lu quelques recommandations pour le graphique#:

http://graphsharp.codeplex.com/

1
répondu Doc Brown 2011-11-20 05:42:27