emf compound command

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo zusammen....

ich habe in meiner applikation ein kleines problem mit den emf commands:

ich erzeuge einen compound command:

Code:
		aniMatrixSubcommands = new CompoundCommand(
				CompoundCommand.LAST_COMMAND_ALL);

dann hänfe ich setCommands an:

Code:
			matrixCommand = new SetCommand(ed, scenePart,
					ScenePackage.eINSTANCE.getModel_AnimationMatrix(),
					aniMatrix);

                       aniMatrixSubcommands.appendAndExecute(matrixCommand);

und dann möchte ich sie noch auf den command Stack legen:

Code:
		Command aniMatrixCommand = aniMatrixSubcommands.unwrap();

		ed.getCommandStack().execute(aniMatrixCommand);

nur wird hierbei natürlich alles nochmal ausgeführt, obwohl die commands bereits gefeuert wurden! Wie kriege ich denn den command auf den stack, ohne alles nochmal zu executen?
 

Wildcard

Top Contributor
nur wird hierbei natürlich alles nochmal ausgeführt, obwohl die commands bereits gefeuert wurden! Wie kriege ich denn den command auf den stack, ohne alles nochmal zu executen?
Du sollst die Commands doch gerade vom CommandStack ausführen lassen und nicht vorher schon ???:L
 
G

Guest

Gast
der command bewegt ein objekt in einem 3d raum....jede kleinste veränderung der position benötigt einen eigenen setcommand...wenn ich die alle auf dem stack ausführe habe ich mehrere 100 davon, obwohl nur eine einzige relevant für undo/redo ist. Also wie z.b. eine spinnerbox togglen, da ist auch nur der letzte wert relevant, obwohl die anderen gefeuert werden müssen....
 

Wildcard

Top Contributor
Dann brauchst du eben spezielle Commands die Anfangsposition und aktuelle Position kennen und demenstprechend Undo/Redo implementieren.
Wie stellst du fest wann eine Manipulation beginnt und wann sie endet?
 

Wildcard

Top Contributor
Nein, denn du hast ja tatsächlich n sets die ausgeführt werden müssen.
Du betrachtest einige davon als logische Einheit, technisch gesehen sind sie aber keine.
Daher funktioniert auch das CompoundCommand nicht so wie du gerne hättest.
Du könntest alle Zwischenschritte in ein Compound packen und am Ende ausführen lassen, dann funktioniert undo und redo, aber das Objekt bewegt sich direkt von A nach B.
Die Logik nach der du suchst, ist eine Ebene höher angesiedelt (zum Beispiel GMF) und Out of Scope für EMF.
Nichts hindert dich daran ein zweites Command im Hintergrund zu basteln das nur von A nach B bewegt und das erst am ende ausgeführt wird. Dann hast du undo/redo.
 
G

Guest

Gast
das habe ich schon versucht...allerdings führt er dann das undo nicht richtifg aus....ich forsch da mal...
warum ein bereits ausgeführter command nochmal ausgeführt, ist ,mir allerdings rätzelhaft....
 
G

Guest

Gast
genau...haha...dann muss ich ne delta matrix ausrechnen....juhu
 
G

Guest

Gast
aber wenn ich doch appendandEXECUTE aufrufe, dann is der setC. dpch executed...und das frägt der beim erneuten execute nicht ab?
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben