diff --git a/src/image/imagepainter.cpp b/src/image/imagepainter.cpp index 70eb9f2af55aa7d9984f650d6e13ef8b234ff3e7..d268016a1d105092c09b0cbf2778188101031ad0 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 5975d2dcad9ec68d461be3143db092a2e1700f8a..d303ed236d7dbf92d07b236f3cbe7635b11f60c3 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 b9ebf26a03c3f226588f867e0a1bf99844209173..849870ad03cbb200be240ea3791d98b4d1f4d9ee 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