From 6f5bc5a34e5a447d3a06c4727ddc1c6c5c46e45e Mon Sep 17 00:00:00 2001 From: Pranav Gade Date: Wed, 30 Dec 2020 00:04:52 +0530 Subject: [PATCH] fixed polygon scaling issues while loading from container to imagepainter --- src/image/imagepainter.cpp | 7 +++++-- src/image/polygon.cpp | 8 ++++++++ src/image/polygon.h | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/image/imagepainter.cpp b/src/image/imagepainter.cpp index 70eb9f2..d268016 100644 --- a/src/image/imagepainter.cpp +++ b/src/image/imagepainter.cpp @@ -36,15 +36,17 @@ void ImagePainter::paint(QPoint point, bool isDragging) Polygon* currentPolygon = static_cast(m_parent->currentObject()); if (m_shape == Shape::Polygon) { - int idxSavedPolygClicked = -1; + QPointF scaledClickedPoint = QPointF(-m_currentItem->pos()); + scaledClickedPoint += QPointF(scaledClickedPoint.x()/m_scaleW, scaledClickedPoint.y()/m_scaleH); for (int i = 0; i < m_parent->savedObjects().size(); i++) { const Polygon* polygon = static_cast(m_parent->savedObjects()[i]); - if (polygon->containsPoint(clickedPoint, Qt::OddEvenFill)) { + if (polygon->containsPoint(scaledClickedPoint, Qt::OddEvenFill)) { idxSavedPolygClicked = i; break; } } + bool isSavedPolygClicked = idxSavedPolygClicked != -1; if (isSavedPolygClicked) { if (isDragging) @@ -53,6 +55,7 @@ void ImagePainter::paint(QPoint point, bool isDragging) m_parent->setCurrentObject(m_parent->savedObjects()[idxSavedPolygClicked]); m_parent->savedObjects().remove(idxSavedPolygClicked); currentPolygon = static_cast(m_parent->currentObject()); + currentPolygon->unscale(m_currentItem->pos(), m_scaleW, m_scaleH); currentPolygon->pop_back(); } diff --git a/src/image/polygon.cpp b/src/image/polygon.cpp index 5975d2d..d303ed2 100644 --- a/src/image/polygon.cpp +++ b/src/image/polygon.cpp @@ -60,3 +60,11 @@ void Polygon::scale(const QPointF offset, const qreal scaleW, const qreal scaleH point = QPointF(point.x() / scaleW, point.y() / scaleH); } } + +void Polygon::unscale(const QPointF offset, const qreal scaleW, const qreal scaleH) +{ + for (QPointF& point : *this) { + point = QPointF(point.x() * scaleW, point.y() * scaleH); + point += offset; + } +} diff --git a/src/image/polygon.h b/src/image/polygon.h index b9ebf26..849870a 100644 --- a/src/image/polygon.h +++ b/src/image/polygon.h @@ -47,6 +47,7 @@ public: QString unitName() const override; MarkedObject::Type type() override; void scale(const QPointF offset, const qreal scaleW, const qreal scaleH); + void unscale(const QPointF offset, const qreal scaleW, const qreal scaleH); }; #endif // POLYGON_H -- GitLab