Aplet uruchamia się klikając poniższy przycisk. Wymaga JDK 1.3. Dostępna jest także wersja w postaci aplikacji, która umożliwia zapis i odczyt plików w formacie gd0 oraz serializowanych klas.
Wersja standalone aplikacji
Przycisk relax umożliwia automatyczne pozycjonowanie wierzchołków grafu, odległości pomiedzy wierzchołkami określa się przy pomocy slidebaru.
Górna listwa umożliwia utworzenie nowego grafu, zapis/odczyt (w wersji standalone), oraz sterowanie wybranym pluginem.
Aby uruchomić algorytm grafowy należy najpierw przygotować graf. Następnie należy wybrać plugin z listy. W górnej listwie znajduje się pięć przycisków umożliwiających sterowanie pluginem. Nie każdy z nich może być akurat dostępny dla danego algorytmu, zawsze jednak działa przycisk play - '>>', oraz 'init' powodujący inicjalizacje pluginu. Przyciski '<<' - cofnięcie kroku, '||' - pauza, '>>' - krok do przodu, są wykorzystywane przy pracy krokowej algorytmu o ile plugin implementuje taką funkcjonalność.
public void start(Graph g, Vertex v);
Jest wywoływana gdy użytkownik kliknie przycisk play :'>'. Zmienna g zawiera
aktualnie pokazywany graf. Zmienna v określa zaznaczony wierzchołek, może być
równa null, jeśli żaden wierzchołek nie został zaznaczony (prawym kliknięciem
na wierzchołku).
public String toString();
Zwraca nazwę pluginu, pojawi się ona w na liście pluginów.
public void setStartStep();
Jeśli plugin implementuje możliwość pracy krokowej algorytmu, wówczas ta metoda
jest wywoływana gdy użytkonik kliknie przycisk'<<'
public void incStep();
Wywoływana gdy plugin wykonywany jest w trybie krokowym. Metoda ta jest
wywoływana albo gdy użytkownik kliknieprzycisk '>>' - krok do przodu,
albo gdy uruchomiono algorytm poprzez'>', wówczas będzie ona wywoływana co
1s.
public void decStep();
Podobnie jak incStep().
public boolean isFinished();
Zwraca informacje czy algorytm już zakończył swoje działanie. Jest wymagane w
przypadku zarówno algorytmów wykonujących się krokowo jak i tych nie
implementujących tej funkcjonalności.
public boolean canDoForward();
Informuje wizualizator o tym że algorytm może krokowo przechodzić do przodu ,
zwraca wówczas true, false w przeciwnym przypadku.
public boolean canDoBackward();
Podobnie jak w canDoForward().
public boolean canPause();
Czy plugin można zapauzować.
Różne metody :
List adjList[] = graph.getAdjacencyListRepresentation();//zwraca tablice list sąsiedztwa dla grafu.
try{ int arr[] = graph.saveGD0ToArray();// zwraca graf w postaci tablicy gd0 }catch(IOException e){ e.printStackTrace(); }
int matRep[][]=graph.getMatrixRepresentation(); //pobiera reprezentacje macierzową
id
można pobrać
odpowiadający mu wierzchołek metodą : Vertex vert = graph.findVertex(id);
Obiekt vert
umożliwia pobranie zmiennych skojarzonych z tym
wierzchołkiem poprzez wywołanie:
k.setFloatVar("k", 12); k.setFloatVar("1", 17); float f = k.getFloatVar("k"); // f = 12W tablicy sąsiedztwa można odszukać wierzchołek o żądanym identyfikatorze
id
korzystając ze statycznej metody Graph.findVertexInAdjTable() :
Vertex vert = Graph.findVertexInAdjTable(adjList, id);Do listy sąsiedztwa można dodawać nowe wierzchołki :
Vertex vert = new Vertex(); vert.setId(Vertex.getNextFreeId()); adjList[0].add(vert);
Indeksy w tablicy sąsiedztwa odpowiadają identyfikatorom - id - wierzchołków.
poniżej znajduje się krótki przykład oparacji na grafie z pomocą tablicy gd0.
try{ int arr[] = graph.saveGD0ToArray();//pobież tablice int arr2[] = new int[arr.length+3]; //dodaj do niej jeden wierzchołek i krawędź System.arraycopy(arr, 0, arr2, 0, arr.length); arr2[arr2.length-3]=10; arr2[arr2.length-2]=1; arr2[arr2.length-1]=2; graph.loadGD0FromArray(arr2); //zapisz nową tablice } catch(IOException e) {e.printStackTrace();}
graph.applyNewListRepresentation(adjList);//w przypadku tablicy list sąsiedztwa
try{ graph.loadGD0FromArray(arr); //w przypadku tablicy gd0 }catch(IOException e){ e.printStackTrace(); }
graph.applyNewMatrixRepresentation(matRep);//w przypadku reprezentacji macierzowejNależy pamiętać że po zakończeniu algorytmu a przed wyjściem z metody start należy sprawić aby metoda isFinished() zwracała true. Pluginy mogą wypisywać różne komunikaty na konsole korzystając ze statycznej metody MainWindow.printToConsole();
MainWindow.printToConsole("komunikat w jednej lini\n");Więcej o pisaniu pluginów najlepiej jest się dowiedzieć z zamieszczych przykładach, znajdujących się w źródle programu.