Итак, пишу 3d редактор и задумался об откатке действий назад и вперед. Как сделать такое?
Думал, может хранить список со структурой:
THistory = record
State:byte;
x,y,z:single;
// здесь все необходимые данные для свершения действия в state
end;
ADD_Vertex=0;
DELETA_Vertex=1;
И при откатке назад делать противоположное действие, а когда нужно идти вперед то что в state?
Паттерн команда
Такое чувство, как будто этот паттерн придумал Капитан Очевидность
innuendo
Спасибо!
JohnSmith я тоже самое выше описал,только там все в строках, а у меня в структурах
,так легче выбивать информацию, так что...
Vorotnyak_Nazar
> а у меня в структурах
Должно быть в объектах. Как ты на структурах будешь сохранять действия для которых нужны принципиально разные данные?
>Как ты на структурах будешь сохранять действия для которых нужны принципиально разные данные?
Все необходимые данные запишу в структуру,а использовать буду только те которые необходимо. Будет жрать больше оперативки, редактор итак делаю для себя.
Vorotnyak_Nazar
> Все необходимые данные запишу в структуру,а использовать буду только те которые необходимо
Мегаструктура на все случаи жизни?
Это же неудобно. Запаришься с тем, какие параметры где нужны, а какие нет. К тому же будет мешанина из методов (или просто процедур), которые будут на основе этих структур откатывать и возвращать текущее положение вещей.
> Будет жрать больше оперативки
Думаю, здесь это далеко не главный минус
> редактор итак делаю для себя.
Вот именно! Для себя любимого! Если планируется редактор сваять по-быстрому и без особых заморочек, то, конечно, на многое можно забить.
Но если уж ты задумался о поддержке Undo/Redo, то это не очень похоже на "сваять по-быстрому".
К реализации такой фичи нужно подходить очень внимательно и ответственно, так как она затрагивает практически ВСЕ части редактора.
Тема в архиве.