From c283720a99886c847b0f9782015097ab81b7d7cf Mon Sep 17 00:00:00 2001 From: ParkSuMin Date: Mon, 15 Dec 2025 12:57:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=BE=D0=B5=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=B1=D0=BB=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D1=8F=20Issue=20#3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Canvas.cpp | 23 +++++++++++++++++++---- Canvas.h | 1 + 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Canvas.cpp b/Canvas.cpp index d3e9b89..ea9487c 100644 --- a/Canvas.cpp +++ b/Canvas.cpp @@ -186,7 +186,7 @@ void Canvas::remove_constraints() void Canvas::mousePressEvent(QMouseEvent* event) { - QPointF scene = event->pos(); + QPointF scene = screenToLogical(event->pos()); #ifdef _DEBUG qDebug() << "Scene point in" << scene.x() << scene.y(); @@ -449,7 +449,7 @@ void Canvas::mouseMoveEvent(QMouseEvent* event) { // ====================== Перемещение точки ====================== if (draggedPoint) { - QPointF pos = event->pos() - dragOffset; + QPointF pos = screenToLogical(event->pos()) - dragOffset; // Обновляем все связанные точки (совпадающие, горизонтальные, вертикальные) for (Point* pair : points) { @@ -472,7 +472,7 @@ void Canvas::mouseMoveEvent(QMouseEvent* event) // ====================== Перемещение линии ====================== else if (draggedLine) { - QPointF newCenter = event->pos() - dragOffset; + QPointF newCenter = screenToLogical(event->pos()) - dragOffset; QPointF oldCenter( (*draggedLine->p1.x + *draggedLine->p2.x) / 2.0, (*draggedLine->p1.y + *draggedLine->p2.y) / 2.0 @@ -529,6 +529,12 @@ void Canvas::paintEvent(QPaintEvent* event) QPainter p(this); p.setRenderHint(QPainter::Antialiasing, true); + p.translate(width() / 2.0, height() / 2.0); + + p.setPen(Qt::red); + p.drawLine(-5, 0, 5, 0); + p.drawLine(0, -5, 0, 5); + // ====================== Решение системы уравнений ====================== if (!params.empty()) { @@ -587,4 +593,13 @@ void Canvas::paintEvent(QPaintEvent* event) p.setPen(Qt::NoPen); p.drawEllipse(QPointF(*current_line->p1.x, *current_line->p1.y), 6, 6); } -} \ No newline at end of file +} + +QPointF Canvas::screenToLogical(const QPointF& screenPos) const +{ + QPointF logical = screenPos; + logical.rx() -= width() / 2.0; + logical.ry() -= height() / 2.0; + + return logical; +} diff --git a/Canvas.h b/Canvas.h index d39d906..5e2de41 100644 --- a/Canvas.h +++ b/Canvas.h @@ -58,6 +58,7 @@ protected: void paintEvent(QPaintEvent* event) override; private: + QPointF screenToLogical(const QPointF& screenPos) const; // ====================== Методы поиска и выбора ====================== /// Найти линию под указанной позицией