2010-05-17 7 views
10

Ich muss eine Grafik von this kind visualisieren. Ich weiß nicht, wie ich es nennen soll (übrigens, wenn du es weißt - ich werde es schätzen, wenn du es mir erzählst). Es wäre ideal, wenn Diagrammelemente anklickbar wären (so dass, wenn der Benutzer auf einen Block klickt, ich ein Ereignis mit der angegebenen Element-ID behandeln kann), aber ich kann auch ohne jegliche Interaktivität überleben. Ich möchte vielleicht in der Lage sein, sich auf einen bestimmten Knoten zu konzentrieren und alle anderen aus seiner Perspektive zu betrachten. Gibt es irgendwelche Komponenten, die für diese Aufgabe gut sind? Wenn nein, worauf sollte ich achten, um mir zu helfen, einen Algorithmus zum Zeichnen eines solchen Graphen mit einem visuell komfortablen Layout zu entwickeln?Wie visualisiere ich eine komplexe Grafik in .Net?

Die praktische Art dieses Graphen ist ziemlich häufig: jeder Block repräsentiert eine Ableitung von 2 Operanden. Orange Kreise sind Verweise auf 2 Operanden, grüne Kreise sind Verbindungspunkte zu Verbrauchern. Es kann wichtig sein, eine Operandenposition (links oder rechts) zu unterscheiden, zum Beispiel wenn eine Ableitung eine mathematische Operation der Differenz oder Division darstellt (in diesem speziellen Fall kann ein Block dreieckig sein, aber in anderen Fällen kann sich ein Operand selbst bedienen) sich bewusst sein, für welche Blöcke ist es ein linker Operand und für welche Blöcke ist es ein Recht). Eine andere häufige Anwendung ist das Überschneiden von Mengen mit komplexen Beziehungen.

Antwort

6

Sie könnten einen Blick auf Graph# werfen, aber ich bin mir nicht sicher, wie gut es Composite-Knoten wie das handhaben wird. Es könnte jedoch ein guter Ausgangspunkt sein.

2

Nun, Sie müssen es zunächst irgendwie im Speicher darstellen, gibt es viele Möglichkeiten, wie adjacency list. Dann müssen Sie es zeichnen. Während das Zeichnen eines Diagramms im Allgemeinen einfach ist, ist es nicht so einfach, wenn Sie layout it benötigen. Sieht aus wie in deinem Fall, genau das musst du tun, um zu dieser schönen Darstellung zu kommen. Es wird nicht einfach sein.

EDIT: Interessant, scheint es eine library von Microsoft Research.

2

Ich weiß nicht, wie nützlich es in diesem speziellen Szenario sein wird, aber Sie vielleicht einen Blick auf http://quickgraph.codeplex.com/

+0

Aktualisierung: http: //quickgraph.codeplex.com/ – bob

+1

@bob Prost, aktualisiert die URL – ICR

1

Ich kann diese Komponente nicht finden, und ich entschied writen meine eigene Kontrolle, Linie und Kopf nehmen wollen mein graph ist, und nutzen sie Visualisierung Wenn die Ihr benötigt i es ist Komponente und Programm geben kann, ihn zu demonstrieren/ ich writen Komponente und Programm in Visual C# Studio 2008 Sprache

+0

Vielen Dank, Andriy. Ich werde gerne versuchen, Ihre Lösung zu beantragen und/oder zu verlängern (meine Erweiterungen natürlich zurückzusenden). Bitte senden Sie es an [email protected] (Entschuldigung für eine gruselige Adresse, es ist real während der Zeit, nur Copypaste es so wie es ist; leider habe ich weder ein privates Nachrichtensystem auf dieser Seite noch Ihre Kontakte in Ihrem Profil gefunden, während ich vermeide Veröffentlichen meiner E-Mail auf öffentlichen Webseiten) – Ivan

2

ich möchte Sie auch auf graphviz zeigen. Es ist keine .NET-Lösung, aber Sie können Dateien füttern, die einfach genug sind, um Grafiken zu erstellen. Ich glaube nicht, dass das Layout sehr einfach ist, vor allem mit steigender Anzahl von Knoten. Daher sollte es gut sein, ein Tool dafür zu finden.

+0

Es gibt einige Bindungen zum Aufrufen von GraphViz aus C#. Sie sehen alle etwas experimentell für mich aus. –

1

Ein ziemlich gut aussehendes ist das Diagrammwerkzeug von Nevron. Aber es ist not for free!

Ich verwende derzeit die Diagramme und Benutzeroberflächen von ihnen, und sie arbeiten ziemlich gut.

1

Graphviz4Net bietet WPF-Komponente für die Visualisierung von Grafiken. Es hängt von GraphViz (Open-Source-Befehlszeile Graph Visualisierungstool) ab. GoDiagram

Es die mehrere Ports auf den Knoten wie Sie gezeigt haben, unterstützen:

0

haben dieses kommerzielles Produkt mit Erfolg eingesetzt.

Verwandte Themen