Ringtree ist ein interaktives Tool zur Anzeige und Manipulation von hierarchischen Strukturen, beruhend auf der RSF ("Radial Space-Filling") Technik. Diese bietet zahlreiche Vorteile im Vergleich zu herkömmlichen Methoden der Informationsvisualisierung, insbesondere da man damit den verfügbaren Platz effizient ausnützen kann, um die Informationen anzuzeigen. Im Gegensatz zu anderen, weit entwickelten Techniken der Hierarchievisualisierung (wie zum Beispiel Microsofts Windows Explorer und andere Dateibrowser) leiden die RSF Systeme jedoch noch unter Defiziten bei der Navigation, Selektion und Modifizierung. Ausserdem kann es passieren, dass bestimmte Teile der Visualisierung zu klein werden und nicht mehr richtig erkannt werden können. Mit unserer Implementierung, angelehnt an das Paper InterRing: An Interactive Tool for Visually Navigating and Manipulating Hierarchical Structures , haben wir versucht, einige dieser Techniken zu imitieren, und ein intuitives und voll funktionsfähiges RSF-System zu programmieren.
Abb. 1: RingTree-Visualisierung eines Dateisystems, bestehend aus 85 Verzeichnissen.
Der dabei erzeugte Baum hat eine Tiefe von 7 Ebenen.
Detailliertere Beschreibung des Tools hinsichtlich der Implementierung:
Die Struktur des Programmes besteht im Wesentlichen aus den zwei Klassen "RingTree" und "RingTreeNode", wobei "RingTree" die übergeordnete Einheit ist, die sich aus einer Reihe von "RingTreeNodes" zusammensetzt. Die "RingTree"-Klasse stellt dabei den Root-Node dar, also einen Zeiger auf das Verzeichnis von dem aus das Programm gestartet wird. Ausserdem beinhaltet sie die Funktionen zum Zeichnen des Baumes sowie eine Reihe von Verwaltungsfunktionen. Jeder "RingTreeNode" ist ein Zeiger auf eines der Unterverzeichnisse, und enthält ausser dem Namen auch noch Zeiger auf seinen Elternknoten sowie auf die Liste seiner Nachfolgeknoten. Ausserdem gibt es Funktionen zum Selektieren der Knoten und zum Verändern der Ausmaße.
Beim Start des Programms werden vom angegebenen Verzeichnis aus alle Unterverzeichnisse rekursiv durchsucht und ein "RingTreeNode" für jedes Verzeichnis angelegt. Jeder der Nodes bekommt einen Namen (den jeweiligen Verzeichnispfad), ausserdem werden Größe und Farbe bestimmt.
Die Darstellung des Baumes wurde mittels OpenGL in einem GLUT-Framework realisiert. Jeder Knoten ist ein QUAD_STRIP mit entsprechend hoher Anzahl an Vertices, um Treppeneffekte zu vermeiden. Ebenso bestehen die Trennlinien aus LINE_STRIPS, die zusätzlich mittels LINE_SMOOTH geglättet werden. Das GLUT-Framework ruft periodisch die Funktionen zum Zeichnen des Baumes auf, und erlaubt ausserdem auf einfache Weise die Unterstützung von Maus (sowohl aktiv als auch passiv) und Tastatur.
Hinweise zur Installation:
Eine explizite Installation des Tools ist nicht erforderlich, es reicht, die gezippte Datei in ein beliebiges Verzeichnis zu entpacken und die Datei "RingTree.exe" zu starten. Das Verzeichnis, das die Wurzel des visualisierten Verzeichnisbaumes darstellen soll, muss dabei als Parameter (mit verdoppeltem Backslash als Trennzeichen) übergeben werden.
Beispiel: C:\Programme\RingTree\RingTree.exe c:\temp\
Hinweise zur Programmbedienung:
Nach dem Start erzeugt das Programm die Baumstruktur aus dem übergebenen Verzeichnis. In dem Konsolenfenster werden die Verzeichnisnamen der Reihe nach angezeigt, sowie am Schluß auch die maximal erreichte Tiefe des Baumes. Fährt man mit der Maus über die Knoten, wird der entsprechende Pfadname links oben im Fenster angezeigt. Mit der rechten Maustaste lassen sich dann die Knoten selektieren. Der selektierte Knoten wird dann dick schwarz umrahmt, ausserdem erscheint ein gelb unterlegter Bereich, der die Grenzen des übergeordneten Knotens angibt. An dem ausgewählten Knoten lassen sich nun diverse Änderungen seiner Form durchführen, die durch einen Linksklick auf einen der seiner Ränder ausgelöst werden. Die äußere und innere Kante dienen dabei zur Verschiebung nach außen und innen, die seitlichen Kanten zur Verschiebung nach links und rechts.
Abb. 2: Verschiebung der äußeren Knotenränder nach innen.
Abb. 3: Verschiebung der äußeren Knotenränder nach außen.
Abb. 4: Verschiebung der seitlichen Knotenränder nach innen.
Abb. 5: Verschiebung der seitlichen Knotenränder nach aussen.
Weiters gibt es neben dem "normalen" Bewegungsmodus auch noch einen "Smooth Mode", der eine etwas andere Möglichkeit der Größenänderung darstellt. Im "Smooth Mode" werden nicht nur die Kanten des aktuellen Knoten verschoben, sondern proportional dazu auch alle Kanten der Nachbarknoten auf der Seite der Kante. Ausgelöst wird der "Smooth Mode" durch halten der "Strg"-Taste beim Verschieben der Kanten.
Abb. 6: Verschiebung der äußeren Knotenränder nach außen (mit "Smooth Mode").
Abb. 7: Verschiebung der seitlichen Knotenränder nach innen (mit "Smooth Mode").