ФлеймФорумПрограммирование

История действий.

#0
14:36, 17 авг 2011

Итак, пишу 3d редактор и задумался об откатке действий назад и вперед. Как сделать такое?
Думал, может хранить список со структурой:
THistory = record
  State:byte;
  x,y,z:single;
  // здесь все необходимые данные для свершения действия в state
end;

ADD_Vertex=0;
DELETA_Vertex=1;

И при откатке назад делать противоположное действие, а когда нужно идти вперед то что в state?

#1
14:50, 17 авг 2011

http://en.wikipedia.org/wiki/Memento_pattern

#2
15:39, 17 авг 2011

Паттерн команда

#3
15:43, 17 авг 2011

Такое чувство, как будто этот паттерн придумал Капитан Очевидность

#4
15:50, 17 авг 2011

innuendo
Спасибо!
JohnSmith я тоже самое выше описал,только там все в строках, а у меня в структурах
,так легче выбивать информацию, так что...

#5
20:39, 17 авг 2011

Vorotnyak_Nazar
> а у меня в структурах
Должно быть в объектах. Как ты на структурах будешь сохранять действия для которых нужны принципиально разные данные?

#6
21:49, 17 авг 2011

>Как ты на структурах будешь сохранять действия для которых нужны принципиально разные данные?
Все необходимые данные запишу в структуру,а использовать буду только те которые необходимо. Будет жрать больше оперативки, редактор итак делаю для себя.

#7
23:48, 17 авг 2011

Vorotnyak_Nazar
> Все необходимые данные запишу в структуру,а использовать буду только те которые необходимо
Мегаструктура на все случаи жизни?
Это же неудобно. Запаришься с тем, какие параметры где нужны, а какие нет. К тому же будет мешанина из методов (или просто процедур), которые будут на основе этих структур откатывать и возвращать текущее положение вещей.
> Будет жрать больше оперативки
Думаю, здесь это далеко не главный минус
> редактор итак делаю для себя.
Вот именно! Для себя любимого! Если планируется редактор сваять по-быстрому и без особых заморочек, то, конечно, на многое можно забить.
Но если уж ты задумался о поддержке Undo/Redo, то это не очень похоже на "сваять по-быстрому".
К реализации такой фичи нужно подходить очень внимательно и ответственно, так как она затрагивает практически ВСЕ части редактора.

ФлеймФорумПрограммирование

Тема в архиве.