Commit fa8808fe authored by Anakin's avatar Anakin

add exe icon,

signal-slot for openFile,
resetView on openFile,
cleanup when open a new file,
triangulate quad poly now correctly, more not working, bug from previous version,
next:
fix 5,6,.. triangulation,
triClothMan, IC Helmet, still buggy,
parent 0735ef99
#pragma once
#include "..\Header\FileInterface.h"
#include <QObject>
#include <QOpenGLFunctions>
#include <QOpenGLShaderProgram>
#include <QOpenGLBuffer>
......@@ -13,8 +14,10 @@ struct DrawInformation {
QMatrix4x4 modelMatrix;
};
class GeometryEngine : protected QOpenGLFunctions
class GeometryEngine : public QObject, protected QOpenGLFunctions
{
Q_OBJECT
public:
GeometryEngine();
virtual ~GeometryEngine();
......@@ -26,9 +29,14 @@ private:
QVector<DrawInformation> m_drawList;
void loadTexture(const char* filePath);
void clearData();
public:
public slots:
void loadFile(const char* filePath);
void drawGeometry(QOpenGLShaderProgram *program);
signals:
void requestResetView();
};
......@@ -19,4 +19,6 @@ private slots:
void aboutFile();
void aboutTool();
signals:
void loadFile(const char*);
};
......@@ -50,9 +50,7 @@ protected:
private:
void initShaders();
public:
void openFile(const char* filePath);
private slots:
void resetView();
};
IDI_ICON1 ICON DISCARDABLE "icon.ico"
\ No newline at end of file
......@@ -10,23 +10,12 @@ GeometryEngine::GeometryEngine()
{
initializeOpenGLFunctions();
// Generate 2 VBOs
m_arrayBuf.create();
m_indexBuf.create();
// Initializes cube geometry and transfers it to VBOs
loadFile("..\\Release\\Msh\\ic_helmet.msh");
loadFile("..\\Release\\Msh\\4-Poly.msh");
}
GeometryEngine::~GeometryEngine()
{
m_arrayBuf.destroy();
m_indexBuf.destroy();
for (auto it : m_textures)
delete it;
m_textures.clear();
m_drawList.clear();
clearData();
}
......@@ -35,6 +24,14 @@ GeometryEngine::~GeometryEngine()
void GeometryEngine::loadFile(const char* filePath)
{
// cleanup old stuff and recreate buffers
clearData();
m_arrayBuf.create();
m_indexBuf.create();
//reset view
emit requestResetView();
try
{
//TODO normalize
......@@ -134,12 +131,28 @@ void GeometryEngine::loadTexture(const char* filePath)
m_textures.push_back(new_texture);
}
void GeometryEngine::clearData()
{
if (m_arrayBuf.isCreated())
m_arrayBuf.destroy();
if (m_indexBuf.isCreated())
m_indexBuf.destroy();
for (auto it : m_textures)
delete it;
m_textures.clear();
m_drawList.clear();
}
/////////////////////////////////////////////////////////////////////////
// public functions
void GeometryEngine::drawGeometry(QOpenGLShaderProgram *program)
{
if (!m_arrayBuf.isCreated() || !m_indexBuf.isCreated())
return;
// Setup
// Tell OpenGL which VBOs to use
m_arrayBuf.bind();
......
......@@ -26,7 +26,6 @@ MainWindow::MainWindow(QWidget *parent)
QSurfaceFormat::setDefaultFormat(format);
setCentralWidget(new OglViewerWidget(this));
}
MainWindow::~MainWindow()
......@@ -37,7 +36,7 @@ MainWindow::~MainWindow()
void MainWindow::openFile()
{
QString fileName = QFileDialog::getOpenFileName(this, "Open File", "../Release/Msh", "Mesh (*.msh)");
dynamic_cast<OglViewerWidget*>(centralWidget())->openFile(fileName.toStdString().c_str());
emit loadFile(fileName.toStdString().c_str());
}
void MainWindow::aboutFile()
......
......@@ -476,7 +476,7 @@ void MshFile::analyseSegmChunks(Model * dataDestination, std::list<ChunkHeader*>
for (unsigned int tri = 0; tri < tmp_multiPolySize - 2; tri++)
// ..calculate the edge indices
for (int triEdge = 0; triEdge < 3; triEdge++)
new_segment->indices.push_back((GLuint)(tri + triEdge - ((tri % 2) * (triEdge - 1) * 2)));
new_segment->indices.push_back((GLuint)tmp_buffer[(tri + triEdge - ((tri % 2) * (triEdge - 1) * 2))]);
}
else
{
......
#include "..\Header\OglViewerWidget.h"
#include "..\Header\MainWindow.h"
#include <QMouseEvent>
#include <QDropEvent>
#include <QMimeData>
......@@ -19,6 +19,7 @@ OglViewerWidget::OglViewerWidget(QWidget *parent) :
setFocus();
m_translation.setZ(DEFAULT_Z_DISTANCE);
setAcceptDrops(true);
}
OglViewerWidget::~OglViewerWidget()
......@@ -101,14 +102,12 @@ void OglViewerWidget::keyPressEvent(QKeyEvent *e)
{
if (e->key() == Qt::Key_Space)
{
m_rotation = QQuaternion();
m_translation = { 0.0, 0.0, DEFAULT_Z_DISTANCE };
resetView();
}
else if (e->key() == Qt::Key_Escape)
{
parentWidget()->close();
}
update();
}
void OglViewerWidget::initializeGL()
......@@ -126,6 +125,8 @@ void OglViewerWidget::initializeGL()
glEnable(GL_CULL_FACE);
m_dataEngine = new GeometryEngine;
connect(m_dataEngine, &GeometryEngine::requestResetView, this, &OglViewerWidget::resetView);
connect(parentWidget(), SIGNAL(loadFile(const char*)), m_dataEngine, SLOT(loadFile(const char*)));
}
......@@ -186,9 +187,11 @@ void OglViewerWidget::initShaders()
/////////////////////////////////////////////////////////////////////////
// public functions
// private slots
void OglViewerWidget::openFile(const char * filePath)
void OglViewerWidget::resetView()
{
m_dataEngine->loadFile(filePath);
}
\ No newline at end of file
m_rotation = QQuaternion();
m_translation = { 0.0, 0.0, DEFAULT_Z_DISTANCE };
update();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment