From e1dd373c0b944eeabd245f4eae43adcc1d3cfd4d Mon Sep 17 00:00:00 2001
From: Lucas Philippe <lucasphilippe@MacBook-Air-de-Lucas.local>
Date: Thu, 11 Jan 2024 13:34:11 +0100
Subject: [PATCH] =?UTF-8?q?debut=20TP1,=20fin=20de=20s=C3=A9ance,=20fin=20?=
 =?UTF-8?q?Q5,=20commencement=20de=20Q6,=20bug=20au=20niveau=20de=20la=20r?=
 =?UTF-8?q?eduction=20de=20bubblecursor?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 TP1/BubbleCursor.py                         |  38 ++++++++
 TP1/BubbleWidget.py                         |  33 +++++++
 TP1/MainBubble.py                           |  19 ++++
 TP1/README.md                               |   0
 TP1/Target.py                               |  22 +++++
 TP1/__pycache__/BubbleCursor.cpython-39.pyc | Bin 0 -> 1374 bytes
 TP1/__pycache__/BubbleWidget.cpython-39.pyc | Bin 0 -> 1630 bytes
 TP1/__pycache__/Target.cpython-39.pyc       | Bin 0 -> 930 bytes
 TP1/src_tp_bubble.csv                       | 100 ++++++++++++++++++++
 9 files changed, 212 insertions(+)
 create mode 100644 TP1/BubbleCursor.py
 create mode 100644 TP1/BubbleWidget.py
 create mode 100644 TP1/MainBubble.py
 create mode 100644 TP1/README.md
 create mode 100644 TP1/Target.py
 create mode 100644 TP1/__pycache__/BubbleCursor.cpython-39.pyc
 create mode 100644 TP1/__pycache__/BubbleWidget.cpython-39.pyc
 create mode 100644 TP1/__pycache__/Target.cpython-39.pyc
 create mode 100644 TP1/src_tp_bubble.csv

diff --git a/TP1/BubbleCursor.py b/TP1/BubbleCursor.py
new file mode 100644
index 0000000..828aa6e
--- /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 0000000..476d98d
--- /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 0000000..f70217a
--- /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 0000000..e69de29
diff --git a/TP1/Target.py b/TP1/Target.py
new file mode 100644
index 0000000..78cf43c
--- /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
GIT binary patch
literal 1374
zcmZux%}x|S5bo~z*<p7P5fs#Di19K9*+A42Q3MQnkVse)oWx9q?FMF@-C4S4R5rs2
z-a|P020lxlO!UGd=*g;{U1ibURCQHN_0RWJ^+x04RRZJ3*U#doMaXw_E)Iy1We{~2
z6epY}q(cKr$vWYTTPK8D$1Gsn-Xgwp4mrf9+TC1DlT^0Qy*L;+%OL6@C_w_sNx+1~
z=`juLa=XCcHg`@);BuE&V6JeFkHPHmDjZSM^_6^QClRZ;RH@X?o)n_n!i|RmZIo3I
zbq^G$1qn+{IRl#&7_m43ZF2(KS{sr==J_Hh-_i7wria>AabM_47Rf!4DP3tLsS+yl
z8GI4Rt{j8pFGSX1`t_{wMhU4JN#2T7Z$D1rUQaY$Ei|?k8!unJc-0uj9>no}r_p@9
z(71?WzIUj-FpRr#7KScts7zI;JNWglk7N%s|G`~>r3UvB7zI5Agl&2T)dCxkw=EER
z7NgD|%jR?%BW6CcDO4F4VH@X2qVH-?iEKsYYF}5m*p2cegW~EMm(j=P3E%|Wcw_0I
z!VCCJ)?m_=UKDpTAq_*N8ppU};%F)x6rpw6zczx;B($*gh67K)WCLy+3{yf<U^$_S
zu&9~oqay=xjl7#XvI}zR6!sZCatf!g-V-@jIPe|fAv>4@$c&Sm$|g2Nn}zP66|@z1
zcbk5tgoTJCRzo|xNg8FQ?D{H?RTgzyqM0^Le`qgDw?raZneQ6-fzwGpi0yKE8`L^+
zcWtmnyJb&7PY)uODY9|xBpj-4fFgq~@K}{rsYh*!R)2DYGh8v!4@lo1${vFQAc3|v
znT5A7g&qZumfj4!<|%T-G6s~=Hc)vR@{VcwHYQ;89tezYPks9@G1`iDl&QRL8PxJ7
z<OElSxK>3slj0IOIRiO!AcOMXr~Nx4P=>3A+-~?|_&T~#M}(oShG8e=d4hI53=i@s
zDZfZ;Sc$C3E2ySX-9m*2UbqClSc&~7ks}oI+&rMwt9Z6IVd5LUrE9MbH?v3co7s9E
Xm)m3Z|F+WJQhBQ<_(!7fDs}c7Fo`B}

literal 0
HcmV?d00001

diff --git a/TP1/__pycache__/BubbleWidget.cpython-39.pyc b/TP1/__pycache__/BubbleWidget.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..3e9ebd96cf92dcab43c8065bb5482a9f7eccc59e
GIT binary patch
literal 1630
zcmZ8hUvC^W5VzOfKbKt67O5eq5mZ7#IwW!g0Z$bI3M!RIl&C=!tD@EB?6g~U_qMh-
zC8xco3+fZ%BXGxCJ_iyX!mm8_EAYgO_fEaVE04!xd&j@u%sAcJ+91&W{QD2N%L(}h
zC+iJt<V)!Kdk}&Mnv)nuFQ<hUdlYq+vx3Lm={)xfKlYvO=Rpy~0VNNJ2t;^AL@4=;
z#i5{&$RK(Re<Vi(YNM0mG%Jl%pob@qGx1a!P=nJ{wOaq{`s^&1_iLrcYJ|tu8(U8F
zr=Um@Q$b?y6*;GZ3hye4nP7rnk(di#1Tgv{6cLQUE5b<}!c}^9>7n&KqHDiL-Gh!^
zoCiZ@WKI`^lBc90iPw-h!<pd?dG5_9*nEL2fj~VJ1Uz_0r-R7)x~`<MQIce3W|G8)
z#zE9}Gasj-#jBMMu52)JXycxSJ?1nkWZXN?ls1Rs3kmFSE%WnhYI{jC%2TbA<eL2Z
z)$j)`l^*8xDAm=oEYGS+4i688k3JbbeE8kraAo@_%bpd()8m6-OKl5$zq(WrILEI0
zAPC){0gY%M<m7f|>k31MtZ;ewKK`HqVIX6KC)jV^?@y-G(7D&p1)X}0_YL{!-jo^E
zuo)HnXJ73ZZv2KpKJj0@cgW0p!lr!cPXnMen1?26c;h$0j4dc7FZLco=5hFDjFR%^
z0nz2h5Cr^wgziZ9k0!UY8YQMm&RhcRkMxBlKwenNmw8so*BDg@KOa}Jv<#O6B~t-G
zVmVrhw6Y9xQ}tk@4N{=96bg%C5GrIS4&l&wmP@sRGp5EbE&avPO9)Ulk?ICmTX7RL
zEH+e@>}~_U$nGwk>~`2)ONS9=->RW!?2h2iK|z9NK!|}{n<24~gFx-}6o{R(#&cxt
zfR(Ri%Y3Zgg3}e&-M1IAG<OkN{@3-uw|=D%F}iJG`)-@s1jB$k)Yg}H$cAnO*b3T2
z{vTYs@y5X}oYwBG0mKpD?$gQJ9n5d`b|B+Dup%7f4?$T$22d`au>2Z2=L@oc_Xx_-
z$8uc3#IO|OT1%{(F4RE13yThy<pnIOJ2>A1VS~C7sgVQE;Z=8Wp&LuP-Tm!*utf(T
z2*BH+lRF)7-M#P@z#~wmg@i|7BT0&}sB_f&N%Epj^LEA6qDvX|KKlOvgxy-!`$*<_
zlC0fn3%9r=!%JW#YFEp&A3+NhS_hH34TIf0zC1CX?Vp$jb>;$XZ>%isOQ022hD&t!
c9J$kL&Kwo!%trUx%YT6nr3)}7wEMjO0F8Ef!T<mO

literal 0
HcmV?d00001

diff --git a/TP1/__pycache__/Target.cpython-39.pyc b/TP1/__pycache__/Target.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..23ca47c2f5451c35bafb6733925f0380401c87fa
GIT binary patch
literal 930
zcmY*Y&2AGh5VpO)NwzIQ9FUL@;=~^4st8UXgs7nO(5O+u#TRRd-DE502k)*R(canv
zZvj2>6ugJ8ocao!nDHhkcs1Yr?Cgx^vp3({>k?R_U*FX?M#yh;c9#dv8<6rLfFzP?
zGNYVQazZ4N-Zhcl72{0$Ly`u!kV8^x!@==FFU%O--31NWV$Z=)gi}d4Q=X((l>49=
z=m4|_I+VT)t_hE1C?n9ZjG;xxhNIj}RK<gdQEJXTqa^n~=~|8bomOaLw_}j<F+f8b
zB1ppkY2yJhi4o`x=t}~%S^s?+So+n{mG#SFt!!K^hDxh(WqZ?NGSwiJlBo}`mA)|8
z!~_T-z)xb3%0Dl&kEJqYrt5KDE~kYqmP?hL9c9C3+3D$rvuqoCS`^b+Hab7b+K~>I
zD;o<@%!^8h7)q7yXlS^3)(4xsZO#}c+%B|n8*X9=Mnf)%x!2GiFySS;fg_tg0?RW`
zHZkADl8qOj2X+WK5lAfQ19Bg$bpG>V^lp3#m%(v%i;dH+i9qqVRMlHkms8u@QU^D|
z;4n7%M<Il4SE`G=))m;iCr$q4od%+SI7ccD;+RdD>EOrFGB4(pGLGUFdKeE}`~b`{
z0U$utJ_<|dI@!{SpZ4ME0J-ygri8FvA!Z9%YqS#~KG(T!-x!?6+(E#iW*-47o4W{j
zAUl9tF!+a{xYLTMdsrN~ct7=Q?|e0=UK|dple%cjWA;uJSJX`tziM~&nqocNO2YmE
D)DFiR

literal 0
HcmV?d00001

diff --git a/TP1/src_tp_bubble.csv b/TP1/src_tp_bubble.csv
new file mode 100644
index 0000000..48c3099
--- /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
-- 
GitLab