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