2011-11-20 77 views
23

Tôi nhận thấy rằng Visual Studio có thể tạo biểu đồ bằng cách sử dụng một cái gì đó gọi là DGML.Thư viện tạo biểu đồ hướng dẫn C#

Tôi muốn tạo biểu đồ như biểu đồ sau trong ứng dụng C# của tôi.

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

Nó không phải tương tác như VS. Tôi chỉ muốn tạo một hình ảnh tĩnh như vậy và lưu nó dưới dạng tệp đồ họa chung, chẳng hạn như PNG.

Có thư viện .NET miễn phí nào cho điều này không?

Trả lời

3

Tôi đã sử dụng NodeXL trong quá khứ, để tạo ra các đồ thị quy trình làm việc trong một ứng dụng web, nhưng nó phù hợp cho các ứng dụng dành cho máy tính để bàn và tương tác.

Mô tả có thể gây nhầm lẫn cho bạn một chút, khiến bạn nghĩ nó chỉ dành cho Excel. Không phải ở tất cả, bạn có thể sử dụng mô hình đối tượng của nó trực tiếp và đồ thị bất cứ điều gì bạn muốn từ.

+0

+1 NodeXL là rất mạnh mẽ. Thật tuyệt vời khi đại diện cho dữ liệu liên quan theo đồ họa. Cảm ơn bạn đã tham khảo! –

+0

Mô tả đang diễn ra khó hiểu. Điều đó có nghĩa là nó sẽ hoạt động trên một hệ thống không có cài đặt Excel? –

+0

Vâng, đúng vậy, tôi cũng chưa cài đặt Excel. Bây giờ, đây là một vài năm trước. Ngày nay tôi có lẽ sẽ sử dụng D3 cho điều này hoặc một thành phần sử dụng d3, chẳng hạn như Dagre, được đề nghị ở đây: http://stackoverflow.com/a/20342129/1373170 –

29

Một chút muộn, nhưng nó thực sự là tương đối dễ dàng để thực hiện bản thân: Kiểm soát WPF

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); 
    } 
} 
+1

Tôi đang tìm cách đơn giản để tạo sơ đồ trạng thái cơ bản từ luồng công việc của tôi tập tin. Đây là cách đơn giản nhất để đạt được điều đó. – Filip

+2

Đá câu trả lời này! – gerodim

+1

Đồng ý rằng đây là một câu trả lời tuyệt vời! Tôi có thể mở dgml kết quả trong Visual Studio, nhưng không ai biết làm thế nào để hiển thị dgml trên một cửa sổ mẫu? Cảm ơn! –

Các vấn đề liên quan