From ed4c3c00647cf36d9b02b844056c9620e84b0501 Mon Sep 17 00:00:00 2001 From: karlis <2995621482@qq.com> Date: Mon, 13 Mar 2023 20:47:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E3=80=90=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=9A=84=E3=80=91LayerBounding=E8=99=9A?= =?UTF-8?q?=E7=BA=BF=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Editor/EditorWidgetItem.cpp | 1 + .../src/Editor/GraphicElement.cpp | 1 + .../src/Editor/PreviewWindow.cpp | 19 +++++++++++++++++++ .../src/Editor/PreviewWindow.h | 6 ++++++ .../src/Editor/RightBar/LayerTreeWidget.cpp | 12 ++++++++---- .../src/Editor/RightBar/LayerTreeWidget.h | 2 +- 6 files changed, 36 insertions(+), 5 deletions(-) diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp index 01ca5b3..9411fe8 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp +++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp @@ -14,6 +14,7 @@ EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(p elementInfoDisplayWidget = dynamic_cast(tabWidget->widget(1)); qDebug() << layerInfoDisplayWidget; qDebug() << elementInfoDisplayWidget; + connect(treeWidget, &LayerTreeWidget::displayLayerChange, previewWindow, &PreviewWindow::currentLayerChanged); connect(treeWidget, &LayerTreeWidget::requireRefreshElementWidget, elementInfoDisplayWidget, &ElementPoolWidget::refresh); connect(layerInfoDisplayWidget, &InfoDisplayWidget::requireRefreshElementWidget, elementInfoDisplayWidget, &ElementPoolWidget::refresh); connect(treeWidget, &LayerTreeWidget::displayLayerChange, this, &EditorWidgetItem::onLayerChange); diff --git a/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp b/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp index 0c7bf52..403ae3f 100644 --- a/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp +++ b/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp @@ -47,6 +47,7 @@ PixelPath SimpleElement::getPaintObject(std::vector> PixelPath result; Renderer::ElementStyleStrokeDemo demo(2); auto [img, mov] = renderer->drawElement(painterPath, demo, 1.0); + //qDebug() << mov; //qDebug() << img << " ------"; result.addImage(img, mov); //result.addPath(painterPath); diff --git a/ArchitectureColoredPainting/src/Editor/PreviewWindow.cpp b/ArchitectureColoredPainting/src/Editor/PreviewWindow.cpp index 0db3c48..2bdcdc7 100644 --- a/ArchitectureColoredPainting/src/Editor/PreviewWindow.cpp +++ b/ArchitectureColoredPainting/src/Editor/PreviewWindow.cpp @@ -10,6 +10,7 @@ PreviewWindow::PreviewWindow(QWidget *parent) : QOpenGLWidget(parent) painter->setRenderHint(QPainter::SmoothPixmapTransform); painter->setRenderHint(QPainter::HighQualityAntialiasing); layerManager = nullptr; + currentLayer = nullptr; } void PreviewWindow::initialize(LayerManager *layerManager,QSize windowSize) @@ -47,6 +48,14 @@ void PreviewWindow::paintGL() painter->setRenderHint(QPainter::Antialiasing); painter->setRenderHint(QPainter::HighQualityAntialiasing); layerManager->paint(painter,this->size()); + if (currentLayer != nullptr) + { + QPen pen = painter->pen(); // 获取当前的画笔 + pen.setStyle(Qt::DashLine); // 设置画笔样式为虚线 + painter->setPen(pen); // 应用画笔设置 + painter->drawRect(this->currentLayer->getCache().getBoundingRect()); // 绘制矩形 + } + painter->end(); } @@ -56,4 +65,14 @@ void PreviewWindow::resizeGL(int w, int h) Renderer::ElementRenderer* const PreviewWindow::getRenderer()const { return this->renderer; +} + +void PreviewWindow::currentLayerChanged(LayerWrapper* layer) +{ + this->currentLayer = layer; +} + +void PreviewWindow::refresh() +{ + this->repaint(); } \ No newline at end of file diff --git a/ArchitectureColoredPainting/src/Editor/PreviewWindow.h b/ArchitectureColoredPainting/src/Editor/PreviewWindow.h index 9a0a4bc..9c89f80 100644 --- a/ArchitectureColoredPainting/src/Editor/PreviewWindow.h +++ b/ArchitectureColoredPainting/src/Editor/PreviewWindow.h @@ -19,6 +19,8 @@ class PreviewWindow : public QOpenGLWidget, protected QOpenGLFunctions LayerManager *layerManager; Renderer::ElementRenderer* renderer; QSize logicalSize; + QRectF viewportRect; + LayerWrapper* currentLayer; public: PreviewWindow(QWidget *parent = nullptr); @@ -28,4 +30,8 @@ class PreviewWindow : public QOpenGLWidget, protected QOpenGLFunctions void paintGL() override; void resizeGL(int w, int h) override; Renderer::ElementRenderer* const getRenderer()const; + + public slots: + void currentLayerChanged(LayerWrapper*); + void refresh(); }; diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp index 1889d70..f6962db 100644 --- a/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp @@ -13,10 +13,14 @@ LayerTreeWidget::LayerTreeWidget(QWidget *parent) connect(this, &QTreeWidget::customContextMenuRequested, this, &LayerTreeWidget::popMenu); connect(this, &QTreeWidget::currentItemChanged, [=](QTreeWidgetItem *currentItem) { this->selectedItem = currentItem; - if(this->selectedItem !=nullptr) - emit displayLayerChange(this->selectedItem->data(0, Qt::UserRole).value()); - else - emit displayLayerChange(nullptr); + if (this->selectedItem != nullptr) { + auto layer = this->selectedItem->data(0, Qt::UserRole).value(); + emit displayLayerChange(layer); + } + else { + emit displayLayerChange(nullptr); + } + emit requireRefreshPreview(); }); // connect(this, &QTreeWidget::itemDoubleClicked, this, &LayerTreeWidget::onItemDoubleClicked); } diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.h b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.h index ca784fd..e7472dd 100644 --- a/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.h +++ b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.h @@ -20,7 +20,7 @@ class LayerTreeWidget : public QTreeWidget // void mouseDoubleClickEvent(QMouseEvent *event) override; // void onItemDoubleClicked(QTreeWidgetItem *item, int column = 0); - signals: +signals: void displayLayerChange(LayerWrapper *); void requireRefreshPreview(); void requireRefreshElementWidget();