Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Graphviz - manuell Positionieren (https://www.delphipraxis.net/208108-graphviz-manuell-positionieren.html)

himitsu 10. Jun 2021 11:41

Graphviz - manuell Positionieren
 
Liste der Anhänge anzeigen (Anzahl: 3)
Moin,

Um einen besseren Überblick zu bekommen, wollte ich mir mal Etwas graphisch darstellen lassen,
und hatte mir Graphviz dafür gekommen.

* Vielleich kennt wer Alternativen? (manuell in einem graphischem Programm (MSOffice/LibreOffice/usw.) wollte ich nicht machen.
* Aktuell sind die Abhängigkeiten manuell zusammengeschrieben, aber diese DOT-Datei könnte ich mir auch irgendwie aus dem Quellcode generieren lassen.
** also etwas Anderes als Graphviz
** oder eine andere/bessere Layout-Engine für Graphviz
** und vielleicht auch einen visuellen Editor, um die Ausgabe vom DOT/Graphviz noch manuell etwas anpassen zu können (die Anpassungen sollten aber speicherbar sein, um später das nach Änderungen wieder zu haben)

* GRÜN ist die aktuelle Erstellungs-Reihenfolge im FinalBuilder und er Delphi-Projektgruppe
* ROT die Abhängigkeiten der BPLs (Einiges in der DOT auskommentiert und die DLLs fehlen noch)
* BLAU die Erweiterungen nur in der DelphiIDE (nicht im Compilat)



Wenn diese Konsolenprogramme garkeine Ausgabedatei erstellen, dann geben sie manchmal keine Fehlermeldung aus. (oftmals ja, aber manchmal auch nicht)
Aber da konnte ich bisher meistens in einem Online-Editor (z.B. edotor.net) die Fehlermeldung bekommen.

Ungerichtet und gerichtet gleichzeitig geht nicht? (z.B. die ungerichteten Pfade bei der Positionierung ignorieren)
*
Delphi-Quellcode:
digraph { A -> B }
= nur gerichtet
*
Delphi-Quellcode:
graph { A -- B }
= nur ungerichtet
*
Delphi-Quellcode:
digraph { A -> B; A -- C }
oder
Delphi-Quellcode:
digraph { A -> B; A -> C [arrowType=none] }
** arrowtype=none soll eigentlich gehn, aber der Pfeil bleibt immer da und es hat gravierenden Einfluss auf die Ausrichtung/Positionierung
* OK, eigentlich ist alles gerichtet, aber ich will "falsch" Verlinkungen möglich haben, bzw. dass möglichst nur die "aktuelle" Compilierung Einfluss auf die Sortierung/Positionierung hat.

Und mit der automatischen Positionierung komm ich auch nicht richtig klar.
* das ist meistens total chaotisch und extrem weit verteilt, so dass man fast nichts sieht
** obwohl es eine Erstellungrreihenfolge gibt und auch wenn ich nur den Compile-Graph einbinde, dann sind die innerhalb der Cluster wahllos gemischt
*** FDP ist wahllos kreuz und quer
*** OSAGE ist schwachsinnig nach Größe (Textlänge) sortiert
*** DOT alles nebeneinander, aber nur solange die meißten (eigentich) ungerichteten Abhängigkeiten nicht mit drin sind

Teilweise soll es auch manuell gehen (zumindestens im FDP)
* aber das funktioniert nicht, trotz [pos="x,y!"]
* ich kann so nur "bedingt" innerhalb eines Clusters positionieren (bei FDP klappt das nur in X-Richtung, innerhalb eines Clusters, der Rest ist durcheinander und Y wird fast vollständig ignoriert)
** das extrem umständlich manuell im Text die Position setzen, macht keinen Spaß (hab noch keinen Visuellen DOT-Editor gefunden, wo man auch mit Maus verschieben kann ... andere suchen da schon seit über 5 Jahren danach, laut Google)
* auch mit
Delphi-Quellcode:
{ rank=same; A; B; C }
hab ich keine brauchbaren Ergebnisse hinbekommen

QuickAndDirty 10. Jun 2021 12:11

AW: Graphviz - manuell Positionieren
 
Ich habe einen Bot gebaut der wikipedias per Wiki API oder auch andere wikiframeworks per screenscraping
kartiert und aufzeigt welche Artikel wohin verweisen.
Die Ausgabe lief über graphViz und konnte daher eine SVG Datei sein, welche dann die Artikel direkt durch Anklicken der nodes annavigierte.

Ich denke es ist für deine idee am besten wenn du dir eine SVG datei generieren lässt und dann mit
Inkscape oder anderen Vector graphic editoren die SVG datei bearbeitest.

Zudem kann man in SVG dateien mit Javascript so sachen wie abstoßungskräfte und anziehungkräfte unterbringen, also eine voll animierte SVG bauen.

Letzten endes ist Graphviz einfach eine ansammlung von layout engines welche die dot language verstehen.
Es ist kein mal programm.

himitsu 10. Jun 2021 14:21

AW: Graphviz - manuell Positionieren
 
Links und Hints in der SVG sind mir bekannt und wären auch geplant (die PNG waren nur für jene, welche SVG nicht anzeigen wollen ... ohne zusätzliches Programm geht der MS Edge auf),

aber erstmal hab ich das Problem aus Graphwiz eine brauchbare "Ansicht" hinzubekommen.
Rein von der Menge würde es auf FullHD bzw. A4 passen (notfalls auch A3 oder A2), aber so weit wie das Zeug aktuell verteilt ist, wird alles sooooo klein, dass man nichts mehr lesen kann, wenn man runterzoomt, bis ALLES in die Anzeige passt.


Ja, auch in LibreOffice Draw kann ich die SVG rein bekommen, dann dort das Bild (SVG) zerlegen lasse, in die einzelnen Zeichenobjekte, welche sich verschieben lassen.
Bissl unpraktisch ist, dass hier dann Rahmen, Hintergrund und Text jeder Node einzeln sind. (muß man entweder aufpassen oder wieder Jedes einzeln zusammenfügen, damit es sich beim Verschieben nicht zerlegt)
Problem dabei ist aber, dass dann die Edges (Pfeile/Linien frei rumliegen und nicht mit den Items (an einem Ende) verschoben/gedreht/verlängert/... werden,
und das wird bestimmt in Inkscape genauso sein. :gruebel:


Im Prinzip würde es mir ja reichen, wenn in den Clustern/Gruppen sich die Items ordentlich/logisch einordnen
und ich dann nur noch die Cluster manuell anordnen könnte, da die bisher getesteten Engies es nicht zufriedenstellend hinbekommen.
Bzw. dass man sagen könnte, dass einiges Edges/Linien keine, bzw. eine geringere Auswirkung auf die Anordnung hätten.
Also im DOT das mit dem RANK besser funktioniert, bzw. im FDP das mit dem POS! wirklich funktionieren würde.


dot, fdp und osage sind die drei halbwegs sinnvollen vorhandenen Engines, aber wenn du deren Ausgaben (SVG) so weit verkleinserst, dass die auf den Bildschirm oder ein A4 passen, dann ist nichts mehr leesbar.
Oder versuche einfach mal der grünen Linie zu folgen (da wird dir schwindellig)





Die Erstellung der Nodes und der erste Edge-Pfad sind in der selben Reihenfolge
und (mögliches) in Dieser hätte ich auch gern die Nodes/Cluster sortiert, aber so, dass alles auf den Bildschirm passt.
z.B. läuft aktuell der grüne Pfad in den Clustern extrem ungüstig kreuz und quer hin und her, anstatt grade durch.

QuickAndDirty 11. Jun 2021 16:26

AW: Graphviz - manuell Positionieren
 
Naja, sorry erstmal dass das wieder so einer dieser nicht ganz zur Lösung beitragenden Posts ist, aber...^^

Ich glaube nicht das die Layout engines von GraphViz dein Problem lösen und einfach mal einen Ästhetisch anmutenden Graph ausspucken der deinen Vorstellungen Entspricht.
Das sind letzten endes alles Programme von mathematisch denkenden Köpfen.

Von den Engines denke ich ist Dot noch am schönsten, da es versucht einen Graphen aufzubauen der in der gestallt sehr einem Baum ähnelt mit querverweisen ähnelt.

Es hilft also vermutlich wenn du die einzelnen Cluster seperat renderst und im Nachhinein selbst die einzelnen Verbindungen zwischen den Clustern ergänzt.

Also mit inkscape oder einem anderen Vector fähigen Malprogramm und sei es LibreOffice Draw.

Die Render engines können Ästhetik nicht.


Wird der "Rank" der Verbindungen in der SVG mit gespeichert?

himitsu 12. Jun 2021 10:43

AW: Graphviz - manuell Positionieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
In DOT ist die Sortierung/Reihenfolge oft halbwegs OK (so lange ich die restlichen ungerichteten Edges nicht einfüge),
aber hier ist auch alles am Weitesten verteilt, so dass man nichts mehr lesen kann, sobald man rauszoomt, um alles zu sehen.

OSAGE ist zwar schön kompakt, aber erkennen tut man nichts mehr, auch wenn die Texte lesbar sind,
wobei hier die Breite sogar noch schmaler werden könnte, da eigentlich nicht alle "breitesten" Nodes gemeinsam in einer Reihe wären.



Im Prinzip OSAGE, aber noch mit einer besseren Reihenfolge
und falls das mit der Anordnung der Cluster nicht passt, dann die noch bissl manuell umherschupsen. (aber bei subgraph/cluster kann POS nicht angegeben werden)


Ein "anderes" Graphikpformat/-programm wäre auch OK,
wenn man dort die Gruppen/Cluster manuell umherschiebt (vielleicht vorher schon eine grobe Position angeben)
und wenn man das irgendwie automatisch generieren könnte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz