Wed, 15 Jun 2022 12:41:57 +0300
Render line segments during draw mode nicer
#pragma once #include <QOpenGLWidget> #include "basics.h" #include "gl/common.h" #include "gl/compiler.h" #include "documentmanager.h" #include "types/boundingbox.h" class PartRenderer final : public QOpenGLWidget { Q_OBJECT Model* const model; DocumentManager* const documents; const ColorTable& colorTable; BoundingBox boundingBox; gl::ModelShaders shaders; ModelId highlighted = {0}; glm::mat4 projectionMatrix; glm::mat4 viewMatrix; glm::mat4 modelMatrix; glm::vec4 viewportVector; glm::quat modelQuaternion; QPoint lastMousePosition; int totalMouseMove = 0; gl::RenderPreferences renderPreferences; double zoom = 1.0; bool initialized = false; bool needBuild = true; std::vector<RenderLayer*> activeRenderLayers; std::vector<RenderLayer*> inactiveRenderLayers; public: PartRenderer( Model* model, DocumentManager* documents, const ColorTable& colorTable, QWidget* parent = nullptr); ~PartRenderer() override; void setRenderPreferences(const gl::RenderPreferences& newPreferences); ModelId getHighlightedObject() const; void addRenderLayer(RenderLayer* layer); void setLayerEnabled(RenderLayer* layer, bool enabled); std::optional<glm::vec3> screenToModelCoordinates(const QPointF& point, const Plane& plane) const; QPointF modelToScreenCoordinates(const glm::vec3& point) const; bool isDark() const; ModelId pick(QPoint where); void setSelection(const QSet<ModelId>& selectedIds); Q_SIGNALS: void projectionMatrixChanged(const glm::mat4& newMatrix); void modelMatrixChanged(const glm::mat4& newMatrix); void viewMatrixChanged(const glm::mat4& newMatrix); void renderPreferencesChanged(); private: void initializeGL() override; void resizeGL(int width, int height) override; void paintGL() override; void mouseMoveEvent(QMouseEvent* event) override; void mousePressEvent(QMouseEvent* event) override; void mouseReleaseEvent(QMouseEvent* event) override; void wheelEvent(QWheelEvent* event) override; Line<3> cameraLine(const QPointF& point) const; glm::vec3 unproject(const glm::vec3& win) const; void setFragmentStyle(gl::FragmentStyle fragStyle); void renderScene(); void updateViewMatrix(); void updateModelMatrix(); Q_SLOT void build(); void renderVao(const gl::ArrayClass arrayClass); void checkForGLErrors(); };