Wizualizacja połączeń na urządzeniach

0

Cześć, tworze skrypt do wizualizacji połączeń pomiędzy portami. Wydawało mi się to proste i przyjemne, ale wchodząc w temat uświadomiłem sobie, że takie nie jest. Proszę was o pomoc, jakieś podpowiedzi w jakiej gałęzi matematyki albo wzorów projektowych czy może są jakieś algorytmy na takie rozwiązanie.
Graficznie działa mi to teraz w Tkinter na Pythonie 2.7 i w tym pythonie raczej powinno zostać, chyba, że jest jakaś biblioteka w 3.x.
Logicznie działa to obecnie na zasadzie algorytmu BFS, żeby znaleźć najbliższą drogę i rozsuwać poszczególne ścieki, ale wydaje mi się, że to błędna droga.

Jak to powinno działać:
-Pokazać połączenie portów (kwadratów) na urządzeniach w sposób ładny ( aby dało się czytelnie prześledzić drogę od portu do portu i w miarę ładnie, jak najmniej przecięć i żeby były w miarę proste kreski)
-połączenia zawsze idzie od portu górnego do dolnego na drugim urządzeniu
-kolorki losowo dla połączenia (a może dla urządzenia, nie wiem co czytelniejsze będzie)
-połączenie nie powinno przechodzić przez urządzenie
-rozmieszczenie urządzeń jest generowane losowo na siatce(ilość pionowych i poziomych w relacji 1:1, jeżeli się da) a ich wielkość i ilość portów się zmienia

Proszę więc o pomoc we wskazaniu drogi w którym kierunku iść, aby udało się coś takiego zrobić
PS: jestem samoukiem więc jak to było gdzieś na studiach to sorry ale nie wiem

2

Generalnie moim zdaniem powinieneś się zastanowić czy za pomocą np. Graphviza nie udałoby ci się tego zwizualizowac

bo wystarczyłoby abyś wygenerował kod graphviza i za jego pomocą wygenerował wizualizacje

zabawka na: GraphvizOnline

digraph G {

  subgraph cluster_0 {
    style=filled;
    color=lightgrey;
    node [style=filled,color=white];
    a0 -> a1 -> a2 -> a3;
    label = "process #1";
  }

  subgraph cluster_1 {
    node [style=filled];
    b0 -> b1 -> b2 -> b3;
    label = "process #2";
    color=blue
  }
  start -> a0;
  start -> b0;
  a1 -> b3;
  b2 -> a3;
  a3 -> a0;
  a3 -> end;
  b3 -> end;

  start [shape=Mdiamond];
  end [shape=Msquare];
}

czy po prostu

digraph G {
  start -> a0;
  start -> b0;
  a1 -> b3;
  b2 -> a3;
  a3 -> a0;
  a3 -> end;
  b3 -> end;

  start [shape=Mdiamond];
  end [shape=Msquare];
}

I jego wizualizacja wyglądałaby tak:

screenshot-20220126000418.png

screenshot-20220126000644.png

0

Narzędzie bardzo fajne, tylko tutaj połaczenie leci bezpośrednio z węzła do węzła. W moim przypadku pomiędzy urządzeniami powstało by zbyt wiele przecinających się linii, ponieważ takich połączeń będzie bardzo dużo

1 użytkowników online, w tym zalogowanych: 0, gości: 1