Trochę sporo ostatnio czasu w ramach projektu poświęciłem na naprawianie biblioteki ClrMd i pisania poradników o GitHubie. W ramach rdzennego rozwoju projektu skupiłem się na neo4j, teraz pora najwyższa wrócić do interfejsu i zastanowić się nad ważnym pytaniem - czego użyję jako biblioteki rysującej grafy. Na pierwszy ogień poszło przeglądanie “internetów” i wyszukanie opcji, których będę mógł użyć w WPF. Wynik tych poszukiwań nie jest przytłaczający. Wygląda na to, że jest pewne pole do popisu dla osoby, która napisze funkcjonalny i ładny komponent WPF do rysowania grafów. Ja w ramach tego projektu nie mam na to czasu, więc pozostaje mi korzystać z gotowców.
Niestety z góry wykluczyłem wszystkie projekty płatne, m.in. Telerika, Syncfusion, Devexpress, bardzo fajnego yFiles itd itp. Uważnie je przejrzałem pod kątem udostępniania darmowej licencji projektom Open Source ale... niestety. Być może coś wynegocjowałbym z GoXam ale… nie chce mi się – znalazłem coś lepszego!
Open source od strony Microsoftu Research, zawiera zarówno layout engine jak i kontrolki do rysowania. Nie wygląda na specjalnie piękną, ale ma funkcjonalność tooltipów oraz podświetlania węzłów. Najwyraźniej nie wspiera ręcznego przesuwania węzłów. W ramach przykładów jest aplikacja WPF więc to plus. Oczywiście w pełni imperatywna i to zaboli w F#, ale niczego innego się nie spodziewam. Zaletą jest to, że została użyta m.in. w NDepend, który mocno grafami stoi.
Trochę już zakurzona, ale wciąż używana biblioteka. Ostatni commit sprzed 5 lat. Zdecydowaną zaletą jest jej projekt pod kątem WPF - wspiera m.in. szablony oraz bindowanie. Do tego zdaje się ma wszystko czego trzeba - layout engine, highlight elementów, przesuwanie węzłów itd. Mocny kandydat. Pod spodem używa biblioteki QuickGraph więc być może z pudełka dostałbym algorytmy typu najkrótsza ścieżka itd.
Najnowsza propozycja open source na "rynku". Również oparta na QuickGraph, używa fragmentów kodu z Graph#, a ostatnie commity są z kwietnia tego roku. Co prawda główna strona projektu zdaje się leżeć, kod wraz z dokumentacją i przykładami bezpiecznie spoczywa na githubie. Lista funkcjonalności brzmi obiecująco i zdaje się mieć wszystko czego trzeba. Ponadto kusi opis:
GraphX for .NET is an advanced open-source graph visualization library that supports different layout algorithms and highly customizable features. It is capable of rendering large amount of vertices and steadily moves to support the most popular .NET platforms. GraphX already served well as the foundation for many other projects where its functionality was irreplaceble.
Po przeczytaniu wywiadu z autorem Aleksandrem Smirnovem i zobaczeniu znajdujących się tam rysunków decyzja właściwie zapadła.
And the winner is...
I radośnie przystąpiłem do clonowania źródeł GraphX by zacząć zabawę z tymże tworem. O pierwszych wrażeniach i efektach - wkrótce.
PS. A może znacie jeszcze inne komponenty WPF/Win Forms do tego służące? Na pewno jakieś przegapiłem. Piszcie, komentujcie plis.