summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--FaceTrackNoIR.suobin247296 -> 248320 bytes
-rw-r--r--FaceTrackNoIR/FaceTrackNoIR.cpp42
-rw-r--r--FaceTrackNoIR/FaceTrackNoIR.h10
-rw-r--r--FaceTrackNoIR/tracker.cpp69
-rw-r--r--FaceTrackNoIR/tracker.h3
-rw-r--r--bin/Settings/FreeFalcon.ini18
6 files changed, 129 insertions, 13 deletions
diff --git a/FaceTrackNoIR.suo b/FaceTrackNoIR.suo
index e3b455c0..02f7e4bf 100644
--- a/FaceTrackNoIR.suo
+++ b/FaceTrackNoIR.suo
Binary files differ
diff --git a/FaceTrackNoIR/FaceTrackNoIR.cpp b/FaceTrackNoIR/FaceTrackNoIR.cpp
index 895e6aac..d3511c16 100644
--- a/FaceTrackNoIR/FaceTrackNoIR.cpp
+++ b/FaceTrackNoIR/FaceTrackNoIR.cpp
@@ -176,6 +176,15 @@ void FaceTrackNoIR::getGameProgramName() {
}
}
+//
+// Get the ProgramName from a connected game and display it.
+//
+void FaceTrackNoIR::updateSettings() {
+ if ( tracker != NULL ) {
+ tracker->loadSettings();
+ }
+}
+
/** read the name of the first video-capturing device at start up **/
/** FaceAPI can only use this first one... **/
void FaceTrackNoIR::GetCameraNameDX() {
@@ -705,7 +714,7 @@ void FaceTrackNoIR::showPreferences() {
// Create if new
if (!_preferences)
{
- _preferences = new PreferencesDialog( this, Qt::Dialog );
+ _preferences = new PreferencesDialog( this, this, Qt::Dialog );
}
// Show if already created
@@ -721,7 +730,7 @@ void FaceTrackNoIR::showKeyboardShortcuts() {
// Create if new
if (!_keyboard_shortcuts)
{
- _keyboard_shortcuts = new KeyboardShortcutDialog( this, Qt::Dialog );
+ _keyboard_shortcuts = new KeyboardShortcutDialog( this, this, Qt::Dialog );
}
// Show if already created
@@ -737,7 +746,7 @@ void FaceTrackNoIR::showCurveConfiguration() {
// Create if new
if (!_curve_config)
{
- _curve_config = new CurveConfigurationDialog( this, Qt::Dialog );
+ _curve_config = new CurveConfigurationDialog( this, this, Qt::Dialog );
}
// Show if already created
@@ -884,7 +893,7 @@ void FaceTrackNoIR::trackingSourceSelected(int index)
//
// Constructor for FaceTrackNoIR=Preferences-dialog
//
-PreferencesDialog::PreferencesDialog( QWidget *parent, Qt::WindowFlags f ) :
+PreferencesDialog::PreferencesDialog( FaceTrackNoIR *ftnoir, QWidget *parent, Qt::WindowFlags f ) :
QWidget( parent , f)
{
ui.setupUi( this );
@@ -892,6 +901,8 @@ QWidget( parent , f)
QPoint offsetpos(100, 100);
this->move(parent->pos() + offsetpos);
+ mainApp = ftnoir; // Preserve a pointer to FTNoIR
+
// Connect Qt signals to member-functions
connect(ui.btnOK, SIGNAL(clicked()), this, SLOT(doOK()));
connect(ui.btnCancel, SIGNAL(clicked()), this, SLOT(doCancel()));
@@ -975,6 +986,11 @@ void PreferencesDialog::save() {
QSettings settings("Abbequerque Inc.", "FaceTrackNoIR"); // Registry settings (in HK_USER)
settings.setValue( "AutoMinimizeTime", ui.slideAutoMinimizeTime->value() );
+ //
+ // Send a message to the main program, to update the Settings (for the tracker)
+ //
+ mainApp->updateSettings();
+
settingsDirty = false;
}
@@ -983,7 +999,7 @@ void PreferencesDialog::save() {
//
// Constructor for Keyboard-shortcuts-dialog
//
-KeyboardShortcutDialog::KeyboardShortcutDialog( QWidget *parent, Qt::WindowFlags f ) :
+KeyboardShortcutDialog::KeyboardShortcutDialog( FaceTrackNoIR *ftnoir, QWidget *parent, Qt::WindowFlags f ) :
QWidget( parent , f)
{
ui.setupUi( this );
@@ -991,6 +1007,8 @@ QWidget( parent , f)
QPoint offsetpos(100, 100);
this->move(parent->pos() + offsetpos);
+ mainApp = ftnoir; // Preserve a pointer to FTNoIR
+
// Connect Qt signals to member-functions
connect(ui.btnOK, SIGNAL(clicked()), this, SLOT(doOK()));
connect(ui.btnCancel, SIGNAL(clicked()), this, SLOT(doCancel()));
@@ -1273,6 +1291,11 @@ void KeyboardShortcutDialog::save() {
iniFile.endGroup ();
settingsDirty = false;
+
+ //
+ // Send a message to the main program, to update the Settings (for the tracker)
+ //
+ mainApp->updateSettings();
}
//**************************************************************************************************//
@@ -1280,7 +1303,7 @@ void KeyboardShortcutDialog::save() {
//
// Constructor for Curve-configuration-dialog
//
-CurveConfigurationDialog::CurveConfigurationDialog( QWidget *parent, Qt::WindowFlags f ) :
+CurveConfigurationDialog::CurveConfigurationDialog( FaceTrackNoIR *ftnoir, QWidget *parent, Qt::WindowFlags f ) :
QWidget( parent , f)
{
ui.setupUi( this );
@@ -1288,6 +1311,8 @@ QWidget( parent , f)
QPoint offsetpos(100, 100);
this->move(parent->pos() + offsetpos);
+ mainApp = ftnoir; // Preserve a pointer to FTNoIR
+
// Connect Qt signals to member-functions
connect(ui.btnOK, SIGNAL(clicked()), this, SLOT(doOK()));
connect(ui.btnCancel, SIGNAL(clicked()), this, SLOT(doCancel()));
@@ -1471,6 +1496,11 @@ void CurveConfigurationDialog::save() {
iniFile.endGroup ();
settingsDirty = false;
+
+ //
+ // Send a message to the main program, to update the Settings (for the tracker)
+ //
+ mainApp->updateSettings();
}
void getCurvePoints(QSettings *iniFile, QString prefix, QPointF *point1, QPointF *point2, QPointF *point3, QPointF *point4, int NeutralZone, int Sensitivity, int MaxInput, int MaxOutput) {
diff --git a/FaceTrackNoIR/FaceTrackNoIR.h b/FaceTrackNoIR/FaceTrackNoIR.h
index 410547e2..c14d4e16 100644
--- a/FaceTrackNoIR/FaceTrackNoIR.h
+++ b/FaceTrackNoIR/FaceTrackNoIR.h
@@ -58,6 +58,7 @@ public:
~FaceTrackNoIR();
void getGameProgramName(); // Get the ProgramName from the game and display it.
+ void updateSettings(); // Update the settings (let Tracker read INI-file).
private:
Ui::FaceTrackNoIRClass ui;
@@ -158,7 +159,7 @@ class PreferencesDialog: public QWidget, public Ui::UICPreferencesDialog
Q_OBJECT
public:
- explicit PreferencesDialog( QWidget *parent=0, Qt::WindowFlags f=0 );
+ explicit PreferencesDialog( FaceTrackNoIR *ftnoir, QWidget *parent=0, Qt::WindowFlags f=0 );
virtual ~PreferencesDialog();
void showEvent ( QShowEvent * event );
@@ -169,6 +170,7 @@ private:
/** helper **/
bool settingsDirty;
+ FaceTrackNoIR *mainApp;
private slots:
void doOK();
@@ -182,7 +184,7 @@ class KeyboardShortcutDialog: public QWidget, public Ui::UICKeyboardShortcutDial
Q_OBJECT
public:
- explicit KeyboardShortcutDialog( QWidget *parent=0, Qt::WindowFlags f=0 );
+ explicit KeyboardShortcutDialog( FaceTrackNoIR *ftnoir, QWidget *parent=0, Qt::WindowFlags f=0 );
virtual ~KeyboardShortcutDialog();
void showEvent ( QShowEvent * event );
@@ -193,6 +195,7 @@ private:
/** helper **/
bool settingsDirty;
+ FaceTrackNoIR *mainApp;
QList<QString> stringList; // List of strings, that describe the keyboard-keys
QList<BYTE> keyList; // List of keys, with the values of the keyboard-keys
@@ -208,7 +211,7 @@ class CurveConfigurationDialog: public QWidget, public Ui::UICCurveConfiguration
Q_OBJECT
public:
- explicit CurveConfigurationDialog( QWidget *parent=0, Qt::WindowFlags f=0 );
+ explicit CurveConfigurationDialog( FaceTrackNoIR *ftnoir, QWidget *parent=0, Qt::WindowFlags f=0 );
virtual ~CurveConfigurationDialog();
void showEvent ( QShowEvent * event );
@@ -219,6 +222,7 @@ private:
/** helper **/
bool settingsDirty;
+ FaceTrackNoIR *mainApp;
private slots:
void doOK();
diff --git a/FaceTrackNoIR/tracker.cpp b/FaceTrackNoIR/tracker.cpp
index c7a2fadb..ce928d66 100644
--- a/FaceTrackNoIR/tracker.cpp
+++ b/FaceTrackNoIR/tracker.cpp
@@ -432,6 +432,12 @@ void Tracker::run() {
Pitch.newPos = getSmoothFromList( &Pitch.rawList ) - Pitch.offset_headPos;
}
+ QFile data("output.txt");
+ if (data.open(QFile::WriteOnly | QFile::Append)) {
+ QTextStream out(&data);
+ out << "Input = " << getDegreesFromRads(Pitch.newPos) << " Output = " << getOutputFromCurve(&Pitch.curve, getDegreesFromRads(Pitch.newPos)) << '\n';
+ }
+
// Yaw
if (Tracker::useFilter) {
Yaw.newPos = lowPassFilter ( getSmoothFromList( &Yaw.rawList ) - Yaw.offset_headPos,
@@ -765,9 +771,20 @@ float clamped_value = 0.0f;
}
//
+// Get the output from the curve.
+//
+float Tracker::getOutputFromCurve ( QPainterPath *curve, float input ) {
+ return curve->pointAtPercent(input/100.0f).x();
+}
+
+//
// Load the current Settings from the currently 'active' INI-file.
//
void Tracker::loadSettings() {
+int NeutralZone;
+int sensYaw, sensPitch, sensRoll;
+int sensX, sensY, sensZ;
+QPointF point1, point2, point3, point4;
qDebug() << "Tracker::loadSettings says: Starting ";
QSettings settings("Abbequerque Inc.", "FaceTrackNoIR"); // Registry settings (in HK_USER)
@@ -777,6 +794,58 @@ void Tracker::loadSettings() {
qDebug() << "loadSettings says: iniFile = " << currentFile;
+ //
+ // Read the Tracking settings, to fill the curves.
+ //
+ iniFile.beginGroup ( "Tracking" );
+ NeutralZone = iniFile.value ( "NeutralZone", 5 ).toInt();
+ sensYaw = iniFile.value ( "sensYaw", 100 ).toInt();
+ sensPitch = iniFile.value ( "sensPitch", 100 ).toInt();
+ sensRoll = iniFile.value ( "sensRoll", 100 ).toInt();
+ sensX = iniFile.value ( "sensX", 100 ).toInt();
+ sensY = iniFile.value ( "sensY", 100 ).toInt();
+ sensZ = iniFile.value ( "sensZ", 100 ).toInt();
+ iniFile.endGroup ();
+
+ //
+ // Read the curve-settings from the file. Use the (deprecated) settings, if the curves are not there.
+ //
+ iniFile.beginGroup ( "Curves" );
+ getCurvePoints( &iniFile, "Yaw_", &point1, &point2, &point3, &point4, NeutralZone, sensYaw, 50, 180 );
+ Yaw.curve.moveTo( QPointF(0,0) );
+ Yaw.curve.lineTo(point1);
+ Yaw.curve.cubicTo(point2, point3, point4);
+
+ getCurvePoints( &iniFile, "Pitch_", &point1, &point2, &point3, &point4, NeutralZone, sensPitch, 50, 180 );
+ Pitch.curve.moveTo( QPointF(0,0) );
+ Pitch.curve.lineTo(point1);
+ Pitch.curve.cubicTo(point2, point3, point4);
+
+ getCurvePoints( &iniFile, "Roll_", &point1, &point2, &point3, &point4, NeutralZone, sensRoll, 50, 180 );
+ Roll.curve.moveTo( QPointF(0,0) );
+ Roll.curve.lineTo(point1);
+ Roll.curve.cubicTo(point2, point3, point4);
+
+ getCurvePoints( &iniFile, "X_", &point1, &point2, &point3, &point4, NeutralZone, sensX, 50, 180 );
+ X.curve.moveTo( QPointF(0,0) );
+ X.curve.lineTo(point1);
+ X.curve.cubicTo(point2, point3, point4);
+
+ getCurvePoints( &iniFile, "Y_", &point1, &point2, &point3, &point4, NeutralZone, sensY, 50, 180 );
+ Y.curve.moveTo( QPointF(0,0) );
+ Y.curve.lineTo(point1);
+ Y.curve.cubicTo(point2, point3, point4);
+
+ getCurvePoints( &iniFile, "Z_", &point1, &point2, &point3, &point4, NeutralZone, sensZ, 50, 180 );
+ Z.curve.moveTo( QPointF(0,0) );
+ Z.curve.lineTo(point1);
+ Z.curve.cubicTo(point2, point3, point4);
+
+ iniFile.endGroup ();
+
+ //
+ // Read the keyboard shortcuts.
+ //
iniFile.beginGroup ( "KB_Shortcuts" );
// Center key
diff --git a/FaceTrackNoIR/tracker.h b/FaceTrackNoIR/tracker.h
index 0b0abe7f..51d83f41 100644
--- a/FaceTrackNoIR/tracker.h
+++ b/FaceTrackNoIR/tracker.h
@@ -31,6 +31,7 @@
#include <QPoint>
#include <QWaitCondition>
#include <QList>
+#include <QPainterPath>
#define DIRECTINPUT_VERSION 0x0800
#include <Dinput.h>
@@ -81,6 +82,7 @@ struct THeadPoseDOF {
float newPos; // New Position (used locally)
float prevPos; // Previous Position
float prevRawPos; // Previous Raw Position
+ QPainterPath curve; // Bezier curve to translate input -> output
};
//
@@ -217,6 +219,7 @@ public:
float getSmoothFromList ( QList<float> *rawList );
float getDegreesFromRads ( float rads ) { return (rads * 57.295781f); }
+ float getOutputFromCurve ( QPainterPath *curve, float input );
// For now, use one slider for all
void setSmoothing(int x) {
diff --git a/bin/Settings/FreeFalcon.ini b/bin/Settings/FreeFalcon.ini
index abdb352c..27864b9f 100644
--- a/bin/Settings/FreeFalcon.ini
+++ b/bin/Settings/FreeFalcon.ini
@@ -30,12 +30,12 @@ Roll_point2=@Variant(\0\0\0\x1a@B\0\0\0\0\0\0@G\0\0\0\0\0\0)
Roll_point3=@Variant(\0\0\0\x1a@\\\xc0\0\0\0\0\0@3\0\0\0\0\0\0)
Roll_point4=@Variant(\0\0\0\x1a@d\xe0\0\0\0\0\0@I\0\0\0\0\0\0)
Yaw_point1=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0@$\0\0\0\0\0\0)
-Yaw_point2=@Variant(\0\0\0\x1a@D\x80\0\0\0\0\0@A\0\0\0\0\0\0)
+Yaw_point2=@Variant(\0\0\0\x1a@[\0\0\0\0\0\0@.\0\0\0\0\0\0)
Yaw_point3="@Variant(\0\0\0\x1a@=\0\0\0\0\0\0@F\x80\0\0\0\0\0)"
Yaw_point4=@Variant(\0\0\0\x1a@b\xc0\0\0\0\0\0@I\0\0\0\0\0\0)
-Pitch_point1=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0@\b\0\0\0\0\0\0)
-Pitch_point2=@Variant(\0\0\0\x1a@:\0\0\0\0\0\0@F\0\0\0\0\0\0)
-Pitch_point3=@Variant(\0\0\0\x1a@\x18\0\0\0\0\0\0@G\x80\0\0\0\0\0)
+Pitch_point1=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0@\x18\0\0\0\0\0\0)
+Pitch_point2=@Variant(\0\0\0\x1a@bp\0\0\0\0\0@6\0\0\0\0\0\0)
+Pitch_point3=@Variant(\0\0\0\x1a@Y\x80\0\0\0\0\0@F\x80\0\0\0\0\0)
Pitch_point4=@Variant(\0\0\0\x1a@b\xc0\0\0\0\0\0@I\0\0\0\0\0\0)
X_point1=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0@\x14\0\0\0\0\0\0)
X_point2=@Variant(\0\0\0\x1a@R\x80\0\0\0\0\0@2\0\0\0\0\0\0)
@@ -49,3 +49,13 @@ Z_point1=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0@\x14\0\0\0\0\0\0)
Z_point2=@Variant(\0\0\0\x1a@M\x80\0\0\0\0\0@.\0\0\0\0\0\0)
Z_point3=@Variant(\0\0\0\x1a@\x10\0\0\0\0\0\0@G\0\0\0\0\0\0)
Z_point4=@Variant(\0\0\0\x1a@Q\xc0\0\0\0\0\0@I\0\0\0\0\0\0)
+
+[KB_Shortcuts]
+Keycode_Center=0
+Shift_Center=false
+Ctrl_Center=false
+Alt_Center=false
+Keycode_StartStop=62
+Shift_StartStop=false
+Ctrl_StartStop=false
+Alt_StartStop=false