From dfcad45b8c7bc2fe9f9b2c9f444989c765ef2c68 Mon Sep 17 00:00:00 2001 From: karlis <2995621482@qq.com> Date: Mon, 3 Apr 2023 19:37:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=87=91=E5=B1=9E=E5=BA=A6?= =?UTF-8?q?=E5=92=8C=E7=B2=97=E7=B3=99=E5=BA=A6=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Editor/EditorWidget.cpp | 4 ++++ .../src/Editor/EditorWidgetItem.cpp | 24 +++++++++++++++++++ .../src/Editor/EditorWidgetItem.h | 4 ++++ .../src/Editor/PreviewWindow.h | 2 ++ .../Properties/CanvasPropertyWidget.cpp | 20 ++++++++++++++-- .../Editor/Properties/CanvasPropertyWidget.h | 4 ++++ .../Properties/ProjectPropertyDialog.cpp | 8 +++++++ .../Editor/Properties/ProjectPropertyDialog.h | 2 ++ 8 files changed, 66 insertions(+), 2 deletions(-) diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp index 8e6a5c5..5890d66 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/EditorWidget.cpp @@ -119,6 +119,10 @@ void EditorWidget::initProjectMenu() currentEditorWidgetItem, &EditorWidgetItem::handleBackgroundColorChange); connect(dialog, &ProjectPropertyDialog::canvasSizeChanged, currentEditorWidgetItem, &EditorWidgetItem::handleCanvasSizeChange); + connect(dialog, &ProjectPropertyDialog::canvasRoughnessChanged, + currentEditorWidgetItem, &EditorWidgetItem::handleCanvasRoughnessChange); + connect(dialog, &ProjectPropertyDialog::canvasMetallicChanged, + currentEditorWidgetItem, &EditorWidgetItem::handleCanvasMetallicChange); dialog->exec(); }); } diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp index 31bac39..0fc9db8 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp +++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp @@ -69,6 +69,8 @@ EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(p treeWidget->elementManager = elementManager; //qDebug() << layerManager->toJson(); previewWindow->initialize(layerManager,QSize(jsonDoc.object().value("width").toInt(),jsonDoc.object().value("height").toInt())); + previewWindow->canvasRoughness = jsonDoc.object().value("roughness").toDouble(); + previewWindow->canvasMetallic = jsonDoc.object().value("metallic").toDouble(); if (layerManager->getRoot() != nullptr) @@ -147,6 +149,8 @@ void EditorWidgetItem::saveImpl(QString filePath) const QJsonObject source1 = layerManager->toJson(); QJsonObject source2 = elementManager->toJson(); QJsonObject json; + json.insert("roughness", previewWindow->canvasRoughness); + json.insert("metallic", previewWindow->canvasMetallic); json.insert("width", previewWindow->referSize.width()); json.insert("height", previewWindow->referSize.height()); json.insert("root-layer", source1.value("root-layer")); @@ -182,7 +186,27 @@ void EditorWidgetItem::handleCanvasSizeChange(const QSize& size) previewWindow->resize(size); } +void EditorWidgetItem::handleCanvasRoughnessChange(const float& roughness) +{ + previewWindow->canvasRoughness = roughness; +} + +void EditorWidgetItem::handleCanvasMetallicChange(const float& metallic) +{ + previewWindow->canvasMetallic = metallic; +} + QSize EditorWidgetItem::getCanvasReferSize() const { return previewWindow->referSize; } + +float EditorWidgetItem::getCanvasRoughness() const +{ + return previewWindow->canvasRoughness; +} + +float EditorWidgetItem::getCanvasMetallic() const +{ + return previewWindow->canvasMetallic; +} \ No newline at end of file diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h index ef65a19..92097dc 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h +++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.h @@ -47,7 +47,11 @@ public: void handleBackgroundColorChange(const QColor& color); void handleProjectNameChange(const QString& name); void handleCanvasSizeChange(const QSize& size); + void handleCanvasRoughnessChange(const float& roughness); + void handleCanvasMetallicChange(const float& metallic); QSize getCanvasReferSize() const; + float getCanvasRoughness() const; + float getCanvasMetallic() const; private slots: void onLayerChange(LayerWrapper *layer); diff --git a/ArchitectureColoredPainting/src/Editor/PreviewWindow.h b/ArchitectureColoredPainting/src/Editor/PreviewWindow.h index 0bf5ae2..510345a 100644 --- a/ArchitectureColoredPainting/src/Editor/PreviewWindow.h +++ b/ArchitectureColoredPainting/src/Editor/PreviewWindow.h @@ -39,6 +39,8 @@ class PreviewWindow : public QOpenGLWidget, protected QOpenGLFunctions void wheelEvent(QWheelEvent* event) override; public: + float canvasRoughness; + float canvasMetallic; QSize referSize; PreviewWindow(QWidget *parent = nullptr); void initialize(LayerManager *layerManager,QSize referSize, QSize windowSize = QSize(720, 720)); diff --git a/ArchitectureColoredPainting/src/Editor/Properties/CanvasPropertyWidget.cpp b/ArchitectureColoredPainting/src/Editor/Properties/CanvasPropertyWidget.cpp index 8dc9e15..bbddc2f 100644 --- a/ArchitectureColoredPainting/src/Editor/Properties/CanvasPropertyWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/Properties/CanvasPropertyWidget.cpp @@ -4,23 +4,31 @@ CanvasPropertyWidget::CanvasPropertyWidget(const EditorWidgetItem* editorWidgetItem, QWidget* parent) :PropertyWidget( - std::make_unique(editorWidgetItem->backgroundColor, editorWidgetItem->getCanvasReferSize()), + std::make_unique(editorWidgetItem->backgroundColor, editorWidgetItem->getCanvasReferSize(), editorWidgetItem->getCanvasRoughness(), editorWidgetItem->getCanvasMetallic()), parent ), backgroundColorPicker(new ColorPicker(clonedModel->backgroundColor, this)), canvasWidth(new QtMaterialTextField(this)), - canvasHeight(new QtMaterialTextField(this)) + canvasHeight(new QtMaterialTextField(this)), + canvasRoughness(new QtMaterialTextField(this)), + canvasMetallic(new QtMaterialTextField(this)) { auto* layout = new QFormLayout(this); layout->addRow(QStringLiteral("画布背景颜色"), backgroundColorPicker); layout->addRow(QStringLiteral("画布宽度"), canvasWidth); layout->addRow(QStringLiteral("画布高度"), canvasHeight); + layout->addRow(QStringLiteral("画布粗糙度"), canvasRoughness); + layout->addRow(QStringLiteral("画布金属度"), canvasMetallic); canvasWidth->setText(QString::number(clonedModel->canvasSize.width())); canvasHeight->setText(QString::number(clonedModel->canvasSize.height())); + canvasRoughness->setText(QString::number(clonedModel->canvasRoughness, 10, 3)); + canvasMetallic->setText(QString::number(clonedModel->canvasMetallic, 10, 3)); canvasWidth->setValidator(new QIntValidator(1, std::numeric_limits::max())); canvasHeight->setValidator(new QIntValidator(1, std::numeric_limits::max())); + canvasRoughness->setValidator(new QDoubleValidator(0, 1, 3)); + canvasMetallic->setValidator(new QDoubleValidator(0, 1, 3)); connect(backgroundColorPicker, &ColorPicker::colorChanged, [this](const QColor& color) { @@ -34,4 +42,12 @@ CanvasPropertyWidget::CanvasPropertyWidget(const EditorWidgetItem* editorWidgetI { this->clonedModel->canvasSize.setHeight(newText.toInt()); }); + connect(canvasRoughness, &QtMaterialTextField::textEdited, [this](const QString& newText) + { + this->clonedModel->canvasRoughness = newText.toFloat(); + }); + connect(canvasMetallic, &QtMaterialTextField::textEdited, [this](const QString& newText) + { + this->clonedModel->canvasMetallic = newText.toFloat(); + }); } diff --git a/ArchitectureColoredPainting/src/Editor/Properties/CanvasPropertyWidget.h b/ArchitectureColoredPainting/src/Editor/Properties/CanvasPropertyWidget.h index 4b23a1a..e484921 100644 --- a/ArchitectureColoredPainting/src/Editor/Properties/CanvasPropertyWidget.h +++ b/ArchitectureColoredPainting/src/Editor/Properties/CanvasPropertyWidget.h @@ -8,6 +8,8 @@ struct CanvasProperties { QColor backgroundColor; QSize canvasSize; + float canvasRoughness; + float canvasMetallic; }; class CanvasPropertyWidget : public PropertyWidget @@ -17,6 +19,8 @@ private: ColorPicker* backgroundColorPicker; QtMaterialTextField* canvasWidth; QtMaterialTextField* canvasHeight; + QtMaterialTextField* canvasRoughness; + QtMaterialTextField* canvasMetallic; public: CanvasPropertyWidget(const EditorWidgetItem* editorWidgetItem, QWidget* parent = nullptr); diff --git a/ArchitectureColoredPainting/src/Editor/Properties/ProjectPropertyDialog.cpp b/ArchitectureColoredPainting/src/Editor/Properties/ProjectPropertyDialog.cpp index c3254f8..ea76da5 100644 --- a/ArchitectureColoredPainting/src/Editor/Properties/ProjectPropertyDialog.cpp +++ b/ArchitectureColoredPainting/src/Editor/Properties/ProjectPropertyDialog.cpp @@ -40,5 +40,13 @@ void ProjectPropertyDialog::accept() { emit canvasSizeChanged(canvasProperties->canvasSize); } + if (canvasProperties->canvasRoughness >= 0.0f && canvasProperties->canvasRoughness <= 1.0f) + { + emit canvasRoughnessChanged(canvasProperties->canvasRoughness); + } + if (canvasProperties->canvasMetallic >= 0.0f && canvasProperties->canvasMetallic <= 1.0f) + { + emit canvasMetallicChanged(canvasProperties->canvasMetallic); + } QDialog::accept(); } diff --git a/ArchitectureColoredPainting/src/Editor/Properties/ProjectPropertyDialog.h b/ArchitectureColoredPainting/src/Editor/Properties/ProjectPropertyDialog.h index 06e8337..fcceb49 100644 --- a/ArchitectureColoredPainting/src/Editor/Properties/ProjectPropertyDialog.h +++ b/ArchitectureColoredPainting/src/Editor/Properties/ProjectPropertyDialog.h @@ -19,6 +19,8 @@ signals: void backgroundColorChanged(const QColor& newBackgroundColor); void canvasSizeChanged(const QSize& newCanvasSize); void projectNameChanged(const QString& newProjectName); + void canvasRoughnessChanged(const float& newCanvasRoughness); + void canvasMetallicChanged(const float& newCanvasMetallic); private slots: void accept() override;