Рефакторинг (1)

Создание системного заголовочного файла с нужными переопределениями, структурами и макросами
This commit is contained in:
2025-12-25 19:01:57 +03:00
parent d3aefd344b
commit 2b04a4bf1c
2 changed files with 74 additions and 60 deletions

73
System.h Normal file
View File

@@ -0,0 +1,73 @@
#pragma once
#define WIDGET_POSITION event->pos()
#define UCS_POSITION screenToLogical(WIDGET_POSITION)
#define CURVE_AS_LINE(CURVE) dynamic_cast<Line*>(CURVE)
#define CURVE_AS_CIRCLE(CURVE) dynamic_cast<Circle*>(CURVE)
// GCS — геометрический солвер из FreeCAD
#include "GCS/Geo.h"
#include "GCS/GCS.h"
using namespace GCS;
#include <QWidget>
#include <QMouseEvent>
#include <QPointF>
#include <QMessageBox>
#include <QToolTip>
#include <QKeyEvent>
#ifdef _DEBUG
#include <QDebug>
#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<LinePair, PointPair, CurvePair> data; ///< Данные ограничения
};
// ===================================================================
// Типы и перечисления
// ===================================================================
/// Удобный тип для хранения пары линий (порядок не важен)
using LinePair = std::pair<Line*, Line*>;
/// Удобный тип для хранения пары точек (порядок не важен)
using PointPair = std::pair<Point*, Point*>;
/// Удобный тип для хранения пары кривых (порядок не важен)
using CurvePair = std::pair<Curve*, Curve*>;