Skip to content

2b1g1c/OurPaint

 
 

Repository files navigation

OurPaint

Полное название приложения:

Система автоматизированного проектирования на двумерной плоскости с использованием QT и возможностью совместной работы “OurPaint”

Описание

Important

OurPaint — это система автоматизированного проектирования (САПР) на двумерной плоскости, разработанная с использованием фреймворка Qt. Она позволяет пользователям создавать и редактировать геометрические примитивы, такие как линии, точки и окружности. Программа поддерживает возможность совместной работы, что делает её подходящей для командных проектов.

Основные функции

  • Геометрические примитивы: Создание и редактирование базовых фигур (отрезки, точки, окружности).
  • Ограничения: Добавление различных ограничений между объектами (например, сделать линии параллельными или перпендикулярными, задать расстояния между объектами).
  • Вывод: Сохранение рисунков в формате .bmp, экспорт проектов в виде наборов инструкций для дальнейшего редактирования, вывод изображения на экран.
  • Совместная работа: Реализация серверно-клиентской модели для одновременной работы нескольких пользователей в реальном времени.
  • Отмена/Повтор: Возможность отменять и повторять действия.

Разработчики

В третьем семестре проект будут разрабатывать студенты 2-го курса Санкт-Петербургского Государственного Университета (СПбГУ), факультета Прикладной Математики — Процессов Управления (ПМ-ПУ), по программе Программирование и информационные технологии (ПиИТ):

  • Бычков Евгений
  • Скворчевский Тимофей
  • Осканов Ибрагим

Технологический стек

  • C++: Основной язык программирования.
  • CSS: Для стилизации пользовательского интерфейса.
  • STL: Библиотека шаблонов для работы с данными и алгоритмами.
  • Qt: Кроссплатформенный фреймворк для разработки программного обеспечения.
  • GTest: Библиотека для модульного тестирования
  • Собственные библиотеки:
    • BMPFile: Для работы с файлами формата .bmp.
    • UndoRedo: Управление функцией отмены/повтора действий.
    • Containers: Устаревший самописный класс контейнеров (рекомендуется минимизировать его использование).
  • Система контроля версий: 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 класс реализующий граф, необходим для оптимизации добавлений требований

Releases

No releases published

Packages

No packages published

Languages

  • C++ 98.5%
  • CMake 1.1%
  • Other 0.4%