From 0297fd15d7adccc30642ca08598ea562ae293242 Mon Sep 17 00:00:00 2001 From: tim Date: Sun, 15 Sep 2024 14:11:05 -0400 Subject: [PATCH] Separated BimToolUI, added Draw wall icon Separated BimToolUI into AddElementUI and ModifySelectedUI classes, added Draw wall icon --- .../bonsai/bim/data/icons/dm_3-point_arc.png | Bin 0 -> 597 bytes .../bonsai/bim/data/icons/dm_add_bend.png | Bin 0 -> 357 bytes .../bim/data/icons/dm_add_transition.png | Bin 0 -> 372 bytes src/bonsai/bonsai/bim/data/icons/dm_apply.png | Bin 0 -> 508 bytes .../bonsai/bim/data/icons/dm_apply_axis.png | Bin 0 -> 398 bytes .../bim/data/icons/dm_apply_profile.png | Bin 0 -> 414 bytes .../bonsai/bim/data/icons/dm_circle.png | Bin 0 -> 880 bytes .../data/icons/dm_connect_mep_elements.png | Bin 0 -> 319 bytes src/bonsai/bonsai/bim/data/icons/dm_draw.png | Bin 0 -> 797 bytes .../bim/data/icons/dm_edit_railing_path.png | Bin 0 -> 392 bytes .../bim/data/icons/dm_edit_roof_path.png | Bin 0 -> 486 bytes .../bonsai/bim/data/icons/dm_fillet.png | Bin 0 -> 413 bytes src/bonsai/bonsai/bim/data/icons/dm_join.png | Bin 0 -> 215 bytes .../bonsai/bim/data/icons/dm_offset.png | Bin 0 -> 184 bytes .../bonsai/bim/data/icons/dm_rectangle.png | Bin 0 -> 211 bytes .../data/icons/dm_set_gable_roof_angle.png | Bin 0 -> 435 bytes .../bim/data/icons/dm_show_openings.png | Bin 0 -> 821 bytes .../bonsai/bim/data/icons/lm_3-point_arc.png | Bin 0 -> 655 bytes .../bonsai/bim/data/icons/lm_add_bend.png | Bin 0 -> 364 bytes .../bim/data/icons/lm_add_transition.png | Bin 0 -> 381 bytes src/bonsai/bonsai/bim/data/icons/lm_apply.png | Bin 0 -> 506 bytes .../bonsai/bim/data/icons/lm_apply_axis.png | Bin 0 -> 399 bytes .../bim/data/icons/lm_apply_profile.png | Bin 0 -> 415 bytes .../bonsai/bim/data/icons/lm_circle.png | Bin 0 -> 889 bytes .../data/icons/lm_connect_mep_elements.png | Bin 0 -> 378 bytes src/bonsai/bonsai/bim/data/icons/lm_draw.png | Bin 0 -> 874 bytes .../bim/data/icons/lm_edit_railing_path.png | Bin 0 -> 386 bytes .../bim/data/icons/lm_edit_roof_path.png | Bin 0 -> 534 bytes .../bonsai/bim/data/icons/lm_fillet.png | Bin 0 -> 415 bytes src/bonsai/bonsai/bim/data/icons/lm_join.png | Bin 0 -> 217 bytes .../bonsai/bim/data/icons/lm_offset.png | Bin 0 -> 190 bytes .../bonsai/bim/data/icons/lm_rectangle.png | Bin 0 -> 212 bytes .../data/icons/lm_set_gable_roof_angle.png | Bin 0 -> 444 bytes .../bim/data/icons/lm_show_openings.png | Bin 0 -> 829 bytes .../bonsai/bim/module/model/workspace.py | 547 ++++-------------- src/bonsai/scripts/bonsai_icons.svg | 90 +-- 36 files changed, 149 insertions(+), 488 deletions(-) create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_3-point_arc.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_add_bend.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_add_transition.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_apply.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_apply_axis.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_apply_profile.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_circle.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_connect_mep_elements.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_draw.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_edit_railing_path.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_edit_roof_path.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_fillet.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_join.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_offset.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_rectangle.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_set_gable_roof_angle.png create mode 100644 src/bonsai/bonsai/bim/data/icons/dm_show_openings.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_3-point_arc.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_add_bend.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_add_transition.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_apply.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_apply_axis.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_apply_profile.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_circle.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_connect_mep_elements.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_draw.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_edit_railing_path.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_edit_roof_path.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_fillet.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_join.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_offset.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_rectangle.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_set_gable_roof_angle.png create mode 100644 src/bonsai/bonsai/bim/data/icons/lm_show_openings.png diff --git a/src/bonsai/bonsai/bim/data/icons/dm_3-point_arc.png b/src/bonsai/bonsai/bim/data/icons/dm_3-point_arc.png new file mode 100644 index 0000000000000000000000000000000000000000..2344f2485117f9d58a4a77203d9e347a52887583 GIT binary patch literal 597 zcmV-b0;>IqP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10pdwS zK~z|U?Uy}k6j2n0pR?mEtB8#swM8Hhl2kUb5=4ak7ZytJGaVMfdurjS^Zx>53 zpd=A1o6VP{MOqtEM0b;YEp~#F@$Swt>)i$Mg$u)b&z$>k=iHAmNeokkp^grmNjzsw zh4}^m_y}yKycFWj18VveYLgy+~Nc&>Gjo z@|Se1pBk84ehJhQPJjw`U7=n8goNqIDbu)PpJ&2>0JJj~SAlN{=L*Hk*9Qimv04MM znzE+`1`uPcr;I;tR$f-Y$>5f1 literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/dm_add_bend.png b/src/bonsai/bonsai/bim/data/icons/dm_add_bend.png new file mode 100644 index 0000000000000000000000000000000000000000..0483124069ee6f2d8df5ebbf26813a2118e14119 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4j!ywFfJby(BP*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IXprTKnE{-7)t#7Yy|wZw|w;e>`uhd|NcwMol&-MRCwuH5|Oxvo`7 zJxhc+9FFbUWomPP8HkFmai&PBNiBC|`EyYG1B0+b*xDx12|GAc-#xJuyFK0aD%+0? z`}(N2lS)eO#;=#T+K?l|e8YS literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/dm_add_transition.png b/src/bonsai/bonsai/bim/data/icons/dm_add_transition.png new file mode 100644 index 0000000000000000000000000000000000000000..6f020d1dfa7778f27727f2ea9aa4ebf31b5262c0 GIT binary patch literal 372 zcmV-)0gL{LP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10Rc%w zK~z|U?U%7?0znXlzd7$L0=_^Bdk;@i33&+Z@&-a)z%EC^!CD9w7B<@E5%L^CiICn` zus!3XNRU7Z?{*I_ko{p{n}6nmo!OlgRi#b^wPyDKKv-2ES!dUT`5d?d(8OE@K*$2N z`G}Ai&?@V90+9EI8;-IB`nEBw0OU2hqIq}(83PU5OkmJVpj0<`Ut_$NT2n@G0l z_lBaDLaMzDJ%9)B03N^tcz}Sf_wDS`#E2$FP=+YGDgjDKd*+2aib1Bphbw@%d`wOw znf@NhiVmetHK6fiLpQnw?t#5c4Cf+Lo{pNB6^E#U@?6&MbOcrCPqg9x2KWTz7(7>N SGdrpP0000pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10f|XO zK~z|U?UubS192F~KhL!#5w;RGF^EK4%wji~CH@4Hw?tEIDxxYRB$)gSVr4@70fOtI zF^ECLW)Kq9J_c>lo?czgOAYrOpS$NipL>4y@)K31kue%d_XIovPvAcY_n(JhUn_8kkz-ndUPi9>w88=7;sVlIrhhNC-#(ld5_)hE!`I}D6| z^bv0rTJ0pnjE8LDk(KFMa9aV5EN4-TTFRd!#Egd! zIdTgJkXkz;$s}fh4NLhML&qrSJs2lIr$v94aC*`S{7ZqN#5}NODL(-(Kzk+I`JFo! zs3B1q7jVY{MTu(5QKHv1_VPIX5^6ZL30NP@(yQhQUY9^oVjY+R-hezRt8T_#9>+^i y(R9Ahj$t(EKpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10UJp~ zK~z|U?Uyl5!$1&4|0m`e6fPq;K`1~nhoH$dLS$Qt1Vy+8O%9O)3MeR(jVLK{4u?+> zQH1r_EI~3-cBF0oXlI^Qf7V_~LYHyWX?FmLm7pu^qaiPKdi%5^t;!2XkJc8Q-7yGY zyNfR%o_)Pq*K5hWuj3rl!0sW{E-Z6lQB17-PZt)&1j}4jzH<*mfMyfcMB{Y8cKa^? zcm-DPA;s#;R1ZMnPtsR9^d|i46X@In5g-CYfCvx)OaQtvqZ_CDHlQ1)bY&I{0B8;+ z!+im^H8i)AlTN{prr*gl{(|*z~Ub8nhoJtpGp< s&>x|X<5vLdZ(0gy+EUNwJNVb}CuJ?A{v%FbnE(I)07*qoM6N<$f&eO=5dZ)H literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/dm_apply_profile.png b/src/bonsai/bonsai/bim/data/icons/dm_apply_profile.png new file mode 100644 index 0000000000000000000000000000000000000000..2d3a40e104d924ab3c345aed84c89f7a20b5081f GIT binary patch literal 414 zcmV;P0b%}$P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10V_#F zK~z|U?Uyl1#6T2=zZc^X?8Q=8uwB-|B4@BuwDbg`lLZSGwDJgwjW@8du(7c;BepAh z0WYwdXR%IXoh;c9LJH@HK>p0j`#-{Cl8CC(rJ_#Lf!LjhO~=4yd6^z-Z**6uvAhrW zP<>vuuDwfH0QivwdGyO8TPJ*;Fr7er?O$gX(ZR1*MO7g)V={B=d|L-^=>?fl=R2Q) z0PuGRJ&8>lZ4_?Ws{wKjAo^+&wvuFe5AjQ3t9HV+pFrm`5C8%|00;m9pa2j%OvIjT zwH+w-yf4-qc>thKXnfc<07UyBH_lal4^+L)8soItJOHes#TgJCh&88P)!OVqx34C3 z8q0^-VJ0UfOa0{lkborKE&2K@Pz!*Zjd{NkDW3)CzyCY_20+B3$TZjm3;+NC07*qo IM6N<$f_^2ZrvLx| literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/dm_circle.png b/src/bonsai/bonsai/bim/data/icons/dm_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..8c5444dde1e5a8213178becba6319e37dc8aee49 GIT binary patch literal 880 zcmV-$1CRWPP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10{uxu zK~z|U#h1%ZQ&AAce{(75USb4sp%OKwtqML9Npz#jRtRkTHxR_OE@(?l&_9D6qIIVW z;}aiI5n7F!h%OK|=*mPE_@0?0#R$aH!5(pw>FZH4l2liB1_X7|mkQ`T5Cs;*)|AR9yZ$N%8wNfwp;i*;N zDlb5+&bkS}RZA%>uk#cIO^$+EFisNSJeO9ttDOQx@A*fhuTcSRa^fOM>ohD+z!XEZQ!-^2AE zn$oYR^p$H$%l?Y>K;jW9$3dRdOs(>mT<&l=a;WxUG85@WNCJDSq<)7;ME&uJO2CQ& z4Dj^jLs)hgr3;}2*a0Z{r`bHB53oo(&v{)1{0rOg*YO{5$Sjjx#2!8X0000yKl6e`6Yy)oyHaUBaZZ;h@C)ie07; zdMbM*9tw1ORB~7=R!y8eKgxlrF6)SO-0WGK;}759+~e}iHmNtgCZRId@f2swq4d%p zBKx;9m2mlUMwD{;b4n!LH=FarxneC_ta#e~wuOJVxfU?Ill#E_KtMG$W6S9)Kz}iK My85}Sb4q9e0H-c_Gynhq literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/dm_draw.png b/src/bonsai/bonsai/bim/data/icons/dm_draw.png new file mode 100644 index 0000000000000000000000000000000000000000..84d60b656bbaa33541dc9ceaf9de6a4cf1360914 GIT binary patch literal 797 zcmV+&1LFLNP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10;)+w zK~z|U#h1%Z6Hye#f2Z;gSE6n)QA{AFQ%qdAHu_Jnalt|p79d0s=oBn{1i|<~<0FQZ zCdU5(m8}aCWk%vc*|-#yXk5@5j*HF=L+Q}zw4`5hb2DeoIp3Fa?wxx_RF!5T)>L+& zWj~V2irJ6w95~>Zz9Dj6z!&o$B6K0b(ZyPniO~kip0T#4<-g?^Gb)77^SIMHo~g^VG{%%UK{R$?J&Bg>?T&>(&MB&HoTY zuqW?A%+h#faYxRu0>n12q0EO?>xw9}UevSG>w$U02oO6tfl9tc@)DE}w6vbn)6<1Y zud5zLVwqzQk-XIN#UOI1vIxaW-T-bzCzoM0vJdxi3KUQxm)VHq0OK0ZRQW6i2oTFm z*GI17YGmht4xke_6k32-sTp7@Iyn<+j*oM|<3nFw(nd}}~^Yl>7!tC5{4v(5nBzVXPh zzbdm2xdFaiAmJ+@GOtGFW`#HF&Tz5e%)f!PN~wGmkZ=`HZfiU<7Rq<~&Jc8W@KqqD zJ;9rW0`LWRsR?hvH3Z&qES9OjFG{6aLuD1wPY_$9W5d={3!4%09{~;ne}M0M3TPIZ b{&)NzbBOz7T{QP|00000NkvXXu0mjfl5JqY literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/dm_edit_railing_path.png b/src/bonsai/bonsai/bim/data/icons/dm_edit_railing_path.png new file mode 100644 index 0000000000000000000000000000000000000000..8c909b4256e4adec40384644132ac9a88681702e GIT binary patch literal 392 zcmV;30eAk1P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10ToF^ zK~z|U?bfkM!%!5)@&7qqU%b*o=QDfC0Eitbo4~2JXx0ac14<@;f-Oj2en0CFq^{k60BQPc z>nD%-N4Yup0v6?NHzLs`?-bEblI+PgdhhcCyu(>0ao1Bj1~}~lJJka+c|)>8pzZC5 zz5*9zmlp$weOPqdoo9GCz=9i2Zk|u8uEjZk-GiL{9P+=|s8)bQy%A8|l1#>vkIeL# m#Q+k1N&_GO0w4gI27CiP*h`%&cKvVw0000@P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10dq-2 zK~z|U-Ivcw!$1&+zbSni$w3qm+DoCnPbxw!MkzJW9>n-Q3SJZh5z)Ml>cJJ)e>741_?86tJ<2zv6GR=S{`AK{L(VmnS<3_7U)c@ZE zfFa0mO}_#dMFXhsb1AdOs%}tK&4Kf(d(0iCe)YnZ_82oMtISuO&ec-U&dAmX*;RJZ8oWHZ2 zi6DgnEP!L+71#%EfuJKh1fag)j;i-G6vB56tXl0pabhEYwyhQnVFj=RnIH%YfKP<; zh7eV?B&ELlypS?W9X18*NvUs;83Cy!(T$yyI&E$*DGk*BO-ilTv$#pA!KO7S4VBZT c?D~5C4JROw6}Lwb&Hw-a07*qoM6N<$f=MCI^Z)<= literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/dm_fillet.png b/src/bonsai/bonsai/bim/data/icons/dm_fillet.png new file mode 100644 index 0000000000000000000000000000000000000000..234752ae9d2c845f307d366908fa1b96cf0908a2 GIT binary patch literal 413 zcmV;O0b>4%P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10V+vE zK~z|U?UcPr13?r<&t0O8b~cK3f`x<>T3DsX6Qt5dQOObnmsG*WNM#^e`Urwx;ieQD z!52`Ffcsg5fIG!z*IhQv-0sdWbI!fVn$94zLGo z6xyfgGc?SId#A`E;GodrvH}+O_faweJ1GlZMD8Q7Y1lz_3$|4iJhy;N!w!i(0Bg?F z3^4)SLGTRU?`jRdiU=${f_dBZ2so8%jDmBuqPHSIH!?e5n4#XtY5NbR3pEEfWx%-v zh{H1=ec>vEL&irmub%7lsK!;oGX;plW76+@h6R^Z!m|ZL*U2YpMz8e=U~OmMzH0aq z0qv&J#GYyvU^|tqH$LhX*!-L5@anT}fm*@~cmXfq1-!s7#28eB+YYSv00000NkvXX Hu0mjfBnhnn literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/dm_join.png b/src/bonsai/bonsai/bim/data/icons/dm_join.png new file mode 100644 index 0000000000000000000000000000000000000000..235f85935db44f16a5e8b33f7d76c7681680d00e GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4j!ywFfJby(BP*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IXprRB{7srr@*5p6`|JxsSU|Pnw zwe||*V!i|*IH)@DOUm8GpYPA#ynKt%!Z~4{&xG1V3oagHEN0j%<7mKp;g(=eg_lza zr(2Xo!hzz0E12D64PG?_viDdefDDl+JpdA7V0dUMGOJHp^AXTK22WQ%mvv4FO#nDZ BN=yI% literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/dm_offset.png b/src/bonsai/bonsai/bim/data/icons/dm_offset.png new file mode 100644 index 0000000000000000000000000000000000000000..5b4ffb4d736a30f65ab792aea59672bff97d8f92 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4j!ywFfJby(BP*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IXpdwdK7srr@*0<*t3Nk42usAr` zmvsE$)6~e25YR8EHrqM7_l(Z;H|;xY=Ls#=|C@7vWBmV~eH=iINZQ@O1_YNR%E}!R#h$@Twt@ zy~iry3gcovgpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10YFJa zK~z|U?bWeMLQxdQ@$XM82!o(0T6Bu2M?*C9H&kPd&Ow7iOVm?DbPA#b3;Guvn*1Mx zhyr~GZbkG51TCd@ntFr1qR`h{-Wl&X_udbOdpR;QqKrhOw*#W(j@p7}Ohvlgn(fpF zf89Ke4$L4sV{zeHUVbeKz-O#tG}X#i)hSI!0RTuMatwNHdG6+KHfWSzpiXIye(xBO z4JwN*y3O1SSJYZV|iYRBl26_y>CK z3Z_e7Js{o3xF9*<+EVc)6aavbXdPvdPJ!8gk|(5`IpwQR06yfdG*9xa3flgrq8=*1 zzs4(U@oqIldN}tlv%s8k174RgoqWNKVHS)Okx#=I5Y{h91NTE~8Q@{KF!Bz>fEW-1 dVn7Ut0UzFtZxQj*0{#F1002ovPDHLkV1gLUsp9|u literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/dm_show_openings.png b/src/bonsai/bonsai/bim/data/icons/dm_show_openings.png new file mode 100644 index 0000000000000000000000000000000000000000..145bcfa38e20f3e8559595b18279f73d69e68d21 GIT binary patch literal 821 zcmV-51Iqk~P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10>Vi| zK~z|U?UzkRR8bVif9IKoS#4TGX%K~FXl9xk6x2p6%XV$-YsgeENyBAdB|`}f2nRe8LB9y)d*gY%BmmYC zHmNA81uo$G%PF9JR--a=Gh-0}uv&>`Bc(tMus$GKm{d^v%gwdJTlpO_fXzw1nxzid z9-y(e#*}b%Up)7N004-? z|IlMIugiqC7B)@Tzp}-7GhhaPe+;j=4 zRy(o!EQ1=P`ULo=H9%G85bw-Ae4W(TDez#9FDN}R43aE%y1&@zS5ObE^A7S|XGH?g zQu~}fLs4Fx!(DAINt$0<#gM>dn}bn9xFtfazwkv{v4U((cvaI)Vf{<;lyDAVVu8>f zK*hj!4q2S!%?cj`|K*nQ(QODANp5P&|#Gd9MZ;#o3gZ(s0dx zv0xu~e4fuhUVbzA0(C0Pk*p-k_ekb<4|JI5aL%v`r~rNjVLXY#95c-hf94QCC$to! z0}V$W(iWprt%O2+A2bSRcWYFZW(GEv2i%G~Pcsgb9B-jXpdQ6RFYA7#QC^a@L>Ci} zMIguSaY}^P6G;F}744^$;HRe003xYnZ$y6qoell`6+U3}00000NkvXXu0mjfee+Lf literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/lm_3-point_arc.png b/src/bonsai/bonsai/bim/data/icons/lm_3-point_arc.png new file mode 100644 index 0000000000000000000000000000000000000000..970710b2d803ca9c218289fa65947e06a5fa25a4 GIT binary patch literal 655 zcmV;A0&x9_P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10vt(1 zK~z|U?Uzq$6Hye!fA_^o@ef24p`SnyT?pAoq)28$K7k8K6HP4?7lL4+3pYg+1Xp%v zrH#cP>Z&d!;~%Qx-i`eLUAQTND3X-Sb(1NRNt_N7U$XJQz|48)-FtZ4xpPNUm2tw1 zH9K%1xN%)K_9#5h6RQRQRP~cF=3|)iegA@pT0<>B!oQ2eQVmW3Tkaa%&g^X^JodQUYFZ`1`i3Ru<(+ZE}o%7ny(a|e~XL1>v`V6I6<@q z+-|}?Xzl4u0IAQMM$IhfJaDADyeT4|d-ST)KrSwMAWU_!UOjGB%FB-9XrWNJ9bI=_ z_pakO?fv4Ut^uvC@0@$Ibt~=u0Crok$iDHd8c@_oy>dNHBg1?RbGh6^Hk)k&uT}M3 zPhgRf3K!pAp8Acir*y8dJt#)ulm41B$+X-8i<=Q_cS&QB*A|Jwu>02 pi~i(TH9*Xa8NgZ}NQ$x7z#sP&1U$I66Au6Y002ovPDHLkV1nOUB76V< literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/lm_add_bend.png b/src/bonsai/bonsai/bim/data/icons/lm_add_bend.png new file mode 100644 index 0000000000000000000000000000000000000000..daf84e07394b61d91b996b3d295aa42cda09b111 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4j!ywFfJby(BP*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IXprW6iE{-7)t#7aI=Q|i6!uH|4 zNl>@=2RXTg-B%L?n77XExpzp~<9&+YHKC0WM-x&uS2D={k`#F4-{Jhe==_y0U+(?O ztG+Z(TV-LV0>{2t3Vq3p4F09x(*8rW6%?r z_3-UX9mZ;o*V|X07n;zJ+3LG_r+*6L4d*3irp>hX{wH~Wbx%y^*?(WIioWW5;kt&g zOmNo2zt;b49VRqvvaF9w|8U7rI<3;n?R|T8`SDvD?g`2=1}S+Qu$~(e0t^HOPgg&e IbxsLQ0Fr@}761SM literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/lm_add_transition.png b/src/bonsai/bonsai/bim/data/icons/lm_add_transition.png new file mode 100644 index 0000000000000000000000000000000000000000..12b8b1fdaf46a54e8119c2f97562497b8c4dc2a9 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4j!ywFfJby(BP*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IX1_nkhPZ!6Kh}O5$HfAve3b>ws zv#$36yGw^y*~&F7S8iT2YVA_e_`!UQaW_j4%cL~sE|y919&hb`Fs}@{5goBISy@qv zCB{pX1eSzU@pC3YYu&#RqtKvi)ahNtAdkbas|_ zHIu^8+f#o^SuwCbV328GE?`LdHSP3{VD~SQ8vnz^zpEPiIaKG*U-LPfga5#>E&n5q zamtwZM~7~!W2ukdG+FgS^sUI>HLQ!hpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10f$LM zK~z|U?Up?+1W^<~&zlg7?>g2k^Uwjsdz7<$6?{% zaR$DM>DUag>`1>reh5Qv$(yG@M`;rqBzGtMz<(3~kW73I)kR188F&TSO4I&V?pvUY zgd>8(eG7o+b`*-i#$Fu0zl3VpD~LD`CZKC!;eiAIG`X_`%mN=k4%LM)V=oThTTs%J wvDz?m4I1CR2@9@B;5Vb@e?*Z$Bv5mKPdit&CL7mNQvd(}07*qoM6N<$g3a&I_5c6? literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/lm_apply_axis.png b/src/bonsai/bonsai/bim/data/icons/lm_apply_axis.png new file mode 100644 index 0000000000000000000000000000000000000000..8f9725463b9ee092780b03013a48612b63d9986b GIT binary patch literal 399 zcmV;A0dW3_P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10USw0 zK~z|U?Uyl5!$1&4-)wRY3SYx1Kr)9wv117#u0Wd-u7EIBNWmdeKoJTqL6LL74hzy2J)-AJi30eF z7ld_?9r;an&fSEanE<)jK~*~!O{p~H+|qx$Xv#TFsg^#t2NFP^34_=<9oTM<2M~7( z?{6{1y6gA{7>ASeEyunI|M~<5_do(j00|%gBmfgY+PaW-n(f;_+G!?jT|@(*eucW( zz5uA3p?+n_(fM=nFS?x?Z5!@=KpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10W3*G zK~z|U?Uyl5!$1&4-)wRPdc+B6qfk)z3^c(BPJzS;probZ0>lXc#0_XDXlN*?(gVr` zxB&LhU<1=%cblSs$&nag0g2zN0& z{I;&+EBOKNr3J#B)tw{@7jpnQ=@QJD?aU6)&&mRTK5KM+;%rtTjc#55YnH^}>34wE zGvEP=A+#iMSnHt3(!K&fCnS;gI%X?L(m8Y=^RntBYfzTK04D%G%m$`p7J%}WJFflh_!EshPWUmoBk=$L002ov JPDHLkV1nTsu8#l! literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/lm_circle.png b/src/bonsai/bonsai/bim/data/icons/lm_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..02e5dfdd2a6940c993f3c109c7c2dec78de069d4 GIT binary patch literal 889 zcmV-<1BU#GP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10|rS% zK~z|U#h1%ZQ$ZAmzjG->7siFg_`rpas7u8cMoDy|ODaYemhve569^b}B9H~H7YLEL~((*L6=5>&T-R}J97&ZT4a`Y&iVbmxp&SzGoq@jz>az0FsEdBizC&bsZs=IqKh-_J1H1 zIY(f_E#4eJ+j?&U7aXi3Bpa)<@%UH025Y7As1p$OXJ4qWP5#3p`cPg?S zbpSk*_nHN0?HdI?`NAp@Zk7swdfiypwu>Ol1dcBKsy>pSLe$H4^Es4b~)wrrszSx@vh9*-z=Bol@(I!J|i&+nOW)~r&pGh4}eHFy$6 z2^Y?jliHeo8t_{FLn%KIIXBm#bk1L~#_qnrNG<3{3Fa^HLI>tDhvF|L4Zw9^cX7V* z5yK^orw0~{T+HQE63zQS!?}LG33MxpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10S8G$ zK~z|U?Uy}H!$1&5zYl^a{d0=c$OXOa#&jtxiclbEI1ptbq%_D9Z~*TCDBPsu6f14( z2u+$4G=YsZiWRY2&+K~|&CF^kA{g_WjY%tUQJk*W#=m*A_QP}63+l0e~UkjF>Kp5^NFkL`rKOk0^mwS-koz# zf90rE;0JuZgWvk>1Qmgya5VvI?P3UAO#r~Ph%|@70j0OV7&9H3JNg(h{0o9W5cu~3 YTfw=2iXc1QPyhe`07*qoM6N<$f_uxDb^rhX literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/lm_draw.png b/src/bonsai/bonsai/bim/data/icons/lm_draw.png new file mode 100644 index 0000000000000000000000000000000000000000..4b8a6717c7a03936be0eb30ac5b802629e543a92 GIT binary patch literal 874 zcmV-w1C{)VP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10{2No zK~z|U#g|KL6IT?5zvFQ_;9Uf(iXashWktGBbsIypw*x8L-n^!|D2I3Ks`pV_0qoYU4*1d_vkORUxh)S{7oZ0G9U-VEhW$LaLjzQ?l_r8>$eI z<0!8P!1CT%}<>Y%Kc~ zaK1(Pzob(;uuOGHnIoZP=&1H=acaS{i``-iZX} z0NpswKa2ZB5&+A4LzuozU=AQ4(5HXTM+usqh8ARxVVp~Du7esZUT!9e?7#}m!R)yF zV)Jd8hz?lbjbNNgY%Y$=A3xvI)3e@joOPX@oo^;4CgvJRmvq3!vZI)io1+sNEPMx$ z$z+CI*L^WJH}_MNx~>BjcqcK2lbbUnzZmOnsULx9cVcVPN#&N93qVaan?(Q{*^#De z(~>JwOCcMUUpU*}-=CS8nQ<#=*LBwcn3>z#+uK>mXEK@j$;rvtIsiW0yamcG@#B;R z$Ik%F&d#25U3Y&2jpw?qSNRf#;Z5MPdVrKZj%{uFTDjus*z0Pd`WBeB#auh0TyeBE zQ7)H9&1`Gs1N^e^)6Lqv<2VN@Yib|DI32hkzwpib$*HNSXTajY)7RJc5r zK>IJfiCsLMz8Hq#)sBvi*HM~SH=@;uHUD?~Kfi_pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10S`$; zK~z|U?bb0$#6TFu@&A{M9>7|#k?p*IEa*XY(G8x%##5-6P0%BF02cz=+bLV9*r=Ug zBQeiLP*>t6OG29Y+If8M2Lr>HB)XiS({>N=01xm0z%{+l&W4+q^(!Q2iqg#4>0S?~ z-O}8LZgp^eRb60x(0Fl9DUdlrZ6h6*1_LEPbwJJez5*3H1U&vaRWNC*_%9$_ebD~+ z?&qP!gB)zdlED@#)=Ia?y(K6x$${N~PRe_NX{!K5=@e+N#AaWQ%%aHv%zsKf gzymzM1G)x$0-g#|+8jXL&Hw-a07*qoM6N<$f@Zsb%7 literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/lm_edit_roof_path.png b/src/bonsai/bonsai/bim/data/icons/lm_edit_roof_path.png new file mode 100644 index 0000000000000000000000000000000000000000..686a4e53ca1d10fef248d879196caf6ab13c6743 GIT binary patch literal 534 zcmV+x0_pvUP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10i#Jo zK~z|U-Ivc!!axwlzX2YC*Dx4kf)~@BhalJkeF7vVz|ET+i1+}Ahnn~h-NuV1Mi0if z@GZszkd!}Vr=^9&x$e%)Z>KZcZ%IUOOskaO>FQW0R=ELnkf5Z+cZ z;{rgltmNweRyyHra*<~K?I8hDjb>MoV%LoX;ZIh8N>+!WO;rI2p7{U((xgYfzp_fw z1WFr#bpSFTnAPQZa%P@HQFL7zKyuFM$$td^>4cX6;CbGi5Dl0a*4mypu1;p2pjFQX zu*>2&9(tY!00UzTh$t0;nMWehH7~yp+KQ>BAdcgqh|Gf4HCn9xnHGm7k zm7J#S22IxGy#SUF06s+Il!(5qwY@xXasx2)2*5dj zFA+IOYs^vrlHc4~d*+&sLIJiloMuD|0oc{;`#`7wG^3Um!U>S&hRXv%BH|RKS?=}) z^u)I6-CcW@KfokFswmB)inTGz7NyRZ1&Y!QFV(L9D@wJ`vyw%rJElsM<~MgtI`;GY Y52R~9Tvw4hlmGw#07*qoM6N<$f^Dqh2LJ#7 literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/lm_fillet.png b/src/bonsai/bonsai/bim/data/icons/lm_fillet.png new file mode 100644 index 0000000000000000000000000000000000000000..c29862e2166af6c21492736f4838ca653083b5bf GIT binary patch literal 415 zcmV;Q0bu@#P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10W3*G zK~z|U?UcPr!%!H8pEtFWZZ3*$f)}8JQwOi0lMc2;5vN{&I_vBmNYr8%EmTJ@K@hwG zaS^-$b*LntOA982V`D>0BkVRTZn6!=ybG9P3Ol$3X1B3{1Pop^1hV&7C0t=# z%qLNLUSr0jtY_D$9VDF?hQAxvX*{`gxzRGLLRpFP{85bt8%N}GtrRIEIHFm|`zh4W?)eL$z zcqM+gF}KQP#X$F2 zm1pPPX=VD+l9K*mkL`ph{=bjU-=fXHVCl<$!D9{MYll1PMXZ}voxXZHfMKn;oR05> z*KZg5{N57pc-m%fPR71(5?l-p0tYu5D_Ad3wwqXOqxr(?tB!~R_amJ?$2A;h$~&$& zv2Ial|0biQs&Mn(@9D7%c0RVMHR9X!m-l*WtiTGT`)zCjr*t>yXlp8&$IoAxb*l94 k?Qc0xgbf&&A*h1=lWoD}e{&vg0){+;r>mdKI;Vst0Q+9BhyVZp literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/data/icons/lm_show_openings.png b/src/bonsai/bonsai/bim/data/icons/lm_show_openings.png new file mode 100644 index 0000000000000000000000000000000000000000..68016af132fd3031958ad61262ab18d0979e415b GIT binary patch literal 829 zcmV-D1H$}?P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10?J85 zK~z|U?UzkRRACf`pL5MI%Oa>v;HoeUtugQD2nMYr5?r=X{KIt0tg&1ssI3a5{7FJX zw1O7muAoJkyTWGfB#C7%l9I|c5s|4m&S@p6IpfSY*2c5^?)lF9aKG=q=Uh=${%05) z*=%oNr@e)p{~SO-9BrJAw=ouPV>UBROP+`c+qYzly* zmHlGSq;Q7dZ%z>gj0NgnUS=vL0FG|rnWF}{3hWMx7G?xml6G@#sGPZ|0n82xMY#za z3{!Yjb*3ahgU8LihyWb7NYh1bh;S+@;lE=@l{(AK>vaLl4$4Kj18j?t_)_>)sIo55 zw|sHMWs-`K6yGb)AW9MNA%^0g70wsi8SEM+B`5#{ju0@$tr2hf^zl^x@RE0=@Tk^SkyrYKhYfkjF6;A2PtK zc2ZlO$@k?C*7O1Gal8Wxq{3H-YV;!+OsUY|$_YM_g}ejWoArEU2TvG1q25kk7uafqt zf!md{Nk1klHVHzhuNZ^GZdVq-uc}-g5c$*;9Y8GOzZ=mXj+On8EP!ap00000NkvXX Hu0mjfH&k%O literal 0 HcmV?d00001 diff --git a/src/bonsai/bonsai/bim/module/model/workspace.py b/src/bonsai/bonsai/bim/module/model/workspace.py index 8dc661971c..18540a48e6 100644 --- a/src/bonsai/bonsai/bim/module/model/workspace.py +++ b/src/bonsai/bonsai/bim/module/model/workspace.py @@ -107,7 +107,7 @@ class BimTool(WorkSpaceTool): def draw_settings(context, layout, ws_tool): # Unlike operators, Blender doesn't treat workspace tools as a class, so we'll create our own. - BimToolUI.draw(context, layout, ifc_element_type="all") + AddElementUI.draw(context, layout, ifc_element_type="all") class WallTool(BimTool): @@ -122,7 +122,9 @@ class WallTool(BimTool): @classmethod def draw_settings(cls, context, layout, ws_tool): - BimToolUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + AddElementUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + if context.active_object and context.selected_objects: + ModifySelectedUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) class SlabTool(BimTool): @@ -137,7 +139,9 @@ class SlabTool(BimTool): @classmethod def draw_settings(cls, context, layout, ws_tool): - BimToolUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + AddElementUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + if context.active_object and context.selected_objects: + ModifySelectedUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) class DoorTool(BimTool): @@ -152,7 +156,9 @@ class DoorTool(BimTool): @classmethod def draw_settings(cls, context, layout, ws_tool): - BimToolUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + AddElementUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + if context.active_object and context.selected_objects: + ModifySelectedUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) class WindowTool(BimTool): @@ -167,7 +173,9 @@ class WindowTool(BimTool): @classmethod def draw_settings(cls, context, layout, ws_tool): - BimToolUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + AddElementUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + if context.active_object and context.selected_objects: + ModifySelectedUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) class ColumnTool(BimTool): @@ -182,7 +190,9 @@ class ColumnTool(BimTool): @classmethod def draw_settings(cls, context, layout, ws_tool): - BimToolUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + AddElementUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + if context.active_object and context.selected_objects: + ModifySelectedUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) class BeamTool(BimTool): @@ -197,7 +207,9 @@ class BeamTool(BimTool): @classmethod def draw_settings(cls, context, layout, ws_tool): - BimToolUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + AddElementUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + if context.active_object and context.selected_objects: + ModifySelectedUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) class DuctTool(BimTool): @@ -212,7 +224,9 @@ class DuctTool(BimTool): @classmethod def draw_settings(cls, context, layout, ws_tool): - BimToolUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + AddElementUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + if context.active_object and context.selected_objects: + ModifySelectedUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) class CableCarrierTool(BimTool): @@ -227,7 +241,9 @@ class CableCarrierTool(BimTool): @classmethod def draw_settings(cls, context, layout, ws_tool): - BimToolUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + AddElementUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + if context.active_object and context.selected_objects: + ModifySelectedUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) class PipeTool(BimTool): @@ -242,7 +258,9 @@ class PipeTool(BimTool): @classmethod def draw_settings(cls, context, layout, ws_tool): - BimToolUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + AddElementUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + if context.active_object and context.selected_objects: + ModifySelectedUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) class CableTool(BimTool): @@ -257,7 +275,9 @@ class CableTool(BimTool): @classmethod def draw_settings(cls, context, layout, ws_tool): - BimToolUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + AddElementUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) + if context.active_object and context.selected_objects: + ModifySelectedUI.draw(context, layout, ifc_element_type=cls.ifc_element_type) def add_layout_hotkey_operator(layout, text, hotkey, description, ui_context=""): @@ -292,7 +312,7 @@ def add_layout_hotkey_operator(layout, text, hotkey, description, ui_context="") ## - Apply void button is showing when any two objects are selected - should only appear when a voidable object and a void are selected ## - Type Class and Relating Type fields seem to be crossed between selected and new -class BimToolUI: +class AddElementUI: @classmethod def draw(cls, context, layout, ifc_element_type=None): cls.layout = layout @@ -313,21 +333,10 @@ class BimToolUI: elif AuthoringData.data["ifc_element_type"] != ifc_element_type: AuthoringData.load(ifc_element_type) - cls.draw_container_info(context) if context.region.type == "TOOL_HEADER" else cls cls.draw_type_manager_launcher(context) cls.draw_thumbnail() if context.region.type != "TOOL_HEADER" else cls cls.draw_add_object(context) - if context.active_object and context.selected_objects: - cls.draw_modes(context) - cls.draw_parameter_adjustments(context) - cls.draw_operations(context) - # cls.draw_void(context) - cls.draw_regen_operations(context) - cls.draw_align(context) - cls.draw_aggregation(context) - cls.draw_qto(context) - # cls.draw_side_panel_tool_interface(context) if context.region.type != "TOOL_HEADER" else cls - + @classmethod def draw_container_info(cls, context): text = AuthoringData.data["default_container"] @@ -343,6 +352,13 @@ class BimToolUI: if not AuthoringData.data["ifc_classes"]: if AuthoringData.data["ifc_element_type"]: row.label(text=f"No {AuthoringData.data['ifc_element_type']} Found", icon="ERROR") + row = cls.layout.row(align=True) + op = row.operator( + "bim.add_default_type", + icon_value=custom_icon_previews["ADD_TYPE"].icon_id, + text=f"Create default {AuthoringData.data['ifc_element_type']}", + ) + op.ifc_element_type = AuthoringData.data["ifc_element_type"] else: row.label(text="No Element Types Found", icon="ERROR") row = cls.layout.row(align=True) @@ -392,17 +408,15 @@ class BimToolUI: ### this neeeds to move elif cls.props.ifc_class in ("IfcSpaceType"): - add_layout_hotkey_operator(cls.layout, "Generate", "S_G", bpy.ops.bim.generate_space.__doc__) + add_layout_hotkey_operator(cls.layout, "Generate", "S_G", bpy.ops.bim.generate_space.__doc__, ui_context) ### else: row = cls.layout.row(align=True) row.prop(data=cls.props, property="rl_mode", text="RL Mode" if ui_context != "TOOL_HEADER" else "RL") - - # Add button if AuthoringData.data["ifc_classes"]: - if not AuthoringData.data["ifc_element_type"]: ### for BIM Tool + if not AuthoringData.data["ifc_element_type"]: row = cls.layout.row(align=True) if ui_context != "TOOL_HEADER" else row prop_with_search(row, cls.props, "ifc_class", text="Type Class" if ui_context != "TOOL_HEADER" else "") if AuthoringData.data["relating_type_id"]: @@ -410,10 +424,63 @@ class BimToolUI: prop_with_search(row, cls.props, "relating_type_id", text="Relating Type" if ui_context != "TOOL_HEADER" else "") row.operator("bim.launch_type_manager", icon=tool.Blender.TYPE_MANAGER_ICON, text="") row = cls.layout.row(align=True) if ui_context != "TOOL_HEADER" else row - row.operator("bim.add_constr_type_instance", text="Add", icon_value=custom_icon_previews[f"ADD"].icon_id) + add_layout_hotkey_operator(row, "Add", "S_A", bpy.ops.bim.add_constr_type_instance.__doc__, ui_context) + row = cls.layout.row(align=True) if ui_context != "TOOL_HEADER" else row + add_layout_hotkey_operator(row, "Draw", "S_P", bpy.ops.bim.draw_polyline_wall.__doc__, ui_context) if cls.props.ifc_class == "IfcWallType" else row else: row.label(text="No Construction Type", icon="FILE_3D") + @classmethod + def draw_thumbnail(cls): + if AuthoringData.data["ifc_classes"]: + if cls.props.ifc_class: + box = cls.layout.box() + if AuthoringData.data["type_thumbnail"]: + box.template_icon(icon_value=AuthoringData.data["type_thumbnail"], scale=5) + else: + op = box.operator("bim.load_type_thumbnails", text="Load Thumbnails", icon="FILE_REFRESH") + op.ifc_class = cls.props.ifc_class + + +class ModifySelectedUI: + @classmethod + def draw(cls, context, layout, ifc_element_type=None): + cls.layout = layout + cls.props = context.scene.BIMModelProperties + + row = cls.layout.row(align=True) + if not tool.Ifc.get(): + row.label(text="No IFC Project", icon="ERROR") + return + + if not PortData.is_loaded: + PortData.load() + + if not AuthoringData.is_loaded: + AuthoringData.load(ifc_element_type) + elif ifc_element_type == "all" and AuthoringData.data["ifc_element_type"] is not None: + AuthoringData.load("all") + elif AuthoringData.data["ifc_element_type"] != ifc_element_type: + AuthoringData.load(ifc_element_type) + + + cls.draw_parameter_adjustments(context) + cls.draw_operations(context) + cls.draw_void(context) + cls.draw_regen_operations(context) + cls.draw_align(context) + cls.draw_aggregation(context) + cls.draw_qto(context) + cls.draw_modes(context) + + @classmethod + def draw_container_info(cls, context): + text = AuthoringData.data["default_container"] + if context.region.type == "UI": + text = f"Container: {text}" + + cls.layout.row(align=True).label(text=text, icon="OUTLINER_COLLECTION") + @classmethod def draw_modes(cls, context): ui_context = str(context.region.type) @@ -437,17 +504,6 @@ class BimToolUI: row = cls.layout.row(align=True) if ui_context != "TOOL_HEADER" else row add_layout_hotkey_operator(row, "Decomposition", "A_D", "Select decomposition", ui_context) - @classmethod - def draw_thumbnail(cls): - if AuthoringData.data["ifc_classes"]: - if cls.props.ifc_class: - box = cls.layout.box() - if AuthoringData.data["type_thumbnail"]: - box.template_icon(icon_value=AuthoringData.data["type_thumbnail"], scale=5) - else: - op = box.operator("bim.load_type_thumbnails", text="Load Thumbnails", icon="FILE_REFRESH") - op.ifc_class = cls.props.ifc_class - @classmethod def draw_parameter_adjustments(cls, context): ui_context = str(context.region.type) @@ -560,7 +616,7 @@ class BimToolUI: add_layout_hotkey_operator(row, "Regen", "S_G", bpy.ops.bim.regenerate_distribution_element.__doc__, ui_context) @classmethod - def draw_void(cls, context,row): + def draw_void(cls, context): ui_context = str(context.region.type) row = cls.layout.row(align=True) if ui_context != "TOOL_HEADER" else row if len(context.selected_objects) > 1: @@ -631,415 +687,6 @@ class BimToolUI: row.label(text="Quantity Take-off") add_layout_hotkey_operator(cls.layout, "Perform Quantity Take-off", "S_Q", bpy.ops.bim.perform_quantity_take_off.__doc__, ui_context) - @classmethod - def draw_tool_header_icons(cls, context): ### this function is no longer in use - ui_context = str(context.region.type) - if AuthoringData.data["active_material_usage"] == "LAYER2": - - row = cls.layout.row(align=True) - row.prop(data=cls.props, property="extrusion_depth", text="H") - op = row.operator("bim.change_extrusion_depth", icon="FILE_REFRESH", text="") - op.depth = cls.props.extrusion_depth - row.prop(data=cls.props, property="length", text="L") - op = row.operator("bim.change_layer_length", icon="FILE_REFRESH", text="") - op.length = cls.props.length - row.prop(data=cls.props, property="x_angle", text="A") - op = row.operator("bim.change_extrusion_x_angle", icon="FILE_REFRESH", text="") - op.x_angle = cls.props.x_angle - - # row = cls.layout.row(align=True) - # row.prop(data=cls.props, property="extrusion_depth", text="Height:") - # op = row.operator("bim.change_extrusion_depth", icon="FILE_REFRESH", text="") - # op.depth = cls.props.extrusion_depth - - # row = cls.layout.row(align=True) - # row.prop(data=cls.props, property="length", text="Length:") - # op = row.operator("bim.change_layer_length", icon="FILE_REFRESH", text="") - # op.length = cls.props.length - - # row = cls.layout.row(align=True) - # row.prop(data=cls.props, property="x_angle", text="Angle:") - # op = row.operator("bim.change_extrusion_x_angle", icon="FILE_REFRESH", text="") - # op.x_angle = cls.props.x_angle - - row = cls.layout.row() - add_layout_hotkey_operator(row, "Regen", "S_G", bpy.ops.bim.recalculate_wall.__doc__, ui_context) - - row = cls.layout.row(align=True) - add_layout_hotkey_operator(row, "Extend", "S_E", "Extends/reduces element to 3D cursor", ui_context) - add_layout_hotkey_operator(row, "Butt", "S_T", "Intersects two non-parallel elements to a butt corner junction", ui_context) - add_layout_hotkey_operator(row, "Mitre", "S_Y", "Intersects two non-parallel elements to a mitred corner junction", ui_context) - row.operator("bim.unjoin_walls", text="", icon_value=custom_icon_previews["UNJOIN_WALLS"].icon_id) - - - row = cls.layout.row(align=True) - add_layout_hotkey_operator(row, "Merge", "S_M", bpy.ops.bim.merge_wall.__doc__, ui_context) - add_layout_hotkey_operator(row, "Split", "S_K", bpy.ops.bim.split_wall.__doc__, ui_context) - add_layout_hotkey_operator(row, "Rotate 90", "S_R", bpy.ops.bim.rotate_90.__doc__, ui_context) - add_layout_hotkey_operator(row, "Flip", "S_F", bpy.ops.bim.flip_wall.__doc__, ui_context) - - elif AuthoringData.data["active_material_usage"] == "LAYER3": - if len(context.selected_objects) == 1: - add_layout_hotkey_operator(cls.layout, "Edit Profile", "S_E", "", ui_context) - elif "LAYER2" in AuthoringData.data["selected_material_usages"]: - add_layout_hotkey_operator(cls.layout, "Extend Wall To Slab", "S_E", "", ui_context) - - row = cls.layout.row(align=True) - row.prop(data=cls.props, property="x_angle", text="Angle") - op = row.operator("bim.change_extrusion_x_angle", icon="FILE_REFRESH", text="") - op.x_angle = cls.props.x_angle - - elif AuthoringData.data["active_material_usage"] == "PROFILE": - row = cls.layout.row(align=True) - row.prop(data=cls.props, property="cardinal_point", text="Axis") - op = row.operator("bim.change_cardinal_point", icon="FILE_REFRESH", text="") - op.cardinal_point = int(cls.props.cardinal_point) - - row = cls.layout.row(align=True) - label = ( - "Height" if AuthoringData.data["active_class"] in ("IfcColumn", "IfcColumnStandardCase") else "Length" - ) - row.prop(data=cls.props, property="extrusion_depth", text=label) - op = row.operator("bim.change_profile_depth", icon="FILE_REFRESH", text="") - op.depth = cls.props.extrusion_depth - - row = cls.layout.row(align=True) - add_layout_hotkey_operator(row, "Extend", "S_E", "", ui_context) - add_layout_hotkey_operator(row, "Flip", "S_F", bpy.ops.bim.flip_object.__doc__, ui_context) - - if AuthoringData.data["active_class"] in ( - "IfcCableCarrierSegment", - "IfcCableSegment", - "IfcDuctSegment", - "IfcPipeSegment", - ): - - add_layout_hotkey_operator(cls.layout, "Add Fitting", "S_Y", "", ui_context) - if context.region.type != "TOOL_HEADER": - cls.layout.operator("bim.mep_add_bend") - cls.layout.operator("bim.mep_add_transition") - cls.layout.operator("bim.mep_add_obstruction") - - else: - add_layout_hotkey_operator(row, "Butt", "S_T", "", ui_context) - add_layout_hotkey_operator(row, "Mitre", "S_Y", "", ui_context) - add_layout_hotkey_operator(row, "Rotate 90", "S_R", bpy.ops.bim.rotate_90.__doc__, ui_context) - add_layout_hotkey_operator(row, "Regen", "S_G", bpy.ops.bim.recalculate_profile.__doc__, ui_context) - # row.operator("bim.extend_profile", icon="X", text="").join_type = "" - - elif ( - tool.Model.is_parametric_railing_active() and not context.active_object.BIMRailingProperties.is_editing_path - ): - # NOTE: should be above "active_representation_type" = "SweptSolid" check - # because it could be a SweptSolid too - row = cls.layout.row(align=True) - row.operator("bim.enable_editing_railing_path", text="", icon_value=custom_icon_previews["EDIT_RAILING_PATH"].icon_id) - - elif AuthoringData.data["active_class"] in ( - "IfcWindow", - "IfcWindowStandardCase", - "IfcDoor", - "IfcDoorStandardCase", - ): - if AuthoringData.data["active_class"] in ("IfcWindow", "IfcWindowStandardCase"): - row = cls.layout.row(align=True) - row.prop(data=cls.props, property="rl2", text="RL") - elif AuthoringData.data["active_class"] in ("IfcDoor", "IfcDoorStandardCase"): - row = cls.layout.row(align=True) - row.prop(data=cls.props, property="rl1", text="RL") - - add_layout_hotkey_operator(cls.layout, "Regen", "S_G", bpy.ops.bim.recalculate_fill.__doc__, ui_context) - add_layout_hotkey_operator(cls.layout, "Flip", "S_F", "", ui_context) - - elif AuthoringData.data["active_representation_type"] == "SweptSolid": - if not tool.Model.is_parametric_window_active() and not tool.Model.is_parametric_door_active(): - add_layout_hotkey_operator(cls.layout, "Edit Profile", "T_E", "", ui_context) - - elif AuthoringData.data["active_class"] in ("IfcSpace",): - add_layout_hotkey_operator(cls.layout, "Regen", "S_G", bpy.ops.bim.generate_space.__doc__, ui_context) - - elif tool.Model.is_parametric_roof_active() and not context.active_object.BIMRoofProperties.is_editing_path: - row = cls.layout.row(align=True) - row.label(text="", icon="EVENT_TAB") - row.operator("bim.enable_editing_roof_path", text="Edit Roof Path") - - if context.region.type != "TOOL_HEADER" and PortData.data["total_ports"] > 0: - add_layout_hotkey_operator(cls.layout, "Regen", "S_G", bpy.ops.bim.regenerate_distribution_element.__doc__, ui_context) - cls.layout.operator("bim.mep_connect_elements") - - row = cls.layout.row(align=True) - if len(context.selected_objects) > 1: - row.operator("bim.add_opening", text="", icon_value=custom_icon_previews["VOID"].icon_id) - else: - row.operator("bim.add_potential_opening", text="", icon_value=custom_icon_previews["ADD_VOID"].icon_id) - - if AuthoringData.data["is_voidable_element"]: - if AuthoringData.data["has_visible_openings"]: - row = cls.layout.row(align=True) - row.operator("bim.edit_openings", icon="CHECKMARK", text="") - row.operator("bim.hide_openings", icon="CANCEL", text="") - - if AuthoringData.data["active_class"] in ("IfcOpeningElement",): - row.operator("bim.edit_openings", icon="CHECKMARK", text="") - row.operator("bim.hide_openings", icon="CANCEL", text="") - if len(context.selected_objects) == 2: - row = cls.layout.row(align=True) - row.label(text="", icon="EVENT_SHIFT") - row.label(text="", icon="EVENT_L") - row.operator("bim.clone_opening", text="Clone Opening") - - row = cls.layout.row(align=True) - add_layout_hotkey_operator(row, "Exterior", "S_X", "", ui_context) - add_layout_hotkey_operator(row, "Centreline", "S_C", "", ui_context) - add_layout_hotkey_operator(row, "Interior", "S_V", "", ui_context) - add_layout_hotkey_operator(row, "Mirror", "S_M", bpy.ops.bim.mirror_elements.__doc__, ui_context) - - row = cls.layout.row(align=True) - add_layout_hotkey_operator(row, "Void", "A_O", "Toggle openings", ui_context) - add_layout_hotkey_operator(row, "Decomposition", "A_D", "Select decomposition", ui_context) - - row = cls.layout.row(align=True) - add_layout_hotkey_operator(row, "Assign", "C_P", bpy.ops.bim.aggregate_assign_object.__doc__, ui_context) - add_layout_hotkey_operator(row, "Unassign", "A_P", bpy.ops.bim.aggregate_unassign_object.__doc__, ui_context) - - row = cls.layout.row() - add_layout_hotkey_operator( - row, "Perform Quantity Take-off", "S_Q", bpy.ops.bim.perform_quantity_take_off.__doc__, ui_context - ) - - @classmethod - def draw_side_panel_tool_interface(cls, context): ### this function is no longer in use - ui_context = str(context.region.type) - row = cls.layout.row(align=True) - - if AuthoringData.data["active_material_usage"] == "LAYER2": - row.label(text="LAYER2") - row.prop(data=cls.props, property="extrusion_depth", text="Height") - op = row.operator("bim.change_extrusion_depth", icon="FILE_REFRESH", text="") - op.depth = cls.props.extrusion_depth - - row = cls.layout.row(align=True) - row.prop(data=cls.props, property="length", text="Length") - op = row.operator("bim.change_layer_length", icon="FILE_REFRESH", text="") - op.length = cls.props.length - - row = cls.layout.row(align=True) - row.prop(data=cls.props, property="x_angle", text="Angle") - op = row.operator("bim.change_extrusion_x_angle", icon="FILE_REFRESH", text="") - op.x_angle = cls.props.x_angle - - cls.layout.separator() - - add_layout_hotkey_operator(cls.layout, "Regen", "S_G", bpy.ops.bim.recalculate_wall.__doc__, ui_context) - - cls.layout.separator() - - add_layout_hotkey_operator(cls.layout, "Extend", "S_E", "Extends/reduces element to 3D cursor", ui_context) - add_layout_hotkey_operator(cls.layout, "Butt", "S_T", "Intersects two non-parallel elements to a butt corner junction", ui_context) - add_layout_hotkey_operator(cls.layout, "Mitre", "S_Y", "Intersects two non-parallel elements to a mitred corner junction", ui_context) - - row = cls.layout.row(align=True) - row.operator("bim.unjoin_walls", text="Unjoin Walls", icon_value=custom_icon_previews["UNJOIN_WALLS"].icon_id) - - cls.layout.separator() - - add_layout_hotkey_operator(cls.layout, "Merge", "S_M", bpy.ops.bim.merge_wall.__doc__, ui_context) - add_layout_hotkey_operator(cls.layout, "Split", "S_K", bpy.ops.bim.split_wall.__doc__, ui_context) - add_layout_hotkey_operator(cls.layout, "Rotate 90", "S_R", bpy.ops.bim.rotate_90.__doc__, ui_context) - add_layout_hotkey_operator(cls.layout, "Flip", "S_F", bpy.ops.bim.flip_wall.__doc__, ui_context) - - # row.operator("bim.unjoin_walls", icon="X", text="") - - elif AuthoringData.data["active_material_usage"] == "LAYER3": - row.label(text="LAYER3") - if len(context.selected_objects) == 1: - add_layout_hotkey_operator(cls.layout, "Edit Profile", "S_E", "", ui_context) - elif "LAYER2" in AuthoringData.data["selected_material_usages"]: - add_layout_hotkey_operator(cls.layout, "Extend Wall To Slab", "S_E", "", ui_context) - - row = cls.layout.row(align=True) - row.prop(data=cls.props, property="x_angle", text="Angle") - op = row.operator("bim.change_extrusion_x_angle", icon="FILE_REFRESH", text="") - op.x_angle = cls.props.x_angle - - elif AuthoringData.data["active_material_usage"] == "PROFILE": - row.label(text="PROFILE") - row = cls.layout.row(align=True) - row.prop(data=cls.props, property="cardinal_point", text="Axis") - op = row.operator("bim.change_cardinal_point", icon="FILE_REFRESH", text="") - op.cardinal_point = int(cls.props.cardinal_point) - - row = cls.layout.row(align=True) - label = ( - "Height" if AuthoringData.data["active_class"] in ("IfcColumn", "IfcColumnStandardCase") else "Length" - ) - row.prop(data=cls.props, property="extrusion_depth", text=label) - op = row.operator("bim.change_profile_depth", icon="FILE_REFRESH", text="") - op.depth = cls.props.extrusion_depth - - add_layout_hotkey_operator(cls.layout, "Extend", "S_E", "", ui_context) - add_layout_hotkey_operator(cls.layout, "Flip", "S_F", bpy.ops.bim.flip_object.__doc__, ui_context) - - if AuthoringData.data["active_class"] in ( - "IfcCableCarrierSegment", - "IfcCableSegment", - "IfcDuctSegment", - "IfcPipeSegment", - ): - - cls.layout.row(align=True).label(text="Connections") - add_layout_hotkey_operator(cls.layout, "Add Fitting", "S_Y", "", ui_context) - row = cls.layout.row(align=True) - row.operator("bim.mep_add_bend") - row.label(text="", icon="BLANK1") - row.label(text="", icon="BLANK1") - - row = cls.layout.row(align=True) - row.operator("bim.mep_add_transition") - row.label(text="", icon="BLANK1") - row.label(text="", icon="BLANK1") - - row = cls.layout.row(align=True) - row.operator("bim.mep_add_obstruction") - row.label(text="", icon="BLANK1") - row.label(text="", icon="BLANK1") - - else: - - add_layout_hotkey_operator( cls.layout, "Edit Axis", "A_E", "", ui_context) - add_layout_hotkey_operator(cls.layout, "Butt", "S_T", "", ui_context) - add_layout_hotkey_operator(cls.layout, "Mitre", "S_Y", "", ui_context) - add_layout_hotkey_operator(cls.layout, "Rotate 90", "S_R", bpy.ops.bim.rotate_90.__doc__, ui_context) - add_layout_hotkey_operator(cls.layout, "Regen", "S_G", bpy.ops.bim.recalculate_profile.__doc__, ui_context) - # row.operator("bim.extend_profile", icon="X", text="").join_type = "" - - elif (tool.Model.is_parametric_railing_active() and not context.active_object.BIMRailingProperties.is_editing_path): - # NOTE: should be above "active_representation_type" = "SweptSolid" check - # because it could be a SweptSolid too - row.label(text="Railing") - row = cls.layout.row(align=True) - row.operator("bim.enable_editing_railing_path", text="Edit Railing Path", icon_value=custom_icon_previews["EDIT_RAILING_PATH"].icon_id) - row.scale_x = 2 - row.label(text="", icon="EVENT_TAB") - - elif AuthoringData.data["active_class"] in ( - "IfcWindow", - "IfcWindowStandardCase", - "IfcDoor", - "IfcDoorStandardCase", - ): - row.label(text="WinDoor") - if AuthoringData.data["active_class"] in ("IfcWindow", "IfcWindowStandardCase"): - row = cls.layout.row(align=True) - row.prop(data=cls.props, property="rl2", text="RL") - elif AuthoringData.data["active_class"] in ("IfcDoor", "IfcDoorStandardCase"): - row = cls.layout.row(align=True) - row.prop(data=cls.props, property="rl1", text="RL") - - add_layout_hotkey_operator(cls.layout, "Regen", "S_G", bpy.ops.bim.recalculate_fill.__doc__, ui_context) - add_layout_hotkey_operator(cls.layout, "Flip", "S_F", "", ui_context) - - elif AuthoringData.data["active_representation_type"] == "SweptSolid": - row.label(text="SweptSolid") - if not tool.Model.is_parametric_window_active() and not tool.Model.is_parametric_door_active(): - add_layout_hotkey_operator(cls.layout, "Edit Profile", "S_E", "", ui_context) - - elif AuthoringData.data["active_class"] in ("IfcSpace",): - row.label(text="IfcSpace") - add_layout_hotkey_operator(cls.layout, "Regen", "S_G", bpy.ops.bim.generate_space.__doc__, ui_context) - - elif tool.Model.is_parametric_roof_active() and not context.active_object.BIMRoofProperties.is_editing_path: - row.label(text="Roof") - row = cls.layout.row(align=True) - row.label(text="", icon="EVENT_TAB") - row.operator("bim.enable_editing_roof_path", text="Edit Roof Path") - - if context.region.type != "TOOL_HEADER" and PortData.data["total_ports"] > 0: - add_layout_hotkey_operator(cls.layout, "Regen", "S_G", bpy.ops.bim.regenerate_distribution_element.__doc__, ui_context) - row = cls.layout.row(align=True) - row.operator("bim.mep_connect_elements") - row.label(text="", icon="BLANK1") - row.label(text="", icon="BLANK1") - - row = cls.layout.row(align=True) - if len(context.selected_objects) > 1: - row.operator("bim.add_opening", text="Apply Void", icon_value=custom_icon_previews["VOID"].icon_id) - else: - row.operator( - "bim.add_potential_opening", text="Add Void", icon_value=custom_icon_previews["ADD_VOID"].icon_id - ) - row.label(text="", icon="EVENT_SHIFT") - row.label(text="", icon="EVENT_O") - - if AuthoringData.data["is_voidable_element"]: - row.label(text="Voidable Element") - if AuthoringData.data["has_visible_openings"]: - row = cls.layout.row(align=True) - row.operator("bim.edit_openings", icon="CHECKMARK", text="") - row.operator("bim.hide_openings", icon="CANCEL", text="") - - if AuthoringData.data["active_class"] in ("IfcOpeningElement",): - row.label(text="Opening") - row.operator("bim.edit_openings", icon="CHECKMARK", text="") - row.operator("bim.hide_openings", icon="CANCEL", text="") - if len(context.selected_objects) == 2: - row = cls.layout.row(align=True) - row.label(text="", icon="EVENT_SHIFT") - row.label(text="", icon="EVENT_L") - row.operator("bim.clone_opening", text="Clone Opening") - - cls.layout.row(align=True).label(text="Align") - add_layout_hotkey_operator(cls.layout, "Exterior", "S_X", "", ui_context) - add_layout_hotkey_operator(cls.layout, "Centreline", "S_C", "", ui_context) - add_layout_hotkey_operator(cls.layout, "Interior", "S_V", "", ui_context) - add_layout_hotkey_operator(cls.layout, "Mirror", "S_M", bpy.ops.bim.mirror_elements.__doc__, ui_context) - - cls.layout.row(align=True).label(text="Mode") - add_layout_hotkey_operator(cls.layout, "Edit Axis", "A_E", "", ui_context) - add_layout_hotkey_operator(cls.layout, "Void", "A_O", "Toggle openings", ui_context) - add_layout_hotkey_operator(cls.layout, "Decomposition", "A_D", "Select decomposition", ui_context) - - cls.layout.row(align=True).label(text="Aggregation") - add_layout_hotkey_operator(cls.layout, "Assign", "C_P", bpy.ops.bim.aggregate_assign_object.__doc__, ui_context) - add_layout_hotkey_operator(cls.layout, "Unassign", "A_P", bpy.ops.bim.aggregate_unassign_object.__doc__, ui_context) - - cls.layout.row(align=True).label(text="Qto") - add_layout_hotkey_operator(cls.layout, "Perform Quantity Take-off", "S_Q", bpy.ops.bim.perform_quantity_take_off.__doc__, ui_context) - - @classmethod - def draw_add_type_instance(cls, context): ### this function is no longer in use - - row = cls.layout.row(align=True) - if AuthoringData.data["ifc_classes"]: - - if not AuthoringData.data["ifc_element_type"]: - prop_with_search(row, cls.props, "ifc_class", text="") - - row = cls.layout.row(align=True) - if AuthoringData.data["relating_type_id"]: - prop_with_search(row, cls.props, "relating_type_id", text="") - row.operator("bim.add_constr_type_instance", text="Add", icon_value=custom_icon_previews[f"ADD"].icon_id) - - else: - row.label(text="No Construction Type", icon="FILE_3D") - row.operator("bim.launch_type_manager", icon=tool.Blender.TYPE_MANAGER_ICON, text="") - else: - if AuthoringData.data["ifc_element_type"]: - row.label(text=f"No {AuthoringData.data['ifc_element_type']} Found", icon="ERROR") - row = cls.layout.row() - row.prop(cls.props, "type_name") - row = cls.layout.row(align=True) - op = row.operator( - "bim.add_default_type", - icon_value=custom_icon_previews["ADD_TYPE"].icon_id, - text=f"Create {AuthoringData.data['ifc_element_type']}", - ) - op.ifc_element_type = AuthoringData.data["ifc_element_type"] - row.operator("bim.launch_type_manager", icon=tool.Blender.TYPE_MANAGER_ICON, text="") - else: - row.label(text="No Element Types Found", icon="ERROR") - row.operator("bim.launch_type_manager", icon=tool.Blender.TYPE_MANAGER_ICON, text="Launch Type Manager") - class Hotkey(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.hotkey" diff --git a/src/bonsai/scripts/bonsai_icons.svg b/src/bonsai/scripts/bonsai_icons.svg index 4981f5b39f..03ff801921 100644 --- a/src/bonsai/scripts/bonsai_icons.svg +++ b/src/bonsai/scripts/bonsai_icons.svg @@ -27,15 +27,15 @@ inkscape:deskcolor="#d1d1d1" inkscape:document-units="px" showgrid="true" - inkscape:zoom="9.6666668" - inkscape:cx="29.224137" - inkscape:cy="15.517241" - inkscape:window-width="3840" - inkscape:window-height="1620" - inkscape:window-x="0" - inkscape:window-y="0" + inkscape:zoom="13.670731" + inkscape:cx="5.4861732" + inkscape:cy="7.2051741" + inkscape:window-width="1839" + inkscape:window-height="1421" + inkscape:window-x="1064" + inkscape:window-y="106" inkscape:window-maximized="0" - inkscape:current-layer="g34785" + inkscape:current-layer="g37355" showguides="true">