From 7b739ab892cc7e63dae3d444620e9704ae93e11f Mon Sep 17 00:00:00 2001 From: Anakin Date: Sun, 29 Jan 2017 15:19:20 +0100 Subject: [PATCH] use OutputDevice to set fileinfo, use new connect function, --- QtMeshViewer/Header/GeometryEngine.h | 5 ----- QtMeshViewer/Header/OglViewerWidget.h | 4 ---- QtMeshViewer/Header/OutputDevice.h | 7 ++++++- QtMeshViewer/Source/GeometryEngine.cpp | 6 +----- QtMeshViewer/Source/MainWindow.cpp | 1 + QtMeshViewer/Source/OglViewerWidget.cpp | 22 +++++++++++----------- 6 files changed, 19 insertions(+), 26 deletions(-) diff --git a/QtMeshViewer/Header/GeometryEngine.h b/QtMeshViewer/Header/GeometryEngine.h index 235ae9f..b2556b2 100644 --- a/QtMeshViewer/Header/GeometryEngine.h +++ b/QtMeshViewer/Header/GeometryEngine.h @@ -37,16 +37,11 @@ private: public: void drawGeometry(QOpenGLShaderProgram *program, bool wireframe); - -// slots -public slots: void loadFile(QString filePath); - // signals signals: void requestResetView(); void requestUpdate(); - void sendFileInfo(QString name, QVector* materials, int vertices, int triangle); }; diff --git a/QtMeshViewer/Header/OglViewerWidget.h b/QtMeshViewer/Header/OglViewerWidget.h index 4050f7c..799bbc1 100644 --- a/QtMeshViewer/Header/OglViewerWidget.h +++ b/QtMeshViewer/Header/OglViewerWidget.h @@ -58,7 +58,6 @@ private: // functions private: void initShaders(); - void setConnections(); void resetView(); void updateLightPosition(); @@ -89,8 +88,5 @@ public slots: void setAttFac(double value); void setAmbCoef(double value); -// signals -signals: - void loadFile(QString); }; diff --git a/QtMeshViewer/Header/OutputDevice.h b/QtMeshViewer/Header/OutputDevice.h index 3f4ee63..10bff7b 100644 --- a/QtMeshViewer/Header/OutputDevice.h +++ b/QtMeshViewer/Header/OutputDevice.h @@ -1,6 +1,8 @@ #pragma once #include +struct Material; + class OutputDevice : public QObject { Q_OBJECT @@ -20,8 +22,11 @@ public: }; void print(QString message, int severity) { emit sendMessage(message, severity); }; + void setFileInfo(QString name, QVector* materials, int vertices, int triangle) { + emit sendFileInfo(name, materials, vertices, triangle); + }; signals: void sendMessage(QString message, int severity); - + void sendFileInfo(QString name, QVector* materials, int vertices, int triangle); }; \ No newline at end of file diff --git a/QtMeshViewer/Source/GeometryEngine.cpp b/QtMeshViewer/Source/GeometryEngine.cpp index 002817e..b8c41f6 100644 --- a/QtMeshViewer/Source/GeometryEngine.cpp +++ b/QtMeshViewer/Source/GeometryEngine.cpp @@ -142,10 +142,6 @@ void GeometryEngine::drawGeometry(QOpenGLShaderProgram *program, bool wireframe) } } - -///////////////////////////////////////////////////////////////////////// -// slots - void GeometryEngine::loadFile(QString filePath) { // cleanup old stuff and recreate buffers @@ -215,7 +211,7 @@ void GeometryEngine::loadFile(QString filePath) emit requestUpdate(); OutputDevice::getInstance()->print("done..", 0); - emit sendFileInfo(filePath.right(filePath.size() - filePath.lastIndexOf(QRegExp("/|\\\\")) - 1), m_materials, vertexData.size(), indexData.size() / 3); + OutputDevice::getInstance()->setFileInfo(filePath.right(filePath.size() - filePath.lastIndexOf(QRegExp("/|\\\\")) - 1), m_materials, vertexData.size(), indexData.size() / 3); } catch (std::invalid_argument e) { diff --git a/QtMeshViewer/Source/MainWindow.cpp b/QtMeshViewer/Source/MainWindow.cpp index ffa2daa..05c12b6 100644 --- a/QtMeshViewer/Source/MainWindow.cpp +++ b/QtMeshViewer/Source/MainWindow.cpp @@ -31,6 +31,7 @@ MainWindow::MainWindow(QWidget *parent) setWindowIcon(QIcon(":/images/icon.ico")); connect(OutputDevice::getInstance(this), &OutputDevice::sendMessage, this, &MainWindow::printMessage); + connect(OutputDevice::getInstance(this), &OutputDevice::sendFileInfo, this, &MainWindow::setFileInfo); // setup opengl things QSurfaceFormat format; diff --git a/QtMeshViewer/Source/OglViewerWidget.cpp b/QtMeshViewer/Source/OglViewerWidget.cpp index 588066d..fbd971f 100644 --- a/QtMeshViewer/Source/OglViewerWidget.cpp +++ b/QtMeshViewer/Source/OglViewerWidget.cpp @@ -1,5 +1,6 @@ #include "..\Header\OglViewerWidget.h" #include "..\Header\OutputDevice.h" +#include "..\Header\MainWindow.h" #include #include #include @@ -17,6 +18,7 @@ OglViewerWidget::OglViewerWidget(QWidget *parent) setFocus(); setAcceptDrops(true); + // settings window m_settings = new SettingsWindow(m_backgroundColorOff.toVector3D() * 255, m_backgroundColorOn.toVector3D() * 255, m_light.intensities * 255, true, m_light.ambientCoefficient, m_light.attenuationFactor, 1, this); connect(m_settings, &SettingsWindow::updateBGColorOff, this, &OglViewerWidget::setBGColorOff); @@ -60,15 +62,6 @@ void OglViewerWidget::initShaders() close(); } -void OglViewerWidget::setConnections() -{ - connect(m_dataEngine, &GeometryEngine::requestResetView, this, &OglViewerWidget::resetView); - connect(parentWidget(), SIGNAL(loadFile(QString)), m_dataEngine, SLOT(loadFile(QString))); - connect(this, SIGNAL(loadFile(QString)), m_dataEngine, SLOT(loadFile(QString))); - connect(m_dataEngine, SIGNAL(requestUpdate()), this, SLOT(update())); - connect(m_dataEngine, SIGNAL(sendFileInfo(QString, QVector*, int, int)), parentWidget(), SLOT(setFileInfo(QString, QVector*, int, int))); -} - void OglViewerWidget::resetView() { m_rotation = QQuaternion(); @@ -107,7 +100,14 @@ void OglViewerWidget::initializeGL() glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); m_dataEngine = new GeometryEngine(this); - setConnections(); + connect(m_dataEngine, &GeometryEngine::requestResetView, this, &OglViewerWidget::resetView); + connect(m_dataEngine, &GeometryEngine::requestUpdate, this, static_cast(&OglViewerWidget::update)); + + //TODO: better solution + MainWindow* parent = dynamic_cast(parentWidget()); + if (parent != NULL) + connect(parent, &MainWindow::loadFile, [this](QString value) {m_dataEngine->loadFile(value); }); + } void OglViewerWidget::resizeGL(int w, int h) @@ -327,7 +327,7 @@ void OglViewerWidget::dragEnterEvent(QDragEnterEvent *e) void OglViewerWidget::dropEvent(QDropEvent * e) { - emit loadFile(e->mimeData()->urls().first().toLocalFile()); + m_dataEngine->loadFile(e->mimeData()->urls().first().toLocalFile()); }