#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; /// Удобный тип для хранения пары линий (порядок не важен) using LinePair = std::pair; /// Удобный тип для хранения пары точек (порядок не важен) using PointPair = std::pair; /// Удобный тип для хранения пары кривых (порядок не важен) using CurvePair = std::pair; #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; ///< Данные ограничения }; // =================================================================== // Типы и перечисления // ===================================================================