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#.
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?
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);
}
}
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.
N'a pas essayé par moi-même, mais a lu quelques recommandations pour le graphique#: