add wireframe paint option,

write file information on the screen,
bug fixes
This commit is contained in:
Anakin 2017-01-16 14:24:30 +01:00
parent 454ed45fa1
commit 86dfe32145
7 changed files with 45 additions and 7 deletions

View File

@ -33,7 +33,7 @@ private:
public slots: public slots:
void loadFile(QString filePath); void loadFile(QString filePath);
void drawGeometry(QOpenGLShaderProgram *program); void drawGeometry(QOpenGLShaderProgram *program, bool wireframe);
signals: signals:
void requestResetView(); void requestResetView();

View File

@ -1,8 +1,10 @@
#pragma once #pragma once
#include <QtWidgets/QMainWindow> #include <QtWidgets/QMainWindow>
#include <qwidget.h>
#include <QByteArray> #include <QByteArray>
#include <QStringList> #include <QStringList>
#include <QLabel>
#include "ui_MainWindow.h" #include "ui_MainWindow.h"
struct Material; struct Material;
@ -20,7 +22,7 @@ private:
int m_curSeverity; int m_curSeverity;
void setupWidgets(); void setupWidgets();
QByteArray m_fileInfo; QByteArray m_fileInfo;
QLabel* m_output;
private: private:
void openFile(); void openFile();
@ -28,6 +30,9 @@ private:
void aboutTool(); void aboutTool();
void takeScreenShot(); void takeScreenShot();
protected:
virtual void resizeEvent(QResizeEvent * e) Q_DECL_OVERRIDE;
public slots: public slots:
void printMessage(QString message, int severity); void printMessage(QString message, int severity);
void setFileInfo(QString name, QVector<Material>* materials, int vertices, int triangle); void setFileInfo(QString name, QVector<Material>* materials, int vertices, int triangle);

View File

@ -44,6 +44,8 @@ private:
QVector3D m_translation; QVector3D m_translation;
QQuaternion m_rotation; QQuaternion m_rotation;
bool m_wireframe = false;
protected: protected:
void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
@ -66,5 +68,6 @@ private slots:
public slots: public slots:
void changeDirection(int direction); void changeDirection(int direction);
void toggleWireframe();
}; };

View File

@ -8,7 +8,6 @@
</qresource> </qresource>
<qresource prefix="/files"> <qresource prefix="/files">
<file>about.txt</file> <file>about.txt</file>
<file>stylesheet.txt</file>
</qresource> </qresource>
<qresource prefix="/images/toolbar"> <qresource prefix="/images/toolbar">
<file>placeholder.png</file> <file>placeholder.png</file>
@ -19,5 +18,6 @@
<file>Y.png</file> <file>Y.png</file>
<file>Z.png</file> <file>Z.png</file>
<file>screenshot.png</file> <file>screenshot.png</file>
<file>wireframe.png</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@ -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()) if (!m_arrayBuf.isCreated() || !m_indexBuf.isCreated())
return; return;
@ -178,7 +178,7 @@ void GeometryEngine::drawGeometry(QOpenGLShaderProgram *program)
bool tmp_transparent(false); bool tmp_transparent(false);
// bind the correct texture // 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(); m_materials->at(it.textureIndex).texture->bind();
tmp_transparent = m_materials->at(it.textureIndex).transparent; tmp_transparent = m_materials->at(it.textureIndex).transparent;
@ -195,7 +195,7 @@ void GeometryEngine::drawGeometry(QOpenGLShaderProgram *program)
program->setUniformValue("b_transparent", tmp_transparent); program->setUniformValue("b_transparent", tmp_transparent);
// Draw cube geometry using indices from VBO 1 // 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)));
} }
} }

View File

@ -8,6 +8,8 @@
#include <QSignalMapper> #include <QSignalMapper>
#include <QFile> #include <QFile>
#include <QSizePolicy> #include <QSizePolicy>
#include <QFont>
#include <QResizeEvent>
#include "..\Header\FileInterface.h" #include "..\Header\FileInterface.h"
#define WINDOW_NAME "Mesh Viewer" #define WINDOW_NAME "Mesh Viewer"
@ -16,6 +18,7 @@ MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent) : QMainWindow(parent)
, ui(new Ui::MainWindowClass) , ui(new Ui::MainWindowClass)
, m_curSeverity(0) , m_curSeverity(0)
, m_output(new QLabel(this))
{ {
ui->setupUi(this); ui->setupUi(this);
@ -36,6 +39,7 @@ MainWindow::MainWindow(QWidget *parent)
MainWindow::~MainWindow() MainWindow::~MainWindow()
{ {
delete ui; delete ui;
delete m_output;
} }
void MainWindow::openFile() void MainWindow::openFile()
@ -89,6 +93,14 @@ void MainWindow::setupWidgets()
ui->mainToolBar->addSeparator(); 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); QAction *fileInfo = new QAction(QIcon(":/images/toolbar/info.png"), "File info", this);
connect(fileInfo, &QAction::triggered, this, &MainWindow::aboutFile); connect(fileInfo, &QAction::triggered, this, &MainWindow::aboutFile);
ui->mainToolBar->addAction(fileInfo); ui->mainToolBar->addAction(fileInfo);
@ -97,6 +109,11 @@ void MainWindow::setupWidgets()
connect(help, &QAction::triggered, this, &MainWindow::aboutTool); connect(help, &QAction::triggered, this, &MainWindow::aboutTool);
ui->mainToolBar->addAction(help); 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); viewer->grab().save(destination);
} }
void MainWindow::resizeEvent(QResizeEvent * e)
{
m_output->move(40, e->size().height() - 80);
}
void MainWindow::setFileInfo(QString name, QVector<Material>* materials, int vertices, int triangle) void MainWindow::setFileInfo(QString name, QVector<Material>* materials, int vertices, int triangle)
{ {
m_fileInfo = QByteArray("Filename: "); m_fileInfo = QByteArray("Filename: ");
@ -165,6 +187,8 @@ void MainWindow::setFileInfo(QString name, QVector<Material>* materials, int ver
m_fileInfo += it.name; m_fileInfo += it.name;
m_fileInfo += "\n"; m_fileInfo += "\n";
} }
m_output->setText(m_fileInfo.left(m_fileInfo.indexOf("<detail>")));
} }
void MainWindow::printMessage(QString message, int severity) void MainWindow::printMessage(QString message, int severity)

View File

@ -226,7 +226,7 @@ void OglViewerWidget::paintGL()
m_program.setUniformValue("vp_matrix", m_projection * view); m_program.setUniformValue("vp_matrix", m_projection * view);
// Draw cube geometry // 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; break;
} }
} }
void OglViewerWidget::toggleWireframe()
{
m_wireframe = 1 - m_wireframe;
update();
}