From 27d1cd63de2e3f22858fcb8ee6b00b1c0387267a Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 18 Dec 2024 12:44:43 +0300 Subject: [PATCH] =?UTF-8?q?dev:=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA?= =?UTF-8?q?,=20=D1=86=D0=B2=D0=B5=D1=82=D0=BE=D0=B2,=20=D1=82=D0=B5=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D1=8C=20=D0=B8=D1=85=20=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=20=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- params/system_params.json | 2 +- .../__pycache__/mediator.cpython-310.pyc | Bin 1346 -> 1346 bytes .../__pycache__/monitor.cpython-310.pyc | Bin 2591 -> 2557 bytes .../passportFormer.cpython-310.pyc | Bin 4299 -> 4299 bytes src/gui/__pycache__/mainGui.cpython-310.pyc | Bin 4278 -> 3958 bytes src/gui/__pycache__/plotter.cpython-310.pyc | Bin 9580 -> 9617 bytes src/gui/__pycache__/reportGui.cpython-310.pyc | Bin 2965 -> 4907 bytes .../settings_window.cpython-310.pyc | Bin 5558 -> 5558 bytes src/gui/mainGui.py | 10 +-- src/gui/plotter.py | 3 +- src/gui/reportGui.py | 58 +++++++++++++++++- .../base/__pycache__/base.cpython-310.pyc | Bin 20036 -> 19970 bytes 12 files changed, 60 insertions(+), 13 deletions(-) diff --git a/params/system_params.json b/params/system_params.json index 7e69d3c..beb0753 100644 --- a/params/system_params.json +++ b/params/system_params.json @@ -51,7 +51,7 @@ 0.075 ], "time_capture": [ - 1000.0 + 100.0 ], "UML_time_scaler": [ 1000.0 diff --git a/src/controller/__pycache__/mediator.cpython-310.pyc b/src/controller/__pycache__/mediator.cpython-310.pyc index d79c2051dbab1108db779f942ca6bb43d907db66..f080cb28d39c95bef72a854d6d429c8623512b49 100644 GIT binary patch delta 42 xcmX@ab%={MpO=@50SNlblF~P93IP3<3@`uy delta 42 xcmX@ab%={MpO=@50SG>?O-wJ?$or3pk$W-^^G!zS$+3x%Cd%$82|`U41xdv diff --git a/src/controller/__pycache__/monitor.cpython-310.pyc b/src/controller/__pycache__/monitor.cpython-310.pyc index c007b611bdc3c8f1018242ef6f5146515999f920..47083417f637ea3b855feb43429b3c10a9ba84bd 100644 GIT binary patch delta 828 zcmZuvzi-n(6uz_1j?=^tlC%YtQlx^w{89u6F;uBwfCYpQV(~z5b53h?j;-f2bb0?#fr~V&hBa+fj3;9W z7twhI;S$1igvE$+eZX`8k5k~SJmOhiW2NPJUEf3k*9;rFBHJyY1WSEsF5kA13=99q XsQCb*N8+R}KwW@X|{{>h3vl_zgH? zr2U#RR=v$0Ampj{=qy@LpV58PR-5kkn}O-kxJujD8 zHnPjp{1Hw2J+<#0Z1hYnMxq7v6@b$KO}jW_K9|%d??M}fh!B9N5U<_yAUt6}w+1<* zSt?7RgQAq#=(**Kz3J?erYC6??CD^XaaK>s?HCXwA_HAj<1d#$weAci6-^}@$Sh}K z5mJ6FQz2tKr8}=)_!rl$!bYZ^KR#45DYIf+uc{CJ&%?hY!z8=p5=6^D8>Cgm3M!gK z#2VDrq2|?6#QsdbZl#pulumgXN3(Wn$dHh@l=i48~Xg!&fr7$>ZhW_Ijqck8Og zV2HV*Enu82Gq=mLS`N#+>Tjz(a%X$CN2BnM8}=wTEUq*p*C6Vuk7Na1S6|7)LvYdh zEY6uoW10=kdXU@%xD0RuV75@BM);-x&ea_Q#33#Tm)nGNBU_1y#`dOMI1fUTfS2Qm qm{?!U#mG#(YehR4>cI8CA?8<^mvq8eADNCC{zx5%ppM&dd){xE^Q;8` diff --git a/src/controller/__pycache__/passportFormer.cpython-310.pyc b/src/controller/__pycache__/passportFormer.cpython-310.pyc index 4bfe60a8b5eaef714396113509bbf7c704315917..fe91424b079db4d14215dcf83bed2e0166e5a6cb 100644 GIT binary patch delta 119 zcmX@Dcv_J=pO=@50SG3PB~9ekw2NX)VMt-hVajEWV$NlWVqs)(XGmdAVQFDVVM%3a zW{zS7@>x^ZfPA)8W+0y}g)x{xll>*g48Mtmh8q{3;OAj0NX$z~EH07<3Qo=vke)nA Pz>tH3L4ZksSws>5H$)mg delta 140 zcmX@Dcv_J=pO=@50SLb3B~Iklw9RFVV$5ZVVq#=SVMt-hVUA*PXGmdAVQFDVVM%3b zW{zS7@>x^ZfPA)8Mj)Rpg(;Xpll>*gjEO~tjD8yzpWs*FFD=Q;Db`C$EKUUzMNB~H fB4!|Qi>)9rFD0?KNPcp^fC+~H0|%o3i-;ru11TXJ diff --git a/src/gui/__pycache__/mainGui.cpython-310.pyc b/src/gui/__pycache__/mainGui.cpython-310.pyc index fb783bc236d75512b9ed4ccd15071b167062f03e..b3ab3bdcf374efd703bd458da343aa63d6551b98 100644 GIT binary patch delta 562 zcmZ9K&ubGw6vyYy?xxe(>}DI=;tB~=y=*C^tyT|}R{T+lnh;x|w3q3R4Q)!Bl-Y!W zY>}P{y*@;bo1;e&gdV(l7LUQBDEyd833&)W5c8buVhNBR{^T^kH13NU+`>;H%-yDPJ&WJO98BWX!E?BeUk4Q| z;*6YvN4PDQy+yMD=xe6(8J+}J3f^HS*;Prs-EK5@k|q2uJJhl6PCx}u-FbM5pWSVG zGoCMn%cgDY64#9v5uW2l{wKV^C2zK7Q*7)ZSu#aP*&fS)bbu5x9@Cvk5#x~##};L+ z%uab~b@_!BR#pGI2{lI!zVXYibcy_)v(;(r$C0he6zK;BmxccyE2QiiSt1A$%qqgm zu(H``t~Q!+>u6Hx`e94A)lomxePy`5LFLtGxF?iqZXVQ?>Pe+=p>Sv9E@kv%gC_beRAE delta 854 zcmZ`&&1(}u6rVS{n{IZSZERAt#fDZ843<{ZTEtoqiWaH;*4B!|B)bh8(rldFP+B5I z6p|ig@V>d(g9i}`o&+!c4}snU@gxX}N8j7nqcgnU`|X=IGw);ecjjo+@)8My;dpzL zFZs#$){@E@$fs&^B5wDzp}}%igO#n&w6!(>i+G={6AxIJY_sRQ!NXH_T>ezE7kH?X zN8|}%e}i}TgsBD)v)L-k8uFSpJ-FAm;?z75jQCCvxYd$>=R3zRvT3=ay%|XfrnPX074{ zxgFOoIYB4Z)#5s?h$;C@zX@05JN+Zf%2GTBbMj04GUA{3N@9*e0x?9M3-WefN|p@^ z=H;$YM~@%I7%a+j<_zLvvxt^Y<}j?uWAh9=kiX1tupy6oC-*5a4MjomHxOF9%tFB0 zK?6c=V{Hz)4C{5k0;R=XQhk*ckVbDc)NF++NW2^idz!2XO}?ers;#|>x)Iejw(u`2 zykxD2K;!k<#C{63Zy|KAZb6H+`6?4pf?N#aN=GZy-HI(nksm5z3RU;83^B5b^9UV% zx{}{6*!dX;zkJHgVtbeF=iTbMTeZEN@fOHM*_i+W0Tnbbgb^^o zKz!oUJyV!}=EBmB#Ij8{h?oA*$I;ya)*s*JvV~jKg~pJ?q(Qcur#xiJE3%yP(3Xvy zH*fl^L_*6qOQb}GEaW{BQ;_iAJmhL;hN&2kXE|Bn{igccuWGb3+8V1GYtnN&^_nU( z=@b|!IBb>dn{n+tiYSAg)34;g9RnxH&BP1EWwJB5$uW}8Q)5`keI;ukPM)f76a{%v qJ4Pn?sSSXl9Ml)(YkkQU{II+4caQqlSJNH0NK(-0B15w@Z~g))e@YJk delta 262 zcmbQ}{l<$opO=@50SNA`PfVXOkyl+UiZO*Dg(-(AmpO_#mnDiNmoq zn8O~$4x%SU*>f`nGiY+Y1Zno0xY&5(bzMHO1|X+~c>%*h1{a1{%UZS?79edhS&Cni z(Ppv>zormJ4QmREBts2*3acaokY=-)JePkmBkN>C0m;c(LcEh>1bi43Ca)BbW)op# zYGC@h`HaAOM#iemdxTCfG4^b36%Aoyd^!1+^m|6O&8KAem>CyrzA1m6iBWX&N~J1B z?#(L7&5VrVlUJx%@0B<7_g78gwex@z)66|2b_s*wU53=)hSKq$b-!^FoV!U_Pp CSwg4) diff --git a/src/gui/__pycache__/reportGui.cpython-310.pyc b/src/gui/__pycache__/reportGui.cpython-310.pyc index 8aea989be14d402e2ad64c713e27ce9074c69d42..f68774832afb9473f12e5b3ad096e9451bc289f7 100644 GIT binary patch literal 4907 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 delta 1412 zcmZuxTW=dh6yDjpch{GiG?0?gv}w|ALo3<>O1Y_`P*kZxb%I)CA(^#j;%vIkn%QxR zjiU&)uN7De@3BN5DpVw-!hhf|%mYt->rbczoHI^Si1296p8e*W@0&Ac);}-)_;M*N z7CjAq&wh{EA{dos$;xQy;z_DeD=Bomx<|B6G-^}lo<<$!ZuobNdO*pl7P_OYWjiEN zuZhtwN5~JOKThlrW>A9}YbJH5d(W&}RNqGm)C0t(zCs*k%xDl7&?2BNE&T^A(+Z#k zdWd<<-w0q9*Yp_;xS!`$=}Qn%q9*KQN|shwH{~LKOy1scpc)J26`0wVV1#y8+cpH* z)yLYlIW%{Tp)n>z8*01ow&z(xGA4l7Lw!uz`nDyU4VMzC4=rlkH@5Aeu~8V>)TGvZ zUFCXXjc8N@efv{scOxEkGHJE*Z}r)CuEM!E*?M~Cv$Pxf+<;wh+>`WcH$P0jz8>|{ zo{)uz(pxcYGjKB|6q^5Jyr2JV9DdW0X2y~=?qY5MOx;r&4Z#_cb~2$bnWPN_R?yRzwNO{Hs2pa?|EK26G z2_#JpZ@h>L`B{5u{s?$#E7IUB<45sTnb*)e3}z<(#{Pb%Zrw;yu}A4C%B}+DFi!FL z*C;AY;Nt*?IzIsqIn`)^s$h*60~)O!-(p#4aHWkWz~|8%(4GbiS@=mX`d}gd&YsC1 zIKSP(s+3}ANGleslTBposM}?mG_)tgix`H)(zwm~(!@w>-px3Rn{g5gD8HGe$-uiBC&`2}Eb?-G$3I?t15>Of?`7-!eEz_{@P+CN7Qk_h zzYC`BtwCl(ZKLibu(LhCqh2) zwXi4)-Tqgi%_FnB&X@B?)yu2FjebqMb*?6^q?~aZ!lYB1e84K{|CFTrUMHo!gnd9z O4!h`T6%wd1ZTthkj7-J= diff --git a/src/gui/__pycache__/settings_window.cpython-310.pyc b/src/gui/__pycache__/settings_window.cpython-310.pyc index 0edf48f943576e08899460a951aff885019e8c0e..a24e1f0db4ca346b309b3ea2a557d3d089864c68 100644 GIT binary patch delta 112 zcmdm{y-k}hpO=@50SMNYC8c}IZsdEw!pO7vJqrgTqr&7LtWOy=Cf{Q_#Hh1*A^RI9 zMuW|LT)|9?zMCKM9Asil-MoZfh>@{-^LBv^OpFsIX9(Y8ByfX9(Y8 None: + self._clear() param_tree = ParameterTree() - layout = QtWidgets.QVBoxLayout() + layout = self.layout() layout.addWidget(param_tree) - self.setLayout(layout) body= [ self._generate_reg_params(reg_items), @@ -18,9 +18,20 @@ class ReportSettings(QtWidgets.QWidget): ] # Добавляем параметры в дерево params = Parameter.create(name='params', type='group', children=body) + params.sigTreeStateChanged.connect(lambda: self._update_settings(reg_items, curve_items, params)) param_tree.setParameters(params, showTop=False) self.show() + def _clear(self): + main = self.layout() + if self.layout() is not None: + while main.count(): + child = main.takeAt(0) + if child.widget() is not None: + child.widget().deleteLater() + else: + self.setLayout(QtWidgets.QVBoxLayout()) + def _generate_reg_params(self, reg_items: dict) -> dict: res = {'name': 'Sectors', 'type': 'group', 'children': [ @@ -73,4 +84,47 @@ class ReportSettings(QtWidgets.QWidget): {'name': 'Fill color', 'type': 'color', 'value': fill_color}, ] + def _update_settings(self, reg_items: dict, curve_items: dict, params: Parameter): + real_sectors = params.child("Sectors").child("Real sectors") + ideal_sectors = params.child("Sectors").child("Ideal sectors") + real_plots = params.child("Plots").child("Real plots") + ideal_plots = params.child("Plots").child("Ideal plots") + + self._set_sector_settings(reg_items["real"], real_sectors) + self._set_sector_settings(reg_items["ideal"], ideal_sectors) + + self._set_plot_settings(curve_items["real"], real_plots) + for key, item_dict in curve_items["ideal"].items(): + self._set_plot_settings(item_dict, ideal_plots.child(key)) + + def _set_sector_settings(self, sectors: dict, settings: Parameter) -> None: + for key, item in sectors.items(): + sample = settings.child(key) + line_color = sample.child("Line color").value() + line_width = sample.child("Line thickness").value() + visibility = sample.child("Visibility").value() + fill_color = sample.child("Fill color").value() + + pen = pg.mkPen(color=line_color, width=line_width) + brush=pg.mkBrush(fill_color) + for reg in item: + reg.setVisible(visibility) + reg.lines[0].setPen(pen) + reg.lines[1].setPen(pen) + reg.setBrush(brush) + + def _set_plot_settings(self, curves:dict, settings: Parameter) -> None: + for key, item in curves.items(): + sample = settings.child(key) + line_color = sample.child("Line color").value() + line_width = sample.child("Line thickness").value() + visibility = sample.child("Visibility").value() + pen = pg.mkPen(color=line_color, width=line_width) + if type(item) == list: + for curve in item: + curve.setVisible(visibility) + curve.setPen(pen) + else: + item.setVisible(visibility) + item.setPen(pen) \ No newline at end of file diff --git a/src/utils/base/__pycache__/base.cpython-310.pyc b/src/utils/base/__pycache__/base.cpython-310.pyc index 999c743b6e59ba613f759724c3b6725dedeb0395..5e849e10fe6d0e88b220d1b255e9d949c2659ffb 100644 GIT binary patch delta 6719 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 delta 6794 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