Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 10
.NET 4.x

Редактор графов (операции undo/redo)

31.10.2013, 23:03. Показов 4521. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Студент, реализую редактор графов. Уже возможно добавлять вершины и ребра, удалять их, и выводить результат работы алгоритма дейкстры (проект прилагается). Теперь когда можно вывести результат работы алгоритма хотелось бы реализовать операции undo redo. В классе graph_view есть два списка edgeList и TopList где хранится информация о ребрах и вершинах соответственно. Гугл не помог, так как не могу разобрать как использовать примеры. Хотелось бы получить помощь от форумчан, так как проблемы со здоровьем, голова уже не варит, а лабу сдавать нужно =( http://wpftutorial.net/UndoRedo.html - нагуглил, у меня используется паттерн mvvm в классе property_base, но вот не могу разобраться как испоьзовать код с примера, хотелось бы получить помощь в написании самих функций undo redo для обновления списков и перерисовки вершин и ребер на canvas-e. Заранее спасибо за помощь!
ссылка на проект: graph_edit_1.rar
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.10.2013, 23:03
Ответы с готовыми решениями:

Создание функции Undo/Redo
Здравствуйте, создаю редактор графов на WPF, нужно сделать функцию Undo/Redo, прочитал что это можно сделать через стеки, но не пойму как...

Отмена\возвращение последнего действия на холсте (Undo\Redo) InkCanvas
Доброго дня. Я создаю маркирующую программу по типу Epic Pen, взяв исходники здесь (эта программа является прототипом первой). И я...

Undo и Redo C# 2005
привет всем. я работаю над текст-м редактором. надо сделать так, чтобы операция отмены действия Undo (); работала с текстом скажем так...

8
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
31.10.2013, 23:13
паттерн "хранитель" тебе в помощь
1
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 10
01.11.2013, 01:20  [ТС]
Цитата Сообщение от Jupiter Посмотреть сообщение
паттерн "хранитель" тебе в помощь
А можно ссылочку с примером где используется паттерн Memento для случая когда при выполнении оперций undo/redo возвращаются старые элементы списка, а то мне гугл не очень хочет помогать
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
01.11.2013, 12:14
Примерный подход таков (у нас в системе так, и считаю это грамотным):
- Имеется общий менеджер команд. Хранит в себе историю выполненных команд.
- Имеются классы команд. Команда такая, команда сякая, команда этакая.
- Имеется контекст команд. Вызов происходит в конкретном контексте.
То есть:
C#
1
2
3
Command = (что-то, в зависимости от действий пользователя, на что он нажал)
Context = (что-то, в зависимости от состояния данных, к чему применяется)
MainCommandManager.Execute(Command, Context);
Что происходит внутри Execute? В некотором хранилище команда и контекст сохраняются.
Сама команда должна уметь выполняться в зависимости от контекста:
C#
1
2
3
4
5
6
7
class MyCommand: ICommand 
{
   public Execute(COntext)
   {
      // выполняем - что-то делаем с контекстом
   }
}
Если поддерживать undo, то это должна уметь тоже команда:
C#
1
2
3
4
5
6
7
class MyCommand: ICommand 
{
   public Undo(COntext)
   {
      // выполняем - что-то делаем с контекстом
   }
}
Вызов будет:
C#
1
2
MainCommandManager.Undo();
MainCommandManager.Undo();
Поскольку менеджер в себе хранит команды и контексты, он сам разберётся, что откуда брать.
Хранилище типа стека - то есть внутри менеджера имеется указатель на текущую команду, при Undo он сдвигается назад, Redo - вперёд.
Если после Undo пользователь выполнил иную команду, весь последующий "хвост" сбрасывается. Потому что иначе будут проблемы - с изменёнными данными. Можно попробовать разруливать, конечно, но это сложно.

Вот как-то так. Удачи.
WPF тут, кстати, ваще не при чём
1
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 10
02.11.2013, 03:49  [ТС]
Благодарю за ответ, но вы и как и предидущий человек, который мне ответил, предложили мне использовать паттерн, только на этот раз не Memento, а Command. Мне хотелось бы получить какой-то пример (ссылочку на него) немного связаный с моей реализацией, где при выполнении операций undo/redo изменялись бы елементы в 2-х списках (в моем случае - вершин и ребер). Но все равно спасибо, наверно все таки прислушаюсь к вам и буду использовать предложенный вами способ.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
02.11.2013, 10:40
Могу скинуть в понедельник, только там на Delphi.
Описания интерфейсов.
0
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 10
02.11.2013, 16:03  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
Могу скинуть в понедельник, только там на Delphi.
Описания интерфейсов.
Было-бы неплохо)
0
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 10
04.11.2013, 06:32  [ТС]
Вообщем, всем спасибо, кое-как разобрался, правда проблемы возникают при перемещении вершины, которая соединена ребром с другой , но, думаю, исправлю, основной принцип понял
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
04.11.2013, 09:00
Ну хорошо. А то сегодня запостить не могу, у нас выходной, панимашь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.11.2013, 09:00
Помогаю со студенческими работами здесь

Stack(); - undo/redo
На основе этого класса реализую возможность undo/redo в своей программе. Вопрос в следующем. Создаю объект Stack stackUndo = new...

UNDO\REDO
Дорогие формучане, подскажите, пожалуйста, как реализовать функцию UNDO\REDO (отмена\возврат действия). Мы с другом делаем простенький...

Undo/Redo
Здравствуйте, как реализовать в программе возможность отмены последних действий пользователя?

Undo, Redo
Можно в Builder создать Undo/Redo?

не работает undo/redo
Добрый день. При запуске макроса в Экселе перестают работать кнопки Undo и Redo. Кто знает как это исправить? Для примера добавлю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru