hanspi42 / signalflowgrapher

This Python tool allows you to draw signal-flow graphs, calculate transfer functions (SymPy code is generated for further use in Jupyter notebooks), do graph manipulations (e.g., node elimination and graph transposition), and save a graph as TikZ for use in LaTeX documentation.
Artistic License 2.0
30 stars 6 forks source link

Verschieben der Zeichenfläche und undo/redo #5

Open hanspi42 opened 3 years ago

hanspi42 commented 3 years ago

Vorgehen:

  1. Graph erzeugen (Bsp: Graph g2.json laden) image1
  2. Graph mit der Operation Graph transposition transponiert
  3. Verschieben der Zeichenfläche (mit Mouse-Down)
  4. Undo image2

Die Stützstellen der Spines werden nicht richtig zurückgesetzt, aber es sind nicht einfach die alten Positionen, denn sonst würde der resultierende Graph anders aussehen. Es sieht aus wie wenn die Stützstellen durch das Undo in die falsche Richtung verschoben werden.

g2.zip

hanspi42 commented 3 years ago

@dgruntz commented:

Das ist nicht ein Problem der Operation Graph transpose sondern ein Problem des Verschiebens der Zeichenfläche und undo/redo falls in den Operationen absolute Positionen gespeichert werden.

Beispiel:

  1. Erzeugen eines Graphen mit zwei Knoten und einer Kante i1
  2. Löschen der Kante (über den Button Remove)
  3. Verschieben der Zeichenfläche
  4. Undo i2

Ich habe eben diese beiden Graphen vor dem Verschieben und nach dem Verschieben gespeichert.

Vor:

{
    "nodes": [
        {
            "id": "eab72ffbe4ae488bb4f0e1bd940cbf3f",
            "label_dx": 0,
            "label_dy": 30,
            "name": "",
            "x": 225,
            "y": 189
        },
        {
            "id": "8720b7f971ca4cc181faefdb4acf35f9",
            "label_dx": 0,
            "label_dy": 30,
            "name": "",
            "x": 375,
            "y": 189
        }
    ],
    "branches": [
        {
            "id": "8eda363a4df04a09b8d8f302cc893d99",
            "weight": "",
            "start": "eab72ffbe4ae488bb4f0e1bd940cbf3f",
            "end": "8720b7f971ca4cc181faefdb4acf35f9",
            "label_dx": 0.0,
            "label_dy": 30.0,
            "spline1_x": 158.0,
            "spline1_y": 78.0,
            "spline2_x": 158.0,
            "spline2_y": 78.0
        }
    ]
}

Nach:

{
    "nodes": [
        {
            "id": "eab72ffbe4ae488bb4f0e1bd940cbf3f",
            "label_dx": 0,
            "label_dy": 30,
            "name": "",
            "x": 83,
            "y": 78
        },
        {
            "id": "8720b7f971ca4cc181faefdb4acf35f9",
            "label_dx": 0,
            "label_dy": 30,
            "name": "",
            "x": 233,
            "y": 78
        }
    ],
    "branches": [
        {
            "id": "8eda363a4df04a09b8d8f302cc893d99",
            "weight": "",
            "start": "eab72ffbe4ae488bb4f0e1bd940cbf3f",
            "end": "8720b7f971ca4cc181faefdb4acf35f9",
            "label_dx": 0.0,
            "label_dy": 30.0,
            "spline1_x": 158.0,
            "spline1_y": 78.0,
            "spline2_x": 158.0,
            "spline2_y": 78.0
        }
    ]
}

d.h. die Knoten wurden verschoben, aber die Stützpunkte beim Branch wurde nicht geändert, und das führt (irgendwie) zum Problem.

@einfach3 , @naaeef: Was haben die Werte sprline1_x etc für eine Bedeutung? Sind das relative Werte oder absolute Werte? Falls relativ : Zu was werden sie addiert?

Damit der Ansatz funktioniert müssen alle Werte, welche in den Operationen gespeichert werden, relativ sein.

hanspi42 commented 3 years ago

@einfach3 commented:

Die Positionen der Kontrollpunkte/Splines werden absolut gespeichert. Das Verschieben der Zeichenfläche verändert die Position jeder Node und die Positionen der Kontrollpunkte - es wird kein Offset für die Zeichenfläche genutzt. Daraus ergibt sich das beschriebene Problem, dass eine Undo Operation nach dem Verschieben noch die Werte der Kontrollpunkte vor dem Verschieben der Zeichenfläche verwendet.

Dieses Problem sollte z.B. durch die Verwendung eines Offsets für die Zeichenfläche behoben werden können.

hanspi42 commented 3 years ago

@naaeef commented:

Das Offset könnte dann ebenfalls in die JSON-Datei gespeichert werden. So würde der Graph wieder an der gleichen Position angezeigt werden wie zuvor. Dadurch könnte man auch verhindern, dass ein Graph durch massives verschieben der Zeichenfläche verloren geht (müsste zuerst auf der Zeichenfläche gesucht werden, wenn die Datei neu geöffnet wird).

hanspi42 commented 3 years ago

Das könnte auch issue #10 lösen.