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