Графический векторный редактор

231
27 апреля 2018, 14:14

В вузе дали тему курсовой: Графический векторный редактор. Для реализации графики желательно использовать graphics.h и еще если понадобиться windows.h. Можно ли на данных библиотеках реализовать нужный функционал или же необходимо использовать что-нибудь по современнее.
В процессе написания возникли проблемы с некоторыми вещами:
1) Как реализовать редактируемые геометрические примитивы ( ломаная, прямоугольник, окружность, эллипс, отрезок, многоугольник, хотя бы просто понять как это реализовывается).
2) Как сделать кнопки открытия изображения и его сохранения.
3) Как сделать кнопки undo/redo.
4) В моем текущем коде рабочая область представляет собой фиксированную область внутри окна программы, то есть это просто залитый ( изначально белым цветом ) прямоугольник внутри окна.
Есть ли какие-нибудь книги которые смогут как-то направить меня или же помогут в написании подобного или посоветуйте что-нибудь если вы с чем-нибудь подобным сталкивались или просто готовы помочь. Буду благодарен каждому совету. Спасибо!

Ссылка на Google Drive архив с проектом

Answer 1
  1. Если не устраивает функция line, используйте Брезенхэма. Перечисленное далее всё строится из линий, например точки окружности, очевидно так:
  2. Для начала определитесь со структурой данных (это пункт 0), если по условию задачи вам не нужно генерировать настоящий векторный формат - сохраняйте любым, удобным для восстановления образом, в простой текстовый файл. Иначе - см. например тут

  3. Есть несколько вариантов, самая очевидная идея - иметь массив (стек) history, и делать push сгенерированного вектора в этот массив при каждом действии. Кнопка "UNDO", соответственно, делает pop, ложит полученное в стек redoHistory, отображает на экран последний вектор из оставшегося в стеке. Кнопка "REDO" делает то же самое со стеком redoHistory. При любом другом действии redoHistory очищается. Другой вариант - правильный, древовидный и рекурсивный, но например в Windows, функция Undo так обычно не умеет.

  4. Всё ок. Но если надо сильно по красоте и простоте, возьмите SDL или Allegro

  5. гугл покажет массу книг на тему графики на C++, но вы можете просто читать исходники и статьи с кодом

READ ALSO
сортировка односвязного списка C++

сортировка односвязного списка C++

помогите, пожалуйста, с сортировкой односвязного спискаесть структура студент, формат фамилия_имя_отчество_возраст_успеваемость

241
Проблема передачи указателя на строку

Проблема передачи указателя на строку

Передаю _TCHAR указатель в функцию

158
Решить С++ срочно надо [требует правки]

Решить С++ срочно надо [требует правки]

Решите пожалуйста 1)Дан двумерный массивПоменять местами вторую и четвертую строки 2)Все элементы массива, сумма индексов которых нечетна,...

162
Где в Linux взять таймер вызывающий события?

Где в Linux взять таймер вызывающий события?

Мне понадобился таймер который по истечению какого то времени вызывает событие, например std::functionВ Win32 API и в C# я очень часто использовал такие...

179