From 77d25651472233dee0fc8ac03de3560eb6a267c9 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Tue, 16 Jul 2013 06:52:10 +0200 Subject: Draw quarter-ellipse in place of user-defined curve when requested --- .../ftnoir_accela_filtercontrols.ui | 136 +++++++++++++++------ ftnoir_filter_accela/ftnoir_filter_accela.cpp | 4 +- ftnoir_filter_accela/ftnoir_filter_accela.h | 1 + .../ftnoir_filter_accela_dialog.cpp | 62 +++++++++- 4 files changed, 156 insertions(+), 47 deletions(-) diff --git a/ftnoir_filter_accela/ftnoir_accela_filtercontrols.ui b/ftnoir_filter_accela/ftnoir_accela_filtercontrols.ui index 6cb28176..0fe8f920 100644 --- a/ftnoir_filter_accela/ftnoir_accela_filtercontrols.ui +++ b/ftnoir_filter_accela/ftnoir_accela_filtercontrols.ui @@ -9,8 +9,8 @@ 0 0 - 880 - 673 + 868 + 729 @@ -44,18 +44,100 @@ 850 - 574 + 650 300 - 574 + 650 0 + + + Preset + + + + + 10 + 10 + 111 + 16 + + + + Rotation smoothing + + + + + + 10 + 40 + 111 + 16 + + + + Translation smoothing + + + + + + 130 + 10 + 81 + 22 + + + + 0.100000000000000 + + + 10.000000000000000 + + + 3.000000000000000 + + + + + + 130 + 40 + 81 + 22 + + + + 0.100000000000000 + + + 10.000000000000000 + + + 0.750000000000000 + + + + + + 130 + 70 + 75 + 23 + + + + Set curves + + + Rotation @@ -64,19 +146,19 @@ 20 - 20 + 10 819 - 510 + 571 - 6 + 10 - 8 + 10 - 127 + 57 57 @@ -120,19 +202,19 @@ 20 - 20 + 10 819 - 510 + 581 - 6 + 10 - 8 + 10 - 127 + 57 57 @@ -321,32 +403,6 @@ background:none; - - - - Smoothing: - - - - - - - 3 - - - 0.100000000000000 - - - 100.000000000000000 - - - 0.010000000000000 - - - 1.000000000000000 - - - diff --git a/ftnoir_filter_accela/ftnoir_filter_accela.cpp b/ftnoir_filter_accela/ftnoir_filter_accela.cpp index 3c845899..a53f689e 100644 --- a/ftnoir_filter_accela/ftnoir_filter_accela.cpp +++ b/ftnoir_filter_accela/ftnoir_filter_accela.cpp @@ -21,8 +21,8 @@ #endif FTNoIR_Filter::FTNoIR_Filter() : - functionConfig("Accela-Scaling-Rotation", 6, 8), - translationFunctionConfig("Accela-Scaling-Translation", 6, 8) + functionConfig("Accela-Scaling-Rotation", 10, 10), + translationFunctionConfig("Accela-Scaling-Translation", 10, 10) { first_run = true; kMagicNumber = 100.0f; diff --git a/ftnoir_filter_accela/ftnoir_filter_accela.h b/ftnoir_filter_accela/ftnoir_filter_accela.h index fa1e9bcd..2e954c37 100644 --- a/ftnoir_filter_accela/ftnoir_filter_accela.h +++ b/ftnoir_filter_accela/ftnoir_filter_accela.h @@ -96,6 +96,7 @@ private slots: void doCancel(); void settingChanged(bool) { settingsDirty = true; } void settingChanged(int) { settingsDirty = true; } + void resetCircle(); }; //******************************************************************************************************* diff --git a/ftnoir_filter_accela/ftnoir_filter_accela_dialog.cpp b/ftnoir_filter_accela/ftnoir_filter_accela_dialog.cpp index 2e9bd61b..46801bde 100644 --- a/ftnoir_filter_accela/ftnoir_filter_accela_dialog.cpp +++ b/ftnoir_filter_accela/ftnoir_filter_accela_dialog.cpp @@ -27,8 +27,9 @@ 20130102 - WVR: Added 'reduction factor' to accommodate Patrick's need for speed. */ #include "ftnoir_filter_accela/ftnoir_filter_accela.h" -#include "math.h" +#include #include +#include #include "facetracknoir/global-settings.h" //******************************************************************************************************* @@ -39,8 +40,8 @@ // FilterControls::FilterControls() : QWidget(), - functionConfig("Accela-Scaling-Rotation", 6, 8), - translationFunctionConfig("Accela-Scaling-Translation", 6, 8) + functionConfig("Accela-Scaling-Rotation", 10, 10), + translationFunctionConfig("Accela-Scaling-Translation", 10, 10) { ui.setupUi( this ); @@ -50,6 +51,7 @@ FilterControls::FilterControls() : connect(ui.btnCancel, SIGNAL(clicked()), this, SLOT(doCancel())); connect(ui.scalingConfig, SIGNAL(CurveChanged(bool)), this, SLOT(settingChanged(bool))); connect(ui.translationScalingConfig, SIGNAL(CurveChanged(bool)), this, SLOT(settingChanged(bool))); + connect(ui.resetCircle, SIGNAL(clicked()), this, SLOT(resetCircle())); // Connect slider for reduction //connect(ui.slideReduction, SIGNAL(valueChanged(int)), this, SLOT(settingChanged(int))); @@ -148,12 +150,63 @@ void FilterControls::loadSettings() { iniFile.beginGroup ( "Accela" ); ui.slideReduction->setValue (iniFile.value ( "Reduction", 100 ).toInt()); ui.slideZoom->setValue(iniFile.value("zoom-slowness", 0).toInt()); - ui.smoothingFactor->setValue(iniFile.value("smoothing-factor", 1).toFloat()); + ui.rotationCircle->setValue(iniFile.value("preset-rotation", 3).toDouble()); + ui.translationCircle->setValue(iniFile.value("preset-translation", 0.75).toDouble()); iniFile.endGroup (); settingsDirty = false; } +void FilterControls::resetCircle() +{ + QSettings settings("opentrack"); // Registry settings (in HK_USER) + QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString(); + QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file) + iniFile.beginGroup ( "Accela" ); + iniFile.setValue("preset-rotation", ui.rotationCircle->value()); + iniFile.setValue("preset-translation", ui.translationCircle->value()); + iniFile.endGroup(); + + // essentially unit circles elongated on the X axis + double elongations[] = { + ui.rotationCircle->value(), ui.translationCircle->value() + }; + + FunctionConfig* configs[] = { + &functionConfig, &translationFunctionConfig + }; + + QFunctionConfigurator* widgets[] = { + ui.scalingConfig, ui.translationScalingConfig + }; + + for (int i = 0; i < 2; i++) + { + FunctionConfig& cfg = *configs[i]; + double sz = elongations[i]; + + cfg.removeAllPoints(); + + for (double x = 0; x <= sz+1e-1; x += 1e-1) + { + double sq = sz*sz-x*x; + double val; + if (sq <= 1e-4) + val = 0; + else + val = std::min(sqrt(sq), sz); + + cfg.addPoint(QPointF(x, 10*(sz-val)/sz)); + } + + cfg.saveSettings(iniFile); + + widgets[i]->setConfig(&cfg, currentFile); + } + + settingsDirty = false; +} + // // Save the current Settings to the currently 'active' INI-file. // @@ -168,7 +221,6 @@ void FilterControls::save() { iniFile.beginGroup ( "Accela" ); iniFile.setValue ( "Reduction", ui.slideReduction->value() ); iniFile.setValue("zoom-slowness", ui.slideZoom->value()); - iniFile.setValue("smoothing-factor", ui.smoothingFactor->value()); iniFile.endGroup (); functionConfig.saveSettings(iniFile); -- cgit v1.2.3