diff options
| -rw-r--r-- | facetracknoir/facetracknoir.ui | 2088 | ||||
| -rw-r--r-- | facetracknoir/tracker.cpp | 384 | 
2 files changed, 1236 insertions, 1236 deletions
| diff --git a/facetracknoir/facetracknoir.ui b/facetracknoir/facetracknoir.ui index 215b9b55..7f6b863c 100644 --- a/facetracknoir/facetracknoir.ui +++ b/facetracknoir/facetracknoir.ui @@ -1,1044 +1,1044 @@ -<?xml version="1.0" encoding="UTF-8"?>
 -<ui version="4.0">
 - <author>WVR</author>
 - <class>OpentrackUI</class>
 - <widget class="QMainWindow" name="OpentrackUI">
 -  <property name="geometry">
 -   <rect>
 -    <x>0</x>
 -    <y>0</y>
 -    <width>597</width>
 -    <height>506</height>
 -   </rect>
 -  </property>
 -  <property name="sizePolicy">
 -   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
 -    <horstretch>0</horstretch>
 -    <verstretch>0</verstretch>
 -   </sizepolicy>
 -  </property>
 -  <property name="windowIcon">
 -   <iconset resource="main-facetracknoir.qrc">
 -    <normaloff>:/images/facetracknoir.png</normaloff>:/images/facetracknoir.png</iconset>
 -  </property>
 -  <widget class="QWidget" name="centralWidget">
 -   <widget class="QGroupBox" name="box_mapped_headpose">
 -    <property name="geometry">
 -     <rect>
 -      <x>140</x>
 -      <y>15</y>
 -      <width>126</width>
 -      <height>161</height>
 -     </rect>
 -    </property>
 -    <property name="title">
 -     <string notr="true">Game data</string>
 -    </property>
 -    <layout class="QGridLayout" name="gridLayout_10">
 -     <item row="0" column="1">
 -      <widget class="QLCDNumber" name="lcdNumOutputPosX">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="font">
 -        <font>
 -         <pointsize>13</pointsize>
 -         <stylestrategy>NoAntialias</stylestrategy>
 -         <kerning>false</kerning>
 -        </font>
 -       </property>
 -       <property name="frameShape">
 -        <enum>QFrame::NoFrame</enum>
 -       </property>
 -       <property name="frameShadow">
 -        <enum>QFrame::Raised</enum>
 -       </property>
 -       <property name="smallDecimalPoint">
 -        <bool>true</bool>
 -       </property>
 -       <property name="digitCount">
 -        <number>2</number>
 -       </property>
 -       <property name="segmentStyle">
 -        <enum>QLCDNumber::Flat</enum>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="0" column="0">
 -      <widget class="QLabel" name="lblX_2">
 -       <property name="text">
 -        <string>TX</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="1" column="3">
 -      <widget class="QLCDNumber" name="lcdNumOutputRotY">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="font">
 -        <font>
 -         <pointsize>13</pointsize>
 -         <stylestrategy>NoAntialias</stylestrategy>
 -         <kerning>false</kerning>
 -        </font>
 -       </property>
 -       <property name="frameShape">
 -        <enum>QFrame::NoFrame</enum>
 -       </property>
 -       <property name="frameShadow">
 -        <enum>QFrame::Raised</enum>
 -       </property>
 -       <property name="smallDecimalPoint">
 -        <bool>true</bool>
 -       </property>
 -       <property name="digitCount">
 -        <number>2</number>
 -       </property>
 -       <property name="segmentStyle">
 -        <enum>QLCDNumber::Flat</enum>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="2" column="1">
 -      <widget class="QLCDNumber" name="lcdNumOutputPosZ">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="font">
 -        <font>
 -         <pointsize>13</pointsize>
 -         <stylestrategy>NoAntialias</stylestrategy>
 -         <kerning>false</kerning>
 -        </font>
 -       </property>
 -       <property name="frameShape">
 -        <enum>QFrame::NoFrame</enum>
 -       </property>
 -       <property name="frameShadow">
 -        <enum>QFrame::Raised</enum>
 -       </property>
 -       <property name="smallDecimalPoint">
 -        <bool>true</bool>
 -       </property>
 -       <property name="digitCount">
 -        <number>2</number>
 -       </property>
 -       <property name="segmentStyle">
 -        <enum>QLCDNumber::Flat</enum>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="2" column="3">
 -      <widget class="QLCDNumber" name="lcdNumOutputRotZ">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="font">
 -        <font>
 -         <pointsize>13</pointsize>
 -         <stylestrategy>NoAntialias</stylestrategy>
 -         <kerning>false</kerning>
 -        </font>
 -       </property>
 -       <property name="frameShape">
 -        <enum>QFrame::NoFrame</enum>
 -       </property>
 -       <property name="frameShadow">
 -        <enum>QFrame::Raised</enum>
 -       </property>
 -       <property name="smallDecimalPoint">
 -        <bool>true</bool>
 -       </property>
 -       <property name="digitCount">
 -        <number>2</number>
 -       </property>
 -       <property name="segmentStyle">
 -        <enum>QLCDNumber::Flat</enum>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="0" column="2">
 -      <widget class="QLabel" name="lblRotX_2">
 -       <property name="text">
 -        <string>yaw</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="0" column="3">
 -      <widget class="QLCDNumber" name="lcdNumOutputRotX">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="font">
 -        <font>
 -         <pointsize>13</pointsize>
 -         <stylestrategy>NoAntialias</stylestrategy>
 -         <kerning>false</kerning>
 -        </font>
 -       </property>
 -       <property name="frameShape">
 -        <enum>QFrame::NoFrame</enum>
 -       </property>
 -       <property name="frameShadow">
 -        <enum>QFrame::Raised</enum>
 -       </property>
 -       <property name="smallDecimalPoint">
 -        <bool>true</bool>
 -       </property>
 -       <property name="digitCount">
 -        <number>2</number>
 -       </property>
 -       <property name="segmentStyle">
 -        <enum>QLCDNumber::Flat</enum>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="2" column="2">
 -      <widget class="QLabel" name="lblRotZ_2">
 -       <property name="text">
 -        <string>roll</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="1" column="0">
 -      <widget class="QLabel" name="lblY_2">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="autoFillBackground">
 -        <bool>false</bool>
 -       </property>
 -       <property name="text">
 -        <string>TY</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="2" column="0">
 -      <widget class="QLabel" name="lblZ_2">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="autoFillBackground">
 -        <bool>false</bool>
 -       </property>
 -       <property name="text">
 -        <string>TZ</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="1" column="1">
 -      <widget class="QLCDNumber" name="lcdNumOutputPosY">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="font">
 -        <font>
 -         <pointsize>13</pointsize>
 -         <stylestrategy>NoAntialias</stylestrategy>
 -         <kerning>false</kerning>
 -        </font>
 -       </property>
 -       <property name="frameShape">
 -        <enum>QFrame::NoFrame</enum>
 -       </property>
 -       <property name="frameShadow">
 -        <enum>QFrame::Raised</enum>
 -       </property>
 -       <property name="smallDecimalPoint">
 -        <bool>true</bool>
 -       </property>
 -       <property name="digitCount">
 -        <number>2</number>
 -       </property>
 -       <property name="segmentStyle">
 -        <enum>QLCDNumber::Flat</enum>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="1" column="2">
 -      <widget class="QLabel" name="lblRotY_2">
 -       <property name="text">
 -        <string>pitch</string>
 -       </property>
 -      </widget>
 -     </item>
 -    </layout>
 -   </widget>
 -   <widget class="QGroupBox" name="groupGameProtocol">
 -    <property name="geometry">
 -     <rect>
 -      <x>405</x>
 -      <y>380</y>
 -      <width>181</width>
 -      <height>56</height>
 -     </rect>
 -    </property>
 -    <property name="title">
 -     <string>Protocol</string>
 -    </property>
 -    <layout class="QHBoxLayout" name="_4">
 -     <item>
 -      <widget class="QComboBox" name="iconcomboProtocol">
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="maxVisibleItems">
 -        <number>42</number>
 -       </property>
 -      </widget>
 -     </item>
 -     <item>
 -      <widget class="QPushButton" name="btnShowServerControls">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="text">
 -        <string>Settings</string>
 -       </property>
 -      </widget>
 -     </item>
 -    </layout>
 -   </widget>
 -   <widget class="QGroupBox" name="groupTrackerSource">
 -    <property name="geometry">
 -     <rect>
 -      <x>405</x>
 -      <y>215</y>
 -      <width>181</width>
 -      <height>56</height>
 -     </rect>
 -    </property>
 -    <property name="title">
 -     <string>Tracker</string>
 -    </property>
 -    <layout class="QHBoxLayout" name="_3">
 -     <item>
 -      <widget class="QComboBox" name="iconcomboTrackerSource">
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="maxVisibleItems">
 -        <number>42</number>
 -       </property>
 -      </widget>
 -     </item>
 -     <item>
 -      <widget class="QPushButton" name="btnShowEngineControls">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="text">
 -        <string>Settings</string>
 -       </property>
 -      </widget>
 -     </item>
 -    </layout>
 -   </widget>
 -   <widget class="QGroupBox" name="groupFilter">
 -    <property name="geometry">
 -     <rect>
 -      <x>405</x>
 -      <y>325</y>
 -      <width>181</width>
 -      <height>56</height>
 -     </rect>
 -    </property>
 -    <property name="title">
 -     <string>Filter</string>
 -    </property>
 -    <layout class="QHBoxLayout" name="_5">
 -     <item>
 -      <widget class="QComboBox" name="iconcomboFilter">
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="maxVisibleItems">
 -        <number>42</number>
 -       </property>
 -      </widget>
 -     </item>
 -     <item>
 -      <widget class="QPushButton" name="btnShowFilterControls">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="text">
 -        <string>Settings</string>
 -       </property>
 -      </widget>
 -     </item>
 -    </layout>
 -   </widget>
 -   <widget class="QGroupBox" name="groupBox_3">
 -    <property name="geometry">
 -     <rect>
 -      <x>405</x>
 -      <y>270</y>
 -      <width>181</width>
 -      <height>56</height>
 -     </rect>
 -    </property>
 -    <property name="title">
 -     <string>Auxiliary tracker</string>
 -    </property>
 -    <layout class="QHBoxLayout" name="_6">
 -     <item>
 -      <widget class="QComboBox" name="cbxSecondTrackerSource">
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="maxVisibleItems">
 -        <number>42</number>
 -       </property>
 -      </widget>
 -     </item>
 -     <item>
 -      <widget class="QPushButton" name="btnShowSecondTrackerSettings">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="text">
 -        <string>Settings</string>
 -       </property>
 -      </widget>
 -     </item>
 -    </layout>
 -   </widget>
 -   <widget class="QFrame" name="video_frame">
 -    <property name="geometry">
 -     <rect>
 -      <x>24</x>
 -      <y>204</y>
 -      <width>366</width>
 -      <height>281</height>
 -     </rect>
 -    </property>
 -    <property name="sizePolicy">
 -     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
 -      <horstretch>0</horstretch>
 -      <verstretch>0</verstretch>
 -     </sizepolicy>
 -    </property>
 -    <widget class="QLabel" name="video_frame_label">
 -     <property name="geometry">
 -      <rect>
 -       <x>0</x>
 -       <y>0</y>
 -       <width>366</width>
 -       <height>281</height>
 -      </rect>
 -     </property>
 -     <property name="sizePolicy">
 -      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
 -       <horstretch>0</horstretch>
 -       <verstretch>0</verstretch>
 -      </sizepolicy>
 -     </property>
 -     <property name="font">
 -      <font>
 -       <stylestrategy>NoAntialias</stylestrategy>
 -       <kerning>false</kerning>
 -      </font>
 -     </property>
 -     <property name="text">
 -      <string/>
 -     </property>
 -    </widget>
 -   </widget>
 -   <widget class="QGroupBox" name="groupProfile">
 -    <property name="geometry">
 -     <rect>
 -      <x>405</x>
 -      <y>15</y>
 -      <width>181</width>
 -      <height>81</height>
 -     </rect>
 -    </property>
 -    <property name="title">
 -     <string>Profile</string>
 -    </property>
 -    <layout class="QGridLayout" name="_2">
 -     <item row="0" column="1">
 -      <widget class="QPushButton" name="btnSave">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="text">
 -        <string>Save</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="1" column="0">
 -      <widget class="QPushButton" name="btnLoad">
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="text">
 -        <string>Load</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="1" column="1">
 -      <widget class="QPushButton" name="btnSaveAs">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="text">
 -        <string>Save As ...</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="0" column="0">
 -      <widget class="QComboBox" name="iconcomboProfile">
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="maxVisibleItems">
 -        <number>10</number>
 -       </property>
 -      </widget>
 -     </item>
 -    </layout>
 -   </widget>
 -   <widget class="QGroupBox" name="groupStartStop">
 -    <property name="geometry">
 -     <rect>
 -      <x>405</x>
 -      <y>440</y>
 -      <width>181</width>
 -      <height>56</height>
 -     </rect>
 -    </property>
 -    <property name="minimumSize">
 -     <size>
 -      <width>0</width>
 -      <height>0</height>
 -     </size>
 -    </property>
 -    <property name="maximumSize">
 -     <size>
 -      <width>65536</width>
 -      <height>65536</height>
 -     </size>
 -    </property>
 -    <property name="title">
 -     <string notr="true">Controls</string>
 -    </property>
 -    <layout class="QGridLayout">
 -     <item row="0" column="0">
 -      <widget class="QPushButton" name="btnStartTracker">
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="text">
 -        <string>Start</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="0" column="1">
 -      <widget class="QPushButton" name="btnStopTracker">
 -       <property name="enabled">
 -        <bool>false</bool>
 -       </property>
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="text">
 -        <string>Stop</string>
 -       </property>
 -      </widget>
 -     </item>
 -    </layout>
 -   </widget>
 -   <widget class="QGroupBox" name="box_raw_headpose">
 -    <property name="geometry">
 -     <rect>
 -      <x>273</x>
 -      <y>15</y>
 -      <width>126</width>
 -      <height>161</height>
 -     </rect>
 -    </property>
 -    <property name="title">
 -     <string notr="true">Raw pose</string>
 -    </property>
 -    <layout class="QGridLayout" name="gridLayout_13">
 -     <item row="0" column="0">
 -      <widget class="QLabel" name="lblX_3">
 -       <property name="text">
 -        <string>TX</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="2" column="1">
 -      <widget class="QLCDNumber" name="lcdNumZ">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="font">
 -        <font>
 -         <pointsize>13</pointsize>
 -         <stylestrategy>NoAntialias</stylestrategy>
 -         <kerning>false</kerning>
 -        </font>
 -       </property>
 -       <property name="frameShape">
 -        <enum>QFrame::NoFrame</enum>
 -       </property>
 -       <property name="frameShadow">
 -        <enum>QFrame::Raised</enum>
 -       </property>
 -       <property name="smallDecimalPoint">
 -        <bool>true</bool>
 -       </property>
 -       <property name="digitCount">
 -        <number>2</number>
 -       </property>
 -       <property name="segmentStyle">
 -        <enum>QLCDNumber::Flat</enum>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="1" column="3">
 -      <widget class="QLCDNumber" name="lcdNumRotY">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="font">
 -        <font>
 -         <pointsize>13</pointsize>
 -         <stylestrategy>NoAntialias</stylestrategy>
 -         <kerning>false</kerning>
 -        </font>
 -       </property>
 -       <property name="frameShape">
 -        <enum>QFrame::NoFrame</enum>
 -       </property>
 -       <property name="frameShadow">
 -        <enum>QFrame::Raised</enum>
 -       </property>
 -       <property name="smallDecimalPoint">
 -        <bool>true</bool>
 -       </property>
 -       <property name="digitCount">
 -        <number>2</number>
 -       </property>
 -       <property name="segmentStyle">
 -        <enum>QLCDNumber::Flat</enum>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="0" column="1">
 -      <widget class="QLCDNumber" name="lcdNumX">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="font">
 -        <font>
 -         <pointsize>13</pointsize>
 -         <stylestrategy>NoAntialias</stylestrategy>
 -         <kerning>false</kerning>
 -        </font>
 -       </property>
 -       <property name="frameShape">
 -        <enum>QFrame::NoFrame</enum>
 -       </property>
 -       <property name="frameShadow">
 -        <enum>QFrame::Raised</enum>
 -       </property>
 -       <property name="smallDecimalPoint">
 -        <bool>true</bool>
 -       </property>
 -       <property name="digitCount">
 -        <number>2</number>
 -       </property>
 -       <property name="segmentStyle">
 -        <enum>QLCDNumber::Flat</enum>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="2" column="3">
 -      <widget class="QLCDNumber" name="lcdNumRotZ">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="font">
 -        <font>
 -         <pointsize>13</pointsize>
 -         <stylestrategy>NoAntialias</stylestrategy>
 -         <kerning>false</kerning>
 -        </font>
 -       </property>
 -       <property name="frameShape">
 -        <enum>QFrame::NoFrame</enum>
 -       </property>
 -       <property name="frameShadow">
 -        <enum>QFrame::Raised</enum>
 -       </property>
 -       <property name="smallDecimalPoint">
 -        <bool>true</bool>
 -       </property>
 -       <property name="digitCount">
 -        <number>2</number>
 -       </property>
 -       <property name="segmentStyle">
 -        <enum>QLCDNumber::Flat</enum>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="0" column="3">
 -      <widget class="QLCDNumber" name="lcdNumRotX">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="font">
 -        <font>
 -         <pointsize>13</pointsize>
 -         <stylestrategy>NoAntialias</stylestrategy>
 -         <kerning>false</kerning>
 -        </font>
 -       </property>
 -       <property name="frameShape">
 -        <enum>QFrame::NoFrame</enum>
 -       </property>
 -       <property name="frameShadow">
 -        <enum>QFrame::Raised</enum>
 -       </property>
 -       <property name="smallDecimalPoint">
 -        <bool>true</bool>
 -       </property>
 -       <property name="digitCount">
 -        <number>2</number>
 -       </property>
 -       <property name="segmentStyle">
 -        <enum>QLCDNumber::Flat</enum>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="1" column="0">
 -      <widget class="QLabel" name="lblY_3">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="autoFillBackground">
 -        <bool>false</bool>
 -       </property>
 -       <property name="text">
 -        <string>TY</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="2" column="0">
 -      <widget class="QLabel" name="lblZ_3">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="autoFillBackground">
 -        <bool>false</bool>
 -       </property>
 -       <property name="text">
 -        <string>TZ</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="1" column="1">
 -      <widget class="QLCDNumber" name="lcdNumY">
 -       <property name="enabled">
 -        <bool>true</bool>
 -       </property>
 -       <property name="font">
 -        <font>
 -         <pointsize>13</pointsize>
 -         <stylestrategy>NoAntialias</stylestrategy>
 -         <kerning>false</kerning>
 -        </font>
 -       </property>
 -       <property name="frameShape">
 -        <enum>QFrame::NoFrame</enum>
 -       </property>
 -       <property name="frameShadow">
 -        <enum>QFrame::Raised</enum>
 -       </property>
 -       <property name="smallDecimalPoint">
 -        <bool>true</bool>
 -       </property>
 -       <property name="digitCount">
 -        <number>2</number>
 -       </property>
 -       <property name="segmentStyle">
 -        <enum>QLCDNumber::Flat</enum>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="1" column="2">
 -      <widget class="QLabel" name="lblRotY_3">
 -       <property name="text">
 -        <string>pitch</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="0" column="2">
 -      <widget class="QLabel" name="lblRotX_3">
 -       <property name="text">
 -        <string>yaw</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="2" column="2">
 -      <widget class="QLabel" name="lblRotZ_3">
 -       <property name="text">
 -        <string>roll</string>
 -       </property>
 -      </widget>
 -     </item>
 -    </layout>
 -   </widget>
 -   <widget class="QGroupBox" name="groupBox">
 -    <property name="geometry">
 -     <rect>
 -      <x>15</x>
 -      <y>179</y>
 -      <width>386</width>
 -      <height>316</height>
 -     </rect>
 -    </property>
 -    <property name="title">
 -     <string>Video preview</string>
 -    </property>
 -   </widget>
 -   <widget class="QGroupBox" name="groupBox_2">
 -    <property name="geometry">
 -     <rect>
 -      <x>405</x>
 -      <y>95</y>
 -      <width>181</width>
 -      <height>80</height>
 -     </rect>
 -    </property>
 -    <property name="title">
 -     <string>Settings</string>
 -    </property>
 -    <widget class="QPushButton" name="btnShortcuts">
 -     <property name="geometry">
 -      <rect>
 -       <x>10</x>
 -       <y>45</y>
 -       <width>161</width>
 -       <height>26</height>
 -      </rect>
 -     </property>
 -     <property name="sizePolicy">
 -      <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
 -       <horstretch>0</horstretch>
 -       <verstretch>0</verstretch>
 -      </sizepolicy>
 -     </property>
 -     <property name="text">
 -      <string>Keys</string>
 -     </property>
 -     <property name="icon">
 -      <iconset resource="main-facetracknoir.qrc">
 -       <normaloff>:/uielements/tools.png</normaloff>:/uielements/tools.png</iconset>
 -     </property>
 -     <property name="iconSize">
 -      <size>
 -       <width>98</width>
 -       <height>24</height>
 -      </size>
 -     </property>
 -    </widget>
 -    <widget class="QPushButton" name="btnEditCurves">
 -     <property name="geometry">
 -      <rect>
 -       <x>10</x>
 -       <y>15</y>
 -       <width>161</width>
 -       <height>26</height>
 -      </rect>
 -     </property>
 -     <property name="sizePolicy">
 -      <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
 -       <horstretch>0</horstretch>
 -       <verstretch>0</verstretch>
 -      </sizepolicy>
 -     </property>
 -     <property name="text">
 -      <string>Mapping</string>
 -     </property>
 -     <property name="icon">
 -      <iconset resource="main-facetracknoir.qrc">
 -       <normaloff>:/uielements/curves.png</normaloff>:/uielements/curves.png</iconset>
 -     </property>
 -     <property name="iconSize">
 -      <size>
 -       <width>60</width>
 -       <height>37</height>
 -      </size>
 -     </property>
 -    </widget>
 -   </widget>
 -   <widget class="QGroupBox" name="groupBox_4">
 -    <property name="geometry">
 -     <rect>
 -      <x>15</x>
 -      <y>15</y>
 -      <width>116</width>
 -      <height>161</height>
 -     </rect>
 -    </property>
 -    <property name="title">
 -     <string>Tracking preview</string>
 -    </property>
 -    <widget class="GLWidget" name="pose_display" native="true">
 -     <property name="geometry">
 -      <rect>
 -       <x>5</x>
 -       <y>15</y>
 -       <width>106</width>
 -       <height>141</height>
 -      </rect>
 -     </property>
 -     <property name="sizePolicy">
 -      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
 -       <horstretch>0</horstretch>
 -       <verstretch>0</verstretch>
 -      </sizepolicy>
 -     </property>
 -    </widget>
 -   </widget>
 -   <widget class="QGroupBox" name="groupBox_5">
 -    <property name="geometry">
 -     <rect>
 -      <x>405</x>
 -      <y>180</y>
 -      <width>181</width>
 -      <height>36</height>
 -     </rect>
 -    </property>
 -    <property name="title">
 -     <string>Detected app</string>
 -    </property>
 -    <widget class="QLabel" name="game_name">
 -     <property name="geometry">
 -      <rect>
 -       <x>10</x>
 -       <y>15</y>
 -       <width>115</width>
 -       <height>16</height>
 -      </rect>
 -     </property>
 -     <property name="sizePolicy">
 -      <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
 -       <horstretch>0</horstretch>
 -       <verstretch>0</verstretch>
 -      </sizepolicy>
 -     </property>
 -    </widget>
 -   </widget>
 -   <zorder>box_mapped_headpose</zorder>
 -   <zorder>groupGameProtocol</zorder>
 -   <zorder>groupTrackerSource</zorder>
 -   <zorder>groupFilter</zorder>
 -   <zorder>groupBox_3</zorder>
 -   <zorder>video_frame</zorder>
 -   <zorder>groupProfile</zorder>
 -   <zorder>groupStartStop</zorder>
 -   <zorder>box_raw_headpose</zorder>
 -   <zorder>video_frame_label</zorder>
 -   <zorder>video_frame_label</zorder>
 -   <zorder>groupBox</zorder>
 -   <zorder>groupBox_2</zorder>
 -   <zorder>groupBox_4</zorder>
 -   <zorder>groupBox_5</zorder>
 -  </widget>
 - </widget>
 - <customwidgets>
 -  <customwidget>
 -   <class>GLWidget</class>
 -   <extends>QWidget</extends>
 -   <header>glwidget.h</header>
 -  </customwidget>
 - </customwidgets>
 - <resources>
 -  <include location="main-facetracknoir.qrc"/>
 - </resources>
 - <connections/>
 - <designerdata>
 -  <property name="gridDeltaX">
 -   <number>5</number>
 -  </property>
 -  <property name="gridDeltaY">
 -   <number>5</number>
 -  </property>
 -  <property name="gridSnapX">
 -   <bool>true</bool>
 -  </property>
 -  <property name="gridSnapY">
 -   <bool>true</bool>
 -  </property>
 -  <property name="gridVisible">
 -   <bool>true</bool>
 -  </property>
 - </designerdata>
 -</ui>
 +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <author>WVR</author> + <class>OpentrackUI</class> + <widget class="QMainWindow" name="OpentrackUI"> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>597</width> +    <height>506</height> +   </rect> +  </property> +  <property name="sizePolicy"> +   <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> +    <horstretch>0</horstretch> +    <verstretch>0</verstretch> +   </sizepolicy> +  </property> +  <property name="windowIcon"> +   <iconset resource="main-facetracknoir.qrc"> +    <normaloff>:/images/facetracknoir.png</normaloff>:/images/facetracknoir.png</iconset> +  </property> +  <widget class="QWidget" name="centralWidget"> +   <widget class="QGroupBox" name="box_mapped_headpose"> +    <property name="geometry"> +     <rect> +      <x>140</x> +      <y>15</y> +      <width>126</width> +      <height>161</height> +     </rect> +    </property> +    <property name="title"> +     <string notr="true">Game data</string> +    </property> +    <layout class="QGridLayout" name="gridLayout_10"> +     <item row="0" column="1"> +      <widget class="QLCDNumber" name="lcdNumOutputPosX"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="font"> +        <font> +         <pointsize>13</pointsize> +         <stylestrategy>NoAntialias</stylestrategy> +         <kerning>false</kerning> +        </font> +       </property> +       <property name="frameShape"> +        <enum>QFrame::NoFrame</enum> +       </property> +       <property name="frameShadow"> +        <enum>QFrame::Raised</enum> +       </property> +       <property name="smallDecimalPoint"> +        <bool>true</bool> +       </property> +       <property name="digitCount"> +        <number>2</number> +       </property> +       <property name="segmentStyle"> +        <enum>QLCDNumber::Flat</enum> +       </property> +      </widget> +     </item> +     <item row="0" column="0"> +      <widget class="QLabel" name="lblX_2"> +       <property name="text"> +        <string>TX</string> +       </property> +      </widget> +     </item> +     <item row="1" column="3"> +      <widget class="QLCDNumber" name="lcdNumOutputRotY"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="font"> +        <font> +         <pointsize>13</pointsize> +         <stylestrategy>NoAntialias</stylestrategy> +         <kerning>false</kerning> +        </font> +       </property> +       <property name="frameShape"> +        <enum>QFrame::NoFrame</enum> +       </property> +       <property name="frameShadow"> +        <enum>QFrame::Raised</enum> +       </property> +       <property name="smallDecimalPoint"> +        <bool>true</bool> +       </property> +       <property name="digitCount"> +        <number>2</number> +       </property> +       <property name="segmentStyle"> +        <enum>QLCDNumber::Flat</enum> +       </property> +      </widget> +     </item> +     <item row="2" column="1"> +      <widget class="QLCDNumber" name="lcdNumOutputPosZ"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="font"> +        <font> +         <pointsize>13</pointsize> +         <stylestrategy>NoAntialias</stylestrategy> +         <kerning>false</kerning> +        </font> +       </property> +       <property name="frameShape"> +        <enum>QFrame::NoFrame</enum> +       </property> +       <property name="frameShadow"> +        <enum>QFrame::Raised</enum> +       </property> +       <property name="smallDecimalPoint"> +        <bool>true</bool> +       </property> +       <property name="digitCount"> +        <number>2</number> +       </property> +       <property name="segmentStyle"> +        <enum>QLCDNumber::Flat</enum> +       </property> +      </widget> +     </item> +     <item row="2" column="3"> +      <widget class="QLCDNumber" name="lcdNumOutputRotZ"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="font"> +        <font> +         <pointsize>13</pointsize> +         <stylestrategy>NoAntialias</stylestrategy> +         <kerning>false</kerning> +        </font> +       </property> +       <property name="frameShape"> +        <enum>QFrame::NoFrame</enum> +       </property> +       <property name="frameShadow"> +        <enum>QFrame::Raised</enum> +       </property> +       <property name="smallDecimalPoint"> +        <bool>true</bool> +       </property> +       <property name="digitCount"> +        <number>2</number> +       </property> +       <property name="segmentStyle"> +        <enum>QLCDNumber::Flat</enum> +       </property> +      </widget> +     </item> +     <item row="0" column="2"> +      <widget class="QLabel" name="lblRotX_2"> +       <property name="text"> +        <string>yaw</string> +       </property> +      </widget> +     </item> +     <item row="0" column="3"> +      <widget class="QLCDNumber" name="lcdNumOutputRotX"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="font"> +        <font> +         <pointsize>13</pointsize> +         <stylestrategy>NoAntialias</stylestrategy> +         <kerning>false</kerning> +        </font> +       </property> +       <property name="frameShape"> +        <enum>QFrame::NoFrame</enum> +       </property> +       <property name="frameShadow"> +        <enum>QFrame::Raised</enum> +       </property> +       <property name="smallDecimalPoint"> +        <bool>true</bool> +       </property> +       <property name="digitCount"> +        <number>2</number> +       </property> +       <property name="segmentStyle"> +        <enum>QLCDNumber::Flat</enum> +       </property> +      </widget> +     </item> +     <item row="2" column="2"> +      <widget class="QLabel" name="lblRotZ_2"> +       <property name="text"> +        <string>roll</string> +       </property> +      </widget> +     </item> +     <item row="1" column="0"> +      <widget class="QLabel" name="lblY_2"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="autoFillBackground"> +        <bool>false</bool> +       </property> +       <property name="text"> +        <string>TY</string> +       </property> +      </widget> +     </item> +     <item row="2" column="0"> +      <widget class="QLabel" name="lblZ_2"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="autoFillBackground"> +        <bool>false</bool> +       </property> +       <property name="text"> +        <string>TZ</string> +       </property> +      </widget> +     </item> +     <item row="1" column="1"> +      <widget class="QLCDNumber" name="lcdNumOutputPosY"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="font"> +        <font> +         <pointsize>13</pointsize> +         <stylestrategy>NoAntialias</stylestrategy> +         <kerning>false</kerning> +        </font> +       </property> +       <property name="frameShape"> +        <enum>QFrame::NoFrame</enum> +       </property> +       <property name="frameShadow"> +        <enum>QFrame::Raised</enum> +       </property> +       <property name="smallDecimalPoint"> +        <bool>true</bool> +       </property> +       <property name="digitCount"> +        <number>2</number> +       </property> +       <property name="segmentStyle"> +        <enum>QLCDNumber::Flat</enum> +       </property> +      </widget> +     </item> +     <item row="1" column="2"> +      <widget class="QLabel" name="lblRotY_2"> +       <property name="text"> +        <string>pitch</string> +       </property> +      </widget> +     </item> +    </layout> +   </widget> +   <widget class="QGroupBox" name="groupGameProtocol"> +    <property name="geometry"> +     <rect> +      <x>405</x> +      <y>380</y> +      <width>181</width> +      <height>56</height> +     </rect> +    </property> +    <property name="title"> +     <string>Protocol</string> +    </property> +    <layout class="QHBoxLayout" name="_4"> +     <item> +      <widget class="QComboBox" name="iconcomboProtocol"> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="maxVisibleItems"> +        <number>42</number> +       </property> +      </widget> +     </item> +     <item> +      <widget class="QPushButton" name="btnShowServerControls"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="text"> +        <string>Settings</string> +       </property> +      </widget> +     </item> +    </layout> +   </widget> +   <widget class="QGroupBox" name="groupTrackerSource"> +    <property name="geometry"> +     <rect> +      <x>405</x> +      <y>215</y> +      <width>181</width> +      <height>56</height> +     </rect> +    </property> +    <property name="title"> +     <string>Tracker</string> +    </property> +    <layout class="QHBoxLayout" name="_3"> +     <item> +      <widget class="QComboBox" name="iconcomboTrackerSource"> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="maxVisibleItems"> +        <number>42</number> +       </property> +      </widget> +     </item> +     <item> +      <widget class="QPushButton" name="btnShowEngineControls"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="text"> +        <string>Settings</string> +       </property> +      </widget> +     </item> +    </layout> +   </widget> +   <widget class="QGroupBox" name="groupFilter"> +    <property name="geometry"> +     <rect> +      <x>405</x> +      <y>325</y> +      <width>181</width> +      <height>56</height> +     </rect> +    </property> +    <property name="title"> +     <string>Filter</string> +    </property> +    <layout class="QHBoxLayout" name="_5"> +     <item> +      <widget class="QComboBox" name="iconcomboFilter"> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="maxVisibleItems"> +        <number>42</number> +       </property> +      </widget> +     </item> +     <item> +      <widget class="QPushButton" name="btnShowFilterControls"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="text"> +        <string>Settings</string> +       </property> +      </widget> +     </item> +    </layout> +   </widget> +   <widget class="QGroupBox" name="groupBox_3"> +    <property name="geometry"> +     <rect> +      <x>405</x> +      <y>270</y> +      <width>181</width> +      <height>56</height> +     </rect> +    </property> +    <property name="title"> +     <string>Auxiliary tracker</string> +    </property> +    <layout class="QHBoxLayout" name="_6"> +     <item> +      <widget class="QComboBox" name="cbxSecondTrackerSource"> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="maxVisibleItems"> +        <number>42</number> +       </property> +      </widget> +     </item> +     <item> +      <widget class="QPushButton" name="btnShowSecondTrackerSettings"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="text"> +        <string>Settings</string> +       </property> +      </widget> +     </item> +    </layout> +   </widget> +   <widget class="QFrame" name="video_frame"> +    <property name="geometry"> +     <rect> +      <x>24</x> +      <y>204</y> +      <width>366</width> +      <height>281</height> +     </rect> +    </property> +    <property name="sizePolicy"> +     <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> +      <horstretch>0</horstretch> +      <verstretch>0</verstretch> +     </sizepolicy> +    </property> +    <widget class="QLabel" name="video_frame_label"> +     <property name="geometry"> +      <rect> +       <x>0</x> +       <y>0</y> +       <width>366</width> +       <height>281</height> +      </rect> +     </property> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="font"> +      <font> +       <stylestrategy>NoAntialias</stylestrategy> +       <kerning>false</kerning> +      </font> +     </property> +     <property name="text"> +      <string/> +     </property> +    </widget> +   </widget> +   <widget class="QGroupBox" name="groupProfile"> +    <property name="geometry"> +     <rect> +      <x>405</x> +      <y>15</y> +      <width>181</width> +      <height>81</height> +     </rect> +    </property> +    <property name="title"> +     <string>Profile</string> +    </property> +    <layout class="QGridLayout" name="_2"> +     <item row="0" column="1"> +      <widget class="QPushButton" name="btnSave"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="text"> +        <string>Save</string> +       </property> +      </widget> +     </item> +     <item row="1" column="0"> +      <widget class="QPushButton" name="btnLoad"> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="text"> +        <string>Load</string> +       </property> +      </widget> +     </item> +     <item row="1" column="1"> +      <widget class="QPushButton" name="btnSaveAs"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="text"> +        <string>Save As ...</string> +       </property> +      </widget> +     </item> +     <item row="0" column="0"> +      <widget class="QComboBox" name="iconcomboProfile"> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="maxVisibleItems"> +        <number>10</number> +       </property> +      </widget> +     </item> +    </layout> +   </widget> +   <widget class="QGroupBox" name="groupStartStop"> +    <property name="geometry"> +     <rect> +      <x>405</x> +      <y>440</y> +      <width>181</width> +      <height>56</height> +     </rect> +    </property> +    <property name="minimumSize"> +     <size> +      <width>0</width> +      <height>0</height> +     </size> +    </property> +    <property name="maximumSize"> +     <size> +      <width>65536</width> +      <height>65536</height> +     </size> +    </property> +    <property name="title"> +     <string notr="true">Controls</string> +    </property> +    <layout class="QGridLayout"> +     <item row="0" column="0"> +      <widget class="QPushButton" name="btnStartTracker"> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="text"> +        <string>Start</string> +       </property> +      </widget> +     </item> +     <item row="0" column="1"> +      <widget class="QPushButton" name="btnStopTracker"> +       <property name="enabled"> +        <bool>false</bool> +       </property> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="text"> +        <string>Stop</string> +       </property> +      </widget> +     </item> +    </layout> +   </widget> +   <widget class="QGroupBox" name="box_raw_headpose"> +    <property name="geometry"> +     <rect> +      <x>273</x> +      <y>15</y> +      <width>126</width> +      <height>161</height> +     </rect> +    </property> +    <property name="title"> +     <string notr="true">Raw pose</string> +    </property> +    <layout class="QGridLayout" name="gridLayout_13"> +     <item row="0" column="0"> +      <widget class="QLabel" name="lblX_3"> +       <property name="text"> +        <string>TX</string> +       </property> +      </widget> +     </item> +     <item row="2" column="1"> +      <widget class="QLCDNumber" name="lcdNumZ"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="font"> +        <font> +         <pointsize>13</pointsize> +         <stylestrategy>NoAntialias</stylestrategy> +         <kerning>false</kerning> +        </font> +       </property> +       <property name="frameShape"> +        <enum>QFrame::NoFrame</enum> +       </property> +       <property name="frameShadow"> +        <enum>QFrame::Raised</enum> +       </property> +       <property name="smallDecimalPoint"> +        <bool>true</bool> +       </property> +       <property name="digitCount"> +        <number>2</number> +       </property> +       <property name="segmentStyle"> +        <enum>QLCDNumber::Flat</enum> +       </property> +      </widget> +     </item> +     <item row="1" column="3"> +      <widget class="QLCDNumber" name="lcdNumRotY"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="font"> +        <font> +         <pointsize>13</pointsize> +         <stylestrategy>NoAntialias</stylestrategy> +         <kerning>false</kerning> +        </font> +       </property> +       <property name="frameShape"> +        <enum>QFrame::NoFrame</enum> +       </property> +       <property name="frameShadow"> +        <enum>QFrame::Raised</enum> +       </property> +       <property name="smallDecimalPoint"> +        <bool>true</bool> +       </property> +       <property name="digitCount"> +        <number>2</number> +       </property> +       <property name="segmentStyle"> +        <enum>QLCDNumber::Flat</enum> +       </property> +      </widget> +     </item> +     <item row="0" column="1"> +      <widget class="QLCDNumber" name="lcdNumX"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="font"> +        <font> +         <pointsize>13</pointsize> +         <stylestrategy>NoAntialias</stylestrategy> +         <kerning>false</kerning> +        </font> +       </property> +       <property name="frameShape"> +        <enum>QFrame::NoFrame</enum> +       </property> +       <property name="frameShadow"> +        <enum>QFrame::Raised</enum> +       </property> +       <property name="smallDecimalPoint"> +        <bool>true</bool> +       </property> +       <property name="digitCount"> +        <number>2</number> +       </property> +       <property name="segmentStyle"> +        <enum>QLCDNumber::Flat</enum> +       </property> +      </widget> +     </item> +     <item row="2" column="3"> +      <widget class="QLCDNumber" name="lcdNumRotZ"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="font"> +        <font> +         <pointsize>13</pointsize> +         <stylestrategy>NoAntialias</stylestrategy> +         <kerning>false</kerning> +        </font> +       </property> +       <property name="frameShape"> +        <enum>QFrame::NoFrame</enum> +       </property> +       <property name="frameShadow"> +        <enum>QFrame::Raised</enum> +       </property> +       <property name="smallDecimalPoint"> +        <bool>true</bool> +       </property> +       <property name="digitCount"> +        <number>2</number> +       </property> +       <property name="segmentStyle"> +        <enum>QLCDNumber::Flat</enum> +       </property> +      </widget> +     </item> +     <item row="0" column="3"> +      <widget class="QLCDNumber" name="lcdNumRotX"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="font"> +        <font> +         <pointsize>13</pointsize> +         <stylestrategy>NoAntialias</stylestrategy> +         <kerning>false</kerning> +        </font> +       </property> +       <property name="frameShape"> +        <enum>QFrame::NoFrame</enum> +       </property> +       <property name="frameShadow"> +        <enum>QFrame::Raised</enum> +       </property> +       <property name="smallDecimalPoint"> +        <bool>true</bool> +       </property> +       <property name="digitCount"> +        <number>2</number> +       </property> +       <property name="segmentStyle"> +        <enum>QLCDNumber::Flat</enum> +       </property> +      </widget> +     </item> +     <item row="1" column="0"> +      <widget class="QLabel" name="lblY_3"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="autoFillBackground"> +        <bool>false</bool> +       </property> +       <property name="text"> +        <string>TY</string> +       </property> +      </widget> +     </item> +     <item row="2" column="0"> +      <widget class="QLabel" name="lblZ_3"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="autoFillBackground"> +        <bool>false</bool> +       </property> +       <property name="text"> +        <string>TZ</string> +       </property> +      </widget> +     </item> +     <item row="1" column="1"> +      <widget class="QLCDNumber" name="lcdNumY"> +       <property name="enabled"> +        <bool>true</bool> +       </property> +       <property name="font"> +        <font> +         <pointsize>13</pointsize> +         <stylestrategy>NoAntialias</stylestrategy> +         <kerning>false</kerning> +        </font> +       </property> +       <property name="frameShape"> +        <enum>QFrame::NoFrame</enum> +       </property> +       <property name="frameShadow"> +        <enum>QFrame::Raised</enum> +       </property> +       <property name="smallDecimalPoint"> +        <bool>true</bool> +       </property> +       <property name="digitCount"> +        <number>2</number> +       </property> +       <property name="segmentStyle"> +        <enum>QLCDNumber::Flat</enum> +       </property> +      </widget> +     </item> +     <item row="1" column="2"> +      <widget class="QLabel" name="lblRotY_3"> +       <property name="text"> +        <string>pitch</string> +       </property> +      </widget> +     </item> +     <item row="0" column="2"> +      <widget class="QLabel" name="lblRotX_3"> +       <property name="text"> +        <string>yaw</string> +       </property> +      </widget> +     </item> +     <item row="2" column="2"> +      <widget class="QLabel" name="lblRotZ_3"> +       <property name="text"> +        <string>roll</string> +       </property> +      </widget> +     </item> +    </layout> +   </widget> +   <widget class="QGroupBox" name="groupBox"> +    <property name="geometry"> +     <rect> +      <x>15</x> +      <y>179</y> +      <width>386</width> +      <height>316</height> +     </rect> +    </property> +    <property name="title"> +     <string>Video preview</string> +    </property> +   </widget> +   <widget class="QGroupBox" name="groupBox_2"> +    <property name="geometry"> +     <rect> +      <x>405</x> +      <y>95</y> +      <width>181</width> +      <height>80</height> +     </rect> +    </property> +    <property name="title"> +     <string>Settings</string> +    </property> +    <widget class="QPushButton" name="btnShortcuts"> +     <property name="geometry"> +      <rect> +       <x>10</x> +       <y>45</y> +       <width>161</width> +       <height>26</height> +      </rect> +     </property> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="text"> +      <string>Keys</string> +     </property> +     <property name="icon"> +      <iconset resource="main-facetracknoir.qrc"> +       <normaloff>:/uielements/tools.png</normaloff>:/uielements/tools.png</iconset> +     </property> +     <property name="iconSize"> +      <size> +       <width>98</width> +       <height>24</height> +      </size> +     </property> +    </widget> +    <widget class="QPushButton" name="btnEditCurves"> +     <property name="geometry"> +      <rect> +       <x>10</x> +       <y>15</y> +       <width>161</width> +       <height>26</height> +      </rect> +     </property> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="text"> +      <string>Mapping</string> +     </property> +     <property name="icon"> +      <iconset resource="main-facetracknoir.qrc"> +       <normaloff>:/uielements/curves.png</normaloff>:/uielements/curves.png</iconset> +     </property> +     <property name="iconSize"> +      <size> +       <width>60</width> +       <height>37</height> +      </size> +     </property> +    </widget> +   </widget> +   <widget class="QGroupBox" name="groupBox_4"> +    <property name="geometry"> +     <rect> +      <x>15</x> +      <y>15</y> +      <width>116</width> +      <height>161</height> +     </rect> +    </property> +    <property name="title"> +     <string>Tracking preview</string> +    </property> +    <widget class="GLWidget" name="pose_display" native="true"> +     <property name="geometry"> +      <rect> +       <x>5</x> +       <y>15</y> +       <width>106</width> +       <height>141</height> +      </rect> +     </property> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +    </widget> +   </widget> +   <widget class="QGroupBox" name="groupBox_5"> +    <property name="geometry"> +     <rect> +      <x>405</x> +      <y>180</y> +      <width>181</width> +      <height>36</height> +     </rect> +    </property> +    <property name="title"> +     <string>Detected app</string> +    </property> +    <widget class="QLabel" name="game_name"> +     <property name="geometry"> +      <rect> +       <x>10</x> +       <y>15</y> +       <width>115</width> +       <height>16</height> +      </rect> +     </property> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +    </widget> +   </widget> +   <zorder>box_mapped_headpose</zorder> +   <zorder>groupGameProtocol</zorder> +   <zorder>groupTrackerSource</zorder> +   <zorder>groupFilter</zorder> +   <zorder>groupBox_3</zorder> +   <zorder>video_frame</zorder> +   <zorder>groupProfile</zorder> +   <zorder>groupStartStop</zorder> +   <zorder>box_raw_headpose</zorder> +   <zorder>video_frame_label</zorder> +   <zorder>video_frame_label</zorder> +   <zorder>groupBox</zorder> +   <zorder>groupBox_2</zorder> +   <zorder>groupBox_4</zorder> +   <zorder>groupBox_5</zorder> +  </widget> + </widget> + <customwidgets> +  <customwidget> +   <class>GLWidget</class> +   <extends>QWidget</extends> +   <header>glwidget.h</header> +  </customwidget> + </customwidgets> + <resources> +  <include location="main-facetracknoir.qrc"/> + </resources> + <connections/> + <designerdata> +  <property name="gridDeltaX"> +   <number>5</number> +  </property> +  <property name="gridDeltaY"> +   <number>5</number> +  </property> +  <property name="gridSnapX"> +   <bool>true</bool> +  </property> +  <property name="gridSnapY"> +   <bool>true</bool> +  </property> +  <property name="gridVisible"> +   <bool>true</bool> +  </property> + </designerdata> +</ui> diff --git a/facetracknoir/tracker.cpp b/facetracknoir/tracker.cpp index 90e9bdad..72ad22b4 100644 --- a/facetracknoir/tracker.cpp +++ b/facetracknoir/tracker.cpp @@ -1,192 +1,192 @@ -/* Copyright (c) 2012-2013 Stanislaw Halik <sthalik@misaki.pl>
 - *
 - * Permission to use, copy, modify, and/or distribute this software for any
 - * purpose with or without fee is hereby granted, provided that the above
 - * copyright notice and this permission notice appear in all copies.
 - */
 -
 -/*
 - * this file appeared originally in facetracknoir, was rewritten completely
 - * following opentrack fork.
 - *
 - * originally written by Wim Vriend.
 - */
 -
 -#include "tracker.h"
 -#include "facetracknoir.h"
 -#include <opencv2/core/core.hpp>
 -#include <cmath>
 -#include <algorithm>
 -
 -#if defined(_WIN32)
 -#   include <windows.h>
 -#endif
 -
 -Tracker::Tracker(FaceTrackNoIR *parent , main_settings& s) :
 -    mainApp(parent),
 -    s(s),
 -    should_quit(false),
 -    do_center(false),
 -    enabled(true)
 -{
 -}
 -
 -Tracker::~Tracker()
 -{
 -    should_quit = true;
 -    wait();
 -}
 -
 -static void get_curve(double pos, double& out, THeadPoseDOF& axis) {
 -    bool altp = (pos < 0) && axis.opts.altp;
 -    axis.curve.setTrackingActive( !altp );
 -    axis.curveAlt.setTrackingActive( altp );    
 -    auto& fc = altp ? axis.curveAlt : axis.curve;
 -    out = (axis.opts.invert ? -1 : 1) * fc.getValue(pos);
 -    
 -    out += axis.opts.zero;
 -}
 -
 -static void t_compensate(double* input, double* output, bool rz)
 -{
 -    const auto H = input[Yaw] * M_PI / -180;
 -    const auto P = input[Pitch] * M_PI / -180;
 -    const auto B = input[Roll] * M_PI / 180;
 -
 -    const auto cosH = cos(H);
 -    const auto sinH = sin(H);
 -    const auto cosP = cos(P);
 -    const auto sinP = sin(P);
 -    const auto cosB = cos(B);
 -    const auto sinB = sin(B);
 -
 -    double foo[] = {
 -        cosH * cosB - sinH * sinP * sinB,
 -        - sinB * cosP,
 -        sinH * cosB + cosH * sinP * sinB,
 -        cosH * sinB + sinH * sinP * cosB,
 -        cosB * cosP,
 -        sinB * sinH - cosH * sinP * cosB,
 -        - sinH * cosP,
 -        - sinP,
 -        cosH * cosP,
 -    };
 -
 -    cv::Mat rmat(3, 3, CV_64F, foo);
 -    const cv::Mat tvec(3, 1, CV_64F, input);
 -    cv::Mat ret = rmat * tvec;
 -
 -    const int max = !rz ? 3 : 2;
 -
 -    for (int i = 0; i < max; i++)
 -        output[i] = ret.at<double>(i);
 -}
 -
 -void Tracker::run() {
 -    T6DOF offset_camera;
 -
 -    double newpose[6] = {0};
 -    int sleep_ms = 15;
 -
 -    if (Libraries->pTracker)
 -        sleep_ms = std::min(sleep_ms, 1000 / Libraries->pTracker->preferredHz());
 -
 -    qDebug() << "tracker Hz:" << 1000 / sleep_ms;
 -
 -#if defined(_WIN32)
 -    (void) timeBeginPeriod(1);
 -#endif
 -
 -    for (;;)
 -    {
 -        t.start();
 -
 -        if (should_quit)
 -            break;
 -
 -        if (Libraries->pTracker) {
 -            Libraries->pTracker->GetHeadPoseData(newpose);
 -        }
 -
 -        {
 -            QMutexLocker foo(&mtx);
 -
 -            for (int i = 0; i < 6; i++)
 -            {
 -                raw_6dof.axes[i] = newpose[i];
 -                
 -                auto& axis = mainApp->axis(i);
 -                
 -                int k = axis.opts.src;
 -                if (k < 0 || k >= 6)
 -                    continue;
 -                
 -                axis.headPos = newpose[k];
 -            }
 -
 -            if (do_center)  {
 -                for (int i = 0; i < 6; i++)
 -                    offset_camera.axes[i] = mainApp->axis(i).headPos;
 -
 -                do_center = false;
 -
 -                if (Libraries->pFilter)
 -                    Libraries->pFilter->reset();
 -            }
 -
 -            T6DOF target_camera, target_camera2, new_camera;
 -
 -            if (enabled)
 -            {
 -                for (int i = 0; i < 6; i++)
 -                    target_camera.axes[i] = mainApp->axis(i).headPos;
 -
 -                target_camera2 = target_camera - offset_camera;
 -            }
 -
 -            if (Libraries->pFilter) {
 -                Libraries->pFilter->FilterHeadPoseData(target_camera2.axes, new_camera.axes);
 -            } else {
 -                new_camera = target_camera2;
 -            }
 -
 -            for (int i = 0; i < 6; i++) {
 -                get_curve(new_camera.axes[i], output_camera.axes[i], mainApp->axis(i));
 -            }
 -
 -            if (mainApp->s.tcomp_p)
 -                t_compensate(output_camera.axes, output_camera.axes, mainApp->s.tcomp_tz);
 -
 -            if (Libraries->pProtocol) {
 -                Libraries->pProtocol->sendHeadposeToGame( output_camera.axes );
 -            }
 -        }
 -
 -        const long q = std::max(0L, sleep_ms * 1000L - std::max(0L, t.elapsed()));
 -
 -        usleep(q);
 -    }
 -#if defined(_WIN32)
 -    (void) timeEndPeriod(1);
 -#endif
 -
 -    for (int i = 0; i < 6; i++)
 -    {
 -        mainApp->axis(i).curve.setTrackingActive(false);
 -        mainApp->axis(i).curveAlt.setTrackingActive(false);
 -    }
 -}
 -
 -void Tracker::getHeadPose( double *data ) {
 -    QMutexLocker foo(&mtx);
 -    for (int i = 0; i < 6; i++)
 -    {
 -        data[i] = raw_6dof.axes[i];
 -    }
 -}
 -
 -void Tracker::getOutputHeadPose( double *data ) {
 -    QMutexLocker foo(&mtx);
 -    for (int i = 0; i < 6; i++)
 -        data[i] = output_camera.axes[i];
 -}
 +/* Copyright (c) 2012-2013 Stanislaw Halik <sthalik@misaki.pl> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + */ + +/* + * this file appeared originally in facetracknoir, was rewritten completely + * following opentrack fork. + * + * originally written by Wim Vriend. + */ + +#include "tracker.h" +#include "facetracknoir.h" +#include <opencv2/core/core.hpp> +#include <cmath> +#include <algorithm> + +#if defined(_WIN32) +#   include <windows.h> +#endif + +Tracker::Tracker(FaceTrackNoIR *parent , main_settings& s) : +    mainApp(parent), +    s(s), +    should_quit(false), +    do_center(false), +    enabled(true) +{ +} + +Tracker::~Tracker() +{ +    should_quit = true; +    wait(); +} + +static void get_curve(double pos, double& out, THeadPoseDOF& axis) { +    bool altp = (pos < 0) && axis.opts.altp; +    axis.curve.setTrackingActive( !altp ); +    axis.curveAlt.setTrackingActive( altp );     +    auto& fc = altp ? axis.curveAlt : axis.curve; +    out = (axis.opts.invert ? -1 : 1) * fc.getValue(pos); +     +    out += axis.opts.zero; +} + +static void t_compensate(double* input, double* output, bool rz) +{ +    const auto H = input[Yaw] * M_PI / -180; +    const auto P = input[Pitch] * M_PI / -180; +    const auto B = input[Roll] * M_PI / 180; + +    const auto cosH = cos(H); +    const auto sinH = sin(H); +    const auto cosP = cos(P); +    const auto sinP = sin(P); +    const auto cosB = cos(B); +    const auto sinB = sin(B); + +    double foo[] = { +        cosH * cosB - sinH * sinP * sinB, +        - sinB * cosP, +        sinH * cosB + cosH * sinP * sinB, +        cosH * sinB + sinH * sinP * cosB, +        cosB * cosP, +        sinB * sinH - cosH * sinP * cosB, +        - sinH * cosP, +        - sinP, +        cosH * cosP, +    }; + +    cv::Mat rmat(3, 3, CV_64F, foo); +    const cv::Mat tvec(3, 1, CV_64F, input); +    cv::Mat ret = rmat * tvec; + +    const int max = !rz ? 3 : 2; + +    for (int i = 0; i < max; i++) +        output[i] = ret.at<double>(i); +} + +void Tracker::run() { +    T6DOF offset_camera; + +    double newpose[6] = {0}; +    int sleep_ms = 15; + +    if (Libraries->pTracker) +        sleep_ms = std::min(sleep_ms, 1000 / Libraries->pTracker->preferredHz()); + +    qDebug() << "tracker Hz:" << 1000 / sleep_ms; + +#if defined(_WIN32) +    (void) timeBeginPeriod(1); +#endif + +    for (;;) +    { +        t.start(); + +        if (should_quit) +            break; + +        if (Libraries->pTracker) { +            Libraries->pTracker->GetHeadPoseData(newpose); +        } + +        { +            QMutexLocker foo(&mtx); + +            for (int i = 0; i < 6; i++) +            { +                raw_6dof.axes[i] = newpose[i]; +                 +                auto& axis = mainApp->axis(i); +                 +                int k = axis.opts.src; +                if (k < 0 || k >= 6) +                    continue; +                 +                axis.headPos = newpose[k]; +            } + +            if (do_center)  { +                for (int i = 0; i < 6; i++) +                    offset_camera.axes[i] = mainApp->axis(i).headPos; + +                do_center = false; + +                if (Libraries->pFilter) +                    Libraries->pFilter->reset(); +            } + +            T6DOF target_camera, target_camera2, new_camera; + +            if (enabled) +            { +                for (int i = 0; i < 6; i++) +                    target_camera.axes[i] = mainApp->axis(i).headPos; + +                target_camera2 = target_camera - offset_camera; +            } + +            if (Libraries->pFilter) { +                Libraries->pFilter->FilterHeadPoseData(target_camera2.axes, new_camera.axes); +            } else { +                new_camera = target_camera2; +            } + +            for (int i = 0; i < 6; i++) { +                get_curve(new_camera.axes[i], output_camera.axes[i], mainApp->axis(i)); +            } + +            if (mainApp->s.tcomp_p) +                t_compensate(output_camera.axes, output_camera.axes, mainApp->s.tcomp_tz); + +            if (Libraries->pProtocol) { +                Libraries->pProtocol->sendHeadposeToGame( output_camera.axes ); +            } +        } + +        const long q = std::max(0L, sleep_ms * 1000L - std::max(0L, t.elapsed())); + +        usleep(q); +    } +#if defined(_WIN32) +    (void) timeEndPeriod(1); +#endif + +    for (int i = 0; i < 6; i++) +    { +        mainApp->axis(i).curve.setTrackingActive(false); +        mainApp->axis(i).curveAlt.setTrackingActive(false); +    } +} + +void Tracker::getHeadPose( double *data ) { +    QMutexLocker foo(&mtx); +    for (int i = 0; i < 6; i++) +    { +        data[i] = raw_6dof.axes[i]; +    } +} + +void Tracker::getOutputHeadPose( double *data ) { +    QMutexLocker foo(&mtx); +    for (int i = 0; i < 6; i++) +        data[i] = output_camera.axes[i]; +} | 
