#include "Viewer.h" #include #include #include #include using namespace std; // Constructor initialized with FACE drawing. Viewer::Viewer() : entity(FACE) { } // Changing entity flag. void Viewer::keyPressEvent(QKeyEvent *e) { switch (e->key()) { case Qt::Key_L : loadFile(); break; case Qt::Key_V : entity = VERTEX; break; case Qt::Key_E : entity = EDGE; break; case Qt::Key_F : entity = FACE; break; default : QGLViewer::keyPressEvent(e); } // Refreshing drawing to take in account appearance changes. updateGL(); } void Viewer::loadFile() { QString name = QFileDialog::getOpenFileName("", "X3D files (*.x3d *.X3D);;All files (*)", this); // In case of Cancel if (name.isEmpty()) return; // Loads the file name. scene.load(name); // QGLViewer settings. setSceneBoundingBox( qglviewer::Vec(scene.getBBoxMin()[0],scene.getBBoxMin()[1],scene.getBBoxMin()[2]), qglviewer::Vec(scene.getBBoxMax()[0],scene.getBBoxMax()[1],scene.getBBoxMax()[2]) ); showEntireScene(); } void Viewer::init() { loadFile(); } void Viewer::draw() { if (scene.getMesh() == 0) return; // Switching entity. switch (entity) { case VERTEX: drawer.drawVertices(scene.getMesh()); break; case EDGE: drawer.drawEdges(scene.getMesh()); break; case FACE: drawer.drawFaces(scene.getMesh()); break; default: break; } } QString Viewer::helpString() const { QString message(""); message += "L" + QString(" loads a new file
"); message += "V" + QString(" draws the vertices
"); message += "E" + QString(" draws the edges
"); message += "F" + QString(" draws the faces
"); message += QGLViewer::helpString(); return message; } void Viewer::help() const { QMessageBox *mb = new QMessageBox("help", helpString(), QMessageBox::NoIcon,QMessageBox::Ok | QMessageBox::Default, QMessageBox::NoButton,QMessageBox::NoButton, NULL, "Help", false,Qt::WStyle_DialogBorder | Qt::WType_Dialog | Qt::WDestructiveClose); mb->show(); }