Bekannte Probleme
- Im Eckendialog sollen eigentlich die Graphen zentriert um die Ecke um die es geht
dargestellt werden. Das klappt noch nicht so wie ich mir das vorstelle. Die bearbeitete Ecke
soll im Zentrum zu sehen sein.
Offene Punkte GED
Vorhaben 2019
-
Im Eigenschaftendialogen zu Ecken und Kanten:
-
Size-Auswahl an richtiger Stelle öffnen...
- Ecken-Bearbeitungsdialog ggf. auch zweispalttig.
- Kanten-Bearbeitungsdialog: Graph testweise nach rechts unten.
- SizeChooser refakturieren
- CreateGui refakturieren
- de.duehl.swing.ui.dialogs.ErrorDialog von ModalDialogBase erben lassen!
-
Vermutlich macht eine scharfe Trennung zwischen gerichteten und ungerichteten Graphen Sinn.
Dann muss nur immer noch alles in der Oberfläche mit beiden Sorten kalppen.
Interfaces?
-
Pfeillose Kanten, sprich ungerichtete Kanten einbauen:
Im Graphen soll man entscheiden können, ob dieser gerichtet ist oder nicht, sprich
in dessen Metadaten.
Umstellung über Bearbeiten -> Metadaten-Menü
Es werden dann die Kanten im Graphen überarbeitet, wie man mit den Eigenschaften umgeht,
muss man sehen, vermutlich versucht man alle vom default abweichende Eigenschaften
zu übernmehjmen oder man fragt via Menü wie beim Kanten-löschen, aber das könnte sehr
aufwändig sein.
Andersherum kann man dann aus einer normalen Kante zwei gerichtete machen.
Oder mächte man in einem gerichteten Graphen eine andere interne Datenstruktur und nicht
über Adjazenzlisten arbeiten?
Es wird die Darstellung verändert: keine Pfeilspitzen.
Es werden die Buttons verändert, nur Hinzufügen ungerichteter Kanten.
-
Man könnte darüber nachdenken, die Datenstruktur für den Graphen von Adjazenzlisten mit
Eigenschaften abzuändern auf echte Kanten von Ecke v1 zu Ecke v2, mit der Eigenschaft
hin, rück, beides, ungerichtet.
Zwar ist für Algorithmen die Datenstruktur mit Adjazenzlisten die sinnvollste, aber
vielleicht könnte man dann noch eine Transformation des Graphen in eine solche
Form und zurück anbieten. Denn die Bearbeitung des Graphens würde es erleichtern.
-
Eventuell könnte der Graph als solcher oder auch zu Teilen von allgemeineren Klassen erben.
Dann hätte man
GedVertex extends Vertex
und dergleichen.
Problem bei der jetzigen Darstellung, bei List<GedVertex> ist das nicht kompatibel zu
List<GedVertex>.
- Export in ein Vektorformat.
- Canvasgröße mit Speichern und beim Laden herstellen, wenn das Fenster zu klein ist.
Oder generell?
- Graph#maximizeGraphRespectingAspectRatio() auch direkt in der Oberfläche verwenden,
neues Icon!
- Im Menü Canvasgröße auf individuelles Maß setzen mit kleinem Dialog.
- ged3-Form, alt Loader weiter refakturieren!
- Es fehlt die Kantenform! Das bestimme ich nun irgendwie anders...
- Ged4FormatLoader refakturieren
- Hilfe-Seite
- Dialoge auf die neuen sparenden Basisklassen umstellen.
- Line durch neue PixelLine ersetzen. die Pixelklassen nach Swing... Allerdings gibt es da
schon eine...
- ged5.-Format, welches XML-artig speichert, aber nur Abweichungen vom Default.
- Testabdeckung der Graphenklassen, also alles unterhalb von
de.duehl.math.graph.ged.graph
mit Ausnahme von
de.duehl.math.graph.ged.graph.io
.
-
Graph umschaltbar machen gerichtet / ungerichtet.
- in einer Richtung werden alle Orientierungen entfernt,
- in der anderen werden alle Kanten birdirektional
- Ferner braucht man dazu einen Button, der mehrere "gleiche" Kanten entfernt.
d.h. von alle Kanten zwischen a und b mit der gleichen Richtung werden alle bis auf
eine entfernt.
- In der Gui dann die Buttons umschalten, entweder nur einfügen ungerichteter Kante,
oder die andere Auswahl.
- Color aus Basics nutzen?
- Laden und Speichern .ged einbauen
- Laden und Speichern .ged2 einbauen
- Laden nach automatischer Endung Format erkennen.
- Fehlende Kanteneigenschaften einfügen
- Decorator-Pattern für Graphen verwenden... ?
Dann ließe er sich elegant für alle Einsatzzwecke abwandeln und man könnte ihn auch
direkt im Algorithmus verwenden.
Allerdings hapert es bei Listen von Klassen...
- Alle in Klassen enthaltenen Enums in eigene Klassen extrahieren!
- Generelles Refactoring
-
Ev. Graphen an die Größe der Canvas anpassen im Ecken- und Kanten-Dialog. Einmal nach dem
Pack, aber auch bei Änderungen an der Größe. Ev. per Listener?
Muss aber auch nicht, auch so macht es eine gute Figur.
- Die Änderungswünsche hier sichten, zusammenführen und priorisieren.
Ältere Vorhaben
- Eigenschaften von mehreren Kanten mit dem Kantenauswahlmenü ändern:
Erst Kanten auswählen, dann Eigenschaften setzen.
- Speichern ged3 und Test hin und her... - da fehlt noch die Form.
- Logging aller Aktionen einbauen - in die Logik. Ist in der Logik
eingebaut, da passiert aber nicht viel!
GraphPanel etc. auch loggen...
-
Menüs:
- Alle Ecken Radius ändern - macht das Sinn? Auf Default und Radius ändern?
- Alle Ecken Farbe ändern - macht das Sinn? Auf Default und Farbe ändern?
- Laden GED 1 und 2
- Ecke in Kante hinein setzen (neue Ecke, zwei neue Kanten dazu mit,
gleichen Eigenschaften, alte Kante weg).
- Liniengraphen bilden
-
Option, Kanten in beiden Richtungen ohne Spitzen darzustellen
(wobei die Umsetzung etwas knifflig wird, da muss in Graph Painter
gebastelt werden.
Eventuell wäre es dafür super, den Graphen auf ungerichtet umschalten
zu können.
- Rahmen aufziehen und alle Ecken darin löschen / bearbeiten.
- Auswahl von Ecken mit gestrichelten Kreisen darum darstellen in
Radius * 1.25 Abstand oder so?
- Ecke ins Gitter einrasten ins Eckenmenü (mit snap in Grid kann man sie
einfach verschieben, aber kann ich trotzdem einbauen).
- Layer? man könnte dann rechts verwalten welche angezeigt werden sollen
und hätte für jeden Layer einen Graphen.
- Größe der Canvas per Menüauswahl setzbar (für Präsentationen etc.).
- Dokumentation (Hilfe), die im Programm angezeigt werden kann, mit
Abbildung der Buttons im Text.
- Möglichkeit, die Beschriftung einer Ecke mit der Maus zu versetzen.
- Label, Gewicht, Kapazität und Fluss per Maus bewegbar machen.
- Objekt Edge bestehend aus Startindex und AdjazenzEntry wenn nötig...
- Canvasgröße frei wählen lassen.
- Geändertmarker richtig anzeigen (setChange, speichern, laden...)
- Bei Rechtsklick in freie Fläche dort Submenü zum Erzeugen von Graphen
mit diesem Mittelpunkt anbieten: Kreise, Kn, ... mit Radius um diesen
Punkt wählbar. Genau wie im Menü für den Mittelpunkt der Bildfläche.
- Vorder- und Hintergrundfarben auch in allen Menüs und in der Fußzeile setzen.
- Bei Alle Ecken auf Gitter legen hinterher testen, ob zwei Ekcen die
gleichen Koordinaten haben und wenn ja, den Benutzer warnen.
- Graphen im Uhrzeigersinn und entgegengesetzt um den Mittelpunkt drehen.
Vielleicht auch in festen Winkeln. Oder eingebbar.
- Funktionalität, die Sinn maht aus dem GraphPanel in Graph verlegen,
analog zu vertexIntersctsWithOtherVertex()
- Funktionalität aus der Logik in den Graphen verlegbar?
- Nach den ganzen Beispielgraphen auf der GED-Seite schauen.
Wenn ich die nicht mehr habe, nachbauen!
- GED-Seite aktualisieren, neue Version für Java erstellen, aufeinander verweisen.
- Zeichnen von Mehrfachkanten als Kreisbögen. Per Option in den Metadaten des Graphen.
Im GraphPainter bei der Kantendarstellung dann erst alle Kanten
sammeln, die zwischen je zwei Ecken verlaufen, Radien und so selbst bestimmen.
Siehe ShortTestCodes.graphicalUserInterface.DrawArc.
Achtung, dann muss natürlich auch sowas wie Rechtsklick angepasst werden.
- Schlingen erlauben? Darstellung an Eckenradius anpassen und ermitteln,
wo der größte freie Winkel durch die Kanten an dieser Ecke sind und
diesen mit der oder den Schlingen füllen.
Achtung, dann muss natürlich auch sowas wie Rechtsklick angepasst
werden.
- Canvas mit Scrollbalken darstellen?
- Alle Sourcedateien auf TODO absuchen.
- Wenn alles andere fertig ist, kann über Animation nachgedacht werden.
Das läuft dann als eigene Historie, in die bestimmt Graphen gespeichert werden.
Eine Animationsverwaltung mit kleinen Bildern der Graphen wie im Perlprogramm sollte dann
folgen.
So ähnlich wie der EdgeDeleteDialog.
- Generelle Behandlung von Algorithmen überlegen, Schnittstelle Algorithm?
- Beispielagorithmus schreiben, der zu jedem Zwischenstand einen Graphen
speichert. Ggf. sogar als Animation.
DFS oder BFS oder so.
- Farbalgorithmen aus meiner Diplomarbeit von C++ nach Java übertragen
und auf Graphen anwendbar machen.
- Test auf plättbaren Graphen einbauen. (Muss K5 oder K3,3 als
Subgraphen finden. Ob es da schnelle Algorithmen gibt?)
- GED als Android-App?