AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Denkanstoß: Wie Verbindungen besser darstellen?

Ein Thema von silver-moon-2000 · begonnen am 18. Aug 2014 · letzter Beitrag vom 20. Aug 2014
Antwort Antwort
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
454 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Denkanstoß: Wie Verbindungen besser darstellen?

  Alt 19. Aug 2014, 08:50
Zudem würde ich auch die Verbindungen um die Blöcke herum führen. Im einfachsten Fall über 90° Winkel, schöner sind aber immer Kurven (MSDN-Library durchsuchenPolyBezier)
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.588 Beiträge
 
Delphi 12 Athens
 
#2

AW: Denkanstoß: Wie Verbindungen besser darstellen?

  Alt 19. Aug 2014, 08:56
Bei Kurven lassen sich Kreuzungen aber noch schwerer berechnen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: Denkanstoß: Wie Verbindungen besser darstellen?

  Alt 19. Aug 2014, 09:27
Mir scheint das eine schwierige Aufgabe. Ist ja schon gesagt worden.
Ich kann hier sicher keine brauchbare Theorie / Verfahren liefern, nur mal ein paar Assoziationen, die vlt dienlich sind.

Zunächst:
Die Aufgabe ist unabhängig von den verwendeten Darstellungskomponenten komplex. Und lohnt daher auch so betrachtet zu werden.

Das angehängte Bild erinnert mich nicht so sehr an eine Ablaufsteuerung, sondern mehr an ein Platinenlayout. Sowas kenne ich zumindest als Betrachter von einem Bekannten. Beim Platinenlayout gibt es immer die nette Hürde, dass Leiterbahnen sich nicht kreuzen können / dürfen, leicht vorstellbar.
Im Bild wäre die schon bei lediglich 2 Komponenten der Fall (rosa und grün), sofern die Andockpunkte nicht verschoben werden können. (Hier unklar)
Um im Bild des Platinenlayouts zu bleiben (sowas Reales hilft mir immer), müsste hier durchkontaktiert werden auf eine andere Platinenebene.

Für die visuelle 2D Darstellung hilft das zunächst jedoch nicht. Das wäre ggF. über Transparenzgrade darstellbar und Darstellungskonventionen wie -Querung immer 90°, -mit spezifischem Symbol, ..
Da spielt m.E. auch die Frage rein, wie intelligent man die Elemente und Verbindungspunkte positioniert, Gewichtung nach Anzahl der Verbindungen, je mehr desto zentralere Position, bewegliche Andockpunkte, ..

Wahrscheinlich ist ein beliebiger Ablauf zunächst eine n dimensionale Matritze, die mathematisch optimierbar ist. Das geht dann aber auch schon Richtung Qualität des Ablaufmodells.
Gruß, Jo
  Mit Zitat antworten Zitat
Sailor

Registriert seit: 20. Jul 2008
Ort: Balaton
112 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Denkanstoß: Wie Verbindungen besser darstellen?

  Alt 19. Aug 2014, 13:43
Grundlagen zum Thema findest Du unter dem Stichwort "Planare Graphen". Unter http://nyssen.blogspot.hu/2010/12/dr...-treasure.html findest Du was bei GEF. Wenn Du offline zeichnen kannst, empfiehlt sich GraphViz. Die Ansteuerung ist simpel. Ich weiß nicht, ob das Ding eine API hat. Die Bilder sind recht brauchbar. In Wikipedia findest Du eine Einführung unter "Graphzeichnen". Wenn Du es selbst implementieren willst oder mußt: Es ist ein ziemlicher Brocken.
  Mit Zitat antworten Zitat
silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#5

AW: Denkanstoß: Wie Verbindungen besser darstellen?

  Alt 19. Aug 2014, 16:20
Hallo,

erstmal danke für die zahlreichen Antworten (die Arbeit hat mich nicht eher gehen lassen wollen, ich komme gerade erst zurück, hatte also keine Zeit, früher zu antworten)

Ich würde sehr dazu raten alles selbst zu zeichnen, auch die Blöcke. [...] Dann hast du eine sehr viel schönere Darstellung und die volle Kontrolle.
Ich muss gestehen, daran habe ich bisher noch gar nicht gedacht. An der "schöneren Darstellung" darf gezzweifelt werden (zumindest bei meinen designerischen Fähigkeiten ), aber sonst...
<Selbstgespräch>Das Bewegen der Blöcke wird etwas schwieriger werden und die verschiedenen Klick-Operationen erfordern etwas mehr Koordinaten-Panscherei, aber das alles sollte machbar sein...</Selbstgespräch>
Zumindest hätte es den Vorteil, wenn alles gezeichnet ist, dass ich, wenn alle anderen Stricke reißen, einfach die Verbindungen über die Blöcke drüber malen kann. Sieht dann zwar nicht hübsch aus, aber wenigstens man erkennt die Verbindungen, denn...

[...] Sowas hab ich mal für eins meiner unvollendeten Hobbyprojekte programmiert. Es war eine A*-Implementierung mit einer Gewichtungsfunktion, die verschiedene Kriterien miteinbezog, z.B. Länge des Weges, Anzahl der Richtungswechsel, Anzahl der Kreuzungen mit anderen Verbindungen etc. [...]
Grundlagen zum Thema findest Du unter dem Stichwort "Planare Graphen". [...] In Wikipedia findest Du eine Einführung unter "Graphzeichnen". Wenn Du es selbst implementieren willst oder mußt: Es ist ein ziemlicher Brocken.
Ich mache viele so Dinge immer mit MS Visio und auch wenn da das Routing immer mal wieder nicht das macht, was ich will so ist es doch ziemlich ausgereift und schnell. Aber da stecken glaube ich Jahre an Erfahrung drinne und das kann man glaub ich nicht auf die schnelle elegant und performant (wie ja auch namenloser schon sagt) hinbekommen.
Mir scheint das eine schwierige Aufgabe. Ist ja schon gesagt worden.
Wie hier übereinstimmend festgehalten wird, habe ich mir da doch einen ziemlichen Brocken aufgeladen, zumindest wenn ich es "richtig" bzw. in aller Kompelxität lösen will. Mit anderen Worten: Simples Strippenziehen kann zu einer wahren Kunst werden.

Da ich jedoch mich selbst, meinen Ehrgeiz und meinen Durchhaltewillen kenne , werde ich mich wohl lieber auf die Suche nach einer einfacheren Möglichkeit machen.

Zudem würde ich auch die Verbindungen um die Blöcke herum führen. Im einfachsten Fall über 90° Winkel, schöner sind aber immer Kurven (MSDN-Library durchsuchenPolyBezier)
[...]Eine recht einfache Möglichkeit wäre, statt direkter Verbindungen rechtwinklige Verbindungen (oder vielleicht sogar Splines) zu nehmen. Sieht meistens einfach ordentlicher aus (wenn man sich zumindest ein bisschen Mühe bei der Platzierung der Elemente gibt). [...]
Einspruch Euer Ehren! Kurven (Bezier/Spline) sind grauenhaft! Aargh! Rechte Winkel sind das einzig Wahre Kurven sehen immer so "unaufgeräumt" aus (aber vielleicht hat das auch mit meinem mangelnden ästhetischen Empfinden und Designvermögen zu tun )

Ihr sagt aber beide, dass es eine einfachere Möglichkeit gibt, Blöcke mit rechtwinkligen Verbindungen zu verbinden, als einen vollen Weg-Such-Algo darauf loszulassen. Dazu muss ich mir mal Gedanken machen.

Das Dumme ist allerdings bei mir (anders als bei Dir @Namenloser?), dass sich meine Verbindungen in alle Richtungen erstrecken können und nicht "nur" von links nach rechts wie in Deinem Beispiel... mal sehen...

[...]Das angehängte Bild erinnert mich nicht so sehr an eine Ablaufsteuerung, sondern mehr an ein Platinenlayout. Sowas kenne ich zumindest als Betrachter von einem Bekannten. Beim Platinenlayout gibt es immer die nette Hürde, dass Leiterbahnen sich nicht kreuzen können / dürfen, leicht vorstellbar. [...]
Das Dumme daran ist nur, dass "gute" Platinen immer von einem Menschen handgeroutet werden müssen, weil der Autorouter (wo wir wieder beim Wege-Such-Algo sind) bei komplexeren Layouts nur Müll produziert. Und in halbwegs brauchbaren Autoroutern steckt so viel gesammelte Intelligenz drin, dass mir beim Gedanken dran schon schwummrig wird.
Trotzdem:

Daher würde ich eine Lösung Vorschlagen, die es auch in Visio gibt. Zusätzlich zum automatischen Connector/Verbinder (der autom. geroutet wird) gibt es da auch eine Bibliothek mit verschiedenen rechwinklingen Verbindern für jede Situation (oben raus -> links rein, unten raus -> oben rein, usw.).
Diese Verbinder haben auf jeder Kante einen "Pack an" über den man die Kanten verschieben kann.

Vielleicht wäre eine solche Verbinder-Bibliothem mit verschiebbaren Kanten schneller aufgebaut als ein komplexer Routing-Algo. erstellt werden kann.
Das wäre durchaus eine Idee wert. Ich kenne solche Verbinder zwar nicht von Visio, aber von ePlan (CAE-Software für z.B. Schaltpläne) weiß ich, was Du meinst.

Ich muss gestehen, die Lösung gefällt mir eigentlich recht gut. Ich weiß zwar noch nicht, wie ich dann die einzelnen Blöcke informiere, dass eine Verbindung zwischen ihnen hergestellt ist, aber da wird mir noch was einfallen, hoffe ich.

Also gut, ich nehme aus den Posts das Folgende mit:


- "Gemischt" zu arbeiten, d.h. die eine Hälfte als Componenten auf die Form zu klatschen und dazwischen einfach Linien zu zeichnen ist suboptimal. Besser alles aus einem Guss. Und da es keine drei dreh- und bewegbaren Linien-Komponenten gibt, werde ich wohl alles zeichnen...

- Es gibt anscheinend kein allgemeingültiges Patent-Rezept, wie man am besten und einfachsten schöne Verbindungen zwischen zwei Punkten zieht, außer, dass es beliebig kompliziert werden kann. Gut gefallen hat mir jedoch das manuelle Routen mitHilfe von rechtwinkligen Verbindern

Ich danke allen für die Beteiligung. Ich werde mich jetzt erst einmal zum Denken zurückziehen, das soll Euch aber nicht davon abhalten, weiterhin gute Ratschläge zu geben
Tobias
Bitte nicht hauen , ich weiß es nicht besser
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
454 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Denkanstoß: Wie Verbindungen besser darstellen?

  Alt 19. Aug 2014, 21:29
Und für alle die es nicht kennen hier auch noch der Verweis auf Mindstorms EV3 und LabView. Verdrahten wird zum großen Teil dadurch verhindert, das die einzelnen Module direkt aneinander gesteckt werden.
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: Denkanstoß: Wie Verbindungen besser darstellen?

  Alt 20. Aug 2014, 07:35
Ich würde mir persönlich mal überlegen, was Du da machst: Die Verbindungen sind ja nicht der zentrale Punkt, sondern der Graph an sich. Ergo würde ich mir auch keine Gedanken über irgendwelche Verbindungsbibliotheken machen, damit das irgendwie hübsch aussieht. Beim Leiterplattendesign geht es ja gerade um die Verbindungen, und da ergibt das Sinn, aber bei dir eben nicht.

Ich kann mich dunkel daran erinnern, das die Entflechtungsalgorithmen, die die Teile umplazieren um überkreuzungen zu minimieren, nicht sonderlich schwer sind (Brute Force, soweit ich weiss), aber ich finde auf die Schnelle keinen Link (und ich kann mich auch irren).

Ich würde also eher so einen Algorithmus suchen und den einbauen. Beim Erstellen der Verbindungen mit der Maus würde ich jedoch keine direkte Linie verwenden, sondern eine, die nur aus senkrechten und waagerechten Linien besteht und möglichst wenig Ecken hat.

Vielleicht bringt es was, sich deine Leinwand als z.B. 100x100 Matrix vorzustellen und jede Zelle ist entweder eine Linie (senkrecht, waagerecht, Ecke) oder Teil eines Bausteins (Anschlusspunkt, sonstiges). Und schon kannst Du sehr sauber 'zeichnen'. Mit einem Algorithmus, der den 'optimalen' Weg von A nach B findet, solltest Du beim Layouten schon weit kommen. Die Regeln sind klar: Jede Ecke kostet und das überkreuzen auch.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz