signalflowgrapher icon indicating copy to clipboard operation
signalflowgrapher copied to clipboard

Verschieben der Zeichenfläche und undo/redo

Open hanspi42 opened this issue 4 years ago • 4 comments

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 avatar Sep 17 '20 06:09 hanspi42

@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 avatar Sep 17 '20 07:09 hanspi42

@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 avatar Sep 17 '20 07:09 hanspi42

@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 avatar Sep 17 '20 07:09 hanspi42

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

hanspi42 avatar Sep 17 '20 07:09 hanspi42