2009-02-26 10 views
31

Przez wykresie tutaj mam na myśli coś przypominające te obrazy:Jakie opcje są dostępne dla układu kierowanych lub nieukierunkowanych wykresów w .NET?

Idealnym rozwiązaniem byłoby:

  • użycie kodu tylko udało
  • umożliwiają wyjście na bitmapę image
  • umożliwić wyjście do elementów WPF
  • zawierać jakąś interaktywną powierzchnię do wyświetlania wykresu, który obsługuje powiększanie, panoramowanie i reorganizacja węzłów

Jestem również zainteresowany słuchaniem o projektach, które mogą być potencjalnie wykorzystana jako punkt wyjścia do tego rodzaju pracy. Jeśli wymaga to rozwoju, aby osiągnąć to, co chcę, to jestem gotów to rozwiązać. Najbardziej złożoną częścią tego celu wydaje się być uzyskanie układu graficznego w rozsądnym czasie.

+0

Jako notatkę dla mnie, jest tutaj ładnie wyglądająca biblioteka Clojure http://lisperati.com/vijual/ –

Odpowiedz

8

Firma Microsoft Research udostępnia narzędzie o nazwie MSAGL (Automatic Graph Layout, poprzednio GLEE) dla .NET.

MSAGL jest dostępny tutaj: http://research.microsoft.com/en-us/downloads/f1303e46-965f-401a-87c3-34e1331d32c5/default.aspx

Zastrzeżenie: Nie używałem funkcji, więc nie wiem, czy jest ona odpowiednia dla Ciebie (i nie wiem o warunkach licencyjnych, wydaje się, że jest za aplikacje niekomercyjne). Ale przynajmniej wygląda interesująco.

+0

Użyłem wcześniej GLEE v1. To było darmowe, ale dość prymitywne. Najnowsza wersja (1.2) kosztuje 150 GBP (220 USD). Chciałbym usłyszeć idealnie o darmowych rozwiązaniach. –

+0

BTW strona główna projektu znajduje się tutaj: http://research.microsoft.com/en-us/projects/msagl/default.aspx –

+0

NDepend go używa, więc myślę, że licencja zezwala na komercyjne wykorzystanie. http://codebetter.com/blogs/patricksmacchia/archive/2008/09/09/interactive-code-dependencies-graph.aspx –

0

Nie jest. NET, ale często przywoływanym zestawem narzędzi do renderowania wykresów jest AT & T Graphviz. Sam korzystałem tylko z samodzielnych aplikacji, ale kod źródłowy jest dostępny pod czymś, co przypomina licencję open source.

Graphviz jest używany przez popularne narzędzie do tworzenia dokumentacji kodu doxygen, aby automatycznie narysować różne diagramy wygenerowanej dokumentacji.

+0

Użyłem Graphviz w analizatorze zależności złożenia .NET, który napisałem kilka lat temu. Jest to bardzo proste, ale generuje tylko bitmapy lub SVG i wymaga instalacji na kliencie, a następnie współdziałania COM. To nie jest złe, ale nie do końca to, na co mam nadzieję! –

+0

Jeśli ktoś jest zainteresowany obejrzeniem jakiegoś prostego kodu, który używa WinGraphViz przez COM, zobacz http://www.drewnoakes.com/code/dependancyanalyser/ ... kod jest dla VS2003 i to trochę krępujące, aby przyznać, że kod jest moje, ale ma to rację. –

+0

Podejrzewam, że zastąpienie odwrotności kropki przez przeniesienie jej do zarządzanego C++ byłoby możliwe, ale nie było łatwe. Używam narzędzi wiersza poleceń do szybkiego szkicowania automatów stanów i tym podobnych. Dot wyświetli również PostScript, który spełnia moje potrzeby. – RBerteig

1

Chłopcy w Mindscape mieć takie narzędzie

z nazwą wyobraźni WPF Flow Diagrams

Ponadto, sprawdź Family.Show projekt demo Vertigo jest, ma prostą formę tego

+0

Diagramy przepływów WPF kosztuje 500 USD i nie wykonuje automatycznego układu wykresu. Wygląda na to, że ma dobrą integrację z WPF. –

+0

Aplikacja Family.Show tworzy drzewa genealogiczne, które (zazwyczaj!) Są prostym podzbiorem wszystkich możliwych wykresów. Na przykład są acykliczne. Interesują mnie algorytmy, które mogą przedstawiać różnorodne wykresy, takie jak podejście Sugiyama. –

+0

W rzeczywistości ich produkty Star Diagramy wydają się mieć jakiś automatyczny układ. 149 USD/miejsce i oferuje drzewo i siły skierowane. Nie użyłem go i nie mam pojęcia, jak radzi sobie z ogólnym przypadkiem, ale jest to bardziej zgodne z tym, czego szukasz, niż z produktem Flow Diagrams. –

0

Kiedy zrobiłem jakąś pracę z udziałem wykresów zeszłego lata, uznałem, że najlepszą opcją, która nie była zbyt droga, było ręczne zrobienie tego w SVG, tj. napisanie pliku SVG z kilku ciągów i renderowanie go do obrazu za pomocą Inkscape.

To nie jest łatwe i szybkie rozwiązanie, ale nie pozwala na niemal nieskończonej personalizacji, więc to może być miło, gdyby trzeba organizować wykresy czy organizację przestrzenną na podstawie połączeń itp

3

Graphviz jest do dziś, moim zdaniem, jedna z najlepszych bibliotek graficznych. Jednak integracja z .Net to ból.

Możliwe jest wywołanie narzędzia wiersza poleceń w celu wygenerowania kształtu w oparciu o dane wejściowe wykresu, następnie odczytanie danych wyjściowych i nałożenie elementów na niestandardowy formant, który wyświetla wszystkie kształty obliczone przez graphviz. To jest bardzo hacky, ale jest to najlepszy sposób, w jaki nasz zespół odkrył integrację graphviz z .Net kilka lat temu.

Lepsze rozwiązanie może dziś istnieć; W tamtym czasie GLEE nadal był bardzo porywczy i nie widziałem postępów, jakie zrobił Microsoft od tego czasu.

+0

GraphViz można wywołać przez COM przy użyciu WinGraphViz, ale dane wyjściowe muszą zostać zapisane w pliku, a następnie odczytane z dysku, co jest niefortunne. Wymaga również dodatkowej rejestracji DLL w COM (afaik), aby działało. Składnia DOT jest prosta i łatwa w użyciu. –

+0

Nie wiedziałem o WinGraphViz, miło. Jest to w zasadzie to, co zrobiliśmy, wygenerowaliśmy kropkę, skompilowaliśmy ją i przeanalizowaliśmy wynik do naszego modelu graficznego. – Coincoin

+0

Ostatnia wersja WinGraphViz była w 2004 roku. Niestety jest to tylko interfejs COM. Może ktoś może wymyślić, jak zebrać dane obrazu w com, aby uniknąć systemu plików. Zastanawiam się, czy dane wyjściowe SVG można przeanalizować dla informacji pozycyjnej, a następnie przekonwertować na obiekty i renderowanie WPF ... –

0

Gram na GLEE/MSAGL, a rzeczywisty układ per se jest wystarczający dla tego, czego potrzebuję, ale chciałbym mieć większą kontrolę nad tym, co jest rzeczywiście wewnątrz węzłów, a nie tylko jedną wartością jak teraz.

Na przykład chciałbym mieć "szczegóły", które są ukryte, dopóki nie kliknę ekspandera w węźle, lub podwójne kliknięcie węzła lub najechanie myszą.

Zakładając, że GLEE nie może tego zrobić, czy są dostępne jakieś czyste rozwiązania .NET, które mogłyby to zrobić?

1

Użyj pliku QuickGraph, aby wyprowadzać pliki Dot dla GraphViz. Zrobiłem to w ostatnim projekcie i wygląda na to, że działa całkiem dobrze. Look here dla kodu przykładowego do parsowania plików .plain, lub użyj mojego projektu here jako odnośnika do po prostu wyprowadzania obrazów .png.

12

Graph# to również inna opcja. Nie używałem go osobiście, ale miałem zamiar się nim zająć.

+0

Po krótkim spojrzeniu wykres # wygląda całkiem interesująco. Dzięki za link. –

+0

Jeszcze nie próbowałem, ale niestety twierdzą, że układ Sugiyama jest błędny. To najbardziej przydatny układ w moim doświadczeniu, więc mam nadzieję, że w pewnym momencie zostanie on załatany. –

+0

Od czasu mojego poprzedniego komentarza wygląda na to, że ten projekt naprawdę się pojawił (w tym układ Sugiyama). Jeszcze go nie wypróbowałem, ale następnym razem będę potrzebował czegoś takiego, to będzie pierwsza liga, której spróbuję. –

0

Northwoods oferuje czyste rozwiązanie .NET w swoim produkcie GoLayout. Oferują drzewo, siłę skierowaną i warstwowy digraf (co nie jest efektem Sujiyamy, ale nie jest zbyt daleko dla wielu, jeśli nie większości zestawów danych). Przy cenie 1790 USD/miejsce jest drogie. Istnieją również pewne ograniczenia: najważniejsze, że ich implementacje są zaprojektowane dla wykresów "czytelnych dla człowieka". Dałem mu zbiory danych ponad 5000 węzłów i nie miałem problemu, ale mogę także generować zestawy danych mniejsze niż 500 węzłów, które powodują przepełnienie stosu (recursing too deep). W zależności od domeny może (lub nie) być dobrze dopasowany. Jeśli potrzebujesz ogólnego pakietu, który obsługuje dowolny zestaw danych, polecam GraphViz na Northwoods.

Mam jeszcze użyć żadnej z ich możliwości WPF, ale wiem, że je mają. Od pewnego czasu używam ich rzeczy na WinForms.

1

Użyłem MsAgl i jest całkiem niezły. Ma także przeglądarki zarówno dla WinForms, jak i WPF, które mogą, ale nie muszą być dla ciebie ważne. Nie trzeba korzystać z przeglądarki, ponieważ są dość luźno powiązane z silnikiem układu graficznego.

Nie obsługuje wszystkiego, co robi Graphviz (szczególnie pod względem niektórych typów kształtów). Również dokumentacja mogłaby być lepsza, ale jest całkiem solidna, jeśli nie najbardziej dopracowanym produktem MS.

Zaznacza wszystkie elementy, które wymieniasz jako wymagania, ale reorganizacja "on viewer" obsługuje jedynie przesuwanie węzłów, przekierowywanie krawędzi i zmianę położenia etykiet. Wykres nie reaguje na ruchy tych elementów poprzez repozycjonowanie jakichkolwiek innych elementów.

8

Pracuję w zespole NDepend i potwierdzam: przełączyliśmy się z GraphViz na MsAgl we wrześniu 2008 r., A także licencja MsAgl umożliwia rzeczywiście komercyjne wykorzystanie.Oto kilka przykładowych zdjęć MsAgl graphs integrated in NDepend (wszystko jest interaktywne, węzły są ruchome/wybierane/usuwalne/klikalne, krawędzie są edytowalne/wybierane/usuwalne/klikalne, układ jest powiększany, a także, chociaż może być czystszy, interfejs API MsAgl jest czyszczenia wystarczy do pracy z):

enter image description here enter image description here enter image description here

2

Użyłem NodeXL, http://www.codeplex.com/NodeXL, który jest biblioteka .NET 3.5 (ale także Excel add-on). NodeXl został opracowany przez Microsoft Research i całkiem schludny: ma algorytmy wizualizacji i niektóre wskaźniki, ale wciąż znajduje się na wczesnym etapie rozwoju. Jeśli masz wytrawnego programistę .Net, to na pewno na to spojrzę.

Jednakże, jeśli znasz Python to zdecydowanie polecam Networkx i jego pygrafviz kuzyna, który jest interfejsem dla Graphviz. Użyłem obu i moja produktywność z Python/Networkx jest znacznie wyższa niż wtedy, gdy korzystałem z NodeXL.

GLEE to zamknięta biblioteka źródłowa Microsoftu, z której można korzystać bezpłatnie w niekomercyjnym oprogramowaniu, podczas gdy NodeXL jest metodą otwartego źródła Microsoftu, ale można go swobodnie używać w opracowywanych produktach.

+0

Dziękuję bardzo za to. Na pewno to sprawdzę. –

2

Tylko po to, aby zakończyć listę opcji: Graphviz4Net jest implementacją open-source tego, co zasugerował Coincoin w swojej odpowiedzi.

+0

Wygląda naprawdę ładnie, choć niestety nie jest całkowicie zarządzany. Obsługa WPF wygląda świetnie. –

+0

@DrewNoakes Dlaczego szukasz 100% zarządzanego kodu: jaka jest przewaga? – ChrisW

Powiązane problemy