signalflowgrapher
signalflowgrapher copied to clipboard
Verschieben der Zeichenfläche und undo/redo
Vorgehen:
- Graph erzeugen (Bsp: Graph g2.json laden)
- Graph mit der Operation
Graph transposition
transponiert - Verschieben der Zeichenfläche (mit Mouse-Down)
- Undo
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.
@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:
- Erzeugen eines Graphen mit zwei Knoten und einer Kante
- Löschen der Kante (über den Button Remove)
- Verschieben der Zeichenfläche
- Undo
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.
@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.
@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).
Das könnte auch issue #10 lösen.