diff --git a/include/codeMarkerItem.h b/include/codeMarkerItem.h index 02c353d766b0fb1c18eadf2291d484211af63ef7..c5d23739122aed940fb1ac27c892ee33fb72c4e9 100644 --- a/include/codeMarkerItem.h +++ b/include/codeMarkerItem.h @@ -49,16 +49,17 @@ private: Vec2F mUlc; // upper left corner to draw public: - CodeMarkerItem(QWidget *wParent, QGraphicsItem * parent = NULL); - QRectF boundingRect() const; + CodeMarkerItem(QWidget *wParent, QGraphicsItem * parent = nullptr); + QRectF boundingRect() const override; void setRect(Vec2F& v); - void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; void addDetectedMarkers(std::vector<std::vector<cv::Point2f> > corners, std::vector<int> ids, Vec2F offset = Vec2F(0,0)); void addRejectedMarkers(std::vector<std::vector<cv::Point2f> > rejected, Vec2F offset = Vec2F(0,0)); void resetSavedMarkers(); private: void drawMarker(const OffsetMarker& currentMarker, int id, const QColor& borderColor, QPainter *painter); + static constexpr int numCorners = 4; }; #endif diff --git a/src/codeMarkerItem.cpp b/src/codeMarkerItem.cpp index 41981d6b61ac14ce8ed3287a0a5261cb0d0cf6ea..7fe31d9d966cdc01c207da8d4dcf5cadcbcc93cc 100644 --- a/src/codeMarkerItem.cpp +++ b/src/codeMarkerItem.cpp @@ -129,14 +129,23 @@ void CodeMarkerItem::paint(QPainter *painter, const QStyleOptionGraphicsItem */* } -inline void CodeMarkerItem::drawMarker(const OffsetMarker& currentMarker, int id, const QColor& borderColor, QPainter *painter) +/** + * @brief Draws a aruco code marker + * + * Draws a rect with the corners of the marker, the id, and the upper left corner. + * + * @param currentMarker + * @param id + * @param borderColor + * @param painter + */ +void CodeMarkerItem::drawMarker(const OffsetMarker& currentMarker, int id, const QColor& borderColor, QPainter *painter) { Vec2F offset = currentMarker.offset; // draw marker sides - for(int j = 0; j < 4; j++) { + for(int j = 0; j < numCorners; j++) { Vec2F p0 = currentMarker.corners.at(j); - Vec2F p1 = currentMarker.corners.at((j + 1) % 4); - // debout << "p0: " << p0 << " p1: " << p1 << endl; + Vec2F p1 = currentMarker.corners.at((j + 1) % numCorners); painter->setPen(borderColor); painter->drawLine((mUlc + p0 + offset).toQPointF(), (mUlc + p1 + offset).toQPointF()); } @@ -148,6 +157,15 @@ inline void CodeMarkerItem::drawMarker(const OffsetMarker& currentMarker, int id painter->drawRect(QRectF((mUlc + topLeftCorner + offset - Vec2F(3,3)).toQPointF(), QSize(6.0,6.0))); } +/** + * @brief Adds given markers as detected markers to visualization + * + * @pre ids[i] is the id of corners[i] + * + * @param corners corners of the markers + * @param ids ids of the detected markers + * @param offset offset from marker-coords to recognition ROI + */ void CodeMarkerItem::addDetectedMarkers(vector<vector<Point2f> > corners, vector<int> ids, Vec2F offset /* = (0,0)*/) { for(std::vector<Point2f> singleMarkerCorners : corners) @@ -157,6 +175,12 @@ void CodeMarkerItem::addDetectedMarkers(vector<vector<Point2f> > corners, vector mIds.insert(mIds.end(), ids.begin(), ids.end()); } +/** + * @brief Adds given markers as rejected markers to visualization + * + * @param rejected corners of the rejected markers + * @param offset offset from marker-coords to recognition ROI + */ void CodeMarkerItem::addRejectedMarkers(vector<vector<Point2f> > rejected, Vec2F offset /* = (0,0)*/) { for(std::vector<Point2f> singleMarkerCorners : rejected) @@ -165,6 +189,9 @@ void CodeMarkerItem::addRejectedMarkers(vector<vector<Point2f> > rejected, Vec2F } } +/** + * @brief Resets detected and rejected markers for visualization + */ void CodeMarkerItem::resetSavedMarkers() { mCorners.clear();