From 3ec27da85255d9c86e1e0d61a4abf41f0799d6c9 Mon Sep 17 00:00:00 2001 From: Corentin <corentin@blinkink.co.uk> Date: Fri, 6 Aug 2021 13:45:02 +0100 Subject: [PATCH 1/5] =?UTF-8?q?=F0=9F=92=84=20Add=20a=20stylesheet=20examp?= =?UTF-8?q?le?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- layout_tool/__init__.py | 3 +++ layout_tool/assets/stylesheet.css | 0 layout_tool/ui/main.py | 8 ++++++++ 3 files changed, 11 insertions(+) create mode 100644 layout_tool/assets/stylesheet.css diff --git a/layout_tool/__init__.py b/layout_tool/__init__.py index e69de29..2afa335 100644 --- a/layout_tool/__init__.py +++ b/layout_tool/__init__.py @@ -0,0 +1,3 @@ +import os + +here = os.path.dirname(os.path.realpath(__file__)) diff --git a/layout_tool/assets/stylesheet.css b/layout_tool/assets/stylesheet.css new file mode 100644 index 0000000..e69de29 diff --git a/layout_tool/ui/main.py b/layout_tool/ui/main.py index 84a2462..adc1114 100644 --- a/layout_tool/ui/main.py +++ b/layout_tool/ui/main.py @@ -1,5 +1,7 @@ #!/usr/bin/python +import os from layout_tool.constants import WIDTH, HEIGHT +from layout_tool import here from PySide.QtGui import QWidget, QDesktopWidget, QVBoxLayout, QListWidget, QPushButton from PySide.QtCore import Qt @@ -14,6 +16,7 @@ class View(QWidget): self.init_ui() self.resize(WIDTH, HEIGHT) self.center() + self.set_stylesheet() def init_ui(self): self.setWindowFlags(Qt.Tool) @@ -40,3 +43,8 @@ class View(QWidget): center_point = QDesktopWidget().availableGeometry().center() geometry.moveCenter(center_point) self.move(geometry.topLeft()) + + def set_stylesheet(self): + with open(os.path.join(here, "assets", "stylesheet.css"), "r") as f_stylesheet: + stylesheet = str(f_stylesheet.read()) + self.setStyleSheet(stylesheet) -- GitLab From 9cbafee2f66b8eaa2e57f0620510ad5f37bb5990 Mon Sep 17 00:00:00 2001 From: Lisa George-Gilroy <lisa@blinkink.co.uk> Date: Mon, 9 Aug 2021 19:00:43 +0100 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=9A=A7=20Layout=20Manager=20Tool=20-?= =?UTF-8?q?=20New=20functions=20to=20get=20data=20from=20scene?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- layout_tool/api/scene.py | 157 +++++++++++++++++++++++++++++++-------- 1 file changed, 126 insertions(+), 31 deletions(-) diff --git a/layout_tool/api/scene.py b/layout_tool/api/scene.py index e1b928b..f8856d9 100644 --- a/layout_tool/api/scene.py +++ b/layout_tool/api/scene.py @@ -1,45 +1,140 @@ import modo +import lxifc +import lx from PySide.QtGui import QApplication +# get next id name should be part of utils -scene = modo.Scene() -filename = scene.filename +def get_parent_window(): + app = QApplication.instance() + for obj in app.topLevelWidgets(): + if ( + obj.inherits("QMainWindow") + and obj.metaObject().className() == "LUXQt::LUXWindow" + ): + return obj -MESH_TYPE = "mesh" -GROUP_TYPE = "groupLocator" -KNOWN_TYPES = [MESH_TYPE, GROUP_TYPE] +def get_next_id_name(name, pos_list): + if name in pos_list: + old_id = name.split("_")[2] + new_id = str(int(old_id) + 1).zfill(2) + name = name.replace(old_id, new_id) + return get_next_id_name(name, pos_list) + else: + pos_list.append(name) + return name +class RepEnumVis(lxifc.Visitor): + def __init__(self, repEnum, asset): + self.enum = repEnum + self.asset = asset + self.count = 0 + self.locator_list = [] -def get_items(type_=None): - """Get all items for the scene""" - if type_ is not None and type_ not in KNOWN_TYPES: - raise AttributeError("{Unknown item type: {}".format(type)) + def vis_Evaluate(self): + self.count += 1 + source = self.enum.Item().Name().split("_")[0] + loc = self.asset + "_" + source + "_01_POS" + loc_name = get_next_id_name(loc, self.locator_list) + self.locator_list.append(loc_name) - return [_serialize_item(i) for i in scene.items(type_)] +class LayoutManagerModel(): + def __init__(self, object_name): + self.group = object_name + self.scene = modo.Scene() + self.object_name = object_name + self.asset_name = object_name.split("_")[0] -def get_meshes(): - """Shortcut function for meshes""" - return get_items(MESH_TYPE) + self.asset_group = self.get_asset_group() + def get_child_assets(self): + assets = self.get_child_assets_from_POS() + assets += self.get_child_assets_from_REP() + return assets -def _serialize_item(item): - """Format Modo Item object into a regular dict""" - if not item: - return + def get_asset_group(self): + try: + self.scene.item(self.object_name) + except LookupError: + return False + else: + return self.scene.item(self.object_name) - return { - "name": item.name, - "id": item.id, - "base_name": item.baseName, - "parent": _serialize_item(item.parent), - } + def get_meshes(self): + meshes = [] + for each in self.asset_group.children(True): + if each.type == "mesh": + if self.check_for_parent(each): + meshes.append(each.name) + return meshes + def check_for_parent(self, item): + asset = item.name.split("_")[0] + parent = item.parent + if parent.name == self.asset_group.name: + return True + elif asset in parent.name and parent.name.endswith("POS"): + return False + else: + return self.check_for_parent(item.parent) -def get_parent_window(): - app = QApplication.instance() - for obj in app.topLevelWidgets(): - if ( - obj.inherits("QMainWindow") - and obj.metaObject().className() == "LUXQt::LUXWindow" - ): - return obj \ No newline at end of file + def get_child_assets_from_POS(self): + asset_data_list = [] + for each in self.asset_group.children(True): + if each.type == "locator" and each.name.endswith("POS"): + asset_dict = {} + collection_name = each.name.split("_")[1] + if each.childCount() == 0: + collection_type = "position" + elif "source" in each.children()[0].itemGraphNames: + collection_type = "instance" + else: + collection_type = "mesh" + if not any(d.get('Name') == collection_name for d in asset_data_list): + asset_dict["Name"] = collection_name + asset_dict["Source"] = collection_name + asset_dict["Type"] = collection_type + asset_dict["Count"] = 1 + asset_dict["Locators"] = [each.name] + asset_data_list.append(asset_dict) + else: + child_asset = next((item for item in asset_data_list if item['Name'] == collection_name), None) + count = child_asset["Count"] + child_asset["Count"] = count + 1 + child_asset["Locators"].append(each.name) + return asset_data_list + + def get_child_assets_from_REP(self): + asset_data_list = [] + for rep in self.asset_group.children(True): + if rep.type == "replicator" and rep.name.endswith("REP"): + asset_dict = {} + for each in rep.itemGraph("particle").forward(): + if each == rep.itemGraph("particle").forward()[0]: #If it's the first one + collection_name = each.name.split("_")[0] + else: + collection_name += "/" + each.name.split("_")[0] + chan_read = self.scene.Channels(None, 0.0) + enum = lx.service.Particle().GetReplicatorEnumerator(rep) + vis = RepEnumVis(enum, self.asset_name) + enum.Enumerate(vis, chan_read, 0) + collection_count = vis.count + locator_list = vis.locator_list + collection_type = "replicator" + asset_dict["Name"] = rep.name + asset_dict["Source"] = collection_name + asset_dict["Type"] = collection_type + asset_dict["Count"] = collection_count + asset_dict["Locators"] = locator_list + asset_data_list.append(asset_dict) + return asset_data_list + + def get_next_id_name(self, name, pos_list): + if name in pos_list: + old_id = name.split("_")[2] + new_id = str(int(old_id) + 1).zfill(2) + name = name.replace(old_id, new_id) + return self.get_next_id_name(name, pos_list) + else: + pos_list.append(name) + return name -- GitLab From d39e7493e1ff2bb3cbbaf04c888a9ff1cfb95c4f Mon Sep 17 00:00:00 2001 From: Lisa George-Gilroy <lisa@blinkink.co.uk> Date: Mon, 9 Aug 2021 19:02:42 +0100 Subject: [PATCH 3/5] =?UTF-8?q?=F0=9F=92=84=20First=20Pass=20at=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- layout_tool/assets/I_icon_blue.png | Bin 0 -> 590 bytes layout_tool/assets/I_icon_green.png | Bin 0 -> 590 bytes layout_tool/assets/I_icon_grey.png | Bin 0 -> 588 bytes layout_tool/assets/I_icon_red.png | Bin 0 -> 591 bytes layout_tool/assets/I_icon_white.png | Bin 0 -> 523 bytes layout_tool/assets/M_icon_blue.png | Bin 0 -> 828 bytes layout_tool/assets/M_icon_green.png | Bin 0 -> 829 bytes layout_tool/assets/M_icon_grey.png | Bin 0 -> 825 bytes layout_tool/assets/M_icon_red.png | Bin 0 -> 830 bytes layout_tool/assets/M_icon_white.png | Bin 0 -> 770 bytes layout_tool/assets/R_icon_blue.png | Bin 0 -> 799 bytes layout_tool/assets/R_icon_green.png | Bin 0 -> 800 bytes layout_tool/assets/R_icon_grey.png | Bin 0 -> 797 bytes layout_tool/assets/R_icon_red.png | Bin 0 -> 801 bytes layout_tool/assets/R_icon_white.png | Bin 0 -> 733 bytes layout_tool/assets/check.png | Bin 0 -> 396 bytes layout_tool/assets/refresh_grey.png | Bin 0 -> 882 bytes layout_tool/assets/refresh_white.png | Bin 0 -> 844 bytes layout_tool/assets/right_arrow_grey.png | Bin 0 -> 366 bytes layout_tool/assets/right_arrow_white.png | Bin 0 -> 319 bytes layout_tool/assets/stylesheet.css | 160 ++++++++++++++++++ layout_tool/ui/main.py | 202 +++++++++++++++++++++-- 22 files changed, 346 insertions(+), 16 deletions(-) create mode 100644 layout_tool/assets/I_icon_blue.png create mode 100644 layout_tool/assets/I_icon_green.png create mode 100644 layout_tool/assets/I_icon_grey.png create mode 100644 layout_tool/assets/I_icon_red.png create mode 100644 layout_tool/assets/I_icon_white.png create mode 100644 layout_tool/assets/M_icon_blue.png create mode 100644 layout_tool/assets/M_icon_green.png create mode 100644 layout_tool/assets/M_icon_grey.png create mode 100644 layout_tool/assets/M_icon_red.png create mode 100644 layout_tool/assets/M_icon_white.png create mode 100644 layout_tool/assets/R_icon_blue.png create mode 100644 layout_tool/assets/R_icon_green.png create mode 100644 layout_tool/assets/R_icon_grey.png create mode 100644 layout_tool/assets/R_icon_red.png create mode 100644 layout_tool/assets/R_icon_white.png create mode 100644 layout_tool/assets/check.png create mode 100644 layout_tool/assets/refresh_grey.png create mode 100644 layout_tool/assets/refresh_white.png create mode 100644 layout_tool/assets/right_arrow_grey.png create mode 100644 layout_tool/assets/right_arrow_white.png diff --git a/layout_tool/assets/I_icon_blue.png b/layout_tool/assets/I_icon_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..37b7bbd29e10d833a7b5be2778152917a22bf6b3 GIT binary patch literal 590 zcmV-U0<ryxP)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&0006NNkl<ZXo2mT zKQ9D97>6JKBQ#1X#T6PAl|mv>3*lU&mRzDCg7^X`L?IDTU*k`ls1-f{9i>kA0!NSt z+2qCE+&dPz*&CO6l1*;zGW$Niz1i8#&JqZ?p&`E4ncSOJq!q{l6Tkq_Bj35C1l$7G zKoK|uUd(!h{V)B-1er<MSwTMcrVt{c6X=tg1#y`Au7fQ|6R-^&0U0;0zak_5%8t1G zILJCM=Rp9Iytq}M1(^mGYo?maqBxde25AGfEW0`ZMt}~PBwTJCQtQOxvL&vcm_f2K zE19gytaT1NR{a=P@+h^Unk&lhJ>qH&GOlzw1=bu&C$S+8CKK_t8Kht7U>j;_qB#tF z7epIY7aj!B9J=ETGf1b>p;TR`KcP94U6`943(OiPWpq*7b5Y23kS<^});@DpDCu77 z-w=ZMMhM~?A&75;AifcT_(llg8zG2qgdn~Vg7`)V;v24?qHM_KoVp!a+7mtP>0{bx z4rObKW{^9j!=ML2G>7|m!whnzbeONM)1S~BF5?X|NKxr91}xVw#F99el&xl&K@Kg$ zYh6MP1MSX~zi5|QMa!&rC$68E)9<tVjr&UHam$KUEm#1a;&rv@_W;=RL|9`}JJ7c4 zNOVr@rmmRGuI+ra1$mXl`5bUlL-7x8#3e6o6(rrF9LVhOaefTRI%A7t@rT$;HOID> cYU&T*9qUC-&>;RB>Hq)$07*qoM6N<$f+A1?W&i*H literal 0 HcmV?d00001 diff --git a/layout_tool/assets/I_icon_green.png b/layout_tool/assets/I_icon_green.png new file mode 100644 index 0000000000000000000000000000000000000000..227986128c324e800e45e5c3104593fbe43f064b GIT binary patch literal 590 zcmV-U0<ryxP)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&0006NNkl<ZXo2mT zJxjwt7{`CUBf2>1<j}#zNhb$Ea2Cb4Zy*$06jAXDXb0&ah&a3Wf)!^6KY(t!*-h#f zP*FjUz++9X&owH&^pyKSAZfWg|6h{3gj@&&+|U%?>(bqlR-_%61*U)@pih2t$s=$N z+yVvQ7<e=5<um#6dUHaUY1!F<toNrN5z!3{NX-MuFjK36O{4|b0ZxF7o2)+~BWGn- zvVB`*3t03(z$7c#s?bE{fR%<tO=d+hR$z*BM19Dzt21B>=#oLg<<cd!&MaB-lC_K} zGApB!$%c$tm%ww~k8w56QY)&tuKeF8S*;?IN~3dN(_!c&a+1MhD!y%s3@Qz5ms*-= z8HQ?!XqVNM2O?UA-uQ+o(ycUjtZ$}Yp=GGJF}FGnuwZn`=%%*sqL6Em9$-ASec`H5 z(zDi|A&B@!5b=#5;u}H4H-d<71QFi|BEAtsd?SeXMiB80*KbjBvN-48URv54J?-sd z+GrUn<`hkllG0$<0}(C5Lwv&&xltOZQ@tspWw@>-QcxO90Ba4DSd|PW6|-5U$g$<} z+7ii8pwn68FFK`G!7}QVBx@OS_<fbrc&Id<w9IHVf@R<(URN7_kAQ7Y0&8q*2ikTY ziTcD|>JgLKv-MY-$h%C=&jZB<2LGfeS+bI?ilj%BBN-h&`^SjPGqyPn{uKMD=G694 c&Hn@V0P}@T(9et#AOHXW07*qoM6N<$f`3E|$p8QV literal 0 HcmV?d00001 diff --git a/layout_tool/assets/I_icon_grey.png b/layout_tool/assets/I_icon_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..fe8eb54d5aefc161cf0c17af28e6901e2363af5d GIT binary patch literal 588 zcmV-S0<-;zP)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&0006LNkl<ZXo2mT zyGjE=6ox<V1Z^y}vPfZL6)OutuolJJ8wi4pA}UttObW3OM67MRV8q(O2hdJSJBcq4 zMFl|uN1aU0xGI@sl=)yGlQ4U}e=|F~>@1OpADYa)X0utXNINhMOaK|6SHAN}3Ah7p zfC6v?yx8?j-{u6FN!i)HeD145h%#M3ztr3phpDeRxPr6*+rTl9_T%~^((<qDh}*Y= z<bZ_$0@%!pTNPT68DP0#s>v*iV+D4Q4q(f%t5aYE=#)vq=hi8;P8}{=;`)IdWLjn= zn{}DBE`Z0HALD8srB=D-n(}+ExH^N3E1k}O4Uf`E<i){e!fe|?29yr2p;k{chs;+& zv|)7_KoHHL$86X^x|9y3+B*FT&7tDL-0E3i&N?Z}7qvYfg?tC;21bqcxvxS=_ga63 z7$h`ekkE)hLL&wVjTj^}Vvx{?K|&)235^&eG-8m@@ck4eFPnG%?a<Pm=xI+M>y746 zv8HGTDJmTX0|=ry+?x$M$hFd8v9?aXLUXt>8+MR_(qRl(ZD5EMaj>aa&9Z|WIfhqG zLJk8dZ_1yfq*lQ(>lMZI1AF>?mcQ{p={)XO(P{)sz>`^5n|=?0%|L`THnjuox{j33 ziQT#@CbR20UtK|7WpREMxNV^LJGbI8FK$&N-J%@I?C^em49PlUn`iL{<E5Gt*Go13 a58w^R<xbFQ-5uNj0000<MNUMnLSTZA%LkbN literal 0 HcmV?d00001 diff --git a/layout_tool/assets/I_icon_red.png b/layout_tool/assets/I_icon_red.png new file mode 100644 index 0000000000000000000000000000000000000000..81ffa78711dae4877c9371ac5972076d8b2c5866 GIT binary patch literal 591 zcmV-V0<iswP)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&0006ONkl<ZXo2mT zy)Oho7>6I<5gL_HDHIwNl|mv>%Uw7cwM3#Jg7^neh(aP4^)>FqiCW<gprh0Y(Vq(v ziCpqJdvott<mPV3Jjo_IcbR>E&wk8qc9uZE4NcLlKBnfiBJDs5NCG23zx?Ks0&oZ1 z0C^w>yqfiTbD8pbb4-|N*;q!_2kIbEq8k{Jni<J3^Hm3%NDHtJ90P-Hvi^ucIVuN| z?b{;Tz>)_7CX14-3Qc4dSZ!F;cvdB21*S*`uxHuSDKG(a$spl!>5^KfmMnXcwTvl} zl2OTIQ%0=|pjh*LTuo7Gm1=G%|MyE)t4KoWbOvlW3?0XgWH3oa+os5{(!qAB)e|kl z$X6oTX?5v=h?b!*+Au}Bl@5j4X8ILchKd_=tK$F*#zk4WsU5l~<XWT$n2fZ~T@{LZ z*7`F95#I<Rz7a%xBZ&A$5b=#5;u}H4H-d<71QFi|BEI4JEy|88&iS{emi9(Zd;3^# zv<ww<il)fD(qYsC5iP?*v|)-|D;<_=o9S0*8LpxYQzWl+m;%-tD6u9POe$uxOp%=B z^x785aiG&#<WD-KR^Bq|-AmRo=J5L>hw(`1oUqJjHG&o3Ia*g6ezU-?CxJC~wH<A{ zkCd*7bloGyleS&2Hjy`(oSy@38yNh9TgkF0*{X<pM9IqN@Ns>N$vk75<KRz`k7`bA dAJzOnfOp!(PSBEms`>x`002ovPDHLkV1m-h2*LmW literal 0 HcmV?d00001 diff --git a/layout_tool/assets/I_icon_white.png b/layout_tool/assets/I_icon_white.png new file mode 100644 index 0000000000000000000000000000000000000000..bb6a907562a89ee97fe0db06d502d02c04a948b1 GIT binary patch literal 523 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2o;fFkbR>aSX|5d^>BmACsd<+y9Sk z0=hZ1?AmK|dRn($TyZ1d_HB<EHV+*im5-u()_mF5G&d}$s*+*LLd&$t2YHSgzfQVw zmwBfC%p{KX&-E$O6|I{c6r_88uXIr{jbtd`NZ@x6J+P`)*V~S94^su30OJm}3(x=d z7#6iewDi_0RV{qfX)N=hCT@=TS)q%qOpNE2o}Cu8WTp0hfwNnbOkEe&Uil}aDR^=A zatozJx=O1!zF*qme)L<HP2{7Vr79D5E&rg?{$bz64=JnEJMVC?&Sg?%Tde$KSLx>S z2GdOszQ0p%_^fTp!dHGjnr<*}IKnmUEmNpU;WD|`_sx&}xuYKA@=NoB&itL9wPzPj z`?j;^vdr!M=FE@wONB?8oQg_eJ+RHV{=_Q5{WsO8DJ<&6gH~3qGu=9U+Lw$e_D;G? znujmUQxdNf=ej1^;UQ^vhf};#h|BNT?3eK#l5%%B#XDP?WEpyyRQ+<<&h6c<boAP7 zHNmOHH*RR&j`NJp@Ag!hyh*ZZN?G-;r3!2MudQHbyTzq?Yq6X}f&S)oOpWgn^6!?n zD8F4eE7scV&B9rg|F0X0?VIClTCOa=YGwpO4fBMvyIFNsmumncnZeW5&t;ucLK6Vf Cl;eH? literal 0 HcmV?d00001 diff --git a/layout_tool/assets/M_icon_blue.png b/layout_tool/assets/M_icon_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..07a02bfa3ca7a13bc590b8798e048222fa265d6f GIT binary patch literal 828 zcmV-C1H=4@P)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&00096Nkl<ZXo2mT zziSjh6vsdQCM3<3rjjFtjn!FM2!ghfpl2HElYos9RQv}#i;zN)V0}$;VuJM*{sCU6 zWv-G~rinoXQ4Zef?7KI+dwVl`hvWkXH_6V<_q%WAy<z7#;e<Gxa_@S7^|v+1d7ufb z01aSK{uYxX;0y2>*af=4Pd#2|`=9*NIb!a}%{ub^QUxZ4EC82f%#LWdo7KT*<P7i% zcnd7W(K;4O5|!7Yt+0_c@NfnUXx2pA2$qq1!1~mr=CdvuQ)nX>fKAV>_JA9}yd;U3 zpLrQ;&!c5iwEjgKX-ZboJeREX0XPo+j7K?^v4&$lGycCQTD?Y=jZW`@7ZFA0@lrHs zR@}BWa>eN2n`%{JX=r2_v8L6>88BjLxac;tkp-i}QCLl-ur#C!^VyO&ZtKtjJ(<tr z@D#YIuJ3ymcqV0yGz<atl16GJHKfSfYmGx)r^FnZp-d3i2u75$7{_!jp^dZ(KIPgh z8X2f|5rM4$<E98<q%IjNp@>M=Y&U?0U{lK#(-3n$8Y*@7GOjI5NF#?%J1Z(~G=_cN zgb)zQ$f1f#);e)b1~Eb4tmTUG)f8Pjf~*e$8|kYIX4RCYy1t*Yo(dDnNV0g{sOXxa zYe#bJOc_Z8>p9=@d?)0zB0^=)TJ$;^ZkC&v&_*z7O2eofL8HM0+xRS!nvzU6oxKL3 zil9r3h+r)GD7C|-3L~{xwZkQrk%80*P0!dZ2O*XbJX0u2G>B|OZzO|l5G`UF(KRJn zG?*a$-YR(A1Nmgp(<f(Th#8Se(MGH{de+;=s<AYr&J?wg1Ea&$88BjL`06&akxxd4 zM`1OU!qSkcQ`*R`(c!kd+ME_oM1v-Enx&0&J=3c#Ca(i?6&RY6v35Q0lMi${*Xj3% zgmK&GyzDvAng)-7@9wx(`rQFGW<;>XhV`I*b!50EwknsH&z5h!`i%UN!}(QUe~Q8r z_C?E@Xd5AKi?SoxAz2^S<ec$bWZ~bOAJx3`{ix>u1NZ~)M1s_}4r<~60000<MNUMn GLSTaNRfiw| literal 0 HcmV?d00001 diff --git a/layout_tool/assets/M_icon_green.png b/layout_tool/assets/M_icon_green.png new file mode 100644 index 0000000000000000000000000000000000000000..8b46f5ef5aa7eca551830012ec20ad48d4c5cc93 GIT binary patch literal 829 zcmV-D1H$}?P)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&00097Nkl<ZXo2mT z&ubGw6vsdQrnHwF?MX@wUOdH<2SL!Qv}p7{h!nh3ii-b$@lbLQq<HSdMojUXgMWaz z>CNUO_1H@-DhLvITV`M0>~1zQn;`u_U^m&>`F{7!yf^HGQ%;G)8TYOm-!`mHE&@$p z4QK$%@?A`hfbYOppa*n;Kf1q8y>oJWHb=}ox!H~!U#Y;vh$Y~v^tmG%?q@ad894{M z2HpepI9ey7E>U?S+6o(K1CQsxfM#8^jbRyi0Bp`oYCfByF@-jAX*7pCx7q`40gI9( zVty8-uRV{Jj%YnW8)-^b(!7wY^$9o*{*1>tmcB-PJ~w_}7Oh?*t45=bz{`lD^LQm1 zG;8j;Hge5q;2UaHVrgh(8L@`d=Q%K9X}Ij3Xd_ETgQKvTN?~b873T9LZ`{_Q1^P0c zC*c`zTU|f!Oz=#~8fh2;R!SPFmDG?TZ>=>6D>^0S&<tgQz(z2ll*J^ba|vyvRq!d- z=F!Mdofi?<3eazg5JpxcV<i+3>6+~Z&=72Bxnde(&PPL~?taF#g$Zfo&^gbFiW`kl zo3|kZgfeodqLMXFT$4de5IAeOqI@+)*N!0bgTO`xDuY=yrKzqT<jkkSgffy$UN<Vb zrs&#{Tsv1r62W@Rw>-y$99BfA>{*juN5jo>Qxn<<MonoLwIgUWm|_{9MN(6e;ij|K zFjNtAi4hTuNgt(lxKv@J7OQr+#4<9J8lmYMtK}fXGJ<CaMTrKHjp&7Bumz$;Oe4Cc zM2iMfq~ALQuX`k)Ec$xqtPC+DQYqSq^+wNn`&c!WhSZ*-HgaGzxIPC)EDb;06K&*+ z(ZJm5tr$x~s!nMmJ)^;0d9^t!o{9!dYBx(8>3W7&TTI>r7Ai2bAbs^b?~@O7I@js< zw}kPX(RkIfqcsbj0KeRRt@OJKY|V*ai!JLx`|8MOPHa~$F`sSUeDxXmE1UBVf&Cc@ zPuLeN>!NLpyd}!6WQSya+>m|73z3EYbpBNH!S|<{{}13F_k@Df=+5Ef00000NkvXX Hu0mjf-7b0# literal 0 HcmV?d00001 diff --git a/layout_tool/assets/M_icon_grey.png b/layout_tool/assets/M_icon_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..cead4da5d635b9c112cf4f3f05b968d39a74ce53 GIT binary patch literal 825 zcmV-91IGM`P)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&00093Nkl<ZXo2mT zziSjh6vsdQCM3<3rjjFtjn!FM2!ghfpr`-ANx()4DpuEd79oWo!8(mO@j~h=`~$pB z%UmU~OcR3&f*ib+*>`Vt_x5J?4#@`&Zjzmy?|0wKd&ACg$|-R;<KDI1Zd-#~1e(Aa z&;XX@Z!tLrz5!o>9?%7T>+xK@XLH2dlbh|x_bU~c7_kIgl`(fj!~LudJ|pLVH^2vA zC63mKSdpl_6>Wu$bb!ZmU_i4j+QzVqJODOkCN-Z8(U?LTxdd!^ZnX#80v07n#QZGE zSbH8VTcY(J+DKEflIEpktxv#7@Mk>EiHtQG^M&#MWzp(2vTAhN2VO-KoyTj@pjmU< z+Q>DdgKw%;iKU^DWyG3RpXb1crQx#M&_<Sw4##0NmBP}HD$M6g-ngSf3-o0^Pr`HH zwz_`cS>TzJHPSEy)JqzvmDG?TZ?828b)6D(XofODU?Uh&%3>1Jxr8>-D)^LZ^JrwK z+C>Dm0*sp?gps;rtb`&WU9;T)8iGwNS4>09`Dm!r-OsqTFd>Z`Iqj^dxX~E(c^5)J zC?iKIDp~8qH5tSNfwPt?%2!i#?Fh0y2yA4aGMH6Un(F#N&Uz|LC?m<@b)%wdimn~W zwR2@85v=EY%k!O((~1a{J!{eHXt-H!YC;>qs3{Gjb_9(EQ*7h2NNP$l-E{UEhAM(C zF(QJo=%dsQmnw|ZV$}|pSVo3YBQ$+uw;Y66M(|9bDA6FY5xtQNwn4OrX++nQXwhJb z^n0h^b&uqeMPHwsl_6$CDn%Qy-so9xAFIaFkUCS;Mh=Y**XO{9rQy5V&_=!(9iD{M zR0>N&s!nMmJ)^^2d9^t!o{0uc>NHCm>3XJDM@-%X7Ai2bAY=7B?~@O8I@js<mxS@X z(RtN#qBRSi0zchxt@OJKY|e>bi%si6`|8MOO>9>#F`sSUdi5FkBZu=3frA+ePdE@Q z>!NLpye-PEWQSyZ+>mp|3z3EYaDG(t(f6a8{}13V%;bX9l474e00000NkvXXu0mjf D4ETgL literal 0 HcmV?d00001 diff --git a/layout_tool/assets/M_icon_red.png b/layout_tool/assets/M_icon_red.png new file mode 100644 index 0000000000000000000000000000000000000000..b631d142f6ef34f0b6e1b68bc9b964207ca9ea72 GIT binary patch literal 830 zcmV-E1Ht@>P)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&00098Nkl<ZXo2mT zziSjh6vsdQCM3;OVk$XO*jSyFg&=4v33}RCp9E}_pyEH^S%egV1nX<ei3zE%@DK1h zEpwGbtkT4wf*=QP!|b~^yL)>xdxzu$2fKGWJKyiVnfHdB<Af99aLT>wkLE+Glk-3m zSOFTqqI?&VL*N_m71##4z#rY;#ct>L_;ik#yK=LR9AB=$#E=ExiuBnL4fnDd_>7zZ z-T)tfr8rv0Vo9R%R<sp1(gq&SfC0^_XdA&YavxZmn$&#OL}LnV<N~naxz!GE6PTAI z5%V)IeeHO(Y>3ulw2`J{CCy98TAzTU;LmuJBk60{=L_TaMbYXtvTQWk1ztrIoyTj@ zpjmOxwUMhv1K&`q5=%oP%ZN3sKF@#=OT#7iL>pN!8XShzR0>N&sxY4|dE>SYEzpzk zJPyx+Tk870XM$%^)=0w;P%mkuR#HQXytURi)OAYCp&7~qfsJ59DT{GT=MvgTtKd_v z&7zTkIxixy6`<b~A&k@|V<i+3>6+~Z&=72Bxnde(&PPL~?q0^Vg$Zfoz&X!~iW`k# zn|C1ugfeoVqLMXFT$4de5IAeOqI@+)*N!0bgTO}mDuY=yrKzs(=gg<Vgffy$UN<Vb zrs&#{Tsu=n62W@Rw>-y$99BfA>{*juN5jo>6BF79MonoLwIgUWm|z*7MN(6e;ij|K zAXE`_i4hTuNgt(lxKv@J7OQr+#4<9F8lmYKtK}fXGJ<CaMTrKHjp&7Bumz$;Oe4Cc zM2iL!q~F^GuX`k)EP8t9tPC+DQYqSq^+wNn`&c!WhSZ*-HnMLtxHbbuEDhh?6K&*+ z(cno~O{K6jr0SG5vTZcDBd<26#WT^MN$qB7BVEt%YKzGmz+44}=A^G}&->(koz8Xo z{Vid9Z!})^>}XAcr@$|_Un~7?0qZj&*kav!(7rk{oD-XsOU!4}H(z~5{>tY317L58 z!V~sH%c^J_A#aJYCD|dFAJ=7{@myr#Kb=3-eDwXP=Kllu2j0Yj)cJ@SxBvhE07*qo IM6N<$g6G|as{jB1 literal 0 HcmV?d00001 diff --git a/layout_tool/assets/M_icon_white.png b/layout_tool/assets/M_icon_white.png new file mode 100644 index 0000000000000000000000000000000000000000..088c5c47ee884fd1cec460b4bbe21bc8eda5a207 GIT binary patch literal 770 zcmV+d1O5DoP)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&0008XNkl<ZXo2mT zzit#U5XQgdUq}SSwUp_pmWl#VP$Li|G^wwrA><7}i9~@!BwiuFkvjJZ*Fi<N3X+Z# zfhNtMRlI0!GWL1z#=8#6PqLIf+2`-O@pv}t#RV6nq2S+2MA{_R0IUFb44?#X%YBxT z-vE99_zGYEU<bg7oUbSfT|#9<v?oOLjk>4O@Koya!a7|hqPH0ski2u+qK$0krGJ9W zSR<<$iT1HN&By`~{qzhT5Yc@iT2gY!x-Gf61|BVy#)XiPHP66}7R3A7x<}Jm$jAp} zz;1^o>b9%s`pC6k5?*dA{@(Z(V{2#{N`4^=;xT|5V!%yTpt_{ebS&mSDT?A>o=79w zR^Tb0t#d|O!Akp;8P&X!p#?Am@VepmtOIx;J{tjeIis#qJiCLIe0xg2?=vLvFXemo zJblj!W5{Hmhh=wj8B5i-XEnK{5h%+fL=)3fu{P3={FQq-8X1f07=e9*c_*+ivg~%O zni!GX?2ds3v!%twl+K)wQf%GBK;LLAjU2J-P*iv{sxj{^1Xvk45>W}|2{&nC0>--* z7v-xdvUZr{2aJu3#15v_loio`G$o&+u`*I8FOQ0>DYACdeX}xB3zloX@A(^+%L)l9 zdnoB;H25wzH`Yd=)Ra=G9j4L19RH7msB22S+~n>xwkm?06cK@v^hs(5rwt>$RJDVX z%E;K&2+2^nTQ(t;5qOqRl4u~Y5qTqNc7v#q(uk}n$)bV(>A6<Qh_s3{qCFawk5Icn z(=c(SD2*H_1MXyCMALA{FQkz#%7Ev#nr1@NFj1$Zk%2Pcp?gN#6)&6y$!D*gh@-cA zM6}q#!Oo(aD|GaBJ!Is(9ELuNJ)YjmK&+3gCg<$cq5O7+CbpZtFu<4Deg+2i>$7#< zII%C)JaX->d#UEC|K~8_4|}QRQ{$Iv&Mg4`0!KN8SGSX-_y7O^07*qoM6N<$f>YgX Ay8r+H literal 0 HcmV?d00001 diff --git a/layout_tool/assets/R_icon_blue.png b/layout_tool/assets/R_icon_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..7d821efa8eaada1a51746178a5a067d40faecd42 GIT binary patch literal 799 zcmV+)1K|9LP)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&0008!Nkl<ZXo2mT zzfV(96vsdQ4uPd^G8x0*;#4LF6BAesL@SFk35kn_DDfY#9SDPo0p>1HV+kt^{sFS- zNGGEs3lcRknrBY+_VnDow(q`oE8&wg^gZr<_xtTR_uTvX${A<m!#Ve=j~0GegIoqG zz&ua}Cgoh790Q+#k3bV>06+A2^{s#M&!>pFFBhxJ`|AamNSFX_%9wT0@Ss-*pOFi| zE8q<<m5<hen3AZx7HxeSsREBjz<_2+v~^(_c?c{=lbX)5XzV~6xdN<tF0}*P1;(XF z<oOzxv35LK)<o-Hw2_KbCCv+|TJM09;Gc0fCo)zt=8EzENzv*xGG}z!1zzSTI*poW z(9FBX+Q==VgD=&J#L`giWyDIW_ak7$(s0c^&_*VV4##0N4TYtlV`07+XrQVNwTA<s z1?<b;V1zP~n3(CKo!e$pD$-F10cm@!JXr+xfKrGtLPbQgX{1g`YX1%AToTC*Yo#8P zyo@wt9%zzOdam|MZF8CCOpMg3873>9wtW+8j#$ykM9j$^lvqZBR4SJkM#@rpT{5Ry zkw!|MwPRma{7mFke)sxp*9x(Q5P7mEk(mD9w<yWVKO4#fIi}W%%KKzaY&*x5kQ+vF zjL3ncPW#o6D6}aVl`9iPrdCZISJehG6Ga+nsi+_u$RHFw*>zMFLq(-%BUV&4LR>gT z`PJ2GrqA2tp2RS6WTaT;xe{|h)KSTFa}{bqoE@-zV&ZC`vHx&tZ>+3u^sH|mi^kH> z@k~)0`D}EU9swhkhA-}cHuAyf@Fc9Jp|CV`+>B`>O{2rTkXwl%cqSS&9Z$2gk%lL| zs$%jEFjj#0F&V3AtT~9rhI>Mn-|rH}Eu-_C=ZRJfo&w+8ajo*3+yJePh+vCV>x1^K zBgvdtFI-|e>%RHwGxAd&&MyFm5rwxo6fH}lt&6lR%C=O8_WZal&lxY}Ec~nUqnfwA dAJv>bfZumud>_ySBYXe=002ovPDHLkV1h;Zb=Cj? literal 0 HcmV?d00001 diff --git a/layout_tool/assets/R_icon_green.png b/layout_tool/assets/R_icon_green.png new file mode 100644 index 0000000000000000000000000000000000000000..aaa625ff8b8b92ef64d4ccb4de09fe0c48fb476a GIT binary patch literal 800 zcmV+*1K<3KP)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&0008#Nkl<ZXo2mT zJ!@1!6owza2}!edrV`o0#%fbp2tv|Ig0B99K)@yvH24SHEy5OpB&pMw6%*1Xg+IV_ z+L^6H%QP{lAjrtsFnjjQe&o)*vxYpdWbe(LJMX(^&Y8J8%Q@%d!v+7Yi(eM4PObt~ zU=FANlX5Okj)1SgXJ89x0>5>CjdJ7U{lz|F9?H!&<o(S8OgJWh+tTNTXn54CLCDA@ z;5G0LDCeVfD9RF*H==D|BQ@aZ2pG^Th_)^)BaeZlWK#RHBpN%=My|OW3fyWNxDSj= zk;wBkE`4nWv@}HP3ED_is*>iVRILxdarDo)n`7zA^|@^Pe^Rstjm#R2c7Rtoita~U zG-&4hV{PP)(I7O`ip0`T>1D(kRv$;eh^66%f1r&_7!8i%YC08`hK`B(a-@!GI@AI7 zffleQf1?r0h%+%gz;*sL>r#;pV+iQC*2<H4U>7LG=p$A{H0#FDDM{_W<(+epT(f5C zVadx#Q}RILhSCeQUTT}mlrt%YR^2dJ4O}}gsdB`MRwhy=dsI>xiBhS2QW&X7>GjDx z)QU7x3d|jQGUI0=ukyP);B~DSa|nr(-9=*Re_x`wnSUmh3341-%WB-aoY?e^t1%ah z<QS2C89MD(Q=-tOWK^z96gjl&>bRyBkeMjbNJ~WpSwKdi=w#PXnU58fqK#NlS&MPw z6y;Y}tLXtBlY5fF$e}UBGUrOl2~kHS)5BG)32|n~>z#?~k^26}nSHRbzR|P3eJmPF zL&u(?HuBAAFf{^3EDhiN18wA!(ZJm5Ef`Bf$HSO5vSl=Q5OXPU3Z9DwO~-DQHqs0X zubP;=2aFXUeoXq>GUgmaW79vO%kM7<<6EQgY+y$#1<!z=e!o`vbq_!*BO=&h#rmK_ z^N7od)xstAXEl_sAtQfebN&f%kWhG=1JSY|+PdhsMA?+;(9Vy$vd?%WXW>7*AJx1M e{ix>b0sIAjpnM;mM-=J+0000<MNUMnLSTXfCw{R2 literal 0 HcmV?d00001 diff --git a/layout_tool/assets/R_icon_grey.png b/layout_tool/assets/R_icon_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..e2636eea334b1f6ca43b176a12d4cef0078f4d9e GIT binary patch literal 797 zcmV+&1LFLNP)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&0008yNkl<ZXo2mT zziSjh6vsdQCM3<-nMx#ujn$>H5QL<a1U>x^0s$K(Xt27@yCS3zBuSmdta!mTDf|OW zr)91ZEz`uHf*>pJWbWOY+q>J@oipSEM{YMWJKyiUH*aQdk2B6FhI8&!>-D-d$Yr1g zECN+vTFw>8G4KWW477j*_@&2l^`6fVb6+mDE$^?FU?OD-xG7_9i-rgNI{1uS0A2xa zftg~o4#kW_<+W%V*hm9-JO&0d%c89Z%g94uC7RT1RzzbL+Q=1P-E*m3;4UyJMWV>p zq>Q!e(XuXD|Dlc4q$+7%NY(lPoCN=jdpVJ@(lJ+!|4)lnuaO0#(|h1$fugf$iU!T1 zd#sJzGCKHDtxPNp)qX~-wE8#(Ml222+yiZ7%II($R?|pW8oCzdi-87e=umq&0NTL5 z{0&AZBdLkG0ou83wxl8*g%FUn*D8`FU=OH-7$a0fG+RdMRHXLbaL%QX+_YBeVJXT; zBJ)6#rqXk@U+S34HD_X^R?{$9^Ryk9SaZaRRxV;r_MpTv5~NbO#4u8o((95t)ygzd z@vI&Dvf}5WsPelvV7qpRHH65MJ&nZd|Gq^@SN{1>CMYnqR#o1ob7IFiu7%t%QeZ?5 zBy~EkM5554VpOhNl$lyhb=*)J$Xt|Zq^+WYY#@VB_GH&lSqc@EvW-|#*$i>v80A-2 ztGNMhllv0G$dQp^x#vpE1yM&O*UeR^1#y1J_Nj@hfyVyJslBnXzR|P3eJmSGL)SA! zZRD%bVRj6RSQ@^$2inLdqr;Q1nnuFX&~-DWjkJso_d;$ZM&Oxf&~!b`(nb<bdNsu4 z9blpa@e?vu%UE*|jfs0gm*1Zf#y3Xi1<w<$7(4}jxZ_&oH@yK`8xz46Yt{$tTSwA4 zu~E9jY&LxJ)o0|lJe+?797Yu0;ZU?Ji?$xJwkSJN9Xj*lwmfINRIu>x&W~!|`F>P$ b`T+g_RRDY+0{D?900000NkvXXu0mjf#=Ut4 literal 0 HcmV?d00001 diff --git a/layout_tool/assets/R_icon_red.png b/layout_tool/assets/R_icon_red.png new file mode 100644 index 0000000000000000000000000000000000000000..78fde6904ec2ceaa0d338164bfd544486631a67d GIT binary patch literal 801 zcmV++1K#|JP)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&0008$Nkl<ZXo2mT zziSjh6vsdQCM3<-h^a(U*jQaE3qeR)Nzl{AIuNi?f(HKq?~0H@kR<grX2lD(N#P%0 zIxUk*6st5bs36G7yD<0e&F$Uo?9LhTfg`t@nVs+V-kUeGx5p``6vG+!s^4pmtU)dU zHDDg70+VvCNDhH7z-OQZB*1Sy-j$?z{Qhi)n0s=uro6vaf{By~;D(IZ6b<)#b?_NE z2fPB_0#n6k9f&E3%4^Zqw~;#Vcmxb+7DZbZmXQa*QZ%XAEQ!Vrw2@1|s^?N$z#U** zibRpGaT#mNqh(dJ9;1!aq$+7%NY(lP90mW3yE&4v(lM8f|4)imuaP;U(|h1$fugf$ zhz8BPd#sJzG&=ZFtxPNp)m}!dwE8##Ml20i-2-i8!su`qR?|>e8afu{^MMAc>ri{x z1@?g*`5TN-Mp6?qeYA7iY)C~q2q7SAuT>-qz&20`F-E9}Xf}-0sYva=?wm^_xo)l0 zgHn`{MCO4eO{M2*ztlFDYtF<-t%hN;=4snEvF3;stz5*M>_LfTBuJ%liD9HFrPn2Q zs+DP^;#oU(WW~=#QRR2L&vyGE)(|33_B0aH|N9mtUHNB2nV`VbT2^_V&WTOuxE6B5 zNP!XAmDFj!5{W{aicz_8QD$m2)Nx&HAahZsk$n{vWCIz5vM0Na%0j59lx@U{%6f<k z$0)zLTFvx%o7|HaMh=V=%RN_OE{HlRxo)mPEr_!Nwogr54m9>ZPV9}9^^KnO?PJ+k z8akdSY9n8b4$~uG#M1E1J<vuz86BR4)ie~AhK`#tZKP#%xEpdSF$B*<gQnwYmNt@j z(yJ~eZv$f`h#!-&TE?1#XiVG_y8Ql<FupN5&v~9`#o#IM(;e3;zv&Io%7_TISg}56 z-#U`ciM7%tX0zs-uRbGx<l+27U@xNZHhZFFQM7fDwME&K>d>Aax8ynFg@T3uaDG(t f&iA95lLzn@X5f4u_Ey2n00000NkvXXu0mjfpy7Li literal 0 HcmV?d00001 diff --git a/layout_tool/assets/R_icon_white.png b/layout_tool/assets/R_icon_white.png new file mode 100644 index 0000000000000000000000000000000000000000..0f2acd1b7d3b3bd8675bf47aaab8694054369cbd GIT binary patch literal 733 zcmV<30wVp1P)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&0007{Nkl<ZXo2lo zJ#Q2-5Pi#6NCd^Tlu1o>sVES|(IOD!Xi}%A;le*ilt>gvM8{9y>qve13v^H=x(Y~{ zBG9B6WXXqSC*x)JcGljD@+9lz)sFq%dB$U}jZ0jj8DzXwBGNj!0bmWl698QRcl@&^ z@f*Mo0N(+O0DJ&&Ci}~>OsC+4i1L((4k<kxhi8&s5bUL^MD(Tw0wmsgZl#6nw2OZZ zJ7tCRTSPj9{{Mt55Yf+o@rZ~X5YdtnOV(w{_caP|aU2(lgscY)Uqv7vDuV#0^&%l3 z6@&eRBBo_u;q{4gzaq5URrI|MJ7Y9x9J;(B6XGd=Tf*SBPf#i0IGu|A&$2B07bjAP zHWdWYXLOw7ma)`+&4|sG9O?kR0+;|e@W0I<Fguh9#&N*52ty+3R0#O<#293-$HWGJ zF@TOmpH{9V@lJ7_j$cJDvuDm7hXDGfy&Jk#uVR8*o=4Z(_QB4vR=3eqF(QT3M#^9} zMJgdCGZjY)AzeT9a@2OUm_j;%+;QMDel0YWN5&=Jn^@(Ll)>&sVimxNMPsRixXl01 zN(2m-@y?ZctiCDy-o?awR(AqcDherF#^>K`c8M|+?+hw#cU!YW*%tLJv4E_Fm_jB# zHaG@WjmHjlIVu}gqY_()HY!7lhEq(xn_{-=i5YJuq!4nVxLEC2NtqDksMOkAU6}7$ z7j|Q%eHxXYP*XtTkULY9LVhU*t1S?saX97`Ddd}C@WPhUOwc&wHe*uANHKV1xs;dz zFFgl|FTtit9KGEqqQwXYJBz-rqNBH)MM5wqhoR5)OpzDj%5DqDhOj&3Sw@IEl;3Ni zh`p*82DqCYwLrkp^lY6Mj<T0(9{Y07U#htt{yR+Yhh3`qT=`PX+ycN~S^=pN<l9xK P00000NkvXXu0mjf91~1= literal 0 HcmV?d00001 diff --git a/layout_tool/assets/check.png b/layout_tool/assets/check.png new file mode 100644 index 0000000000000000000000000000000000000000..c0007d8a9913f3bd2424c569c4e365a82e59be7b GIT binary patch literal 396 zcmV;70dxL|P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800004b3#c}2nYxW zd<bNS00009a7bBm000ie000ie0hKEb8vp<R8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10SQS&K~z|U?bf|Y#6TE@;XzRmL0D|<#l}Lm5<xG@&O5O58nm;u zac#tM5f!xY1}rSK5DOoRjS~DxvXe;yl2gz5-gjo0kP!OxX*n2Rz6<aWw<dYT0cP8R z@8HGH>~#r;n=avSKhq>Ugm4-{SSna{(ipsC=Wzb@8nB5YjIfV|7T}AYg)O{&TQJ6; zad=ib`(xqNG!jwptoTq+s3Z{$&&tOo#X^aS@X@dEY``j>VkEFz3!WRaj>nQg*I3DQ zw((rjxj@l(AWkAVJSVZC{5tNWIQE(+k#^?^CF;X#NTh>DNTi2PA<-PXf<*K1oWvR~ q@ow@{c_{X&)f8FAT<hRI|27}f%9pbC&fon20000<MNUMnLSTX@ey3Id literal 0 HcmV?d00001 diff --git a/layout_tool/assets/refresh_grey.png b/layout_tool/assets/refresh_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..4feb84aa1593e4a19083ab9e3d9413d9d2ffb71e GIT binary patch literal 882 zcmV-&1C9KNP)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&0009yNkl<ZXo2mR zNoW*76o$WvF(d(Z<BCY!#|;z(5#s`)9t1%_P*4o0Cq)q>h#rC)f(y8z2XVuTporit zE(8}4H{ufX;EF3kG{zWX43UcegmO%Dy1E-Y)CWV-HQlf3pL(y}dyU8A@pwEQNCf>2 zN=r*Ky|oii47>o&#yC$iSwSZVKs_)C*bmHzah_)46!H!D2=oT_0&`-VD^?*zz%aS* z5MU3mEUwA2BepjVm<x;t25UEvnEt?Kpa-x6_#WlNQ3)9VtW+!%0Qqg~c28g}PzUUe zXzpgB5VBB<O9HtW+<z0e5W&2^5mv|wU=2{1Hhu?q4U7f)TI0uoO~A8|^Zr4YV4nx9 zOB3-5*a$3^t6j6cI|yt5o&rq~t-l4=9T{kH7SPWcy9#X8-!B?V+25`s_-zDhZWR|H z?c`F!t+5L2M7cHA5vT<2OGH%+>u<qDhzaWXR(bPP$7*@neI~OXmVlZJ>>4+pF1ITS zx+oVR=7{ZO2|3fo#PzDP{zZG`pC!O#;0<s)=nlFFnPLTN18@qcb+D771F!&CuIoO^ zOILyzaXGaLt>?@M^ayBlu#>_(TWwvNTr?=C5f>r(*8fj{&ki<h%x*rgu8qqM2x`Pd zi2Y2Mok-Cn7foS=bPltqO!;Bm*A2)CCF9o`?9!&mCEvIRskVaMB*yLzHf(Yg+$oIh z=Ru9Q2&uG$m}+)n$XzjI{cP*HO0gFR7a^C@e0pgsMPsI9DKCxI{U+w_sv3x0$YmY7 zDNKdC$RR)z>giWmV<w57Q?(EX7a=c!V``34lqfTI$<T(W*Cqg4fT7m-LnYY2xR&vU zfE(6zj@s7}wYYhI5zrNwsY0^I`tBXD3;5)+AlEX!Mh(?T6_E+qS`W+uj;I%TueT`) zl_E*?F$>ZXt6BU}*WCys1O?@4{fbG;))-(P@Bw(NoRF=ZN@`bZ%qew3O_wuaTir4R z`Zg7ld6v5t=+hPrawp?rJ43D`l9vw^>Q9O#YNTQ&EA5qRlRk~A&&~q}fLjr)A+py& zwR$yr8kh=914ii-%a(vT^(WVXi@-e{w;qqj<MDVrp8px(CuVz=gq=fm3;+NC07*qo IM6N<$f|!ATu>b%7 literal 0 HcmV?d00001 diff --git a/layout_tool/assets/refresh_white.png b/layout_tool/assets/refresh_white.png new file mode 100644 index 0000000000000000000000000000000000000000..cfbde7d72e554079c8de5b5dbc8fe49429e060a2 GIT binary patch literal 844 zcmV-S1GD^zP)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&0009MNkl<ZXo2mR zIcQZu6o&sK?rSvS3NDE$BrXVP6xYJw1{M~Am4aepAweq}LD5QtAYvgXb{0VtY!np~ z1Qnwg6)g;L7Xk@UV~jERWb_2aOVm5}`JS(s4=%iUcb4<dJu`F8C=!W8B9Vwx5;_M! z+N$FvZI|>y()rMFN=m{^D-9hWfF4Q9BpsJjm&b8_kWV3BBy~udCaFQvraX=nj&rS) z&vM`<Kj{Zrft_jF|8F6+z+vEu8Q#OMya)CJ!-`c%4R8`@0X_nK{GJY=z8HmU1)6~F zKN#<G8CY0sLU!9%NOBLj2)s`Ge+H-oN{UIyX5eMQ&{wtwoU6?O&Ux=n05ghhu~z}j z2@!6GS__Qv3~ID@M}TPoJ6=JAlmW*Q3;F@DGGWX(;2>}Sm>43WP(tPdZ|rPvbeWqa zjTvt4H8!R3r9d69CX0|E8ML@?W2zUYHA=cNNWC75v;M|VNwt!;Nm?Q4t)zRB+B4Xe z9^eA-&A!H0V1v0^kn4DlbGru5O*>sw5NcPJSZj{gu0_&QNqsrYjceQKl}AXL8`?=0 zA)~zC&n11x(1%Z#q(@%axol-<Cs~B}ZF2b%1Gtsl>y@35@?4Bc%QvrHg`{D*s4yEw zcx5N-U6xKl>9oNdRgxy<D8z}VNeF2zgpenmkSUUu=J-`6OWNp_+imRykwwV0gir6V zoh%Ebb}lWnwr<Vcm(-lGzw`hzfyaqB>kv>Lcz(DDcm?p(>&Hb2y9yaJ?gKu12DnUc z4=^F62zP)k0d6EF<j%l^6iSGTpROm2=(RMr8W{Np0q!JU58O?(e+O*&ANj~)bFuz} zK~0u$x%bn}@Cslyunst7F67f;laM+3&GmwAjijTJ<_!{nwn=(sXM%fIZS~3$_1rFX zR#LsU8wOv{1v7}dECMb8pZ;>`kmRdnn0t#MXCHV*n>*b$x9K%e{od1OQM20^+JMt` zee_QftABm>>++OUl2%JvAZdcRm21>(`N=IwS0z2PoMmvs^6grYNF)-8L?V%NNcs+h WnzS@Rxlq*r0000<MNUMnLSTXi9e1q& literal 0 HcmV?d00001 diff --git a/layout_tool/assets/right_arrow_grey.png b/layout_tool/assets/right_arrow_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..ec3b611e7c78a17be6de9883b0dcc87c2f556591 GIT binary patch literal 366 zcmV-!0g?WRP)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&0003sNkl<ZXo2mP z!A-+J5Jew|2GW8l0ZK><p@dKZIr<1Cgc6_xTtZR;X(273m1d<N#jLSs=JcQBleN2g zo<Flj2qA<JLWmYOo?oc%`xS6ruzvR0x3gDX=L2|g-g6S(B86Ar8(0VIJxYW~p##3G zLS4`qzlaj4Y=A>X+@eJatBkmLi=6&=SL3!fIaj<zo`I)^(AKKs8n=jOeFFC;H6~Q! zcJPW@WRJX05PI;6TSl`_5!%`_n+%ak5qbo6OMYX<$P~c@-t2MZE?Hz_P40f%XNjzB z+=g9<(IQg>PS!VNY|kc2q%(omB-+^!Sls;HB2xv1#yI{r-Xi-(jLsKTa3ynU)v@b- zhma&PSQU<uheV2m#poJQH+%iRN|7L-B1h|k!FgXHgb+dqAr=Ds0FOsEWqgli$N&HU M07*qoM6N<$f~OdoHvj+t literal 0 HcmV?d00001 diff --git a/layout_tool/assets/right_arrow_white.png b/layout_tool/assets/right_arrow_white.png new file mode 100644 index 0000000000000000000000000000000000000000..88a2facd48bf7077d0cb282555880e5236c440e7 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2o;fFtT~NIEG|2zP*vnd&oh6<$>lw z2C)qcLK_0OBN#Zh0vQdgIt?rn3{oa%J3Y81_fmQL*&2Iqr}DnHWy~%hpypa++AXYJ zsaknr!IU~DfnxQYvz;g0YJFnWeCeMsXVScPx7I3p<X$O@=J`|GKkfXQqdG569xYLh zY`dKQc==tAcfw3}@Azy#;$U}+H?y&7>#Ym?)r%KtoMYI=(8mxLe78KL?3eR@rPH0v zQy5kmbg`RyPB57H=1A?kc(DbKbI%(voZ>n4H?=!SVr48}WZzwTrkKt5x`c0?2%B8X zwshNTj-bk_>f=o}w)(O?UHY5r(c<1DyQUwJOv#6eAAI*`7X*Tth79@gk{&XPCi{i} P1BSuV)z4*}Q$iB}R!)Ih literal 0 HcmV?d00001 diff --git a/layout_tool/assets/stylesheet.css b/layout_tool/assets/stylesheet.css index e69de29..b88498f 100644 --- a/layout_tool/assets/stylesheet.css +++ b/layout_tool/assets/stylesheet.css @@ -0,0 +1,160 @@ +QWidget{ + color: #e6e6e6; + background-color : #292929; +} + +QWidget#base{ + background-color : #292929; + color: #e6e6e6; + font-family: "Roboto"; + font-color: #e6e6e6; +} + +QFrame#asset{ + border: 1px solid #707070; + border-radius: 4px; +} + +QFrame#emptyasset{ + border: 1px solid #707070; + border-radius: 4px; + background-color : #4a2c33; +} + +QFrame{ + background-color : #292929; + font-family: "Roboto"; +} + +QComboBox{ + background-color: #424242; +} + +QListWidget{ + background-color: #424242; + border-radius: 4px; + font-size: 10pt; +} + +QListView::item:selected:active { + background: #e6e6e6; + color: #5c57ff; +} + + +QLabel{ + background: transparent; + font-size: 10pt; +} + +QLabel#title{ + background: transparent; + font-size: 14pt; +} + +QLineEdit{ + background-color: #424242; + color: white; + border-radius: 2px; + +} +QFrame#asset{ + border: 1px solid #707070; + border-radius: 4px; +} + +QFrame#emptyasset{ + border: 1px solid #707070; + border-radius: 4px; + background-color : #33cc355b; +} + +QPushButton{ + border: 0px; + width: 15px; + height: 15px; + border-radius: 12px; + background-color: #5c57ff; +} + +QPushButton#expand{ + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/right_arrow_grey.png") +} + +QPushButton#refresh{ + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/refresh_grey.png") +} + +QPushButton#expand::hover{ + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/right_arrow_white.png") +} + +QPushButton#refresh::hover{ + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/refresh_white.png") +} + +QRadioButton { + background: transparent; +} + +QRadioButton::indicator { + width: 25px; + height: 25px; + background: transparent; + border: 0px; +} + +QRadioButton#mesh::indicator::unchecked { + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/M_icon_grey.png") +} +QRadioButton#instance::indicator::unchecked { + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/I_icon_grey.png") +} +QRadioButton#replicator::indicator::unchecked { + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/R_icon_grey.png") +} + +QRadioButton#meshcurrent::indicator::unchecked { + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/M_icon_red.png") +} +QRadioButton#instancecurrent::indicator::unchecked { + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/I_icon_red.png") +} +QRadioButton#replicatorcurrent::indicator::unchecked { + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/R_icon_red.png") +} + +QRadioButton#mesh::indicator::checked { + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/M_icon_green.png") +} +QRadioButton#instance::indicator::checked { + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/I_icon_green.png") +} +QRadioButton#replicator::indicator::checked { + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/R_icon_green.png") +} + +QRadioButton#meshcurrent::indicator::checked { + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/M_icon_blue.png"); +} +QRadioButton#instancecurrent::indicator::checked { + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/I_icon_blue.png"); +} +QRadioButton#replicatorcurrent::indicator::checked { + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/R_icon_blue.png"); +} + +QCheckBox { + spacing: 5px; +} + +QCheckBox::indicator { + background-color: #424242; + width: 15px; + height: 15px; +} + +QCheckBox::indicator:checked, QGroupBox::indicator:checked{ + background-color: #424242; + image: url("D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool/layout_tool/assets/check.png") +} diff --git a/layout_tool/ui/main.py b/layout_tool/ui/main.py index adc1114..c29e4d1 100644 --- a/layout_tool/ui/main.py +++ b/layout_tool/ui/main.py @@ -2,8 +2,79 @@ import os from layout_tool.constants import WIDTH, HEIGHT from layout_tool import here -from PySide.QtGui import QWidget, QDesktopWidget, QVBoxLayout, QListWidget, QPushButton -from PySide.QtCore import Qt +from PySide.QtGui import * +from PySide.QtCore import * + +class ChildAsset(QFrame): + def __init__(self, name, count, type): + QFrame.__init__(self) + + # inputs = name, count, current_type + self.setObjectName("asset") + self.name = name + self.count = str(count) + self.current_type = type + self.collection_type = type + self.layout = QHBoxLayout() + self.layout.setContentsMargins(10,0,0,0) + self.name_label = QLabel(self.name) + self.name_label.setFixedWidth(150) + self.asset_count = QLabel(self.count) + self.asset_count.setFixedWidth(50) + self.setFixedSize(500,40) + self.mesh = QRadioButton() + self.mesh.setObjectName("mesh") + self.mesh.toggled.connect(self.get_collection_type) + self.instance = QRadioButton() + self.instance.setObjectName("instance") + self.instance.toggled.connect(self.get_collection_type) + self.replicator = QRadioButton() + self.replicator.setObjectName("replicator") + self.replicator.toggled.connect(self.get_collection_type) + # self.refresh_button = QPushButton() + # self.refresh_button.setFixedSize(30,30) + # self.refresh_button.setObjectName("refresh") + + # self.expand_button = QPushButton() + # self.expand_button.setFixedSize(30,30) + # self.expand_button.setObjectName("expand") + self.set_radio_buttons() + self.layout.addWidget(self.name_label) + self.layout.addWidget(self.asset_count) + self.layout.addStretch() + # self.layout.addWidget(self.refresh_button) + # self.layout.addStretch() + self.layout.addWidget(self.mesh) + self.layout.addWidget(self.instance) + self.layout.addWidget(self.replicator) + # self.layout.addWidget(self.expand_button) + + self.setLayout(self.layout) + + def set_radio_buttons(self): + if self.current_type == "mesh": + self.mesh.setChecked(True) + self.mesh.setObjectName("meshcurrent") + elif self.current_type == "instance": + self.instance.setChecked(True) + self.instance.setObjectName("instancecurrent") + elif self.current_type == "replicator": + self.replicator.setChecked(True) + self.replicator.setObjectName("replicatorcurrent") + elif self.current_type == "position": + self.setObjectName("emptyasset") + + def get_collection_type(self): + button = self.sender() + if button.isChecked(): + if button.objectName().endswith("current"): + self.collection_type = button.objectName()[:-7] + else: + self.collection_type = button.objectName() + + def get_changes(self): + if self.current_type != self.collection_type: + return [self.name, self.current_type, self.collection_type] class View(QWidget): @@ -11,7 +82,9 @@ class View(QWidget): super(View, self).__init__(parent) self.controller = controller - self.items = None + self.mesh_items = None + self.asset_items = None + self.child_assets = [] self.init_ui() self.resize(WIDTH, HEIGHT) @@ -20,23 +93,82 @@ class View(QWidget): def init_ui(self): self.setWindowFlags(Qt.Tool) - self.setLayout(QVBoxLayout()) + self.base_layout = QVBoxLayout() + self.setLayout(self.base_layout) - self.items_list = QListWidget() - self.layout().addWidget(self.items_list) + self.meshes_label = QLabel("Meshes") + self.parent_asset_label = QLabel("OfficeA_GRP") + self.parent_asset_label.setObjectName("title") + self.parent_asset_label.setAlignment(Qt.AlignCenter) + self.base_layout.addWidget(self.parent_asset_label) - self.execute_button = QPushButton() - self.execute_button.setText("Execute") - self.layout().addWidget(self.execute_button) + self.mesh_layout = QVBoxLayout() + self.meshes_label = QLabel("Meshes") - def clear(self): - self.items = None - self.items_list.clear() + self.mesh_list_widget = QListWidget() + self.mesh_list_widget.setMaximumHeight(250) + self.mesh_list_widget.setFocusPolicy(Qt.NoFocus) + self.mesh_layout.addWidget(self.meshes_label) + self.mesh_layout.addWidget(self.mesh_list_widget) + self.mesh_list_widget.setSelectionMode(QAbstractItemView.MultiSelection) + + #------------------------------------------------------------- + #Assetize BAR + + self.assetize_layout_01 = QHBoxLayout() + self.assetize_layout_02 = QHBoxLayout() + self.asset_name_label = QLabel("Asset Name:") + self.asset_name_edit = QLineEdit() + self.asset_name_edit.setPlaceholderText("e.g ChairA") + self.merge = QCheckBox("Merge Meshes:") + self.merge.setLayoutDirection(Qt.RightToLeft) + self.pivot_label = QLabel("Pivot Position:") + self.pivot_combo = QComboBox() + self.pivot_combo.addItems(["Keep", "Bottom", "Center"]) + self.collection_type_label = QLabel("Collection Type:") + self.collection_type_combo = QComboBox() + self.collection_type_combo.addItems(["Mesh", "Instance", "Replicator"]) + self.keep_original = QCheckBox("Keep Original:") + self.keep_original.setLayoutDirection(Qt.RightToLeft) + self.assetize_button = QPushButton("Assetize") + self.assetize_button.setFixedWidth(220) + self.assetize_button.setObjectName("button") + self.assetize_button.clicked.connect(self.get_assetize_values) + self.assetize_layout_01.addWidget(self.asset_name_label) + self.assetize_layout_01.addWidget(self.asset_name_edit) + self.assetize_layout_01.addWidget(self.merge) + self.assetize_layout_01.addWidget(self.pivot_label) + self.assetize_layout_01.addWidget(self.pivot_combo) + self.assetize_layout_02.addWidget(self.collection_type_label) + self.assetize_layout_02.addWidget(self.collection_type_combo) + self.assetize_layout_02.addWidget(self.keep_original) + self.assetize_layout_02.addWidget(self.assetize_button) + + self.mesh_layout.addLayout(self.assetize_layout_01) + self.mesh_layout.addLayout(self.assetize_layout_02) - def load(self, items): - self.clear() - self.items = sorted(items, key=lambda k: k["name"]) - self.items_list.addItems([i["name"] for i in self.items]) + #------------------------------------------------------------- + #Child Assets + + self.child_assets_layout = QVBoxLayout() + self.child_assets_label = QLabel("Child Assets") + self.child_assets_layout.addWidget(self.child_assets_label) + + + self.apply_layout = QVBoxLayout() + self.apply_layout.addStretch() + self.apply_button = QPushButton("Apply Changes") + self.apply_button.setObjectName("button") + self.apply_layout.addWidget(self.apply_button) + self.export_button = QPushButton("Export " + "OfficeA") + self.export_button.setObjectName("button") + self.apply_layout.addWidget(self.export_button) + self.apply_button.clicked.connect(self.controller.refresh) + #------------------------------------------------------------- + + self.base_layout.addLayout(self.mesh_layout) + self.base_layout.addLayout(self.child_assets_layout) + self.base_layout.addLayout(self.apply_layout) def center(self): geometry = self.frameGeometry() @@ -48,3 +180,41 @@ class View(QWidget): with open(os.path.join(here, "assets", "stylesheet.css"), "r") as f_stylesheet: stylesheet = str(f_stylesheet.read()) self.setStyleSheet(stylesheet) + + def clear(self): + self.mesh_items = None + self.asset_items = None + self.mesh_list_widget.clear() + for each in self.child_assets: + self.child_assets_layout.removeWidget(each) + each.deleteLater() + + def load_meshes(self, items): + self.mesh_items = sorted(items) + self.mesh_list_widget.addItems(self.mesh_items) + + def get_assetize_values(self): + name = self.asset_name_edit.text() + collection_type = self.collection_type_combo.currentText() + pivot = self.pivot_combo.currentText() + merge = self.merge.isChecked() + keep = self.keep_original.isChecked() + assetize_info = [name, collection_type, pivot, merge, keep] + print assetize_info + + + def load_child_assets(self, items): + self.child_assets = [] + self.asset_items = sorted(items, key=lambda k: k["Name"]) + for each in self.asset_items: + child_asset = ChildAsset(each["Name"], each["Count"], each["Type"]) + self.child_assets_layout.addWidget(child_asset) + self.child_assets.append(child_asset) + + def get_changes(self): + changes = [] + for each in self.child_assets: + asset_change = each.get_changes() + if asset_change is not None: + changes.append(each.get_changes()) + return changes \ No newline at end of file -- GitLab From 56e488c0a6a6d711872392ab990c199cdfc23a67 Mon Sep 17 00:00:00 2001 From: Lisa George-Gilroy <lisa@blinkink.co.uk> Date: Mon, 9 Aug 2021 19:03:12 +0100 Subject: [PATCH 4/5] =?UTF-8?q?=F0=9F=9A=A7=20Connecting=20controller=20to?= =?UTF-8?q?=20view=20and=20model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- layout_tool/app.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/layout_tool/app.py b/layout_tool/app.py index f6b8d7b..88954f0 100644 --- a/layout_tool/app.py +++ b/layout_tool/app.py @@ -1,7 +1,8 @@ #!/usr/bin/python from .ui import View from .constants import NAME, DISPLAY_NAME -import api.scene +from api.scene import LayoutManagerModel +from api.scene import get_parent_window class LayoutTool: @@ -9,21 +10,24 @@ class LayoutTool: display_name = DISPLAY_NAME def __init__(self): - items = self.get_scene_items() + # items = self.get_scene_items() + self.model = LayoutManagerModel("OfficeA_GRP") + group_name = self.model.asset_group.name + + parent = self.get_parent_window() self.view = View(parent, self) - self.view.load(items) + self.view.load_meshes(self.model.get_meshes()) + self.view.load_child_assets(self.model.get_child_assets()) self.view.show() - @staticmethod - def get_scene_meshes(): - return api.scene.get_meshes() - - @staticmethod - def get_scene_items(): - return api.scene.get_items() + def refresh(self): + print self.view.get_changes() + self.view.clear() + self.view.load_meshes(self.model.get_meshes()) + self.view.load_child_assets(self.model.get_child_assets()) @staticmethod def get_parent_window(): - return api.scene.get_parent_window() + return get_parent_window() -- GitLab From 87df20f495dd432e2291df279ef145a3d3c4ad9c Mon Sep 17 00:00:00 2001 From: Lisa George-Gilroy <lisa@blinkink.co.uk> Date: Mon, 9 Aug 2021 19:04:17 +0100 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=9A=9A=20Update=20path=20for=20debugg?= =?UTF-8?q?ing=20in=20Modo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- misc/debug.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/debug.py b/misc/debug.py index 7e58b29..6f21ccf 100644 --- a/misc/debug.py +++ b/misc/debug.py @@ -1,6 +1,6 @@ import sys -path = "/mnt/horatius/Corentin/Local/Projects/Code/linux/blinkink/inkubator/modo-layout-tool" +path = "D:/Documents/BLINKINK/Scripts/Bip/modo-layout-tool" def delete_modules(starts_with): -- GitLab