Получение информации о линии #5

Merged
ParkSuMin merged 2 commits from Transform into master 2025-12-15 14:46:38 +01:00
2 changed files with 20 additions and 4 deletions
Showing only changes of commit c283720a99 - Show all commits

View File

@@ -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);
}
}
}
QPointF Canvas::screenToLogical(const QPointF& screenPos) const
{
QPointF logical = screenPos;
logical.rx() -= width() / 2.0;
logical.ry() -= height() / 2.0;
return logical;
}

View File

@@ -58,6 +58,7 @@ protected:
void paintEvent(QPaintEvent* event) override;
private:
QPointF screenToLogical(const QPointF& screenPos) const;
// ====================== Методы поиска и выбора ======================
/// Найти линию под указанной позицией