# HG changeset patch # User Teemu Piippo # Date 1626727312 -10800 # Node ID 6ca6e8c647d4f1e06c345f3e1ffcdd77d6632b10 # Parent cd4df75924b7278195a86c9041cfbc11ed540333 added preview layer code and fixed build warnings diff -r cd4df75924b7 -r 6ca6e8c647d4 CMakeLists.txt --- a/CMakeLists.txt Mon Jul 19 19:28:16 2021 +0300 +++ b/CMakeLists.txt Mon Jul 19 23:41:52 2021 +0300 @@ -10,7 +10,7 @@ find_package(Qt5Core REQUIRED) find_package(Qt5OpenGL REQUIRED) find_package(Qt5Network REQUIRED) -find_package(Qt5LinguistTools REQUIRED) +#find_package(Qt5LinguistTools REQUIRED) find_package(GLM REQUIRED) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) diff -r cd4df75924b7 -r 6ca6e8c647d4 src/geometry.h --- a/src/geometry.h Mon Jul 19 19:28:16 2021 +0300 +++ b/src/geometry.h Mon Jul 19 23:41:52 2021 +0300 @@ -97,4 +97,9 @@ glm::mat4 unscaled; }; ScalingExtract extractScaling(const glm::mat4& matrix); + + struct NPolygon + { + std::vector points; + }; } diff -r cd4df75924b7 -r 6ca6e8c647d4 src/mainwindow.cpp --- a/src/mainwindow.cpp Mon Jul 19 19:28:16 2021 +0300 +++ b/src/mainwindow.cpp Mon Jul 19 23:41:52 2021 +0300 @@ -409,7 +409,7 @@ void MainWindow::canvasMousePressed(QMouseEvent *event) { - + Q_UNUSED(event) } void MainWindow::canvasMouseReleased(const Canvas::MouseClickInfo& info) @@ -420,6 +420,17 @@ } } -void MainWindow::canvasMouseDoubleClicked(QMouseEvent* event){} -void MainWindow::canvasMouseMoved(QMouseEvent*){} -void MainWindow::canvasKeyReleased(QKeyEvent*){} +void MainWindow::canvasMouseDoubleClicked(QMouseEvent* event) +{ + Q_UNUSED(event) +} + +void MainWindow::canvasMouseMoved(QMouseEvent* event) +{ + Q_UNUSED(event) +} + +void MainWindow::canvasKeyReleased(QKeyEvent* event) +{ + Q_UNUSED(event) +} diff -r cd4df75924b7 -r 6ca6e8c647d4 src/parser.cpp --- a/src/parser.cpp Mon Jul 19 19:28:16 2021 +0300 +++ b/src/parser.cpp Mon Jul 19 23:41:52 2021 +0300 @@ -82,7 +82,7 @@ { QStringList tokens = line .mid(strlen("0 !LDRAW_ORG ")) - .split(" ", QString::SkipEmptyParts); + .split(" ", Qt::SkipEmptyParts); if (not tokens.isEmpty()) { QString partTypeString = tokens[0]; diff -r cd4df75924b7 -r 6ca6e8c647d4 src/tools/drawtool.h --- a/src/tools/drawtool.h Mon Jul 19 19:28:16 2021 +0300 +++ b/src/tools/drawtool.h Mon Jul 19 23:41:52 2021 +0300 @@ -8,7 +8,7 @@ public: Q_INVOKABLE DrawTool(QObject* parent = nullptr); - QString name() const; - QString toolTip() const; + QString name() const override; + QString toolTip() const override; bool mouseClick(const Canvas::MouseClickInfo& info) override; }; diff -r cd4df75924b7 -r 6ca6e8c647d4 src/ui/canvas.cpp --- a/src/ui/canvas.cpp Mon Jul 19 19:28:16 2021 +0300 +++ b/src/ui/canvas.cpp Mon Jul 19 23:41:52 2021 +0300 @@ -233,6 +233,20 @@ renderText(axis.text, *intersection); } } + for (const PreviewLayer& previewLayer : this->previewLayers) + { + painter.setBrush({previewLayer.color}); + for (const geom::NPolygon& polygon3d : previewLayer.polygons) + { + QVector points2d; + points2d.reserve(polygon3d.points.size()); + for (const glm::vec3& point : polygon3d.points) + { + points2d.push_back(this->modelToScreenCoordinates(point)); + } + painter.drawPolygon({points2d}); + } + } } } } @@ -272,3 +286,13 @@ const float dot = glm::dot(glm::normalize(this->gridPlane.normal), glm::normalize(cameraDirection)); return std::abs(dot) < threshold; } + +const Canvas::PreviewLayer& Canvas::getPreviewLayer(PreviewLayerName name) const +{ + return previewLayers[static_cast(name)]; +} + +Canvas::PreviewLayer& Canvas::modifyPreviewLayer(PreviewLayerName name) +{ + return previewLayers[static_cast(name)]; +} diff -r cd4df75924b7 -r 6ca6e8c647d4 src/ui/canvas.h --- a/src/ui/canvas.h Mon Jul 19 19:28:16 2021 +0300 +++ b/src/ui/canvas.h Mon Jul 19 23:41:52 2021 +0300 @@ -8,11 +8,24 @@ Q_OBJECT public: struct MouseClickInfo; + enum PreviewLayerName : std::int8_t + { + DrawToolPreview + }; + struct PreviewLayer + { + QSet polygons; + QColor color{64, 255, 128}; + }; + static constexpr int NUM_PREVIEW_LAYERS = 1; + Canvas( Model* model, DocumentManager* documents, const ldraw::ColorTable& colorTable, QWidget* parent = nullptr); + const PreviewLayer& getPreviewLayer(PreviewLayerName name) const; + PreviewLayer& modifyPreviewLayer(PreviewLayerName name); public slots: void handleSelectionChange(const QSet& selectedIds, const QSet& deselectedIds); protected: @@ -36,6 +49,7 @@ geom::Plane gridPlane; int totalMouseMove = 0; QSet selection; + PreviewLayer previewLayers[NUM_PREVIEW_LAYERS]; }; struct Canvas::MouseClickInfo diff -r cd4df75924b7 -r 6ca6e8c647d4 src/widgets/vec3editor.h --- a/src/widgets/vec3editor.h Mon Jul 19 19:28:16 2021 +0300 +++ b/src/widgets/vec3editor.h Mon Jul 19 23:41:52 2021 +0300 @@ -15,7 +15,7 @@ { NoMultiplyButton = 0x1 }; - explicit Vec3Editor(const glm::vec3& value, QWidget* parent = nullptr, QFlags flags = 0); + explicit Vec3Editor(const glm::vec3& value, QWidget* parent = nullptr, QFlags flags = {}); ~Vec3Editor(); glm::vec3 value() const; void setValue(const glm::vec3& value);