diff --git a/TP1/BubbleCursor.py b/TP1/BubbleCursor.py new file mode 100644 index 0000000000000000000000000000000000000000..828aa6e232e44cec7ab2f6bc21f5ec64a0704c50 --- /dev/null +++ b/TP1/BubbleCursor.py @@ -0,0 +1,38 @@ +from PyQt5.QtGui import QColor + +class BubbleCursor: + defaultCol=QColor("green") + + def __init__(self, targets): + self.x = 0 + self.y = 0 + self.size = 50 + self.targets = targets + self.closest = None + + def paint(self, painter): + painter.setBrush(self.defaultCol) + painter.drawEllipse(self.x - self.size, self.y - self.size, self.size * 2, 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: + target.highlighted = False + + for target in self.targets: + distance = self.distanceToTarget(target) + if distance < minDistance: + minDistance = distance + self.closest = target + + if self.closest is not None: + 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) diff --git a/TP1/BubbleWidget.py b/TP1/BubbleWidget.py new file mode 100644 index 0000000000000000000000000000000000000000..476d98d579f44ca150e13452d12bc49b48fb23e0 --- /dev/null +++ b/TP1/BubbleWidget.py @@ -0,0 +1,33 @@ +import csv +from PyQt5.QtGui import QPainter +from PyQt5.QtWidgets import QWidget +from Target import Target +from BubbleCursor import BubbleCursor + +class BubbleWidget(QWidget): + def __init__(self): + super().__init__() + self.targets = [] + self.loadTargets() + self.cursor = BubbleCursor(self.targets) + self.setMouseTracking(True) + + def loadTargets(self): + with open('src_tp_bubble.csv', newline='') as csvfile: + reader = csv.reader(csvfile) + for row in reader: + if len(row) >= 3: + x, y, size = map(int, row[:3]) + self.targets.append(Target(x,y,size)) + + def paintEvent(self, event): + print("paintEvent appelé") + painter = QPainter(self) + for target in self.targets: + target.paint(painter) + self.cursor.paint(painter) + + def mouseMoveEvent(self, event): + print("mouseMoveEvent appelé") + self.cursor.move(event.x(), event.y()) + self.update() diff --git a/TP1/MainBubble.py b/TP1/MainBubble.py new file mode 100644 index 0000000000000000000000000000000000000000..f70217a92990d711ecbcadacc2e2207182495ba8 --- /dev/null +++ b/TP1/MainBubble.py @@ -0,0 +1,19 @@ +import sys + +from PyQt5.QtGui import QPainter +from PyQt5.QtWidgets import QApplication, QMainWindow +from BubbleWidget import BubbleWidget +def main(): + app = QApplication(sys.argv) + main_window = QMainWindow() + main_window.resize(1024, 800) + + bubble_widget = BubbleWidget() + + main_window.setCentralWidget(bubble_widget) + + main_window.show() + sys.exit(app.exec_()) + +if __name__ == "__main__": + main() diff --git a/TP1/README.md b/TP1/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/TP1/Target.py b/TP1/Target.py new file mode 100644 index 0000000000000000000000000000000000000000..78cf43c80661e139e58c44cfb74e40315881b169 --- /dev/null +++ b/TP1/Target.py @@ -0,0 +1,22 @@ +from PyQt5.QtGui import QColor + +class Target: + defaultCol = QColor("green") + highlightCol = QColor("red") + toSelectCol = QColor("blue") + + def __init__(self, x, y, size): + self.x = x + self.y = y + self.size = size + self.toSelect = False + self.highlighted = False + + def paint(self, painter): + if self.toSelect: + painter.setBrush(self.toSelectCol) + elif self.highlighted: + painter.setBrush(self.highlightCol) + else: + painter.setBrush(self.defaultCol) + painter.drawEllipse(self.x - self.size / 2, self.y - self.size / 2, self.size, self.size) \ No newline at end of file diff --git a/TP1/__pycache__/BubbleCursor.cpython-39.pyc b/TP1/__pycache__/BubbleCursor.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4d49281a3a479273257899a9b740c614c215d99e Binary files /dev/null and b/TP1/__pycache__/BubbleCursor.cpython-39.pyc differ diff --git a/TP1/__pycache__/BubbleWidget.cpython-39.pyc b/TP1/__pycache__/BubbleWidget.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e9ebd96cf92dcab43c8065bb5482a9f7eccc59e Binary files /dev/null and b/TP1/__pycache__/BubbleWidget.cpython-39.pyc differ diff --git a/TP1/__pycache__/Target.cpython-39.pyc b/TP1/__pycache__/Target.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23ca47c2f5451c35bafb6733925f0380401c87fa Binary files /dev/null and b/TP1/__pycache__/Target.cpython-39.pyc differ diff --git a/TP1/src_tp_bubble.csv b/TP1/src_tp_bubble.csv new file mode 100644 index 0000000000000000000000000000000000000000..48c30994b3ee4a9ae5a6c16ea6dc92a8601ebcf4 --- /dev/null +++ b/TP1/src_tp_bubble.csv @@ -0,0 +1,100 @@ +381,453,17 +320,81,17 +71,705,14 +251,441,7 +557,644,9 +209,9,13 +185,632,13 +179,752,21 +815,368,24 +840,258,20 +978,726,22 +898,334,17 +709,671,17 +79,446,10 +320,299,14 +129,238,16 +940,10,6 +806,476,8 +626,538,7 +786,725,15 +840,639,14 +562,527,10 +1000,307,22 +197,561,19 +920,608,14 +218,322,24 +849,356,19 +13,765,23 +282,335,8 +369,151,16 +415,320,13 +443,244,9 +592,228,17 +640,58,13 +366,127,18 +57,760,19 +932,670,12 +761,297,10 +438,169,14 +588,329,23 +958,551,18 +198,217,7 +35,717,14 +955,655,8 +267,217,23 +159,558,24 +464,53,9 +264,255,15 +1013,92,15 +575,450,23 +355,683,23 +696,624,21 +469,143,17 +725,652,19 +338,765,8 +1012,46,11 +580,621,21 +673,478,18 +850,386,13 +622,167,21 +137,107,17 +396,172,7 +960,702,13 +804,105,8 +527,263,17 +692,417,15 +1014,755,14 +735,677,19 +944,126,10 +814,510,19 +33,326,18 +520,105,24 +654,141,19 +926,548,16 +809,183,9 +484,627,22 +283,405,11 +754,65,16 +313,33,19 +456,276,15 +16,166,15 +576,371,24 +664,74,20 +362,538,18 +69,295,11 +573,175,13 +650,522,14 +393,223,21 +517,571,9 +887,173,11 +914,495,22 +455,371,11 +767,203,16 +992,640,14 +682,391,11 +801,280,17 +222,109,9 +887,243,12 +910,166,21 +508,154,8 \ No newline at end of file