diff --git a/QtMeshViewer/Header/GeometryEngine.h b/QtMeshViewer/Header/GeometryEngine.h index 235ae9fd4555ee065ebed3ad9f9a3c4808fcdb33..b2556b296a0ce65db72974c3ce277d9d137a8891 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<Material>* materials, int vertices, int triangle); }; diff --git a/QtMeshViewer/Header/OglViewerWidget.h b/QtMeshViewer/Header/OglViewerWidget.h index 4050f7ce0f027e709883dfe8dd75f653e0b98d44..799bbc12accaa005f4661a5e8f5f29cd5792d297 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 3f4ee63f470e313772f5a53b5eef5ea94b85fa4e..10bff7bc955d7f5f437c03cd9551dc2a240d109e 100644 --- a/QtMeshViewer/Header/OutputDevice.h +++ b/QtMeshViewer/Header/OutputDevice.h @@ -1,6 +1,8 @@ #pragma once #include <QObject> +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<Material>* materials, int vertices, int triangle) { + emit sendFileInfo(name, materials, vertices, triangle); + }; signals: void sendMessage(QString message, int severity); - + void sendFileInfo(QString name, QVector<Material>* materials, int vertices, int triangle); }; \ No newline at end of file diff --git a/QtMeshViewer/Source/GeometryEngine.cpp b/QtMeshViewer/Source/GeometryEngine.cpp index 002817e9f89a4e5c947249fac182ade9da94e080..b8c41f6171c6c66386a3d93646c0d21dc5921b4b 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 ffa2daa77860a701d695ecac6317410e7e34a186..05c12b679eff55ed25217b892f71daf54ffc63c4 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 588066d713e3c337ddee148bd4f3f93aa45dd9ca..fbd971ff5cec0ac9f194c9914294d35d4e0b9dec 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 <QMouseEvent> #include <QDropEvent> #include <QMimeData> @@ -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<Material>*, int, int)), parentWidget(), SLOT(setFileInfo(QString, QVector<Material>*, 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<void(OglViewerWidget::*)(void)>(&OglViewerWidget::update)); + + //TODO: better solution + MainWindow* parent = dynamic_cast<MainWindow*>(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()); }