Laden...

Beste Möglichkeit für 2D Darstellung von Bordnetzen + Interaktion (Brushing & Linking)

Erstellt von marcial187 vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.444 Views
M
marcial187 Themenstarter:in
56 Beiträge seit 2012
vor 7 Jahren
Beste Möglichkeit für 2D Darstellung von Bordnetzen + Interaktion (Brushing & Linking)

Hallo zusammen,

ich habe eine relative spezielle Anforderung und auch nach häufigem Recherchieren bin ich hier noch nicht auf einen guten Lösungsansatz gekommen. Das ist sicherlich auch meiner geringen Erfahrung im Thema 2D-Programmierung geschuldet.

Konkret möchte ich Bordnetze (also einfach gesagt Kabel+Stecker) im 2D vereinfacht darstellen.

Das heißt zunächst einmal:

  • Elektrische Komponenten sind simple Rechtecke.
  • Leitungen sind Linien.

Wichtig sind folgende Funktionalitäten:

  • Zooming & Panning
  • Brushing & Linking, d.h. wenn ich auf ein Rechteck klicke, wird das Objekt grafisch hervorgehoben & mir in der GUI an anderer Stelle der Datensatz hinter dem grafischen Objekt angezeigt.

Größenordnung der Daten:

  • Elektrische Komponenten im 1000er Bereich
  • Leitungen im 1000er Bereich

Angefangen habe ich einfach mal alle Daten einzulesen und diese Daten dann in eine ImageBox zu zeichnen. Das klappt von Performance-Seite her sehr gut.

private void Img_Paint(object sender, PaintEventArgs e)
        {
            // references to object we will use
            Graphics graphicsObject = e.Graphics;

            // Nodes = Rectangle:
            for (int i = 0; i < lstNodes.Count; i++)
            {
                DrawingNode dn = lstNodes[i];
                graphicsObject.DrawRectangle(Pens.Black, dn.x, dn.y, 3f, 3f);
            }
            // Segments = Lines:
            for (int i = 0; i < lstSegments.Count; i++)
            {
                DrawingSegment ds = lstSegments[i];
                graphicsObject.DrawLine(Pens.Black, ds.x1, ds.y1, ds.x2, ds.y2);
            }
            return;
        }

Jetzt geht es aber erst richtig los, denn nun muss ich oben genannte Funktionalitäten umsetzen.

Die beiden Tutorials [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox) und [Tutorial] Gezeichnete Objekte mit der Maus verschieben habe ich mir zu Gemüte geführt bzw bin gerade dabei.

Meine Fragen:

Ist der Ansatz in Ordnung, gibt es hier nennenswerte, bereits vorgefertigte Bibliotheken oder bestimmte Wege, die man gehen sollte?

Vielen Dank im Voraus und viele Grüße!

Edit: Das ganze findet in WinForms statt. Ich finde auf den ersten Blick erstaunlich viel zu dem Thema in WPF, aber ich möchte das ganze später als Modul in ein größeres WinForms Programm integrieren und habe keinerlei WPF Erfahrung.

6.911 Beiträge seit 2009
vor 7 Jahren

Hallo marcial187,

Ich finde auf den ersten Blick erstaunlich viel zu dem Thema in WPF, aber ich möchte das ganze später als Modul in ein größeres WinForms Programm integrieren und habe keinerlei WPF Erfahrung.

Ich rate dir dich bei dem Thema mit WPF zu beschäftigen. Eine Integration in ein WinForms-Programm ist auch mit WPF möglich.

Mit WPF sehe ich hier v.a. aufgrund der Bindungsmöglichkeiten Vorteile.
Brushing und Linking bekommst du dabei fast geschenkt. Hervorhebung per Trigger und Style, Linking geschieht intern durch den Bindungsmechanismus.

Dass für die Darstellung von (ich vereinfache mal) el. Schaltungen mit WPF (od. WinForms) nichts gibt wundert mich aber ein wenig.

Vllt. kannst du dich von MVVM Diagram Designer und Circuit Diagram inspirieren lassen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

M
marcial187 Themenstarter:in
56 Beiträge seit 2012
vor 7 Jahren

Servus!

Vll habe ich auch nicht ausreichend recherchiert. Bei mir geht es zwar weniger um die elektrische Darstellung als um die Darstellung der Topologie elektrischer Komponenten samt Leitungsstränge, aber das lässt sich sicherlich übertragen.

Zwischenzeitlich bin ich schon etwas voran geschritten. Ich habe Zooming & Panning in einem kleinen "Prototypen" implementieren können und stecke nun beim Brushing & Linking, was prinzipiell dank den erwähnten Tutorials im Eingangsbeitrag kein Problem darstellt. Nur mit der Koordinatenumrechnung bei verschobenem / skalierten Koordinatensystem tue ich mir grade noch etwas schwer 😉

Mir ist vor Allem wichtig, dass mein Ansatz an sich in die richtige Richtung geht. Vielen Dank für deinen Hinweis zwecks WPF. Vor WPF schrecke ich eig. etwas zurück, da ich bis jetzt kaum Berührungspunkte hatte, unter gewissem Zeitdruck liege und mich dann nochmal on-top komplett in WPF (und die Einbettung in eine WinForms Applikation) einlesen müsste. Ich werde es mir aber überlegen.