Skip to content
Snippets Groups Projects
Commit 7a02cb48 authored by Lucas Philippe's avatar Lucas Philippe
Browse files

Correction de la Q5 (fonctionnel)

parent e1dd373c
No related branches found
No related tags found
No related merge requests found
from PyQt5.QtGui import QColor from PyQt5.QtGui import QColor
class BubbleCursor: class BubbleCursor:
defaultCol=QColor("green") defaultCol=QColor("blue")
def __init__(self, targets): def __init__(self, targets):
self.x = 0 self.x = 0
...@@ -9,30 +9,26 @@ class BubbleCursor: ...@@ -9,30 +9,26 @@ class BubbleCursor:
self.size = 50 self.size = 50
self.targets = targets self.targets = targets
self.closest = None self.closest = None
def paint(self, painter): def paint(self, painter):
painter.setBrush(self.defaultCol) painter.setBrush(self.defaultCol)
painter.drawEllipse(self.x - self.size, self.y - self.size, self.size * 2, self.size * 2) painter.drawEllipse(int(self.x - self.size), int(self.y - self.size), int(self.size * 2), int(self.size * 2))
def move(self, moveX, moveY):
self.x = moveX
self.y = moveY
self.closest = None
minDistance = float('inf')
for target in self.targets: def move(self, x, y):
target.highlighted = False self.x = x
self.y = y
min_distance = float("inf") # variable valeur infini pour démarrer la recherche de min
previous_closest = self.closest
for target in self.targets: for target in self.targets:
distance = self.distanceToTarget(target) distance = ((self.x - target.x) ** 2 + (self.y - target.y) ** 2) ** 0.5 # cf. Theoreme de Pythagore
if distance < minDistance: distance = distance - target.size/2 # Prendre la distance avec le contour du cercle et pas le centre
minDistance = distance if distance < min_distance:
min_distance = distance
self.closest = target self.closest = target
self.size = min_distance
if self.closest is not None: if previous_closest != self.closest:
if previous_closest:
previous_closest.highlighted = False
self.closest.highlighted = True self.closest.highlighted = True
self.size = minDistance - self.closest.size / 2
def distanceToTarget(self, target):
distanceCentre = ((self.x - target.x) ** 2 + (self.y - target.y) ** 2) ** 0.5
return abs(distanceCentre - target.size / 2)
...@@ -21,13 +21,11 @@ class BubbleWidget(QWidget): ...@@ -21,13 +21,11 @@ class BubbleWidget(QWidget):
self.targets.append(Target(x,y,size)) self.targets.append(Target(x,y,size))
def paintEvent(self, event): def paintEvent(self, event):
print("paintEvent appelé")
painter = QPainter(self) painter = QPainter(self)
for target in self.targets: for target in self.targets:
target.paint(painter) target.paint(painter)
self.cursor.paint(painter) self.cursor.paint(painter)
def mouseMoveEvent(self, event): def mouseMoveEvent(self, event):
print("mouseMoveEvent appelé")
self.cursor.move(event.x(), event.y()) self.cursor.move(event.x(), event.y())
self.update() self.update()
...@@ -7,11 +7,8 @@ def main(): ...@@ -7,11 +7,8 @@ def main():
app = QApplication(sys.argv) app = QApplication(sys.argv)
main_window = QMainWindow() main_window = QMainWindow()
main_window.resize(1024, 800) main_window.resize(1024, 800)
bubble_widget = BubbleWidget() bubble_widget = BubbleWidget()
main_window.setCentralWidget(bubble_widget) main_window.setCentralWidget(bubble_widget)
main_window.show() main_window.show()
sys.exit(app.exec_()) sys.exit(app.exec_())
......
from PyQt5.QtGui import QColor from PyQt5.QtGui import QColor, QBrush, QPen
class Target: class Target:
defaultCol = QColor("green") defaultCol = QColor("green")
...@@ -13,10 +14,13 @@ class Target: ...@@ -13,10 +14,13 @@ class Target:
self.highlighted = False self.highlighted = False
def paint(self, painter): def paint(self, painter):
color = self.defaultCol
if self.toSelect: if self.toSelect:
painter.setBrush(self.toSelectCol) color = self.toSelectCol
elif self.highlighted: elif self.highlighted:
painter.setBrush(self.highlightCol) color = self.highlightCol
else:
painter.setBrush(self.defaultCol) painter.setBrush(QBrush(color))
painter.drawEllipse(self.x - self.size / 2, self.y - self.size / 2, self.size, self.size) painter.setPen(QPen(color))
\ No newline at end of file painter.drawEllipse(int(self.x - self.size / 2), int(self.y - self.size / 2), int(self.size), int(self.size))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment