From 795b542dda411d4baafe5271c586023bcda7cd85 Mon Sep 17 00:00:00 2001
From: Linloir <3145078758@qq.com>
Date: Sat, 17 Dec 2022 11:43:22 +0800
Subject: [PATCH] Adapt to previous changes - Tested version, runnable
---
FinalProject/FinalProject.vcxproj | 10 +--
FinalProject/FinalProject.vcxproj.filters | 76 +++++++++++++++--------
FinalProject/editorpage.cpp | 5 ++
FinalProject/editorpage.h | 3 +
FinalProject/framelesswindow.cpp | 9 +--
FinalProject/model.cpp | 29 +++++++++
FinalProject/model.h | 8 +++
FinalProject/sceneviewer.cpp | 6 --
8 files changed, 106 insertions(+), 40 deletions(-)
diff --git a/FinalProject/FinalProject.vcxproj b/FinalProject/FinalProject.vcxproj
index 48f579f..f3f0de1 100644
--- a/FinalProject/FinalProject.vcxproj
+++ b/FinalProject/FinalProject.vcxproj
@@ -115,12 +115,13 @@
+
-
+
@@ -148,15 +149,16 @@
-
+
+
-
-
+
+
diff --git a/FinalProject/FinalProject.vcxproj.filters b/FinalProject/FinalProject.vcxproj.filters
index 8b472f3..7638a20 100644
--- a/FinalProject/FinalProject.vcxproj.filters
+++ b/FinalProject/FinalProject.vcxproj.filters
@@ -59,6 +59,24 @@
{1351d841-7665-48d3-9850-da0738823396}
+
+ {5e6e1e89-1c77-4a89-92cc-d64ea2546961}
+
+
+ {d2b9abbc-ef10-4990-96a1-a88f9c217dcf}
+
+
+ {d6a38868-baed-45d5-9cbf-3faa3b563fa9}
+
+
+ {4b5e61f5-3dfe-44d7-bfcc-cf5b70528b16}
+
+
+ {995296ff-ac0c-4996-9692-c0e017e5fc03}
+
+
+ {6c5ac0df-26ad-40ad-860c-3d0372b81094}
+
@@ -108,25 +126,13 @@
Source Files\Qt Widgets\Pages\Scene Editor
-
- Source Files\Qt Widgets\Pages\Scene Editor
-
-
- Source Files\Qt Widgets\Pages\Scene Editor
-
-
- Source Files\Qt Widgets\Pages\Scene Editor
-
-
- Source Files\Qt Widgets\Pages\Scene Editor
-
Source Files\Qt Widgets\GUI Components
Source Files\Qt Widgets\GUI Components
-
+
Source Files\Qt Widgets\GUI Components
@@ -144,6 +150,21 @@
Source Files\Qt Widgets\GUI Components
+
+ Source Files\Qt Widgets\Pages\Scene Editor\Object Selector
+
+
+ Source Files\Qt Widgets\Pages\Scene Editor\Object Selector
+
+
+ Source Files\Qt Widgets\Pages\Scene Editor\Object Setter
+
+
+ Source Files\Qt Widgets\Pages\Scene Editor\Scene Viewer
+
+
+ Source Files\Qt Widgets\Pages\Scene Editor\Object Selector
+
@@ -182,26 +203,14 @@
Header Files\Utils
-
- Header Files\Qt Widgets\Pages\Scene Editor
-
- Header Files\Qt Widgets\Pages\Scene Editor
-
-
- Header Files\Qt Widgets\Pages\Scene Editor
-
-
- Header Files\Qt Widgets\GUI Components
+ Header Files\Qt Widgets\Pages\Scene Editor\Object Setter
Header Files\Qt Widgets
-
- Header Files\Qt Widgets\Pages\Scene Editor
-
Header Files\Qt Widgets\GUI Components
@@ -226,6 +235,21 @@
Header Files\Qt Widgets\GUI Components
+
+ Header Files\Qt Widgets\GUI Components
+
+
+ Header Files\Qt Widgets\Pages\Scene Editor\Scene Viewer
+
+
+ Header Files\Qt Widgets\Pages\Scene Editor\Object Selector
+
+
+ Header Files\Qt Widgets\Pages\Scene Editor\Object Selector
+
+
+ Header Files\Qt Widgets\Pages\Scene Editor\Object Selector
+
diff --git a/FinalProject/editorpage.cpp b/FinalProject/editorpage.cpp
index 94ae9df..a10bc68 100644
--- a/FinalProject/editorpage.cpp
+++ b/FinalProject/editorpage.cpp
@@ -31,6 +31,11 @@ EditorPage::EditorPage(QWidget* parent) :
_mainWidget->setLayout(_mainLayout);
_titleLayout->addWidget(_mainWidget);
_mainWidget->show();
+
+ // Generate model selector
+ _modelSelector = new ModelSelector(_mainWidget);
+ _mainLayout->addWidget(_modelSelector);
+ _modelSelector->show();
// Generate scene viewer
_sceneViewerContainer = new RoundedCornerWidget(_mainWidget);
diff --git a/FinalProject/editorpage.h b/FinalProject/editorpage.h
index ac2a645..acf41cf 100644
--- a/FinalProject/editorpage.h
+++ b/FinalProject/editorpage.h
@@ -7,6 +7,7 @@
#include "pagewidget.h"
#include "sceneviewer.h"
#include "roundedcornerwidget.h"
+#include "modelselector.h"
class EditorPage : public PageWidget {
@@ -32,6 +33,8 @@ private:
QWidget* _mainWidget = nullptr;
QHBoxLayout* _mainLayout = nullptr;
+ ModelSelector* _modelSelector = nullptr;
+
RoundedCornerWidget* _sceneViewerContainer = nullptr;
QVBoxLayout* _sceneViewerContainerLayout = nullptr;
SceneViewer* _sceneViewer = nullptr;
diff --git a/FinalProject/framelesswindow.cpp b/FinalProject/framelesswindow.cpp
index 8bcfbc0..bd77c39 100644
--- a/FinalProject/framelesswindow.cpp
+++ b/FinalProject/framelesswindow.cpp
@@ -13,6 +13,7 @@ FramelessWindow::FramelessWindow(int cornerRadius, unsigned int attributes, QWid
{
setAttribute(Qt::WA_TranslucentBackground);
setWindowFlags(Qt::FramelessWindowHint);
+ setFocusPolicy(Qt::StrongFocus);
setMouseTracking(true);
setFocus();
@@ -27,7 +28,7 @@ FramelessWindow::FramelessWindow(int cornerRadius, unsigned int attributes, QWid
setLayout(_stretchLayout);
// Set style sheet for window widget
- QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_cornerRadius) + "px;}";
+ QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_cornerRadius) + "px;}";
_windowWidget->setStyleSheet(windowWidgetStyleSheet);
// Set shadow for window widget
@@ -119,7 +120,7 @@ void FramelessWindow::initializeWindowUI() {
_windowBorder = new QWidget(this);
_windowBorder->setObjectName("windowBorder");
QString windowBorderStyleSheet =
- "QWidget#windowBorder{background-color:#00FFFFFF;border:1.5px solid " + _borderColor.name() + ";border-radius:" + QString::number(_cornerRadius) + "px;}";
+ "QWidget#windowBorder{background-color:#00FFFFFF;border:1.5px solid " + _borderColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_cornerRadius) + "px;}";
_windowBorder->setStyleSheet(windowBorderStyleSheet);
_windowBorder->setAttribute(Qt::WA_TransparentForMouseEvents);
_windowBorder->move(_windowWidget->pos() - QPoint(1, 1));
@@ -170,7 +171,7 @@ void FramelessWindow::controlWindowScale() {
_windowShadow->setEnabled(false);
_windowBorder->hide();
- QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name() + ";}";
+ QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";}";
_windowWidget->setStyleSheet(windowWidgetStyleSheet);
_stretchLayout->setContentsMargins(0, 0, 0, 0);
@@ -194,7 +195,7 @@ void FramelessWindow::controlWindowScale() {
_windowShadow->setEnabled(true);
_windowBorder->show();
- QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name() + ";border-radius:" + QString::number(_cornerRadius) + "px;}";
+ QString windowWidgetStyleSheet = "QWidget#windowWidget{background-color:" + _backgroundColor.name(QColor::HexArgb) + ";border-radius:" + QString::number(_cornerRadius) + "px;}";
_windowWidget->setStyleSheet(windowWidgetStyleSheet);
QPainterPath path;
diff --git a/FinalProject/model.cpp b/FinalProject/model.cpp
index 1809c28..db5f75a 100644
--- a/FinalProject/model.cpp
+++ b/FinalProject/model.cpp
@@ -13,6 +13,13 @@ Model::~Model() {
// TODO: Maybe delete all meshes?
}
+Model::Model(std::vector&& meshes, std::vector&& textures, std::string directory) {
+ _meshes = std::move(meshes);
+ _texturesLoaded = std::move(textures);
+ _directory = directory;
+ _status = LOADED;
+}
+
// file path is ...\\...\\.obj, and processnode & processmesh have been called here
void Model::loadModel(std::string path) {
Logger::info("Loading model from path: " + path);
@@ -177,3 +184,25 @@ void Model::render(const ShaderProgram& shader) const {
_meshes[i].render(shader);
}
}
+
+Model* Model::copyToCurrentContext() const {
+ // Reload all textures
+ std::vector newTextures;
+ for (unsigned int i = 0; i < _texturesLoaded.size(); i++) {
+ // Load texture
+ Texture newTexture = Texture(_texturesLoaded[i].type(), _directory + '/' + _texturesLoaded[i].path());
+ newTextures.push_back(newTexture);
+ }
+
+ // Copy all meshes
+ std::vector newMeshes;
+ for (unsigned int i = 0; i < _meshes.size(); i++) {
+ // Copy mesh
+ Mesh newMesh = Mesh(_meshes[i].vertices(), _meshes[i].indices(), newTextures);
+ newMeshes.push_back(newMesh);
+ }
+
+ // Create new model
+ Model* newModel = new Model(std::move(newMeshes), std::move(newTextures), _directory);
+ return newModel;
+}
diff --git a/FinalProject/model.h b/FinalProject/model.h
index 2e319d2..5b86343 100644
--- a/FinalProject/model.h
+++ b/FinalProject/model.h
@@ -23,8 +23,16 @@ public:
Model(std::string path);
~Model();
+private:
+ Model(std::vector&& meshes, std::vector&& textures, std::string directory);
+
public:
inline MODELSTATUS status() const { return _status; }
+ inline int meshCount() const { return _meshes.size(); }
+ inline int textureCount() const { return _texturesLoaded.size(); }
+ inline std::string directory() const { return _directory; }
+
+ Model* copyToCurrentContext() const;
private:
void loadModel(std::string path);
diff --git a/FinalProject/sceneviewer.cpp b/FinalProject/sceneviewer.cpp
index 98198f8..ede88ab 100644
--- a/FinalProject/sceneviewer.cpp
+++ b/FinalProject/sceneviewer.cpp
@@ -5,7 +5,6 @@
#include
#include
#include
-#include
#include "vbo.h"
#include "vao.h"
@@ -66,11 +65,6 @@ void SceneViewer::initializeGL() {
_shaderProgram.attachShader(fragmentShader);
vertexShader.dispose();
fragmentShader.dispose();
-
- Model* backpackModel = new Model("E:\\Repositories\\CollegeProjects\\CGAssignments\\FinalProject\\Models\\backpack\\backpack.obj");
- Logger::info("Model loaded");
- Renderable backpack(backpackModel);
- _objects.push_back(backpack);
_camera.setPosition(glm::vec3(0.0f, 0.0f, 10.0f));
}