diff --git a/.gitignore b/.gitignore index daff88c84..e0c43999a 100644 --- a/.gitignore +++ b/.gitignore @@ -62,3 +62,4 @@ resources/.DS_Store plugins/UraniumExample*Plugin /conanbuildinfo.txt /graph_info.json +/venv/ diff --git a/UM/Qt/Bindings/ShakeDetector.py b/UM/Qt/Bindings/ShakeDetector.py index 1712c7734..5568a42a7 100644 --- a/UM/Qt/Bindings/ShakeDetector.py +++ b/UM/Qt/Bindings/ShakeDetector.py @@ -1,33 +1,45 @@ +from PyQt6.QtCore import QObject, pyqtSignal, pyqtProperty -from PyQt6.QtCore import QObject, pyqtSignal, pyqtProperty, pyqtSlot - +from typing import Optional class ShakeDetector(QObject): - shakeDetected = pyqtSignal() - def __init__(self, parent = None): + pointChanged = pyqtSignal() + + def getPoint(self) -> Optional["QPoint"]: + return self._curr_pos + + def setPoint(self, point: "QPoint"): + self._curr_pos = point + self.pointChanged.emit() + + position = pyqtProperty('QPoint', fget=getPoint, fset=setPoint, notify=pointChanged) + + def __init__(self, _parent = None): super().__init__() - self.prev_pos = None - self.threshold = 5 + + self._curr_pos = None + self._prev_pos = None + self.threshold = 50 self.shake_count = 0 self.number_of_shakes = 0 - @pyqtSlot(int, int) - def checkForShake(self, x, y): + self.pointChanged.connect(self._checkForShake) - if self.prev_pos is not None: + def _checkForShake(self): + if self._prev_pos is not None: # Calculate the distance moved between the previous and current positions - distance = ((x - self.prev_pos[0]) ** 2 + (y - self.prev_pos[1]) ** 2) ** 0.5 + distance = ((self._curr_pos.x() - self._prev_pos.x()) ** 2 + (self._curr_pos.y() - self._curr_pos.y()) ** 2) ** 0.5 # If the distance is greater than a threshold, emit the shakeDetected signal if distance > self.threshold: self.shake_count += 1 - if self.shake_count > 3: + if self.shake_count > 10: self.shake_count = 0 - self.number_of_shakes +=1 + self.number_of_shakes += 1 self.shakeDetected.emit() # Update the previous position with the current one - self.prev_pos = (x, y) + self._prev_pos = self._curr_pos @pyqtProperty(int, notify = shakeDetected) def shakeIsdetected(self):