From 8e6a52be15bb8e4d7194d54afdf79768bc6aef70 Mon Sep 17 00:00:00 2001 From: iamboss Date: Sat, 6 Dec 2025 02:38:22 +0800 Subject: [PATCH] tune --- App/Hi.Wpf.dll | Bin 68096 -> 68096 bytes App/HiCbtr.dll | Bin 113152 -> 113152 bytes App/HiDisp.dll | Bin 11440128 -> 11440128 bytes App/HiGeom.dll | Bin 408064 -> 408064 bytes App/HiLicense.dll | Bin 81408 -> 81408 bytes App/HiMech.dll | Bin 724992 -> 724992 bytes App/HiNC-2025-win-desktop.deps.json | 134 +++++++++--------- App/HiNC-2025-win-desktop.dll | Bin 861184 -> 861184 bytes App/HiNC-2025-win-desktop.exe | Bin 209408 -> 209408 bytes App/HiNC-2025-win-desktop.pdb | Bin 326688 -> 326688 bytes App/HiNc.dll | Bin 363520 -> 363520 bytes App/HiUniNc.dll | Bin 179200 -> 179200 bytes App/en/HiGeom.resources.dll | Bin 4608 -> 4608 bytes App/en/HiMech.resources.dll | Bin 4608 -> 4608 bytes .../api/Hi.MachiningProcs.RuntimeApi.html | 72 +++++----- .../HiAPI-docsite/api/Hi.NcOpt.NcOptProc.html | 20 +-- .../dev-doc/build-hinc/general-rules.html | 2 +- .../brief/dev-doc/build-hinc/main-panel.html | 6 +- .../message-section-on-main-panel.html | 6 +- .../brief/dev-doc/release-note/index.html | 13 ++ .../zh-Hant/script/NcOptimization/index.html | 15 ++ App/wwwroot/HiAPI-docsite/index.json | 14 +- App/wwwroot/HiAPI-docsite/xrefmap.yml | 98 ++++++------- App/zh-Hans/HiMech.resources.dll | Bin 13312 -> 13312 bytes App/zh-Hans/HiNc.resources.dll | Bin 4608 -> 4608 bytes App/zh-Hant/HiGeom.resources.dll | Bin 4608 -> 4608 bytes App/zh-Hant/HiMech.resources.dll | Bin 13312 -> 13312 bytes App/zh-Hant/HiNc.resources.dll | Bin 6656 -> 6656 bytes 28 files changed, 204 insertions(+), 176 deletions(-) diff --git a/App/Hi.Wpf.dll b/App/Hi.Wpf.dll index 2cde1cdd954dc1edb918e817b51cabe2df973435..6cf6e6e06cc88acbcf9e5a6466c16457926aecf7 100644 GIT binary patch delta 312 zcmZpe!qPB>WkLsw<}9X38+#-q8J#9Cm9%7ZpL}03nbB#pvy`E*K;*IRWL}Nw?n{4O zDg4@%aA)|T)GH0JjtX&3|>n-gjhZs93 zKm}!lpn^cvz8;UvtOQwa2|aXtI&X4fNYrLNlPl*qofsGym>C!toVLGaVw}&&XtuqZ zg)y8l*o;A&A&J3|!GIx^Aq_~UFqknUGFSrHAQ5vQHURQXfFj8Z77V69z8R3T1oMr6 f;s!ubL!byqg(;Ag%8)YMl#S68XhAj`<5Xq<1;A93 delta 312 zcmZpe!qPB>WkLswiu{yM8+#-q8677tm9%7Zn|xm~nbC2xvy`E*fE0szdA8^~ujxsh z%LHdi7jACRWoET7)iYpVFkxiSH`X)MGc(mTOieN}Hb_gdut>5nNj5Y~Nj5bwH8D0# zOG!#GNJ=&{Pc$6N;QW=sMj2Mg=3>eaYEDIn6ktPhuKshsp6d-L1lrsg27z4>PphyxB8vw~< bpu9OlB9JtOs=;}aVj$aUC>tF diff --git a/App/HiCbtr.dll b/App/HiCbtr.dll index 264c3d6ff72ff4230e66b87c82015f0e33d14427..879c22a5bcf60ec90bcddae7a56740fdc16e11e4 100644 GIT binary patch delta 406 zcma)yF-rq67>2)S6$=g>T{;LA(UO|nCAl1k(xc5yqD4h;kzRYLgCe4iYR3u{gc}Oo z92}$|$O*-%YX=v*JBZ>hXm?|Ofy48?FVFYZhtu`p^j#yd70flBn}-4F$D?2|f!cAp z*0WJB{%GH)kRM%l7LXS`bT*M6k2;@7SWez578S$PkpwetE9?@FVWAiyMP=KnXm9IU7C z&2sN&-&3unWdEvpTZ-QX$0VXisMU7TgIPx=1i`A&$g(@{8+LHB8~ z(I=>tzPGLlNGGT5X;evW+bc+?qxJ{l4Rf@;v92Y|E$_$2yJj8&#)MA;?QpJrhboGl zfXPKiDyn%<)12W-ntzxmm6)v61f|lc$f{jxDx3-x+^KR~NK*BQl!+Wn{cm_OSSYBQ zw^qj=E%jcua^D&JlRgjj3KF{*fFhVBuICC|#ys}w#CUb3q6jk_GomPALimv diff --git a/App/HiDisp.dll b/App/HiDisp.dll index 196cfa5c306cae89cb268690bd5a297b101219c5..f1bb42d38ad0f37f3ed9e1b0ea6e91d1d48de680 100644 GIT binary patch delta 5646 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 GRsIKAU@^A< delta 5647 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 R7bh02iO2-`_pjNi{T~NLC~*J) diff --git a/App/HiGeom.dll b/App/HiGeom.dll index 252d3897315557d5fd435fe71a90f60af4c288f7..e9ed022a8560a7f097ee4f5cd98d1fef0dcb91d7 100644 GIT binary patch delta 6765 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 delta 6766 zcma)B30PIt_TR%f=ibXzF9?DYsi7$$GMsxE92o^kBs4L{0t76~;bo7k2$AyT6ydbx znHmo99MXJ7Tc4=UheMj?(`PxMMmX`(G@+MZyi=5rt{`a`;DwJR*Rm4I1JSIM zXtzPGtt5%S3|=LfqYP5KiX@t;y^D{i#gN)FahG3F(QJHDHL|Z?B~u%*TAG)yCNbRAM5na@>_NYnK_5@iuZaE^}{uA<*aUyI>-_3tWvbcUrE z%Kvk$Q0YJmOqIq8QVAohSR-8@SVL|(bS)Lf(R-Fz5Nx%kvzoP}C;o{2xVB}yOqyyH zQ`r*Are`~R1exqA#MrMDiltufsQVux!FQgotHU32) zK5_%;fgRoDz@I7sb`e`1o4b*8O3IhaFBGR;xalR)mr8_01rqI0q9y7rQMJ-vqPHd5 zs|=JVl>NAoL(m-dan`C_pHpz+H3do$g zo5~Km*cO8=!r&)mm%SYzo&Bo5c_;rSb3-n%25o3OYUwW7JEdL znCBlM`C?_A{u+9d&PE=U6<=tO14rdF+&U^3Jv%04$AQ3XY$9#Y@nE;_gR~7&`k06Z zd_!!)Y4CBeEqU>AvR1$zC!~Y%K)^w@=6b?`3pMn0JJ@zYI^erbk{}wSYgMh6qRB&q zv;_G$1p2^4x>jgkib~yxd3`5C?gs?yoS@kv)Aj<|FAFfI{rm|jXem11VpsZ|+&i0q zKy06r|E>9YiZQy*>WvXvpB7t+7oH}%$ZgvhS)tTTl`kyjOFIg+8do$;t6iVrrr>9#4B%* z&!D~Yk+)z`f`j9?(XN9+`B}tx^gq5aQ4GNHe*n zu%CV-^C0q>%`h=RmFf+m()^!*{4m>b+!ULIx{UPZDt4pXn9{1Dqy4yh84YKYJ+~(5HCh6Lt0cGkeaWJDfR$V&= zXs(HT9N%bVYFUfyB%nW=s9JlccbU4zEn{5*Xe3;S;s%zf7bR2VE|AA;GY**BGPSLV zd>kJHl&M|aGFBQO3%N5urW4qmitABkcUg`?AQ0!8UW?T761TIW=tb(|3uTd7`TxlN z?v}AjhR^2ivV1dp$nhF_NR;=CBv%ZQ-ILCTT9yP!gY;A8DuXnIqs5LQls(piy!OXGef~nDG>(m}5vs(LywN4Fg zQ7H+gVjuR8tCzRoS*Wb5&JKeethOt`GBX|@LUpl*N<68S`?;A6dp}eJ%(sTp29bVw zI4y@3@`)b#XMmbqrG&%9a=#ot%3}< zKlhxb9TZG)hV+Y)WiO7BYi?x}g_D70M$=3nHPKYu_U)c|TG%(zi`Bs^(5_NT){y=!7-Y43gOj^?!i zGK{$fSwBE_fP#T?`f6f6(5|0xYwjK>iok~qqN54ad1cxL&Et|G^l_{O)Ye20N32|} z-f>ji{esiCYCC=qn&Kvt0H|J~#V~oJn*7Zb^RJmyoTe93-S))QNUp5L&u{vUtrONnZQ9-^fnKA{&^$VG4S%Zk7qt%X? zY1!yTEGJb?`leJ_wE9%J;ad-r%n`$6qd755R(a&O1(tpm(+ktnm(EDZ1pG#uXsG^MH($`P{m_K`ux#Y8Y@^f+p1c(6 z@3*P4335t5n?Rc(rVTGq@d6kBvTQ{GnF8_Mnb7WFo)1oMvbGx`f)S^hKwV7)y&+p# ztj?j`*#3#MJ2+{WD2MZ%(qt`Z(HoFM1KYtJ^Kquu1<)$CFNb!r{q7N5iL(W~bYohs z^f)~io`<$Pi^Fk4u3S-4t0|ZI0?VE!GwPWqCFurv8<>#7nOB>vkGJY3>+Khegmkt& zPY!r5kKTl&uT7%);`;QjHhDJBETJ<8?VhpyjXc|n5*hD3dA5d$LI#KxzA76EG(_9u zL*&_#bKFDJyh^LU_so2la)@--WHA)m@EWaz1pt?4+m@+9Rcy+arqE7~-D+OJD%)Mj zT!wT$cM3gC#G7N*bow2ESG(vLz<@V8uL40&@rId#DtzBNf}ZB(MKs$2Zb5r1jT`vqDBxa=)bZi zUMlN2mv&}9d`RELglCpQ=51=>^&O*~-U#|bt-?H)fkI3fbpBvoT1KOZRHysRk*OgnxE`ax1y1@Z4{xm00SOpPi?)%$fkV@WrXhoDW|N7Zz)4gS%cqbPOi1~wfm*i!X7XBmb&2c z#MTtWHh;o6RBQbr=ZF*>`j*zWxvTc_Ot2MeuG9qE9hL9+4xEF}6Q^lC_}t`KLFZ4n zk>1-wyl?jQST?X8p5Y7C8S2+X*Aj>K2f;X$Aby7rl}bZB(i8f^GrYT0BW5 zFUy2RU7<;UR$rk3P$KK(rZ%EDO>JJ8G7p}s?GN&s+UV>&h(YVo6*L7y=MXG%gT|RO!K8ytnrzacCLLzdchI}= zjmkKs1ifqGc96=i8A_6e;nqrSsVsSv@>G$5dl7^7HfbM|h5{AWf>7cEpTH3cH*vVc z3K}f+6qIbz6q61mA`Ar$ml&ZJOn!z*$B=)v5%O`*nh$?41v5;8KbrhEP5Ktmnd3#p zFVKi{HW^+h;+joj!bDsrO|x2)eh=ztpl+u3lgYkq(mN(?GUA!?L~n3(i68H&kJOstt$GqKggRug+tc;6na_{op82t|Ncq!~rw zVli47glz&VsMHJIk;f?Fh&(h#=?QD;))-|k?q)=@(AS8j)YrhJCNA@Zt}sry1kOdW z1%8IwOh29P9k0CN!BZzG?MQcLL_}nGM7%TD6&n{3?2L1U2gfDGM+6TJPmBypOpHnl z*W-BRt4dK}_c&KVgdQH}3UJy5P6QdBlPgtJ_S5UZfVs1`YR!(SGSX5R{ z?!@dYXLyz?J1WYR8ycRO<8SNYT5}~ESw&2z@S*ZJzVo9*u@VywNZG4 z3k9KYn(d~>jj2(=d`LgDm<8)$RWMF1sU~t;L*@7{gkkO~yH0Lp@38c-idO$wNo%wWb~ c2{ZwyX8J*EMpITZ20aD?kPH4ZPBdTx08f2h5dZ)H delta 315 zcmZqp!_x4FWkLswgn`7`jXfu{7#$~vYIia^ZoaR5(on!^5qGPx>v8YNg$KTR-@j?M zc}HwCr-iAW0Rw{xBZI!No}r$ZsdkEiadJ{(nu(D?nqgw1aiU>bs<}b3X^Odpd6KDV znvq4afw7^5q2*-n^gvde%85s}1|5Lw{DvU^wCv4DaZDx{+}V>Llo&}c-aY8xDD z<7$PXTWMp=nKUwxHqn|i!*o(}noI+cm%OZwbfgSsOvj0)Nk*EC)M;6z-+eIYANiyA z%)Q_FeZTL0&hEjE?1LTIzx+AUWRflTkUpQ>>;#r!*Zw)m$A0@EofMW3cJMp~nP6wm(=_r^)_v+-W~0a?yY_R$qt4d}V=E`STLJIm7rKl~Z$ZkW1Oj26RYU69NF-AA_( zQqHOeaA?)+%m5CphEEL81%zy6UtYk8?qbp)&3xbvMsoL?nG;234ALJbhn-$r@GjOi zgfsQRX4X51T@^W{d!hZ--0+&XHe`m)Vj06YpEQx(AIAAqG2aM{kaMhMgdR)&4^CLc zNEMJY4Y2gGxr?!^QLOIUtYMU9k}nt=r5go}u&+kxpWW@~U>>auukiOS(z6ojW05iX zC^^fU$LMqhd6FNPrfIUV2@Qu7fGlBJ`E?4AL>R=5OpOHpGBsFzJ8GUzB&fNoyq}VU z9w`#PGDB~#5L`0v2}yquJuNc8ns<}n6_jgH_Vd?PNC{MbhXT|Ki(t%$LExq~jCeQV zYYuL<_;e7K+I$BK-wtgKK5FsX;k1K4 zv-lnGCkMxQ`V-Q8LAU+(m_hLwNU;6(K=cUgzkMnL>o^|VrRZpi>++zA2R+m}zbV}tGp7ZOJ);at*pYqC; zUe8~#p0jn?^7>xW?`8E>R_T*-$p!X;PfquobJ(6fn?1%lQSCkLsQ2~T>IWtMu}`kZ zbna>k-hJ~KNU-l}i*huKZNPwL-_@f^hlAUA)mpiA9=Xn^Hpx|qq>oqbl&6-HD}3b{ z`Gg_tr0kSeS;W4&E^iTcQeeNBkkk0?kLBMbkZbJW+j13({kP>yWRRCn$srH<^xR=( z+e7&0`1wOhZt;X!9}r+ZTV|L71h``9ML30JB_>k%LAT8xcKACEpDeM>sY(u+;Kx#x za5lNi`b(9kNR+3QDGkJP70o6dUMO~8n2%6)@wPR}lpqk1A1_yOtWDQi<#>X}ws>6` zxDD_V@_Xefe|nRWE|MmG;2EVs)9gs!b$9UTZA$I~4!$OJaQ|Lqs!0>@*mvQPzQ%kr z%B=Sf2-jfp?&1U0-AVavbaaCc~@ultpAGo4%(se-nNDKGGxn?fVLswOLGQ z=4s^hl6qGn-{N&{HCNXDfeoAbN#5pBw-GJZv76)xNva}hf5QthRtM0|(o)m~kB>O; zJx8`WavqM`G<(y*3nl(ciYn8u+vWAC>McTU@C^&qOp#3T1L^9rRiuKQji`Q7%*G>X z6)9t(TD6sw@e8%;mV`$Oi-V;Fdhsg%>b$V-59mg|-w2fi{Y8P&K%o%`7Uvam-)=QS zZho#&<$N3DXjQl*ub{+Vs+Sh}1Nnske>hJs@fU=Pib_|9N{d59L3SgmW&D4Z zj~&v!leqkY@pe~nchLMv85Fn6SkfY~>jAdb?wm>ha4u$H1 zHNm=?YCRB$Yz;?(`Jqs4oo<8zx?Wfvt}WoNFL%k8wFIDM$#@3`Ez1Y+=46WmXc zbp|YhFc?q^1)$?w4Ix~05QG|h>+oBR`T(v7Y(>imYV$3dT4Z(f3?ZlEDn!e$8HcT& Q?=F-K$bmc-UEzxU7b!zUdjJ3c delta 2343 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 IJTEH?0KEQqxc~qF delta 420 zcmZoTVbXBIWI_ka(NLDvjXkYBjIBLPtv$?Jdsw~*F@{ZV6lM`;^qoFan5CT2ZMvWc zi@2mC0|J~afUubv7#SR=I|8K{y{1Qsu*5UEweJ*R*}hYRH9c9t!_L`8@O+cYB*sX; z=A16yc7qDm?FJQW3s^N04UryQ|EOh4+s9}+-SHj!>g`;%>}DGoO}7I%3GpyNUq6mxiqjYRa%gS0E#SCX1rbl$ zUizBD)(^^Q7q#L9VlE)&-Y#mz^Ini;vuV|a=^Q>h0Rk1zQ!O_tUvQZJ$8Oz!v2#DC zXZY}xDnLaq#6v|v>Nn@whrN1fa%WO!^7ZYGO1y%M+xh%>=3VqpWH4k%Vn|^yXD|Yi zX+T~gkZ;0Z35Lc%(NrMck|7x^Y7XRC0@WD;Npl8MAS;Ez0?4)i>PQ5#Q@8(?=VfI9 E08xB_m;e9( diff --git a/App/HiNC-2025-win-desktop.exe b/App/HiNC-2025-win-desktop.exe index 2e125623858edb6022ef10dc39325d8ce54a3ae5..6d808d95f34be5b35a5c22504f7442d783cd8bde 100644 GIT binary patch delta 101 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 delta 26196 zcmc(mcX$=m+V-EB*(9`36G96FLazx;Itif@s(?z3L}}8yAZ(B(AVngCDk##cf(%Lv zy(nFg4g!Ky5s<3*-Os&ul6iU0_MG>+4u0#8-+j+BYpt1Cvu4fA+Orot&br`n)~W9W z4!-twr7yycM9%-C`s%;39eT2^{E)R@Ox@@2u3p>}L+XL1JgTVPsHFaRZS`sEsBhX> zeOu6!5zW+p2%0kIHT6qCQy#Zd?`p4pUYz=6pefb5s;>{4vZcsDA@A z<-k?-CqYyEAE*xkP09R7eO}O%=x6Gifu;<7u73P;(~X6KJvNyl_A3#%<7FE9iH0702>T82&x$>5{ z(R2_~Mpx4n(?Iw-^dMTIh5F&3DS6tdF9DjeHBS9^pebL!qkb=FN{PYhD}$z78>{|z z(3F7_)Q<*D`Dn8G`5=z};WS-v#p{YcW~om*TYbU#>LWl?LOxet6f`CKQuPHuQ*y6V zUj#H|;g{;yfTpal)!U#ceK)Hg4w~YZs6Gp5%F~_d-F~}tVeNih*bJiM98n(*nv(H* z^|?T7;Jo@Zpec2)secvJ^LVL<@;Z5!JXlO4IdN4brH@Odc#Rp-Jsc4?*Qb%ey5LCJ zYdmU6nbDY=dGE3c6dGMXGt&I6q(n_Oo6uA5S+f)*Q1ZYCd)C0^0^TjX4F z2l)#bis34ov?e=~^T;*i58!NBSzXz*hUUy0$^2wTvRfps|Hjf63ytLzc@cD`#`28u zl2Mwc6SZ{0d&`ut6aEE zJ^<^h705Xg$Mn;l#$#&#h^Bw!!K#Ig_ zJe;gZMw0c&rsV5nEZK$ZO%5hUkROm!$(iJWSoHq}vXl#J!G^Mt+(zypqu$iGo19Lr zC9jZXM_pT(JWU3~X`~9cz;PHcQl+ygF;bIUOlIza{vRU|U35h?vLiW+98XRsSCgB_ zE97sWC&fqr9xp!q9~(Q}!<6b$q-RndPtNMnACc-Zlzbm_SC`MYu#wzF9w7_iIiscs=2bvP;mfut)_aJ2% zGMa1&e(pG?C`owNlqmUxyaYN^lw4>0E}3qK<{U%rA@7qiRO10;UeX;2S>)J^r_w0N zFjBJyfi-#NYVyq0lw*vXA}^BH$U9`7_ceccvL@MrOeF7;1xIO~*5G1U>BjiHSUwu3 z+z3X?Zt^>_?gtuaOtvI-W6{!<{zGyhxt82PmKv{l+LQChpTH$N$R$#Ivijy=E$J{B z{lAuU;=)c+kF1s)pub3Fnxc`yWH~a5Tt%KEgQwy#iyK%f*W=a8$EMU~FR3j-^ts6} zvL4y~WAy*p(v1rP$+FY6SZ8t=`7ybI+)G|2{~}Ay(EM%4@uW@uOlD2cwNYd*@&Xw! zQ{z=YcWvp)g#>apd7sQTOEWbAm+{D!Nrq2MsUy$G#`D$d)m%qf(vK!*lZ#24{EduQ zpg9MSYry5KbGchqe6A}_kw1~w!E(}Lk#Y^WiM&ld2g{3YzC1TyURo_y-;R8Xe21J$ z?k0^TnrAGTNZumd4=8_-t(R)1h2$+VV3|gCk{8I|$V$sK{xcc0Lj7{`IC&3T!Q)#Y z0bl9b?qol52sx7cz)hJ#&LBS_7n7^W4dhnxH0Vj?_+Y-(`?kW<;d3HN*=3clPjg|W?kzh$AYiO zTyT}Fj6a$!D5#=b+G#WK;tMYNNs(f|al&Z3sJWJj_?$%K8@0IV7 zd%-VR(U;QTG~T3T0Qnxd33R4vvV-w!MqxX!Udo>CFKgd%teMM$-a7>OdJ z)tx!?8i^sl^Y|+o*-2LZS$$t}J-LUxM5ex~YX_0z$wi=h zy<;EOOWbeFbWb^)Tt|KbCLO_chd=1>KQQMdN92aXKXUlLQoLLI@9V}glEGwNvM^bi ze1)t*)+L*euaO9t6Jq3(348aHb#z^mRr7dY_gPe_p_vw^dpCmBgqfQ zDdY@t9=V=80Dj}B$FrGIk~xhfr6oJ)Or@oFa>TvKQEZbeNv{R=kO#qV`JOyOULvoP zcgaWOb23$c=1)&XkhqD4$bhUGi6r}zOUbijra)a=iyQ=QVeMOFd2rHJJ#Cd+3SoXL zx3nTVlf#rj5)awxXt&&wF;{%=Vujoxk}a1dA<~B&M@}ZElXJ<1OX99gcU##fN1$luA#r7YRuII10z zSVnXH1v*ox_?3Mz67XUqlLR6ZD!IvuWj#%uPnuvkpR^*|k#CXjkn70<QxY*I~qCvcae>2^ugD2;a@JCTFQ5ui84*AL0;4wDZM36m+L?oXIp zqyLl4UQ;9Al7ErqqBYW!TtQwSv)0mhTXHFRmn>gf<2A_<uI7jm#LQ@fdP6IS1UwP3)7cojn&;VF~PFNnvr5%gD8)O>QN3 zlV`|hWT&oLYA`v0TukmDi*?hrRmsNW+hjcXEotHRg~E7BRgn(lKynng-*LY7OQ+tN zXCt`{EFwqAljH^RDtVi%-AD7pkgtNyR76@c{wC?}Lg_`0AwMLSkgLhB$jp7U(y8Q9 z(36VDSw?d9)3p`IHsla;966g@Nj@jb^w<1r+>~?!bfFIUI@yhUkDN^IA}^AK25SCl zWCOA-Igy-49wYq+X-+qJnS4t654Pk0+Bo?s?SRM_&6;JbG6z|lEJIc%YmyDf=45NK z59mxqWKwdZsLX~hDxZ=|!EaMeu3K`*y$>u<=kRh!^mz3R$Zq5;ax3^y@} zH2<%p-(>XxU``1nbCFHS*T9308gj}fQ}KIQPFVyA=FDHP=*(ZR1b?KFJY;k7Dj73P z_v#>|L;g;ODPkDL~dHW5A@fud4U_UKA`H94k6Gd{6jb8AuK%$C8uD z8RRGAVsbT@T{e(gNS&t2F1z3lJ9aUhliD$Gq;@E{FvgR|*aRv0GbaKn#A2@ubg-LnRO9}Y&oFqyw zW$Am6!^tt^hh#kHN$KTl_3`n!GrNy+AC5})C6*kON??H0A$5WvKpN4%PsWq8$;IR< zau?`H$5`7jX}jE#4APf;mmEQkBPWy7m7y}13uj2b6K@$z_Fj<2!g zxcIHroLRw)l9S9w79mTM707C2EwUlmoP2}qM)o1!C&!bs$tC1AH{}F*3v{N8Vt(;r zq%tBIrS_MWe9!jyUPf-v$T#E;@&I{^JWXCAZ;kqw&1TJCl&lY)VErc~&o)c4;41><>tqMA z6WN38PYxwdx*^V#MXn(7BdhyS+V9Yc#(-I6KDh)>KUrll{VH-jY3|f`Rx&4x8$iAQ^&+q}0RZbyv($P*QCEs4Hv<2u%f$ZjioU;m)Hi!pGN3tu~n;b;01d~dI z?bDp|$dLW&+ki|-+dt*l@F}T!P&0KPJCQxe0pu{ynSx{tB0=&Y8BabW{SRq80~ti- zCd-hOz$!t~f(vcPKIAZR7P*}~N8SKEDM%h2@(f5p(&n&kWEi;-bf(ihtkZJ-nC6K( zZb@4HzLQo4)4R#3lMWyxlhDN$rSvI*IWY)^I~dy)gm z;pA9yGC70%nBbSF+@3UHb;vog7YnMB3yb@-H&{jOOn{ zenuWAL(giwh|(?7xiF6mJf|!2k)_BuGLfu^??2Gapfg!A5RtPy{bwcOist!(yh+|C z)BddSV6p&N0(42)N|abIm2?69B$3Q;Recbdn+zk1U1hsf@skKH*Cbnz>Bxw8fvQt^f^Hzd20{XOg4Y2*}^Jt>V`bokJlN%3q_20okA zcSK?t>EVdXa`@ZH-cxgZ>3Yk;@AiE_PiiP%!#8xxb`{xA9wkqaKatnLqyi6>CP+!yG8#sJ(hi~oh9UZ=# z!}oRgArAk(!%w)2YtoZy%QVM|*$)4i!!LLEFCG4yWbdi1j_g3Bj_fCokUx^Q$p>WG z-|(PcM>0d|NMW)RSqpTgI@0uoNO|dnNO>9bLL5JcB}XdBxMW{dX2DmL6<~yHNsdQU zmrVDPHWndq4!^@N90D=iOt5`O1#_}cKrq)~FDxJ*g*CFH2X zXZ<~?hLX}U*_W0t9sZWX=YGiidJ4lO1`FZxD%qNRlk7qc2c0Qg#xOo9IUX+48JXvZ zEOPi&4*!+IZ+YlWsybYDJ60To50@X3Be^ByQBuy_@>;UbBOfOFymG|h(>_khA1XB* z{sV{q?s0M##x&-Wlmb;8en7I%C(9lFy2FP(O)8sDIy(GZhd+_*J#Cp^(mlhCCclJ0 z3P@?tlL|<$XB_(7MPxamMdVBJ8*&GEfIJ3zQV}`r@RuC^hQr^3FCtHqBc8H3r0pO2 zlHCssmI->`WkG8HnY=<~Ci`@9)8Vr`Ps)={Dmi?t!;f?L)PJSqU*_=F={dZl z$FHLsSbb3;qw_uc>-iovdk_lgK=B5wvMh3Sq@e_`wP!eA`w>0rXf~GKUWMXT4hD~3{8;NXV;wslv)El`P zt3Um6`z5@gmYwmvI(=zxq#3@(i=Z##ja0?#T{-&lWCd^B4-;w?=_`?yz46Bb^}`5F z)yV3kA!+cvTcmn7p4l|jBn?@F6}9MVlXblDfg|**R!#NE1|P;sppW%N-0My0 zNFV2owB2CJ+w`5hkwcsC9|`)d-pDF^Uh|G#l_K4}p*Qf2O;7q>-pHSb^r7$TjhxtS zN`LwR-pB@gz%qz_us726xG6*Ehk7HUPMb1}ez-Ss`oOi5s5COONywr6}JU29nQMpn}T z@>9}~y79xXHcxsBU-)TSN-iVuPm1_ehl1TZGF$lQN7GvJ3o?i_q-1tW*3*AQZt%uO z=CouZ{nz9--gvQG`m4C6E#y|xkj|m{!>y+6@K9gwP@N; zVtyUTkatVyM7E}bzi^he2K-gsZ!iN2@*fjr@j&#J7`J-kj&F?8CyVs)gx zxN15_o+k~N5oO6m`k%;4-uS4-mRzC#nY`+aA8%sGFZ9>R8{YWB)|T9&zpZr39q)=q zv6kGW|BbxojhDsmMGxqICm(v_4|-ejnEna*)EnNI%k$){`)uLZ60A>y781j0t4=05XF&9yAs6iu9SuEZ+EO!~^Mr$ZX#D z(3zNP$M%tOkU708;^*LF2Ko>(k2fAM7e8#%=krDieTLsq=?i!xl^5byJNm-jNQ))- z^@P5dH?nX!zMi2kX>gpt-;->7UcykgH`BduEGa`@)*G3z4R12^6}*v6J1nV4U&$L8 zj(NW-^i{o)uMb*MoxX-Q(&RW^sOf9s4>x)~Ga1EU8Oh&l?H)(UJ!A z4ZV@hh%};a?2SyhY)Mo4X5L5?CQe?ZZ{dy1MWhw|YhWtf{N8ojj}0>1wGJEjnb1#~ z9L0aSaKkQw<(<$~hYYz4-3GPr9Jd)72K^cu4c!2ZgRX;)g06)wgr0`(g#HM<4E-Kz z;qmP#Gz@wO8V&sx8fUuPvJYky0=uCLp*x@!p3v^-GV~U7C-esNGV~W+kEgb)&}iso zXdLt+bQJU)bRqN}bSLyK^fFX%U>2V6o?|%-`Uf;RmD?pxVd4;Y3>^i12wez$0Nn}A zgMyc#xwQg6m*j+oL9;`nq1m8u&_L)YXcp)~XeQ`RXa?wIXnLrH$I7(OFlcIMv>V0` zCJyR?E`*xUozVQy%g|7$g-6Ol&@gBLXf(7sG!9x7Itp4Dx)53sx)WLfdKp>{YTyPr# zt%Fb=nlKdQp?;%L9=c!x$_H68b1KRQ;YD)mEL4C%wNFt2v>E=^I0L#3U*B$krr&}J zpu@MJ0_d1Ms34mq^YHO%1!ymPl-dgV`41=$9dZWcp---&JhZ|Cl!rz>LV0N4XDAg zXaXvLCSs620WBDh3ZTVjBTr6Cn$JfC&<3BQJhb*wl!w+|iSp1RU!pwpq>b{>`I}K5 zS~d~oadR)c3v)pgV9xDF1<+of2Y)dzy%P&<0bKxHau4VKB22)2 zWH{k39iXvL8@d3R=K*fiKl;lEXy{3Q*#V7(x_-xcXdUQ9=t5}dDStT!jfDn0#Cm8o zsGRec43BXBq4l66pu?bv(Cv?K{^h*CJkt!&@W;pieHWSt-2#;h{_+SK2`%vi>!F>X ziO@Mvx#%yap^?zQr&tet6`Ba01eKrsWiK=m`UmtPH1-*G_!7#yVPdcNOCy~!_}O2s zKqH|QFg-8=Iv$z`Jqwkq{$gPoAQD;(Is)1Zng|^Xm23X;MAt)S|AqC?)6hg{DSc`C z#a~83BcbP@BcSdq7|au4hC}7LKRzjSVMg3v24Tz&z3DH9ps~<2mP-~uTR~%Q`%6uX zy|K4bOE2gGEC*vKU4Z3U(2H0WjBppR+)_unJN}XjBUUW5A#?$BAoSuL{OU7TSN!TP z&oux|z=(D6*VM8Y8hRJ!8Y5Qd-PHKAF!EvfHRwf+<3%|1H-8xbT>$+OdJ+1I#_#z{ zC|-zTp$DN0pq=m{d=a_>8hYPfI^v}__I{YZdv(+o{g0>w4wg6R>A- z$uG9gK3;EI_3?RI1fFWPa8UEW-jkZOJu$W5l$uXF&5McX(0jyzuI~rA{Z6Ki955pE z(5$NUU%9v6>=AA38u|I5*#S`#Lt13Fj57z`Z8CktXQ`fdx@N2z81o5uN;j# z(DTi_`!e~R&fEX+*gX5kwfio#M#En2?*_H0a$&U{bwBU<&bfQ|;bb_|yJ%M|O4n z=F!RZZ>1_WD&Li5zXsT^Z8CSc+y(M}d`}|rhh-@|=$)WD4H7zzUz~YXu0Hj;MtAJr zx71tR@m^`9+LwNtV2Y#C=O<>bFY|lDuMfBNd*}*(T(4`buKjv@GZoKrYmX$Zmd@^y zIR~6S7QJ9|^|O7}u5DMZYu&ed_3&oO(`xc2S>Pw}KX=KIYv%iP+^Z|@deY^5oip{i z#&nH)yJx?*y&1EIXI~{F@OSdh(v2xwdvC+|K8e3Kyl|>|y{?Vkj_cyhbTD@I4v9=B zzqP4ayiK~A(UY2AsrTyeewFKWZ5-##l0H0omL#Tutq%b!|Q}Athk?jIghp1&$wotXGK`SGgU0@l69pm%Q$DRFJtxh-8?U~QIh-D zFua4|7sZ5pbzJ!q?w+@@BwVa$Z7S=ljd(yY`*18VSAdkutCY(=RLOe9FbdgzRjen5 z@3XFb>*XJtix;rm!Pu>GUQva_yL!so!2a#?xK z%~CsiJ!`sYoVQmuu&$Y{eD%+ia|g~3}%=lWPo**eF1RNb_N^_gK5uVl3}c1eudNkr`Mf;(p3&UA#lEDWJ>^*JO0ib3 zp}qV~tCgA8SNGtVi@B1pC(asSylK~c%j)ZUq~iYnqnAWfCo5}3U;EC!mU7$mjKmy- z_3@@>Y5T)YR=i;}w?n&Fe!g!johCesT4xwBcD`X&!8FD&yY5)4TdKPM=k26C zfTSD;+UfB`>!4vgw)af3`n!ByD7^X?^-p+Xn$^bVILO9K87Dl?xB6(CGGg$-lEWeg z+hS=q#9OCQ85!);Gp&}XeGVNgw*F0R^p`n)q}*9;`%?^QKCiu$gM8u8yhmk6V}{r? zM%eWhSrvSbh>$7;eES9PhwfmeL1<0vY&0=WA9jPHFOz~c7}CU zu*+y|7qYDyE}su4tSRNu7mtgRH(6bcF#GW)E7axlN`0XdaofkMVb8Yj(Q8HrGv}3J zcSzJLwT)eJhm|VTe{i4X^~Y*FS6$kKxA$7}@Jeg#vl4uFN}kRKD-_=W z|F!Ec1n2mFz2~Of8Y+BewefjtaGrMT69-Qo=!Fll$TM-_Q{7p8mFKJNg=KITwkY=5 z*S@o6`x&tjzNjYwXXTTPsat zwB5{bO|*PoN-U=vMUfe)TnR>^Ju{VS*56!77!a(SZC`fFIlAB1{;trPzHV%u2N4Vf zR<023dANPxNObSg0?zia@k>TJ(`aEAPV2hsyHoJt$YcMS z({;!9?Ndi3Pq*OB;$<~pAg-uc*g5aCaCM!vE1J-!gq1tt!@REPKA(S*n}fGWPha`p zJ*0i8>lecqVAsv>GE(_`3jP=E z{{Ah-b7=bbkTN2%>5^y5Jr@@rDe%DfQ7PAQm(kO%TGsW*-{&I*FR6d@*Mdz|Tzh@K zlBOJx=SJgsj=;(Aj+}5!4rmknuMy;URaXm_@w#0k%2mwIXa9Ji>5_+}q+0C>bzKcj z!{0tp-*v?DShAk-n@5}cl+M#F2>FYn`eU>L{j`Tbl&eBJ_I+Ad*ObIujD#IomMGRrIe^}3eQ-xs6My8ppb1pCPc zPc*a6>+-dReE{9&_5fF;VYIhP4RW3R``e&3i4&dw%+y1|v>~nXX<_&6n-|^KFoE?Fn+dI zyIsTn<7rFYb!X}izW?33?!S3U-8%;Rdfi?>)-}a<+jF;G)^h-w-TN3&H~A_l8OB$x zl0{U~MFf`A-s0=IF=deUJaIp?(~Nf=HI1zHnTf7vzOM_ueZBmn^7N=Trnsj1d|Z2R z+EIUMAK4%wc&clY;b$M8>I%31)1$}xT8WQcpBm5XLm#_F`+nVcVUwIi@^)-{OoA&0 zA2r*@X1d1u8Ds4?=DXf;`P_LnKg;unEuMoG-4pIDboDeQ*>8UCiuC=E`@)S;%Ua)D zun#ZMC*)Rkk!7wB%jbh&%6U(@g>lk^vrn8ki9ML`{z_LRpIW<<` zxx#hKZ6ti+Mg{DC)Lbt#@TKjgRb38(gN#=h(t> zJTSJ!!P(e68_9c!_JVI*l}x-$p5E*#@NZrPy{97~f1>L%X&g<)P=C=l=+9%B0=_>5=g(~IC2ITx@r>oT4zN$;mFdcX*!f^MC&FJnQVwT5GSp_S$Q&Gu(TR zxh1Z1OI(*O)O}ii;f`em+x6KOb*!!^->2)cVwU2jY*?{OnWLo4x97R`T-j&Oc?ZAd zLF*W6G-%qCgro^m8T<{i=d2wZ8x0x63ZU(X?a(3NL2z6nQk(Nq>pOiE0E`*f?p$kx zfe9~bgqiKE|4oL0t!vYFmW9n2c_P8gTCV;kqakadJK<1=-D-jQ@yr@ggYEZuJH7_H zo``hGqPOD>Y_5uShD9NL5*iJ5HhH0)P7_Zgj9_&q7I&M$X3s6|Hk;)~AF__lWbe&A z1a$hup2-H51D##jo&;;eY*u1DG}^*Spqqh}DAtJD?6-Mpvw2K6w{6cHws2zGo|$au z+!G0zEE06`nPFmNPXoJ|(07)Bt!az&h#xxPVL*DKecxHN*F4bod}tceEZ(zYzk%%=2Sm9d0fE!^A3%=WkVCd16)Ju$kr{?OOTzGEjG3~a(^ zG_;Sr&h+{t%fK#i`#J4ndY@@IxB|D{S)6#+zB< zugy2J_Nx6nZ&oz_+I$0xfq~5|)c3|XGrJ%De3qGw?tNn%IG2dg+CpxHE72KE*{hfu zumodx-&t?7WraWVXv$LNBj?OK%!5`j(J=eXPEQ9K*f)?p29{ujG%>TUUCL-x|@4dFeJ6c(Z4`Y`!v zFi#JpXTy>DIQfSem_7m*Xy4?AHfEN@k3tw5_eSSB6aNA6?<+?$yjfMl?XY|;Kx$?~ zijjV~2p6jXO{^GPH?va|l}CLdxd$Hxs=hx_h&CMn-fuv*Qfc`&91{ z*=F|cnh_xNuz!~B%}zC(Gs~M9l2P;Ea*W6Df@DavPW5bozaVTeEaIPQUUoCHuXC{1 z?MAq)_d8%OujJ6|hOAA=A6YF}Xm3~uEBhJp(3{;P`l>k^{cuE8T0>?7rKSaQ=!7vC z5a^sypJ8qrST?Pz9b^V%K>h77{16&GdCX$iY*i35Gke(DKWsVc8`d1+dOC4&Mlox& zHoe;__BN&Amx<9CtJvspq}CJpn3+3u7=yG$&mj+9gwKI)uX@|hGqbh%H^xP)ZewuZ zFCowU*~#L>v=;2%B6KUq6PMhNZYWZ#qL>cSVBC~ z9nFxxIuu>pN*VLHm5QYWYEwTpqxpk5{a9MF2Xg}1!@21Yv{xM#r-iVr(O*x8q5*5U zjxCv<4uOq@wtO@;O3BkZAT$pw}v)$4AOy6&^obqe9F@5 zu_Xnq!#gqixRKbQUfe^QPHcQ4wx=ZGY-SI&Mhs*l7qv+q$O4-qJ)Pbrc_O>!|HHV6 zEUVy$aRXU0L;m>sZIU~&CK=ebZ3dnZRD*W)qvw0dL&F z18?RiFx9*YJ7&So?1U-xstMBDeU3wo3du@@b=3EBsVyXEKh|QYF?}H0skBKpv!Hrd7dRE6^(~%5oTgDR?FZDr zTw&W9*!RA8M$8#ujj+OCL#=R@a_xjwu3n?(kO#aa)@IwL*!iR0W%CEJn~+{+<^>hZ z%$kSn$e5u23@$RvtY$-;_l0n)Lw&Xq$r{MK=Av8ARir)UA+;W~;$b;# z7AT0|<3RQqN6rdRHL&BlL;xE`bf~UT=1M5a#xZ zzIgI{)&i3>H6Q7=5S+jUSlkwD7SPe`C*Ek@SawF-hLdo)b?y&6-eJijT0=lyPR3x) z9*h}qe<7~-HKLz;VtelNhZ*m&cf-Rn#U$i%iqf_zwkhTVP2X>H|32@Y#g-qzRzx#c|+pv!zhescQP1qi4fPw7? zC2!W!sVeQ2VO3+?*m)#9{h@ZXfu&*Uxc;mGObfz zTA|E*T$+KsP~Q%yf$bgh(54&fplmKkV&m3snKOlz@T)carm&4GuL7;gx$2k17OU4q zasaPcfBmYJnMtf-x?^+_ON!nyCyDKk#rFKkV>%|WA!1ViZ{%0Ha7;&Ge9wWgB({%K zS0tghRRq$NE0NZxcCL6Fz?~{NEu|rr>G%<-drBTSAk%2T)LHaQbHVN7WW{So2Eo+DuLD6sq zHn95s*nSGomQNhK7N@BTMUcex@E|!vQg7 z<8fZ}@4|zjUr`s{0S;%o@H%j~rycZN$!1IKFuW_NEYr}zuDpp;`H=H72PoOBt%Bxm z)j2PI(UknUk?y!|WPF>3ZfXbj?!3J^dh$dupgZpnFfm)tj7n{;dOAXxWK7R$DBU^w z`uQ4^IV*u2=ixVbVm4znm4PJtF>#_OhwjP@@vJ+)?=dV8dlo3QRaJ3h`9?&AN?k%% zh0+sd6(~ILFhc~uq4{s2sIp6GN-8r=h$@vfDh}0Ya_3COzEe7@=*I1Nokdnp?(USE z+&NRv9x45R%~(j+aPfXm?&}v0%vVaPT0H^AXQ>#Fo}I!o2Pg_prw+TJ!z&ot0htD# zL(D$i!i8@juj7GMZ28hRtl0Bar1GHt7a}H*KU0Q@k-d1GfUCjiYdmkP!>JyksZQiR zgaSiQHjOtW^oV3Lcr!vX#7^k$q)mJ_Z>_`0`LZf;wHI%q)?Zj9^g&$I-PkV9440L4{J*Q3FPAyvW}40c3fRhql8 zpW4HKZsN*rgR7Sd22|RXSS8wrKyIxN(IH@Gg_sip*|c}aiUk9dWVMMA2OGA0h1e6q zll@jK(6b^n9wy_+?%1E!>shgyY|H|yKJh3kQPZfyq;4xjL@0OHJxzR(CMJe*?*_J$ zU!-kUx2q+f&REyz7qD$UP`4Nr=)7wJXzdE+wK*KmfOd;Eix{)$KT%H_aV_gY)zh<2 z)Gw%S6!kr*enkUsst0`D4xV=pKmK_NxZ{@J(+Qh#R1 zI%xMaA^%w@@@Jcnzgk3ub2mRVYMbiMep%@b>y>2N3wC+aqL$F!2yFvPD{2SrE4CeV z239T#p@aR4Vo$w+McE-MQ|t-nlbn+SJ7N!GGgzyigS$ezvuNF$x3{hidQ#v)+p zLW*?$?1Iq)LVp)H{%m-NKeS!Uos9l0G32b#m9;mW13D-43h>Fh@VP}sp1cfH-wyQ7FW2OX9x;-A9 zI5MH!WMD~V)wih?B%b)sy0fR3dICzeO;U}_(;Jp!EN zMJRo48;at}Vg%jnu>EccwinnPfq{df^fn56YJ-DC#^PYUFc_@Scr)-vkwe+>ILmj% z`+a!J@UP-g^|TpPOJ<Yj_d{E*=>+c2CA@7 zGty+ys4wqqO$bDfR?|wnSh>Xviw!0e*0u_kH1W@iQ0fiyfV*^oeWUF# z?z7D}r^E5c`PhuppFd+Ftol9T>vB=*YugU?`gbd_J=PXAYg;KsMFb`lVYf<(<3|)n zCp%PqRE(;sTJM|uq1gJ7$zfmMR*@TdpU%D@y8N^@!1BWcy$VATyQ&y;No zlc7~FgA7nuqbSVMdp14M_kFY~_sMAQ*e77L5ykzN@z0=J6fJ&cJVqjq+Gk-s4D3_V zSuWN_aJT->6#b62gY953S7PW=DRj*#bek!3vmtZ_c8zq_IAGSDD0zvIU;Qt(T2lQ>p_kcJIQ8)82&^$Kb2jHigQL{AuE#Q1${uwxSDZc^T zBb@rfh0-uekbH9DYA~uEqIMue9M*=~GeQa+{aL*6uA?XGZh8Xrx6nagZhGKxCr`H3 z_?eT!eho8%)=*djsyt44IGN$L*T4y=B(4s{y_^v2Vxs02&O5>&Yg^4|EwYcP52sMM#P# zB(4dmPxwqvf40uJ$J3QP4Bij)oN+(!i%g#a4UE8CJ!bPcvu zZ=WCH0bq~`<+X*w00^^)^=;(JTAEt`Z9Ksf=vZ@Cp!xB^K-Za(4oDaR^qe^k+iA%_ zootbY`fiS=2l+y1RaR$$W{Tf4oH=?0&A>Tv0nF%}h3&r({GhrV2g=0>Y zP;m*4z+C&3>UCihN?+OFj#?Fq{5Iy9u%tc{u#m->=X=9BC?2I7Dai*Xpw5L6=0p(i zndq+z%t>KO7NU0%wv}EA(-$3gf=?A}kHennQuG_Y>RH)F4FtJt)-pb z2lBDR4DEC~Gql%>I)iz8@3Q!l0QQ=ZX3oHE`kfgo$+H}!O{m!3St(`==Iy$Up;#=3 zZS2Hu1zUU-R;wtzsXzPF_^>JDR0y7le>XC?)5)X~8%j}FVcW^ipIO9rgSoHOGcU(4 zYHpLz96yC66ro^a-$l?qV~dmp zJe-UStfdL-*MQLcHt<0U?U@$gxa6x%n0H|j$Dr3|kW&V>JgR0-cw%Js0J;{65-c;d z{UE2HuNkFF~*GQxZtSf*Lsy22)-YqsKrs2WLaQ;`yAVDoKp`0j9) zg&S7l7tsFsmD=AGp|qo2Gti7HL8Df?0BFB0+75+1GcFK4Ei&E$*4<$A{WGcq5h2)q zZd?TXEShU?nx9ixvIT}TP3@(y@AdP5Ubid)I>xZF7x>=yEg0ZqQ*kg{m_=;`ddo)d z?zi*%mM!+g=sll?e;Qw>iRX~uKfOl$l$)sxLPZwJ*=@wYDoiQn0fvYwpUPtwcHvt{mXg zBdTXxX>Bs7eWMDijbkT4$9M7{`DM1S&@Iv8&&27;9H3}~>EM~kE=o0r6aC(~2+NTq6 ziKdx*4f14b;==|hY?pZ;P=}PEKyURkF*d5||oX!%`0V_rd#|_lUoYu7@t!prHxFF}$7&H!SN#SKCgdgNH@UwZtR!8icf7U!>=oA0h)c&hQJXHd&MfQ;oI#X+wnZ3#9J-Z5p2yVV;6Vk@vo#2jdxv5~H!n%tlZ*dRzyeQ1+XEqL#6t*(f z1!yz6^=K&GdJ7(>#-+TI7&SMGs4Gyg1mdW<&wYw?QFFfp3Rh?G-v@iL)#i&J?U!&R z(TP>k`bVTy0mou{8)&aw^ez;_0vq0#p6trfJ7y)r<*E@Y+W0`ECDgu0XMxj3oPMM= zq&Qh&e;QW<&8A!N2ue|xFp4HEaA^T|36z$P#-q+4^97)D z;xTrw;BLc-&9=2sotS@-MU9$U6olu?J+_Tf;3f=K$e-nyMgC~s(CS8Ox7@Zr*y~sH zJO$RsR-X#De?^$!I=UddQH&mi+M&+w64Y5@hdR60;%JQw^Ljb42exigTC?j#8>T3% zrQLf|qUMf((@<+Rs$}OBPd3AD{}g}rd3>8`tyw;u!G*p9v`d9wGI>;v=?#e6SXHADaz662yr=@dw5Kq zJ`a{>X#;o;#BxkO7v=yek%$ZDF+4aldgM07*=b^CnWl`~0qBB6ieWFHZ?q1zqEn9n zYU#<~uh_KLr-G@hBcYsH(PI4=e$D~Mvter*p$amsF}y=)#flJMe(iC zFA>V%ixG{hWoFrZK8zQ_Y}rYY6`R(ImoeNoU{i7hvtw@Xi2*vXpHOo`%WC21cC4S2 zp@Vj87$Ni}dMqClfHrHgnN6@eFjK!)YqBMT?kXK(udA+X3n9&z+Z$84KNcP@MyKX8 zH}*BD+*D5MLjX1KL1QYOS1X!WH5ujArtju;elYZ=!}O7F*KGB zQaXtD0Xg94jaZ5wjt(}(#aMWP7%g6bY>4~v{raY?ZF9}D7R!$T>Y^c94nNkPkmi{m z8!u5qpDU~xOCzND*{s@6ksL?9EQ;g45Wx`8JWZPDwWpyOyFm!Ua}G5t#E)@2S(z-} z8c+RZ!66j;wPQZ5HP4*K6&TvFRuZ)yw;WIaAD8C=M}2HJNtkTcr6^_p&zDj&o|r+0479YNIb2P6;&`2A#6^&*QU3D z%nx%njBO+4T?LmToP9w^3qklBHeYHs-4iGkPwB#0LVGlJSJ_qHp!8vz3E}PtVg1-X z4VmngO*i&qM^&qlD0gfMicC-ORe7`l1CwB>a7N=;t%~Lr$beR_e0h$+yN7k>>$Tmk780 z0+t~WZu`0#-l>>%K7P3KRxm4Z!8ORm6|9($mWwN^JrohCl)MS4w8=Ii zst|`#DcDX^NY;D`@8A)%@(NqSsv@+J2CY=}Yu>Pu1)2^x&{{UUAE_`nT}NHt30Mw>0}wKC?TAxg|Kc}#8)$TGM&$kviMk3(em^tOCf}L z8l6VQ=A^;Z*D%p zK4Xt0st~Pb%B}M``+9t}OP{kFgwUmpGs&exGr^^YnU%UP*`E_Mm-MhyUovAnBF&|9 ztR5lFrSosNRDTv(=?n*Q={!pzP0gkAEM1}sF?AMPI$~+Kz+w}sUAn*~5yE0{N_T<1 zPe?nB{)3%+EfcS1fuFd!t}wfa*j@AGYPB!0npasZl4+~?hD^lFCOzaz<*tC9O0-~kT|loi1i?Bo2R3Ze;t+O|bxEWStYRUe$%O7InL?iq z*^2YKUG0+Snoh$G$3umfo(>fSu46QGCtaq^J=P9B=6;?!CJs~5zx;EYl59# zvQ84+0Q8FWBXp9TXaF}z$`XlkGUhrd${GzRIimSo_(EfJ>N+P?@vx$?9JXNL7ALq< zroWT=%sD;n4SyjFxsB3N(=-hzI`3qobdYFd(bs@_NaQuA%E_#RNrbCuRw5TgN9(pYbtJw&{(l)&)`s9O{JbhM+V2Z)Kt7B`nKnI7gwdZ zM8Ef(2&lb8*&uUMx=6H2be*rI6dm?WpU=B;B~9#Ez%%HS*H!WS1P8?Z^p0m&r2`>t zvvgIe?&rgLD^m0%H>-f9<0d(=FT!?7MpH}(uHuD zh^yLF>3ay7CzYIx?G3vr7bTkEw5MTrlpS&YttKtR*xi7 zHO+Wz31!9Xfiy+2N+9`BFQ$7sxUfrp)^kJ7{GtOxYz-g&0r(l^3sT z`Y737RIBt+&PY@t$_sdg^}(dGKK+!dU!h8lNtbvL&~1szK-OP*Akl?M7Xke$QODI+ z;45PDu)R~)kpP~0Ty4zhtteTha`K{!zHk+5&h6*fp| zB~fgSsvo2TNK|8K4jZiWl&Hbdd_cV=TED=e3{eJ3basIQAEJ!X5S@pklnaE4O&#-{ zeWR575(VY^x&!=0!q4)?y9`xcYKV1+ZQwgpalD9g%7O%nTf(<0>xF$G52my1C?%%~ zW!hPGl(Li%?#SdqxGx=9dba5pW#J7}$uUhU{Tk3R4UtbV%4R}Z8pgbl9LEdk^6xoV zp@GIKgKwf0ZJ@ErNJ2PJ+ohyAX{o$rnow;8vT1_S;#=&eorNYS{)AvWu^T!-_MV0A zly`|r*ITHm`I1;|MR+a)&B>xG9-_tYWwJx6(&Kh@htxMZe4urx&^p{%MrWFU<uKw^B99QXYN(TC=iQmU8)C_2^mEHpS!>)Gtpv zY+1p5>s^bhU|CATAFxBQ$ug%&^DL#4L{A6rd$59EQ39?PPVDlwGRBMrzZiZ8u)NDQ zWj`S;Bs-L^|AzjmU;ADa@q1Va?g_bvKT$T@p&6W1KKtYi=R8ZuxvnKtGbWT!#rpsd zJ;OMpWH`R=cd6&0>V6QY!^+~nWJf&@SIdM$DP=%tDcMXdr4bfuhi%&7Q%&|zJGifs zejZkCySyGRq1T%>2Y?F9Xfhn=0mYj#v5I%#Kj(@sS8*SxrWc@NoGY5aI=`t`xl*Jd z(_>+FJEp9a$hPEhuVczdLU)yqQ-1GtT=_;Kljy#hyiZsyUHeo?@p$dphTuomIw3gs0fE$|Q;IC0+#0sf6Gx ztiK9qj+6}$&DVf0m0~CyJYFr@;`)Ws(;IExwP{j-s4t-$Q#Y}84PWGk_bp#3cbaI! z299yyUnwT|Y#N<-9AZ%}D2@`@i9u^&twP13wP5<*gcl)~loTn$%Y;kHOo_&bb88_t zGKAYY_%djNFmu>9ia&gMjW+$loB{Qas9s2;uxrYALU(OSNB9CtlCm8l7rMhb9$5z$ zQx`^ru(0rCh#6>VFa`Cl7Z{Q5RO zP8;zJCTzWbMsvckJ8tgefp5sf<4v?_>^IX@Sn_5-6=IQwe$A+v$b$A0e>g$ zf6jdq85bUVL-t9~73T1l=2zm#7WquWk*^+rPTaM@?v8wuMA+StZ&d;wR?B+wHiY2g7l?cy z50>aaQfaS19wE_%q)mXLG=%5+s9wDIFSMywF#m_td~AU#8N#niXe*|^2lq`_9z*%e z2{`Uu#UxI>M<>xb@5A$zne%>+3g?R_l8n|roUf7y*FT)UD-o`LZ~l=)xc%)H_W{#k+}jB*OLR$5%>p7h>L@e=SkZ zg?)zf=U(t}B3NO#9+7;4M7SQ2)myGEY_CW@jfA+N5N#)fAHek7PFv_L?Jx@t9=ITb zxCuV{d%akLcr8Nk0h8E`DkJ9a8#b5^gb(j9;o&HjoUM}Qa6Jqq-!dt$DRi?O(J}T zn#LbVgiqAccw~mAiBHsK^05-(6SbLqxd zyj6UtMCU~3-EiCec|@gd4PPUf-$$GWv{Rz~{VH{9dAUSMq7XV*4^FGpt>?D$H0Li( zI}fOyMCDT|bsKmqiN2k39#AidPEW1WZRA5FxS4rB>?R=CdWLOg#^1u|%OT z-X^|YqIfF|xQTx#VE_!cnV*m-8V20VFG$f8<%69&zWWF5fz_)X!Y|V?1@s+v{cq578#-9h|FVUR-mAV}~OroOx=K+nB z=n=?v^2rjJVYlq$b0s=3%A)Mz%O$!JGRlGP;#(wa4c~*@&G$*v|1Af;n}06R7La|& zzmez!$UfwcG{n-xZ+m!$aZ2>on7zCphrDNZM{kYU$Dc~{%jnZFpK!ZeO}2N&?U*CH zokWIy_hXLoE*di33|+63^B{?S4E;H#oJUGcPqAz-T>SnxJcpg)52T7k9NY`rI!WBw z3!lVQh#?=rIih4>t%hIoGX>gs#|AEGbD0lXtRcJ(yvoN&w1m)PLfRG4)#~yrKK+Ou z%|w4pS2lA#mQOXVbGt$`h9%pWaQ%%A<(lR-?eGi^ba#23AN{LC@ZUPL-bXb)0uRw5 zVIMe;m$Wyyeg(N}!g79t*N_Oy`3>HH5SH^3!*22>QifIiCT}NEskpok9&TXezQ@Zo zCROeS{0oVuE}b;;M}9{l_j)1h7yh$ESk8apY^4@6Eay+SMItQczj6-^nXsJy#+yp? zj{)Zab(ET2#Kryar3@_Y&v~{~!Q%d$FO~?4`wPBGA}sDN_`4Eeaev7_lBl(aIRH`G zB{B{`-6;*iLkiq)d>G zay#{kL|B&FsozV4Wx2ijt3+6q+pB7+mRxD#i$lDF70Yr5HB2(GEO%0eNrYv&tC}bg zmgPWownSK#d#MXGL}fWhEs_Y!a*(=NYI;u4jSW^`N!bCY&S9$EDlMR2i3NwLI`2G8 z)w%u=xTVGFJWRc*sW7b0!_`L;VRasqJ7H^40tDkAebRCMyX!VLjPa;Lrquhro@fdaRTI_+PJAL99wfgQi`6v{Z$zl;4 z;DOsI-59mm2GrC(02`~$+ejms?B-jPI5l6QM&jI2CQqC9Ahd@bhj6VDrJgiQI8QItQtOPs`^r* zXW;Hs)$tuovsk1ahx&t`oJ@Pe&wapz6V=1x6fD~lgnFHT)7IdWD=b4zc^A89nPO5@ zeTKS>P>#tFZnHAfbyC)R4a&AlSrYX-AY~b157=~=n%r@6rus@U=Zj~^#5>NpYS-=B z2u9KUQ<&e-pgu#g)Sw;YHN!NRr@ku@-WktRhwap4cqcYrT_e$DvGG&b9_@N9P0Ch% zc9DuHlu(dF^$0~tbT@D4j*vM4yptp@vxWvXdaIxmz1HWZA={1!|~)z!fgEi3pUNaBMPa6Q*AYI({U)#WITev&P%wLE3L8czrdj`BH0 z!sBy#{*bDn#ds(e+dhZy8Wm5kJLLm4@nT^aC}W znE1@jGW7%X9YS}NMSeA>?ofAVGLv6v9Y7xwI?3>Zz8&fbshK0@oQAr(Kx~17;~#@8 zQ+KPUPvWq5l|KfF>!*2b`ru@bI{H+#YkS^^LCrI;b&EyB8Mr*aP5!a^>u1%PAFH)1 z5S>&oKGg{0b3j^wj}&1pWomQM#JRMdQKtI;g*whSq;@ByX&zQX|3cko99AOEaZxYtmqXJz3z^M=3SXQ9kuv@6wbNE081X8{u?@je`Ay64o4Gu4wg_tzxK#bZzz zSFw;yx%4;hFRO1;2hID->id78jx(;PdkJaYUscQgLfvOvRX-(kQYkOolJ<>y0m?erMUr@SVg$_#e zKIbp_d>$|?u!7aojXSUD$0>nr-1bjOlH9aqAR)Wolx=1uR9?>v~W|C~0L}g+p zTFDfr(aN(N)cjM*n%E+8zo^-~vl3A|iN=sDQleU-{spj-AUeY#U{4WhUX?NjJ4C-p zbh8*yjelr1!${Ubq7+exRxXP7FYqe(S;nG^VC+{4WYX7Khf5U5e2GSdps{x(@}}?{ zlW3`^g6>LV@f@vmk3h|c%bJxVHi+US%8NpjEzvWQZIEcC=>HF}(ojr-LqIMC((j69 zWimkt|l8usRzG!&~ ztXvm;;NUT;1jqYc%4Sd?b>C<<^Tqs2yvkz)`8%qTcT%_pNA!yO|mM9R*Q#dMHRM}!Aj>?bZKFgX2pdOwU_8) zk`0w8M^vGeo8mbfJfbNJUrE_4ilpZ~&B|iY_8Mg2Ta<;P?rY3K3SFi|H$=dFANOihI`$;Awa-rBAkm#3U@d(XK7q&Mb3zv)gH(+YdDGM`x)~sElP_C0` z90l))M9nBbHzevOy5EGU`H7Km2nePu%>6~P@+oE7Hi-%;3r|b*iex`Zv`XwmD?Z{h zT3H;AOHlkov$Bx_v|pmZl!aF$x21hBB}dB>t_kWS$j(~mtS#64e z^K;G050r-OC5j+fltk0T5wvnbT!llYJW9h?QudHEJzr>6%#?4^wWUM{Nfs%Q8^vylL{E#w1~fBM9J~W*SR_{8g{l2XY1j#V zrG?i!dl2mi@%}wc&CTK!bcYI5=LfJ7 zM0vPN$~-6t=Op@(^6+PgB1z_Kqgk0LlA*hDN-Tmyrvl2uGAa9+G_Ol!Pk9JmN1$|Q zLjh_i(W8~(#t$&1CgM4onMScZBZZep^(ToAlg!apGgF&_*G8ge#Uk=Pn3*Fc-G@9Z z5q%!O)D#NPQ+Vez=HV@hWi5+_5=hobqBazuQ4-A*>!G`{PaH%m^C=H?^nHe6_zf=x zwy{JHC=Wv=($lo#CE6eyegrFJ!VeAsE8?-AqoX$ZR?=)Oks$?TgCx2_vS|{<2`gGT zBUYmoTZ(~)lV&A{;?rHCK$68s1V8@;oAV_q6c5qLX<_>loRqgv8aA(?S(!(X>@U$4 z(d#Ej!|{}c%Um>-5(?di65R_HJsv`^BgM#v;8Qk5a#T%CHG(3UDUnMUda*&G9FiTA zXsg%>-IWI7G+GIzG)!>StTdn)YpuZKE@THU-6AlIs<;C|94mGh)2J37qR0vZlH;)Y!&$D)H5CJk)x81e$9FlhrXa4R5fV&*10&U%}6kjcg|b#Kf+FD>k&3;pNsX(VUY# zj;r%M;rfhhf*H!_Wf4hkC|zoMto3@6ahnmOOm zQKh<~up2#48b7I;VsZI*bHWwS{=1J!#r$;@t!RasiwjZnhZ?B4 z8R%b{!r?i0>xJF)vReWyB))&?@AP$KG(NuVRAES8^M{Fq=e*Gi5`an`s5M}F>r zs>pd=Av@CvqGTy@sw@4QZIw-cU%veF0$|1JE56sOc8!mwRGZUw&TU9$t;6eX6GYq# zcxU7@*qrc+8i)~RrtatwMoPyvLe0i0J37MqlqfGX9h9mh)yaTpDTJ%TX?wpO05{x! zZogcCS5EDWROw%?5Di{(*ZS66WcI0p`H34tVSnRby{IEnUh*5g>(VZN5QI8!()~~~ zIO|Oz96@zLlUBD?wh!urj-jT)?&pih$1rj$(#0iF*ux~GTHNGfh%f%+ZZ3uMP>@aY zdQFR8aaZB^iZ>k#?}!AcMzy)iIm#*0e5w7nNzpX@Am{LfUFdwuT8!{TpgI-^uIkwg zpa%Ggu~_qp`&i5as@?l(0PcW>_Mb;$&%T{e@_CV>wvX8iQ{l|e6m8vwQmJF?g{%eoatwd9kCT0#ye+y9&QXQ;2fnARjrJ9qp3G5l%lkrlXV4<|3gU8M(Ox`(E_K z1+%4s{GT|VlFqLS9UXOSAGG0>st|H`k6^yW}nNbP#(fP1CBzUl-I=!A|JaRxVlv zOId>}ezy>l*trR&x@%W$YxMx0!ZfNCpd>4DG^!1U$q(-j3$CVh#Yltd`!83wuQTsI zdxj=7qgth21JxP+-=he0tcv!-zjCxFX!OlqRn|8;yxI9*+uF6vn{@jMbVcJ#r*{9o z$VrAXIA>b>UtRe-hXOSr9J>Wj8BHFA?KMkrFB`IPd(HC0ZKsuBt#ju5|EZ2y>x{L*{+0iK>8=&$io^fU=k$LS8?s~lKM3;w#GyAABC8cHpGHNdjcRZ% zhKzah58jC@gpJx>8NTnVjk;5XA0&sstEN6qAIo~O=+s1J#~ht!!?h~%U5GP)4a_?W zuc|+|=qnb(4*OqW39PjFb(RYB7X05Sz4E>Xest<@ME_*I?DqsWC6DdtR#z!ymTXUG zH<;z4Y-59*nk#k5CcIk7t()S-qHDmAd93g9Sfv>W?y(iZ-lDo$%L|t)PD&YkJJnr@ zPTj2dDyuuV@Yc}wL>{1Q&CKP#%){wJK8tOi{0aOdrh&T!EZDdo zh4!WV5ay%=kNt`}DL0`#T){8)JJH*u(1ItQ1r+)Cekose$?Etk&r`Nfe$KPVP!^f+ zRI(d8tDefoUXQNoZfN&W%YnwI6=dj~5;Woi^|BHbbqm59TzilDnE3AS zJq?3m!)Z!fUn3OWEtcIpgmqy9Qb+27SV=*g&XZTHuv(PXpcKLYz_0B+c}YQv&WR65 zE!16BZh9Tl^#rM^SAZrmc*|^RSAAcI3e13c=M2*irU(t^GZs$L59cY%3iP9hGl2Jr zcubm+hQ2tYA(n=WWfdzdN-D>fUd=*kWmyDL$%#BZZtYaVGTu7Z)0p_zFyY2&WHg;9 zxB=#}$y_#>E2X}r9A~_dmo`te*~b0-K2Ue_T{*Yd0si}(dp5(lTj>*@qu~wE#H8(7tn5JG4Iza|U{2O?`)R(AU@DHjB2Vc5%3=)=LUcrO%mOLEkaxfe9RUKk!;$^{)D1#}I(HaI4L zP6$iTHTCdyLfXnHRd+OG9&tK2bx}Izj|O_8LA+BCwS%bLm)d=)?Wx>YvjC(y8HG-L zi4Ml?V`T}-G+4)ty2%TwY7AC#m)@(9s2ui>)7@0}=Dnzq2Lp5G!OGI5uFku4x87># zyixaEN)_-|xmlD%<>-ogHA;2Y;XPW*_=7cFom168u{kVH_j}V&Xpe%oC#9fur3T&~+uxZ1fww`jpu=X<(s?zh-(KCaD=&X-~MC(hF- z66rwgUDB10{mU%rN;lEdS#_I$JEVZ@J<~PtQ}qQgS)s-R!w*Ol%;gI8gkPnu zLUk2KU@$APHdE&c_1t)i5}zPIaDv*Y`mhea)Ev%NEOmCBr8nAD>U!!e z$s=8D^v4^gM)dHVbD6I}E3{{R}G3xY3+o`KF~mH=I^rXhT*21x=e?~*1nXlgrE47ayR&%xThWq);G#vkz5m2XxVs2 zH#?|diEKExAL?BzPd92NE@0{SfLf(|F0|pN))2;U{pF%;;JibeW5lr^nqBL$J`UQC z_3hzZ1ef*e2IK<=r7mEz%;Lho^S3B29JdErI8m!ii5Y&TW|?xW2v%Cxx(1l5%i~Mp zbOE~T;vDA1-xY4IP~~2PVh)Vz@mOD`C`03PWy;wiRO(cJnR`#ecO8U#GwF3?pNnp# z{F3?q`%pD8KEFLooVEIHu+vazGsuy zD}g@}eh7v&yOh6ZjdR7kF6H6i=w=u!5z-p#f~Ou&hr@Ygqi1!t6Mrvc-3yn^yp@+r z-P^PQZmQ?|V8ttpxB|6f)J%BiTYzqHKWB&5utJmTw$>-jJg>9SPhB*v?ruY2{n>TT z>C5`9tXrY_v{_rXjEv%y#7^Kur+x`^`N%6^8jINpa`Av+aHzLODc>5J!_L9HRs9K? zhNr&Js@B@59&jl1I3w*`^xI_hxFA8_wdXxHs+E2f7VH)R|KE+aV|wb)MF&ds$g~Pe zxh^H)mwM&8Yl~d#=jrBoHU#=@ZHtnp+q>4;;jy82f=~TthEYAPKrJ6%!`We@x}Z~q zB~O<#-`OEgcW_Pf`igNWXfET23gH*dHw_)&ZDy(JuBNK~o_?!n=?+O>7-+5UX?&b* zQGAU*6y-2qBVOv3>(ov~^=}$P=$iWFy0La|162)g*RN1_+CbtMW5>Q5;Q`1R5 zI(9Xj0;U4>f?v>tz%@m`;T4wQykLlTEjty@n|3OmH(jXhLhZWLu1jtBwFu~VQQJ<% zv!@HuxFqkTZ(_ZtZ`((S(~)h8wV8vC*4}qBtXBuc_HW= zU%ReJEa-pIWE5O`m03oqcw!nwQHfQf^e3Cdic@t|XSf^t9MmHMKLs z)F~b7GmYBmL^m40OS$cnP3>^?*35@K%it2dNOw=SeD!UgjYfw?w|%xL~ zH37t<^Ade4VBJ)Gxv|OYxxk4|&GFsFTY$N8;{o7oGd2>1b)l+m4(jT>&G@ZT4%=qj z*~fuzGv3crYuz;B?afBx`tG-V&PhWTR-g2}2kj8}A6PtnVGkO+!FzY^87KNX@O#F$ zi;yl`f%H)d+Cj~2##gatVX*WZ2mTB=iNJa2egQa_iI!u1+-Cf$DXJa?s+csTR_<4Q zZA{rizXkeR-c{((8Ll9=8LQxBT{dh}2e=IcO?Xv-X>@b9roN_ud7e#M1IMRnfjTfR zpsBlQe%%n@_lbxG`hypoj!paRudr;jl~XqhDebVAr(GK%fzehDVL zeM&H;l&Jr&wW|S(s!IQN=H3f)FEAg19~g=wpdte@1Plm%fPjpEil8`(;J~1eLoj?P zh)wu`f|QcvbqvjEX=^t7pe&+4)lzLWyK3rcMY$Cl*4navv)s(0ZQu7DYi;ZQJo|s1 z#mC>g^Pcyd^PY3xbIyCtz4slyLcvd4t!q@M)kV4>a(xEaK6SnBHLTapG%7;W`*kgl z?LiPKwmqt=P%N4Dg6<@n4?l=qp$M9m0l#pCW3$&Q2j1B0RIJ~)m~((6%MbBWr1(f! zArJUZa49Cw{$Q4#&ziHb~#Hfp;=tZ*Wpb_}e z&bSq4?p+u)O7sXN==slmlaxfcW ze`v$u=vYpGz}c~o@NjgX5VZR^a5^IQ1M-fS3EzoM<8Z;x=5WE!r$Sr!Z7W+D3(+R| z#|J;vTW?mjB~=?!caxv6J3FSCXuTjwB{5oIP4LTHq8xoUt?*ZSLwgMBRWY-LFO2S; z(851)@ZK05wRn`p1$-w}sRLDpV|H@rF?B$3O-$F#3ci@027Xh=%CyNwe*1p6vYYrl zgvSX_5DpN&Mre||_Eg251RBP~d176p_Ki?wqZ}?IM&Z)o^>L#dE+;3*K(F1*>@(*# zalSWIL^}w8ygu<`l$Yai)iTLT+WjZ^g7<=RWA>5K_yD3g9>-Y+mEVCS+qENf%}jFj zz5s&>_H)w=df|YSXbAFT7WVtK$Al8C^B`B7j}Et{z^#lWPBLMItRN5_yx9?MCXG1R zgm~n;R6%=YomWkL7 znfN^Pgg~?)PJ(xx1##C3#G-v2$u33l`gi8LAj-~_`TdHo53>t~75i5TfHQ-m7VPBj zl-7p8AS8R{(a;hF+~;(Yne8c~4L|g;2r^GY6>kuMz(w;d#P~e7PNM623f=vXjsx*MzE4b)0PX zSOEMG;O>WE4mf)MeBkg7W9kVOr=}6`oXgdtgx9E=Yh?LjR450R15Rqau(uMq_ovTW z6hL$f-+ge>bm$f6IhW$B;z6xT5i(n94rN9Eu??>-8iw5M%rKvyb9#}$v`UUp@OwYZ z7@uYmAAu7Hlh|etPBx1Q={DemmcyBZc(?b3B%`=%R!CZl;!oA5Il%ddpDV-DLP?DZ zkWWmjAW0V=m!OpCfIpzrdEqwC#aBXJCqF@zmlo^wwp5a41Nm~mr!_l)1Dl}?reE%3 zfOVdK5Teku!L|Md63_%Y#k-qD*lRztM=49D${djDo9^Vl+&?kh#rr~`HgU(!>FH^Z z3SI_}Cmc=@D|7PC=?v*E5oOY-cd|id-sEgA+%RQ(;chP5>mEx|)8u?gC1(W4cwr0X?+Wqb%dQdEu zj5F9dbQoiXrTm!;m+WnF%kBz)HACxDyvCgYLbgvc+#&|(8WjJ&QNDOkd?``@4DeSk z?xKR6e9!pE#ZJB*&@ImImoSFsGtZdt!?Tm|mEKk1J#lKJrXCh)oI?RZ?CVQO`8mj`gT*SkpHlGxg z#h5QktH@wRyl}_l7G+?#{UUM(#g7*tBHzR!XVfe8NSpDR*PK>+w{eWjqSwchZ6tEb z;`6dO&CeM*?_AqSqp$a&j!S;N-nb?Tpdv(L^};an{XV{{w!>LTvF*=BGh-gdEICW6 z4@0~CmIRP%8blZh_-CV&Jyf=3iIW{aXV;P;S>eL{OLUlOhYfj|$+@IgbT`h-iUroZ z$%D|PcX^L_p)ZgO)t7N@Ic`PAyl`s8(?xL9xZ|lR`Jm5Qh|#a-GYZi~`=~oPE0N2y zaI+J+azH(=0|(B?@(ys__~B}|GSvIgjbj0Bwz3Nk0?JGUS%Q)EHYR6fdlyUkaPZ#o zVxkY$o@J76+w^r-H|_5&q{RRoFrW2l?3$Eqp$_Ske+0*;GT7+h3yDYKtl2|8t>HD< za7N^4&$d$Y>j*ocb3Vx)6wQZ~IcDLFSuF2VZ0`)taSDH}kIr!kb>mKRmwld>-Uw$k zVa2u$Ip@hK9007&36kMtn9Jf8B9|>C`ze;b1AYCDwkc(~Z11X$92eg$X=lScU(_~n zX}`Qa1&*F&+apSs-tf7s&0w0n@ffVx8)qZ8ShRcF(m>zN%CD9RJgx;=-|8@CS)gyl z5drXv_VLS%zU#t*fnG3q7T~qaSitqG5HD^(e9?E|vI^h$DeIQC_*Qq`z3i%3eyEk% z=}i{h0j9H->!MyW$^Uxr^s;VGFZk||zFF4ejsD4TZ=AP}d*d~=d2f)c@?r5+<9lFU zn(2|tPk0B|)+~4Wwuf$9K0tY2^DbV$H`fhUvn%(cH}BY+dsX}%tm3Npyr0jCHfly9 zckXb`@)ajo+%^Z%(bfQaJ-%T@uYA$g^DBngaZyTHzkC!b7QAlwvy1yl3dd=98W^M+ZAv@e34=#N&>FCXy#GS4keg@HZ_=F%U*hERfuP4e%}&t*sG zy8KDH62T^U|DL|QBI$K7>*0N#Azw6GmuHLs4NH^wj}@wwPW~0$gq1E>l7Pd%oi}AA z-oR>S;HQiBg{&Nd?nzi_hG#@s9)9;`X5Y$2h>q&FD$#qxgz>8cKQt;0Ax!i*KYNho z>Rj=^t=YR;%UT+a;-^<@p@Oeg3yQ!dxhVivRVx!j7)q!kj8)KRRnSqLpDMQ1)JC~l z{GK@gw@VuRUV?$@^jpz(zsc#BpVMt>^m{y_$JFBY;vP8c@Ov3f=Cpol|EI(j$j0)B z84R8+Y+Bn3bp6^is>a37^*g%O#lIc~1Bm->=ZE96iGRZf!^pV!y?LKPDu#`@;j?ht z^1?wZ&Cchec3y>~UBBNT+)*l2;DqLeAmiT z&l;s_om-568w@V~V+bkZ7BN7KTg0eejW7X%n+w6C{j^{f?`}!=TYvu~mTs9``Re9xz~* zLq0A>C3nc5grF-9`Rz*)uPP89f~YDE`7Q`<;*kHU2I(gtM2SOQ260jx^4)M34#JO; z%$IgzO&}pP#5i%tSvXO4$ipbZ`vpjUUVwZf9TcsHkR=ZJOGIBFdM$^XFX3F$A?JCd ze-BYg9P-%^kHjHg3Xw+~@*%=)5L?6{e*hvqIpp6GJz-r4eyN1mA#e^3F+=L8ubT;X zlKpfj4oOGmKu4hs2wn%n?la4jI6w7^PZb<8caf;zb?4;YnvKv=7tOhV=eTB=AO@7+ zKg>=nxeAL%2Hg6b--e6bk>bkIZpzg|c$~0TZr*ydv=?H*9WBje@y4=4I64>FB>Wb( zAcKlbJ6OV?q89w@a3u{)*_o{gU{xmGzj#J?iNXH#=v1q^d2`85R|L0Ag6NfOk$9K!`FYK=O;$*Ea$WIyk+bV4LmL#g*V^fKJ^psJ6KELWgt^{{S>IT30p~0Gl^5DZX7vI;qSB?r=(AVB z8sMBxiBp>~NyOf2%cPT509wGW0pex{B?t9ExWl4K^rC#y;-W`>0Yeo%(P$I-13;1YR;%ScK8*N{DZBT zDn>)TY!fKjXeS&!B-dQ^8ov;lL{Swe3TX}E`kGwT{%O^KU0dxZYkCB93|c_wlNu}O zZWZ=M+^BJ?_D1lvR-tuUSS@Vcw#5MA4-WLJW-MG#JE%Gmk^!l^Ecvxg)h+rL$)vSo~b=f zEjR&qvUXTiw(#xR0iZ9}UIl$&k)q-RwKW~?tEw+n+Uf$;yDUw0f;u-Qg9%ixk#-Yp zmA@vuA}(aK>iS@3-AQ45{?m0@^^Q$GE0BJ%E>|_J@qFERYH*_Z>x%!avtOi&Q`8Hm zF!d?w<&&q^=K`&-A0hrIp;^5ps-pfH(PM-hco$FA+tjBlr|PvbE`O*#K%|O6-M`eg zsEci%*S7&)uMYxAeFI_wVFrWrf`)!b&1i7h)#27{4Ni4_){X{2wWV^PK_~tlS`Z6D zRtD7y*o+D-*qjWUr|Q!vH5+Js17ZSU27~khD5ooHV6#)bE9=JQexGYiGb0_c2XxU8 zFbWOX%HSTqQ+~?Ov;}cHp!7r>>ubNe;kG7?rg4?7DNuvsMbN1Imo;gDhWm%&n$$;| z!ZqkahHGwvn_%IZ+xJy-;hK9a&o=2bSvfBP=I6WuxXl1h5ota>gsAp^6F6w{dd)uj z-5R~-lmR(!>_f>y!;}EM=G#`dXD;U2!G$dpu>y;TwrC~VDq=xa5eKc67ICYH4X}#$ zSWY!r#X>{5x{l=Q#QYpCx=uW0DA&}9Z|p-Fi#BT3^B*)BHEjz=nrz%d(w9vpYLb~6 zSpgWjwGl80EDS#2?hRolp@Yy#=pyVT>?a%q1g}F=-1lWXyEhTSAK0tekchDM7kP&H zaMD*S!`LSk0gg^YI`ZBPfWNs1aTei0=~Oj4Q5Gg$s%Ec8c;+E?o+G{f^A>pe8^C@kXt#`^I0Xs{IN;^Y?D5%Wy8(I z`PhEnM8qT$;z$DGD};|Y-c>V9&F)@!Z)M(XeSmlDei5+vek(k+fBV)Nz_$BTKNh+r z2uu3nqd*7mxeFe7Rvp?2=*h5S zjcYm3RHdikf3rRb98U{+f&$>WpS$l_;JmZoe*jHVXFY8EJvN|T{4Yz$s{A7)f1W%9 zs4V{w(9`hhU6+7vsrVdlPUg3O(=#}DP2uS^__D%x4mIFt@NIxwr+usg6VzydK6nV* zly-O~(8tsXfWMla3Fv9SJN7h8zWIgd9o@*eXX@`)GR%1E89-0!yLY||Z&7$!d~Euk zfo`1s7r={Czb{~z=I#9IA0*$Qa?DiDZws)r>K${+80I-C4$z~zN9ji}hVCZ4Q?0)=)9gyl7HVKQWfzFyuAJYjxOKkuazX`GDa^sAPK_640f{q}vU;3lW9_ex?J4KcydEduQ znHNYBKP@AFGYbEdr`Yv#UXNtHkM*C|OyXF{;vXyd2paM4MLb=Oyr0UINWEA@40PMS zi_3ndnaJe-0xv|89bo-9;F;`0e}26Fe#D~a*VGs zBJb8_ip*V-8*)KNk*gpfideS4HffQb^yhyph++Jh%x(W(Mi`@oH~Kt(GWa;s z$iVN%;7bGy^H|?wUF;{mk;yq#mU?U1d?q74E;cSE{r1R&)by0dSVK&FWU3)GBhsLc zOV5apPK}L;N$GpZ$=*n^Tg`RLYpP1Kt2V-~{nZtx-)SzfmSx<+-3Z)e)pb8lK=EHp zz#Ja&^vaSli>1u+)6#F{`u(JMY262GVBeMx*oW7KMyIDmC&s5QicE`3NRNz-PmPI8 zjZIq=8D~gOjEjj&(MQLnODS_X?SCfOI+u%AZ*|Vzxps3;W~b%-xo=-@P3t>3m-}#Q zf*~rJVPa*>oZF-HQ3-~Kk`hDAhPZ_2lG3=?4KeW+iy<~H(GYJim&TOnqf7PX1Ve0M zbbPe*@pIe-_E;Y$^}fqh^(mj{x=#xQa7n=FWD5G8Y2|mwWQIP&9zIK!XJ8_j68L9e zVwep~9FxFA!?#kPV&QuX{1mYT{u$s~9Fqv2@$laa=`kRs2ia0UGvq>vMED-hL`xUi T_&DCcL^08Qns)vQhG+RFAGP}% delta 40561 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 Qid%C-24opE7jZWJ7q(WkF8}}l delta 5011 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 T`Y3TvI6(oYE4GDQkO(2qzVVZI@) z5=a@aN$D?0@-W3c?{Uv2bYRV!X^em?FF+lOYd9(@j`->YN$ zWGRz?7Pu`kl@X<`*3LL>NNQWwg|mgDd~U{Cs#1|Be*COfCfr;uqD}>Y2tXA!-RqX1 z@YZ`4kAxHsH8j(3G?O6tT9n)u+}Se;Ip%D~>?9Oh#Y@lmZ#-taS1_xme%U5ukYO0# Jiy-1(@dvm4H6j22 delta 231 zcmW-Xv1$TA7=&j%MU+HN(%7U3T&JA7=ln;Ds#r=%KMn41_HnkHJN z7;m1+{*#H*kAabanSp`9Z}W7n=S++io9lV&8G|htv>7ZJEErN4j2R4pIFZ2|2vZr% z7?OZE6-Xum#Z7=PnIR3RG8rgp1Xhy*lr;qEGzZEV0--5Tr6tIm$$|W)tQHJ<3B3t(1O97A(6q7Ar;6 + + +

+ OptEnableEmbeddedLog + +

+ +
+
+ +
+
[JsAce]
+public static bool OptEnableEmbeddedLog { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + +

@@ -1008,10 +1040,10 @@ public bool OptEnableFeedrate { get; set; } - + -

- OptEnableFirstSituProcLog +

+ OptEnableFlatProcLog

@@ -1020,7 +1052,7 @@ public bool OptEnableFeedrate { get; set; }
[JsAce]
-public static bool OptEnableFirstSituProcLog { get; set; }
+public static bool OptEnableFlatProcLog { get; set; }
@@ -1106,38 +1138,6 @@ public bool OptEnableInterpolation { get; set; } - - -

- OptEnableNcEmbeddedLog - -

- -
-
- -
-
[JsAce]
-public static bool OptEnableNcEmbeddedLog { get; set; }
-
- - - - - -

Property Value

-
-
bool
-
-
- - - - - - - -

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.NcOptProc.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.NcOptProc.html index cdebc15..3d33fa3 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.NcOptProc.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.NcOptProc.html @@ -292,19 +292,19 @@ Class NcOptProc - + -

- EnableFirstSituProcLog +

+ EnableEmbeddedLog

-

Enable create log file for first (independent) situ process.

+

Enable embedded log to optimized NC file.

-
public static bool EnableFirstSituProcLog { get; set; }
+
public static bool EnableEmbeddedLog { get; set; }
@@ -324,19 +324,19 @@ Class NcOptProc - + -

- EnableNcEmbeddedLog +

+ EnableFlatProcLog

-

Enable embedded log to optimized NC file.

+

Enable create log file for first (independent) situ process.

-
public static bool EnableNcEmbeddedLog { get; set; }
+
public static bool EnableFlatProcLog { get; set; }
diff --git a/App/wwwroot/HiAPI-docsite/brief/dev-doc/build-hinc/general-rules.html b/App/wwwroot/HiAPI-docsite/brief/dev-doc/build-hinc/general-rules.html index f441a63..f2dda37 100644 --- a/App/wwwroot/HiAPI-docsite/brief/dev-doc/build-hinc/general-rules.html +++ b/App/wwwroot/HiAPI-docsite/brief/dev-doc/build-hinc/general-rules.html @@ -92,7 +92,7 @@

You MUST read the cited hyperlink before you do the job. ASK if you think the hyperlink is not work.

Handle Message and Exception

-

If message is well-managed, apply <xref:Hi.Common.Messages.MessageKit> to show the message; if the message is Exception, apply ExceptionUtil.ShowException(Exception, object) to show the exception for detail treatment. The messages are shown in Message Section on Main Panel.

+

If message is well-managed, apply MessageHost to show the message; if the message is Exception, apply ExceptionUtil.ShowException(Exception, object) to show the exception for detail treatment. The messages are shown in Message Section on Main Panel.

For examples of message and exception handling patterns:

  1. Normal message handling:
  2. diff --git a/App/wwwroot/HiAPI-docsite/brief/dev-doc/build-hinc/main-panel.html b/App/wwwroot/HiAPI-docsite/brief/dev-doc/build-hinc/main-panel.html index 9792f78..e46a240 100644 --- a/App/wwwroot/HiAPI-docsite/brief/dev-doc/build-hinc/main-panel.html +++ b/App/wwwroot/HiAPI-docsite/brief/dev-doc/build-hinc/main-panel.html @@ -156,11 +156,11 @@ Users can refresh the log content or download the current day's log file for off

    The Project Menu Managing MachiningProject.

    To New (create), Save and Save As the MachiningProject, See DemoBuildGeomOnlyMachiningProject for the example.

    To Load MachiningProject, See DemoUseMachiningProject for the example.

    -

    Show message for the actions result (successed or has exception) by <xref:Hi.Common.Messages.MessageKit>.

    +

    Show message for the actions result (successed or has exception) by MessageHost.

    Tip
    -

    Recommmand using static function of <xref:Hi.Common.Messages.MessageKit> to do the job. -Read document of <xref:Hi.Common.Messages.MessageKit> to ensure the proper usage.

    +

    Recommmand using static function of MessageHost to do the job. +Read document of MessageHost to ensure the proper usage.

    On project loaded (Navigation Menu/Project/Load MenuItem) , set the Player.Panel.RenderingCanvas.DispEngine to SetViewToIsometricView().

    diff --git a/App/wwwroot/HiAPI-docsite/brief/dev-doc/build-hinc/message-section-on-main-panel.html b/App/wwwroot/HiAPI-docsite/brief/dev-doc/build-hinc/message-section-on-main-panel.html index 822ee44..22be81f 100644 --- a/App/wwwroot/HiAPI-docsite/brief/dev-doc/build-hinc/message-section-on-main-panel.html +++ b/App/wwwroot/HiAPI-docsite/brief/dev-doc/build-hinc/message-section-on-main-panel.html @@ -87,8 +87,8 @@

    Message Section on Main Panel

    -

    Initialize <xref:Hi.Common.Messages.MessageKit>.<xref:Hi.Common.Messages.MessageKit.Default> with Message Section

    -

    To show and save the message on Brief Message Text Field, add event to <xref:Hi.Common.Messages.MessageKit.Default>.<xref:Hi.Common.Messages.MessageKit.OnAdding>.

    +

    Initialize MessageHost.Default with Message Section

    +

    To show and save the message on Brief Message Text Field, add event to Default.OnAdding.

    The event contains:

    • update the text content of Brief Message Text Field
    • @@ -98,7 +98,7 @@
      Tip
      • Handle the situation that logs over one day.
      • -
      • Check if passing argument of <xref:Hi.Common.Messages.MessageKit.OnAdding> is Exception. If the it is Exception, update text content by Exception.Message but log to file with the full Exception information.
      • +
      • Check if passing argument of OnAdding event is Exception. If the it is Exception, update text content by Message but log to file with the full Exception information.
      • Consider MessageFlag to set the behavior of Message Section. For example, apply alert style if passing argument is exception. The Info (and the other flags that the priority lower than it) should only record in the logs but not shows in the Message Section.
diff --git a/App/wwwroot/HiAPI-docsite/brief/dev-doc/release-note/index.html b/App/wwwroot/HiAPI-docsite/brief/dev-doc/release-note/index.html index c9f4e32..a52c1c0 100644 --- a/App/wwwroot/HiAPI-docsite/brief/dev-doc/release-note/index.html +++ b/App/wwwroot/HiAPI-docsite/brief/dev-doc/release-note/index.html @@ -87,6 +87,19 @@

Release Note

+

HiNc Packages Version 3.1.87

+
    +
  • Re-build NcOptProc with stricter optimization logics (see NC優化)
  • +
  • Add optimization logging features (see 優化日誌): +
      +
    • .flatproc.log file output for optimization process analysis (controlled by OptEnableFlatProcLog)
    • +
    • Embedded log comments in optimized NC file marking source lines with (src) suffix (controlled by OptEnableEmbeddedLog)
    • +
    +
  • +
  • Fix cutting depth and width accuracy by bounding-box method with workpiece surface
  • +
  • Fix collision check error during concurrent changing collidable object
  • +
  • Various stability improvements and bug fixes
  • +

HiNc Packages Version 3.1.84

  • Optimize memory usage by shrinking map-size of clStripPos
  • diff --git a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/NcOptimization/index.html b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/NcOptimization/index.html index 15ece9b..16c7a3f 100644 --- a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/NcOptimization/index.html +++ b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/NcOptimization/index.html @@ -239,6 +239,21 @@ N0170 X-4.125 Y45.875 ... +

    優化日誌

    +

    優化過程提供兩種日誌功能,方便分析與除錯。

    +

    優化過程日誌檔

    +

    OptEnableFlatProcLog(API):啟用優化過程日誌檔輸出。預設為真。

    +

    啟用後,優化過程會為每個NC檔輸出一個 .flatproc.log 檔案,記錄各步階的優化條件經OptExtendedPreDistance_mm(API)OptExtendedPostDistance_mm(API)展開後獨立優化計算的資訊(不包含步階間的交互關係,如加減速)。

    +

    嵌入式日誌註解

    +

    OptEnableEmbeddedLog(API):啟用嵌入式日誌註解。預設為真。

    +

    啟用後,優化後的NC檔中會在原始NC行後方加上 (src) 後綴,方便對照原始NC碼與優化後的NC碼。

    +
    +
    Note
    +

    指令格式

    +
    OptEnableFlatProcLog = <布林值>;
    +OptEnableEmbeddedLog = <布林值>;
    +
    +

    輸出優化NC檔

    使用 OptimizeToFiles(API) 方法輸出優化後的NC檔。

    diff --git a/App/wwwroot/HiAPI-docsite/index.json b/App/wwwroot/HiAPI-docsite/index.json index d0ab732..ca1032e 100644 --- a/App/wwwroot/HiAPI-docsite/index.json +++ b/App/wwwroot/HiAPI-docsite/index.json @@ -1962,7 +1962,7 @@ "api/Hi.MachiningProcs.RuntimeApi.html": { "href": "api/Hi.MachiningProcs.RuntimeApi.html", "title": "Class RuntimeApi | HiAPI-C# 2025", - "summary": "Class RuntimeApi Namespace Hi.MachiningProcs Assembly HiNc.dll Runtime API for machining operations. public class RuntimeApi : ICsScriptApi Inheritance object RuntimeApi Implements ICsScriptApi Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DefaultParaTemplateDimension Gets or sets the parameter template dimension (2D or 3D). [JsAce] public int DefaultParaTemplateDimension { get; set; } Property Value int DiffVisualRadius_mm Gets or sets the visual radius in millimeters for difference visualization. Controls the radius used for highlighting differences between workpiece states. [JsAce] public double DiffVisualRadius_mm { get; set; } Property Value double DispCacheMb Gets or sets the display cache size in megabytes. public long DispCacheMb { get; set; } Property Value long DispCache_Mb Gets or sets the display cache size in megabytes. [JsAce] public long DispCache_Mb { get; set; } Property Value long EnableAutoMapOnSelectionEnd Gets or sets whether to automatically map selections when they end. [JsAce] public bool EnableAutoMapOnSelectionEnd { get; set; } Property Value bool EnableCollisionDetection Gets or sets whether collision detection is enabled. [JsAce(DocContentHtml = \"Enable Collision Detection.\")] public bool EnableCollisionDetection { get; set; } Property Value bool EnablePauseOnCollision Obsoleted. Gets or sets whether to pause execution when a collision is detected. This property only has an effect if collision detection is enabled. public bool EnablePauseOnCollision { get; set; } Property Value bool EnablePauseOnFailure Gets or sets whether to pause on failure during execution. [JsAce(DocContentHtml = \"Enable Pause On Failure.\")] public bool EnablePauseOnFailure { get; set; } Property Value bool EnablePhysics Gets or sets whether milling force evaluation is enabled. [JsAce(DocContentHtml = \"Enable milling force evaluation.\")] public bool EnablePhysics { get; set; } Property Value bool EnableWearEffect Gets or sets whether tool wear effects are enabled in simulation. [JsAce] public bool EnableWearEffect { get; set; } Property Value bool FeedPerCycle Gets a new feed per cycle machining motion resolution instance. [JsAce] public FeedPerCycleMachiningMotionResolution FeedPerCycle { get; } Property Value FeedPerCycleMachiningMotionResolution FeedPerTooth Gets a new feed per tooth machining motion resolution instance. [JsAce] public FeedPerToothMachiningMotionResolution FeedPerTooth { get; } Property Value FeedPerToothMachiningMotionResolution Fixture [JsAce] public Fixture Fixture { get; set; } Property Value Fixture Global Global variables. [JsAce(\"Global[$1key]\")] public Dictionary Global { get; } Property Value Dictionary InitSpindleTemperature_C Gets or sets the initial spindle temperature in degrees Celsius. [JsAce(DocContentHtml = \"Spindle Temperature on initialization.\")] public double InitSpindleTemperature_C { get; set; } Property Value double JsAceCompletionProfileJsonArray Internal used. public static JsonArray JsAceCompletionProfileJsonArray { get; } Property Value JsonArray MachiningMotionResolution Gets or sets the machining motion resolution. [JsAce] public IMachiningMotionResolution MachiningMotionResolution { get; set; } Property Value IMachiningMotionResolution MachiningResolution Gets or sets the machining resolution in millimeters. For legacy compatable. [JsAce] [Obsolete] public double MachiningResolution { get; set; } Property Value double MachiningResolution_mm Gets or sets the machining resolution in millimeters. [JsAce] public double MachiningResolution_mm { get; set; } Property Value double MachiningSession public MachiningSession MachiningSession { get; } Property Value MachiningSession MapTask Task tracking the status of mapping operations. public Task MapTask { get; set; } Property Value Task MillingForceCycleDivisionNum Gets or sets the number of divisions per cycle for milling force calculation. This property should be set before milling force evaluation if TrainMillingPara(SampleFlag, string, double, ICuttingPara) is intended to be used. [JsAce] public static int MillingForceCycleDivisionNum { get; set; } Property Value int NcOptOption Gets or sets the NC optimization options. [JsAce] public NcOptOption NcOptOption { get; set; } Property Value NcOptOption OptEnableDepthCompensation Enables or disables depth compensation during optimization. [JsAce] public bool OptEnableDepthCompensation { get; set; } Property Value bool OptEnableFeedrate Gets or sets whether to enable feed rate optimization in NC optimization. [JsAce] public bool OptEnableFeedrate { get; set; } Property Value bool OptEnableFirstSituProcLog [JsAce] public static bool OptEnableFirstSituProcLog { get; set; } Property Value bool OptEnableForwardCompensation Enables or disables forward compensation during optimization. [JsAce] public bool OptEnableForwardCompensation { get; set; } Property Value bool OptEnableInterpolation Enables or disables reinterpolation for optimization. [JsAce] public bool OptEnableInterpolation { get; set; } Property Value bool OptEnableNcEmbeddedLog [JsAce] public static bool OptEnableNcEmbeddedLog { get; set; } Property Value bool OptEnableSideCompensation Enables or disables side compensation during optimization. [JsAce] public bool OptEnableSideCompensation { get; set; } Property Value bool OptExtendedPostDistance_mm Gets or sets the extended post-distance in millimeters for NC optimization. This is the distance after the current segment that will be considered for optimization. [JsAce] public double OptExtendedPostDistance_mm { get; set; } Property Value double OptExtendedPreDistance_mm Gets or sets the extended pre-distance in millimeters for NC optimization. This is the distance before the current segment that will be considered for optimization. [JsAce] public double OptExtendedPreDistance_mm { get; set; } Property Value double OptFeedrateAssignmentRatio Gets or sets the feedrate assignment ratio for optimization. If the feedrate change exceeds this ratio, the feedrate in the NC line will be updated. [JsAce] public double OptFeedrateAssignmentRatio { get; set; } Property Value double OptMaxAcceleration_mmds2 Maximum acceleration in mm/s² during optimization. Only takes effect on reinterpolated section. [JsAce(DocContentHtml = \"Only take effect on reinterpolated section.\")] public double OptMaxAcceleration_mmds2 { get; set; } Property Value double OptMaxFeedPerTooth_mm Gets or sets the maximum feed per tooth in millimeters for optimization. [JsAce] public double OptMaxFeedPerTooth_mm { get; set; } Property Value double OptMaxFeedrate_mmdmin Maximum feed rate in mm/min for cutting movements during optimization. [JsAce] public double OptMaxFeedrate_mmdmin { get; set; } Property Value double OptMaxJerk_mmds3 Maximum jerk in mm/s³ during optimization. Only takes effect on reinterpolated section. [JsAce(DocContentHtml = \"Only take effect on reinterpolated section.\")] public double OptMaxJerk_mmds3 { get; set; } Property Value double OptMinFeedPerTooth_mm Gets or sets the minimum feed per tooth in millimeters for optimization. [JsAce] public double OptMinFeedPerTooth_mm { get; set; } Property Value double OptMinFeedrate_mmdmin Minimum feed rate in mm/min for cutting movements during optimization. [JsAce] public double OptMinFeedrate_mmdmin { get; set; } Property Value double OptPreferedForce_N Preferred force in N for optimization. [JsAce] public double OptPreferedForce_N { get; set; } Property Value double OptRapidFeed_mmdmin Rapid feed rate in mm/min for non-cutting movements during optimization. [JsAce] public double OptRapidFeed_mmdmin { get; set; } Property Value double OptSpindlePowerSafetyFactor Safety factor for spindle power during optimization. [JsAce] public double OptSpindlePowerSafetyFactor { get; set; } Property Value double OptSpindlePowerUtilizationFactor Utilization factor for spindle power during optimization. It is the reciprocal of the spindle power safety factor. [JsAce] public double OptSpindlePowerUtilizationFactor { get; set; } Property Value double OptSpindleTorqueSafetyFactor [JsAce] public double OptSpindleTorqueSafetyFactor { get; set; } Property Value double OptSpindleTorqueUtilizationFactor Utilization factor for spindle torque during optimization. It is the reciprocal of the spindle torque safety factor. [JsAce] public double OptSpindleTorqueUtilizationFactor { get; set; } Property Value double OptThermalYieldSafetyFactor Safety factor for spindle torque during optimization. [JsAce] public double OptThermalYieldSafetyFactor { get; set; } Property Value double OptThermalYieldUtilizationFactor Utilization factor for thermal yield during optimization. It is the reciprocal of the thermal yield safety factor. [JsAce] public double OptThermalYieldUtilizationFactor { get; set; } Property Value double OptYieldingSafetyFactor Safety factor for yielding during optimization. [JsAce] public double OptYieldingSafetyFactor { get; set; } Property Value double OptYieldingUtilizationFactor Utilization factor for yielding during optimization. It is the reciprocal of the yielding safety factor. [JsAce] public double OptYieldingUtilizationFactor { get; set; } Property Value double ScriptOptions ScriptOptions. public ScriptOptions ScriptOptions { get; set; } Property Value ScriptOptions SessionMessageHost Gets the session message host for displaying messages. [JsAce] public SessionMessageHost SessionMessageHost { get; } Property Value SessionMessageHost StepCount Gets the total number of milling steps. [JsAce] public int StepCount { get; } Property Value int Workpiece [JsAce] public Workpiece Workpiece { get; set; } Property Value Workpiece Methods AddTimeDataByFile(string, string, double, double) Adds time-based data from a file to the time mapping dictionary with specified time bounds in seconds. [JsAce(\"AddTimeDataByFile($1key, $2relFile, $3beginTime, $4endTime)\")] public bool AddTimeDataByFile(string key, string relFile, double beginTime, double endTime) Parameters key string Key to identify the data relFile string Relative path to the data file beginTime double Beginning time in seconds endTime double Ending time in seconds Returns bool True if the data was successfully added, false otherwise AddTimeDataByFile(string, string, string, string) Adds time-based data from a file to the time mapping dictionary with specified time bounds. [JsAce(\"AddTimeDataByFile($1key, $2relFile, $3beginTime, $4endTime)\")] public bool AddTimeDataByFile(string key, string relFile, string beginTimeText, string endTimeText) Parameters key string Key to identify the data relFile string Relative path to the data file beginTimeText string Beginning time as text (seconds or TimeSpan format) endTimeText string Ending time as text (seconds or TimeSpan format) Returns bool True if the data was successfully added, false otherwise AppendMessagesToFile(string, params string[]) Appends messages to a file, optionally filtered by tags. [JsAce(\"AppendMessagesToFile(\\\"dstRelFile\\\",flags)\")] public void AppendMessagesToFile(string dstRelFile, params string[] flags) Parameters dstRelFile string Destination relative file path flags string[] Optional flags to filter messages by tags BeginPreserve() Begin Preserve section in optimzation process. [JsAce(\"BeginPreserve()\")] public void BeginPreserve() BeginSelection(string, AnchorMode, IStepShift) Begin mark on current line. milling step() has not triggered yet. public void BeginSelection(string key, AnchorMode anchorMode = AnchorMode.LineBegin, IStepShift shift = null) Parameters key string Identifier key for the selection anchorMode AnchorMode Mode for anchoring the beginning of selection shift IStepShift Step shift to apply BeginSession() Begins a new machining session. Not for end user. public void BeginSession() ClearTimeMappingData() Clears all time mapping data. [JsAce] public void ClearTimeMappingData() Diff(double) Performs a difference analysis on the workpiece geometry to detect variations. [JsAce(\"Diff($1detectionRadius_mm)\")] public void Diff(double detectionRadius_mm) Parameters detectionRadius_mm double Radius for detecting differences EndPreserve() End Preserve section in optimzation process. [JsAce(\"EndPreserve()\")] public void EndPreserve() EndSelection(string, AnchorMode, IStepShift) End mark on current line for selection. public void EndSelection(string key, AnchorMode anchorMode = AnchorMode.LineEnd, IStepShift shift = null) Parameters key string Identifier key for the selection anchorMode AnchorMode Mode for anchoring the end of selection shift IStepShift Step shift to apply EndSession() Ends the current machining session. Not for end user. public void EndSession() ErrorMessage(string) Displays an error message in the message host. [JsAce(\"ErrorMessage($1message)\")] public void ErrorMessage(string message) Parameters message string The error message to display FixedPace(double, double) Creates a fixed machining motion resolution with specified parameters. [JsAce(\"FixedPace($1linearResolution_mm, $2rotaryResolution_deg)\")] public FixedMachiningMotionResolution FixedPace(double linearResolution_mm, double rotaryResolution_deg) Parameters linearResolution_mm double Linear resolution in millimeters rotaryResolution_deg double Rotary resolution in degrees Returns FixedMachiningMotionResolution A new fixed machining motion resolution instance GetMillingStep(int) Retrieves a milling step at the specified index. [JsAce(Snippet = \"GetMillingStep($1\\\"stepIndex\\\")\")] public MachiningStep GetMillingStep(int stepIndex) Parameters stepIndex int Index of the milling step to retrieve Returns MachiningStep The milling step at the specified index GetStickMachiningToolObservationHeight_mm(int) Gets the observation height in millimeters for the specified stick machining tool. [JsAce(\"GetStickMachiningToolObservationHeight_mm($1toolId)\")] public double GetStickMachiningToolObservationHeight_mm(int toolId) Parameters toolId int The ID of the tool Returns double The observation height in millimeters GetUniformContourTrayShiftAngle_deg(int) Gets the shift angle in degrees for the uniform contour tray of the specified tool. [JsAce(\"GetUniformContourTrayShiftAngle_deg($1toolId)\")] public double GetUniformContourTrayShiftAngle_deg(int toolId) Parameters toolId int The ID of the tool Returns double The shift angle in degrees LineSelection(string, AnchorMode, IStepShift, AnchorMode, IStepShift) Create a line selection from begin to end mark. public void LineSelection(string key, AnchorMode beginAnchorMode = AnchorMode.LineBegin, IStepShift beginShift = null, AnchorMode endAnchorMode = AnchorMode.LineEnd, IStepShift endShift = null) Parameters key string Identifier key for the selection beginAnchorMode AnchorMode Mode for anchoring the beginning of selection beginShift IStepShift Step shift to apply at beginning endAnchorMode AnchorMode Mode for anchoring the end of selection endShift IStepShift Step shift to apply at end LoadCuttingParaByFile(string) [JsAce(\"LoadCuttingParaByFile($1\\\"relFile\\\")\")] public void LoadCuttingParaByFile(string relFile) Parameters relFile string Map(string, FileTimeSection, CycleSamplingMode?) Maps selection data to time section. public Task Map(string key, FileTimeSection fileTimeSection = null, StepTimeShotUtil.CycleSamplingMode? cycleSamplingMode = CycleSamplingMode.SpindleCycle) Parameters key string Identifier key for the selection fileTimeSection FileTimeSection File time section, or null to use the one associated with the key cycleSamplingMode StepTimeShotUtil.CycleSamplingMode? Cycle sampling mode Returns Task Task representing the asynchronous mapping operation MapByActualTime(string, CycleSamplingMode) [JsAce(\"MapByActualTime($1timeShotRelFile)\")] public void MapByActualTime(string timeShotRelFile, StepTimeShotUtil.CycleSamplingMode cycleSamplingMode = CycleSamplingMode.SpindleCycle) Parameters timeShotRelFile string cycleSamplingMode StepTimeShotUtil.CycleSamplingMode Message(string) Displays a message in the message host. [JsAce(\"Message($1message)\")] public void Message(string message) Parameters message string The message to display OptCallPreferFuncIndexDictionary() [JsAce(\"OptCallPreferFuncIndexDictionary()\")] public Dictionary, double> OptCallPreferFuncIndexDictionary() Returns Dictionary, double> OptimizeToFiles(string) Optimizes NC files and saves results using the specified file template. [JsAce(Snippet = \"OptimizeToFiles(\\\"Output/Opt-[NcName]\\\")\", DocContentHtml = \"Optimize To Files by substitude template keywoard \\\"[NcName]\\\"\")] public void OptimizeToFiles(string relFileTemplate = \"Output/Opt-[NcName]\") Parameters relFileTemplate string Template for output file path, can include [NcName] placeholder Pace() A pausable mark for the playing process. The function enables Pause() to take effect. [JsAce(\"Pace();\")] public void Pace() Remarks Waits for the player to signal the next pace. Pause() Pause Player [JsAce(DocContentHtml = \"Pause Player\")] public void Pause() PlayAct(IAct, IIndexedFileLine, CancellationToken?) Plays an act with pacing control. [JsAce] public void PlayAct(IAct act, IIndexedFileLine sourceCommand = null, CancellationToken? cancellationToken = null) Parameters act IAct The act to play. sourceCommand IIndexedFileLine The source command. cancellationToken CancellationToken? Cancellation token. PlayClTeleport(double, double, double, double, double, double) Plays a CL (cutter location) teleport operation. [JsAce] public void PlayClTeleport(double x, double y, double z, double i, double j, double k) Parameters x double X coordinate. y double Y coordinate. z double Z coordinate. i double I vector component. j double J vector component. k double K vector component. PlayCsvFile(string) Plays an Csv file with the specified relative path. [JsAce(\"PlayCsvFile($1\\\"csvFile\\\");\")] public void PlayCsvFile(string relFilePath) Parameters relFilePath string Relative path to the CSV file PlayNc(string, string) Plays NC code directly from a string, executing each action and pacing between them. [JsAce(Snippet = \"PlayNc($1\\\"ncCommand\\\",$2\\\"\\\"(Direct Command)\\\"\\\");\", DocContentHtml = \"Play NC. second parameter is the file name alternative shows in the log.\")] public void PlayNc(string ncText, string fileNameAlternative = \"--\") Parameters ncText string NC code as a string fileNameAlternative string Alternative name to display in logs PlayNcFile(string) Plays an NC file with the specified relative path. [JsAce(\"PlayNcFile($1\\\"ncFile\\\");\")] public void PlayNcFile(string relNcFilePath) Parameters relNcFilePath string Relative path to the NC file PlayToolingTeleport(int) Plays a tooling teleport operation. [JsAce] public void PlayToolingTeleport(int toolId) Parameters toolId int The tool ID to teleport. Preserve() Preserve one line NC code in optimzation process. [JsAce(\"Preserve()\")] public void Preserve() ProgressMessage(string) Displays a progress message in the message host. [JsAce(\"ProgressMessage($1message)\")] public void ProgressMessage(string message) Parameters message string The progress message to display ReTrainMillingPara(SampleFlag, string, double) Re-trains milling parameters using the specified sample flag. [JsAce(\"ReTrainMillingPara(Fx|Fy|Fz, $1dstFile)\")] public void ReTrainMillingPara(SampleFlag sampleFlag, string dstRelFile, double outlierRatio = 2) Parameters sampleFlag SampleFlag Sample flag indicating which components to train dstRelFile string Destination relative file path outlierRatio double Outlier ratio for data filtering ReadCsvByTimeInterpolation(string) Reads a CSV file and performs time-based interpolation to map data to milling steps. [JsAce(Snippet = \"ReadCsvByTimeInterpolation($1\\\"csvFile\\\")\")] public void ReadCsvByTimeInterpolation(string csvFile) Parameters csvFile string Path to the CSV file relative to the base directory ReadRuntimeGeom(string) Reads runtime geometry from a file. [JsAce(\"ReadRuntimeGeom($1\\\"srcFile\\\")\")] public void ReadRuntimeGeom(string relFile) Parameters relFile string Relative path to the input file RegisterStepVariable(string, string, string, string, Func) Registers a step variable for tracking during execution. [JsAce(Snippet = \"RegisterStepVariable(\\\"$1key\\\",\\\"$2name\\\",\\\"$3unit\\\",\\\"$4formatString\\\",\\\"$5variableFunc\\\")\", DocContentHtml = \"

    Register Step Variable.

    \\\"unit\\\" is nullable

    \\\"formatString\\\" is nullable

    \")] public void RegisterStepVariable(string key, string name, string unit, string formatString, Func variableFunc = null) Parameters key string Unique key to identify the variable name string Human-readable name of the variable unit string Physical unit of the variable (can be null) formatString string Format string for displaying the variable (can be null) variableFunc Func Function to compute the variable value from a milling step (can be null) RemoveFlyPiece() Removes any disconnected or “flying” pieces from the workpiece geometry. [JsAce] public void RemoveFlyPiece() Reset() Reset Player [JsAce(DocContentHtml = \"Reset Player\")] public void Reset() ResetRuntime() Clears internal buffers. [JsAce] public void ResetRuntime() RunNc(string, string) Runs NC code directly from a string. Not for end user. [JsAce(Snippet = \"RunNc($1\\\"ncCommand\\\",$2\\\"\\\"(Direct Command)\\\"\\\");\", DocContentHtml = \"Run NC. second parameter is the file name alternative shows in the log.\")] public IEnumerable RunNc(string ncText, string fileNameAlternative = \"--\") Parameters ncText string NC code as a string fileNameAlternative string Alternative name to display in logs Returns IEnumerable Enumerable sequence of actions to be executed RunNcFile(string) Runs an NC file with the specified relative path. Not for end user. [JsAce(\"RunNcFile($1\\\"ncFile\\\");\")] public IEnumerable RunNcFile(string relNcFilePath) Parameters relNcFilePath string Relative path to the NC file Returns IEnumerable Enumerable sequence of actions to be executed SetNcResolutionFeedPerCycle() Sets NC resolution to feed per cycle mode. public void SetNcResolutionFeedPerCycle() SetNcResolutionFeedPerTooth() Sets NC resolution to feed per tooth mode. public void SetNcResolutionFeedPerTooth() SetNcResolutionFixed(double, double) Sets NC resolution to fixed mode with specified resolution values. public void SetNcResolutionFixed(double linearResolution_mm, double rotaryResolution_deg) Parameters linearResolution_mm double Linear resolution in millimeters. rotaryResolution_deg double Rotary resolution in degrees. SetStickMachiningToolObservationHeight_mm(int, double) Sets the observation height in millimeters for the specified stick machining tool. [JsAce(\"SetStickMachiningToolObservationHeight_mm($1toolId,$2height_mm)\")] public void SetStickMachiningToolObservationHeight_mm(int toolId, double height) Parameters toolId int The ID of the tool height double The observation height in millimeters to set SetUniformContourTrayShiftAngle_deg(int, double) Sets the shift angle in degrees for the uniform contour tray of the specified tool. [JsAce(\"SetUniformContourTrayShiftAngle_deg($1toolId,$2angle_deg)\")] public void SetUniformContourTrayShiftAngle_deg(int toolId, double angle_deg) Parameters toolId int The ID of the tool angle_deg double The shift angle in degrees to set ShiftDistance_mm(double) Creates a distance shift object representing the specified distance in millimeters. public DistanceShift ShiftDistance_mm(double distanceShift_mm) Parameters distanceShift_mm double Distance shift in millimeters Returns DistanceShift Distance shift object ShiftTime_s(double) Creates a time shift object representing the specified time in seconds. public TimeShift ShiftTime_s(double seconds) Parameters seconds double Time in seconds Returns TimeShift Time shift object TrainMillingPara(SampleFlag, string, double, ICuttingPara) Trains milling parameters using the specified sample flag. [JsAce(\"TrainMillingPara(Fx|Fy|Fz, $1dstFile)\")] public void TrainMillingPara(SampleFlag sampleFlag, string dstRelFile, double outlierRatio = 2, ICuttingPara paraTemplate = null) Parameters sampleFlag SampleFlag Sample flag indicating which components to train dstRelFile string Destination relative file path outlierRatio double Outlier ratio for data filtering paraTemplate ICuttingPara WarningMessage(string) Displays a warning message in the message host. [JsAce(\"WarningMessage($1message)\")] public void WarningMessage(string message) Parameters message string The warning message to display WriteRuntimeGeom(string) Writes the current runtime geometry to a file. [JsAce(\"WriteRuntimeGeom($1\\\"dstFile\\\")\")] public void WriteRuntimeGeom(string relFile) Parameters relFile string Relative path to the output file WriteRuntimeGeomToStl(string, double) Writes the current runtime geometry to an STL file. [JsAce(\"WriteRuntimeGeomToStl($1\\\"dstFile\\\",$2resolution_mm)\")] public void WriteRuntimeGeomToStl(string relFile, double resolution_mm = 0) Parameters relFile string Relative path to the output STL file resolution_mm double Resolution in millimeters (0 for default) WriteShotFiles(double, string) Writes time-series data to shot files with the specified resolution period (alternative parameter order). public void WriteShotFiles(double resolutionPeroid_ms, string relFileTemplate) Parameters resolutionPeroid_ms double Resolution period in milliseconds relFileTemplate string Template for output file path, can include [NcName] placeholder WriteShotFiles(string, double) Writes time-series data to shot files with the specified resolution period. [JsAce(Snippet = \"WriteShotFiles(\\\"Output/[NcName].shot.csv\\\",resolutionPeroid_ms)\", DocContentHtml = \"Write time series data by resolutionPeroid_ms\")] public void WriteShotFiles(string relFileTemplate = \"Output/[NcName].shot.csv\", double resolutionPeroid_ms = 1) Parameters relFileTemplate string Template for output file path, can include [NcName] placeholder resolutionPeroid_ms double Resolution period in milliseconds WriteStepFiles(string) Writes step-series data to files with the specified file template. [JsAce(Snippet = \"WriteStepFiles(\\\"Output/[NcName].step.csv\\\")\", DocContentHtml = \"Write step series data.\")] public void WriteStepFiles(string relFileTemplate = \"Output/[NcName].step.csv\") Parameters relFileTemplate string Template for output file path, can include [NcName] placeholder Events MachiningStepBuilt Gets or sets the action to configure steps during execution. The event will be cleared by the calling of ResetRuntime(). [JsAce(Snippet = \"MachiningStepBuilt+=($1preStep,$2curStep)=>{$3Command};\", DocContentHtml = \"Runtime Step Configuration action. preStep is the Previous Milling Step; curStep is the Current Milling Step. preStep is null if no previous step existed.\")] public event MachiningActRunner.MachiningStepBuiltDelegate MachiningStepBuilt Event Type MachiningActRunner.MachiningStepBuiltDelegate MachiningStepSelected Event that is triggered when a milling step is selected. The event will be cleared by the calling of ResetRuntime(). [JsAce(Snippet = \"MachiningStepSelected+=($1millingStep)=>{$2Command};\")] public event Action MachiningStepSelected Event Type Action" + "summary": "Class RuntimeApi Namespace Hi.MachiningProcs Assembly HiNc.dll Runtime API for machining operations. public class RuntimeApi : ICsScriptApi Inheritance object RuntimeApi Implements ICsScriptApi Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DefaultParaTemplateDimension Gets or sets the parameter template dimension (2D or 3D). [JsAce] public int DefaultParaTemplateDimension { get; set; } Property Value int DiffVisualRadius_mm Gets or sets the visual radius in millimeters for difference visualization. Controls the radius used for highlighting differences between workpiece states. [JsAce] public double DiffVisualRadius_mm { get; set; } Property Value double DispCacheMb Gets or sets the display cache size in megabytes. public long DispCacheMb { get; set; } Property Value long DispCache_Mb Gets or sets the display cache size in megabytes. [JsAce] public long DispCache_Mb { get; set; } Property Value long EnableAutoMapOnSelectionEnd Gets or sets whether to automatically map selections when they end. [JsAce] public bool EnableAutoMapOnSelectionEnd { get; set; } Property Value bool EnableCollisionDetection Gets or sets whether collision detection is enabled. [JsAce(DocContentHtml = \"Enable Collision Detection.\")] public bool EnableCollisionDetection { get; set; } Property Value bool EnablePauseOnCollision Obsoleted. Gets or sets whether to pause execution when a collision is detected. This property only has an effect if collision detection is enabled. public bool EnablePauseOnCollision { get; set; } Property Value bool EnablePauseOnFailure Gets or sets whether to pause on failure during execution. [JsAce(DocContentHtml = \"Enable Pause On Failure.\")] public bool EnablePauseOnFailure { get; set; } Property Value bool EnablePhysics Gets or sets whether milling force evaluation is enabled. [JsAce(DocContentHtml = \"Enable milling force evaluation.\")] public bool EnablePhysics { get; set; } Property Value bool EnableWearEffect Gets or sets whether tool wear effects are enabled in simulation. [JsAce] public bool EnableWearEffect { get; set; } Property Value bool FeedPerCycle Gets a new feed per cycle machining motion resolution instance. [JsAce] public FeedPerCycleMachiningMotionResolution FeedPerCycle { get; } Property Value FeedPerCycleMachiningMotionResolution FeedPerTooth Gets a new feed per tooth machining motion resolution instance. [JsAce] public FeedPerToothMachiningMotionResolution FeedPerTooth { get; } Property Value FeedPerToothMachiningMotionResolution Fixture [JsAce] public Fixture Fixture { get; set; } Property Value Fixture Global Global variables. [JsAce(\"Global[$1key]\")] public Dictionary Global { get; } Property Value Dictionary InitSpindleTemperature_C Gets or sets the initial spindle temperature in degrees Celsius. [JsAce(DocContentHtml = \"Spindle Temperature on initialization.\")] public double InitSpindleTemperature_C { get; set; } Property Value double JsAceCompletionProfileJsonArray Internal used. public static JsonArray JsAceCompletionProfileJsonArray { get; } Property Value JsonArray MachiningMotionResolution Gets or sets the machining motion resolution. [JsAce] public IMachiningMotionResolution MachiningMotionResolution { get; set; } Property Value IMachiningMotionResolution MachiningResolution Gets or sets the machining resolution in millimeters. For legacy compatable. [JsAce] [Obsolete] public double MachiningResolution { get; set; } Property Value double MachiningResolution_mm Gets or sets the machining resolution in millimeters. [JsAce] public double MachiningResolution_mm { get; set; } Property Value double MachiningSession public MachiningSession MachiningSession { get; } Property Value MachiningSession MapTask Task tracking the status of mapping operations. public Task MapTask { get; set; } Property Value Task MillingForceCycleDivisionNum Gets or sets the number of divisions per cycle for milling force calculation. This property should be set before milling force evaluation if TrainMillingPara(SampleFlag, string, double, ICuttingPara) is intended to be used. [JsAce] public static int MillingForceCycleDivisionNum { get; set; } Property Value int NcOptOption Gets or sets the NC optimization options. [JsAce] public NcOptOption NcOptOption { get; set; } Property Value NcOptOption OptEnableDepthCompensation Enables or disables depth compensation during optimization. [JsAce] public bool OptEnableDepthCompensation { get; set; } Property Value bool OptEnableEmbeddedLog [JsAce] public static bool OptEnableEmbeddedLog { get; set; } Property Value bool OptEnableFeedrate Gets or sets whether to enable feed rate optimization in NC optimization. [JsAce] public bool OptEnableFeedrate { get; set; } Property Value bool OptEnableFlatProcLog [JsAce] public static bool OptEnableFlatProcLog { get; set; } Property Value bool OptEnableForwardCompensation Enables or disables forward compensation during optimization. [JsAce] public bool OptEnableForwardCompensation { get; set; } Property Value bool OptEnableInterpolation Enables or disables reinterpolation for optimization. [JsAce] public bool OptEnableInterpolation { get; set; } Property Value bool OptEnableSideCompensation Enables or disables side compensation during optimization. [JsAce] public bool OptEnableSideCompensation { get; set; } Property Value bool OptExtendedPostDistance_mm Gets or sets the extended post-distance in millimeters for NC optimization. This is the distance after the current segment that will be considered for optimization. [JsAce] public double OptExtendedPostDistance_mm { get; set; } Property Value double OptExtendedPreDistance_mm Gets or sets the extended pre-distance in millimeters for NC optimization. This is the distance before the current segment that will be considered for optimization. [JsAce] public double OptExtendedPreDistance_mm { get; set; } Property Value double OptFeedrateAssignmentRatio Gets or sets the feedrate assignment ratio for optimization. If the feedrate change exceeds this ratio, the feedrate in the NC line will be updated. [JsAce] public double OptFeedrateAssignmentRatio { get; set; } Property Value double OptMaxAcceleration_mmds2 Maximum acceleration in mm/s² during optimization. Only takes effect on reinterpolated section. [JsAce(DocContentHtml = \"Only take effect on reinterpolated section.\")] public double OptMaxAcceleration_mmds2 { get; set; } Property Value double OptMaxFeedPerTooth_mm Gets or sets the maximum feed per tooth in millimeters for optimization. [JsAce] public double OptMaxFeedPerTooth_mm { get; set; } Property Value double OptMaxFeedrate_mmdmin Maximum feed rate in mm/min for cutting movements during optimization. [JsAce] public double OptMaxFeedrate_mmdmin { get; set; } Property Value double OptMaxJerk_mmds3 Maximum jerk in mm/s³ during optimization. Only takes effect on reinterpolated section. [JsAce(DocContentHtml = \"Only take effect on reinterpolated section.\")] public double OptMaxJerk_mmds3 { get; set; } Property Value double OptMinFeedPerTooth_mm Gets or sets the minimum feed per tooth in millimeters for optimization. [JsAce] public double OptMinFeedPerTooth_mm { get; set; } Property Value double OptMinFeedrate_mmdmin Minimum feed rate in mm/min for cutting movements during optimization. [JsAce] public double OptMinFeedrate_mmdmin { get; set; } Property Value double OptPreferedForce_N Preferred force in N for optimization. [JsAce] public double OptPreferedForce_N { get; set; } Property Value double OptRapidFeed_mmdmin Rapid feed rate in mm/min for non-cutting movements during optimization. [JsAce] public double OptRapidFeed_mmdmin { get; set; } Property Value double OptSpindlePowerSafetyFactor Safety factor for spindle power during optimization. [JsAce] public double OptSpindlePowerSafetyFactor { get; set; } Property Value double OptSpindlePowerUtilizationFactor Utilization factor for spindle power during optimization. It is the reciprocal of the spindle power safety factor. [JsAce] public double OptSpindlePowerUtilizationFactor { get; set; } Property Value double OptSpindleTorqueSafetyFactor [JsAce] public double OptSpindleTorqueSafetyFactor { get; set; } Property Value double OptSpindleTorqueUtilizationFactor Utilization factor for spindle torque during optimization. It is the reciprocal of the spindle torque safety factor. [JsAce] public double OptSpindleTorqueUtilizationFactor { get; set; } Property Value double OptThermalYieldSafetyFactor Safety factor for spindle torque during optimization. [JsAce] public double OptThermalYieldSafetyFactor { get; set; } Property Value double OptThermalYieldUtilizationFactor Utilization factor for thermal yield during optimization. It is the reciprocal of the thermal yield safety factor. [JsAce] public double OptThermalYieldUtilizationFactor { get; set; } Property Value double OptYieldingSafetyFactor Safety factor for yielding during optimization. [JsAce] public double OptYieldingSafetyFactor { get; set; } Property Value double OptYieldingUtilizationFactor Utilization factor for yielding during optimization. It is the reciprocal of the yielding safety factor. [JsAce] public double OptYieldingUtilizationFactor { get; set; } Property Value double ScriptOptions ScriptOptions. public ScriptOptions ScriptOptions { get; set; } Property Value ScriptOptions SessionMessageHost Gets the session message host for displaying messages. [JsAce] public SessionMessageHost SessionMessageHost { get; } Property Value SessionMessageHost StepCount Gets the total number of milling steps. [JsAce] public int StepCount { get; } Property Value int Workpiece [JsAce] public Workpiece Workpiece { get; set; } Property Value Workpiece Methods AddTimeDataByFile(string, string, double, double) Adds time-based data from a file to the time mapping dictionary with specified time bounds in seconds. [JsAce(\"AddTimeDataByFile($1key, $2relFile, $3beginTime, $4endTime)\")] public bool AddTimeDataByFile(string key, string relFile, double beginTime, double endTime) Parameters key string Key to identify the data relFile string Relative path to the data file beginTime double Beginning time in seconds endTime double Ending time in seconds Returns bool True if the data was successfully added, false otherwise AddTimeDataByFile(string, string, string, string) Adds time-based data from a file to the time mapping dictionary with specified time bounds. [JsAce(\"AddTimeDataByFile($1key, $2relFile, $3beginTime, $4endTime)\")] public bool AddTimeDataByFile(string key, string relFile, string beginTimeText, string endTimeText) Parameters key string Key to identify the data relFile string Relative path to the data file beginTimeText string Beginning time as text (seconds or TimeSpan format) endTimeText string Ending time as text (seconds or TimeSpan format) Returns bool True if the data was successfully added, false otherwise AppendMessagesToFile(string, params string[]) Appends messages to a file, optionally filtered by tags. [JsAce(\"AppendMessagesToFile(\\\"dstRelFile\\\",flags)\")] public void AppendMessagesToFile(string dstRelFile, params string[] flags) Parameters dstRelFile string Destination relative file path flags string[] Optional flags to filter messages by tags BeginPreserve() Begin Preserve section in optimzation process. [JsAce(\"BeginPreserve()\")] public void BeginPreserve() BeginSelection(string, AnchorMode, IStepShift) Begin mark on current line. milling step() has not triggered yet. public void BeginSelection(string key, AnchorMode anchorMode = AnchorMode.LineBegin, IStepShift shift = null) Parameters key string Identifier key for the selection anchorMode AnchorMode Mode for anchoring the beginning of selection shift IStepShift Step shift to apply BeginSession() Begins a new machining session. Not for end user. public void BeginSession() ClearTimeMappingData() Clears all time mapping data. [JsAce] public void ClearTimeMappingData() Diff(double) Performs a difference analysis on the workpiece geometry to detect variations. [JsAce(\"Diff($1detectionRadius_mm)\")] public void Diff(double detectionRadius_mm) Parameters detectionRadius_mm double Radius for detecting differences EndPreserve() End Preserve section in optimzation process. [JsAce(\"EndPreserve()\")] public void EndPreserve() EndSelection(string, AnchorMode, IStepShift) End mark on current line for selection. public void EndSelection(string key, AnchorMode anchorMode = AnchorMode.LineEnd, IStepShift shift = null) Parameters key string Identifier key for the selection anchorMode AnchorMode Mode for anchoring the end of selection shift IStepShift Step shift to apply EndSession() Ends the current machining session. Not for end user. public void EndSession() ErrorMessage(string) Displays an error message in the message host. [JsAce(\"ErrorMessage($1message)\")] public void ErrorMessage(string message) Parameters message string The error message to display FixedPace(double, double) Creates a fixed machining motion resolution with specified parameters. [JsAce(\"FixedPace($1linearResolution_mm, $2rotaryResolution_deg)\")] public FixedMachiningMotionResolution FixedPace(double linearResolution_mm, double rotaryResolution_deg) Parameters linearResolution_mm double Linear resolution in millimeters rotaryResolution_deg double Rotary resolution in degrees Returns FixedMachiningMotionResolution A new fixed machining motion resolution instance GetMillingStep(int) Retrieves a milling step at the specified index. [JsAce(Snippet = \"GetMillingStep($1\\\"stepIndex\\\")\")] public MachiningStep GetMillingStep(int stepIndex) Parameters stepIndex int Index of the milling step to retrieve Returns MachiningStep The milling step at the specified index GetStickMachiningToolObservationHeight_mm(int) Gets the observation height in millimeters for the specified stick machining tool. [JsAce(\"GetStickMachiningToolObservationHeight_mm($1toolId)\")] public double GetStickMachiningToolObservationHeight_mm(int toolId) Parameters toolId int The ID of the tool Returns double The observation height in millimeters GetUniformContourTrayShiftAngle_deg(int) Gets the shift angle in degrees for the uniform contour tray of the specified tool. [JsAce(\"GetUniformContourTrayShiftAngle_deg($1toolId)\")] public double GetUniformContourTrayShiftAngle_deg(int toolId) Parameters toolId int The ID of the tool Returns double The shift angle in degrees LineSelection(string, AnchorMode, IStepShift, AnchorMode, IStepShift) Create a line selection from begin to end mark. public void LineSelection(string key, AnchorMode beginAnchorMode = AnchorMode.LineBegin, IStepShift beginShift = null, AnchorMode endAnchorMode = AnchorMode.LineEnd, IStepShift endShift = null) Parameters key string Identifier key for the selection beginAnchorMode AnchorMode Mode for anchoring the beginning of selection beginShift IStepShift Step shift to apply at beginning endAnchorMode AnchorMode Mode for anchoring the end of selection endShift IStepShift Step shift to apply at end LoadCuttingParaByFile(string) [JsAce(\"LoadCuttingParaByFile($1\\\"relFile\\\")\")] public void LoadCuttingParaByFile(string relFile) Parameters relFile string Map(string, FileTimeSection, CycleSamplingMode?) Maps selection data to time section. public Task Map(string key, FileTimeSection fileTimeSection = null, StepTimeShotUtil.CycleSamplingMode? cycleSamplingMode = CycleSamplingMode.SpindleCycle) Parameters key string Identifier key for the selection fileTimeSection FileTimeSection File time section, or null to use the one associated with the key cycleSamplingMode StepTimeShotUtil.CycleSamplingMode? Cycle sampling mode Returns Task Task representing the asynchronous mapping operation MapByActualTime(string, CycleSamplingMode) [JsAce(\"MapByActualTime($1timeShotRelFile)\")] public void MapByActualTime(string timeShotRelFile, StepTimeShotUtil.CycleSamplingMode cycleSamplingMode = CycleSamplingMode.SpindleCycle) Parameters timeShotRelFile string cycleSamplingMode StepTimeShotUtil.CycleSamplingMode Message(string) Displays a message in the message host. [JsAce(\"Message($1message)\")] public void Message(string message) Parameters message string The message to display OptCallPreferFuncIndexDictionary() [JsAce(\"OptCallPreferFuncIndexDictionary()\")] public Dictionary, double> OptCallPreferFuncIndexDictionary() Returns Dictionary, double> OptimizeToFiles(string) Optimizes NC files and saves results using the specified file template. [JsAce(Snippet = \"OptimizeToFiles(\\\"Output/Opt-[NcName]\\\")\", DocContentHtml = \"Optimize To Files by substitude template keywoard \\\"[NcName]\\\"\")] public void OptimizeToFiles(string relFileTemplate = \"Output/Opt-[NcName]\") Parameters relFileTemplate string Template for output file path, can include [NcName] placeholder Pace() A pausable mark for the playing process. The function enables Pause() to take effect. [JsAce(\"Pace();\")] public void Pace() Remarks Waits for the player to signal the next pace. Pause() Pause Player [JsAce(DocContentHtml = \"Pause Player\")] public void Pause() PlayAct(IAct, IIndexedFileLine, CancellationToken?) Plays an act with pacing control. [JsAce] public void PlayAct(IAct act, IIndexedFileLine sourceCommand = null, CancellationToken? cancellationToken = null) Parameters act IAct The act to play. sourceCommand IIndexedFileLine The source command. cancellationToken CancellationToken? Cancellation token. PlayClTeleport(double, double, double, double, double, double) Plays a CL (cutter location) teleport operation. [JsAce] public void PlayClTeleport(double x, double y, double z, double i, double j, double k) Parameters x double X coordinate. y double Y coordinate. z double Z coordinate. i double I vector component. j double J vector component. k double K vector component. PlayCsvFile(string) Plays an Csv file with the specified relative path. [JsAce(\"PlayCsvFile($1\\\"csvFile\\\");\")] public void PlayCsvFile(string relFilePath) Parameters relFilePath string Relative path to the CSV file PlayNc(string, string) Plays NC code directly from a string, executing each action and pacing between them. [JsAce(Snippet = \"PlayNc($1\\\"ncCommand\\\",$2\\\"\\\"(Direct Command)\\\"\\\");\", DocContentHtml = \"Play NC. second parameter is the file name alternative shows in the log.\")] public void PlayNc(string ncText, string fileNameAlternative = \"--\") Parameters ncText string NC code as a string fileNameAlternative string Alternative name to display in logs PlayNcFile(string) Plays an NC file with the specified relative path. [JsAce(\"PlayNcFile($1\\\"ncFile\\\");\")] public void PlayNcFile(string relNcFilePath) Parameters relNcFilePath string Relative path to the NC file PlayToolingTeleport(int) Plays a tooling teleport operation. [JsAce] public void PlayToolingTeleport(int toolId) Parameters toolId int The tool ID to teleport. Preserve() Preserve one line NC code in optimzation process. [JsAce(\"Preserve()\")] public void Preserve() ProgressMessage(string) Displays a progress message in the message host. [JsAce(\"ProgressMessage($1message)\")] public void ProgressMessage(string message) Parameters message string The progress message to display ReTrainMillingPara(SampleFlag, string, double) Re-trains milling parameters using the specified sample flag. [JsAce(\"ReTrainMillingPara(Fx|Fy|Fz, $1dstFile)\")] public void ReTrainMillingPara(SampleFlag sampleFlag, string dstRelFile, double outlierRatio = 2) Parameters sampleFlag SampleFlag Sample flag indicating which components to train dstRelFile string Destination relative file path outlierRatio double Outlier ratio for data filtering ReadCsvByTimeInterpolation(string) Reads a CSV file and performs time-based interpolation to map data to milling steps. [JsAce(Snippet = \"ReadCsvByTimeInterpolation($1\\\"csvFile\\\")\")] public void ReadCsvByTimeInterpolation(string csvFile) Parameters csvFile string Path to the CSV file relative to the base directory ReadRuntimeGeom(string) Reads runtime geometry from a file. [JsAce(\"ReadRuntimeGeom($1\\\"srcFile\\\")\")] public void ReadRuntimeGeom(string relFile) Parameters relFile string Relative path to the input file RegisterStepVariable(string, string, string, string, Func) Registers a step variable for tracking during execution. [JsAce(Snippet = \"RegisterStepVariable(\\\"$1key\\\",\\\"$2name\\\",\\\"$3unit\\\",\\\"$4formatString\\\",\\\"$5variableFunc\\\")\", DocContentHtml = \"

    Register Step Variable.

    \\\"unit\\\" is nullable

    \\\"formatString\\\" is nullable

    \")] public void RegisterStepVariable(string key, string name, string unit, string formatString, Func variableFunc = null) Parameters key string Unique key to identify the variable name string Human-readable name of the variable unit string Physical unit of the variable (can be null) formatString string Format string for displaying the variable (can be null) variableFunc Func Function to compute the variable value from a milling step (can be null) RemoveFlyPiece() Removes any disconnected or “flying” pieces from the workpiece geometry. [JsAce] public void RemoveFlyPiece() Reset() Reset Player [JsAce(DocContentHtml = \"Reset Player\")] public void Reset() ResetRuntime() Clears internal buffers. [JsAce] public void ResetRuntime() RunNc(string, string) Runs NC code directly from a string. Not for end user. [JsAce(Snippet = \"RunNc($1\\\"ncCommand\\\",$2\\\"\\\"(Direct Command)\\\"\\\");\", DocContentHtml = \"Run NC. second parameter is the file name alternative shows in the log.\")] public IEnumerable RunNc(string ncText, string fileNameAlternative = \"--\") Parameters ncText string NC code as a string fileNameAlternative string Alternative name to display in logs Returns IEnumerable Enumerable sequence of actions to be executed RunNcFile(string) Runs an NC file with the specified relative path. Not for end user. [JsAce(\"RunNcFile($1\\\"ncFile\\\");\")] public IEnumerable RunNcFile(string relNcFilePath) Parameters relNcFilePath string Relative path to the NC file Returns IEnumerable Enumerable sequence of actions to be executed SetNcResolutionFeedPerCycle() Sets NC resolution to feed per cycle mode. public void SetNcResolutionFeedPerCycle() SetNcResolutionFeedPerTooth() Sets NC resolution to feed per tooth mode. public void SetNcResolutionFeedPerTooth() SetNcResolutionFixed(double, double) Sets NC resolution to fixed mode with specified resolution values. public void SetNcResolutionFixed(double linearResolution_mm, double rotaryResolution_deg) Parameters linearResolution_mm double Linear resolution in millimeters. rotaryResolution_deg double Rotary resolution in degrees. SetStickMachiningToolObservationHeight_mm(int, double) Sets the observation height in millimeters for the specified stick machining tool. [JsAce(\"SetStickMachiningToolObservationHeight_mm($1toolId,$2height_mm)\")] public void SetStickMachiningToolObservationHeight_mm(int toolId, double height) Parameters toolId int The ID of the tool height double The observation height in millimeters to set SetUniformContourTrayShiftAngle_deg(int, double) Sets the shift angle in degrees for the uniform contour tray of the specified tool. [JsAce(\"SetUniformContourTrayShiftAngle_deg($1toolId,$2angle_deg)\")] public void SetUniformContourTrayShiftAngle_deg(int toolId, double angle_deg) Parameters toolId int The ID of the tool angle_deg double The shift angle in degrees to set ShiftDistance_mm(double) Creates a distance shift object representing the specified distance in millimeters. public DistanceShift ShiftDistance_mm(double distanceShift_mm) Parameters distanceShift_mm double Distance shift in millimeters Returns DistanceShift Distance shift object ShiftTime_s(double) Creates a time shift object representing the specified time in seconds. public TimeShift ShiftTime_s(double seconds) Parameters seconds double Time in seconds Returns TimeShift Time shift object TrainMillingPara(SampleFlag, string, double, ICuttingPara) Trains milling parameters using the specified sample flag. [JsAce(\"TrainMillingPara(Fx|Fy|Fz, $1dstFile)\")] public void TrainMillingPara(SampleFlag sampleFlag, string dstRelFile, double outlierRatio = 2, ICuttingPara paraTemplate = null) Parameters sampleFlag SampleFlag Sample flag indicating which components to train dstRelFile string Destination relative file path outlierRatio double Outlier ratio for data filtering paraTemplate ICuttingPara WarningMessage(string) Displays a warning message in the message host. [JsAce(\"WarningMessage($1message)\")] public void WarningMessage(string message) Parameters message string The warning message to display WriteRuntimeGeom(string) Writes the current runtime geometry to a file. [JsAce(\"WriteRuntimeGeom($1\\\"dstFile\\\")\")] public void WriteRuntimeGeom(string relFile) Parameters relFile string Relative path to the output file WriteRuntimeGeomToStl(string, double) Writes the current runtime geometry to an STL file. [JsAce(\"WriteRuntimeGeomToStl($1\\\"dstFile\\\",$2resolution_mm)\")] public void WriteRuntimeGeomToStl(string relFile, double resolution_mm = 0) Parameters relFile string Relative path to the output STL file resolution_mm double Resolution in millimeters (0 for default) WriteShotFiles(double, string) Writes time-series data to shot files with the specified resolution period (alternative parameter order). public void WriteShotFiles(double resolutionPeroid_ms, string relFileTemplate) Parameters resolutionPeroid_ms double Resolution period in milliseconds relFileTemplate string Template for output file path, can include [NcName] placeholder WriteShotFiles(string, double) Writes time-series data to shot files with the specified resolution period. [JsAce(Snippet = \"WriteShotFiles(\\\"Output/[NcName].shot.csv\\\",resolutionPeroid_ms)\", DocContentHtml = \"Write time series data by resolutionPeroid_ms\")] public void WriteShotFiles(string relFileTemplate = \"Output/[NcName].shot.csv\", double resolutionPeroid_ms = 1) Parameters relFileTemplate string Template for output file path, can include [NcName] placeholder resolutionPeroid_ms double Resolution period in milliseconds WriteStepFiles(string) Writes step-series data to files with the specified file template. [JsAce(Snippet = \"WriteStepFiles(\\\"Output/[NcName].step.csv\\\")\", DocContentHtml = \"Write step series data.\")] public void WriteStepFiles(string relFileTemplate = \"Output/[NcName].step.csv\") Parameters relFileTemplate string Template for output file path, can include [NcName] placeholder Events MachiningStepBuilt Gets or sets the action to configure steps during execution. The event will be cleared by the calling of ResetRuntime(). [JsAce(Snippet = \"MachiningStepBuilt+=($1preStep,$2curStep)=>{$3Command};\", DocContentHtml = \"Runtime Step Configuration action. preStep is the Previous Milling Step; curStep is the Current Milling Step. preStep is null if no previous step existed.\")] public event MachiningActRunner.MachiningStepBuiltDelegate MachiningStepBuilt Event Type MachiningActRunner.MachiningStepBuiltDelegate MachiningStepSelected Event that is triggered when a milling step is selected. The event will be cleared by the calling of ResetRuntime(). [JsAce(Snippet = \"MachiningStepSelected+=($1millingStep)=>{$2Command};\")] public event Action MachiningStepSelected Event Type Action" }, "api/Hi.MachiningProcs.RuntimeController.html": { "href": "api/Hi.MachiningProcs.RuntimeController.html", @@ -3367,7 +3367,7 @@ "api/Hi.NcOpt.NcOptProc.html": { "href": "api/Hi.NcOpt.NcOptProc.html", "title": "Class NcOptProc | HiAPI-C# 2025", - "summary": "Class NcOptProc Namespace Hi.NcOpt Assembly HiNc.dll Provides functionality for optimizing NC programs by modifying feed rates and tool paths. public class NcOptProc : IMakeXmlSource Inheritance object NcOptProc Implements IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors NcOptProc(SequentialBulkReader) Ctor. public NcOptProc(SequentialBulkReader millingStepLuggageReader) Parameters millingStepLuggageReader SequentialBulkReader NcOptProc(XElement, string, SequentialBulkReader) Ctor. public NcOptProc(XElement src, string baseDirectory, SequentialBulkReader millingStepLuggageReader) Parameters src XElement XML baseDirectory string Base directory path millingStepLuggageReader SequentialBulkReader Milling step luggage reader Properties CoreNum Parallel computation thread num. 0 is special number to use all cores. public static int CoreNum { get; set; } Property Value int EnableFirstSituProcLog Enable create log file for first (independent) situ process. public static bool EnableFirstSituProcLog { get; set; } Property Value bool EnableNcEmbeddedLog Enable embedded log to optimized NC file. public static bool EnableNcEmbeddedLog { get; set; } Property Value bool XName Name for XML IO. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Optimize(ICuttingPara, MachiningSession, LinkedList, NcEnv, List, MachiningToolHouse, IMessageHost, CancellationToken, string, string) Optimizes NC lines based on cutting parameters and milling steps. public IEnumerable<(NcLine SrcNcLine, NcLine OptNcLine)> Optimize(ICuttingPara millingPara, MachiningSession machiningSession, LinkedList srcNcLines, NcEnv ncEnv, List machiningSteps, MachiningToolHouse millingToolHouse, IMessageHost messageHost, CancellationToken cancellationToken, string baseDirectory, string relFileTemplate) Parameters millingPara ICuttingPara The cutting parameters for optimization machiningSession MachiningSession The current machining session srcNcLines LinkedList The source NC lines to optimize ncEnv NcEnv The NC environment settings machiningSteps List The list of milling steps millingToolHouse MachiningToolHouse The machining tool house messageHost IMessageHost The message host for logging cancellationToken CancellationToken Cancellation token to cancel the operation baseDirectory string relFileTemplate string The relative file template for output Returns IEnumerable<(NcLine SrcNcLine, NcLine OptNcLine)> Enumerable of source and optimized NC line pairs OptimizeToFiles(ICuttingPara, MachiningSession, LinkedList, NcEnv, MachiningToolHouse, ClStrip, string, IMessageHost, CancellationToken, string) Optimizes NC lines and writes the results to files. public void OptimizeToFiles(ICuttingPara millingPara, MachiningSession machiningSession, LinkedList ncLines, NcEnv ncEnv, MachiningToolHouse millingToolHouse, ClStrip clStrip, string baseDirectory, IMessageHost messageHost, CancellationToken cancellationToken, string relFileTemplate = \"Output/Opt-[NcName]\") Parameters millingPara ICuttingPara The cutting parameters for optimization machiningSession MachiningSession The current machining session ncLines LinkedList The NC lines to optimize ncEnv NcEnv The NC environment settings millingToolHouse MachiningToolHouse The machining tool house clStrip ClStrip The cutter location strip baseDirectory string The base directory for output files messageHost IMessageHost The message host for logging cancellationToken CancellationToken Cancellation token to cancel the operation relFileTemplate string The relative file template for output files" + "summary": "Class NcOptProc Namespace Hi.NcOpt Assembly HiNc.dll Provides functionality for optimizing NC programs by modifying feed rates and tool paths. public class NcOptProc : IMakeXmlSource Inheritance object NcOptProc Implements IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors NcOptProc(SequentialBulkReader) Ctor. public NcOptProc(SequentialBulkReader millingStepLuggageReader) Parameters millingStepLuggageReader SequentialBulkReader NcOptProc(XElement, string, SequentialBulkReader) Ctor. public NcOptProc(XElement src, string baseDirectory, SequentialBulkReader millingStepLuggageReader) Parameters src XElement XML baseDirectory string Base directory path millingStepLuggageReader SequentialBulkReader Milling step luggage reader Properties CoreNum Parallel computation thread num. 0 is special number to use all cores. public static int CoreNum { get; set; } Property Value int EnableEmbeddedLog Enable embedded log to optimized NC file. public static bool EnableEmbeddedLog { get; set; } Property Value bool EnableFlatProcLog Enable create log file for first (independent) situ process. public static bool EnableFlatProcLog { get; set; } Property Value bool XName Name for XML IO. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Optimize(ICuttingPara, MachiningSession, LinkedList, NcEnv, List, MachiningToolHouse, IMessageHost, CancellationToken, string, string) Optimizes NC lines based on cutting parameters and milling steps. public IEnumerable<(NcLine SrcNcLine, NcLine OptNcLine)> Optimize(ICuttingPara millingPara, MachiningSession machiningSession, LinkedList srcNcLines, NcEnv ncEnv, List machiningSteps, MachiningToolHouse millingToolHouse, IMessageHost messageHost, CancellationToken cancellationToken, string baseDirectory, string relFileTemplate) Parameters millingPara ICuttingPara The cutting parameters for optimization machiningSession MachiningSession The current machining session srcNcLines LinkedList The source NC lines to optimize ncEnv NcEnv The NC environment settings machiningSteps List The list of milling steps millingToolHouse MachiningToolHouse The machining tool house messageHost IMessageHost The message host for logging cancellationToken CancellationToken Cancellation token to cancel the operation baseDirectory string relFileTemplate string The relative file template for output Returns IEnumerable<(NcLine SrcNcLine, NcLine OptNcLine)> Enumerable of source and optimized NC line pairs OptimizeToFiles(ICuttingPara, MachiningSession, LinkedList, NcEnv, MachiningToolHouse, ClStrip, string, IMessageHost, CancellationToken, string) Optimizes NC lines and writes the results to files. public void OptimizeToFiles(ICuttingPara millingPara, MachiningSession machiningSession, LinkedList ncLines, NcEnv ncEnv, MachiningToolHouse millingToolHouse, ClStrip clStrip, string baseDirectory, IMessageHost messageHost, CancellationToken cancellationToken, string relFileTemplate = \"Output/Opt-[NcName]\") Parameters millingPara ICuttingPara The cutting parameters for optimization machiningSession MachiningSession The current machining session ncLines LinkedList The NC lines to optimize ncEnv NcEnv The NC environment settings millingToolHouse MachiningToolHouse The machining tool house clStrip ClStrip The cutter location strip baseDirectory string The base directory for output files messageHost IMessageHost The message host for logging cancellationToken CancellationToken Cancellation token to cancel the operation relFileTemplate string The relative file template for output files" }, "api/Hi.NcOpt.ShapeBasedCutterOptLimit.html": { "href": "api/Hi.NcOpt.ShapeBasedCutterOptLimit.html", @@ -4752,7 +4752,7 @@ "brief/dev-doc/build-hinc/general-rules.html": { "href": "brief/dev-doc/build-hinc/general-rules.html", "title": "General Rules | HiAPI-C# 2025", - "summary": "General Rules Tip You MUST read the cited hyperlink before you do the job. ASK if you think the hyperlink is not work. Handle Message and Exception If message is well-managed, apply to show the message; if the message is Exception, apply ExceptionUtil.ShowException(Exception, object) to show the exception for detail treatment. The messages are shown in Message Section on Main Panel. For examples of message and exception handling patterns: Normal message handling: MessageHost.AddMessage(\"Operation completed successfully.\"); MessageHost.AddWarning(\"Please check your input.\"); Exception handling in synchronous code: try { // Your code here throw new NotImplementedException(\"Demo exception\"); } catch (Exception ex) { ExceptionUtil.ShowException(ex, null); } Exception handling in asynchronous code: await Task.Run(() => { // Your async operation here throw new NotImplementedException(\"Demo async exception\"); }).ShowIfCatched(null); The examples are in project Hi.Sample. See this page for git repository. Loose Manner Run Skippable Rapid Calling Synchronous Action in Loose Manner. Some synchronous action may be calling rapidly but only the last call has to be effective (or it is endurable to loss some previous action call). Define a LooseRunner and apply TryRun to run the action. Dispose the LooseRunner on owner disposing to ensure the tryrun action is well-managed. GUI File Path Assignment See GUI File Path Assignment. Numeric Input/Output Handling Implement a numeric-utils.js module to handle special floating-point values in web forms. See Numeric Input/Output Utilities for implementation details. DictionaryService Pattern for Hierarchical Components For web applications with hierarchical SignalR hub connections, use the DictionaryService and DictionaryHub Pattern to manage connection-scoped object indexing. This pattern provides isolation between components, supports nested components without conflicts, and ensures automatic cleanup of resources on disconnect. Translation Remarks See Translation Remarks." + "summary": "General Rules Tip You MUST read the cited hyperlink before you do the job. ASK if you think the hyperlink is not work. Handle Message and Exception If message is well-managed, apply MessageHost to show the message; if the message is Exception, apply ExceptionUtil.ShowException(Exception, object) to show the exception for detail treatment. The messages are shown in Message Section on Main Panel. For examples of message and exception handling patterns: Normal message handling: MessageHost.AddMessage(\"Operation completed successfully.\"); MessageHost.AddWarning(\"Please check your input.\"); Exception handling in synchronous code: try { // Your code here throw new NotImplementedException(\"Demo exception\"); } catch (Exception ex) { ExceptionUtil.ShowException(ex, null); } Exception handling in asynchronous code: await Task.Run(() => { // Your async operation here throw new NotImplementedException(\"Demo async exception\"); }).ShowIfCatched(null); The examples are in project Hi.Sample. See this page for git repository. Loose Manner Run Skippable Rapid Calling Synchronous Action in Loose Manner. Some synchronous action may be calling rapidly but only the last call has to be effective (or it is endurable to loss some previous action call). Define a LooseRunner and apply TryRun to run the action. Dispose the LooseRunner on owner disposing to ensure the tryrun action is well-managed. GUI File Path Assignment See GUI File Path Assignment. Numeric Input/Output Handling Implement a numeric-utils.js module to handle special floating-point values in web forms. See Numeric Input/Output Utilities for implementation details. DictionaryService Pattern for Hierarchical Components For web applications with hierarchical SignalR hub connections, use the DictionaryService and DictionaryHub Pattern to manage connection-scoped object indexing. This pattern provides isolation between components, supports nested components without conflicts, and ensures automatic cleanup of resources on disconnect. Translation Remarks See Translation Remarks." }, "brief/dev-doc/build-hinc/geom/box3d-control.html": { "href": "brief/dev-doc/build-hinc/geom/box3d-control.html", @@ -4817,7 +4817,7 @@ "brief/dev-doc/build-hinc/main-panel.html": { "href": "brief/dev-doc/build-hinc/main-panel.html", "title": "Main Panel | HiAPI-C# 2025", - "summary": "Main Panel Key Model WPF Single-User Desktop Application: Self-hosted LocalProjectService Web Service Application: Service inherits from IProjectService Other Model: AppService Main Panel Layout Top Navigation Menu Project Menu Dropdown Project Path Text Field New MenuItem Load MenuItem Save MenuItem Save As MenuItem Environment Menu Dropdown Machine Tool MenuItem Open Machine Tool Page Sole window in WPF app. The page manages MachiningEquipment.. Controller MenuItem Open Controller Page Tool House MenuItem Fixture MenuItem Open Fixture Page Workpiece MenuItem Open Workpiece Page Mission MenuItem Open Mission Page Player MenuItem Link to Player Panel (Not exist on WPF app.) Player Belonged Tool Bars. See Player Panel. Shows only if the Main Panel content is Player Panel. Preference Menu Dropdown Help MenuItem HiAPI Version label A label to show the HiNc library version. Log MenuItem Open Log Viewer to display application logs for the current day. The Log Viewer provides real-time access to system logs with filtering and download capabilities. It reads log files from the server's log directory and presents them in a formatted, searchable interface. Users can refresh the log content or download the current day's log file for offline analysis. Central Page Panel Message Section on Main Panel Behavior of Navigation Menu/Project Project Path Text Field Shows the Project Path if the project is assinged. Tip Project Path Text Field should not be button style. It should be a pure text field that can be selected and copied. The Project Menu Managing MachiningProject. To New (create), Save and Save As the MachiningProject, See DemoBuildGeomOnlyMachiningProject for the example. To Load MachiningProject, See DemoUseMachiningProject for the example. Show message for the actions result (successed or has exception) by . Tip Recommmand using static function of to do the job. Read document of to ensure the proper usage. On project loaded (Navigation Menu/Project/Load MenuItem) , set the Player.Panel.RenderingCanvas.DispEngine to SetViewToIsometricView(). Tip Using async to comfort the process WPF Application Specification Limit the GUI that only single Page/Window existed in the application for the sub window from the Main Panel, include Mission, Workpiece and Fixture. Don't create the Player MenuItem if the target application is WPF Application. Since the Main panel is the Player Panel and the panel is fixed to the main panel. Web-Page Application Specification Apply Player Panel as the default panel. Application Specification and Source Code Path See this page for git repository. WPF Application Source Code Path MainWindow Web Page Application Source Code Path Environments/PreferenceController.cs Environments/ProjectController.cs wwwroot/app.js wwwroot/index.html wwwroot/preference/log-viewer.js Web Page Application Specification The page and URL are bi-directional." + "summary": "Main Panel Key Model WPF Single-User Desktop Application: Self-hosted LocalProjectService Web Service Application: Service inherits from IProjectService Other Model: AppService Main Panel Layout Top Navigation Menu Project Menu Dropdown Project Path Text Field New MenuItem Load MenuItem Save MenuItem Save As MenuItem Environment Menu Dropdown Machine Tool MenuItem Open Machine Tool Page Sole window in WPF app. The page manages MachiningEquipment.. Controller MenuItem Open Controller Page Tool House MenuItem Fixture MenuItem Open Fixture Page Workpiece MenuItem Open Workpiece Page Mission MenuItem Open Mission Page Player MenuItem Link to Player Panel (Not exist on WPF app.) Player Belonged Tool Bars. See Player Panel. Shows only if the Main Panel content is Player Panel. Preference Menu Dropdown Help MenuItem HiAPI Version label A label to show the HiNc library version. Log MenuItem Open Log Viewer to display application logs for the current day. The Log Viewer provides real-time access to system logs with filtering and download capabilities. It reads log files from the server's log directory and presents them in a formatted, searchable interface. Users can refresh the log content or download the current day's log file for offline analysis. Central Page Panel Message Section on Main Panel Behavior of Navigation Menu/Project Project Path Text Field Shows the Project Path if the project is assinged. Tip Project Path Text Field should not be button style. It should be a pure text field that can be selected and copied. The Project Menu Managing MachiningProject. To New (create), Save and Save As the MachiningProject, See DemoBuildGeomOnlyMachiningProject for the example. To Load MachiningProject, See DemoUseMachiningProject for the example. Show message for the actions result (successed or has exception) by MessageHost. Tip Recommmand using static function of MessageHost to do the job. Read document of MessageHost to ensure the proper usage. On project loaded (Navigation Menu/Project/Load MenuItem) , set the Player.Panel.RenderingCanvas.DispEngine to SetViewToIsometricView(). Tip Using async to comfort the process WPF Application Specification Limit the GUI that only single Page/Window existed in the application for the sub window from the Main Panel, include Mission, Workpiece and Fixture. Don't create the Player MenuItem if the target application is WPF Application. Since the Main panel is the Player Panel and the panel is fixed to the main panel. Web-Page Application Specification Apply Player Panel as the default panel. Application Specification and Source Code Path See this page for git repository. WPF Application Source Code Path MainWindow Web Page Application Source Code Path Environments/PreferenceController.cs Environments/ProjectController.cs wwwroot/app.js wwwroot/index.html wwwroot/preference/log-viewer.js Web Page Application Specification The page and URL are bi-directional." }, "brief/dev-doc/build-hinc/mech/cutter/apt-profile-panel.html": { "href": "brief/dev-doc/build-hinc/mech/cutter/apt-profile-panel.html", @@ -4887,7 +4887,7 @@ "brief/dev-doc/build-hinc/message-section-on-main-panel.html": { "href": "brief/dev-doc/build-hinc/message-section-on-main-panel.html", "title": "Message Section on Main Panel | HiAPI-C# 2025", - "summary": "Message Section on Main Panel Initialize . with Message Section To show and save the message on Brief Message Text Field, add event to .. The event contains: update the text content of Brief Message Text Field Append the message to log file (create if not existed) $\"logs/log-{DateTime.Now:yyyy-MM-dd}.txt\" Tip Handle the situation that logs over one day. Check if passing argument of is Exception. If the it is Exception, update text content by Exception.Message but log to file with the full Exception information. Consider MessageFlag to set the behavior of Message Section. For example, apply alert style if passing argument is exception. The Info (and the other flags that the priority lower than it) should only record in the logs but not shows in the Message Section. WPF Application Layout Message Section Bottom Bar Brief Message Text Field Show Log Button Tip The text field should be selectable to let user easy to copy the message. Web Page Application Layout Message Section Stacking Toast Brief Message Text Field Enable toast Auto-Hide only if the message level is low. Note The convention of web page is not like WPF panel. Use Boostrap or Bootstrap-like toast. They are much appropriate than the fixed bottom bar on WPF. Log Page Layout Head Line Log Label Show Log Button Download Log Button Log TextArea Behavior of Show Log Button Call an editor (or reader, bootstrap modal like poping block) to show the current log. Tip Handle the situation that the current log file does not exist. It may occurs if no message has added." + "summary": "Message Section on Main Panel Initialize MessageHost.Default with Message Section To show and save the message on Brief Message Text Field, add event to Default.OnAdding. The event contains: update the text content of Brief Message Text Field Append the message to log file (create if not existed) $\"logs/log-{DateTime.Now:yyyy-MM-dd}.txt\" Tip Handle the situation that logs over one day. Check if passing argument of OnAdding event is Exception. If the it is Exception, update text content by Message but log to file with the full Exception information. Consider MessageFlag to set the behavior of Message Section. For example, apply alert style if passing argument is exception. The Info (and the other flags that the priority lower than it) should only record in the logs but not shows in the Message Section. WPF Application Layout Message Section Bottom Bar Brief Message Text Field Show Log Button Tip The text field should be selectable to let user easy to copy the message. Web Page Application Layout Message Section Stacking Toast Brief Message Text Field Enable toast Auto-Hide only if the message level is low. Note The convention of web page is not like WPF panel. Use Boostrap or Bootstrap-like toast. They are much appropriate than the fixed bottom bar on WPF. Log Page Layout Head Line Log Label Show Log Button Download Log Button Log TextArea Behavior of Show Log Button Call an editor (or reader, bootstrap modal like poping block) to show the current log. Tip Handle the situation that the current log file does not exist. It may occurs if no message has added." }, "brief/dev-doc/build-hinc/mission/ListCommand-panel.html": { "href": "brief/dev-doc/build-hinc/mission/ListCommand-panel.html", @@ -5047,7 +5047,7 @@ "brief/dev-doc/release-note/index.html": { "href": "brief/dev-doc/release-note/index.html", "title": "Release Note | HiAPI-C# 2025", - "summary": "Release Note HiNc Packages Version 3.1.84 Optimize memory usage by shrinking map-size of clStripPos Fix design pattern of cutting parameter training module (MillingTraining) Add LoadCuttingParaByFile function to load cutting parameters from file Improve CsvRunner actual time parsing: automatically calculate step duration from actual time when duration is not provided Enhance message handling in RuntimeApi by unifying SessionMessageHost usage Improve optimization performance with better task scheduling Various performance improvements and bug fixes HiNc Packages Version 3.1.75 Add actual time tracking functionality (ActualTime) Various stability improvements and bug fixes HiNc Packages Version 3.1.74 Rename class MillingCutterOptLimit to MillingCutterOptOption Add physics simulation function for relief face collision depth detection (ReliefFaceCollidingDepth_mm) and optimization (EnableLimitByReliefAngle) Add UpdateNcOptOption function to step processing Fix step ordering bug from concurrent processing Fix ClStrip shrinking to zero issue" + "summary": "Release Note HiNc Packages Version 3.1.87 Re-build NcOptProc with stricter optimization logics (see NC優化) Add optimization logging features (see 優化日誌): .flatproc.log file output for optimization process analysis (controlled by OptEnableFlatProcLog) Embedded log comments in optimized NC file marking source lines with (src) suffix (controlled by OptEnableEmbeddedLog) Fix cutting depth and width accuracy by bounding-box method with workpiece surface Fix collision check error during concurrent changing collidable object Various stability improvements and bug fixes HiNc Packages Version 3.1.84 Optimize memory usage by shrinking map-size of clStripPos Fix design pattern of cutting parameter training module (MillingTraining) Add LoadCuttingParaByFile function to load cutting parameters from file Improve CsvRunner actual time parsing: automatically calculate step duration from actual time when duration is not provided Enhance message handling in RuntimeApi by unifying SessionMessageHost usage Improve optimization performance with better task scheduling Various performance improvements and bug fixes HiNc Packages Version 3.1.75 Add actual time tracking functionality (ActualTime) Various stability improvements and bug fixes HiNc Packages Version 3.1.74 Rename class MillingCutterOptLimit to MillingCutterOptOption Add physics simulation function for relief face collision depth detection (ReliefFaceCollidingDepth_mm) and optimization (EnableLimitByReliefAngle) Add UpdateNcOptOption function to step processing Fix step ordering bug from concurrent processing Fix ClStrip shrinking to zero issue" }, "brief/dev-doc/system-requirements.html": { "href": "brief/dev-doc/system-requirements.html", @@ -5337,7 +5337,7 @@ "brief/user-guide/zh-Hant/script/NcOptimization/index.html": { "href": "brief/user-guide/zh-Hant/script/NcOptimization/index.html", "title": "NC優化 | HiAPI-C# 2025", - "summary": "NC優化 組態在NC仿真前設定,然後執行輸出優化NC檔指令。 可同時參考閱讀說明章節NC優化。 組態 Note 指令格式 OptEnableFeedrate = <布林值>; OptEnableInterpolation = <布林值>; OptRapidFeed_mmdmin = <實數>; OptMinFeedrate_mmdmin = <實數>; OptMaxFeedrate_mmdmin = <實數>; OptMaxAcceleration_mmds2 = <實數>; OptExtendedPreDistance_mm = <實數>; OptExtendedPostDistance_mm = <實數>; OptSpindlePowerSafetyFactor = <實數>; OptSpindleTorqueSafetyFactor = <實數>; OptThermalYieldSafetyFactor = <實數>; OptPreferedForce_N = <實數>; OptEnableFeedrate(API):啟用順序式(Sequential)進給率優化。 順序式係指該功能從下指令開始作用。與其相對的設定在刀具端,刀具端也能設定進給率優化,但是在裝刀時才會發揮作用。 OptEnableFeedrate(API)與所有其他啟用進給率優化的指令需同時為真,進給率優化才會啟用。 即與刀具設定端必須同時為真(true),進給率優化才會啟用。 OptEnableFeedrate(API)預設值為真。 OptEnableInterpolation(API):優化程序用重新插補。 重新插捕後NC碼會增加,可以更好地控制加減速。 OptFeedrateAssignmentRatio(API):進給賦值倍率。 當優化程序用重新插補並且進給率變化超過進給賦值倍率時,系統會依據OptMaxAcceleration_mmds2(API)插入附帶進給率指令的NC碼。 進給賦值倍率越小,插補點越密集。進給賦值倍率越大,則偏離優化標的的程度越大。 在改進給賦值倍率的同時也要對應加大安全係數。 進給賦值倍率若是0.01,就是1%,每變更1%進給率就會給個新的插補點。 如果改大,比方說10%,可能會變成該處理論值應該是F100,可是優化後卻是F110,所以要配合安全係數修改。 OptRapidFeed_mmdmin(API):優化程序中的無切削區域進給率。單位mm/min。 沒有切到工件的NC路徑,為無切削區域。優化後該路徑將採用無切削區域進給率。 OptMinFeedrate_mmdmin(API):優化程序中的有切削區域最小進給。單位mm/min。 OptMaxFeedrate_mmdmin(API):優化程序中的有切削區域最大進給。單位mm/min。 有切到工件的NC路徑,為有切削區域。有切削區域的最大最小進給的設定通常依據經驗法則。 OptMaxAcceleration_mmds2(API):優化程序中的加減速限制。優化後NC碼的F值變化在該限制之內。單位 \\(mm/s^2\\)。 OptExtendedPreDistance_mm(API):優化程序中的有切削區域等效計算的前長度。單位mm。 OptExtendedPostDistance_mm(API):優化程序中的有切削區域等效計算的後長度。單位mm。 優化程序中的有切削區域等效計算的長度 OptSpindlePowerSafetyFactor(API):主軸功率安全係數。 於優化後的NC碼,主軸功率將盡可能趨近於目標值。 設為0則忽略此限制。 OptSpindleTorqueSafetyFactor(API):主軸扭力安全係數。 優化後的NC碼,主軸扭力將盡可能趨近於目標值。 設為0則忽略此限制。 OptThermalYieldSafetyFactor(API):刀刃熱降伏安全係數。 刀刃表面溫度超過一定值時,刀刃表面會因溫差產生的壓力造成塑性變形。 優化後的NC碼,刀刃表面度將盡可能趨近於目標值。 設為0則忽略此限制。 Note 目標值算法 目標值 = 100% / 安全係數 OptPreferedForce_N(API):優化程中的目標力。單位N。 在符合所有限制的條件下,優化程序中的加工路徑產生的力會盡可能的趨近目標力。 限制的優先序 在有切削區域中: 進給率的直接限制 優先於 加減速限制(OptMaxAcceleration_mmds2(API)) 優先於 基於物理特性算出的限制。 進給率的直接限制 包含 腳本指令 OptMinFeedrate_mmdmin(API) OptMaxFeedrate_mmdmin(API) 刀具設定 每刃最小進給 每刃最大進給 基於物理特性算出的進給率限制 包含 腳本指令 OptSpindlePowerSafetyFactor(API) OptSpindleTorqueSafetyFactor(API) OptThermalYieldSafetyFactor(API) OptPreferedForce_N(API) 刀具設定 降伏力安全係數 若同級項目中的限制有衝突,則採取其中的最低進給率。 NC碼中的優化腳本指令 於指定NC行不啟用優化 在執行 Preserve(API)() 的NC行中,不啟用優化。 Tip 指令範例 在 N0140 行不啟用優化。 ... N0130 X-1.965 Y17.053 N0140 G03 X-2.66 Y38.193 I-103.796 J7.172 (;@Preserve();) N0150 G01 X-3.068 Y40.776 ... 於指定NC範圍不啟用優化 使用BeginPreserve(API)()的NC行及EndPreserve(API)()的NC行及包含的NC範圍,不啟用優化。 Tip 指令範例 在 N0140、N0150、N0160 行不啟用優化。 ... N0130 X-1.965 Y17.053 N0140 G03 X-2.66 Y38.193 I-103.796 J7.172 (;@BeginPreserve();) N0150 G01 X-3.068 Y40.776 N0160 X-3.555 Y43.338 (;@EndPreserve();) N0170 X-4.125 Y45.875 ... 輸出優化NC檔 使用 OptimizeToFiles(API) 方法輸出優化後的NC檔。 Note 指令格式 OptimizeToFiles(<路徑樣板>); <路徑樣板>支援 檔案路徑樣板。 Tip 指令範例 OptEnableFeedrate = true; OptEnableInterpolation = true; OptRapidFeed_mmdmin = 4000; OptMinFeedrate_mmdmin = 100; OptMaxFeedrate_mmdmin = 4000; OptMaxAcceleration_mmds2 = 10; OptExtendedPreDistance_mm = 3; OptExtendedPostDistance_mm = 2; OptSpindlePowerSafetyFactor = 1.5; OptSpindleTorqueSafetyFactor = 1.5; OptThermalYieldSafetyFactor = 0; OptPreferedForce_N = double.PositiveInfinity; PlayNcFile(\"NC/file1.nc\"); OptRapidFeed_mmdmin = 8000; PlayNcFile(\"NC/file2.nc\"); OptimizeToFiles(\"Cache/Opt-[NcName]\"); 組態設定可以穿插在NC仿真間,將會作用在組態設定後的NC仿真。 以上範例為例,優化後的NC程式file1.nc的無切削區域快速進給為4000,file2.nc則為8000。 Tip NC碼中的優化指令範例 ... N0110 X-3.064 Y6.378 (;@OptMaxAcceleration_mmds2=10;) N0120 X-2.411 Y11.712 N0130 X-1.965 Y17.053 N0140 G03 X-2.66 Y38.193 I-103.796 J7.172 (;@Preserve();) N0150 G01 X-3.068 Y40.776 (;@OptMaxAcceleration_mmds2=100; OptMaxFeedrate_mmdmin=12000;) N0160 X-3.555 Y43.338 N0170 X-4.125 Y45.875 ... N0110至N0150前,優化區加速度設為10 \\(mm/s^2\\); N0140單行不做優化; N0150及以後,優化區加速度設為100 \\(mm/s^2\\); N0150及以後,優化區切削區域最大進給設為12000 \\(mm/min\\);" + "summary": "NC優化 組態在NC仿真前設定,然後執行輸出優化NC檔指令。 可同時參考閱讀說明章節NC優化。 組態 Note 指令格式 OptEnableFeedrate = <布林值>; OptEnableInterpolation = <布林值>; OptRapidFeed_mmdmin = <實數>; OptMinFeedrate_mmdmin = <實數>; OptMaxFeedrate_mmdmin = <實數>; OptMaxAcceleration_mmds2 = <實數>; OptExtendedPreDistance_mm = <實數>; OptExtendedPostDistance_mm = <實數>; OptSpindlePowerSafetyFactor = <實數>; OptSpindleTorqueSafetyFactor = <實數>; OptThermalYieldSafetyFactor = <實數>; OptPreferedForce_N = <實數>; OptEnableFeedrate(API):啟用順序式(Sequential)進給率優化。 順序式係指該功能從下指令開始作用。與其相對的設定在刀具端,刀具端也能設定進給率優化,但是在裝刀時才會發揮作用。 OptEnableFeedrate(API)與所有其他啟用進給率優化的指令需同時為真,進給率優化才會啟用。 即與刀具設定端必須同時為真(true),進給率優化才會啟用。 OptEnableFeedrate(API)預設值為真。 OptEnableInterpolation(API):優化程序用重新插補。 重新插捕後NC碼會增加,可以更好地控制加減速。 OptFeedrateAssignmentRatio(API):進給賦值倍率。 當優化程序用重新插補並且進給率變化超過進給賦值倍率時,系統會依據OptMaxAcceleration_mmds2(API)插入附帶進給率指令的NC碼。 進給賦值倍率越小,插補點越密集。進給賦值倍率越大,則偏離優化標的的程度越大。 在改進給賦值倍率的同時也要對應加大安全係數。 進給賦值倍率若是0.01,就是1%,每變更1%進給率就會給個新的插補點。 如果改大,比方說10%,可能會變成該處理論值應該是F100,可是優化後卻是F110,所以要配合安全係數修改。 OptRapidFeed_mmdmin(API):優化程序中的無切削區域進給率。單位mm/min。 沒有切到工件的NC路徑,為無切削區域。優化後該路徑將採用無切削區域進給率。 OptMinFeedrate_mmdmin(API):優化程序中的有切削區域最小進給。單位mm/min。 OptMaxFeedrate_mmdmin(API):優化程序中的有切削區域最大進給。單位mm/min。 有切到工件的NC路徑,為有切削區域。有切削區域的最大最小進給的設定通常依據經驗法則。 OptMaxAcceleration_mmds2(API):優化程序中的加減速限制。優化後NC碼的F值變化在該限制之內。單位 \\(mm/s^2\\)。 OptExtendedPreDistance_mm(API):優化程序中的有切削區域等效計算的前長度。單位mm。 OptExtendedPostDistance_mm(API):優化程序中的有切削區域等效計算的後長度。單位mm。 優化程序中的有切削區域等效計算的長度 OptSpindlePowerSafetyFactor(API):主軸功率安全係數。 於優化後的NC碼,主軸功率將盡可能趨近於目標值。 設為0則忽略此限制。 OptSpindleTorqueSafetyFactor(API):主軸扭力安全係數。 優化後的NC碼,主軸扭力將盡可能趨近於目標值。 設為0則忽略此限制。 OptThermalYieldSafetyFactor(API):刀刃熱降伏安全係數。 刀刃表面溫度超過一定值時,刀刃表面會因溫差產生的壓力造成塑性變形。 優化後的NC碼,刀刃表面度將盡可能趨近於目標值。 設為0則忽略此限制。 Note 目標值算法 目標值 = 100% / 安全係數 OptPreferedForce_N(API):優化程中的目標力。單位N。 在符合所有限制的條件下,優化程序中的加工路徑產生的力會盡可能的趨近目標力。 限制的優先序 在有切削區域中: 進給率的直接限制 優先於 加減速限制(OptMaxAcceleration_mmds2(API)) 優先於 基於物理特性算出的限制。 進給率的直接限制 包含 腳本指令 OptMinFeedrate_mmdmin(API) OptMaxFeedrate_mmdmin(API) 刀具設定 每刃最小進給 每刃最大進給 基於物理特性算出的進給率限制 包含 腳本指令 OptSpindlePowerSafetyFactor(API) OptSpindleTorqueSafetyFactor(API) OptThermalYieldSafetyFactor(API) OptPreferedForce_N(API) 刀具設定 降伏力安全係數 若同級項目中的限制有衝突,則採取其中的最低進給率。 NC碼中的優化腳本指令 於指定NC行不啟用優化 在執行 Preserve(API)() 的NC行中,不啟用優化。 Tip 指令範例 在 N0140 行不啟用優化。 ... N0130 X-1.965 Y17.053 N0140 G03 X-2.66 Y38.193 I-103.796 J7.172 (;@Preserve();) N0150 G01 X-3.068 Y40.776 ... 於指定NC範圍不啟用優化 使用BeginPreserve(API)()的NC行及EndPreserve(API)()的NC行及包含的NC範圍,不啟用優化。 Tip 指令範例 在 N0140、N0150、N0160 行不啟用優化。 ... N0130 X-1.965 Y17.053 N0140 G03 X-2.66 Y38.193 I-103.796 J7.172 (;@BeginPreserve();) N0150 G01 X-3.068 Y40.776 N0160 X-3.555 Y43.338 (;@EndPreserve();) N0170 X-4.125 Y45.875 ... 優化日誌 優化過程提供兩種日誌功能,方便分析與除錯。 優化過程日誌檔 OptEnableFlatProcLog(API):啟用優化過程日誌檔輸出。預設為真。 啟用後,優化過程會為每個NC檔輸出一個 .flatproc.log 檔案,記錄各步階的優化條件經OptExtendedPreDistance_mm(API)及OptExtendedPostDistance_mm(API)展開後獨立優化計算的資訊(不包含步階間的交互關係,如加減速)。 嵌入式日誌註解 OptEnableEmbeddedLog(API):啟用嵌入式日誌註解。預設為真。 啟用後,優化後的NC檔中會在原始NC行後方加上 (src) 後綴,方便對照原始NC碼與優化後的NC碼。 Note 指令格式 OptEnableFlatProcLog = <布林值>; OptEnableEmbeddedLog = <布林值>; 輸出優化NC檔 使用 OptimizeToFiles(API) 方法輸出優化後的NC檔。 Note 指令格式 OptimizeToFiles(<路徑樣板>); <路徑樣板>支援 檔案路徑樣板。 Tip 指令範例 OptEnableFeedrate = true; OptEnableInterpolation = true; OptRapidFeed_mmdmin = 4000; OptMinFeedrate_mmdmin = 100; OptMaxFeedrate_mmdmin = 4000; OptMaxAcceleration_mmds2 = 10; OptExtendedPreDistance_mm = 3; OptExtendedPostDistance_mm = 2; OptSpindlePowerSafetyFactor = 1.5; OptSpindleTorqueSafetyFactor = 1.5; OptThermalYieldSafetyFactor = 0; OptPreferedForce_N = double.PositiveInfinity; PlayNcFile(\"NC/file1.nc\"); OptRapidFeed_mmdmin = 8000; PlayNcFile(\"NC/file2.nc\"); OptimizeToFiles(\"Cache/Opt-[NcName]\"); 組態設定可以穿插在NC仿真間,將會作用在組態設定後的NC仿真。 以上範例為例,優化後的NC程式file1.nc的無切削區域快速進給為4000,file2.nc則為8000。 Tip NC碼中的優化指令範例 ... N0110 X-3.064 Y6.378 (;@OptMaxAcceleration_mmds2=10;) N0120 X-2.411 Y11.712 N0130 X-1.965 Y17.053 N0140 G03 X-2.66 Y38.193 I-103.796 J7.172 (;@Preserve();) N0150 G01 X-3.068 Y40.776 (;@OptMaxAcceleration_mmds2=100; OptMaxFeedrate_mmdmin=12000;) N0160 X-3.555 Y43.338 N0170 X-4.125 Y45.875 ... N0110至N0150前,優化區加速度設為10 \\(mm/s^2\\); N0140單行不做優化; N0150及以後,優化區加速度設為100 \\(mm/s^2\\); N0150及以後,優化區切削區域最大進給設為12000 \\(mm/min\\);" }, "brief/user-guide/zh-Hant/script/Physics/index.html": { "href": "brief/user-guide/zh-Hant/script/Physics/index.html", diff --git a/App/wwwroot/HiAPI-docsite/xrefmap.yml b/App/wwwroot/HiAPI-docsite/xrefmap.yml index 82724db..e815644 100644 --- a/App/wwwroot/HiAPI-docsite/xrefmap.yml +++ b/App/wwwroot/HiAPI-docsite/xrefmap.yml @@ -80117,6 +80117,19 @@ references: isSpec: "True" fullName: Hi.MachiningProcs.RuntimeApi.OptEnableDepthCompensation nameWithType: RuntimeApi.OptEnableDepthCompensation +- uid: Hi.MachiningProcs.RuntimeApi.OptEnableEmbeddedLog + name: OptEnableEmbeddedLog + href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_OptEnableEmbeddedLog + commentId: P:Hi.MachiningProcs.RuntimeApi.OptEnableEmbeddedLog + fullName: Hi.MachiningProcs.RuntimeApi.OptEnableEmbeddedLog + nameWithType: RuntimeApi.OptEnableEmbeddedLog +- uid: Hi.MachiningProcs.RuntimeApi.OptEnableEmbeddedLog* + name: OptEnableEmbeddedLog + href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_OptEnableEmbeddedLog_ + commentId: Overload:Hi.MachiningProcs.RuntimeApi.OptEnableEmbeddedLog + isSpec: "True" + fullName: Hi.MachiningProcs.RuntimeApi.OptEnableEmbeddedLog + nameWithType: RuntimeApi.OptEnableEmbeddedLog - uid: Hi.MachiningProcs.RuntimeApi.OptEnableFeedrate name: OptEnableFeedrate href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_OptEnableFeedrate @@ -80130,19 +80143,19 @@ references: isSpec: "True" fullName: Hi.MachiningProcs.RuntimeApi.OptEnableFeedrate nameWithType: RuntimeApi.OptEnableFeedrate -- uid: Hi.MachiningProcs.RuntimeApi.OptEnableFirstSituProcLog - name: OptEnableFirstSituProcLog - href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_OptEnableFirstSituProcLog - commentId: P:Hi.MachiningProcs.RuntimeApi.OptEnableFirstSituProcLog - fullName: Hi.MachiningProcs.RuntimeApi.OptEnableFirstSituProcLog - nameWithType: RuntimeApi.OptEnableFirstSituProcLog -- uid: Hi.MachiningProcs.RuntimeApi.OptEnableFirstSituProcLog* - name: OptEnableFirstSituProcLog - href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_OptEnableFirstSituProcLog_ - commentId: Overload:Hi.MachiningProcs.RuntimeApi.OptEnableFirstSituProcLog +- uid: Hi.MachiningProcs.RuntimeApi.OptEnableFlatProcLog + name: OptEnableFlatProcLog + href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_OptEnableFlatProcLog + commentId: P:Hi.MachiningProcs.RuntimeApi.OptEnableFlatProcLog + fullName: Hi.MachiningProcs.RuntimeApi.OptEnableFlatProcLog + nameWithType: RuntimeApi.OptEnableFlatProcLog +- uid: Hi.MachiningProcs.RuntimeApi.OptEnableFlatProcLog* + name: OptEnableFlatProcLog + href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_OptEnableFlatProcLog_ + commentId: Overload:Hi.MachiningProcs.RuntimeApi.OptEnableFlatProcLog isSpec: "True" - fullName: Hi.MachiningProcs.RuntimeApi.OptEnableFirstSituProcLog - nameWithType: RuntimeApi.OptEnableFirstSituProcLog + fullName: Hi.MachiningProcs.RuntimeApi.OptEnableFlatProcLog + nameWithType: RuntimeApi.OptEnableFlatProcLog - uid: Hi.MachiningProcs.RuntimeApi.OptEnableForwardCompensation name: OptEnableForwardCompensation href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_OptEnableForwardCompensation @@ -80169,19 +80182,6 @@ references: isSpec: "True" fullName: Hi.MachiningProcs.RuntimeApi.OptEnableInterpolation nameWithType: RuntimeApi.OptEnableInterpolation -- uid: Hi.MachiningProcs.RuntimeApi.OptEnableNcEmbeddedLog - name: OptEnableNcEmbeddedLog - href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_OptEnableNcEmbeddedLog - commentId: P:Hi.MachiningProcs.RuntimeApi.OptEnableNcEmbeddedLog - fullName: Hi.MachiningProcs.RuntimeApi.OptEnableNcEmbeddedLog - nameWithType: RuntimeApi.OptEnableNcEmbeddedLog -- uid: Hi.MachiningProcs.RuntimeApi.OptEnableNcEmbeddedLog* - name: OptEnableNcEmbeddedLog - href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_OptEnableNcEmbeddedLog_ - commentId: Overload:Hi.MachiningProcs.RuntimeApi.OptEnableNcEmbeddedLog - isSpec: "True" - fullName: Hi.MachiningProcs.RuntimeApi.OptEnableNcEmbeddedLog - nameWithType: RuntimeApi.OptEnableNcEmbeddedLog - uid: Hi.MachiningProcs.RuntimeApi.OptEnableSideCompensation name: OptEnableSideCompensation href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_OptEnableSideCompensation @@ -113442,32 +113442,32 @@ references: isSpec: "True" fullName: Hi.NcOpt.NcOptProc.CoreNum nameWithType: NcOptProc.CoreNum -- uid: Hi.NcOpt.NcOptProc.EnableFirstSituProcLog - name: EnableFirstSituProcLog - href: api/Hi.NcOpt.NcOptProc.html#Hi_NcOpt_NcOptProc_EnableFirstSituProcLog - commentId: P:Hi.NcOpt.NcOptProc.EnableFirstSituProcLog - fullName: Hi.NcOpt.NcOptProc.EnableFirstSituProcLog - nameWithType: NcOptProc.EnableFirstSituProcLog -- uid: Hi.NcOpt.NcOptProc.EnableFirstSituProcLog* - name: EnableFirstSituProcLog - href: api/Hi.NcOpt.NcOptProc.html#Hi_NcOpt_NcOptProc_EnableFirstSituProcLog_ - commentId: Overload:Hi.NcOpt.NcOptProc.EnableFirstSituProcLog +- uid: Hi.NcOpt.NcOptProc.EnableEmbeddedLog + name: EnableEmbeddedLog + href: api/Hi.NcOpt.NcOptProc.html#Hi_NcOpt_NcOptProc_EnableEmbeddedLog + commentId: P:Hi.NcOpt.NcOptProc.EnableEmbeddedLog + fullName: Hi.NcOpt.NcOptProc.EnableEmbeddedLog + nameWithType: NcOptProc.EnableEmbeddedLog +- uid: Hi.NcOpt.NcOptProc.EnableEmbeddedLog* + name: EnableEmbeddedLog + href: api/Hi.NcOpt.NcOptProc.html#Hi_NcOpt_NcOptProc_EnableEmbeddedLog_ + commentId: Overload:Hi.NcOpt.NcOptProc.EnableEmbeddedLog isSpec: "True" - fullName: Hi.NcOpt.NcOptProc.EnableFirstSituProcLog - nameWithType: NcOptProc.EnableFirstSituProcLog -- uid: Hi.NcOpt.NcOptProc.EnableNcEmbeddedLog - name: EnableNcEmbeddedLog - href: api/Hi.NcOpt.NcOptProc.html#Hi_NcOpt_NcOptProc_EnableNcEmbeddedLog - commentId: P:Hi.NcOpt.NcOptProc.EnableNcEmbeddedLog - fullName: Hi.NcOpt.NcOptProc.EnableNcEmbeddedLog - nameWithType: NcOptProc.EnableNcEmbeddedLog -- uid: Hi.NcOpt.NcOptProc.EnableNcEmbeddedLog* - name: EnableNcEmbeddedLog - href: api/Hi.NcOpt.NcOptProc.html#Hi_NcOpt_NcOptProc_EnableNcEmbeddedLog_ - commentId: Overload:Hi.NcOpt.NcOptProc.EnableNcEmbeddedLog + fullName: Hi.NcOpt.NcOptProc.EnableEmbeddedLog + nameWithType: NcOptProc.EnableEmbeddedLog +- uid: Hi.NcOpt.NcOptProc.EnableFlatProcLog + name: EnableFlatProcLog + href: api/Hi.NcOpt.NcOptProc.html#Hi_NcOpt_NcOptProc_EnableFlatProcLog + commentId: P:Hi.NcOpt.NcOptProc.EnableFlatProcLog + fullName: Hi.NcOpt.NcOptProc.EnableFlatProcLog + nameWithType: NcOptProc.EnableFlatProcLog +- uid: Hi.NcOpt.NcOptProc.EnableFlatProcLog* + name: EnableFlatProcLog + href: api/Hi.NcOpt.NcOptProc.html#Hi_NcOpt_NcOptProc_EnableFlatProcLog_ + commentId: Overload:Hi.NcOpt.NcOptProc.EnableFlatProcLog isSpec: "True" - fullName: Hi.NcOpt.NcOptProc.EnableNcEmbeddedLog - nameWithType: NcOptProc.EnableNcEmbeddedLog + fullName: Hi.NcOpt.NcOptProc.EnableFlatProcLog + nameWithType: NcOptProc.EnableFlatProcLog - uid: Hi.NcOpt.NcOptProc.MakeXmlSource(System.String,System.String,System.Boolean) name: MakeXmlSource(string, string, bool) href: api/Hi.NcOpt.NcOptProc.html#Hi_NcOpt_NcOptProc_MakeXmlSource_System_String_System_String_System_Boolean_ diff --git a/App/zh-Hans/HiMech.resources.dll b/App/zh-Hans/HiMech.resources.dll index 80da79702392e677d0950d433e6c5c7fd48a45b7..553ed73cad13b87d63d40d2911499cfb9686af23 100644 GIT binary patch delta 230 zcmW-Zu}%Xq5JbnhgoG~iG)Q!ZF4?p1yl(RWCm~82d}l}D2WS(CCPgHWQqUo#ry*|n zgdjeHikcD@G@31D-p*>VT0E}%4{y7}>t>dzCVgaQz3~C3gYUhcJzux)qnDfe{n4#r zE~bD{nCOBE%emvANqcK!-PW=7WK1`AU0qrmBC$0@m3Kj>-SF%DxPd|jph-^`pFPEC zIa#VJMh*u?fCh;@tSF*JD~@u#>Ytss@Y#)9p!q JmsI(qegVQVHpTz| delta 230 zcmW-XJ#NB45QX335JZ7QP7oobGcw~i-k+8>a-=9V#jd@ETp%r!5u%7hL0TlbRIs$1 zfjiJp(Jk-4Ps2_1vYS6|_tChsyL}g0 zB?LSP46-Cml#0tzD{H*2^GsXHw0D&@&g5xTTaum(Nhh7NVcq(DXcrKO02E=>KR1L5 z)4^1{Da0swG!!fhJf|8tGNuJx>ETduH%!AWY5Qg9Jl7OOcSKFowoO|o;&R%Po*1*-bd)yxo`+$w0g^(gxTBQkruucAj zg?~UB>vX{;I`T3f5A)1?JRiS24i2N~>-PC3qb9v)#Yvua_k}+`P1hf*H}f-_E%w8m z=TZTNaCKc)rRPZqtb6NKh}QJlbsZa9v*R}EP^nn8o=vTsN}r=mcG`fD0cg_l?16~W z<@p`mGA0NThDHwy4%tBhB~&W% JZ%UN^(jP<+H!}bL delta 231 zcmW;Du}T9$5C-6XJR?L6+|_m=U0^+LcV{iNVfOO4zkI!Y|9rkIsLh+A+AF8MySjKfS`O9t=Kfqw*1w}K z&#DFt;Z&b;@5JmrDtPq5V166uDD`pq3XP4GcrKP1YYq!)i2ug$!DH26;2dZcIH5&&BuGYaWQ)pMs}a^cFsxr-#OPf9#C5^Z2s+34bjm z63_zuG*Jmr>`Lv7(}twBS(!SUIvUK(P)n65s)(PeD3$TgcSUfYLm&W<`;TU~Cdltw zD={I&a44afhNGDT$=4#|KIP8-kuboF?U0>>Vyk#rasHbM1@9HiZrRR4LIUX@qZi>t GbQL!%qBLXx delta 231 zcmW-Xv1$TA7=&j%4~dFg5R3G7hv)9O|GDjHXOYGyxV_u$d;lRKrW2APU}0sIGL>xJ zBaag7(uDXE24+5HW;foA-}dd%YIZumE+SEeujsCoq|fogWn=C?m+Rj4<^B8c6aN~@ zB%lSRvrJ_LrMYgrQ`SkPjCH=LtA9Xt`3g_iU}EHxJ_0f Ih~!UP0nZ#YOaK4? diff --git a/App/zh-Hant/HiMech.resources.dll b/App/zh-Hant/HiMech.resources.dll index 6f0b08e2f4db90835f550fe5de593f1d2ba34433..964035be6ab94e85d376a08e4e03e762058fde8b 100644 GIT binary patch delta 230 zcmZq3Xvmn*!LldjVG6@*xgiLYhw()P%oE~~7_RzFVY?+J}7J3E@ z3?_^W`o?;Odgd0|mKG_-hQ^8J=BZ{$W~oVuh9)M-X_m=mM&{-zsfHHjCWeNliIyqG zn-{XbRpInwU}RusU|{guJYDBG6QjlEdi{FFU<(Fq21^DDh7<;4216iDWH1N9R0cDK zBp^-&l8HcZ6Cg}xNCT=&28tSi)uaGr4S_n%fpUgGXbMzm2{LDLprI+N1%n=g!DK=0 KvdxS}{}}0w>tD*Gfc>1WjB}P*9+xAWBC`nJo9< z4r!1gC09r$)@by-H{Ud)X7u@f^0J=)EI;ldQG~zfvU5IdUf*_$-u-X2kxvh|#p-M< zv`PrL5$I=0nkW^QrB>E>UFVs$lxgoOZJf!|sF(wJq*879s9x8`!^LvG>{qAHdUbjJ{uzhI z&9}fc0aoGYxYl*xSxRhr7bsG^jx3jZbi$LKZ=l8Z-MQSQ=qzMQFqM