Полное название приложения:
Система автоматизированного проектирования на двумерной плоскости с использованием QT и возможностью совместной работы “OurPaint”
Описание
Important
OurPaint — это система автоматизированного проектирования (САПР) на двумерной плоскости, разработанная с использованием фреймворка Qt. Она позволяет пользователям создавать и редактировать геометрические примитивы, такие как линии, точки и окружности. Программа поддерживает возможность совместной работы, что делает её подходящей для командных проектов.
- Геометрические примитивы: Создание и редактирование базовых фигур (отрезки, точки, окружности).
- Ограничения: Добавление различных ограничений между объектами (например, сделать линии параллельными или перпендикулярными, задать расстояния между объектами).
- Вывод: Сохранение рисунков в формате
.bmp
, экспорт проектов в виде наборов инструкций для дальнейшего редактирования, вывод изображения на экран. - Совместная работа: Реализация серверно-клиентской модели для одновременной работы нескольких пользователей в реальном времени.
- Отмена/Повтор: Возможность отменять и повторять действия.
В третьем семестре проект будут разрабатывать студенты 2-го курса Санкт-Петербургского Государственного Университета (СПбГУ), факультета Прикладной Математики — Процессов Управления (ПМ-ПУ), по программе Программирование и информационные технологии (ПиИТ):
- Бычков Евгений
- Скворчевский Тимофей
- Осканов Ибрагим
- C++: Основной язык программирования.
- CSS: Для стилизации пользовательского интерфейса.
- STL: Библиотека шаблонов для работы с данными и алгоритмами.
- Qt: Кроссплатформенный фреймворк для разработки программного обеспечения.
- GTest: Библиотека для модульного тестирования
- Собственные библиотеки:
- BMPFile: Для работы с файлами формата
.bmp
. - UndoRedo: Управление функцией отмены/повтора действий.
- Containers: Устаревший самописный класс контейнеров (рекомендуется минимизировать его использование).
- BMPFile: Для работы с файлами формата
- Система контроля версий: Git для управления кодом и совместной работы.
- CMake: кроссплатформенная утилита для автоматической сборки программы из исходного кода
- IDE: Microsoft Visual Studio / CLion.
- UI Design: Qt Creator для разработки интерфейса, Figma для проектирования дизайна.
- Контроль версий: Git (размещение на GitHub)
- Операционная система: Windows 7 или новее.
- Компилятор: Visual Studio (2017 год и новее) или MingW 8.1.
- Создание объектов (отрезок, точка, окружность).
- Создание требований для объектов (сделать отрезки параллельными, перпендикулярными, задать расстояние между отрезками, задать расстояние между точкой и отрезком, задать расстояние между точкой и точкой, задать расстояние между окружностью и отрезком,точкой, и так далее (список приведен ниже).
- Сохранение изображение в BMPFile.
- Сохранение проекта в виде набора инструкций(для дальнейшего быстрого открытия проекта уже с готовыми примитивами).
- Отрисовка проекта на рабочей области (под рабочей областью понимаем виджет приложения, в котором будет происходить отрисовка)
- Динамическое расширение или масштабирования(в случае фиксированного размера окна) рабочей области, в зависимости от проекта.
- Работа с командами пользователя (для создания примитивов, добавления требований, получения информации об элементе)
- Создания сервера для совместной работы.
- Возможность подключаться к совместной сессии
- Хранение геометрических примитивов и ограничений с использованием уникальных идентификаторов и описательной информации.
- Рабочая область: Область для рисования проекта.
- Командная строка: Поле ввода команд.
- Кнопки сервер/клиент: Кнопки для создания сервера и подключения к нему.
- Виджет создания примитивов: Виджет с перечнем доступных примитивов.
- Виджет добавления ограничений: Виджет для добавления ограничений.
До середины ноября:
- Функция addrequirement, отвечающая за добавления требований на объекты должна быть рабочей(попробовать реализовать алгоритм Левенберга — Марквардта, либо метод наименьших квадратов, так как алгоритм Ньютона-Гаусса ,вероятно, не подходит, ввиду невыполнения требований на количество переменных)
- Доработать функции сохранения информации о проекте:
- Придумать формат для сохранения информации об объектах
- Добавить функцию, которая бы умела считывать файл проекта и добавлять требования и примитивы из него.
- Переход от консольного приложения к приложению в окне, для чего потребуется:
- разделить приложение на вычислительный движок и движок отрисовки
- Разработать дизайн приложения
- Создать интерфейс приложения
- Скомпоновать вычислительный движок и QT-приложение
- Добавление возможности создавать сервер(для совместной работы). Для этого потребуется:
- Подумать над тем, на чьей стороне/сторонах проект происходить вычисления.
- Автоматическое открытие портов, чтобы была возможность присоединяться к сессии.
- Подумать над тем, как будет отображаться информация для совместной работы (имеется ввиду отображение действий других пользователей)
- Добавление возможности подключаться к серверу.
- Ветки на GitHub:
main
: Основная ветка релиза (требуется 3 одобрения pull request'ов).experimental-working-paint
: Основная ветка разработки (одобрения pull request не требуется).- Именные ветки для выполнения подзадач.
- Требования:
- ET_POINTSECTIONDIST - задание расстояния между точкой и отрезком.
- ET_POINTONSECTION - зафиксировать точку на отрезке
- ET_POINTPOINTDIST - задание расстояние между точками.
- ET_POINTONPOINT - зафиксировать точку на точке
- ET_SECTIONCIRCLEDIST - задание расстояния между отрезком и окружностью
- ET_SECTIONONCIRCLE - делает отрезок касательной к окружности
- ET_SECTIONINCIRCLE - делает отрезок хордой
- ET_SECTIONSECTIONPARALLEL - задает свойство параллельности для двух отрезков
- ET_SECTIONSECTIONPERPENDICULAR - делает два отрезка перпендикулярными
- ET_SECTIONSECTIONANGEL - задает угол между отрезками
- ET_POINTONCIRCLE - ставит точку на окружность
Файлы проекта:
Папка painter:
- paint.h/.cpp основной файл проекта, в котором описан class Paint, позволяющий реализовать работу с примитивами.
- BMPpainter.h/.cpp класс позволяющий удобно работать с классом bmp файл
- enum.h - файл с перечислениями всех возможных примитовов и требований
- objects.h/.cpp хранит классы примитивов
- requirement.h/.cpp классы, необходимые для реализации требований к объектам
Папка Matrix:
- matrix.h класс, реализующий матрицы
Папка graph:
- simpleGraph.h класс реализующий граф, необходим для оптимизации добавлений требований