Microsoft GLEE – Gráfok vizualizációja .NET alatt
Féléves önállólabor gyakorlatom egy Levelezés elemző rendszer elkészítése. Minden minden elemző szoftvernek, ennek is az a célja, hogy a végfelhasználó által feltett kérdésekre kielégítő és szemléletes válaszokat tudjon nyújtani. Ennek egyik lehet formája a grafikus megjelenítés. Projektem elkészítéséhez szükségem volt egy olyan eszközre, mely hatékonyan képes tetszőleges gráfokat ábrázolni, ugyanakkor interaktív működést biztosít, azaz képes érzékelni, ha a felhasználó valamilyen egér vagy más eseményt idéz elő egyik élén vagy csomópontján.
Hosszas keresgélés után rábukkantam a Microsoft Research – VIBE csoport egyik kísérleti fejlesztésére a Microsoft Automatic Graph Layout (MSAGL) csomagra, korábbi nevén a Graph Layout Execution Engine (GLEE) -re, mely oktatási és kísérleti célokra szabadon használható.
A GLEE telepítőkészlete a .NET osztályokkal, dokumentációkkal és példa kódokkal összesen 2MB-ot foglal gépünkön. A csomag egyébként 3 komponensből, a gráf tárolásáért és alapműveleteiért felelős Microsoft.GLEE, a megjelenítésért, színezésért, él és node ábrázolásért felelős Microsoft.GLEE.Drawing és az interaktív működésért felelős Microsoft.GLEE.GraphViewerGDI -ből áll összesen. Használata rendkívül egyszerű és kényelmes.
GleeGraph
Gráf objektum létrehozásához a GleeGraph osztályt kell példányosítanunk. Ennek tagjai lehetnek Node -ok és Edge-ek, melyeket az AddNode() és a AddEdge() metódusokkal vehetünk fel.
GleeGraph graph = new GleeGraph();
Node
A GleeGraph Node-ok rendelkeznek saját string ID-val, amit pédányosításkor kell megadnunk és ezzel az azonosítóval kereshetjük vagy hivatkozhatunk rájuk később, továbbá képesek eltárolni grafikájukat és rendelhetőek hozzá tetszőleges Object-ek, ha tárolásra és használnánk ezeket a csomópontokat.
Node a = new Node("a", new Ellipse(w, h, new P()));
Node b = new Node("b", CurveFactory.CreateBox(w, h, new P()));
graph.AddNode(a);
graph.AddNode(b);
Edge
Az élek tárolására megvalósított osztály, amely két node között húzódik. Ezek az élek minden esetben irányított éleknek, melyek konstruktoruk első Node-jából a másodikba mutatnak. Természetes ábrázolás szempontjából az irányítottság kérdése egyszerűen megoldható ha nyilak helyett csak szakaszokat használunk. Az Edge objektumok azonban a Node-okkal ellentétben nem rendelkeznek saját ID-val és a GleeGraph sem tartalmaz élkeresési eljárást, így ha ilyenre lenne szükségünk magunknak kell ezt megoldani.
Edge e = new Edge(a, b); e.ArrowHeadAtSource = true; //Nyíl irányjelzője graph.AddEdge(e); graph.AddEdge(new Edge(a,b));
A GleeGraph -ok ábrázolására használhatjuk saját metódusainkat, de rá is bízhatjuk a GraphViewerGDI vezérlőre, melynek Graph Propery-jének átadva gráfunkat az automatikusan le is rendereli. Ezen kívül a GLEE képes hagyományos Graphics objektumot is adni kimenetként, így gráfjainak akár egy ASP oldalon is generálhatjuk.
További infirmációk az MS AGL-ről és GLEE-ről:
http://research.microsoft.com/en-us/projects/msagl/
Amennyiben kereskdelmi szándékkal fejlesztünk az MS AGL 2007 csomag 280 USD -ért megrendelhető a Windows MarketPlace-en:
http://store.microsoft.com/microsoft/Automatic-Graph-Layout-2007/product/4DD40C40

