# HG changeset patch # User Teemu Piippo # Date 1529441767 -10800 # Node ID 6b0ca41c158ff91e1ae5508ea8a133cfe2f090b3 # Parent f5eb947a2e7f7e4795e6e0c6012efe19989fab87 added buttons to rotate circular primitives diff -r f5eb947a2e7f -r 6b0ca41c158f src/dialogs/circularprimitiveeditor.cpp --- a/src/dialogs/circularprimitiveeditor.cpp Tue Jun 19 23:18:58 2018 +0300 +++ b/src/dialogs/circularprimitiveeditor.cpp Tue Jun 19 23:56:07 2018 +0300 @@ -125,6 +125,8 @@ if (this->primitive) this->primitive->setInverted(checked); }); + connect(ui.rotateCcw, &QPushButton::clicked, [&](){ rotate(-1); }); + connect(ui.rotateCw, &QPushButton::clicked, [&](){ rotate(1); }); // Connect the reset button, "reset button" here meaning any button with the reset role. connect( ui.buttonBox, @@ -193,3 +195,16 @@ if (primitive) primitive->restore(originalState); // Restoring does not change 'originalState' } + +void CircularPrimitiveEditor::rotate(double factor) +{ + if (primitive) + { + double angle = factor * 360.0 / primitive->divisions(); + + QQuaternion rotation = QQuaternion::fromAxisAndAngle({0.0f, 1.0f, 0.0f}, angle); + QMatrix4x4 matrix = primitive->transformationMatrix(); + matrix.rotate(rotation); + primitive->setTransformationMatrix(matrix); + } +} diff -r f5eb947a2e7f -r 6b0ca41c158f src/dialogs/circularprimitiveeditor.h --- a/src/dialogs/circularprimitiveeditor.h Tue Jun 19 23:18:58 2018 +0300 +++ b/src/dialogs/circularprimitiveeditor.h Tue Jun 19 23:56:07 2018 +0300 @@ -31,6 +31,7 @@ private: Q_SLOT void updateWidgets(); Q_SLOT void reset(); + void rotate(double factor); class Ui_CircularPrimitiveEditor& ui; LDCircularPrimitive* primitive; diff -r f5eb947a2e7f -r 6b0ca41c158f src/dialogs/circularprimitiveeditor.ui --- a/src/dialogs/circularprimitiveeditor.ui Tue Jun 19 23:18:58 2018 +0300 +++ b/src/dialogs/circularprimitiveeditor.ui Tue Jun 19 23:56:07 2018 +0300 @@ -138,10 +138,28 @@ Transformation - + + + + + + + + + + + + + + + + + + +