From 86dfe32145bc41e29d2a20636924055076b7f639 Mon Sep 17 00:00:00 2001 From: Anakin Date: Mon, 16 Jan 2017 14:24:30 +0100 Subject: [PATCH] add wireframe paint option, write file information on the screen, bug fixes --- QtMeshViewer/Header/GeometryEngine.h | 2 +- QtMeshViewer/Header/MainWindow.h | 7 ++++++- QtMeshViewer/Header/OglViewerWidget.h | 3 +++ QtMeshViewer/Resources/Resources.qrc | 2 +- QtMeshViewer/Source/GeometryEngine.cpp | 6 +++--- QtMeshViewer/Source/MainWindow.cpp | 24 ++++++++++++++++++++++++ QtMeshViewer/Source/OglViewerWidget.cpp | 8 +++++++- 7 files changed, 45 insertions(+), 7 deletions(-) diff --git a/QtMeshViewer/Header/GeometryEngine.h b/QtMeshViewer/Header/GeometryEngine.h index f52fd63..3a44ac3 100644 --- a/QtMeshViewer/Header/GeometryEngine.h +++ b/QtMeshViewer/Header/GeometryEngine.h @@ -33,7 +33,7 @@ private: public slots: void loadFile(QString filePath); - void drawGeometry(QOpenGLShaderProgram *program); + void drawGeometry(QOpenGLShaderProgram *program, bool wireframe); signals: void requestResetView(); diff --git a/QtMeshViewer/Header/MainWindow.h b/QtMeshViewer/Header/MainWindow.h index 7b8e0ad..af132e3 100644 --- a/QtMeshViewer/Header/MainWindow.h +++ b/QtMeshViewer/Header/MainWindow.h @@ -1,8 +1,10 @@ #pragma once #include +#include #include #include +#include #include "ui_MainWindow.h" struct Material; @@ -20,7 +22,7 @@ private: int m_curSeverity; void setupWidgets(); QByteArray m_fileInfo; - + QLabel* m_output; private: void openFile(); @@ -28,6 +30,9 @@ private: void aboutTool(); void takeScreenShot(); +protected: + virtual void resizeEvent(QResizeEvent * e) Q_DECL_OVERRIDE; + public slots: void printMessage(QString message, int severity); void setFileInfo(QString name, QVector* materials, int vertices, int triangle); diff --git a/QtMeshViewer/Header/OglViewerWidget.h b/QtMeshViewer/Header/OglViewerWidget.h index 91b8c38..0fd1cea 100644 --- a/QtMeshViewer/Header/OglViewerWidget.h +++ b/QtMeshViewer/Header/OglViewerWidget.h @@ -44,6 +44,8 @@ private: QVector3D m_translation; QQuaternion m_rotation; + bool m_wireframe = false; + protected: void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE; @@ -66,5 +68,6 @@ private slots: public slots: void changeDirection(int direction); + void toggleWireframe(); }; diff --git a/QtMeshViewer/Resources/Resources.qrc b/QtMeshViewer/Resources/Resources.qrc index 8577612..02ae3fc 100644 --- a/QtMeshViewer/Resources/Resources.qrc +++ b/QtMeshViewer/Resources/Resources.qrc @@ -8,7 +8,6 @@ about.txt - stylesheet.txt placeholder.png @@ -19,5 +18,6 @@ Y.png Z.png screenshot.png + wireframe.png diff --git a/QtMeshViewer/Source/GeometryEngine.cpp b/QtMeshViewer/Source/GeometryEngine.cpp index 6354e9b..55112d9 100644 --- a/QtMeshViewer/Source/GeometryEngine.cpp +++ b/QtMeshViewer/Source/GeometryEngine.cpp @@ -127,7 +127,7 @@ void GeometryEngine::loadFile(QString filePath) } } -void GeometryEngine::drawGeometry(QOpenGLShaderProgram *program) +void GeometryEngine::drawGeometry(QOpenGLShaderProgram *program, bool wireframe) { if (!m_arrayBuf.isCreated() || !m_indexBuf.isCreated()) return; @@ -178,7 +178,7 @@ void GeometryEngine::drawGeometry(QOpenGLShaderProgram *program) bool tmp_transparent(false); // bind the correct texture - if (it.textureIndex < m_materials->size()) + if (it.textureIndex < m_materials->size() && m_materials->at(it.textureIndex).texture != Q_NULLPTR) { m_materials->at(it.textureIndex).texture->bind(); tmp_transparent = m_materials->at(it.textureIndex).transparent; @@ -195,7 +195,7 @@ void GeometryEngine::drawGeometry(QOpenGLShaderProgram *program) program->setUniformValue("b_transparent", tmp_transparent); // Draw cube geometry using indices from VBO 1 - glDrawElements(GL_TRIANGLES, it.size, GL_UNSIGNED_INT, (void*)(it.offset * sizeof(GLuint))); + glDrawElements(wireframe? GL_LINES : GL_TRIANGLES, it.size, GL_UNSIGNED_INT, (void*)(it.offset * sizeof(GLuint))); } } diff --git a/QtMeshViewer/Source/MainWindow.cpp b/QtMeshViewer/Source/MainWindow.cpp index b6b0d25..0f2ad76 100644 --- a/QtMeshViewer/Source/MainWindow.cpp +++ b/QtMeshViewer/Source/MainWindow.cpp @@ -8,6 +8,8 @@ #include #include #include +#include +#include #include "..\Header\FileInterface.h" #define WINDOW_NAME "Mesh Viewer" @@ -16,6 +18,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindowClass) , m_curSeverity(0) + , m_output(new QLabel(this)) { ui->setupUi(this); @@ -36,6 +39,7 @@ MainWindow::MainWindow(QWidget *parent) MainWindow::~MainWindow() { delete ui; + delete m_output; } void MainWindow::openFile() @@ -89,6 +93,14 @@ void MainWindow::setupWidgets() ui->mainToolBar->addSeparator(); + QAction *wireframe = new QAction(QIcon(":/images/toolbar/wireframe.png"), "Wireframe", this); + wireframe->setCheckable(true); + wireframe->setChecked(false); + connect(wireframe, &QAction::triggered, viewer, &OglViewerWidget::toggleWireframe); + ui->mainToolBar->addAction(wireframe); + + ui->mainToolBar->addSeparator(); + QAction *fileInfo = new QAction(QIcon(":/images/toolbar/info.png"), "File info", this); connect(fileInfo, &QAction::triggered, this, &MainWindow::aboutFile); ui->mainToolBar->addAction(fileInfo); @@ -97,6 +109,11 @@ void MainWindow::setupWidgets() connect(help, &QAction::triggered, this, &MainWindow::aboutTool); ui->mainToolBar->addAction(help); + m_output->setObjectName("output"); + m_output->setStyleSheet("QLabel#output{color : white; min-width: 400px; min-height: 50px;}"); + m_output->setAlignment(Qt::AlignTop); + m_output->setText("Name: -\nMaterials: -\nVertice: -\nTriangle: -"); + m_output->raise(); } @@ -143,6 +160,11 @@ void MainWindow::takeScreenShot() viewer->grab().save(destination); } +void MainWindow::resizeEvent(QResizeEvent * e) +{ + m_output->move(40, e->size().height() - 80); +} + void MainWindow::setFileInfo(QString name, QVector* materials, int vertices, int triangle) { m_fileInfo = QByteArray("Filename: "); @@ -165,6 +187,8 @@ void MainWindow::setFileInfo(QString name, QVector* materials, int ver m_fileInfo += it.name; m_fileInfo += "\n"; } + + m_output->setText(m_fileInfo.left(m_fileInfo.indexOf(""))); } void MainWindow::printMessage(QString message, int severity) diff --git a/QtMeshViewer/Source/OglViewerWidget.cpp b/QtMeshViewer/Source/OglViewerWidget.cpp index c26efa8..60221ae 100644 --- a/QtMeshViewer/Source/OglViewerWidget.cpp +++ b/QtMeshViewer/Source/OglViewerWidget.cpp @@ -226,7 +226,7 @@ void OglViewerWidget::paintGL() m_program.setUniformValue("vp_matrix", m_projection * view); // Draw cube geometry - m_dataEngine->drawGeometry(&m_program); + m_dataEngine->drawGeometry(&m_program, m_wireframe); } @@ -293,3 +293,9 @@ void OglViewerWidget::changeDirection(int direction) break; } } + +void OglViewerWidget::toggleWireframe() +{ + m_wireframe = 1 - m_wireframe; + update(); +}