From 9f2cac900f7971c1cf12b2dca4344d3b84b2c643 Mon Sep 17 00:00:00 2001 From: Blabzillaweasel Date: Sat, 8 Feb 2025 23:27:07 +1300 Subject: [PATCH] Initial commit --- EyeTrackApp/config.py | 5 ++ EyeTrackApp/osc_calibrate_filter.py | 12 +++ .../settings/modules/EyeTuneSettingsModule | 77 +++++++++++++++++++ EyeTrackApp/zBuild.bat | 2 + conftest.py | 6 ++ 5 files changed, 102 insertions(+) create mode 100644 EyeTrackApp/settings/modules/EyeTuneSettingsModule create mode 100644 EyeTrackApp/zBuild.bat diff --git a/EyeTrackApp/config.py b/EyeTrackApp/config.py index 1d18cd7..846f779 100644 --- a/EyeTrackApp/config.py +++ b/EyeTrackApp/config.py @@ -217,6 +217,11 @@ class EyeTrackSettingsConfig(BaseModel): gui_OutputMultiplier: float = 1 gui_use_module: bool = False + #EyeTune + gui_eyetune_maxin: float = 1 + gui_eyetune_maxout: float = 1 + gui_eyetune_maxup: float = 1 + gui_eyetune_maxdown: float = 1 class EyeTrackConfig(BaseModel): version: int = 1 diff --git a/EyeTrackApp/osc_calibrate_filter.py b/EyeTrackApp/osc_calibrate_filter.py index ff592d9..5ee56cb 100644 --- a/EyeTrackApp/osc_calibrate_filter.py +++ b/EyeTrackApp/osc_calibrate_filter.py @@ -38,6 +38,7 @@ import math from utils.calibration_3d import receive_calibration_data, converge_3d from utils.misc_utils import resource_path from pathlib import Path +from utils.misc_utils import clamp tool = Path("Tools") class TimeoutError(RuntimeError): @@ -335,6 +336,17 @@ class cal: var.past_x = out_x_mult var.past_y = out_y_mult + #Clamps the right eye's X values + if self.eye_id == EyeID.Left: + out_x = clamp(out_x, -self.settings.gui_eyetune_maxout, self.settings.gui_eyetune_maxin) + #Clamps the left eye's x values + elif self.eye_id == EyeID.Right: + out_x = clamp(out_x, -self.settings.gui_eyetune_maxin, self.settings.gui_eyetune_maxout) + #Clamps both eye's Y values + out_y = clamp(out_y, -self.settings.gui_eyetune_maxdown, self.settings.gui_eyetune_maxup) + + + out_x, out_y = velocity_falloff(self, var, out_x, out_y) try: diff --git a/EyeTrackApp/settings/modules/EyeTuneSettingsModule b/EyeTrackApp/settings/modules/EyeTuneSettingsModule new file mode 100644 index 0000000..ea8c05a --- /dev/null +++ b/EyeTrackApp/settings/modules/EyeTuneSettingsModule @@ -0,0 +1,77 @@ +from pydantic import AfterValidator +from typing_extensions import Annotated + +from settings.modules.BaseModule import BaseSettingsModule, BaseValidationModel +from settings.constants import BACKGROUND_COLOR +import PySimpleGUI as sg + +from settings.modules.CommonFieldValidators import try_convert_to_float +from settings.modules.CommonFieldValidators import try_convert_to_int + +class EyeTuneValidationModule(BaseValidationModel): + gui_eyetune_maxin: Annotated[float, AfterValidator(try_convert_to_float)] + gui_eyetune_maxout: Annotated[float, AfterValidator(try_convert_to_float)] + gui_eyetune_maxup: Annotated[float, AfterValidator(try_convert_to_float)] + gui_eyetune_maxdown: Annotated[float, AfterValidator(try_convert_to_float)] + +class EyeTuneSettingsModule(BaseSettingsModule): + def __init__(self, config, widget_id, **kwargs): + super().__init__(config=config, widget_id=widget_id, **kwargs) + self.validation_model = EyeTuneValidationModule + self.gui_eyetune_maxin = f"-gui_eyetune_maxin{widget_id}-" + self.gui_eyetune_maxout = f"-gui_eyetune_maxout{widget_id}-" + self.gui_eyetune_maxup =f"-gui_eyetune_maxup{widget_id}-" + self.gui_eyetune_maxdown =f"-gui_eyetune_maxdown{widget_id}" + + + + def get_layout(self): + return [ + [ + sg.Text("Eye Tuning (Max Rotation):", background_color='#242224'), + ], + [ + sg.Text("Max. Inwards", background_color=BACKGROUND_COLOR), + sg.InputText( + self.config.gui_eyetune_maxin, + key=self.gui_eyetune_maxin, + size=(0, 10), + tooltip=( + "Sets the maximum allowed inwards rotation" + "\nSet between 0 and 1" + ) + ), + sg.Text("Max. Outwards", background_color=BACKGROUND_COLOR), + sg.InputText( + self.config.gui_eyetune_maxout, + key=self.gui_eyetune_maxout, + size=(0, 10), + tooltip=( + "Sets the maximum allowed outwards rotation" + "\nSet between 0 and 1" + ) + ), + ], + [ + sg.Text("Max. Upwards", background_color=BACKGROUND_COLOR), + sg.InputText( + self.config.gui_eyetune_maxup, + key=self.gui_eyetune_maxup, + size=(0, 10), + tooltip=( + "Sets the maximum allowed upwards rotation" + "\nSet between 0 and 1" + ) + ), + sg.Text("Max. Down", background_color=BACKGROUND_COLOR), + sg.InputText( + self.config.gui_eyetune_maxdown, + key=self.gui_eyetune_maxdown, + size=(0, 10), + tooltip=( + "Sets the maximum allowed downwards rotation" + "\nSet between 0 and 1" + ) + ), + ], + ] \ No newline at end of file diff --git a/EyeTrackApp/zBuild.bat b/EyeTrackApp/zBuild.bat new file mode 100644 index 0000000..9ddc2ac --- /dev/null +++ b/EyeTrackApp/zBuild.bat @@ -0,0 +1,2 @@ +poetry run pyinstaller eyetrackapp.spec +cmd /k \ No newline at end of file diff --git a/conftest.py b/conftest.py index 4a10c85..ede52e2 100644 --- a/conftest.py +++ b/conftest.py @@ -74,6 +74,12 @@ def eyetrack_settings_config(): gui_osc_vrcft_v2=False, gui_vrc_native=False, gui_pupil_dilation=True, + + #EyeTune + gui_eyetune_maxin=1, + gui_eyetune_maxout=1, + gui_eyetune_maxup=1, + gui_eyetune_maxdown=1, )