From 8d7a982e50a9a41223d67d482382c36fc50c2a1f Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Sun, 29 Jan 2023 21:39:24 +0800 Subject: [PATCH] [fix] fix add floor alignment and add some new icons. - try setting center alignment for add floor popup operator. it is not center alignment now because blender's impl but it is better than previous layout. - add some components icon for more directly visual. --- .gitattributes | 2 ++ ballance_blender_plugin/OBJS_add_floors.py | 6 +++-- .../UTILS_icons_manager.py | 23 ++++++++++++++-- ballance_blender_plugin/__init__.py | 25 ++++++++++++++---- .../icons/element/P_Box.png | Bin 0 -> 984 bytes .../icons/element/P_Extra_Life.png | Bin 0 -> 1168 bytes .../icons/element/P_Extra_Point.png | Bin 0 -> 1358 bytes .../icons/element/P_Modul_01.png | Bin 0 -> 1099 bytes .../icons/element/P_Modul_03.png | Bin 0 -> 471 bytes .../icons/element/P_Modul_08.png | Bin 0 -> 1104 bytes .../icons/element/P_Modul_17.png | Bin 0 -> 494 bytes .../icons/element/P_Modul_18.png | Bin 0 -> 360 bytes .../icons/element/P_Modul_25.png | Bin 0 -> 444 bytes .../icons/element/P_Modul_26.png | Bin 0 -> 912 bytes .../icons/element/P_Modul_29.png | Bin 0 -> 904 bytes .../icons/element/P_Modul_30.png | Bin 0 -> 807 bytes .../icons/element/P_Modul_34.png | Bin 0 -> 652 bytes .../icons/element/P_Modul_37.png | Bin 0 -> 695 bytes 18 files changed, 47 insertions(+), 9 deletions(-) create mode 100644 ballance_blender_plugin/icons/element/P_Box.png create mode 100644 ballance_blender_plugin/icons/element/P_Extra_Life.png create mode 100644 ballance_blender_plugin/icons/element/P_Extra_Point.png create mode 100644 ballance_blender_plugin/icons/element/P_Modul_01.png create mode 100644 ballance_blender_plugin/icons/element/P_Modul_03.png create mode 100644 ballance_blender_plugin/icons/element/P_Modul_08.png create mode 100644 ballance_blender_plugin/icons/element/P_Modul_17.png create mode 100644 ballance_blender_plugin/icons/element/P_Modul_18.png create mode 100644 ballance_blender_plugin/icons/element/P_Modul_25.png create mode 100644 ballance_blender_plugin/icons/element/P_Modul_26.png create mode 100644 ballance_blender_plugin/icons/element/P_Modul_29.png create mode 100644 ballance_blender_plugin/icons/element/P_Modul_30.png create mode 100644 ballance_blender_plugin/icons/element/P_Modul_34.png create mode 100644 ballance_blender_plugin/icons/element/P_Modul_37.png diff --git a/.gitattributes b/.gitattributes index 38a628f..78f607a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,5 @@ +# all png are binary +*.png binary # our generated mesh should be save as binary *.bin binary # json is data and not good for human reading(althought I edit it on my own hand.) diff --git a/ballance_blender_plugin/OBJS_add_floors.py b/ballance_blender_plugin/OBJS_add_floors.py index 5f348ff..fe0bc03 100644 --- a/ballance_blender_plugin/OBJS_add_floors.py +++ b/ballance_blender_plugin/OBJS_add_floors.py @@ -174,7 +174,8 @@ class BALLANCE_OT_add_floors(bpy.types.Operator): col.prop(self, "expand_length_2") col.label(text="Unit size: " + floor_prototype['UnitSize']) col.label(text="Expand mode: " + floor_prototype['ExpandType']) - grids = col.grid_flow(row_major=True, columns=3) + grids = col.grid_flow(row_major=True, columns=3, even_columns=True, even_rows=True, align=True) + grids.alignment = 'CENTER' grids.separator() grids.label(text=UTILS_constants.floor_expandDirectionMap[floor_prototype['InitColumnDirection']][floor_prototype['ExpandType']][0]) grids.separator() @@ -193,7 +194,8 @@ class BALLANCE_OT_add_floors(bpy.types.Operator): col.separator() col.label(text="Sides") - grids = col.grid_flow(row_major=True, columns=3) + grids = col.grid_flow(row_major=True, columns=3, even_columns=True, even_rows=True, align=True) + grids.alignment = 'CENTER' grids.separator() grids.prop(self, "use_2d_top") grids.separator() diff --git a/ballance_blender_plugin/UTILS_icons_manager.py b/ballance_blender_plugin/UTILS_icons_manager.py index fc43646..7531762 100644 --- a/ballance_blender_plugin/UTILS_icons_manager.py +++ b/ballance_blender_plugin/UTILS_icons_manager.py @@ -12,23 +12,42 @@ floor_icons = None # a map. key is block name, value is loaded icon id floor_icons_map: dict = {} +element_icons = None +element_icons_map: dict = {} + def register_icons(): global floor_icons, floor_icons_map + global element_icons, element_icons_map icon_path = os.path.join(os.path.dirname(__file__), "icons") + floor_icons = bpy.utils.previews.new() for key, value in UTILS_constants.floor_blockDict.items(): - blockIconName = "Ballance_FloorIcon_" + key + blockIconName = "BlcBldPlg_FloorIcon_" + key floor_icons.load(blockIconName, os.path.join(icon_path, "floor", value["BindingDisplayTexture"]), 'IMAGE') floor_icons_map[key] = floor_icons[blockIconName].icon_id + element_icons = bpy.utils.previews.new() + for elename in UTILS_constants.bmfile_componentList: + blockIconName = "BlcBldPlg_ElementIcon_" + elename + element_icons.load(blockIconName, os.path.join(icon_path, "element", elename + '.png'), 'IMAGE') + element_icons_map[elename] = element_icons[blockIconName].icon_id + def unregister_icons(): global floor_icons, floor_icons_map + global element_icons, element_icons_map bpy.utils.previews.remove(floor_icons) floor_icons_map.clear() + bpy.utils.previews.remove(element_icons) + element_icons_map.clear() def get_floor_icon(floor_blk_name: str): global floor_icons_map + # default return 0 + return floor_icons_map.get(floor_blk_name, 0) - return floor_icons_map[floor_blk_name] +def get_element_icon(element_name: str): + global element_icons_map + # default return 0 + return element_icons_map.get(element_name, 0) diff --git a/ballance_blender_plugin/__init__.py b/ballance_blender_plugin/__init__.py index bc88e55..fba29e4 100644 --- a/ballance_blender_plugin/__init__.py +++ b/ballance_blender_plugin/__init__.py @@ -87,7 +87,7 @@ class BALLANCE_MT_ThreeDViewerMenu(bpy.types.Menu): layout.operator(MODS_flatten_uv.BALLANCE_OT_flatten_uv.bl_idname) class BALLANCE_MT_AddFloorMenu(bpy.types.Menu): - """Add Ballance floor""" + """Add Ballance Floor""" bl_idname = "BALLANCE_MT_AddFloorMenu" bl_label = "Floors" @@ -110,7 +110,7 @@ class BALLANCE_MT_AddFloorMenu(bpy.types.Menu): cop.floor_type = item class BALLANCE_MT_AddRailMenu(bpy.types.Menu): - """Add Ballance rail""" + """Add Ballance Rail""" bl_idname = "BALLANCE_MT_AddRailMenu" bl_label = "Rails" @@ -119,6 +119,19 @@ class BALLANCE_MT_AddRailMenu(bpy.types.Menu): layout.operator(OBJS_add_rails.BALLANCE_OT_add_rails.bl_idname, text="Rail Section") layout.operator(OBJS_add_rails.BALLANCE_OT_add_tunnels.bl_idname, text="Tunnel Section") +class BALLANCE_MT_AddElementsMenu(bpy.types.Menu): + """Add Ballance Elements""" + bl_idname = "BALLANCE_MT_AddElementsMenu" + bl_label = "Elements" + + def draw(self, context): + layout = self.layout + + for item in UTILS_constants.bmfile_componentList: + cop = layout.operator( + OBJS_add_components.BALLANCE_OT_add_components.bl_idname, + text=item, icon_value = UTILS_icons_manager.get_element_icon(item)) + cop.elements_type = item # ============================================= # blender call system @@ -141,6 +154,7 @@ classes = ( OBJS_add_floors.BALLANCE_OT_add_floors, BALLANCE_MT_AddFloorMenu, BALLANCE_MT_AddRailMenu, + BALLANCE_MT_AddElementsMenu, NAMES_rename_system.BALLANCE_OT_rename_by_group, NAMES_rename_system.BALLANCE_OT_convert_name, @@ -178,9 +192,10 @@ def menu_func_ballance_add(self, context): layout.label(text="Ballance") layout.menu(BALLANCE_MT_AddFloorMenu.bl_idname, icon='MESH_CUBE') layout.menu(BALLANCE_MT_AddRailMenu.bl_idname, icon='MESH_CIRCLE') - layout.operator_menu_enum( - OBJS_add_components.BALLANCE_OT_add_components.bl_idname, - "elements_type", icon='MESH_ICOSPHERE', text="Elements") + layout.menu(BALLANCE_MT_AddElementsMenu.bl_idname, icon='MESH_ICOSPHERE') + #layout.operator_menu_enum( + # OBJS_add_components.BALLANCE_OT_add_components.bl_idname, + # "elements_type", icon='MESH_ICOSPHERE', text="Elements") def menu_func_ballance_rename(self, context): layout = self.layout layout.separator() diff --git a/ballance_blender_plugin/icons/element/P_Box.png b/ballance_blender_plugin/icons/element/P_Box.png new file mode 100644 index 0000000000000000000000000000000000000000..2230deae7d9a8e7372de0f74495a61199057d6e1 GIT binary patch literal 984 zcmV;}11J26P)n3J z|G;@RB_2F@K+2Pv+;1^Ma=$l8^5Dg_=0!^G&i?*7dos+P*?W$0R_&MBzu)?P*7~ir z*KdITY`V9%HzJs&=hru~{E)P)((_wKQ3=BK^73N5yu8HI(^Eh>f`Wn&6BC2b&`^g? zr~7G;)gB%m5E~ndfq?;BTwDYM!e}%iFE0=0=jTXHPIgj6FDqSNU*qKD1kKIONK8!p zasY}K78YV+VuBfW`F8>Em*L@I9335@v9S>;DJfqDQCeDxf`S5!jg8^p;K0qV8vx%} ztyUZ!9-^V40cmMz{|r%9R)(CM91;2c{{AO_p8&XGWMl*mhXZwWb;!ub@Ed}WXJ=<) zdU_grdwU-Jcm&`|IbGG&)yT@q(hR{f&&|yh;=8-Miu(=k3*zId$;nC4mQ__%Fc=IT zQ|QSvi;d6t__$)^f7>6fHdI2Ko14Sq<0C37E5RP#+1c@$jpE{B@Zp&&rTx7Fp8#CE zxVQ-ELj|+hjF6BJtgWqigkaiP?G*QxcFh3Xu)MsC*Vk9Dun4iVwB!b1GMQAJ`A2e9 z8IU)vtgMJk5Q4{Hv)RNex!`zQ+uPfk3RV*UJ+H5?-C~O^7HdS@vW^b zP2yav8GxG@C1(e_LmDVxw`h%ACRO|n_zER5GE#`sIK=!lzcRo!W1lnf+uK{z*4838 zI2fa&qnbH1XMo~tHM!u9kB>1lG=$8|Ow`oW1QwvEs7Qz}EG%GibJHbudU}e%!9k>_ zr;GWa#Z+g2!i;`?eqMCKM>{(^Lw|q2n4tCb^{N?E0q_>X-k+J7!N$ghqH|v9`uh5i znwl!cxf=5cz{ok%r>3S<_4(D+6?%Jnk(87qE;hbQFSnAXg{<_Fk`m0$&Z-iZeK?&? z^z`%~K0Y2zO-+gn)K<&@#aVPLIB#iJ@_uu3gYNEb#Kpy-rKLp?!XtoOaCW<0aq{^} zE#KeW-Jz?i3(?WhXl-rvxaAW7Z!sJ$jC^%H?E|DYY;Ie7?~v-Y&%7#_LlAddP%$|K+;Yf8#g%qzY^^SPe!ogr)7^?) z)&_A1-n@h*X z$45RaJWsc`w-u7t>s8LM_>DZ^eFsX80DYk)IU3B#$;tMDf`X?Wk4M_r*pNm?N5$ge zB0i+)zx3sjhTzotZ=ndnuhW;Z1X=rHZFGW!f;OQUQ+S*JT zr%nQHZEcmHBjfb+)IByf_V+~qr1J9eAO`-1i(RFqrO)w<>FwnC`O`U(Qj-JYJF-VcV@si~=}*t<|>ZEZ~;My&u*YPDKlDqXkubQK)(d~9Ewr{z}>^>E4$sE(bLlt7Tq`I1}LI#2KD&(_)9$=bPw1O zwNC~H2BN0rbpZ_z56i{H#ZAy-qb^IJSiE<;-4DCFyKimxp}-p(8-2;i$sh3Uv9{x_ zt*v4fnd|P(sQl{cs*Lo!kNP0ABfz;hmX?-`%3qsrVPQceCMG(lhyW}oo$-8Wc2!hV zh|0=JvtnXpWktxc90x&(NAN2O#aRH1VP(zD%>r)J`1A7eL`O%5VOdpGDeDJ_T6&;* zZ*MQG*GAKno0}^DT6A`HYQz;vk zMq^@P?$A3|QD|1i;c&1NYeAzKL<&vfO#V1IIkB>L-{vYTEEMp7imdq=9nq`jj(d7~ zx&u}1du6%BRaI5xqb-=&qnY4P%Kp5wv-1_faceU{LqmfKPk&2IP5m))9?LX@)Kt`j!`o+Gp2Ab+Occ( z;NXB4lb;}bbkV&aY7>I-7Tgn_L6K#BeO+d?TwY#2SGHNzSmEe3jP^bN_v2dEhFzb( zdYRcu;BuOTXAefV6<$D*DGHtnvPL8R4!k=e4|v~#>_#r9Q9Yo8jZnt8_yzPEh_eK* i=lviKHrg_JJ^vq&un@(+jAd2;0000m`#*Fh`# znLPwH!-p^l7QplH5iEvt!{&qdUJ}O5qrM$Z41E{zy$hy6^sv!J1~;(4LKp|9l%4c6 zexCr7;TU)lRQsi{8dfm&>+;jE)=T`Zhim97{3A{1MDQ9cN>5Prp5BE)-`ECMXPuDt z`LGU}Vw?BNkVr{~!B^@2ppA{RH^RZ77W4dJk7)UVRyWVrB0w-5%qOp9AkgH|&G$@NlLObdG_oVB9_gQ{Yp$K5Q_Z z+8i(o2BsIHZ5XT!oJVc6xW;F22DHJi@C_K=e-#?;22Z>)Y32JQcpq+t(Xc8kZu}Pu zzaNCssrWV=--9Qh2~14OK!;7{yw2~udzK{N$4;1=5~{y#uoOJKC%F!aep9Hg&v!L9 z7odA@LqpNQ=reyTgb!dUybTj0+L}ZAjzl6uXnV{yw5tWx-VWyf!^1|`cDA$>+S=NB zWKUC*cAgdb#__G@6vAYtgH{yUHT4X=RrO>gByY3L;H6@kO$0rAp zpiR(w(#qm|Bc-T1y?#!53~d8pMUZxCd4ImKvD1?a-$~57mbN!dd%_3G=kU82qwW>< z?Cs{qJ+N1mr6!D|?PD;!G{N9hztM7ks_g>W48Qe3coS8r1hf1`J^gP7reQ2}fT8jz z)Po_XBh7|Sz=%jxU7=L^4g)jdTDTF62;UPP(ltB5P(LffETzygX_$nR)Z6Yhcoo!y z={UA|9eswg&S!W|h999TtP@Q{nJ*$H>G2!Do6L0V8^Q5D$xOl8eOEB+A=KWChn7j^ zjp`ln3yf#twwT~q-tSo7b#5|-$qH~h%!41G9o~eWz#DT7d<*O0N>F%heThZU*lTAF9z(O#?ooEah?R>7N5PxeI*z zO#^Sbm(kSf)U(U9txlH#S&gUI;HXb7+ek}leO?-`iPAGJZL1- z1l2U4eeEBaUYOrzNS|8C2^a9)nI0F+rxQmV(DBs-Q1zN&tOHrB0gQ7W9`oT$SOz-k z3@E-4=r3PW)w_mIvf2xa&4k_Ht#}1I4O_tUdDv=}dNnlxd`GSVUqZ9o|M&C$1gIS%)=T}} QfdBvi07*qoM6N<$f-bg{_5c6? literal 0 HcmV?d00001 diff --git a/ballance_blender_plugin/icons/element/P_Modul_01.png b/ballance_blender_plugin/icons/element/P_Modul_01.png new file mode 100644 index 0000000000000000000000000000000000000000..ec76cd33edc143778e1c6ac1d5429f035083ce98 GIT binary patch literal 1099 zcmV-R1ho5!P)bd;}0Gegzeq7}Myc3ARybQ)}$9+ip$# z2~8UJjr(r<158Zgru_vCZPZw3Yix<6MiXfQ#4qqGU;zbs&Xh;QK8ievt4?w=k9jlq zo_prZore(r+cg;|7K;|x?OJXyrwL}hJkMBbq1Jmix`Xitu!neNA4LBG{bShlg*9z> zey1qP4ElSR^9<(3^GDbUY_0D2aPTOf&#$CXsa>@6$;nCa?CdOw@%u18#*159ThdNX zPcc*sF$ntC_>P8^MXfBr9S(;e5Nv~~P$&$*p{WW8UpAX< z2Ve#BM1Oz3a5|m8ppCD3030=M8VXg3Z zJi=nJ9AIvsZU8{d7(u(;p6c!G70if^GntGF<4z3#MzRCpnUl$+z&Zio1+s{_-|7ZX z3h)^jB$){uiFiCtCMYy51{`3=jjdA17Fi>EWD&_6>jm%w4q~mXt%c_1W(rCmL+Ze0 zH2zguoMeYA;pj>F$sQ7+n1x;d830&ACKDQiK39N_2H~F(au1 zR5=5)G#LI6OEz%)Ok{^FaW0Nu7VpDIf^|Um7I5uPWD;p+9w0xlIHBb`&xM!3wX} zOIB`S?Q{6}4tuHRHk^j2CRpd zI1xUI7wZ*;8R4CJh05y_HgnNYSygyo_PB^9c-d5&b8)`bGq-4JYD)C=^?e`%<&0ER z1W;|^B`~#O)qF2CpkATs^;vUO11Hoi!Uo2ct|~-mv)MT2h56N^q!Dl!N3UTxDgaQe zV`F13Y{^8m2-Hb1D642gS_ObWARuTr*(w0wjEeE`arIkH69=!;rKP2Y0j&TqIy%bY zkiz+tS7nvv9U2;PHHxVU0Juy9N-Kju(JC?}VfyiTRaGPPZXb_fJB7u{#2$^+@WvV$ zcnjK#pgl=2FqYyQYw`>8s!iPj{QH@}m+)1WY0fK^{g9s9@D=ZW+BKVG`!`LB69HB% RMN|L)002ovPDHLkV1hxI@$Uct literal 0 HcmV?d00001 diff --git a/ballance_blender_plugin/icons/element/P_Modul_03.png b/ballance_blender_plugin/icons/element/P_Modul_03.png new file mode 100644 index 0000000000000000000000000000000000000000..4c856a7aa2bbcd89ce9677563858d4153ae66493 GIT binary patch literal 471 zcmV;|0Vw{7P)4jrI+9my?}c!!2xvX zk_))Q1F#2I1~w!H|C=zxP^O(}97kh+GHKep{(1fX@%}Gkr}*y`;Nv)=26uF}ieg;Q z=TDsTdmF`)1j@eev!-cw?nsh^1wrsi1g>ll*vO=~yeNvDJMuhdX_~&-xEwh>TZwh^ z&MoM=E^FIX)q;vzaIKrv1SebY5QZVcS&2)C&?M;z`==_v!IsR(oe@n0jEsl~ms6RA zOVW8cqj(ukx8w;Io}m6hx$Bl=FII@f?4My1Y1B(<`z z;t#6GJAMCr&qmb|=8P~KiJ?8S!W_|=hS-Q6v6f>9K`XxRi!OMc$LKv9hJi&zZ5tbr%JWTiA?L{N(10#`v_Pd5-5e4(jq=KL9PitnO*x2d`xB*U&HD@gO@9CY N002ovPDHLkV1mvN(b@n2 literal 0 HcmV?d00001 diff --git a/ballance_blender_plugin/icons/element/P_Modul_08.png b/ballance_blender_plugin/icons/element/P_Modul_08.png new file mode 100644 index 0000000000000000000000000000000000000000..90524911fa30d3770f376fb53232f127804fd927 GIT binary patch literal 1104 zcmV-W1h4yvP)|2*ytaKZoCN*L&%HW&91u8ip`5alkf+EI$-`tX4BNsF-4snN9V`e=NWdF zt)0<#Vs@{5;qcCT=A7sIJ>Tzho^wRbpK}G$tbl2nHd@*C_I4NV4{2}Gj5Na}4+oet z5D0XQkB>(d7Z=TNIDGHm;Gj0y3|qRH?eFiG?(FPbo1UJ|=8k&%&$CnqPLKNA8f zwasR0C@Lx{k4B?XTwE-9d3pB>3kyBzUTDI25OA~FAGfx)Ol*kF&(E8D-=hEZXGP$X z)z#I5fq?;Yd3iY!i^cBxe7>sFz|)oktn$TBDD*Cg=fDPWI2?Z&hS6J6Qu4=BCjj_! zNd5lW+S-+kjSZ=(sR`r%4*=giOZs#v@LDh!d}m={;eylYj8#@v{?6)e(?U<30ISc( z>+35kE0^~6_N1<^E{Oc!13Y~exc;9|0Rplq#cDsLL?j2Si zwi4qB0tA&vByx>5$L|-;2;yekbuzw~95C_TpPilk9pI-X-s3S7DUiW)i51mvZf<%Y zaffo6_g^CPXVCW^V_xxky+&14Rm|mb{X(B6pXKKX0Uf;^V6(Qe9o`h4?Mz`z@m<%K>CuU^QxmOifKmZ*OnLKjg7flTU&pE z#3bdmWNB$Bi#o5{ZjP0ION*q10ILzsb741#Ry6|0-&i62{r%F|*!VJ4Pw-!wo15?3 z?e=c~o=FuvsRE^?rL*{Hs0FAHkEabbYIlm`9A~_)&W2Q1qB7Z z_V#u?PEEXj6kCa?GUR~x{eBr99=4GmH~IEr&8w-BNP1NwSQ|y=)7{<1O)4rXhWYNy%*_1L3Yk;yY5+J0@-a!+LAGB;`s~@+*?3$4 z9>rH8`Y4gw+FEI8X%UjMi>{j}7CViIrOP4!)dab5baeDKMdx|cFn9~w^4oC7hIq@~gJlfaS7wYWnJh74w zDUCsmLfRMXkY#p5XnlSC9u|E?8SmgmeA#NSlq^UT6cY9HU!~2_e#P&ARq*q1s=z-u WuN>7i4rYP?0000c>#}0DT9@m^=g$ zOCEr^T?h}-rRqYbc4H|Uknkl?vZN*S&T3Eylv1f|wsf-NJD<-#{~Z9{H~~(86W|0m zfe3-sYITA3fOd`sWQ|7SUl{Gpjn13JVqyEf|1q1*KCvz5^SO=l6)Gayz6-m<{xM>& zINn+5Z@C3Zj++lBlS#4FYOVLubsY+Yf}cnvo_8QP^*k@@I1Y1_N+n1plO7H`@z@{; zDwtnvHk)f#wOXazPCA_~3RvMap7_Z$O)EYU2l0jD@fgTDovlNyLj{2Wgm$~l`uKIxTo^-r z)Q2$iG0mCo=ui-}xxUQQW zjYd%oxcKpMhz4r48s%mh2+`e!uK){SuYkTu!3VyAw>_`m;M{aaS7;X6Eaj?;hvlz@v>p!6ow!F|J!@)6c?EO;DS1jNId(I-kzQ#lD>1aR^$e-zxn;^>*~j= z!`Bi%doe0lLjkzB_(xiuO2g%u`v<_K1mx*Mw+?OP4P3l)t-^c;MP2 z#!lv^tn=+^UvX>_xaGvObytBEL;hr*Yb?9#|L;>?!RnG@%)P3g@s`sq{wvR2JUI@0 zJ;cMtc|fLFr|q=R1gV%lbv3RHv%Gtb9x-|7w)tTO2TuiuKqz0$&re4`etmuYh)R}- y>4l~jLIDBuC*|BY3t5cn}+b!{Zzl)+MaOvk{ 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 literal 0 HcmV?d00001 diff --git a/ballance_blender_plugin/icons/element/P_Modul_34.png b/ballance_blender_plugin/icons/element/P_Modul_34.png new file mode 100644 index 0000000000000000000000000000000000000000..b696f7d681be6271c9c948d8ab1dd56a2f6879e4 GIT binary patch literal 652 zcmV;70(1R|P)eto`~8g2`CDJ2o@<4uoH`Q)0xh~LJ+L9 z6ohRp_7_;#DHe)_2nlwA#e#JTVS_e;q!0@=ieHEy;Ld%x0ZH`Dyd|XZ!tjc@bI*DA z&dj+3{AZIc;UAAjNRkBh{la`6H1hnwV%V>(Q$~t;u72PZZ8n?1X0xGQucO=T{z1ZOwIY#7fc#kI6yj>VgwQeE z@Aqi8+X#ola5x-i1avwblF1~7!y&fYE%$a2B0y0ajRtzX9;iG9gW)$&I-LfUr&6hK zgOj5$0a{e6)s)nxQYi(DzPsHHg+f6HTr&Y$SS%K?*=&%>WFX5ja=Dx^_?rmO;^lG) zsy*B3n!w*gAQFkd>2xBS&B9`_AQp>hBB5yyghC;Bywn zK*0ln0DL~5au*B+0|k%HeYILeG#bTxJ{RI3lmWe7k6h;P5AwO zn9XKx5<(fET2Ceucsw3u{LPqhDtm$%>A^2GCK87jJu@--Bq&Dj8Sqy&?$o6GsvNTb muYn%vr7U9fx@M;OvVH-pPukc$iSIA~00008x6STMWlwcr+1;5p^ZU*F znl}Ldd$TACkR*vd-{Es?vQjp1{WFWj@_}%)1jNB$km`23rg3n)-QaLIsz_juK%Quk z2t1d|nMNR+%|aj$_^tq0O+#W_ctv2P0c{xGjz*(b?RHz&g=*C*bUGdQc7LzRdAGK} zAb`+Jp5Z2e#RJ;Fid{vt%Bp>FX!j$3k1Agc$>)#aNZR|0Gui^ zY92sF)JNG#&QOoFS;iE%L!nf$R8qxW?Cj7tfgjG+V&DO=a>A7c{y2<`Jck@?=7=AEo?Z~&WFL46H{v`#1& zm@I866KDZUHvs|G>-BsxnUv!3_yRsTA@$?L8=85hfm;;ZH#(enG;oT=Bo&l~1W@2P dK4&a~zX7rF2NtuFgT(*<002ovPDHLkV1i)0K*j(7 literal 0 HcmV?d00001