From 1a04dd8db351194ff010afc7de1d2cb5ded2f0a9 Mon Sep 17 00:00:00 2001 From: Riku Avelar Date: Wed, 30 Nov 2016 16:22:35 -0500 Subject: [PATCH] Rotation and Toggle Normals --- mainwindow.ui | 96 ++++++++++++++++++++++++++++++------- src/viewer/simpleViewer.cpp | 29 +++++++++-- src/viewer/simpleViewer.h | 28 +++++++---- src/window/mainwindow.cpp | 25 ++++++++++ src/window/mainwindow.h | 2 + 5 files changed, 149 insertions(+), 31 deletions(-) diff --git a/mainwindow.ui b/mainwindow.ui index dad8d72..329e3be 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -63,6 +63,26 @@ 6 + + + + false + + + -X + + + + + + + false + + + +X + + + @@ -70,18 +90,15 @@ - - - - Qt::Vertical + + + + false - - - 20 - 40 - + + Delete Cube - + @@ -107,6 +124,13 @@ + + + + Forme + + + @@ -120,12 +144,18 @@ - - - - Forme + + + + Qt::Vertical - + + + 20 + 40 + + + @@ -140,13 +170,43 @@ - - + + false - Delete Cube + +Y + + + + + + + false + + + -Y + + + + + + + false + + + +Z + + + + + + + false + + + -Z diff --git a/src/viewer/simpleViewer.cpp b/src/viewer/simpleViewer.cpp index 97ab0af..7aeccc7 100644 --- a/src/viewer/simpleViewer.cpp +++ b/src/viewer/simpleViewer.cpp @@ -235,9 +235,7 @@ void Viewer::mousePressEvent(QMouseEvent* e) { } selectedObj.shape = selectedGeom.shape; selectedObj.shape->getParent()->addChild(selection); - cubeSelected(true); - - rotateSelected(X_CCW); + cubeSelected(true); } if(!selectedGeom.position.isIdentity() && e->modifiers().testFlag(Qt::ShiftModifier)) @@ -847,6 +845,13 @@ void Viewer::toggleNormalMaps(bool state) { } void Viewer::deleteSelected() { + m_program->bind(); + int pointCLocs[3] = {m_c1Loc, m_c2Loc, m_c3Loc}; + + m_program->setUniformValue(pointCLocs[0], QColor(0,0,0)); + m_program->setUniformValue(pointCLocs[1], QColor(0,0,0)); + m_program->setUniformValue(pointCLocs[2], QColor(0,0,0)); + // Remove Shape from its parent if(selectedObj.shape == nullptr) return; // selectedObj.shape->getParent()->getChildren()->erase( @@ -887,6 +892,24 @@ void Viewer::startAniumation(){} void Viewer::stopAnimation(){} +void Viewer::rotateSelectedObjXCCW() { + rotateSelected(RotateDirection::X_CCW); +} +void Viewer::rotateSelectedObjXCW() { + rotateSelected(RotateDirection::X_CW); +} +void Viewer::rotateSelectedObjYCCW() { + rotateSelected(RotateDirection::Y_CCW); +} +void Viewer::rotateSelectedObjYCW() { + rotateSelected(RotateDirection::Y_CW); +} +void Viewer::rotateSelectedObjZCCW() { + rotateSelected(RotateDirection::Z_CCW); +} +void Viewer::rotateSelectedObjZCW() { + rotateSelected(RotateDirection::Z_CW); +} void Viewer::rotateSelected(RotateDirection dir) { if(selectedObj.shape == nullptr || selectedObj.shape->getParent() == nullptr) return; diff --git a/src/viewer/simpleViewer.h b/src/viewer/simpleViewer.h index 15dde25..c32d442 100644 --- a/src/viewer/simpleViewer.h +++ b/src/viewer/simpleViewer.h @@ -56,6 +56,17 @@ public: virtual void visit(Cube &s); virtual void visit(Sphere &s); + + + enum RotateDirection { + X_CCW, + X_CW, + Y_CCW, + Y_CW, + Z_CCW, + Z_CW + }; + public slots: void cleanup(); void changeColor(QColor); @@ -64,6 +75,12 @@ public slots: void setMinLinear(bool); void deleteSelected(); void toggleNormalMaps(bool); + void rotateSelectedObjXCCW(); + void rotateSelectedObjXCW(); + void rotateSelectedObjYCCW(); + void rotateSelectedObjYCW(); + void rotateSelectedObjZCCW(); + void rotateSelectedObjZCW(); signals: int shapeSelected(int); @@ -154,16 +171,7 @@ private: GLuint m_Buffers[NumBuffers]; GLuint m_RenderBuffers[NumRenderBuffers]; - Shape* generateShapeFromIndex(int); - - enum RotateDirection { - X_CCW, - X_CW, - Y_CCW, - Y_CW, - Z_CCW, - Z_CW - }; + Shape* generateShapeFromIndex(int); enum Textures{ TEX_DRYGOUND, diff --git a/src/window/mainwindow.cpp b/src/window/mainwindow.cpp index 4d0981e..62ba704 100644 --- a/src/window/mainwindow.cpp +++ b/src/window/mainwindow.cpp @@ -3,6 +3,7 @@ #include #include #include +#include namespace { Viewer* view; @@ -27,6 +28,16 @@ MainWindow::MainWindow(QWidget *parent) : magFilterGroup->addAction(ui->actionMagLinear); magFilterGroup->addAction(ui->actionMagNear); + controlGroup = new QButtonGroup(this); + controlGroup->addButton(ui->action_delete); + controlGroup->addButton(ui->ccw_x); + controlGroup->addButton(ui->cw_x); + controlGroup->addButton(ui->ccw_y); + controlGroup->addButton(ui->cw_y); + controlGroup->addButton(ui->ccw_z); + controlGroup->addButton(ui->cw_z); + + connect(ui->pushButton, SIGNAL(clicked(bool)), this, SLOT(onColorPickerActivate())); } @@ -49,7 +60,21 @@ void MainWindow::addViewer(Viewer* viewer) connect(ui->actionNormal_Maps, SIGNAL(toggled(bool)), viewer, SLOT(toggleNormalMaps(bool))); connect(ui->action_delete, SIGNAL(clicked(bool)), viewer, SLOT(deleteSelected())); + connect(viewer, SIGNAL(cubeSelected(bool)), ui->action_delete, SLOT(setEnabled(bool))); + connect(viewer, SIGNAL(cubeSelected(bool)), ui->ccw_x, SLOT(setEnabled(bool))); + connect(viewer, SIGNAL(cubeSelected(bool)), ui->cw_x, SLOT(setEnabled(bool))); + connect(viewer, SIGNAL(cubeSelected(bool)), ui->ccw_y, SLOT(setEnabled(bool))); + connect(viewer, SIGNAL(cubeSelected(bool)), ui->cw_y, SLOT(setEnabled(bool))); + connect(viewer, SIGNAL(cubeSelected(bool)), ui->ccw_z, SLOT(setEnabled(bool))); + connect(viewer, SIGNAL(cubeSelected(bool)), ui->cw_z, SLOT(setEnabled(bool))); + + connect(ui->ccw_x, SIGNAL(clicked(bool)), viewer, SLOT(rotateSelectedObjXCCW())); + connect(ui->cw_x, SIGNAL(clicked(bool)), viewer, SLOT(rotateSelectedObjXCW())); + connect(ui->ccw_y, SIGNAL(clicked(bool)), viewer, SLOT(rotateSelectedObjYCCW())); + connect(ui->cw_y, SIGNAL(clicked(bool)), viewer, SLOT(rotateSelectedObjYCW())); + connect(ui->ccw_z, SIGNAL(clicked(bool)), viewer, SLOT(rotateSelectedObjZCCW())); + connect(ui->cw_z, SIGNAL(clicked(bool)), viewer, SLOT(rotateSelectedObjZCW())); } void MainWindow::onColorPickerActivate(){ diff --git a/src/window/mainwindow.h b/src/window/mainwindow.h index 8294784..b21499c 100644 --- a/src/window/mainwindow.h +++ b/src/window/mainwindow.h @@ -4,6 +4,7 @@ #include #include #include +#include #include "src/viewer/simpleViewer.h" namespace Ui { @@ -30,6 +31,7 @@ private: QActionGroup *lightTypeGroup; QActionGroup *minFilterGroup; QActionGroup *magFilterGroup; + QButtonGroup *controlGroup; }; #endif // MAINWINDOW_H