diff -r 180072db4a83 -r a39f454a3d7f src/gl/partrenderer.h --- a/src/gl/partrenderer.h Sun Jul 03 15:59:22 2022 +0300 +++ b/src/gl/partrenderer.h Sun Jul 03 20:18:34 2022 +0300 @@ -72,3 +72,48 @@ void renderVao(const gl::ArrayClass arrayClass); void checkForGLErrors(); }; + +inline QVector convertWorldPointsToScreenPoints( + const std::vector &worldPoints, + const PartRenderer* renderer) +{ + QVector points2d; + points2d.reserve(static_cast(worldPoints.size())); + for (const glm::vec3& point : worldPoints) + { + points2d.push_back(renderer->modelToScreenCoordinates(point)); + } + return points2d; +} + +inline Winding worldPolygonWinding( + const std::vector &points, + const PartRenderer* renderer) +{ + return winding(QPolygonF{convertWorldPointsToScreenPoints(points, renderer)}); +} + +inline void drawWorldPoint( + QPainter* painter, + const glm::vec3& worldPoint, + const PartRenderer* renderer) +{ + const QPointF center = renderer->modelToScreenCoordinates(worldPoint); + painter->drawEllipse(inscribe(CircleF{center, 5})); +} + +inline void drawWorldPolyline( + QPainter *painter, + const std::vector &points, + const PartRenderer* renderer) +{ + painter->drawPolyline(QPolygonF{convertWorldPointsToScreenPoints(points, renderer)}); +} + +inline void drawWorldPolygon( + QPainter* painter, + const std::vector &points, + const PartRenderer* renderer) +{ + painter->drawPolygon(QPolygonF{convertWorldPointsToScreenPoints(points, renderer)}); +}