Laden...

Graphics elemente (sechsecke) mit pfeilen verbinden/andocken

Erstellt von alimentos vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.330 Views
A
alimentos Themenstarter:in
2 Beiträge seit 2011
vor 12 Jahren
Graphics elemente (sechsecke) mit pfeilen verbinden/andocken

Hallo MyCsharp Community 😃

als stiller leser habe ich schon von vielen einträgen hier profitiert dafür erstmal an alle herzlichen dank !

nun sitze ich vor einem problem das ich leider nicht durch die suche oder googlen lösen kann (bis jetzt)

ich entwickle derzeit ein programm das einem uml editor ähnlich ist.
ich habe ein usercontrol auf das ich aus einem anderen usercontrol die mit Graphics gezeichneten elemente per drag & drop ziehen und verschieben kann
diese verschiedenen elemente (in diesem fall sechsecke) muss ich mit pfeilen verbinden können ( zb 6eck_1 ---->6eck_2) mir fehlt derzeit die logik wie ich die pfeile an den sechsecken "andocken" kann und die verbindung herstelle...

vielleicht hat einer von euch ne idee ??

anbei ein kleines beispielbild wie es aussehen soll das objekt der begierde ist der pfeil andockbar an 6eck_1 und 6eck_2 😃

PS: idealerweise sucht sich der pfeil selbstständig den sinnigsten weg.. also wenn weitere elemente im weg sind umgeht er sie 😃

Herzlichen dank schonmal

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo alimentos,

was genau ist dein Problem? Mit dem Enden der Linien genau die Ecken zu treffen? Da du die Sechsecke selber zeichnest, weiß du doch wo die Ecken sind. Ebenso weißt du bzw. bekommst du leicht heraus, welche Sechsecke bei einer direkten Verbindung im Weg sind. Am einfachsten ist es, rechtwinklig abknickende Linien zu verwenden, um Hindernisse zu umgehen oder um Sechsecke, die sich nicht auf geraden Linie zueinander befinden zu verbinden. Siehe Manhattan Routing.

herbivore

A
764 Beiträge seit 2007
vor 12 Jahren

Noch ein paar Ideen dazu:

Das SechseckPunkt-Objekt und das PfeilPunkt-Objekt könnten jeweils eine Referenz aufeinander haben. Wird dann eines der Objekte verändert, könnten die referenzierten Objekte mitverändert werden(falls notwendig).

Berechne die Entfernung zwischen dem Pfeil, der grade gezeichnet wird und einem SechseckPunkt in der Nähe (d-x + d-y). Wenn der Pfeil nah dran ist, snapt der an den Punkt dran.

225 Beiträge seit 2005
vor 12 Jahren

Interessant... ich muss eine ähnliche Aufgabe lösen wie Du... witzig.
Habe mich dazu entschieden eine fertige Bibliothek dafür zu nutzen, denn bis ich das alles implementiert habe, habe ich das Geld schon wieder 3 mal raus indem ich mir eine 3rd Party Library anschaffe. so etwas kostet ca. € 500-800.

Weiß jetzt allerdings nicht ob Du einen Schef hast der das auch einsieht oder für Dich privat ist. Ausserdem macht man so viele Fehler dabei, die durch eine 3rd PARTY Lib schon längst alle entdeckt wurden. Ausserdem bekommst eine große Menge an Feature geschenkt, an die Du wahrscheinlich noch gar nicht gedacht hast.

Allerdings musst Du Dich ein wenig durch die Demos durch bzw. einarbeiten.
Nur so als Tipp, vielleicht kommt das ja in Frage für Dich:

Essential Diagram for Windows Forms
FlowChart.NET
Diagram Components for .NET WinForms and ASP.NET WebForms

Auf den ersten Blick scheint der erste Link das zu sein was passen könnte...

A
alimentos Themenstarter:in
2 Beiträge seit 2011
vor 12 Jahren

hallo 😃

@herbivore rechtwinklig abknickende Linien klingt gut! danke für den hinweis mit Manhattan routing arbeite mich da grade rein.
es geht weniger darum das genau an den ecken die verbindung ist sondern das die verbindungslinie an das element angedockt ist und sich bei verschieben des elementes mitverschiebt (und das eben "logisch" so das es nicht andere elemente durchschneidet oder kreuz und quer über die arbeitsfläche wuselt)

@husky410
3rd Party Library die geld kostet ist nicht machbar. Das Projekt findet im rahmen einer Informatiker ausbildung statt und daher ist die bereitschaft dafür geld auszugeben eher..... gering 😃

danke trotzdem für die hinweise

PS: natürlich auch danke an Alf Ator für seinen hinweis 😃

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo alimentos,

das die verbindungslinie an das element angedockt ist und sich bei verschieben des elementes mitverschiebt

wenn du erstmal einen Algorithmus geschrieben hast, der automatisch einen Weg von A nach B findet, dann ist es doch kein Problem diesen jedes Mal aufzurufen, wenn sich die Position von B (oder A) verschiebt. Wie das Verschieben eines Objekts grundsätzlich geht, steht in [Tutorial] Gezeichnete Objekte mit der Maus verschieben.

herbivore