From 2b04a4bf1c505f1f536c882d357805a6162720c2 Mon Sep 17 00:00:00 2001 From: ParkSuMin Date: Thu, 25 Dec 2025 19:01:57 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20(1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Создание системного заголовочного файла с нужными переопределениями, структурами и макросами --- Canvas.h | 61 +--------------------------------------------- System.h | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 60 deletions(-) create mode 100644 System.h diff --git a/Canvas.h b/Canvas.h index b4857d1..a5a5909 100644 --- a/Canvas.h +++ b/Canvas.h @@ -1,56 +1,5 @@ #pragma once - -constexpr auto EPS = 1e-9; -constexpr auto ZOOM_STEP = 0.05; - -#define WIDGET_POSITION event->pos() -#define UCS_POSITION screenToLogical(WIDGET_POSITION) -#define CURVE_AS_LINE(CURVE) dynamic_cast(CURVE) -#define CURVE_AS_CIRCLE(CURVE) dynamic_cast(CURVE) - -#include -#include -#include -#include -#include -#include - -#ifdef _DEBUG -#include -#endif - -// GCS — геометрический солвер из FreeCAD -#include "GCS/Geo.h" -#include "GCS/GCS.h" -using namespace GCS; - -// =================================================================== -// Типы и перечисления -// =================================================================== - -/** - * @brief Режимы работы с холстом - */ -enum class Mode : int -{ - None = 0, ///< Режим отсутствия действия - DrawingLine = 1, ///< Режим рисования линии - Parallel = 2, ///< Режим задания параллельности - Coincedent = 3, ///< Режим задания совпадения точек - Horizontal = 4, ///< Режим задания горизонтальности - Vertical = 5, ///< Режим задания вертикальности - Perpendicular = 6, ///< Режим задания перпендикулярности - DrawingCircle = 7, ///< Режим рисования окружности - Tangent = 8 //< Режим задания касательности -}; - -/// Удобный тип для хранения пары параллельных линий (порядок не важен) -using LinePair = std::pair; - -/// Удобный тип для хранения пары точек (порядок не важен) -using PointPair = std::pair; - -using CurvePair = std::pair; +#include "System.h" // =================================================================== // Основной класс холста @@ -294,13 +243,5 @@ private: int constraints_count{ 0 }; ///< Счётчик ограничений (для тегов) // ====================== Информация о последнем ограничении ====================== - /** - * @brief Структура для хранения информации об ограничении - */ - struct ConstraintInfo { - Mode mode; ///< Тип ограничения - std::variant data; ///< Данные ограничения - }; - std::map C_Info; ///< Карта информации об ограничениях }; \ No newline at end of file diff --git a/System.h b/System.h new file mode 100644 index 0000000..0a0c6fb --- /dev/null +++ b/System.h @@ -0,0 +1,73 @@ +#pragma once +#define WIDGET_POSITION event->pos() +#define UCS_POSITION screenToLogical(WIDGET_POSITION) +#define CURVE_AS_LINE(CURVE) dynamic_cast(CURVE) +#define CURVE_AS_CIRCLE(CURVE) dynamic_cast(CURVE) + +// GCS — геометрический солвер из FreeCAD +#include "GCS/Geo.h" +#include "GCS/GCS.h" +using namespace GCS; + +#include +#include +#include +#include +#include +#include + + +#ifdef _DEBUG +#include +#endif + +constexpr auto EPS = 1e-9; +constexpr auto ZOOM_STEP = 0.05; + +// =================================================================== +// Типы и перечисления +// =================================================================== + +/** + * @brief Режимы работы с холстом + */ +enum class Mode : int +{ + None = 0, ///< Режим отсутствия действия + DrawingLine = 1, ///< Режим рисования линии + Parallel = 2, ///< Режим задания параллельности + Coincedent = 3, ///< Режим задания совпадения точек + Horizontal = 4, ///< Режим задания горизонтальности + Vertical = 5, ///< Режим задания вертикальности + Perpendicular = 6, ///< Режим задания перпендикулярности + DrawingCircle = 7, ///< Режим рисования окружности + Tangent = 8 //< Режим задания касательности +}; + +struct TextObject { + QPointF pos; ///< Логическая позиция (левый верхний угол) + QString text; ///< Текст + int tag; ///< Тег для идентификации + QFont font{ QFont("Arial", 12) }; ///< Шрифт (можно менять позже) +}; + +/** + * @brief Структура для хранения информации об ограничении + */ +struct ConstraintInfo { + Mode mode; ///< Тип ограничения + std::variant data; ///< Данные ограничения +}; + +// =================================================================== +// Типы и перечисления +// =================================================================== + +/// Удобный тип для хранения пары линий (порядок не важен) +using LinePair = std::pair; + +/// Удобный тип для хранения пары точек (порядок не важен) +using PointPair = std::pair; + +/// Удобный тип для хранения пары кривых (порядок не важен) +using CurvePair = std::pair; \ No newline at end of file