From 6f24a437ca573a754b922cfbecdfece6d2862168 Mon Sep 17 00:00:00 2001 From: bakedpotatolord Date: Tue, 16 Sep 2025 16:44:11 -0600 Subject: [PATCH 001/151] fix formatting check --- .github/workflows/prettier-check.yml | 2 +- conf/prettier.config.js | 8 ++++---- docs/kiri-moto/CAM/machines.md | 1 - 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/prettier-check.yml b/.github/workflows/prettier-check.yml index 90dfe288..0625c749 100644 --- a/.github/workflows/prettier-check.yml +++ b/.github/workflows/prettier-check.yml @@ -2,7 +2,7 @@ name: 'Docs Fomatting Check' on: push: paths: - - './docs/**' + - 'docs/**' workflow_dispatch: jobs: diff --git a/conf/prettier.config.js b/conf/prettier.config.js index 5a5bf0eb..0ec558d1 100644 --- a/conf/prettier.config.js +++ b/conf/prettier.config.js @@ -8,12 +8,12 @@ const config = { useTabs: false, bracketSpacing: true, objectWrap: "preserve", - tabWidth: 4, - semi: false, - singleQuote: true, + tabWidth: 2, + semi: true, + singleQuote: false, bracketSameLine: true, arrowParens: "always", - endOfLine: "crlf" + endOfLine: "lf" } module.exports = config \ No newline at end of file diff --git a/docs/kiri-moto/CAM/machines.md b/docs/kiri-moto/CAM/machines.md index 3b49ea05..21676e2d 100644 --- a/docs/kiri-moto/CAM/machines.md +++ b/docs/kiri-moto/CAM/machines.md @@ -39,7 +39,6 @@ Customize how your G-code is formatted for your controller or post-processor: - **Enable Laser** — Enables [Laser](./ops#laser-operations) operations (typically uses `M3/M5`; adjusts movement strategy) - **File Extension** — Optional override for exported file type (e.g., `.nc`, `.ngc`, `.cnc`, `.cam`, `.gcode`, `.txt`) - --- ## G-code Macros From 07dfa3215eec0902baad22616b76875ef3b13216 Mon Sep 17 00:00:00 2001 From: bakedpotatolord Date: Mon, 22 Sep 2025 09:47:35 -0600 Subject: [PATCH 002/151] start on interface docs --- docs/kiri-moto/CAM/interface.mdx | 32 ++++++++++++++++++ docs/kiri-moto/interface.md | 8 +++-- docs/sidebars.js | 1 + docs/src/components/carousel.js | 24 ++++++++----- docs/src/custom.css | 12 +++++++ docs/static/img/CAM/interface/1.png | Bin 0 -> 10757 bytes docs/static/img/CAM/interface/2.png | Bin 0 -> 8049 bytes docs/static/img/CAM/interface/3.png | Bin 0 -> 18648 bytes .../static/img/CAM/interface/originSelect.png | Bin 0 -> 225874 bytes docs/static/img/interface/main.png | Bin 0 -> 155786 bytes 10 files changed, 66 insertions(+), 11 deletions(-) create mode 100644 docs/kiri-moto/CAM/interface.mdx create mode 100644 docs/static/img/CAM/interface/1.png create mode 100644 docs/static/img/CAM/interface/2.png create mode 100644 docs/static/img/CAM/interface/3.png create mode 100644 docs/static/img/CAM/interface/originSelect.png create mode 100644 docs/static/img/interface/main.png diff --git a/docs/kiri-moto/CAM/interface.mdx b/docs/kiri-moto/CAM/interface.mdx new file mode 100644 index 00000000..f5b13011 --- /dev/null +++ b/docs/kiri-moto/CAM/interface.mdx @@ -0,0 +1,32 @@ +--- +description: Overview of cam mode +--- + +import { ImageCarousel } from "@site/docs/src/components/carousel.js"; + +# Interface + +The CAM interface is in most regards the same as the [general interface](/kiri-moto/interface). It is highly reccommended to familiarize yourself with the general interface before using the CAM interface. + +With that in mind, Here are the key differences: + +- Operation list + + The Operation list defines the order in which Operations are + done on the model. Selecting the Plus button will open a popup + menu for selecting an Operation to add. The Operations are + draggable, enabling easy re-ordering. An operation can be + disabled by ctrl+clicking it. disabled operations will be + skipped in the slice/preview/export process. Finally, + The thin blue bar in the Operation list is also draggable. + moving the bar automitically disables all operations below it. + This allows you to slice, preview and export up to a specific + point in the timeline + + + +- Origin selection + + Origin selection, a feature released in v4.3 enables automatically setting an origin to points on interest on the model, including corners and arc centers. + + ![](/img/CAM/interface/originSelect.png) diff --git a/docs/kiri-moto/interface.md b/docs/kiri-moto/interface.md index f02b8de3..7dbf0917 100644 --- a/docs/kiri-moto/interface.md +++ b/docs/kiri-moto/interface.md @@ -6,17 +6,19 @@ description: A tour of Kiri:Moto's web-based interface Kiri:Moto's interface is designed for maximum access to the workspace and to present only the options that are necessary and relevant to the current action. +For the CAM interface, click [here](/kiri-moto/cam) + +The top menu bar contains buttons to move through the Arrange->Slice->Preview->Export workflow. + The left menus control workspace, work mode, and objects while. The right menus control the behavior and settings for slicing, path routing, and path to code exports. [OBJ](https://www.cs.cmu.edu/~mbz/personal/graphics/obj.html), [STL](), and [3MF](https://docs.fileformat.com/3d/3mf/) files import natively. [SVG](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics), [JPG](https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format), and [PNG](https://en.wikipedia.org/wiki/Portable_Network_Graphics) are auto-extruded into a 3D parts. -![A minimalist approach](/img/kiri-moto.png) +![A minimalist approach](/img/interface/main.png) -In CNC mode, there is an additional storyboard menu at the bottom where you can plan and re-order milling operations. -![](/img/kiri-moto-cnc.png) The Setup menu offers access to Device selection and customization. diff --git a/docs/sidebars.js b/docs/sidebars.js index 429f8036..89c74d27 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -35,6 +35,7 @@ const sidebars = { id: "kiri-moto/CAM/index", }, items: [ + "kiri-moto/CAM/interface", "kiri-moto/CAM/processOpts", "kiri-moto/CAM/machines", "kiri-moto/CAM/tools", diff --git a/docs/src/components/carousel.js b/docs/src/components/carousel.js index 49634d04..7932f1ee 100644 --- a/docs/src/components/carousel.js +++ b/docs/src/components/carousel.js @@ -58,6 +58,11 @@ const imageDescripts = { ["/1.png", "tabs added to part"], ["/2.png", "sliced part with tabs"], ], + camInterface:[ + ["/1.png", "empty Ops list"], + ["/2.png", "sample Ops list"], + ["/3.png", "Ops list with history bar"], + ] }; /** @@ -68,13 +73,16 @@ const imageDescripts = { */ export function ImageCarousel({ base, images }) { return ( - - {imageDescripts[images].map(([image, caption], index) => ( -
- -

{caption}

-
- ))} -
+
+ + + {imageDescripts[images].map(([image, caption], index) => ( +
+ +

{caption}

+
+ ))} +
+
); } diff --git a/docs/src/custom.css b/docs/src/custom.css index e51d1d87..a93cfa83 100644 --- a/docs/src/custom.css +++ b/docs/src/custom.css @@ -5,3 +5,15 @@ .navbar .navbar__items { height: 4.5rem; } + +.carouselWrapper{ + width:100%; + + display:flex; + justify-content: center; +} + +.carouselWrapper .carousel-root{ + width:fit-content; + max-width: 20rem; +} \ No newline at end of file diff --git a/docs/static/img/CAM/interface/1.png b/docs/static/img/CAM/interface/1.png new file mode 100644 index 0000000000000000000000000000000000000000..2a75a2365b36a0c7dcbed73390e91862a76d97b0 GIT binary patch literal 10757 zcmaia1yq$^v-bg{q$Q``&f$ zx4!j#YpKVxpV>3BXHWcQo)e}ZCyDWt_$dSe!H{|{t^|R=nSsA5C`e$1<0%Ux_<(a# zk`#rMjganuFHg)wK8QddmCM1!oWp~7C$bD9iP#qCCT{L<=*Z?wMtWA*hXFrG*53) zrV&Y1eYrGYc;V$U?AVDAf+Q?fbL~W&)aU&xoAk%G2qO+72K77IBSXz!qmi*T{_;5S zwOK9w738W*N=hQY#)4%buQEi87c2Cl;P9BPILT~&Kd}$rW`A2IE!{9 z&(xEqjO03_nBgT8!EzTwfA&sF?%K55zP8d#`S*sHuohA3En-9zk@aWNzTTdzn!Y3~ zgix9O4w%qJ?~3@lg3I`0kd9lz@;Fs^I)yz}uP*tLXN zs$=BZL_G$+q~9Ht?Y9KpO84+{A_8{EO&agEr6nEyO1gy}umcJBp21k!5tYCbH~;ka z_;_qmQt61g4a;I`%E&e4 zT!Mr5BJ5^2b-5Skho{5Z>XQC5GwRKEr-N}O3BCemL1WVsIoTEUi^`f}RR1XWev z^-k@TUIA0PrrgHbaex^W~b$Z5nu+V=p+*Y*g|z*2slPebMMP zs=_=;2jEsWM}w=DlIBPV*@zH>x?$H>ROK6%G*nZT9CdcIOi>`8_0G$yg z)A+HC@;Fql+k}Zk2(2;2NQiS-dBLm8(+2S4ekVC6<&9;0$&`c@HZU;o+OP|yaMIFYzp|HH%))}< z6K|%mhKCV1U#a81_giu_!5FnTbE~i}8t8%5nn8R~_@esQuMEVRixj(uU#Un@(0t6S zjR#-g=Co9K#KWYzWG@9yt$o;~x&eIXZW{KItfX1+e_2)n>cY=x(B3kR;h%Ncmpbg zn1m~m{;K>p#29i}g3PF^E1e-mw-*P7`g@;vhcfxpJZ-M8ONDOl?mWNe<*iHi#>hj(&vlEUX=8@&V}8o^}Y+c1sk>2-PW z1{Oj!^~Vzx^edv_*s>cl_m;1MQA*=n;_a!rX@{8l&en>KdsP(FnNSa=N>2pi zgrJ?7A0?1CX2Yy(gLL?nj*TYiandz`bTjw4mmlC2ECAw z-d*Tpxz9Zsq{8j5X?AJv-3Z^2e$SWZeFFm>@$!NU77-~+Zy6cU9v&W6ZJ0ki@KNd^ zcZ%LbJSKFYmoM-#a<(#G(NkwCZfTmme;;GQg#D^R*JaR_MH)A-Wmziz6PF*`C6_UccYm zw5WrK!|#+zEVAKdEt<5n5JY}fj!WA>#)YU2un^tk6|VyDHb3+ZSy|bjP;7nBB6b9! zz(q@}s}_-ZXWLdC?*ji*ez!N0HX zJ)~`>(umD*{e8a;h4+;~Aox-gwtqUtS{1+NLKZ(LZ1^ z>oyaqm1$Q>bEhA^3$0yFCgd`saES7`_*PxbDsh(kuXU4nnb7jG5tu zB01z0sn44ff8V8Uya0&&mSQ zo+IWPL%W|)io6mpITXm9ker;`OzLVc`r7{mKT5(D&7=O_<Lg<1OLY9A3i8L zfV{AuP(xPtW{hApujoCYuGM^x$Vm;d6?R5^_(U8P3Z|u%a{_4_oO*d)B>)QBR=bT0 z$Fn-Iv9T{182sw$xcmd=AJKcGDOhXScK7y9b_%k>ZKD4C(T7ztkBfb{q5W_!?>kq| zlWsyo*MfqAOVLMgpSu3Y`N&ULa*B$IR@g4`_WuP{ znANXVnwOiKXlZF_HKoE~>{D)*uxmW8_Z>G7mNUL%e{*Kh&rU~2XGmf+`c+_ixwUmR zD~Jc(jAU<{uz*HD2Wr)x(qe=WystTSQE9_mWi(x_@`cTHXOUJLn~R-A*m9e=_>fD$ zWc4Me-f367LE-POi1?U{A-a0(!`9~$u_>qyrH?z=dB3DDG_&Lozs|Y+twHMk(;nlP zAT~bLff9_g;ft?D9D)|XR${}&>!x?E`UDx7=FJ;CfHe+oh9TIvxB(#)-b6o5hdZh* z#vu@yBqq2ye=`_3@w$1ly0%scP8%2;oYrFF>B%qnaAj1YStDH)kw*6+mHX-7rhG?2 zSnk|GWGtvN4$Z~O@yUAL8mG-`Yika7R}Kz#7%R>`z`C$%Rig0|mI6=ONLDadd3c_K z+8ix#kup=KTV;&ueLbirP0k85+nXvC1EN5=icDlwOS{)d>7;pLQ!DOSBUTg!zMu;fu8uS>+W#BO z;;tfz{BH>R|3kZu9{1++AT)bYN6h4$ zbAnS_l7pswcVTg1Y~u_eZ%Wu|7BMuaof&b4$zM=;_SkeJA9Fg>{)3wQWkD z>zGa}TU);sO|pS%HMnX@c7Amz$~>`nnQU=WaDKjNp;ybwMozQ-XVt?)TZP*j{j)I< z$by2&>j6RoZrp~dfnBTPlSbS_S@@>y#d)$cU+=;aD18=y`VCc$!Fxbfh-ZrRd*@`X zFV2yt2Ee|IR<;&w^8@uuGof|M-XswO%ml6M92^@F&eHYK@h{{D3i<+@n$l+@E5J#2 z$8w|PdTMR7Dm|~W?EmcTlOx(tU}3@FM6P6XlDs0<>x{5M8R8Ep@4nn2R%M8!N_JizHg(T$tZ%|Y9=3+L zuz9a^NqHQ*_V2artd~8URbXn@`uZU#DF4NM#mHD`Icd2+bAqMa;*Rffu@m6iChYll zSkau35rE*@tS@y~4-@hw6JAQr$NYb_xuk9h0WyJO^l{iHfO)+V; z#hte~s{hz=E99hsxlX=W9DxZif*X*`ANO_`Drh4 z`5dSrf8+;~a=%|m%F1Ut-i3oNog*VmJEhKy;*IvBhM??Q<9gK)=+f`E*ueA4n8zMjCZ-;d zhlfv}R|S!9r77mOgbP15tt$g<)d;eoXf5sypqmM~>B*X1t%%*+Bmhm4!|5FzgxPd- zX9&Yzyes}-o=Cn{UL3Q$un+};O+Y}OV{`a(uds~1S}Busl2M#=fMt(AgR*+eEkxyaH2j#XJgT#2y!?g@o_a8=7O zyNbB6s#m9vYw9b$y=``teIDF~il~uN2Vi5L`}yVLwdn5E8Q`VwL`D6L8=@vACjOMx zEs2VG(Rin0M^kun2O-M8FxYA;3XO=^`!%UJbe?hUj*!%H_O$Hd9t5(atE--T%H9zy zJt|Lyoph;oYjChj2yT=??|Y^{O|OEk0}h87e{gt2GWMrY%4=$ZPA4mD#po2>{9XHY zu0^P3zr4_7TW2ROqgu-ssrc2(PdiEgc|Kro%;N}p5(&;`hTnS#bu=aLN{^0=&FS8W_xw_uUianY2Zf?EJT5T?c1-n?sb%x9SmE>Mt!JJ%h`R-PP^PX-{ z`O)Il`nZ5P^iCcYBMEqqp+C1qs90DqU#ST3Ki>U4zPLzQW_EORTA7y*vYD^#sLPUW z{*p*%Y_hdFTaeZD&_Y4wuxsq;Oi4IOJKWjXni-hNK`u5X5K!TBBstT1Nh2N=>AR#4 zokQ~FJFG_tQ+{Ezw7*Ps^PtyXP#O-hJK3{2;`v&e#Iy7u8M#!|2`ChbLgrcSiZe4} z&Z@T3b+V>jZO$e~Duf9_{+e1Kf1D&61b*}Cv#G~xX4$WTxO)=C%EbNEGCnQAiH2c$EQQ``F&Tg9&r|`YbWgHhIse!)e~fl zjse22gvD$4qpSqUR_5kyBRV^-PHV+i#xAcqIzyxm3vzPcCV5+ohjc+4ej0p}hW#bt z0b|K^&8Gt7hCobcotB5;g3seUEc5(3lQy>G{F+GpxpmyNPYYA@@xIr@mEMBa_)(@V<lD>3E%3jOwt zIxr|G$4>7r+{OT`o;HnH)@;w$u?93CfP_)Sllu!L_t#8mE~*Ybm`_>DaX%szZ$^O} z+?TJ;>4F7YlP*j{KtR|~Hum?h!fv1hD1B~D^UdFF+-`dpmyqaaECBM_?CBi^06bx4 zW>zTrxII~%?3uRzy{HHkDFDva))ru1000`&z(%B>@aMaeXs;5V*3{HMJU~V)XlO`n zFHvZ5KYyn60VoCLWuvKm-FSqAM#q2J+RC7#Wm8&^?d*Tp2{iK;brm!1*Ry5MiPh5 z6z0s-n+9>K#Uw}4^*fCz=&?3L>Z(O93-Q7sy3NL&9A4Q^f9^M`Ck8`4=c4T)hP#v5 zSyz)z({)mzXrHZ2@x%+I2j}FD)+!IB?H|`%TSgDMUvHM+POkcwz zA&RJZAwrIgerfRE>&cuPHOE7IzeEegFtG+YjGX+vqWuX$hAxDB<0w!7tUGWePozxY zmfU<;m+o)piQcXX^1pH8B~Rlg>wLEmf}nTU$#-;we{|clCP{l~Bi})yLV+a@5q|XZ zd#~H94ONeZ`406B7J63&&Sm@fAX+OqSB{R>x9Tf+=v*sdrJ~r0xab>iCf*3#-lqzx zj&L}!t-)Dy6b36aC((oBx|&T= zC217Tg*1OZQw;Al6Abg{3|`CWAKy@}3j`@l$K7)?p4*jDd7q4HVtTFI&Q4r>;vNN! z0u@s4*zjyi?$H+*mQ=vALWhJF*w)xH1GA+}^LNBlAg0JlSnk-~55-TLc-}&8%`?64 z=E*5!;erx%X{J9V@0zA@6UQK$J z3Cw0fLNj5KJ<&)I+L071N36Dzf;b$UYb*X(?8q0-zQuAIVSelFrE>QqeP%Y)j*I%s z)pqFsxC>Xq)f>ITYt*BOXl==pxrRS@KaAHWq}zc>-Ox>^XLj656mZR`QvKrt{z z*wEckrJDyYe@pZF_ypqrW!Bw6*5c70(uZ{8?$H+_zK|Hz*PSw-SXQkRJ=AGt4=s5* zZOI4SeyJg+XNScv$N<0Av%vVA&|4712cZ#5h7?bI78s!W10VWd19VsqLO4E))DGrU zFgW?)!-vx%^1aDoLNHlEj(kV+yl&ly`&-mhgfA>d6-IS5l$4-9UXS|x+1ra)YVjB> z@YwH(Bq=N^YR`08VnB+`qv*s*)nd)BuS3F-0xT!L<;*s@*j?S+tnN-0ucrL_`6ej5 zD3Gy<3FDKo{l%ub?_LIxz4qd#=Z2X7jPt>r{*TH3xw^Nv;OC7e0u^h3N zOiXxo>GAOa)4CoXJTd=n4vVR(5{zW!{;p$~_IP6V;DvwMPw7`B$>b@ANL(6FmP=xzn8Z*(;IV`ctf!xs5a1`jUewf!IA z!jG>YzF;nKaWEeOS_DYj#$d9+Ya-gZ%(phg)YQ~nTa^4|(b3WCeb7S@C@JqJl-b!?0O(vF z?=LqZK1Cd7fVUC|0qvCDI*p%Dad2=>yFFleWzqD=_badSkC`5r8TB4c2`d-JltEEU zX4ON2ST93cbhL7t^5rtaGx=P?ZN4yT)mG2zyE4Kg(*VivwKns?0JQZNl(0}y!J!c_ z3A?)1&qR2yMRKi2I5SXF!;j~G=-i+EnWI#6JgE2Z%-h@BQ2jD+$4RN^<4m;$?vlq* ziu%-XXALP)a?jmYyHJ0w)fLy*6M?ahFFq^~$_THy<)2H7e^>Zd{r%7TD&JbG z`Net%F+oo)+l6{R-4^$-Wvw+f(pb-ylunQoAi}NQ_X^6&MwQ2SWr@?}dO{9EzoS<| zhe`>ZKxD;6?3mkOs9z1tkm;Dr#eoOBnym1;Ug>=j&IBXIJ|I7YzHk3uF%%o&;Ns#k z8|ffDJu&gb<#I~h6m--?6ciNO=k7?=9d9@}+x1_!_4XqFDf=W|Rs>D~@Wr33R>%6L zrcSVISp)0(8_53$_*sUYS}38^a)xSuQ7x8OhI&08dJ6EqBh|ZH9PkG;nWqd&M4&@Q zGnm}xo^hgg#K~{j+?y`Xt*s>(28~*GpIp62OrHdB9yrLySNNKmn%PQ4jr=xrvr!d{ znd#{y00O~g2W{2U+FDwJ`l{K$R3dpwIe>va05hB^7inNj3gk`}tFcy20#xGYxFFWa zR=Fj+z8p|Q=9`K;@}2fOfLRNO$b|&UH{&w#Tm~I(rE^E zv1u>t(4td?X%QnCqM}1DyWU|)SWhTeYyT95hN^%Mc#6ZhC{X8^q`n6DH(LX!PQ5T1 z(o~yHcC`N>v{18XTAmJ=8kZR=F#1PE6-Yd!R!8 zfVw<9KaL|HCnQr&wWc)AMSH;v!_)eRCaqf8Dp?Hq?@sFUPS}g1{5{+yn~bT_CRm? zY~6{qOqTqyHh&P!?im11uBI1w{2U(AO5Gq5Bj8+7kR!hqP^K*ZJI70$`$#q-IBme9~UPRFRM-kZ9m zb{H^VQ@n&hmXopdolMo~qz-VK)ZjLotj=ci3}h$nkIzm!%6mTuTbv+n7Z=-CHlvRY zr$@nHE%Y1%?<@Dy09|BATw63b#S7KWQ%Lf-ik?VYHsuowBpGrn$l=8Svd|;k@#*P1 z;XeYW>7QlR%fC4s3)2Hs3J-Z}Cm&Lfob1U~3}Rzd_^f!qCxQWOcx zFY6IPRIbwrP%*rX2OrF1gOUDv{aGH?fj|IFwx_h{!7|014E_Q6sFL794H?Y0w@(~k zX5aRh);X0Zi2}a(q(p@i4Thcs)*!Xkni0TSuEuxf;ADZxQ?_wTb?&pG{OsOuAe0V0 z+E+#QCvzk|?PX;1*d&~I&nXIw&Vz@K&k|};0;jqLwz4|ULJoVqa1>W{VX)3%I?ATr z{;;~Nu;f$23tKzFO5pU?v(*GXA8wy`Tl!qT=?BT;)q@Xs zYu!&e3VKW05*^NXFW}as8Jr%&i}(V9n2(p&BC5j#u+*bpl9maoa-W|?jV7eRYEpIz z%zGUbl1kE!wujN6b7BCUUB`q1D8*9g%4)x^dZk@_ zaJ5Tn%%h_t76UAqEtkRV=j#i3f`kMk{Rhl3lEoqvmy|s5B}eAq!31}V@Y}M6V23l_ z5u_wi^kUO#SmXG*BuxharcQU5-0tjGUjtvOVutcdGAz=Iq8dwxG zw5Ef<=AS-chgUxEg88ihn6Pb{_W0L;A|L`ru5aM($EJ&;J=2hLuz8+YWf4rM`;aYX zHlgTzU=ElaNK4lO?}xfwwpcpUeRKqwflD)Fj9Jy1%H+y=B<5Hf4G%NF9M?_!rhO=I=8gZ}3O`$Ai3Ir|+$vYhUB&O>!etJB(;p%M4vtu5GKmiHYPr!Ls_@9Z zI5&8&l?vMY38)|u$3FQ_&K+4z-a36U1_!{fx!cM%rqA>}6k|@s@5=x6rmFQub z%{0O^sYQzQ2UKv7j*gCXWrA@BitoR@UAWHlw-wl36EuB_fZDw84P^ zqM^5|D=U66G1#zCLrID3zYOZz;xP=UzVL~q2ZY$+ z&iXNrM3bEVT+%#P63X5Z-dy0W^FxArv&XJIi&=-Q=yWqaHG7sZ;J+-mE{vN8N z1b()}z`$^@NlFGp_RLs8ovEm(Qn($yUFH2Uhd_uU-?1N}Z=rz6)hwvDyDZ>3Fe)wc z4`ByEDK;JCurc8#0gI6pmbJ}5(E9p1w?woCNJPd6C22(k-~eyiex$mCshY7#lmcf{ zQ&VnbrJ|s$>gM5+!xI;NF>!(w6qTO<`U4!i(P=D^mzM|Hhf@O_pip?=kJ;W{Nx{6A z#F0qg?d#4|&aY1%#3Uq&nwsIKr;aC-#7?fZ7}SifUcK`FWiD=P{M~cFb|_N|!N!i( z#KZ*P*-YK}DBI|!CO&|2-VjI5$}5BU3Q&d);3UvKprD`#>+5HG&e`%lHB&xA^5W#guU%hX zm{C?)85cNX{Yi>|88suf!)oBF`*8jzUNTE7tA-VMk%h&@m9;g58chtqn5n#~>X~M# zs-lN^%$k8#Kwn3~oE3d9NDft$beC!Ul`xu66%LK3zz(A7obhxZ!7zz)x8uap!5#@0 zrp^AQlmQo`;Y*W2kU)yonY#TJb!$w2QZ@;s#KsRLY5l}N&AN6R77>XkfSo>(05&yX zvn@`sX%&d9U(ALeQ^JT50r4D+*cV77=}avQ0i?`;)E%fW3lA2M!2)b(>kcSpflh_# zFbbekV;ER?1{Pr4OJNIsV1XDcpaG`jfT<2p=>nw1U6B2%2!lBkUjWJ$z>61n#y(JN z0#0?lxrkqB{JY z7BB!Gupg-X>%-BlBuy%eXk`5q_BN@)l3v1qJ6^^Jumo8x+4K!D90a_FIc1=3G6d`6 zmNkGp7LZqgS3N)@SnJ@Z0oMA#S{%^qH(N$OU8N;`o)LHaAkZwzcSV*ZM1_L~KA58c zPjz_xB_LD^#3jXH0MVo!tibs*Pvjq>fC5B1NpQ8vlo?_HV8c_e;R)Da4mO;*YAQGa zjO*wQ%!LC)6af*EK*NHbAE~5ZB9uW;Z0cwX2s8mfEFfTj5dh>{&;e8P za)1akphF1IAp__@3e&+95U9gA00Jr)0ni}?=#T+)Acg6G2ne_V0X`6s14O6+9YTN( z+CT?Vm=1J+fCvyI0s<-+0ni}?ybpx~PSt=O%)tQD1Jn&A{v1n8bo2yy93JNXv06Pa zAPu7gze!|BQ!O@`lw|?l6W$FZJnu}!ivW+Kp=$jPh~W~z8M0+kjBLZtw3e# zbFjm3){v8e6#t-I1qWC!B$Xv0kkV-U3zM7R7|-#ko-+hO)QbMc=y1q2hd}OP%gab= zc_22Y{gm#wCkyRV<&izY*4Iikb}*a!%tl*pIDk>(avU^ms7-DsUmL60{4rT?6^Vd% z2_&Z5Rf~n$|19GiBAvA3HYtnR()W(KEhcGq!yrp__-5d+GWR%pzTv|^a+HhqcChzn z;WuE-9AZxU>@?LTLYB5T+`jLx4u?mZT%{F8Bhx$Sq?XC*D^*yqUUPn(0rcZnLyDV@v8x}QTJ z9qT1w+h)9j$BOIBt58Fljn?EB4H45`N9p}Oq&{1TCogyS4NqN+2bxPi?cv{gbtH7d zBi${>X)NF7(HXY>yM{E|Y%-)4Zgvja?&ux4-7=#KnkZ#>*ybHV?2C)I9I!sgUc~Qd zS7}Qc*^;@Ca?AYB9U{)xuGacrEjC``$NMFIk8Zw`4BT;{~% z`f?myPr!YnBJTS5D+cNCvR*0zU9mZ9k4B#y6>s_5u@6K|`&Aum$=OUln zQ7e_7YJ3lF_#*C36N2!fJH7c9;*Wl0#;VDLP5sWotZ7EGe-!qOO27Vqu(>!+&mcrU z2Th*hJ*=>Me7gfAQGP-R~MEH3gZkuZgDbUHkO)a86g6f_F%;em zs(3RzwQ>Kd-|ISjbG9s0&Tk26x^Y~kW`04Wl&AnnA{zQ=B%f?z0&)Tb2gLU%!f0{B z0lUpgS#%FS!W3a+??yq|47a${83L0x@TVcn=X%F%;&a%jt_EW#9M+aLhUgHlKXXSh z{{k=a-OKQ4y6`sGnean2e?8~p@yjwF_o40=8gI{QF>s)beV(O`7*OAfn!#K)+V;Et zE%!<}WEipD>b%WJb#f#5>WUaStsA-5D2IzWV31tr%!3+V<+2&BLYMbuOMGZ28()Og z4DNP*a=Mu85=VG?pE~&ZOUwC&bNQXUXu8l!L#@F}|0HaOJ6}kb)ECz}PQB!r+a|td z{*v=9qU3mEpU~q1UTHR0b@v7&ztWHLM&l(FVZZ*);ilEZ;+;f9%a)i|`vIx(%#coy?uH{g0)<+It+|B$Kj`;Azz`gM zd(tS#%gg&lg26u_fqJUWU9~0=#$|3{!6+m|$@UTN$&)AD)A%8C`~Bh_zkjnRC@QKO z8Wv6|BL$gaaHZ0q-jDCz!pGn3WRC7UDhM_(Sx)fR(14LivD_x9YJYkzA4po28-8`=Yw_`3 z)g+w&6@hw4YuZ!=x2LCPI(8uAnp<6L9gNWD@^B2#VOQ;)Loy!BA}Tt%_0N8LJ!{=# zV_cZUTdB05D)T};++UNEX+x`RMR|GhQ)9!!K_5Qc#tLkX?=XMyqIGc>0tsklP*6~4 z`}2M)qxa*=3+=EY%0hYE&!0d493923nv8n+AY6h064%3u-E3LbynWod=@t=<7t&ho zIFD&7cqczUe{R>~>+5~XXGJ?2V=XVod~;-EgeS3&ikezdMTKZ>ZEen} zrj26&To4ctfT^Xc%S=TOKIRrBn{h(hvM4JjXVyS0MOFgB7t;IVM|y3oekB`Eg3`|U zrD;k|vga*LO-;wT=>@H)k5-aYayA~h2-E57>$hEI+HrWXK_F!lkrE6HKbEp4W0>V2 z5Q8fFC(6o%U=(KAQkWsFB>N{|&Pq#p^`61_SwwP4E7lm_)6Zv#(i5Y~$_6GU@q1P6 zJ|`y5JJsxL)orI|XJex$f~PU~t9}ufRjJ;o#=JZ{odSXEq(P(aL8!xNwIcIR34Rwl=x_bnQ*B z-jDsHrEg5x3$3lMTljGBvk2#sZo=oPo^pWLVk96Y=1ip2($k|JgEPf0dOi7pB~!o% zhr_orybuV4A%*&O+c*=sA(vS18i^WFw@(bjH zK^Y|_<^J+F$0XU`#ECnu4EcbV^wI@QX|iyDgINz|vXU z*zk&o6inUhosBx%Tk2VN>sUEDa&vKWD_-|X{msgsx>%E+M?1^u#HLnfQR~Q6Sy~$7 z9+{n)>2s)%#xm5@1UWlDkF5*)lv$`m-Tx_48~@F4XJ_ciw&O#Bf{}dBW9z5)v?{Br zBJ9-i%sI;O`eTxkqCT>#c3acq{zwsrdx2Pyl~&Q9CyZL_h2oLtC> z=U~7aL!Lp-}PX4db?gO3KRZ-lbNIQsNej z#PgBN+G=W0=LkYr_RCB=&fA!)BWVCq$|eZPChiwJq9qF96%=IiGDK0(Gyz!04wRfw zqA4wYfyn{Tq9+c11LC$Z&ZzRr$;nAgLnD19iME3I@p3=3TL2@g#2m*pT}Kq_y&?VK z`6WuYm7JWMiiW1;aDB|;vaYU<@=GOdrkr0|iWrd){K~4P-$cLLHL#t#Z7vr05 zWMpIjTl6j<%DECXe%HQKQL?2TDK2UE4@hvyc_)AUYE#T^k(x5*xlhB^ZP*oTIU)st zu&aFW2XhCPr-_m^taBrbZ(J=Y$IMb2Ht;Y68KJ~R3J^nBSlIFGz^aSCL#M5D6~MAyLWMyK}5vh2*ZGfs;xN?$D~4^ z+Ml3QXM~ePdti39#8%;vn3$M41l2e12&+@aj!#T9a8e9%@_sSw5(=a5-c9;6#F!r2 z26BrREAur7{bXz0XDzXO)QZ&~vP*+Ft!O~Q65T)y##;YJip-=BF&5*&NLlLHj1LvM z$v`qZh#ujT-+xyBA#{W@4D6ng|C6?A`nY*W$9nHmr@;}cOf7iKJ-;Z`^3iVy2MvKv zP=w>Yp+FvplBy{v9O0%YIev28=lWa4@MjLJ^DeD1-$)GG3Pwb)uC9jB5CrE=ZtA!x zf8G;-32-=kCGV#oUOG`Z<(KsF5!;%oVg6*nw7GNYz2jN`%HeT}>M7YP`BUh7H;$e% z?h4lPx)TB7W(`)uSWho6Gli;K7KpbUaY$rm_!Yg<7pE!d(Xobqb!*+@m5e?RZBw-ssm@J-g|aQCBB2&sUmB2%@!O zEmrELq7@-;&QMrh9*3U1c3OHLSewOr^PU^yyr4SGwS|$ICaN*~1f`MOZo{pv+9=o7 zdA{XlsT5IGgG}@Wx~4wG%^cy(N}SxJD3A|sH8HGq#1Ie=7_W6L*x23u#mS}bt^-q^0O1>bys@=4>n~znIyx<`yZ~vcUDqiLx#Oy{0RXiX8C0ohYricn z<_2(5T3(=%BmLybO~aBlp7rqpgyaHPZ#P8HDHEQ!9Py}jLIrx^!8 z{NVTLI(HHPYmXnlvzx3;tE|+iG;$SY`GRrp-aRUag4Z2E+onL`$Dtqw7uQA#c<*8r z1WP=;0k!x*ct^0wRuKIo%54OS1)z{_CX}x|nDCCN{bmMDfJ5UY1-M%c)WdpkZJXh5 zbwZ4oPdr#iik5kv;E)iD$=5-3k``1D`<=sP;LpM7@>=-Bd&j zQ`6IbpKlFmZ+y*`ibQUZJWiNn@nMTkPX7Mp2F?yxG7k5yjmawFsHmuJ%XHT1dN19H z@=Ooz6<9x(e29cRZu{1B-J=z&CnuLzK>-ZjL|@4)a39j8Bgu(ENPpeNiyY1mF}AlS z3L(Dxz0|DZ=g*)1Nh0nGJM*movRV%g%E#Gkr7n5%_+R|!Jp1y&XRMgegwffa! za3OJ4ibuAf20B7Lak1|Do-h*82?sSaJpOjNoEV>!M4qGSId?n-`>LcKM%Wot+P-NwZI0#CUBSwxI?*jGjP%=lgVi0(Aq7_V|j zIT7s_JEraK>DetXy1eD=>})EM758t7>*0onhkt#wD7(A;{ktp(ZHm*=Q!pZIKuNzk z|54$kjZayINcj3Tj0c}~+imFl2Pr$k3}Qj zQ;TQ!DGm+~yM7P==sSvk3%addX*piw%&w9ooV6jFX+15)Krrb1=SNyeiE5#6LZr|6 zQP?`hD%%$;m>8>Yy?lA2@pCEkz{0}t(8X*MxgWj+!mg>vxx zErw{`nL`tBzEuZby$ge8)qovbAEZ8VxtLXK|D z)N{@x=qm_dEiEmLSK8f?m6hdr{J0nhO&xG90xX=Fxw%Y*?3=X^3rvdDRHgSWF+@y7 zYDq*SR(St1U9MWT`1p7U253`nF9ArM9B?-U;7jil6Y)QG1%Vk}+IlO!bNVO6%*p9? zR#ukc%-UyI>=P!EASuQZ@5f{m6bmtO^f8;dgw1VjSU|&otRhV$V~~VBr4%$ABY3cq22ALEKHMd)}-1$OG|ma@+u0C8qh#O zcIz!POs36_chGlmu8k`{y%9`dd1i8QG7K`Y?D!Bly)ZfiESSm7g;}ByW^2L34503X z`T0pJp4~@XB40OLovjB|dB8f3QTe*Be`W^p zS1*TN29<@4Shs`vv@>oNZ2~S($>Gl~DfiRVB;~n&4D{5`nVEOl*=(RcUqX6a-|Q%wPSwvbCkNrJ-$T7-=(B+-zFfWM8%T zBS|D5Lvv_w5EHO$l@1=GStY99o12^C6*iQ>4S+_;wyP4Q_#EkBOSS_4I3|XKiU2!a ziEXLa)ud`t-N=ZzSGD74dp3GtKphGLp+41T+ zGStjC04(_ZQT3jC1c*l-Vc~pRggTfC7!1|~v^$ec96~RB_yYxF)5RYwz?E`~iehgv zQV}eacF==$hyD2SC=jfZ1Rqs2oe0~Jot0J0^bs!@87nI*AWjCQ1%gt>2KxFxCnq^8 z@oz#l-Rd%hvNFu2%Qm36DKh|WD8Snm3@6R`Os=mk!7U%BAtNszEL?LIA6#riK8+B6D~570}4tzqF){`4Z+1J!AW1thjE6 zH394A;_AtvGv-tKK7^rRZ{og&KB;~C!l7rW)ll|{eIK`R3=vSjl&cJbw?+j1;SB!> zgqd_3OzubyK>T?u|1aW?*28UUu`)l)JXzK6qs=X#1LSRh5O@GD4<6x+b7ccM5-dvl z#zvtNB?Qe|{t?Czt^Xfk?D&wDw@O%-GfoB>TAqiff&O)adcu!LSf%t5_>#G(3n(x- ztVoE{_A<-$BM*v)@JH}p0$Q49J~1=H{aDV;O;9CSG;CvIBfjogint%*$g}%T_Av5a z-^v;{s2M(do79@Z_)2pXP~n+-Vgqj`fa?XSRq0;u+#CZiMa)LoeH-t-=ueKVPe#dN zSWV`?ZCcz-EhC5fL+MB6u4(TUTeGBVGfn7{Cm=i+QLB z0Pwsg$J5JiBg+c@Z;B5jw)qfYl1d1mwt%=+8*;ybyo-!XEiAmh+yEC$gLkd&0{KoyU((-N84+A1AYn{z$zS7sw6 zzz#$uJTQIUkEJ1-K@tZy!iH>&mr8$Gz;*4^3HU{FcmD^vW=Uj!87Gm!Lt^_o>3Da%$kG5)gh=VHFs25+zmw1wJf;1TbYR|JAY~A zNRw8*pn`Niy$XY}*>|Xy-RC)tLWRN1U>$&jG}N?~D5))LymJ_VI+7?QC_QS>mi}vC z0TqvO5w;*z{|?;V5$IG3-E2J~bTG!ryCAqp%cJqXpAk;q`?dzwRri`Ci^o|V(W}c& zaq$c5WSX%XD(~kW`jiv&K}NsjUwd3!uXFPek>Sf|V6VctiwRzyv$?kf-#A zw6wIG*w^p@4<3{cbg0!t!0Z4g0q$Q$VWEpU`lL;qrTav;iYm5;h1d`!py*l|Ii&AA9E%GWskMK5h8xU z_z%Y!h5k<%mSSn)D@G>#FF4$7LzWxdWX{*Teh4i7L4B6nZ~FfPcA0;uD3}Q*`QQ~p z0USzu7vNBO#d!YfPR$P`N% G2mBW}Ty{VJ literal 0 HcmV?d00001 diff --git a/docs/static/img/CAM/interface/3.png b/docs/static/img/CAM/interface/3.png new file mode 100644 index 0000000000000000000000000000000000000000..4b29a3344b73f6c1995baf5da7b86316f959c646 GIT binary patch literal 18648 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

Bidppg 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 VJ3_KdJu=@iD34+bUbMj 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 literal 0 HcmV?d00001 From e27cde3c495073574d4b7b112e9ad677c7c538b9 Mon Sep 17 00:00:00 2001 From: bakedpotatolord Date: Mon, 22 Sep 2025 14:54:03 -0600 Subject: [PATCH 003/151] adds docs redirects --- conf/docusaurus.config.js | 23 ++++++++++++++++++++++- package.json | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/conf/docusaurus.config.js b/conf/docusaurus.config.js index 316a7ece..8ff533cf 100644 --- a/conf/docusaurus.config.js +++ b/conf/docusaurus.config.js @@ -7,7 +7,28 @@ module.exports = { favicon: 'img/gs-logo.png', staticDirectories: ['./docs/static/'], // ... - plugins: [require.resolve('docusaurus-lunr-search')], + plugins: [ + require.resolve('docusaurus-lunr-search'), + ['@docusaurus/plugin-client-redirects', + { + redirects: [ + // /docs/oldDoc -> /docs/newDoc + { + to: '/kiri-moto', + from: '/projects/kiri-moto', + }, + // Redirect from multiple old paths to the new path + { + to: '/gridbot', + from: '/projects/gridbot', + }, + { + to: '/mesh-tool', + from: '/projects/mesh-tool', + }, + ], + }], + ], presets: [ [ '@docusaurus/preset-classic', diff --git a/package.json b/package.json index 5e9bdcc9..be292bd0 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "node": ">=22.0.0" }, "dependencies": { + "@docusaurus/plugin-client-redirects": "^3.8.1", "@fortawesome/fontawesome-free": "^6.1.1", "@gridspace/app-server": "^0.0.18", "@gridspace/basic-ftp": "^5.0.5", From 409ecc0c4cd7149b55b3698b22e90e093b15a77b Mon Sep 17 00:00:00 2001 From: bakedpotatolord Date: Mon, 22 Sep 2025 21:08:22 -0600 Subject: [PATCH 004/151] uppercase descriptions, and add interface opts --- docs/src/components/carousel.js | 77 ++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/docs/src/components/carousel.js b/docs/src/components/carousel.js index 7932f1ee..510dff6e 100644 --- a/docs/src/components/carousel.js +++ b/docs/src/components/carousel.js @@ -4,65 +4,70 @@ import "react-responsive-carousel/lib/styles/carousel.min.css"; const imageDescripts = { outline: [ - ["/1.png", "outline of a complex part"], - ["/2.png", "outline of a non-flat part with inside holes"], - ["/3.png", "outside-only outline"], - ["/4.png", "inside-only outline"], + ["/1.png", "Outline of a complex part"], + ["/2.png", "Outline of a non-flat part with inside holes"], + ["/3.png", "Outside-only outline"], + ["/4.png", "Inside-only outline"], ], level: [ - ["/1.png", "level of a large part"], - ["/2.png", `level of a square part's stock`], - ["/3.png", `level of a part with a non-uniform top surface`], + ["/1.png", "Level of a large part"], + ["/2.png", `Level of a square part's stock`], + ["/3.png", `Level of a part with a non-uniform top surface`], ], rough: [ - ["/1.png", "rough cut of two parts"], - ["/2.png", "side-view of a rough cut"], - ["/3.png", "rough cut of a part with a complex top surface"], - ["/4.gif", "animate of complex rough cut"], + ["/1.png", "Rough cut of two parts"], + ["/2.png", "Side-view of a rough cut"], + ["/3.png", "Rough cut of a part with a complex top surface"], + ["/4.gif", "Animate of complex rough cut"], ], contour: [ - ["/1.png", "close-up of a precise contour"], - ["/2.png", "contour of multiple parts at once"], - ["/3.png", "low precision contour"], + ["/1.png", "Close-up of a precise contour"], + ["/2.png", "Contour of multiple parts at once"], + ["/3.png", "Low precision contour"], ], register: [ ["/1.png", "2-drill register"], ["/2.png", "3-drill register"], - ["/3.png", "jigsaw register"], + ["/3.png", "Jigsaw register"], ], drill: [ - ["/1.png", "drills for a robot baseplate"], - ["/2.png", "drills for a pegboard"], - ["/3.png", "selecting only matching-size holes"], + ["/1.png", "Drills for a robot baseplate"], + ["/2.png", "Drills for a pegboard"], + ["/3.png", "Selecting only matching-size holes"], ], trace: [ - ["/1.png", "toolpath tracing a design into a part"], - ["/2.png", "selecting loops to trace"], - ["/3.png", "tracing edges for deburring"], - ["/4.png", "trace to clear a pocket"], - ["/5.png", "arbitrary offset outline"], + ["/1.png", "Toolpath tracing a design into a part"], + ["/2.png", "Selecting loops to trace"], + ["/3.png", "Tracing edges for deburring"], + ["/4.png", "Trace to clear a pocket"], + ["/5.png", "Arbitrary offset outline"], ], pocket: [ - ["/1.png", "selecting areas to pocket"], - ["/2.png", "toolpath for pocket"], - ["/3.gif", "pocket animation"], - ["/4.png", "toolpath for v-bit carve"], - ["/5.png", "many-pocketed part"], + ["/1.png", "Selecting areas to pocket"], + ["/2.png", "Toolpath for pocket"], + ["/3.gif", "Pocket animation"], + ["/4.png", "Toolpath for v-bit carve"], + ["/5.png", "Many-pocketed part"], ], - gcode: [["/1.png", "the gcode editor popup"]], + gcode: [["/1.png", "The gcode editor popup"]], laserOn: [], laserOff: [], index: [], lathe: [], tabs: [ - ["/1.png", "tabs added to part"], - ["/2.png", "sliced part with tabs"], + ["/1.png", "Tabs added to part"], + ["/2.png", "Sliced part with tabs"], ], camInterface:[ - ["/1.png", "empty Ops list"], - ["/2.png", "sample Ops list"], + ["/1.png", "Empty Ops list"], + ["/2.png", "Sample Ops list"], ["/3.png", "Ops list with history bar"], - ] + ], + prefs: [ + ["/prefs-CAM.png", "Preferences in CAM mode"], + ["/prefs-FDM.png", "Preferences in FDM mode"], + ["/prefs-LASER.png", "Preferences in laser mode"], + ], }; /** @@ -71,9 +76,9 @@ const imageDescripts = { * @param {keyof typeof imageDescripts} images - The key to an array of images and descriptions. * @returns {ReactElement} - A carousel of the given images. */ -export function ImageCarousel({ base, images }) { +export function ImageCarousel({ base, images, sml }) { return ( -

+
{imageDescripts[images].map(([image, caption], index) => ( From 8a35b49143dc374ef3153d82341522457a024334 Mon Sep 17 00:00:00 2001 From: bakedpotatolord Date: Mon, 22 Sep 2025 21:09:46 -0600 Subject: [PATCH 005/151] add interface docs for main KM --- docs/kiri-moto/interface.md | 31 ------------------------ docs/kiri-moto/interface.mdx | 47 ++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 31 deletions(-) delete mode 100644 docs/kiri-moto/interface.md create mode 100644 docs/kiri-moto/interface.mdx diff --git a/docs/kiri-moto/interface.md b/docs/kiri-moto/interface.md deleted file mode 100644 index 7dbf0917..00000000 --- a/docs/kiri-moto/interface.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -description: A tour of Kiri:Moto's web-based interface ---- - -# Interface - -Kiri:Moto's interface is designed for maximum access to the workspace and to present only the options that are necessary and relevant to the current action. - -For the CAM interface, click [here](/kiri-moto/cam) - -The top menu bar contains buttons to move through the Arrange->Slice->Preview->Export workflow. - -The left menus control workspace, work mode, and objects while. - -The right menus control the behavior and settings for slicing, path routing, and path to code exports. - -[OBJ](https://www.cs.cmu.edu/~mbz/personal/graphics/obj.html), [STL](), and [3MF](https://docs.fileformat.com/3d/3mf/) files import natively. [SVG](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics), [JPG](https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format), and [PNG](https://en.wikipedia.org/wiki/Portable_Network_Graphics) are auto-extruded into a 3D parts. - -![A minimalist approach](/img/interface/main.png) - - - -The Setup menu offers access to Device selection and customization. - -![Device Dialog](/img/device-dialog.png) - -Application preferences are mode-dependent. For example, CNC preferences show animation controls. - -![CNC Mode Preferences](/img/preferences-cam.png) - -![FDM Mode Preferences](/img/preferences-fdm.png) diff --git a/docs/kiri-moto/interface.mdx b/docs/kiri-moto/interface.mdx new file mode 100644 index 00000000..c17bbe57 --- /dev/null +++ b/docs/kiri-moto/interface.mdx @@ -0,0 +1,47 @@ +--- +description: A tour of Kiri:Moto's web-based interface +--- + +import { ImageCarousel } from "@site/docs/src/components/carousel.js"; + +# Interface + +Kiri:Moto's interface is designed for maximum access to the workspace and to present only the options that are necessary and relevant to the current action. + +[OBJ](https://www.cs.cmu.edu/~mbz/personal/graphics/obj.html), [STL](), and [3MF](https://docs.fileformat.com/3d/3mf/) files import natively. [SVG](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics), [JPG](https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format), and [PNG](https://en.wikipedia.org/wiki/Portable_Network_Graphics) are auto-extruded into a 3D parts. + +For the CAM interface, click [here](/kiri-moto/cam) + +![A minimalist approach](/img/interface/main.png) + +## Top menu + +On the left are buttons to move through the Arrange->Slice->Preview->Export workflow . These buttons are also available as [keyboard shortcuts](/kiri-moto/controls). Selecting an option here will automatically move through the prior steps. + +In the center-top, clicking the [logo](/kiri-moto) opens a dialog with options for version selection, helpful links, and a display of your current version of kiri:moto. +if you are unsure which version to select, you can view the [release notes](https://github.com/GridSpace/grid-apps/releases/) on github. + +On the right are options for importing/exporting the workspace, manipulating the view, changing the mode, and setting preferences. You can learn about K:M filetypes [here](kiri-moto/faq#what-are-the-kmz-and-km-file-formats-short-for). Changing the mode changes the options available in the left menu, and enables/disables mode-specific options, such as the `CAM Operation` menu, and the `CAM Animate` step. Kiri:Moto currently supports CAM, FDM, SLA, and LASER modes. Some other modes are available as extentions of the laser workflow, but do not have first class support. The [prefrences menu](#prefrences) will be discussed later in this section. + +## Left menu + +The left menu contains options for the current mode. These vary wildly, and although there is ample documentation on the [CAM Process Options](/kiri-moto/cam/processOpts), the same does not yet exist for the other modes. Many of the options will be self-explanitory for those familiar with the mode of manufacturing they are using, and more detail can be found by hovering over the option. Otherwise, a quick google can typically explain what the option does. + +## Right menu + +The right menu contains controls for the objects in the workspace. Hovering over the arrow on the left of the object will display options for deleting, renaming, disabling, and replacing the object. if an object is disabled, it will be displayed, but will be ignored in slicing and exporting. + + + +## Machines Dialog + +![Device Dialog](/img/interface/CAMDevice.png) + +The device dialog can be accessed through the settings dropdown. Once opened, it contains options for configuring a device, or finding a pre-defined one. The device dropdown will only show devices for the current mode. The options inputs will be greyed out and not editable for a stock device. The `customize` button must be selected first, and then the device can be configured. you can find more information about how K:M handles CAM devices [here](/kiri-moto/cam/devices). + + +## Preferences +Application preferences are accessed through the settings dropdown. They are mode-dependent, but share many common options. For example, CNC preferences show animation controls. + + + From a63d234f0b72e1c25175860fa219fa9ca9fc9ed6 Mon Sep 17 00:00:00 2001 From: bakedpotatolord Date: Mon, 22 Sep 2025 21:10:02 -0600 Subject: [PATCH 006/151] fix scaling issue --- docs/kiri-moto/CAM/interface.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/kiri-moto/CAM/interface.mdx b/docs/kiri-moto/CAM/interface.mdx index f5b13011..fd63e3fe 100644 --- a/docs/kiri-moto/CAM/interface.mdx +++ b/docs/kiri-moto/CAM/interface.mdx @@ -23,7 +23,7 @@ With that in mind, Here are the key differences: This allows you to slice, preview and export up to a specific point in the timeline - + - Origin selection From e9afcd8ae98110cad0d8749e70016f895cca45cf Mon Sep 17 00:00:00 2001 From: bakedpotatolord Date: Mon, 22 Sep 2025 21:10:10 -0600 Subject: [PATCH 007/151] add interface images --- docs/static/img/device-dialog.png | Bin 237521 -> 0 bytes docs/static/img/interface/CAMDevice.png | Bin 0 -> 40889 bytes docs/static/img/interface/main.png | Bin 155786 -> 520364 bytes docs/static/img/interface/prefs-CAM.png | Bin 0 -> 30122 bytes docs/static/img/interface/prefs-FDM.png | Bin 0 -> 29749 bytes docs/static/img/interface/prefs-LASER.png | Bin 0 -> 26009 bytes docs/static/img/preferences-cam.png | Bin 70018 -> 0 bytes docs/static/img/preferences-fdm.png | Bin 71681 -> 0 bytes 8 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/static/img/device-dialog.png create mode 100644 docs/static/img/interface/CAMDevice.png create mode 100644 docs/static/img/interface/prefs-CAM.png create mode 100644 docs/static/img/interface/prefs-FDM.png create mode 100644 docs/static/img/interface/prefs-LASER.png delete mode 100644 docs/static/img/preferences-cam.png delete mode 100644 docs/static/img/preferences-fdm.png diff --git a/docs/static/img/device-dialog.png b/docs/static/img/device-dialog.png deleted file mode 100644 index d282d2c0d99cc047972691085e943bc502036f4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237521 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Úvr{IE&RqMm-p)CCV=w*8A0l zUlC28vuurKd+N~CgcGz5uT9ps+}30IOUes@=5ASGc0og8J$~vmVPCC$S{c>_mMruf zS2$O(Zx1y~*$L0}I&J(tPLUJUiU5b6zNxrJLWqhw^9M8810uptSl(_!x_Mo0y64P% zUk|q9qd(#trrN@`VN^Wl2GCg*~CRihBu6;%GL^l`SC@#(Fw-J+Ryvr>r0PIPfL!OaMJ(+)Q4?7z5g{uF zdTH*kb=%-Qp^f2#efYSEum+tz`7JvK#w%1=T!hTm~IsbbQaIN_V44+nr zurJtoAq`oaaXTbGQ7sr-guI`S9rWS{@KJ-sX2hG2}!vAF(K4(2Ie%p!?G6iEIKpb*b{whnJQ-reDTN z3ibVNGxHo$loMT=c|)*4+8u~-ou~J*|Edq>X`gSk8iP8D*a>uj2zK4pL@k#l@2%%N zz{FbPvN}$i{D9tSsOQ}$t<~&8O+ln9VP(VswFVEQ9=H%_dTF0(#4*TJfm7dCQ>WA> zc{QfJ&Re_wT|8Z^cT{1IlQkI8P6!0GCm3bg3q9GI1luoTaqcaQ%Z~ayH@g<~HIO-3 zb1|7*UWFq0L9$!yX_D>&ime){Ifl6Nmr1xl2htft;VSwnXL+As^qyqdpYPS&B>wKs zhlj%-cR2!1ZmN3S=ZCjh0;B6MY_*lId0dSBR7Dca2tA#90X-Pi*kWgRq1V0|#~;If z3$HtySwWNKd&#Zi6+-|HKhyhC?qJ3TiU#4!7?Zqnb7HQ&d3scDBbr0cAEp!P)9J-l zl<*wZ0vu>1ltxlG1}3w)a_%{ick#Q1yI4E(dpiS+MEYiO4|!F+@Nd3$ z>zFx6+Tl~Ik=D-+;qH`bi>mh_T!QT$5&?*XAtFo_S!VJyl^BO_5cr<=%9Wn+i_GFi zpe@wX%6Fd#z3Rj7ox^y-NkySmzZ&Ml(+>lQ>S;`Xk3wi`K&2z_5x`f>$HXiu{4j={ z-PEh!l3m=R=Tg+`bFMB?s-AElwtyzrDO_3vi~QB-j9}QBJ22MD6^#jnD>E%yj8kAK z=`!kac=WP3<=5325T=;tbR=HkaJ&+0`E6tggagc+Xqo!Ws(b^rL<>;4S}BVO&ij&+ zn&|Z|ZoMl0({qSB<7|(-GE1_TDNxb2c16Ynu$TWJCsGpG8_8~BXZ+*>_2cYPb%gWc zAjOd|zeJ4OeQZ37kpf3X88Rvqo^b4~3GPtrEvO3j*{EZJHEAbmc?a3jb3n3mnAsKWV zQc2)#YJYLHiyuU3ay;Yb_ZMwFPm4YS24ac6Ww;Zz+B_H!=dmB1p@y{(c`lLGZ)rYC zvs)aun5n5a7o7VI>s*ixD^#Ki6Ydi0xru@fS(gIn6J|twj0WBBBFj;FON*DOD9;BV ztkO-Wd1oSaAxn|Yb!f=)cG^W2my6}g-(lc-{VqaA)(!;sKbRk5j}8!;_!k4| z@Ahb0JT2OEF42|lM!_=;d?w?4McL@)+=9tCv@NVHoUNeuA)9d$)0TdR2O&m;o)Y`$ zbxdauj~MAkiAP_K{v5qHb`OXG^|F+Mf@ucjAz#>(%`jU5I=@ZB&Pk@$Nmww^qkG4{QLny}rU^w~A+Si$J(~tC8DGjVIPX;K|BpomP41#&@8O-bvQ( z;0Xi%stnMFFMIWs4FGS?5Z_d)QaGLwQSwPBN$t*7-^gB5CfdS$H{qn4=CQ=$50uuJ$&e zd@t~ut3|3G!nn7&0~*8CmX5B^aBs{mWscEYsr%3-flYl=iem9So-vWnBa%`djt3Kc zF2^6|@P-#DKhDS!)VKpx)1ex``*9v_V=3Qu*<81&TaVldWNpIYoV)9GdafhwEy2Y2 zt!xdZ6}Hfkn}IkPl3uQurC6-5)9K+l(-?RV5z6_ClPu5NY)U2V1vqpHzLpbQJVw%@X)u&h#|3<1gtf)T6nT}@WLk8;l-LXpVu@0MZjp{l zGCqbBuN@G_TC)OR%6^B+OACU%uT^PW zX|C7|#p|6^fkvEb=?pKq0~@d2z4P&jQ<~AM9fW?bvaD{3J7q4=fG?Prf zD9>WBrCY=bl8mIicvmhOv&zn8W-Q1;w+`1%)y~!~-0r_(`}h8&{$VNG9<29@lIKWsHelY|I}?a zRAmh1(lweUNY2dsaj8)G(T3{&4vB@5@bP&bNmpBhrvIE(ya6Tl8BU};Lur+&6;TK# zv#X?JS$KRS3S@{#1#8hFhxMQhpmU^<;Y=f_{aJwBfwZZs5n`nKUj zOL(dM{XAzRy-{)Bf>7J65_$= z#+fgAwLo&v^o8}pXF;)WLoR?uwAtAn7ezsUP84e6@W>Q)6#KE-ur?O}G4K4YKy?e3-`wGSWDeN?+765m8)i zSR_Hq6~Q}=)-hQNo3zX(RMoC>hM{&;T&9JBEww~LDfqIawjx<8-1`i+u{ZRb%S$Fo zJHuIbR`cZU>NGE*YQ_VZ%k?NuK)r{mXy>1+u;0#Gc-~Y}y-LJks6nVTdadTGQqZ_) zApsMJEry&(LOwXs`SivgE1?S&(WX{m=GJ+uvNG31G`DTioh=|!?3(*7sp%H`2DvRe z-tx^s4T@tFxt>l9PLgjK^2B?Jk9w5q$8Ec}1QQ-mnPk6sKr_IKY$Wy{s3x)MT*XAR+Qb*QXe`BYXS#w=Cu*~}jX@56qu zH`@Epw%61Lx174XC504D^=KcTl>hT5upPQu@`82WW$0H=T_BRWtYo(}HsopN1_t9S zd)&iBi+LocF0m4T$agezwCR40z-E(0+x6N?$oQaw&W+S_N${8)8$>4K(W1K6XSzyr zT!@@LLWeOLv0TmYDMXPVpk7C+i0BzP5vc!k)mls2nHR%$@YYi8UJ`4_&Fo;jaXo<` z|DhrYyzMaN8WmR#Y?*cG7e&9!MNW0D`j|YN=}h)rAY_n1iRSpWm!aHKT*d>v+amJx zD(}P@**863+6}@TznMYLV_9@FC>yp?BjivRF27a(7xs*!jrX2R3j;@$`q0k%O$~X2 z9_=%ewU@rnJ~NTeHhu0}dH$WmH#S^r?*7HSJCigK zj~a&F-x!9XqtjGq8IY>Z)byy<8td?5vi~}CHFpX;cS`oQZWUBne^6ZH9O`#>4BH^{%l8du1-TfW4TyIYN9cJ#~5R5+a(#TvL z)44}JD{^uRX&<26rq&SsKeAWu3mx=XOrOHHq>;@6Sk-Tk!V9=~Nvc&^Bhq65t|jP7 z9z2gr%p8ww9#LQQ+W~{YS(0wl9c1}-aE$bh@@2DVDwJV0sDgrG)Sn(-zC&EZ!#oXx zaOtVX08Y1CyiV4#QUk}2Qbb>&NgHi4D-bg+eo^mwc0ldi0Wgbg4w8+T1v~>BH6`*r zckivkR|4Bw~$d;V(=eZ=kOdNq=%&sZ6Ko5-if>WP`+TI_4qbF!}5mhUIVb2 z_EW{faa&jD2it-1COoqQx>$Z#>=ZlPa=y6e%{e?jMqr9ewwa#8Tz^$fj`-Us5IU+i z`So|amvr#v-1IOu{uxF8kiql@arp>|Wjgnq$uwYhBQrYe({*p&Cx{{_8+9kBK7YO^ z+ZgNI1#=wcZIHtzfF0$|JiiY)@0_=-xtp-VnOC_lP<8k$)oID8*H+w}D%?u1gJ-Iv zJ5#X(LO;g}m4Mu|qWMkC47Q>;`4YxGMDz#fk=G9VweMn_V4PVbhYs9A0GK0KRcpot zKJ?VNm)BjfEKVrNH0e~3IcEXH4#BWXmr)FeHRTM)18oyw>p}j?WtsNYIF|wI(&3PG zu?|;_$HXwF{_Iqq`DaW${;CA_7^s7~gIau^k&pX~U+KM^`1{_dO{N8N@oE#MlS~JQ z&0MZ~aAvAF%4KRD@XEz={x+~G_yH;2p+s&@vj2ya4OViunxpvg@W55+>WPzd!3@Lk)YtRtLO!EBd|bJAwN5 zl`>2Tm-$Z`0rFa@JwvIL5VoJ?_#$b4R{dGhH)_58sfCwEnp)hCL1RwL-jS$;V+J$>(_`GSsko(AWHSwPGKZl)}=g?TD)ei|=`2E@1V zqKoHO-%HYN?0=2sCr1`sVFC+`?da(M?m0=~>JHr8PoN0@bK$p9+8y5j>aQ1zN@5SOd! z+m~l2CaJ$44=)j|bym<}T8@yqAm>vfns;ylqd7Q&qPqzzMJfO0%aHJ*vt^v#`DL;2 z?^Qt_y-`$th|G>orPigQ8wa~jQ^lU|6K}(*+3}o7u^nNcHV_7CO^h}4`0q;{A~x_p zw~Q$g@LMG!x$Uej3iK4IGySvzZGE&o?@!Lt<3913coU-+CKtVlV{x9Cg4b>VE=HqX zx_PKt`iXis9A$UjpEFcBNT|u;u}GI&a?}gEEYB85uU&QO;uZTu>a_8H-efQsyyD1lI9|S6jj*sPqc_LSw|?xGfK4&%C+zj3UPAxqh^L$Li*EkN-K&dHk zI7@iz74rvBnFEIXdi?+SFCYJh5oF%AlE@38q4L^a#sB!DttlJy=ITsCf#iisl^_T( zOh>P-ZE_UdM@1}6zIA7Q~qZGL$m{Wy3B{%P5z+&;>xt|{^cOVT!X{6fy25I-zVaKS) zAZF>VFMc?sFyTX}5jk_JEB;TNd<|fN>Ex%#EGP_3VQe5r{`(5>%GX|f3V3hS{qM0S zPvE4tI2@K8(QKMlUD`S)@~JfC(LR08E4ld+6v@i3XqZ)yxheGp;+QpQiyb&XdN42} zHz9OJmP{z61jS#03~dVPa*v@&7o2GAU|UG&dKFz+jr-seAI%MBH>VjzI1tW1KB=>6 z`6x&bCV_KBQ`lq3|BurMJ}K=j3}{HNLNLy&o!Rtoh1`d*jyC~bH8G2FM4qz`OE3#f z;!}UWgT>1isaexO|ET z%bDk^uN*5FRkS^^zQ5OUDPC` z^hdO6$_e7{AQ~ewu(#^WnXgta`zRF+U&C$pVg0;%l<2hJ+VE!(8cLcvO0T`0{m)JAo*r|8Q>|W^< z82N(%`mvfVXqg2%tV%USP}nDVPoJo~VS83>MYG+hYrxrcKxosH^S7UCRSneG_0M&4 zQ#fwDy}z|%wlq}kT}Y|_eYFe4nO#sTLl=5w5CM+BVnf+;``8X8jshj*G7G|0f0^0A z*Cpu=b8>#7@bfKLE%q~CR)r>Alval_fYlJN3ml`N(YXSL!5X1p0rc2Tz@VqKzBVXs z!O1{9hd%ES_Iv8{-YDLpN9WbcBt@LEGPoDG5vwAc9;$CNc2BtJBASWS4M?AH<)$peMrY`EtprsTIhavJi!R-Si!=IBChpSH>DTuxZ>3%wJ^o7)lDpYP6iT zMmA`hBCDDL$fVLQNdA^*jK}c?K~~@9y-1e)! zpxYuuGqb>vvHsPw)jh4Op#?W<3IH)FFI>DO!d#JU`>vi`9lnP_7QMz_n5W6eN$T^e^`F+rXS>Z3Cw;+W&8YU|Dwf#WzL^8Q2#wR0`tnQRH!P0d zq(A~ zAi|K|yOz9ymZaOQzcTYHjBX!jMp@4SLU6Z{{ZepkkE1t%xVJ37eY60G%1heD;s3C> z^h^Dhlmvh(W9%f&eajjVh{0a=tFY#@xCRCkK{X@Wp)#Ia!Kq`tGXc#-gQm7*qEIQ+}U*zx-yTOP!$=d&3WxIF~oEVAVcMHv~~v zoFkRy3NmFu**^5abgXn<^qFY|d6U6`o6yl0gp|I8s$4VFb-S9*Dzmb&4_spZB^$qd z@rGO2K@&GoZPp~6tm%ZgmFmU9b=+@`-Q=l8L+n-rsqLVm(%n)|%q_q%LUX+|%jL|5#wdu#gb z4jnhP9P$F=Y7W!jCPprSOy&ZmUp^G%I=keJ^EAWSVhk-bo>c?3H3vStT;4Rh2r9Oi z2!-pqTmX}{=pw4^iVsr*WoNjj2;v(Z7uuq zLf4+18g|IgbH3Juu9c^buX27WNAGJ(^T&qk#rHoG&1(wjZ#`d{3G!euo!(D>C}uWo z#rvZb#y0Xn+Ps(GvtEbq(rcpAX67ax5cqyuuguO+JCe4`Hj0$eaGW!*A*@`4q>Jm5 zUz>5;FMJl%M$GY(a#I8Y)$N2g2Zy^3IMrC8dttcdN0lQ5O7KBna=a;N?aUr9nT`lOqJgYDEEws(8woVQh-CU7VBJi=&HZ*C?BzuaE+ zD}O}4ol4A^nf#%+?evd4{TfkD;ZF?PucD;t(#cORiM#dD<%RvIxJ7NF|3?7{Grb)| z&;*}mXXK1{#nBQwTB@>bzCqf2jEh&%|+oD^_E*hp$8jU&${xy}^R`6L6861`ao0X=Ey}ZT*HR1lyz_ zaePegxfNhz^1+BdZu44o?kW{EGwLm;1@0}O8N%Lxwd1y{l^a%RP-|uK> ze1LdUqSfJZlMWjPKPj1M%MWj#2W3Z7tj@ix&-5WacpxLqav+h*FVH08#jUGl$+hf;nNXCFl@DXUd)sV8aJOQg2~`Khhp{L01Sm2Uh=9ehF#>3+O4++ExF_P|K))(PP4NB zjTWvb^PtkG36IZVT4~QP^vWYhZtQ?eF+&&_2qu08kYDcosShUdQ6E2%U&!umXD3Fk z-$|}SN7^8K$rZk|Mlgt&-`cAlub;tl8n%MNMj>46Q0!Y+yx;??TrP=jVUtRbq z3HNc0%Oz87ao8OI?{#F&wXl)-_}=qzu(PSZc9cKgtg!?W@IX9Cv;{mW=5BcJb(oH4 zAv`~{E{f8MY}c)&rk50r3_^(b&mk&C0{GD+2q3a#>^wJIL?xFR;Y^`Eutx7CB`<%G zRDe=;4(HG1%e2gN{BSqL=1iug^arWYqvMNuevUI_iVSiJb`0;jFO>`t$A*3l4R^HW3I*4 z^k*}&`C~ilGnH1APAxdhAs7^N%_xs#um#?zq&ez>KFW0D?D#3Ewa!{sjJnKvzbEJQ z-R$kmA=-5sh)MiS`7+#7(aWEGXrXc6lF<1D`jpQXoO;w5PnCnVtX=u)@ck|IpGP28 z#tCCPh9K1XQ7%v}RUP9;d)wY&G^25_<5_s-dYcY*-4t3!#b26XiindWq1(o}G=~rd z1KtEy9Jvb+utgxG#>qV1225UybZe}Mh%{xliUa{pWdOLT)TRrH?(!erGo}d+d5#+K z0EK2Ak_2={^mM~uV3#Z8s`{9&Vqf$WNp_F5ip@I9X}oQ`q)US7tC41aGpcgR^NtG8 z)aL7T*fiv#tm?BykEQM#y$)IWo)h;`Rc|MM5#e8u{1sOm&zK>W6t}g&54}d&BrQAJ zT~D{Yb5>ZMN}umlKj93WkOd7)a;+Z#Dx4b zn)h6*^uVv9s)t59Au+!JuF@T!%_mc2Tq5_TL3XLrx0=74 zuYS1wHYbl4LCzwxTpnG66=(3DQRFzhmofZhf63$M;F0cCourKC%rW-w#yP4V%Nj1I zl&L21CRV{H+bT3zcWgCpMMr<>`L{a+tq$%cl1oKPo$2>JV)L6irEy(2W)l^6C}dp( zBnUaZMO0Y|Gm|9e!JKVo{@7G_g_@Y#P}Ib|NlK@McqC;rU6pp>;=`@m7P8@KAbKA; z_YOgN1EwpL?$WOChTb|Cwy7hT5VTUi%t#ztmuX=P(OahVez=^%eyUrHCCAkmnH&^(3CL-k_3^*g%-mVA3pYhxY;u9%pT1L zCU?8oo)pidRAm)_b20W-Lt^4i+7alHGee`E-<2(UC=!4SA(fR@1H26=&gx8DuSQ{V zANyMHQJ8*H-w6nxp}PUe9A(E!vh zb^TGwb`{GSBYL;gcsv6k-imSUYV6v`x)=H>4Xv`w8@{8A3^E~duY)eVc(D#_v=^J>!}5FBr)%emSea14nd>NrsE3~eCRJhKg@GV0$OI6Q>}>65Q%`Xt8|`M z?ajB^0`V~)OazxSnr&NdbHV|Oubvy@*2XF-QxI=DP#gs)(IC^epSz-b+3mdgoWm!x zyuW;{XC9-FFA}%5sfL&_OI)TXt^kMZ%fWV3KDkRPieba^_Gb2YA$@@po)(rb@I7V% zK{Ifr1|gbS&^ebiQjzzm+*C#qzFBKwP?wpHMxUo=lQou4cVYpp+jb4?pX((EbRT*$ zDme*SE3>|!V8yXb#mXsLoVm6b~}d7hauTfS#N*c_o@X+jrBGY@xJ)FA|uM@+FVA| znO^Pfh{>Pg-fj@`oCw&rzm{>gzkd8>#XlzJ!~C%E^sgT#M)qu)2S3z}%sfZ6WnX^P z1?ejFE8gub_P|sqgSx6A=pr#F%?!#YAo!|6FLe zgir6~_m@?&^xI<1t-?xnQ9KWNSY1CoG9%Iwh!GiSU5M4SDaiY{Z<~AZ`jdD~6~QKf zDH1f4m?QB3YZeT7_i{NnbL=nqeBf6wW+uzm;Lb6S55*W{YaJVFu6Lq_H4Ks3WG0KM z8^={LO`^8k(};hS=j=YA%qqolxGJ7SiVRsduu|u&V+QPFgIS86$~haC%c$F=Ml)ZQ zVSm23n!$?|!{&yOUG}n$S~gyi5+ZNv+YYx^CprK%r0{(6$)oVuL>?`TWp;GK`1g;+ zl@&Hry;!|h&+9p=6V~`dn`QcBtl-*-8MsgB8f3a^ZBICo-C->&2wHQ0^z|jpO&n?Q ztV|dlo~Hb5O2%;wE``4TEOp2{(Kcf_a=R+vqhf{qt6b+b=$XP3IY7&9V#3<%<4 zxQG@V;Y#FT68)glcx6j{GIj5?;rRR6@qOM`5m_mSkpb(9)YrwDzO)eMJjwdzbdlpZ zyq-x7k~a-j$TgX|sfGG3=5hw5fj6xGbkNYF`(t>9-UQs7J3^2KI9{aqvFkK8Hv<#f z`Yi4F3AT;EH%4^?awg?;9@}Lj`v#Ut2L0C|0^zDdzhQvM;@1mIIE7K5Rv2N5vcY|u%r@g(?CNq$|lnwoIw1=hUu-$rUY@8dh~{DEC*gHXWT5uD)= zHI=j*t-+mXW!EHYL3!P;-v%s+2MMMb74lnhc}gtiXN_`i~V}5nZioJ z;^~}%c$8{Z`&JvrNwT6gYTxW9^mPCN1AB;9eLa15n9bkOaQG3fY;ejifKBTzfXxxN zZPp9tz7HDr*s70{=n|*fylN|f71KSsVZh6_e>uxff=kp2VMNDCd$olp81T2S4e`dd zo5^K?B^xhV6cvpI{ZQu@(D zA&-FQciVdMHgS10^tgz}jdbog&)Q3gBx27@tw_ng@u1p(8&FP&9+l6jwCY(yF%1Pba9kooxCpQRAh1E1ECghq&RRat|4b0e;{i60X=Fcy5HJDu5u3zO z%*utLEBhj19oIb}xIJce32Wqgpx<{~6Lq=0Lr*;#b$pW1=4@*loYC`?VzCHot@oim z7>(vBqIx+POHcev`j4Yk{2Ka^-YQarkkygq5}fhL(YNSAnJAu;=DHah4PYuYOHwiM ziTQ9`1iwj18wHdh9KDQbcOjYLA?*sNw zjQ;5g`aP}Iw||JxuMGK!VAaH^}WP=(T?FsWXJj-0z!#N$^!Gg8Js5Nw<#nC!SMS8CbUxjWoY!AM<4jYET7CN0;b z|3t{TC2kQU2n9@WtQ0ygDY&bTvbK!}-^Zi0^V&YP{v`u>(Q~iq_)GO{-$$=ew2^1x zRra#cvDwv)*Zl>r?q}n%itFN z*#Gt;5+G;(gDv{t(Or^y@b!dc!-%aGhRUlN3X8~tx?BAuMQh4|OjA?zHunDQ*S1+Ft` zZa1#K#3X!*UmCYV^rO5+)I~{ct>l=hHz-Xv0i2&d7V^Wrp}?g* z^Sn-96-If5eXPyJZEtlCxZuF9)@{+5z)HfS^I0KT#z!|8Cr+uK1liE5q2rVph$tF+ z*d}8XVZKVG-i};V6Ci#>vKlPKFFeUnMxoZFEZv<87`YVfYCQ5 zYKV=ULV2k;%E6S5`F$+Ig$4cG9}FRNh+wwwy}linh?xuX+I~Dl;GMOazw5j*^m&6% zgj^dJR|mq_SX%><#qOG}BsXHmH~>p8u7is}8n4K<+uPqkqK*Jf35g#}wbRvwlpN>M zUWHTeH6t>o-iM9&coWSEH?_r{2=45AD>LU3iO&HB64#b-nJ$BMI)U+R$uS7RPLDpW z2)^Ft{rm?p2e+iK)J4s5(;JMu?mM)Xb&OJBpXTQLDD-H_s&Zm4z@25=t{M^?hiwu{ z0Dh0Di}2ZeoH8l9H}rywm5173$_)|Axa$Eb_q4W2o5T2PheGeRy+-^xooNtv(hMT7 zFG5=D$|kc7*s-v5p5wWx8xU)!*KBGIoT+XOm>39#a)>mCP!W>!1rEI|6FQM5kdUDd z$??z$gZZk+YM`(-Guo33@!=xThWoj!8K)Y|0XFjYwm4%!bPWmh(I38i70*H-bDTaR zx)z)yHucORSojyMpt&Le`(lbfrILAuX z145GaP3?cfZ+X$9AC*ns0m}Q-E4 zIdnPA&04QjsHv(5n)25PLr>%DBMD_{+q*L7@+AmEjgo2uo{4oLM8jR!|0#f0HbQ2> znJ5?zf-r$YwR-oTmC5tM(G%4%7h-_JHudGI*ych)*#w~_3|U?lGMo@P=3&(cP}-z? zNOvq|@lx^7A%J*v;PZnNm#Z4;LV|1=>5f+vc*yRN1kScEJcF}GzIIC@+D2?!V4Q)E zxc7>o!m4A7rpDuu*2GM1$mZ}YU~iY|h2=Ba)x7_Zlie&{8tqTT}(*(YrR;u=OJHMD?tRq0lR#usb{3Nw*OFX4)1?3ECM&kj(vaxr;rB#6qf z44p2n$I$!T3BNR(z zXgwac1K@G7`&z(ru?Uotynu0lXO)XQ2~Km&#FQ%#4v#8vOF!>!yvr?Mg(>o(LEt#$ z1xUDo<=L`Bc_*{N@x-7*TPr*PK!>fTj(N3qRFy0|^wpcU7YuMISgQ)2Ovi=sgSTuY z>KKiACSHNckG1)d>V1%@do^VWL|&sU3@NABZQTPtY8#9VK*E{jop231=;t>B0uNea zI8LFqUpuuG__U*NF+4NUB09gj5S`H+Af)$t5%)a0@=TnGMlb3m8 zL?K2f0S6Kzb@!RZ?$60Z74?GsT-y1yn}yJ+Or@3%IeDwjf{tR~+^X`t$9C5{s8F2@ zhBDS71Jy*309m5906pfw(p$N`sSOXVhtD&IBocyYobEd3GqH{#p)M=$JMoXcmnGJf z7H6<}yA5|q%NkmJQCuV1p$z9v`6cSn842e-|95uwf0l4X7-MvvH3X_#Zv%vh6 z?i~jQk2ke*f89!Okd(EE`dFI%WEdKuVZqYO|9>3Mo3cL%Vxcc%IdzPF^}SDt{Qi|R z&UBSemg0~8hlnj>UHaa^v2XL_Wkg7er#J-br{*V`g3rIcP$sC}r=3B_?+#DihddN< zjOO25^!tfu92tzFTTF$LGPnf2t{9z^;?T z9oP@6pi}8`CHFNFrR0e!69pY&@Oh2Ds;B$jXgRMzXJt4%oEG2g9>C~;Qj;>K2;~*R z=lK37+OTtIAe-sr6@Z+Il@}Y(pZ4?7(ONOz2V86#(iwQcO80RNqW+l^Z&Dq92GV#C zHbC+o80UbL+3UY{#Y6%LER9F9R*>9}5=emJP@F47yLB8xeu;|XYWH00ufGT8sw(&tBrqm%=3M`KNO%Xy)8pF;RGTvZWc>ufsY z7qNDs0F}hw3u$eBOT?K;=%(;*yb&S+{Bpf=_fG)UKf2Ww8Vrc~;@#(EL-tBBztGhE z_gOe81oFd%u5d}KgginU;(%Hhq^>-kjStbFoC-tls~rrFy0Usqnqs1Ly^EkG_Iebnw|gQh>fE0G|RblfV-Y7Jn{>PUNQ@ zwYvuiq_$<>oliCX%fS5=POZtHnedNrBH!R=v)W7Hr}JQMHIF&Cbf@?-Dxy6=jxHJh z*Dr`jNAyeSC`79JWOIRHkU3})5!S@pc7Wvj8$q$%59`t^ny*!^ASbd!LJ-I@zOiQ@ z>y2pN(BWB*SYzYOAb#Ew!jV<@QZ}T+$X*Kf+DdWv=o=E9iewUJUn?aL-LxL5{@Bst zQvosCSdZwU*Zt%CVI9ne{_<^;`fk?ym5-Kf5SdDTgDLpKra{Ha?tG?c1BiA=ZYkjK z^SQ9JnkNh4P(p2Imf*e26&&*;mYfdF)aH z7JSZm&pF>ehJ%5iaNm3Hwbq>1yu$8&gGT(*#gwSiCiI_`*U#XYa0%fsS;)F55&s}7w1s42eKRr`yJSL!a zjFWsw#94+z3@5siSp=Hl8&CUNOo3U_`G@Cb*R32=jSK*em&O%nb*xyta*0Ar*q&Jv zL@2>VXYlKh+WA6i=GTZp!Mwsar~~*x)~9+`^qqmn{@@5U3ND;U2zpQ>H@0zU5C z4Rf&$IcBo6VH~+mV*)XwQ1X9EqSvKTT!4vG7jc~pg`XXSH!N;eKXHKonJv<$BgDet zG52i)h3yCEXVw1FzfP+k>Up%pPnYh?n&5mjnAbG<^1k*O$+3%)_T8J@5@!^}#M*XW zctFKWml`_#LoF1B@`KY*0v9x)M3VvyN){d^ZXuzV3#iB(s-v|wh~TUdZyZ9wD+ce^ zvyM2L5~*yL2wYh_0G~*QBHn>JoNPkITh;X2$opiMrlZz0@#t}88*3hQ;$pDh$Q&m% z;;nW9nO^ei?{FTRn>7qVT>roIMN4*u>yv&mWP;uxucv#Vrr|z>u8E1rO|+ezD$LWU zk4H%9*xG4oOcAWO(XEgL=6y%D8{O5FZ)acS4)^tRyDa+*gA*Zrqp%nKr)%qCd>8+2 zLvT69G0=#+xL#enrP5IKeUiN@E?cUGc7Ws{T0i27an4K=p6)zMC~`|-qe*I3F;zUn zk_Io$7+6dyn&^){uzjn~DJCGKMXCa4fci71@|%0_g7$2lG7uHz$fEpUt=WNDlO>>d zVstc!DfuxROh(PE5R70kaa_FFqjm9<%q_g=4{hV5k2=BE_IAz_h;5509`h$Rv#Qfa zS8S9pozILpe4CgWMdiLz1xW1(M9Yl|1lypp)Hh%6)iziHx6p(z8!|;}S82M?DTp-8 zp55`tE&!lEzqS6JU0=p!#?P+b1_@=Y+lzHSE)b5cng=YJJW-m}p3k;sK1nY4w<{v^ z+6)cV&#pgSeK8WFmNoVMWkgI952hGj(=vJ#!k@dKiGM_kRk*R^)UbC^QqX%mjb3uM z^_Jbtu^lXmo&g+I;UEkF)RGhmO!IYl&okI6fJFS!p3!bYt-|Jzh&^PUb`@y_)S|yv zaDtp57dd8v(XL^$lEfg>-}~>(54adPlVIjc#U5t|r=Ity6AYDn@>41wo)>4zU-Tw@ zD}pGGf4!mAVnj<^S->E0y%T^*kOqEaFO|YslAb2b?P#2s4gC9?qZULNA$@=~JDJIC zLuizn7is~G@1LnP@RgGz3J9)yzlAkDs{p8G3rK|Y5kduEs@y&dYzn4Bj@dF=;Of53 z6Gb1yc6(h}aoe`yi-g1eHc`!YZ8O}-7gQ*VuIE0BmuP%W{kRT;(DQeqK8wgZ-UxY` zpTDW?<}uG2Ou*89xR!>gG>2vkj1fC%OTnQBN3;N*hJfjS-Gocmc1BuG-h!FZX$y^O zj*1*}zi31E3fMPt%qF{{;#3%y89+f|8kXEgZfPhqMgeZKc$wfsZvvI+cJKbb8kbd z`~6k&g)oyQJre=y6qpp^31C_9-Tjtq zxf|LX4oSt$;#cD9GlUcH>$r^8U4It*Iou@rF-C1Va5$9?&TK2kENJ$-D1YN?H`TvA zI-CK=&@BJ!%cnJN%$ata(3_YVR2+ZlQtXWC2dm5ru)lwk(UX`m$3}2|D}|!j#sUTw zuL2B-mza`40SP!W6$aqy0`D8u45ct)eqS)^gPpiZq%rRR!mHuL9r5OCJh1eBE;_Rw zM>dfgJhBYQCHQ+Ys)WD4WFEf1P4$Xw#C1LFGim_mysnO6A}aw~#o;>Z=fMcO`dEd2 z=5Usm)}KxVb?z8NeRvxxY9rvdh;~-qfsHvjRR&<#v)eirYa%xvej@)n_%9CCp*|AM!>z6$hnY0>X-wO`9y#+n87KXblTjN;f5?Z|lPtQ_G5Pil{% zi19+Ogqr^rU+IrAGo!_{Ka=OWYqO7EdwdU3D0?tZn7ZD-X|6;jE`Oc*gcFO0sw7n^ zaE_FIhJI?Ij8)~y^DTV2Djd8)MXLXtvvHZV>VK=w^-uAPE?GB8ESD+ zN}jytwk_Z6bcK1Q8&b3mt|FY^YQijpx36cK6@?W142tEOK4;fFAC)?oM-;?KuJXwhl6~wat>0xQXwUqB3 zuD#6pZ?~7LwghRUQ^Sa4<+S%8(a4Y!yBJS4HK0X zUq(`5YU1Pa-I4g=w+xTLr#(QhMW@8>e+-ajjNKO$xyexY4%;WyC3cri)^AWRA7 z#A~xJ=;cgS%{YCB>Xz+rcH=BAjgfiP)rByM%>kj=aH7#LKEQc9ST0B~$FJYC<&-Y4KUd^50J#r~$ z#&W=$<(e@52G}<7{ZZ>ddyUQE={7OU2l-2gJnr15{#W)QHMN8F9~ehI1ndiNytfJRUcv}OD<>-_q=qZWOHm5^ay5xO(iCk zR%9`P#`l=67@ll5Mn093-=lmwi{2;N1S4ri`j^b0_Th)EIe*@YvpVQHl`>aap3~hO zu8B-3KP(GAy4zBA8%w{0>sjMpPyivBw>Ip1+OFI7bCxLc4_OCHqbbjh;~S5Y8@4)@ zOFfiw-sNjBqmc$TE0b15Cz!+YY2LfKWzT5PL?lEkaepy_vTBGfOk%vX&K za>W<~;*q1KdVGbzbK`GcTKJ)%^T*-fhn#M+K=Ys^=pMERrknUgK7=SLUNce0y@IKky6JF<-cBGKCuEDSulv2>@}V55T3>Hqj8^#; zMq5^p{(=#CjgOJQv-0)xTiX}f*B$!%A%J+?*t}pIHowLd&->rp4|PSouf1VFEE2m5 z%(Y70K?QuFV4sHp&-!-1BiMoGRPTb9#w0&g%eqYzde2IN{cy&_)RaDdo=^K%;PLmY zvmSIT@LaeoZ<7vvSP%I%omIR2=$7K}-t-@872FzRu|f>ZDLn9|0e^LEUn$Fq{d z(cO9+uew7!plo4e)JznEJ&1gmg2E4v!Z19+GTp7Z$4gU3ZsGKsM}ZVVKBS0eUPEB# z#>)}3w!USszqu%DeS?9_!RT;=+#*SQ$}ubtshAO*&4MeITcJ0obEsi3-;}_t`}7>r zBN#oJ$pm+D3qIqyZ@!5__D@<0T<`CUL=|x1zh9rqr2pLjEIM6M?rH4jT*Fxbg+q`pQ z`AtdxFpy5>?#Q^aa)Z|La)QMH2W4onL5E&&!Nvg-Z`szek8euPTKqo}-#OE0n-8=0vm8EB) z@zuC3_Zb~=rMLv0FuurX;`Z?12jc1nF1kYRswrKnnY-<@R8wZ?4m7mI9PS6;)VP&v zUnK4>Wg=zcCtC7Q@Xr;6I_!Dn+ElZT3X@CKcOL3((d4nUPFG1Gs{Qw3ei%FYb_G&) zzVScaB1@AH4TVzES<@aTvwv;_QQL^7I(Ha8UV)rj1Hap~w@v7UCQ3Bs-3)efWF6I{Lif0|q2SiESg69Hy5Wr1B47U$NKcA^vnH8!dtSx~p z;u=)qZ^BEOwFg=H zEpw@+CzNSpFrEanK10fx>iBypckI0T>^&9mahBSkczvPU38ZDoe@b&r;gF>WnyO<+_@1qx!9(it6#XFiuWlAPbVWy z_EI1`E5Gjg1aMLHM3}7rStEPAh~Vu*EqX~iK44!<<{czq;0jyx7;h2BYKE3wDe0@R4;D?2X`hee-uA#bEJld?Q2rK5E9RwaT zg_0;=x$PSP)LVARYXkJC#SCf#IDEyT55DRUW3E&-`7kA`)K2X|w#UOs&eb7A9kEI! z6++mBbqek_;-a`edg(W!SzF_POker63>5;gNvOI>{6h$pY|dd~2dytK-I5uyN98aF z9cqpLq7|mcH=v`xc39h^H}E}b@?EtV!W{Koq!z)DZKE-{N$H%H@KfXD&9EJ<`*1<2~KG(pp9wB?G5nkhUFT~?~B_c?I zhM*4$f(0x6vNs^UbS5vg1q_t0joX?%Xr>>G41+rTTqA!vp4`(!T%f7n>98oaneyKK zK=ukFJB_j-%R--Lg6I$`o6GoTOFC%GX3lNEIcidf1b6o|_kV47s5V&He=RTwU401T z={ZRGb6rX3d=S`CcI9TQ)tHc+>+cX^`8yd>C*_K>YUQ^XymS_Y7mV-Gwy$O4qRmog z+YNW$Ll42FmT7<>=*yWi4TCK26ZH|0FB6W5NnsTJwAxLcIjT>C=^rsBX@8-H%SHSY8YU;(fo74S?YW=L?u{2DZEosFATz-NQ7OYw zdF7VhfXbpT4#B$tJ0QL)n*tMzPg2_R2nmPLArXRdD9Wb>ZfL(cHN+Q1t)M;xSeyK~ zVm7>o%DnbMw@9wUvrEQnA8h9ou+W??xOd4j)dhAUN`YOtV403OSa&{tz?e)tBY%Hr zMbR(m`|hk7`YD8klmtI87Z3}(gk|t$;-pHh^69@Xf6i3oI}A>-ZGrk74|=AdJ5R0F zBn>M7nEGszKM4MxXu^Z9CC?T%71>u|Sx!UOUtoXx7>2Ut*BBBQ?)mYEq}~j_GD}S0 z?~ILQdNMG5J&N(7rZMi=W8|}e5VVrIoql#$cPGDxqRom3;?3Im;8Fy(S6DehlRXfd z?jHHvZmvh{AH4GP6Ez5fR{vdAjOppM2DKw@-4DCH{=KQ_-1+Wsir4aS*vLFo!#ZAO98C{xfJJJmUq@aKYbGa1AX8 zE*!xQ=s=+-A}1mMe2-G4$H6eW6=Y6X3Vo)_MBe~oT4-8C@s2?d6e? zw!BBMm17&_fUn%3D|9FRnr&^k>2B)=A_V7sX?lDy<$G|u5IVEgkROMh*JQ})4hjxM zCK@I~CPhp($FY3o@v}Xj6UtMvllE0A{G~3UnL1L(PxGS;m#o(hJ||g}vMZvZ+jT>m zOZvY+yC+616A~dm=qeB`@fb+ApElVT^U258k(SDl(SO~(_o2y*;@(U!YZgXXFfv|3 zcpX3|(Sy5oGa-KmSbzD-qvgttGA8u%kRbW-VQuO&sO!Jd{FW2wgE^g#T3EzL15Qqr zPbzxRkfK4OhWXtj8w|>M&_`m=DM*;<30RC4i z;*%FZt(q*-?_X7UmhAZ?Tz6SYJk%9%47fd9e+k@+xF=`hV4Fb-6pFR7I%2IpfmSEu zh6@*SLH8REC}OMsaxAw|Fa(_VBaL0A<}f(QkfIDOldk3>7IuTkutW){E6OnBJD`7jhmog*K;r07>*h5w22a7fzuNlG~hq{hPay}#1UT@?v$yNZ-I zgnKt>FODk+BSx8FG!rq`PsYsu{3PaQXvl+YKm~3F%}BjOCWzSL435P zA8)@j^gp8~l!&Vw=6fAL%V*rTi=Uh(*?8Terj{%rq&6wVgnCM39(?#P;^)B00fCRr ztk!kk8UO2e_=Ea35u()o2B&{xr9cNO+yeQwfJQe^N6SS!=&tE1RA<0N9NtQU$@w%$ zsq^GB*IqxJ132f;6G?vq-q)?zwL&$Gz;I!hH)>l|os+Z)Ian-r`BV2X&`D$-fG)mX z1M<4X*j{B8Ol~81N*wU0etD@W&`VqmIs_gOGBhj*hD53aI4NV&NtD-{sMT$UqYLNK>?cg2CT0ZgkW0gWu=v+U7S{e7-86g)zv^Q=;+#6CHLS*UEHfb zya5;Gy@ubP7xV*~@FyXi23mVIky+)l2~YsRJd zDt&jrmRjzWG5U|Y-!W=0bb660A8^KDOwxG)St9|lV8({&4&5(dptxeEqCgCAY3Psl z3Nq9LXhju>R8#9G2u!Ga(4&-2DLp`qa~6D=9|q%zpGdB|2uPxg`*V%Bei~(j#VUOL zyAJWtkPREbJlCNa98i_P``mN}r7Tr1i8bn;T~_1!{w1gu%pMe4fU@bbdN@@$ermUG z#;;tJGnQS5QwbQZX>uGz^6h{he1C~{62oWJ{SXO0jA-7_n|ym|LVsJ4;4|_Up!wG% zXNvFesAY~h3xge#m=( z@GYIhn>Z1sO7SuV#h5;wEjTBy*mX#zgKdE6rVHpCd%EM3FvGI-8gD+>e9ZLkE7qW3 z$VQP>mZvT@8H`b;!K>lgILo!a7BXs=(Qp+I2e_BAx1Z46M01sVFx(|5ggMKrcni<( zw_HHt*7tKLS-pVDkc+(Q{j6oeUcPZ_9cq&IKZ&Z{)zBTFL}RH^c|h2_q=L=GI5r9- zZBv|FU>O=iN6h{8X|IY?2PpLdlyB|80w*6ATrY5fp#>jsAe4$y1{ojU;Z3Xj2N)-ambmx z)&HrEg@(~tr6v@IL5Po%HHZw1aTVib?8?+Y2dt_PAn_rbf7q#J={7jikxL7`!_p{H zBG>`$vr?hOuNH_y)tMAPENE<@jKAsf;~UIwrs2EcL(gBaER=%r6w$}-N0Nilo1c;K zXT;%c`64;}TEukM|J~}mK?T4oN+6-U!$AiAJ<_II>ng8FV04p;02DMsx-cQfDRyHrzFJ-s% z?TjNb3U1M=fiVXu3Yn^jh(gqLaSil+C^;$ChLwniWp6D3+ImT5D*L7#R40qq31q9R z3?J1RKaNddUPm+)KlTB93UCa&pQZ8fR!iT60Jy?2w80p#?jA zM#h>hy!-lgz;yJe;O zO@rIy>OIpFpzzPu&8;Fq*+q6U{udUcZsI!y8W%GBWJir-8Vy*2AQy9mH^R3te|jZS_sD@w+@3sDmKh6^oSbc3M6e7h(r5R zE;t=)U?zuKI|VY&<{_tvFv*_~&BF=eS)YeX{dw<+M)1BPtg>Y?gzNsRr_|9B(Mk_; z(qjWZTLaRe_0a#A+>C~(5RNlr zj}qJiu|z_IAtl3iqp~J`tO+4%?c+1jT_u!Lv-UUnt%_Js9wBI68JJ>9vSM`Amedz5 zC7JN^7`qnh0hAB3KD_EET+0&piI7gqRps!fcmyzv z7-fkmjR9+gLc z)rU*I#!LbwHuQRQz5yKhzkr8v-cn6pxtZ@0suS1Ee!-bU0w)wzFuW!nyC^u^PD)ut zFNRHC&8G7mff;}K&Kx3xQ}&qEDW}7#yadf3z#RH&9$AKqvjD`Q>%Y&AiM?F_9v#Nr z^>GZYWV9D$gw+^lz4;ybmQ)x2p)UKmRwDqDkvF0BjIb>SNqKQ;bm7>$r9dy+vKMBML??W8oFH? zgcN=Kx_~?R)Z=4zgBS{llmfbm(MS`G0?g2w)1joSI(YL3Qi>kcgp$3j|oJvVCO9?X|(-+>us7wlrKrHU;TW zq6BN%0|Di%q)S_(;N2HTPD=}85KEck`A`YBa0T5Hvv8-# z@XnEwzO>m1uOxfmZAbh?av`Y3;bTn`I`+Lm>{oq{G0 zD)t*DdsBC-=_FdFTKS)QC_Wu3%8`7L4C)V20Ucw3n%e`;ilz4I-Qq_(bWiN-dvBD- zT8I6}xYOKvz9u8cZxP#a#V~Z)i$jj-NgfnL-!(pRpMp6Oo&hc3+8~n7q!OJBUF=2G zDa%Rs*Yy5kc&#Ufve3xYhSsly_T(KOw_RnkVwAb(rOtApOY-KpcscqF-Y9ky$`yoV z6vO`T38PA4ti^S~k@n3bPE3488+Rd_9xuZ$GaA08XvR{GiO$n;{yV?*41U4H>mp@G z^i(UO9vMbM4m=O91;%+OI|Dn}9W1iBcvI&E(b7WMX!#~K6&EI$ZN+7Av$&4yWME@o zBwznz#gm0TVr)C1t3>}A7if+HQpDT z6hV{8FiXH_fi0mxS$opOmwD0Gv@rZ*Bnku5+*2{qorsf z?`;<&NbriFU0B9cIC0pT@4%B{N1#@IM^H9iCx9gW+zH=^Fwwa!P%!UUkeq%n7KFvzQv^!cmw@N zg3=@7qA6|F;(N7ua5}K`O@@C3wl!Z44LM?*iXYTm)kbdYdOkbEM8S&adFaU;$Q^(5 z*ddykV(Bw%-a(H~&o(wZD@^PuiiaDSLg2;GiQoTdqBL@Mz2DNA&J@YO#R-pgD)uur z9E`mG*9*Ws<WdiNzSB-ngex_KQ~11Pk8VIhY5o9vIPKJO z6T2e1m7b(rdjNy+(0?d}tt4{I;+@X7_M;r%!5=ny_|O{48a6<~U`s9>7v{TEc`$hq z(R@85*+lZ^cwxAdai|o_Ns}R0-;0MXlnhLSt9>$NW-UPrEm5O9O)Hd4-`SHJ#5vq{+Ws_P$b3gaMBN4Iu0IiTWoK_aKdt*E(3-GOFuU%H zy@ckN-~ATi5nn_tV_GX*b}NZy!-_38EJ0$&W%{!GCPTAc0EMw=x|`nR_EslZv&W%_ z$e5D#$Ggj7vc0wNMJ|+q4T5WBUri%dCxq>eTpSq0oz8~O8^<>6~a|Z$%vfj)3DtlGa;1a)EjlGLsQ!VH*cQR~-YUK_pewyM~3rGdS{x!Sx| z{#4bCu-I~oJ^@TMi=r`q*ZGXSC_2=mO%cjpcq zffgl)zHAY_K}F#j9IwWRiJy;LV)*84cf%jc!^1J*HBgZaK5>$tSYpYfj+j7z`TaI- zJqrOHe1U2&f%!Jv_lH&tSJsgrCO&eJ#(wlmKt;*+3L#kak%~VBR+&*Nm_O6|p933> zQx#P|eFc#!4;f+zKx@U2VuF1k-Qd*HpVz!zK}y(ZxV)%_WEFSM?r}xVQAa z0Ys)=`f@<1i~)9VQi9Z1^?0dMH`JfJf1`W3X=77qCu|%$;@bW0%|y13)f@q&A$a6_ z0Lk!?Xj^&F9Qay7+{)MFO=Q%5Z_qglu^qp!`lPTE^BWri-dCg{!-ZeQ!eOrjvSE~c ze%VNTNWCT8ns~@Mdl$S5zNVtQtsrs52|PpChx!sCRJ&VVW4UjOL&Ns~p0g(73RqzrZf?9uF>QvTxJ>6oJn0Xs_W ztXKRJMZulM7(izSyaxJXvQWGtk=|e6g(*MNWwSXwXh+cd2HZi93iNiC3M>SByCKPY zkbU&s-5BiU2@StsZ3^+X3isDT9dwXHc(yy4CCQ3Jj)n#$$#gk}hEx9g0iWN4NhjII z_B-Q|*LHOpEVSOvg5KD$JYg1RxZFvE#H2QPy5WpGN|10^fHmm7GYhS(_hrqGp;TYPNH}z^ zV06K-Bb=hMiR;C^keRYb(s91}55vrgn@5y)ZaV$)-(P6D*gi{ipX1(p&LlRDb)N{m z4lqG0pphh^VwyHA1}9FFSibR#;+3Rp$xobo^~u$|xNlOYd@-q&%QAY{ZnTuky5)%* z1&ntcGr@0XC_8HP9CBh0&1YNIkE2!PLqSwmxJ&;uu#Nta(sdNN&F)7_s{b4Zm1k!| z$#`-HW+TNmjKA8FeMo$j8;VtpJ8a7$#{srs(b?TbaZKpEKMdaxbZlz>Hc>k~O`ZouhaoB? z#BqXCa8vxN4J4WSvGiRbGz^k00J;Y23H9IE#eO0}YRN_>RFH^ej@|B2_O_!;)WfWD zw!;767mC-hnaCBL@o$;7!3=;y3di!a3Dmd(JA;fUo$RBJ39mk{`QNf!*MJc*tK$K3 zl60V)Y+7UhQ(X4Tg_}E?`1J&rbAZ8|?z+2Xtm#m=;Yy~8YDDGLn!6hKM#F6otX*%(* zL$gVEf99?>Bmzoeo64B!i!Q@B+afOs5z#v+c-MrmmoOV^yX@9eL8rS7eWqiQQ^3Vp9Tx~J%3Taw&8kzPJd&^Wbuoxbu4JS@ zgcS)6kL>tZgzRv_xXpFkr?vp$Oap@W)d==?bBBH-l8J^1rFZXPpja68QyJAzqZmbFpK@UT8!zt!6N}?xe$@5*CP_vZra;TRYTJCRFcxwz8iQL9OahcBW*sSrx$qG5 z#SYHMSgM+rgByV-kOFzdTcxMy8zM78x^^V<&Y=)6#(t92?>!OEr}$bMR63cq&&T$$ zaN{+ip*UVEe#%N<&!`pfw0o1L{}9;K<9JrRk);LWFS}j-UKCiAyr>AF2w-MIYFRpZ zL<{Q0&rMr}j0r`%4h#~69kVEU7D75}ckSxk11KC~ouLZ(m7)J0iRrzjRS=4o>h|R~ zlGF(*hHe*$0M=6Q{xPV<4nK=yX@Y@;04qeyh?me^lDKKwN!q36%Gk0A{^4c@hSMGYH4fl@G%9?FzVlnt%7Dp~|dVKJZ$K8xh@O0W_E zrT8q`iMEDJGWmPfQzzPRQL<>V7={h4&0iMGy0Dv%8DY=&1>C2z*!WKXm=&Cxf4xiL7fzpMJR(CpQz{ zp*V50M8-;DcyL2F%p7r15N%Iv+9af<^3mH?U%0$%D5En1Et(`U+BKZ*yTw$ABct@gD>Q4E`(S-}pYF^>em&x(w&3VJ+yISG4e|~?D2eDTrO1mGh&F9VAo{c0e zU8}EfQVsa*w!bx<7NwF~Q$<$Caze{!q(T*F5Sq{-RDI!K6e}d@vbQl?H3xSceSItr z&J%?fm!!YHH<}p;XAaAj8`2nmYHiT)^ucQW+N{}B1&1LugYETW&Z4`(5~7hUeaiBx z+|CV-y5>AJ0rQ#tO>F`CpMT*snDEhBf#|Sbjd+91I!^UDrKs7J*|V1fDpzo+R9u&z zrMUsmhl>lk(;2}?lXJdjXC5wEI<7mF3##kEj+6f#_ZOc>@XkW08fENyhH>&vmwLS| z8zzp?Nd>rjvvS*Y7Nq4nuHp{6amb{-lJ3$sdU2j(PsqZ3xtuldE69c_W z85YsizRXCBP!+=#qm&;GdbpK?o@!*pf#ej=Uu4ZV8Rl0Apzb<}lJuIG|5FLzdTC(3 zSP0rlfbA07p)NHJ2f!k3U*DRWnQCkzxthFXSI?%#FeOX{iVVEWs>Cc*uN&uofl_cmk-?PpLf|ZeJn=l zB~_d}vH58JpRQ4cngZ2#tOzV>U@YR6X|e`qq&YBaNHqL*TmdyF)#pI0`L?#j<e0&QFTdQ5zv+TxJB}WYVuV6F=yMS+kgm$Yq=tx=dKtuk`OXYS(wOoGJK5|^MWdj zEpSzd_JK~cf0+H!(Ws6Dez1>~GSDIT!E!4X)2ZhBMS%3GtnSpY@9&;Jc$HnZ6#M=h z>b+T!#gvl&8pYFQN8s+jIJWiU`{XC$D!S7h-!Z#^pXEoy?#lC~*bgUixSo*7#rK@%0&}{0fpw;U_bZitJoq7A@D& zjYQF`yW`h_^->oSHz&zOBT|wSEcb8~L!`rSZiQ8WD zU;ETaebB^+;yVievduji@}U}i5R-kMO^ly?0ECifPDqM2!Mw?|?(7^B?*nTGkR$ie z0y|LO)+q&qdzsbP8d&;P*j$ z**aR~6Gq^TiRU+C3q4~i5;o+2iQ+Qv4%Bk!=}` zacS*Pwd?cup?t4T;V8J(3QC@&ZKOH|-!-|nw~<`S9olP~d{28?UbJ-ZM^f%_i83k2 z8(xAe1@c$@FKf!kf8LD zk=vgiT)$mt@$fc`F7!V^KlW{*`3A69?FIm}3HimOjw0pX0uw{5ey69Fa2f;!H~f;_ z!E4zr+q&@H#bbLrjQ^XSU03|Y?=-C04=KA=nN7?8^N|RY_()LM-A9F`j9#t3fv6!Z z0Fj8Tfaj!%T4A3?)RpV9I+A!AhL`$LH?Ng1WeP>&2OEtXlK3H^nJnw%PqK5^t?5>QLdT z>}@JkUU?75t%@ojRTeESXf3}a2jQIiS%1MG@i%*7`EjB<^(AeyYC!mOe)QMLz;Bo%H8Wn4d*M zUF;`GYp%4O#XZ?2{{3SUDoU+ZS(4lH8N=`kon)P_RMW9>`2DXpkPjq&pzxgmulG84 z{Fm#6hzmH-WB-t30wwO#<1%*}t&Z9$odQ08DHs3o*Ij9#(;OvU*!(LX`}g1d&*x3N zfT9}hZOo1S^QHgs3AG1?+>5pp+c(K4r^WyNC=tg9bRne_9g4*NdT>r&yeEd4HkzDO z2$B;rA+$mt-os@b8rjD%aRXJ-McRa~*=aFD?LT+ce}6p+5fXk_L}pJB%&YG1h18F* zPW!`!WQ%{>Q_Ib~wf_IlYKo&*%hA7~^$TcdlMIVqb;2&NIXHwFOq#dNWiDf1lN9>& z;m+Tzxc~7UB~0-@=#-cA+caN;J@;t~+)fNR@pAs+F)F#dtLT+E7NNo0mjW&zd~O>>?|!z4MRV-+%u! zi3&Uk&(=2>36=tDZ^ga1lSs<3#0oQWX8yN9H^ywq zDj#^$xU|WbVs<6 z^G7j$Z3sPX8mPg%Ac5uwiBI0Jvk}*`E;zNnxcPj z-kbcH^*^31!xxp1f1?b%s09-!iODjH7w-K8rh4-ttRs$n^iOnz0AoHwjav&J23m6K zITCGMz(8(I#;!)Tz5FgM^#A&~L7q~cgy$5ULJ+HEi#`~?1``M7A&FXC$eV;hFXZ;y zjk~~u8Lr~`0hIHN%XbywW}dt0ndXOprWCtg%!hF9#{%z3j3Zpy+fFC(y#0T8N}OD2 z>IAeET*RWUNjVWlwJgg~pDCcOx7hiEol@hWRO1M8#oMp}GVzC<_O+N8e^Kl5AS{#f zMqmFUtqyjj7u+c0d-yz#Kr7($=b(H8>E5Xb*>j=B-kJ!XX9uQioJi0B+&dn`Jm#}j zAs@gv=0gt=Z<%#?x&}3WIMpG}tHywbav}Q1k7{qEst=K>aUFo3L4h^|GgQv%gLfXS zFNlOS7=t@G0^#zl>S*|6VK-D+EdZI}XG@}BH*{&D%wpiozn{2|!wl zMVO$KAV`&sQ52#q1lNp&U3kP=K$@s8$mK_aS)8sErytK}{$yp&90qb7g&)Ya47a_@}iD5r2bUgT6Q zb!sF~bwjMzNoUdRZA2|gOb>p4cAfc6o@2C{HMz$?xeNG{=?%6v%N>`u%783MxZ@$D zx&_C+Wujx89jZtiMo_f1dGG!AL63_o@u3t!)Y3ev{EyqrV4Y7RHlyHaao6c~w#efS zY9vkUT(iab&X;=4Ft@V*0A3?8A0k8~tNSXpLD#ENo-`wHB$VKApiSiFO zSEo6EjmQILYo*Tc&_>jS3r>@=O4wo}t_ZsbHxJ^k4Vt!K&dvH5q(5Y`@o=D69|mzaWrwH3Oxr*#hs+mySfUd`?5e-Ppz z=8U}D#njNXX#{98(jfRhZD9zMiAJO>7v(R)V_|>qhYDWgShI5=w@5BW@nj^aUfe5m z7)xZ=2|DcA!{nT}Kj|rAieKRUb#SLkk)w|Ox>^ITRd1@si+Yv_+i#siZogE~pu<25nH6)PetwLJK z#U3u7#|r_r5=F9sGO@KQTXm)Jhi;{F8K3lPAD3xuLkRL~jB)BsMD z?rf&D6R_7q(OhwlH+j;j7m*ZL&nxD?0THbi=X_D|8pcmVTdjqiKD(y4?RxIwvEzBw z4Q2zUXV(5N$`A|Q1|{b<(Oyp;okS!>!Wf!vc!kj8Fe?0^$Q zB6Mp$wGp8+1qLmWCr<=iv5{+WY#V{IqEL%#;L&?$I2{h?D;u$n(0A%Dyhqs1k6x}j zV|EFOpPT#ddc%{>bMzU!1p!<^kMi%{1m;!~n@5=vtX^```fV28Uk=9MKCLs-~?fA_>DuCjpgkJPw^u`@ppD zFxHfXXj}hRTxDdJ!)LO1L>%1o#2&iOCUf-S0OGdv>@BDxBOKz^H4|wTggEAq1g?px z8|eEs7X@=tvUxD7fv&Atr{tsHhztjC0^>`vF+Gmv1SZ)(uKJvC)Qm5oUZT* zb>tZuhQxSLq+NIfIyJ|g-p8A zHn}~pr#95VKLFO}y36JS@4h$BxIj*1(wJUI!`BP1Bt=HXW#kJj`O=Y4LaWfgW%@bW z;ch2QSa+LV@A=uBFkgg=!rJF!J8vBvAKd(&luM}W+V)0hi2&`Y426*?1!3{$MvFGuvOhc zUtL;qVLA^!uX?6VRaKkKio`l;xLY^i%D`fLJKojJQ<3M6FWozc7=^QeRpYhkR)A!N z6S3_7yU+1_f$sEkZ5E&dJZh&G<8BF!i7$xRea;Mmre60e!5;3XBpU8^Wre0<+|@nZKEHE-YI*9t|BK8lz}26sfDLHkf0AW~-5; zYin#&%JLW2S2I7T{%2L19f2<)SM!OuCM0SF$5$d2R6147vA!NE5+MPB0S+TtKRISX zY<>iEGRnV(^qYsJp@B+8=c@VhEk}l3LjB=UprLr{Ypd1iFW#1rU?j7s-3RnrirTRH z5Oy7XRvCR0-!-|PuI+0p6^R6Bu5A==?(GODzI-G!)BN@2$625>`eZ;Do~N#uNX-S} z8FQ5uQ-B~Gz17Mj;{)8MG%;`fiSu$L4(Zr5U zj#OkXS->Cl_(1SBu3^Q!9*ZXE&Ekjco8I~8(s})KD^R)iQ9aMEXqsgS=N2fz&VZ(i{d(mjU%(+YSg5m2+8Uv=&#s>BzyMDnjB z9l_I>s)eAjUC2j>(@NZ#QIx?D?3mP>rwd(Hd*? zn|)5;x71O)ehAi3JmX~Vp8(7oTzaAU(>n7bh&>A}v=TbFCHlx(IA;3%%)|EL8acCyXmx-I3H_H=bFG~>C6jtQ_U?DB4;UxyHhToqR6p%enn92>}4%_R`L z`<|zUA&-4n!NYN#MMV!iDL-5rH?*9+PDJ(%P}v zQC2aAjq3t8hzk|G`8V5%Km1Nz|XAVl^+aIYjrDDaT+nV zFOH2q6C=n?g^blYK9crkzRqyYP?I*gSBqL^IX8lK-?>zbZ?gW{tktOx7T&IKw2fBN zu5jJ8E5&vErg0^}O2mfvr+8uO_G8C+UeGczQ=kq>%PGkfUGmt#d7Dp=ewaLIfG_>c z1H{Ca2)>VT=QL`IHN`V5lb@cl_%u5IKI@?OO5ntn=;e!?Q3iRAh4az}3=cPjF*Qgz) zLK0}L#-|d4cimczf1j&%Evj`MJK7ChDcC&c=Aq^EZG4B}S%q9+oV;{)3M2(=rZLeg zXkeQT(ESMIITk6hFHYWbqm^|L;V>m}pzl4rvrn6ygHL_l4akhs5ntr7YYsJT)o?~! zVdv497C+v7emHrxK=TsLBjx`nG|VQ^R#0uLNpw09qu+?wQm1s4L;)@umTGed9OKRn zC5Y+&jb9W|`@+}N)m60v#`|m& zv|_V-Orl0bg#??JM8BUY?Y{(H=1Xn&n?`hoM5G&1LszK6J0U2@c*TMp^P64UJ&kV) zxfVcnzT|KWP%nbRLnVQflo#$!O~~mzdNDl^$X%iOu>vh9cFm+=< zO~}j@U!KBYP+))wgG8mRzd-PeXBn`LFq?_6|KU{boP zHXE>x^Z1;&zRxub*RCFxcBwHy&2A z9;#uR*&a4%2`Bft!s&{31=tu6%hLLx`+tMPO_ zi`AxOC_Jjt!7jQ1x=L}F`A7=fY^j3|SdV-0-Qobt_aD!#TdgxSb7<2`pv`3@vK29A zx(4;6VHhwU>E&>2JWEoF`{Bi4gz(~M^!%3%uH#hOY|<938f}( zD&D)*>MHU;^fYkG=s6fUK72GF@7}c-we_zZ(94WKBKy;$Zx!a}$2K6iF&mYvdIJdb zMo0@iakJDNS5Z(Q-&k0FIjdyuDi5?>H6iXI4LcX7(4-0ky{w?}cepcP7|fnS!@9au z_h}EBqCz9w+|}WF0D_H$r*JUe?|h!tXCUzRp7dgu7fSA_xM!Yi@YsK3s10^*Ybh2r zM+j*`@|uUHX>UK0p@f+(QNY8@31lF|jB|6RD4Wd5kANhhjE^*@MA%`0G+Ncc-_`*M zl10pBdcul=8l9njM8A`0*Ck)&T5`}O`be?{k7ubwT4s7m>MbYjg8T0`0q4i$1^5#` z!N7emzIeFESa)mzS^@h!=j(O0?qJ$jpz0(E=lO8`t(m%NM1D-64}ix+*<79w9V)r7 zS2lC2qENLnVI+&c9dR46xCB`GKTSAe0EX`A`gOtnJGTxV2Px=RDaVI2co2LKOQfP8 z4LbKW65lFnqJfBCVf=OHrA?lVkDzt5ejdtS0pX2b2Y0#Z2His4qgY~v@Td^KVh_$6 zU(Fpc4)r`_c*gzJnfNyh{nK`Tj^c5FJ8g3~Rq%$7!2pbM7Y5g5+-R&Z#bsG0BDpGG z(3l(Y3%bGD23FS;rpPJ0mNzNJSw# zna2nr4STPUz4!0BTkr9C|GtlhKPV38zF+t2bzRTvIT(!0(spdGR__8MvS+li#7ivZ zybjr!Ei9>n(kx-t`SR7F>VS=vIJL{Np8As)2GuJAM)vH=6f0_PS-%r7Alvk;IgC%F zp?rBwy|$qDr-Rv#{uDf9$U9-IQJ~9m!(LdAzx{k*ao`<1GY&D(j!gnFisOE~@9r?E zV1+%RSHA54T3~{?QTkRpyp&I$TdceD4uzV%oz6NKD!B)PLLnwGx&8@?S0LRkzJ|Cs zwfp>VaZ(hvgqF^oC7ssov0Q#%Q2CY;?J3Ecjo$iO3GI;JVTPCz?C8k&I5)0?_iKKB zUY&a;HDcfNb!wY5Wm(7XCYAAOqw=G8t}6R>P4(3Na`-7>ls#%}grvSZwozgVI#qte zX8CegTb*byYtZ?jS;nAYI{VGugK`I{~pFH&{w zg*)k0w|O7&Cgj=jr?O&WIF|yn>-CaK_SuS3;j2Tikj9|H8Rva|Dh>Nx0SySGB zRY{G(E6oKAFHXNDI`|BZ8Rq@xpTN-nB=OU|t8NmBNmSPR$v3~ng(S*VtPbs}`O|U{ zu-2jF~(e=*cLa z%@omu9DRpBM}N#?FNH~ex}?y|`<_!J^rLjOXP=X-EGFZBHPK!8#UB#kWa#jl7)xjh@7v*W;s*Db%%yq zayJ7=l|?>UHSqXO-8$oYyD8*|?1$P{!t+0%7#Zq_w|ap`2}y;P1z+S;g)fUN+~42g zB(iH0>(YsTSEXOswxUzZ$JgG?rOsIOev78avhVBU>E^D=m--AUH}KNN7OO5MH7Ib_ zYRYK6*x1OvnDN!JiS~ApnX|my$16tE)+l$L#7GMCqtX24uvl7Et}Wb_m)+6z6^ZgA!G{d1zAn8$eV=Q1V&FhPDO|ec7_{R`-I1l%A{lDmuxd4Lq0$O^76opx3=%>I$;GvLvuz1Q zKC=14$~yk_whtOn#6h{Uu3>$IgQ;xAf_7d? z9IH;_dvb=71M1tfuP9y-dtf3plF%09d*kJecC~xeXQz2ot*=xDd{4bMR#9r#dJu^= zsp=KR+ExotJ4 zcbl_O2~*5ih8`DvJb2ek-w^P0Qk)9QZVNe_!iRo165!0FLubhUh)u*yaOZis%xxn^ zFBX5s+kzjusNVEkQy(CC`Xu{lejCwp1Y5{du9%y@=L|vFeTH)xq*C+FErDGx`N+y2 z(DGcD`n>4o;LoP;?Zl8;e3EDeuVfLQZ|$h>xovR^!Gl}@>~ik!3^b}Gd}3<6vw>y) zHgh<#U+MYB_8vE(Iv+3jxdIGtgk$eN!Ba@!IN#Frp(EdZ$N$-GnnaFN;o4;iRE9eb zr3qTc8iqy^rz$wSUX!995T0$j6HGiJ_gLi$8Qz1@3Y1RVq7B{GIMM@(hA9vEl_%aP ziurBH&k?Nhq@L{*+?N8C<3b;rwU+?9rhPxnc6RYR>t{SM$Mf4h8>JzcH#&`;wne!S z^@w#%wh`?OZ?m^;rjFv6Zye4qbuZNY_gwf4*5mhqVl8jD+dG6$E=kt(0M0YFQhKXl zS{~U)-LXRjC5|>fisMgYwj6KX_hj+cDbn-rUGrnY5!4TL3a{pX5`Qb zh5~Ncx8*3>Jx37yj|s|LBTgXZhNsB~8Ab^)l|&Ee`!AsMne7+juy795sMbOUHwiaWw6D`jU*fXV6A?Rcv`SDRqS4edFcG zHk7m2d-04&5(~x?6sJ#nh0Go^TmY!Se8W^8h3ynWtlZ=LUe=Q6wUm4~Z?BZPz1}n5 zR2$jNBSWt7IKfK@+wFL5taPlwr6AEfw6!T}>w9j1qaDs zH>wz@3zF`ytXJZz$9vdmn%p$z20m$TuCVlPv8E&`&;*tgR&mp7?UG~8D0knw+;h`w zgek~i!Ll(pj!?&%X}vn|c%bnNxx$#M*`>#sVwf$v$$)s<*^DfL>rAq=4Qt6}W+tEa zwf{t{{G6oZ*^=I7Vo&FFUZ2wHbPBwGr->cx6!UySgXY2|)DT`ZUc>eGw~x;WXKb@e zTnxTSIol*MYbgEZk~O*WnAiD6L0_ecEPT&M3q0R!D`~=r8uln@TD)SkR5X7_{jKm9 zj1}QH)Jp{1YOM0n@^uL<-Eg#D3eMIMHPV7^yp{S}vjOm(cmsxx??HR6~l5JO66#<)ZU zx#enoR>AFHEVz%n-5_G)wvk!G#!b0H5tQ`9j`W4cX@__nLNnJcukNJ0cYY-lMQSMe z32iz2Azbs4EHCXVqTk~8pDQPZ1#8sq66-Udy*@JebeCNUhg>7HjwGc6A=Q5&wV`2X z5PrgItInY3O3z}}iek`!sdl6RDAD+ERwJcOuZGKJHS&o09h}BsU1hQnMX;QgTw!+T4w2=pGWg9%jka zlFW4wdSewm)Ftg;_LKDWdrlGK zd*~YRb($jP=W08TM6qNIRz&LMe$=WxENSGO6b!9NwMc>|izOrJeUO?!l4{uv6(%d& zi-JJPq#BAxQ7mE1e81iaYyCVOzwj<0wDj6dZ?r!df1Rg%2QDL-6@%W^ov(I$VZ35Y z*fe$Z2_fybbjq^l5)8*f-d&$#(w5siJtVI(qE8EhDA~LoqAm%Y^CErGJhjg^ZJz<5 zH?h@<$N1;n44rnvB@5J@msJU+6lg}RGe6V?n7+njRP6mm`D42JNVq%J-%#p4M@ z;XO-sOr$qIlOMb_97I_R9YW8YJ91}irO|5r#v)crHfv+}YUK2B-8JYVD~^fM?!E-h z(2tFM)#xPjaJwZIBUj@D-1r8KX5S)hXgz4*HE&)SI~TRBgbd zysJw56wE8~#aEw%1HG}!A3umPs|q}Nx)g6@1rD~ke%iPg-qj6R#f(DqiO_`@&Jqgs z-!2BDN`{GO;>eKiC$&F)7!B2wyGEX7M=Mli>! zInF#WO|3KWDU%j5555)G)hYXfO%*ACK}PH6w{X#dBacLAZk93CdVnmomo&VXPx z?EYmhlB)xnkYw=do^_e018}GS8J1}M@ znRfx(T->fHI5y2*l}%Dc2N`kXE*R84Xz7sE(|ZT=ZzS|WA`Cs-xYF%3;)?gthfO!% zu>Q8#FSm<7n7#xe17^2}0&a?caBH@{03rjc$%T(T+_HXB zJexbQ($Z_QSNMl2oLAyMc>s@4__|c=G+q)O>Ngux8p{%Ch zmU4UTRFZPmu;`#*9I+2g;dEv4iWd8F#?m308gJIvry4f8Nu-k{!tiohn5cEw>d1q2;)Vh!n zEMcu(H%chkX1X}jRgo!lMM@8KjPZphnuxTegz3>)+0Q`xo=RiCljpC|jW&=dP%yKjQcSKOA$z(!OW74#9N}d-lng8_5{!o!!N~l#1xoVc`4zT zugK`r@-p}q9+#A-yNM{R1mDvyx#CZV%OCGLs!8+-K=dADs+0v(3){N8n-kH=znMRBM)!q7{*Q z9poMf=oQ~kH25?=h<}gg0v1bo>6cI%_)be;BGiDH4cFAPodv8<5OtsWD8?vCRL}mS zj6W#-oY%ki2=)gla5RaYk*esRf|*!RR|GAtzq{&{czI`2^xXZNy!uiPBuVE%+yX=? z-TlTl_+ytIXiG)R*YZ-|D4sE5sSJ1}wk62?lrS}q9y7)nW?Hy&P-$6=gde3eJ)wzvIc5?V_&4Aljl6V@(b{fGO?ijm6c z)J;%$SpLvRTUzgKE)|RFRsUACisLLtd%4nwt6k;I+HvKLQU4tld0&C<%Z_WoyIioK z`I2#}fKkh^KBi6~R=D}vHzoBm%BmuibvK@?GTRL}bopr>Z9%`S1a%nC2$fIRLGtua zRh5Jp=2ig=xkf%X_7IW!I2kjn)CF#?SkX#r*B+I2wgQ>#8N`}p4ehw&J6pEYKt<}` z_zm*q!Y;SQpv$kH4!=xo#aKZ^&#=g5N@?u-R$O=iVwLmCN-sX}Nk;&~X7H}*b-BNj zvYMVnV4#Z-H4N*`)-QpjprNDbg%oln2@=Qc(~~t9hL2!%=~v9c?|McA$lmL7@!Zoq zCZn$8_F2^?Tp8@o5Z*i89W^IpqH3ayldT}_t z0@S%#ARR;O=_Rg<+zv`r{B~5@2vY)PPDlIHlG8;ES4awsKyh4L^_a0XZL`+>#hPp^ zvci}>1iOw_;D3>jCnp!M?ETF0HstQx!mgTADZXO#lRRBmg9pB8S0*W2F+7h}U2pcb z9xJ=-EKj!Fqc-&Gilp7aQC&-m3b20U2KmFn&cKK4>LMUFygUc^`Z4km zUV~u4Y1H~i^U?e&@H)zZ^6JX<4(BV!)MSrOyBVJ}{d(?`b2DWxiH1(pifV@cikm4o zrF-~%{uA~1=Vp6%vJPXufg~mgks%>`+u>;z_6u079UR~#5ZsvunY$9Ir)Ddd{LVh{ z`@RJXDvn!~I#cXV?(p48sMJiDNO<0Rb$Rc-I_+{kO?_lr4tctlx${A*(qk?%6k^EXZhPO&-=q0${N{2o7@Z|kyBHEQ6NxkLf_*v+G767mb#IdD9&r=tC zC$R~oUXjinxe`|9P7?c}(emEc93EgjmFV`t=rt-lDOtJE$MjP1WYy3^X?MG+LX~#S z45O9}%kZ*GM}xL+eH(fy-T275Pjzd5{MHcP0IjpUX=3)wUt`+ew}j0M8?%d9G>bNl z^D_D#&-y8`k2RrSOBI)X8`^9hn5mTRodH3f3D8ToI^R9r8Rml3FGMV_Gqo=@q>#2I&y&*PO9;)qjY13a)vL zXR2i>=Fb5oyp81(6V{94Qc-Isvb|O5hjFG=%@xD`+DU%5?eH%#C%i!mqD8!oB)LKx ztf}|}$uGj0CTGxwXSnGo_OA8)hU0~ZzsRB(!S%$5kh<^9X4*D5Ho(R~Q1GR(S2Yl^Y0%Qp{ti8qD}-eArZw%e$kHog$^+Um!-v-p8`_${*VqcZ04l4b z$0UhiqA_50aI5AG-grfUP}JB z35hreAKU~KOM%SP?dTC%aw6#6A#Hs0RM)l$a#Rp02bVMb`$2-AttY1Yj{E)?8K<_o z&h@wM0Q~X+L*d5vZ%@sTNMdkUwRpGoH4E52lOTI2@_9q6cJYN6m%%I|IIeRBsyy?H z_^%Tbu%$XXN`9vPpGOMTg7l$uTw;@@(fXj^BYjY9nfoQe;f_1Y|D&1NQcMHt%KAi4 zXQo2#dENelOM0zK&#yo6-}7wTFW5yIc+d8*pXR{GoBi7d7M4f`NEwoB*j!c6b)h1- z?vy=AtQOUqOJg6vGey;E9Bj)%-YO%pb3kn}t}iO}E2KBa#?bBqagh*znb#ahOMd1M zGu{KVYF@3}nQd+?y{Ai89HsGU1!!e`Kj+@+YBIVg#?1`M6lcB9?Emrp0_o3#X$geJ z&cr)hKMpFng7ga~)dYgCO?It;%WNpk<%<)+q(L8F6@WL_=TOLK;k>Jjjg9!-7|>l+ zk?Ge3J657ka7jx0iqgk%P>;5t-D-4EBqQTXRiS+x2ekfY<6$rTLrLLyvwixX;wfI` zG+`bWARy*R+Sdo4;u|Wx8_FbpzsMf*t*M#ehRK`xz{%#-bCLshS_-tBinn#L*OoKF zB1p6F^-s1#t#isc`s-ADb=Czd{r^v2_4_fjV1k3)nu%3A;K$SP_xr)1(v4FLxl_JJ zy`KGWu?1^p6KJ9z=H&>Q_*WyO{c9JepSG%>zOEoR8*cVW@pZFF)LRhX$C*2B+1u<| zk9nRsm?d$R`!qGWZ#wzO*3!cLy-U*x!c)E7TxY3Y!-BNM0a7xgSwI`>sIA@8ruj<8 zysyt*?Oh1R{2BANe?2Ti+a_F$o4nmAQmPMwV&oSEslOF_PNV;v(n`D+#4w0nm`VJPSHm!RE!HAI$c}86 z3@(yT(0p+Vbm{}yPQ9iQjzS;2=6%UwkjWz!LgxheAI_d(;HQ<1Y&sSIFIsy+^S`%B zdM{MnQ3J{dNl{?XbE~%HBI0_jcP>RBA`ZKi`NIrt{D}AaXjUreX=zzr5U{a3=`yGu zM7&!$6rIuCYZJskapd|*6?`9JJ8Yg1EOiwXoYoN`IULf!3x?I~=Wtu`-}o@FNXziB z>wFTpeQ4ar2M@2ob7(oGIIG0e(ZtczseA84d&j^RjW1uUyBs&SSD%mSvPzVrBf_-* zMrHVOgSAM-<44GjeFCnq+}DZN>qr?FoN&mtS}D*9v?x468kX!2;4SkWGA}|dZ^i{#$RMadVD1-Kzm!^_mbb(TG=DPDj@AQ1ueL#IKLEyZAQx-C(mWAD<%XUXHk% zt5IfRRjJyT0nal{9?!-q*i|0Pi7t_3IPb@D?!jZpz1OJX3TsZ~13priLcVOJ!tUxa zKp1vl{Iv1l^I{fy?Te<9TP4#!3lU!`Lzxnb9^PXUOE9W+ISaT1gT zR70=8tW=aF!?qzxgBGgsm+kqV5uvEM6gFDQ6Zm@%%-+9a`f6C?>HZ^Z8d3$q{el~d#Nx+~k>>o;*8;li(hwCrzHGq)>YWhqF#`ODw2 z9%=(u8xoC=CD!_>fY#=*De*C=Q2Z#=4$O^T^%<(K8H##NmWwt2$ou-UToo>P1GlCT z(W-=--tqv2m;KWpGlVo261H;^+dxygdI1+|Mn!pEgEeHnxj7H z4?7E<2eWM=D~e7SVmV=vN@HVE1h(Qcp#-0(W*3pH;|7?Su%ygWcaxUpz>hlgP)gg@ z>ZN8x(edKr&*-4P);As=>f(_(FWPJ9A6n|{=QzPvBN6KwweUJnFGUyV5F7{dB3mT8 z*ScAj%5ogy!li^DYU#ky4yuWHFmG}IrAnZ_C-76tfm>Kko|x=Jg?Q2n0s12ZHl7u; zO<8n}iHmesifukhIze&An)@QA5TS4IWt(v?T{W)|EKny6jNo|O(uO!>mEF!&S$Y#^lf0;3YikiawQBs_9Haa8zWPZlBdbQb zB$r%8LFZUjG3*B6q^i{2;=I+EWuHQ<=glUF_whS0WT?bPv^%NG6vqb}dbHCwjFzI9 z=Rd0{uYDK^n*@uZeh~K43Pi+r0d4L+%t(`v5N~CJk`o7jrSek zHbTv3t&EtsF4D(iisTVYR0rQTpNvR3dw6u3&VYb!oBs@BkE*pvnhMru!f`u5esEZW>6as0(8&?RcHL z`|BjiBf#P6e5S@SKr3jS2I&jmRvr%duIJTqS8moeChGw=dT-bnuOBq0jv%8w@umz( z?=G!CXue{0ix*dXQZLJ)d4*~FE=)g-?uS92wN}R2itYn* z=EHn?4qr5^ioV>igAH(PwlR!q3hG=jrx8Cg*{uYL)py|a;&x^Ze7?}93qu?k`lk#L z@5*)>q8>vB5s=4ud|lRZ5q1X(*BP2t_E)7DwB8OOoW+ZchdgZ4g+J~4JM@Y)QsN?p z7tCck+xqJAd<>C{-fnuYx>-C3aS4m~e8>p!b{8EmReEHJsfp+?-t(Qt9t zi&K*ztnTes-!DiN3bvN5bAYnXgBiW8?>k{2hbahv6_0e zh}EG{hlHUB5?wQRcmrtQ8-}k=oi~WBsl!u#_+Ag>dR3GWJpd-~s@*7g&yw_%P=W_0 zr3eG$Sxn=l_#vPn&Y`@CBl95$;1cEr&N>`x7kkaYi{ViSl;A8P5fjtqR^yx8 z3WE|kWEaT_)tHBI&|(U(lH7~=mP$Yd>ahn*<_QFgjF}^meBxR%f1)9szLIf<^p@** z)5DP$p)2r!y?zVcKmF8B{Ua#PxLfn7R%N$quuUZ$z%IwF5^W4?Cxh%WXL9ihi5D%s z8eYB++Uk+HC#SOTL@CTL$E;wx3yHFu_PkF2@8J^1DI7FQGWdsYV2rE3u_z@9SK!%g z?Yckj{&?;#lMfEfW4u^}t7j5#A73d@Y|P}4^wV01=*p0>vI-*49n&ChICcHy{;P97 zhV@+!7vQNWd0KjRS8nTNts{MDVn^_|z%_7HKHh2lZtc+yT<8I~Ldo5dm~Th|w65I; z0jt=_m!$!+V&g|irQ=P~L@*Z8v&XqgtE~?c3!F?Lrn2nY+2|3orFygp2jx!BdBuR- z7RP2f}t zIe^vo6EyIZn^YAs#V8)iuRV$33dK*4MJqSHJg>uEeuMg1FpDF zzgHiptW*0cDPzAdc$r}xk`Sd=mJ*U3d*8dhE;j$vAdo#&J!0?c~aVK8M6d48~`w+-f@NKsZEa08!&O(bQW>SGi*1D++QvL)>R|0nfYit%e(jUBq1M3MD@P2Lz4j^aO!bZs2 zB%!6VWsfw>ozL!A+BTRI8S;NEkZH+I=D0;O`Jtdkza_~kQRzTI^Tza_!r27$H|p%OEQO^3mOQ;(|&owd~X-(2QC>3;?v4zA(qm(zISnqrL`*1 zODrrp0e;!HhbtA=?_Ie`{N~~T>1E4=vovkRv<4SfUcM@SF(kS&)_8DPdtf5a5aEx@kn%GV|;^-(Z*T z=jxSs6m@zHp6!L`kzA{*uf-Gj-VY}_EWI4`m}kOR zCW<)9FOqxLd!-JKBqCrJcC{#VrmHO`o=;lMO$z2b&4by0x{?1?$u!}kSQwIQNMtIh zzPxh2$feLl|7A)0Vt8Emr%v0)FQnLC>O=|>-MmdQM84G1DiTFZ2KGTQ3?14un8DJK ztzhEHS^|k^iM>UZEG}FerhY%?HePvMmb#U%qJ#{)GW{r_F&`d=Z8&OB#xjTG2paI1 zdCfY~%#uHJh;r;-x!K98NWelabetVq^SBf7Wd1hz^--|wIFCBU8DnAujZk%^Bhw$a zHOJ64{boa$Aksa$SPZHW?}86qyLjZ4b>N6@c6XvXp*|6~n03XuuFzs#s5O;8)$%~$ z+)MtyN`!ympuKyq3F@+P?d8Pc-1fa35c948iUq8c==D~ zF!UmSbr){tzxIhgy>Oto5`#*n5C34!q=aHAZpG~}s18cD&QsxaYVzII9VlPo(BkI9 zqth$#oh}8((>*VzlPs61q=wxNHj_=?glyJUbT+_Zf#^d*&-;SkSf2> z#=)<3tcc(fP}8>@Z^&m#Fk>nj7CBOR?ELTLYlqyt?iIx9@WBC8g@$I>7uyTgm$DH^^1&tB~xw%;a!v%YOImptI}>r^#DUMjiFpJf7OvTxJ%aE+K#{nOPJzgEX|_kG_x3upNPWro zo6i=1+dsF(`hVRyZEOt|c|m6@YxGCb>ws84- z(8eCv9ms4&h|Qxn;02{yep$KyYs>igWwsmg-bqO*8JVQC^8H=cW==f>w~x?N*3Y>9 zx2c5`q(s8{PF(svTxTEIR_#>ga*UM3a1;|X-#}#@IwL{AEVu@tZsYIDD0~-^orY{r z7axX0w^vp;44GN8B2Pgj*C^c^WyED&N<92lXQi*RMd}sCect?d9+3bL(h%22i$dy9 zzpm5JMD6w?eGlhUp`1EaoCCkDr9s5^!2PjVZOSlV+es?kJAoUuCxThpvMktzuc0x0 zULma|<^wF}Xp3tmiJ!J#S`bN{YT>T3N4P9fY>gp1?>2@)dTU!kA!8FW)lyjHn3Lmi z?EEmp>Ea7R`%~eBiHg$*-NYBgJgQE>KWKJ8Tv3l3X*I ziFrN`J@Rr&f8YUoZlS7HeSw~GJTdNhCJbK6=-k)4Q+Oe&rvw4Y7K=AZChw zbcL^C#@W0&B*LQZ%}t0qOhe(oRC3{^E`W2Xf|kAfwtTOv_FW8Jii6yoi7A(Q@)swr zmWmEJAJ>hs5?juVdrc|az9?`-rsTqq;PXG0Vbx+dDMncMsc>ghF+!iJbHnH-zZ ze7WOXqVmU_X1WuM^7S&$bB>ul#OF4wja__s_a5XLjKv{%vEA++xX=n@Se5cxr8ep8 z&IU8*w7=_>%V!t;x&bPWaY|*4Myf}RiwgDLxmbbaWO-%Wk*mM0Mbm=u#_inOi=JnW z>5gmHsYZE%fr%9m^{xvOjGhV5D^z%Im7RdRn2HfzcUq=fPz{y#AKtC_5^A`&ReT+9;7M#8o`Q(9wK^yzDCbx7Y2h|@3F+>-0AHU&a)H0 zHX`q4MwP)?*H@gmJU*+?TY@E)K$f;-^_(&JR5gwsDdSgZW`fCBRL&ubiZ8I#Oq0K({+No zQkOg6FN3!d;GZU1_Lm;v|*Y~ zKu5VN-`xoL3x54m-Tm#8bID#JPuZ!<1pg+5{Izm^+@YVJ3q%9vo9NtM)b+pr_t(Fu zOaor4dGWsG|7nGHm&MzsF%nr}ADCXgL&Wdi{5U6Xi4l@B|7U%p?uxw}`D#7j=B5Ah zPpp>!3Wx2PqecJeH}(4+zqkw&g)jT4dq@95aex2cUl%G(81JNrzrF4EtY3W8JbqHd z5q1DrvjZ72A^l)0QpCRy-22;I|F3I6hb<#>JHhyoEgYgwaD>`I;eWTLk42(o_O0As3XiS-^bgER&e0&hM1Er1vFcO$-?mId!wtjZ>WPgv^R27rTT zqi><=?ZhM9;@dkIQ!GRtA3@sE7Y6~6Z;|367vP3d43c|#o%=%y>rWit^Jo>{5zBkZ zf0*BO-NI8ON#Ncj*r|=>D0As|(ykEKZ;pGr>lpZ*%9!gbMrLv zwfTWQOBh94A@d7JdCg>`+w8Ow8ghFhMgzQLQwc|7AV|N0-BFZF2{@-BjbMiGmQb*} z+OqJY>^vC9acnq(MeXc{0nBEu>mo?H^4sw!g$#b*DImsgeU!csenu+P@gpmkh|jZG zbMe6`8MVL)sDcMqJ#0O9MX)XfOs+6wH`I|H`bQD|v#4o$;C1;yAD=UgMvT_eY@BJx z3}DNw`7b>EhL-WElK(~2(F?t1ekQ7T@#JBp5%ky#z^s1-5qKUHm3WxI(FvZ4==?>Z z_noyaLx8c$AF>9gyw4|Es2&lu{5|6F?-v^RobD2~472=^We( zz$)(Q@}m<4wYpRD*=L&*5)W{k4`FX9gS4bf!k=Jgzsbyghe5u(yvgEA)f?(@YCPMmVk5V8H48=0N8Gh&x%B4iQ!= z#g}%(`4DWSnZ9xA^=+NiE-h2)gE#Jqi3P7QCT+}M4Luusr>HZ{#7JYG6+ZwxNGa8PRda=_;oJ?y;8shTI|PxP8Cy>&MlI^tE~3JTo-FN_iZG2bFRK;#Ly32(@l zi8+DATYWO37YSFMdI!>Il39l0^9}%4nFq~sF8xNzxmEpzyRP_eB1GD%;9Zu&0B6Kn zo0i)dwyrfpF6<5Pl%_sB;;AM}wxH$texa5$ zKYk7|VBk6%&huXYxdzxqw?TX7F%SJ~;fuYK5^E55wQO5R#cwvO)xp&pWTXGckEUHI zQSeG@IQcca2$=4)6YGocS7aMV+#-(XSqF4yV)1IKn5Rel7u%ff09Z2|%mb$bHQKh5 ztjgcBj!d)_IDglNkZ6ys%s9OQ1`ibs`1KAf9Q**hQsYNg(_yG8y;Yk4=gb$^R;Rh% zFC{(OGpiJz>MRof&Pn=5C*plqA&pJsDTU$*ZmrPsCy?q8bRYq)AVR39mT&SerT=W` zzP)M-Z0yCAUC>PqmF<8e2#G*JT<6vwydN)wQZq!jv|%k@bBtiv|iL!818{SL_B z9s)Ea;Q4Kwm17mHBxs9nW9b3P_W<1Nx>DxGWEWqXxW(6rL*gMeAQqS=- zVvdN3#C)(zazN8;fHGrQyqLcex|I=`eXt?Z7WfMfcf3kq%JdOcfS{utN)<4pbC?5iKemZ6ttEKMx! zeyPdbUSvH~sn;!){Ri!CqT-?C*2dImB)%S{q1=n4RYc`4z`)osuqW^gXqfwwSusBdwCfC7(0VnE)#n`IDB^oaN} zaSm~GkZq_bAHzDl--W#)) z6*D9g{(!fKpoo1nC3<;abs@`@I8lWieR?dm5-d!!Ue*d&5BAT2-OxP9+E=+z=%8v_ zrd&9U23Ld$l8A5klDG2I?IalyR6$L#g`&ljPmlf*YREX1s zX25PW^3fq|mciGSy@j@fGeV0rUj;Y&VWKwLLcDG8FYx>6zzH6opV+s;1mif~s9|Ts z%_b9w#(7SrY(`{!L*LzD2n(gWG*gdaTXGAh;wjpJp~GeCo*^WZ+*Be|LZyE3Oi2OS z@C~)3V`QoX1My>?;}1v4_BUvKHmIV97JWR*OIz@&5ZId;wME=D65hB1%W)nEV-sCk zRJGe}qy6jE~xiZsz)N*B!^-rfwLH zN9=L?@#tjj<{9_jV!rivpDpT2?M-~xIZWW|;>tR0-y0Qr z-y=a(p{O`MioqEZTcX=DQxnzSK0Z+>`qJ#H7S1!mi82aW33akH%c;9Z8L@tzOJIvQ z<9p_j#)t8r(Gg>QI%dZ&w`>eqdseldE=e2}@t5r(ozFdx^M!!!a{)v4X;8*d0MyxASf$Y{PC4gtX zm<^gNuGUMYV=vspU6ZO#`-y<##}h=wzn^)8{xG_ya0}0qSP0W!dOMVL=_d#-%-nEZ zmhB;w4l=VA{_6%vh&1!ob7z`>pkGLM7t_a{8P*ea{i8lMZkJmS7@V#KVDMziYyx%# zyptYixjHC1)(3J&^bfkNHMF;|*Kn@f}R7>XhSbB^YcA zTwN6q=^Q)lDN*e*`*M0TtZ}vjT&)1g!23l1r=9)#b!bW!*AP|HETeNr#3UFL{ihxP zSmW5_yI|+jeHdded8r$K@|yv4mWO*rf-KV|Rgcx5UNn)}<^L$8qjVGHkzW7q4$x>( zxw3(UHl)`L--l-ARxCFg6ey6Ss`2hxdv|x5+=%1kD=K92zVv?O5=TqLmv%4Dp7Dsd z5@SP_mFJfq2>BmAGit2#?YIY~06YN)_Pl(28F(ZT$vcrMT4SQ6E=7d`lUE!^aNYk{ ziUf*Q)UA{(H7Ff1C*CBZ#+%wje-zgiVJY;(c|JUuU4B>5tMuBI9v$1Q0ZzB+n*$pf zJAdcQ{BDF#T}eBa`uwGOWCQ6}kwEY=NnlW<9ELLQLqLysBp3z1{M4{kw40DcfGtms zS8Gpa#v4f^>muk+#?2EJZaaYNpK8CH;*IFy zRfIr+$v!RmSln3D3Z>L)GN9}c0cUd72R{JDZhDEUBVddCWaJ_Z=6Z47*%6mXU?a~V zZm-<(d@6LFY!+RZZ!2w=+NteYdALq4P^jd0`0!gw#r$9?MA-16D_0~Zg4tg!_BB4Z z$R)1^Q7~nwVHx#GANykN{QKq+%m2ZwMw&Tie06gIbE;O9^#IbmxN?q_o!JN7vv5^J zU}<2@ME<<1<3>F($5OFzu=r!8>|@6|W%+Pd709|0MPR!vFjh)nxNC&oZ3weDg~k~Z z2o10ll@-P(xN)3}lS8Ba2N-WEUhT%QYLc?r`!wbp$16VDRDGA}%ovBIBO%F(t#d#z ztJjok!Av%Eb1~#O7mcMW$;YUKPNF9-#v2r-pE2Po|HjbXAyRzr%ZmxY?%RiH?_)&v zm!2Lt*9?tl-p|(7lA-exhe@T{BRefN*SqtvTgKbVg~BlD`*YHN zzJnmUjCzS^r*4CQ3)1hHj3UJ_a-kBl%|>CAg25H(AkUe3S$nA*@$S(GVY@ql`a~hT z2%UrC*^sXDJJD^kaS{u8ur}+JQbaDC3)$dKsp=OQC9DA4UUv3=0{+o9D(6p4F&R*r z*#KuV;kD<>+~TWRadX%{7xSa?Ve951(Ix(*Rg7*!j)sPFby&o29p`4=<p8|vj|L8(VKlrMaM-kyoJuE3RKYVkNZc8( zBcd~zith_J2)D>ieNfyg{F79cwvCDhdLHe~q&)BSR#o@)Yp#Ei`&5$gm|j-L<^_Q0 zIEP5LCJXV-EW9NhYVa?NpN>hItAUUvKbS}I8r?OJzb1-;8DBW{z)bE9C(J2X`HNst zq@WRIcGt%W2+z8ZYSfR<`gr)F!^}ADzrp?Xi?bZ5_rT#&^eN7R3nZ*bDAI1IJLfz- z=o=3fRcXMJmRqJ`{KVX)Qs{dxNIG}Zg<(9bfJxYp7)0z2L-%bF0xo*>5oeVtJWM={>-$u$> z-~##$5&8M*WYF54Fc^?tvZq-FSz7&FHY~kITJeu{Q0Ki&in)95Ki72r53~b1*R%?p z7mATAEd0gOSxF|L0*Wbs$?_~g$UV83zzENK*N#q<@>nt0R-t(wt|G0)#LU@N(?z6_ z6&gevsT0*Q?>-t}vw08#c@TtD2MKBEV zrP+Lg%C!Jwk^TjzW-^+Wk%qCC26`apE}8gaxI&0|>i|GWBlQj2Crf0(}>GCm8*gKA%+^KsY&<%ZLw_m|n3la^M~&C#l3%UUIxw)WWWKWaJhC zGSePxK?CK)o|EUZacn|3Gvt9nHUX|RlQeEhClXKS7_#YHh~Msj8Iz=#lil2h_H>s; zc)eoW477IXg3n!E;(KqcOzm9O`aO9VOCf%pLZ%P0-Ngs4EXI?5_*2AsZNA+4wG|bZ zn$BFJl}TRf^pNJ>2%Q-wZtluF@HN^r->pjEGi``21n2J`N0q>%YR~pUNz!Z}WG>vq^&5Q4ke!M;?t4cVGHTuK1=?}&l;fQUO@zNaQUD8Qsz7=w zhh0tf*UiqR$MFDF%z+H!gZ(AuLG63Fu`6VjZn>B^Z#UzhMTJ12%J6$bmF@{6M+y1# zFCvBV{_Mrd!Y9-*tZvDE;cqGuvV_0vf=8_5aWbw|`f>74Oaq#J2{R)KoVfVUl-#y@ zAONo9qbya~vd0ppE4Yx5(LOos9@eEw!|{3%ntm#aJnw^Yb_>S2w9BCHvGt|zv#BGz zY_wZ&_Ev~VIJ`XXKtrQ=dRjQO#;H^A87NS*b zuxrCGeD7*+ZMQ_|8mZ73f^W*-R{(05?NbolmMPYES@t_SVa~1}QEWBPyTO^&AX=&W zn;RsqK?(x{ejfKStlCl@N}Fx37bdUg{sowy3_Mgj1t~^zjZ{I_hS1?VA&IYVVH=?~ zD!*OQe_w$g?Hr%FXaPr41HcBt8l{5wo;CR?XId(t=)Ydvt3Y4sNSW<$NLz{SXV0IdrpzJ_B0K2 z3*k%lqhs~HTNJYaSW}<0z-fOEE#{VBQjA_QBm-w(=#$Ei(x9t1F1I{TQ)iQ3@fkzZ zFu2YoZX+>{Haeeznk(YH$SgW39yD!Ce_|cD`;o#E~7dgRs-4~hrB{Int*2=Na{{*S$793&2`1kEse(*BFqy=G&9PA zARQ*1nzZ^MourpN^YgdF*rb#5;Le>cx1~HuU7KW@oAbMRpFQ|@7Qp%|`S-)+*o`vY zTleNksmNt!%{1tR%|O(8A=V9FC>gT2CREMka8UAMFYdHEjf_PUR!_2E(*vlDT!ZJ; z{@7Lh>C_+!z%MkO!E$EsZ*}uNgWj^G+B%B54FtZvX2e*bQv6!)tcSh1Pk0YRUqcj5 zVel;mrYhhJBPJlmn}RB!o@MEPVTUqVayA#VakMOMJB95=JaM&$+FNG8WktwPegA7L<{>eM$=>5{xAO zZ@#mPHB6tg-nnEXqKPo?0CL^j=#rQro1X^p^tCh;lvt5-%&61RHps4+nZckKCXSe? zX?n5CSi$t_v{&@m@vlw5sx0S#(>$3B6S7T_y=Zw#v63CYZ}r_>24Wv{6*d5JUZ=k$ z&p!u3c0WbrGB%j`E{5Kryeb5PcbqdL{j#zvN=6dKof}Xiv3rJ5*Ho%&HyX+x6G9xe zF2u*#3*1AFK_(Ej@O=Zi$Mn$(tZ$uw&z4_Vul<0I>|LdGYxE^Hx+Y60wYcUtqN z=>Q7V|MN6=M;;RmtH9vfqZtRQ+24@UUtio44hHabVZ>0HiAN-!vAKH$LCBtH`%m#C zf~SlXe}Kng74UEbKS1;LYzIVcx*=X;#MX~m@oC||V^Ir7Ksl%2 zt<)Psy>8gQ@6A;a@ZW<3I~x*O8djS!Lant{Ph9CzvDoU7NhL#%l$|fuyXR|(6xfUTc+*7uCROK ze2-uB09YZ4BB~<_)de#4EZZ-}vH4~T^jNE8vN)PO*j4n4fP_^>v?4{dQJEjF&3Zfo z=6H4uj;rb7T*5C?G5Dl=`^8pr_EmO}GyzEc5c7jA*{gantVD|v5wgxIfu=Gbzsjn9 zQ&AwZ9@b~ekI`nYX&0sH%`O+d-*G~gm#F%x z|Kj!Z@=!qmP2$~o0ODqqQS;JkycI%S9mJPP!bUm-3$z!gCIDnv>Ok0QXOIbw9sbEG zN>AGmO~_IsYw^Bwn3ywY3UCsz`P$9-v4#m$+_LbPkjn=8SE!L=!ox=>OuyQ~auErg z6O&Jx)mvlJkYSs)5np`ocEsWn=e2!rkOo1Yv!LPV3QzZdnW_B%_*0V%&MNp*g>q)p z`EWZY0qrpXa#=PEf!3yL;{mAh;jN6STHbbQr;lEvaCQ(~y^V>&o=Jf642)TU0=%hA zD|~?LEK|`}2nOO8zS$1;5ZixIO0O|7M$_eSJ|>ik^8D+5``1FKhk@EGk4@l51$vZy zK1PH^yjDlK3^lE2MQ>jgenlV{VrFk~29n76KJD7u;1_Eb3lA8>lUlAYq-{T$h%0lm z$ao|YXimjUj<{P)j0-pq7et5Zz3)Sx6T+3f5Y|Wv1s!L=V&CngG!(lmj3u=@!IY_ed;D4 z{|+vcI+F{QDSBvm2$xudThI3&O7a~8IlkzJOfrT%db&?ATNsf7JJBLpb%prh5lksWyt)|v_`6xA@xLnL(Sg?>=_`VJrLGrns3Rz2c(U+6VU&fq1#X&Jp1k?!m{Z@?ME9q-kQ zZdQHr`qwAIE(~2_!WLuyX+C4r<3Lp)AVb3CoA$CT%}g2(&!ZB=iBO#aS(8)YG4xKY z;79%X*djE6y(pYC)DEicl#QI8%hu;9@;NBAYaN53=j|h!c9k4S@5j^r#pVlg^^xJ& z6iY!C@a>q}Tz)KjZ~9<%9-s(|C2D9z{RwvDGIf}OA6V~;yYK3on*Rb%=%LaaK^u+t z@C?G{2K5Fgy;|Sr1h^gE7FUxmLPWin6Zs&&i?0rp;vMI|*kH4@vnToQRWTH5z8pl{ z|NftoglR|eA;J=P0^VM_!f=6i`AUB~UgStXn#v>P zg-WCUy4RvuO27iB{Dxm77qrp+juo3zn}U@Vf|U5t7)EzsvB~x;xSM|2x`h+_6oRt& zIS9+ZvHfc4RTP+3%Oo2RPxFR+lv)Q7QT1HG*1Pi4og$c}cEURuy}m(1r- z1nNUMwk3WRm%kY#vIs;xfyeei*1id_ff{pvaM%dd5hp~f*ObaiKRr}aSNVm*gKdV~ z11N!%{bIIX-2m62B$)vU8JfAV+DXW53dytI!J30iR%}`F;Qin|WpBlF0P7u`$Q9e( zUd7)Yi^mF_h=qz9_rHU{q?x~~h?QP@s0laeG><%o!gczq6m@K1ML=0GXNBhbV~W1$@J2)y2nm?g>E zksqctweoxagbfVnDlA9XZE5J^(s&_cRza$Ar%mL%szGr z9Ml(Xq~ONLX(^|Sqb9456F^wTaRo#G349&M-G8JZy{L&uCb8izc?BszCUnPvUF$2P z+i(WPsOwN9_k6G?DW3oaUR7i-k@3(C9L9Z*KyIZ!^<%-(fkUcc(3|rcLVY?K!fD4_ zyKzH*z4Q1#Us!C<*M9+>#SVz|k5T)@!mR?I>amJPxmE z+Kf5vh*)5i9HF&Tek(Lh6eg#h_T|GcNbN}?X2`(j@f8Tq>8-%geS(;`ikBW2OYvvR zc6%WOY=YT-ua`+;(WPF^ch94&LK0Nyj~+K_6t6XU=_gV?qoogyF16Am>3PB7=HQQ=p>gYq#dh-}6c_vexE!bg0bQGA5^>VV z^?ns>HcGcTsHBNsbdkAQ)tIRtEgZ=NUiwae;E{r{JCp&3sm3nu>H_r;26NM!x+#8l z2z0q@gQ{kxosEbO{~AZ5LK_8z3z&7r1X-Gwb3^U#4c`|2;e#(;yC`@8*nQ8qJ{y~8 z?`~}#u|go_YoLPrx@GiP6FXThT0|V~QRN77buzZZWC+bJhSSjcp|(czHy=03qdW>Z z$9Z#qwq(($1W1f(p{Ij}u9!Z>#Y>kN4YFWMCjOvn|9R$TL!%WABN`5j>-UP^3@~Na zl}63snI>2OYtr7xX%Ns;#jpVf^j{APLX31p7z2*hD6;{ya-}aRzv^d7uLn&LtO7uH z@PiNy$@LfWp4c30Nd~ggUx%xTx@TZq$&Z?ZRRvp-$>-pFFM_&q{cfg1a1r&M5xF%h>JKBsKe-x zhY_LWXgxJx$&M;zAck2;iI2NQJ{vOrai#@A@xB$A4SsPubeM1WW(>@G0pCFbj%mgi zP_ulQGtPO&8ht0OM&}uZ>YJJ&8^(Koq+0LxP(ip;r4kzHQp~fEsES1SCyps5x;N+R zN8ZZgId+eria8B+83`-7giNPdagt#O##o-p&}+lN7IP)fCHJrju|pT=oJ+q{iDG}H zS%>+JuC_w?KNx`zY)Gh*4f{e&IsBH6!YDKw)%)pVE#MHEnF2;Hfil@ zrPlV~pjuP5UrqaRQZ}Z1iq;&$911IiYmN|?)^IbtBHNERv4F1?1gwPK=EFQC8Q#zb z*z=*Rg6E1A;454XlKyp1H4ZDi1`KPEXvrijKvONa*SX$|v^FSl138!$ zt?B5&B%NNdrFYxF$|FOycK|3< zXJx{-{!6LWQ@_wx7ZT!bUv$D2{@CvSJ$tG#%4z)oPhZ)G-au8P8bbPzF^_TR4v~(Frurx`U~sE(;XX)qxY|+grZe z<-PZ$OeRFCy}tmXaN-AAI0ZE|G6Z25f3$0NB%9Zj$sVm(MHA%4);P5uTJ92|tqWPv z<8*_*<$Um*f=t*Gp%+A-xHJ4fTsqAh`REV8hsc(+fgCPU+r5iY0HjHvEkGtStfX(?ucV$FpTypI z@%L8!XPm&)c+IZhv#{7h?>7l@7`D*QKr^WHER^=G8Y~03v*mpORvJL5z_XM;1&-o% z2y2E)%*4^2(38$`ek@*c`MSw^0t9Kkdm_|llL$MRo$|>?fG_s?QRjW)ZTL+KI3zXs zP6+{2-}y3d42+TM=qO4sa8M%P(0JM9NKP=jB&r|hhpHbKQ45tBe)$c8wxU{HP#vh$ zPzG$^G79;)sGe1kZYJLYuiU)5;UR(PEPIvSS`==#EyTOb(N z4H_WUuCFenEW@l=>xCLs!2~1yWVowChL8+D-u?Vm$8Wdd@DmA}cR4I5RS8H$OuX;xlUP z03-eATb8SE`lyqi;0*Y^b_18)_mN9)4|3VqKy~{oi znnqWDUV&>hUyl*iP8WD;VW{1IP+i+`(_~3$)=t!5ENFr2x0;qxD@t%Hk3E z0jh^)ftvI;gtk(Sx-Li;gQyAPTqym2Pap125LD_5!#AF@&2l!$8h5T|E5UdJ7MtLc z*+Ns)eqeWkQyNLpK5TiAvm69sI`+29US>PX64)mp3_b?#E;I#J0nE2S+xNMr)m6~V zNs!E(Fc(lr`t{_9UoA!R`9B425tH-{@|;CE2`5lsspwy$}9 zAA}tRpMq=G-tNtl8kw}S{5Z*Opb&%?s)2wQ8e{>LnkeS{zO_}H+*55~_hg58fS0G; zgKId>)|BRo4J_I##|cF&Mx5n+`qn=^#OQueRtolGIOaF`K&)E%AFxsP8Jo06{)86y zmQW;zLGpT@_piwzzOVpBlP>_X3@(g+9{SVh{NZQPzpjOQqDY@9KmjFpHIs@>weigV z$d!T>2;OzuZE=znVAPq5TDHPuU&BI%_L$IwRZe3;ubEL*^5%z+pEJvPUqlv@MyCtc ze-WsU|HP}Ls{o2)@T^K?%TLz>3S5D~K&DtNQSI?+Sw<0+627h#cAiL=ZErdO3tMF# z$i8X_07sK2SnO=KD{n|+_bmI{N%>5Fk-voh-g7!acndoX@;}sy%BA^)ZR@jnUft-V zjxcXpcxBDXU+w~~Q4S-)Ba9^j2txUQj)ZpSALW4m!1-5n{>Y9@5*mP9gwe7!(e}0E z1%pynA(q7*5Vq8l=>B#3@ka?Xjn+RI5*#`0q*5;6tO%sZ`Hpza9&hwW-McmPQIFN4 z(6Bcqyt{Amtv?U(%-ezVoYG7X`YEn7M`B>u^a#vH9Dd6=og7@AhK3D3A4;tGFo(zJ zFnin$GSEDG^VGXJ!HmCx>U(CG;_4Mm9iREXiKHTdOs;AJBa#9$+pzG(A<(v8nS1|Q z?tIB~)yRY`LwF6L{qeWtDfxcvr;jP83IF&C@{)(_jDSau+p(J%&%V51sM$ein~SU6d&bB46Xla-95Iyx zb)nI4JBjf^&9nk;k{lH+w_o4^t6e-(ziu@3fjUHx)!?%dbUD3{1JixLrN1eyM!G2{ zZU*K5lKmEn>g%&c@f9cq;s#sq+uW~SO_Z)`!Zrq4%?JkS_;74udV&)Qd18xE1=kgn ze|eH8dvAqm?Ue`(IBZ$(DwL~#(e{A4Sd{rJg(ewuX0Q>>=8>&$T9%qQN^_ts^PQ7_ zSP4VK5{%OpGQ!aX9KJL&0cjcB5;hvM4%6827(}cE74b13)}*Ko2_5V@TthUZd0JUa|Ti|A7JgjR$BDyb}a&7DKFwVDe06m62(ls>x;sge7?J zR_Cr=n1KgZwx1#%jpXQq77yTg$>#(LlPmj#21smrRlndmV2)~=$`jKGg1WbQoT{d5 z1J6N~UJc~u84$X)421h5xLRtgmP(+?J)H|0uWcv>10XdNGJM*gp&@Fc@m4ZaJxn$34aQJ<})L97I$k^iD`ARE&L#s!) z7_d>hu9E!@(z<(t;Hr=FtpJ|rspClb{}j<95xism+r)f_JOTw*oPPT^<2^b+{sc;w z7PgRgJ7C!uTD+*RkpL!Ur*U2PM`H2jsB{049-ZmYhM?i>`{5({vV0+E%mFqABGr$O zdFP%2{g;i#H+8I5D`3J5r9pq+(+#J_|s4*_cA$*?+G ztxUlAX&Q0yq|<}>Y;cX7EJyM4}+b!yr<4 zWa~>mb4^GXvdaiX<$Th~U=_d>GQ4o6{A^q_E;wX4{1o2l3g*MybpVTbFsa12fmyl4 zOeH->+}*M}@Zqnlg0ID|rf^?Sh-eA@bJX~+uSrxIxn8g=GNxvTxz6R17&z+PxgR%4 zF3e<81-$5{2o~H!urFkl@tV-bv;%Y2a@!J!5Spqq{`iXNmue!x3q&v`sAAq3cluW3 zIJK19gr2l-{1D^GPG~(C>Li;(5dwugx<#9iBpwiJOQA;fRXp|TMS`2-cgPt2)N}3- z#F@{7kSwn$E}mB<9CTL~OebL9uY-JRo}6Jm_bG2VzndmlfCuv!m9^?}aiIzF^^_E( zi3Td?+!)oo0ed=CeMK3XexK*beXak5^Zwk*A4r0Mo@s1HS2>;q@(GS}x>H_#Y{wYJ z7FIh&$406`MdVKWad7Jy0T|y-_2COIpX}uSEy0>IQ7-TH<|=1dX`9Ie@PE+c2?6RC zKCiVTry0Y$##B`G&vEy^IGKB5$Ra8UGFOKq`Qm-8xwJsWvgN~FDf?d^$$$K(-YDwh z82WF37(XX(1svBCRa(CSD0kwG4FBVQyRZLoUjF-c{`K3Skok`@r6bq>{{H{+MdMxN z*W-7`9*X?Q^8H_*h0r(6--GPdr|+e`9@qS1ar}S%Zth2@n6zb9*OzCSWCWFe{Ydav z`R)3tJG||noHt-FfB5)B5rjsf@a#G7 zE~1X&aZ$hLhNgPAHrmNeQmg?cHcq*wlYH3Q(9XbO=^q zq4{_nP&{dHM?C?8POax;)Q5b5^@sK#y51Okp9t%{EUV=m%iDx{LB(?EA2?l+x5EAM z^_!6K^@6x>-MgP527Y7x(0g+v*vc>+R>@h#eT@X2Xcex%-k?-cWWxNkRHpmV(~<1j zxsG7^UBWdADh3>tBcMB>bo&+|c~)c+=+nV$b24hw)C9 zG_z!DAoTgU6>mjy^&qOpW_+lNrr~!>wQ%8o5%(pd1oYf5;Q47^TdGFI(q&ZVqqB}w zTQ^8~9@c=&C(W2R#bJ+HjNKO@4a#)+U*5~6QoZK{*2QxR+QEAT=BT4|SYZYv>wmwW z{K!+s9WO-awcBo=B(RRZ`Rj&RphJ%Obb}Wil}Rf22V=4{-U<^Wc!!Cs9xyNrDeZ&1>CFTB&P{8yFP^sUBYuJx zPNLp;o_=njeE0sNGw}KJre$}NK);9K-G_dEjNMS0RIhLS)&2fG>Iwbe|NV8-5#L6# zwCqxP%?V>ZlGbcN0dIbaeB*iM(YFHUhdBk_8brZS;5TVql`z_Wh}#E0mzz&M<%=5f zRy>KizIRHRoaj|){Y+<7J?f^DI!EsR-$f4Ddm)!}?Zdat|GHsIh=~j<>|bW_TfCSL zfk?*6@rRBab6G)|*I=!$fy`tb^gm~74`jK7AMn6H(VCPC04*T*nGfip_ki+{!14Kk z^rGn1J456xE|MPoO6Zlz$)L8!)9nB+@A{VsKq_g=+<*56y16F_{M;#VCRBg1j_){7 zeZ|GW=704&$E_J-OeF!bGR*=tBpo>Ze@X!F_eZgLpiui=kfftA^&U(V58l&XLAtW0 z5cE1QI@N-Us-Qv}>%Qu1@(Yczp}|y0Ir(}E23e|HnqJ&?fx4uDaN@VPJyar6OQ6>o zH|zUP>&!h(WLc2v7)Ac0#6qzeKt^?+AJrL5T`wIeQvsjS`stFK0X1q==@(*jivMt{ z(^CPbdw*Es{{K9nSfEOYaNH{e68WR;8g4wY3w3Wm7JdTgKc zzN6>zsNc`GxWYT^M~buq;9HPi+a`4p^X1$%cWqH1Abc9L@5^29fCz`!Ut6C zs+pBo_kpmYACQqN5U|w~RnEq$8Q_DIv7#_O1A(vSRe?YSfBke0xLvE;DIHI@jdR?h z8kLPPh?+$90Z8BjnfSrA)JJ{6!9^V$ibeJnP>sO74jK;QErHNTV@mu)0P>M9PYUXO ze@*8(+by{CK|hu53^LfxS1&DzorHiq;Qj3~Nst3)d{bQpq<(2%+0OG<0>iHNfr;@< zJhLM5E1=cw+VqPM*{9&&=Px~~n!N=Gofc=H({KS;4d1~IXJHv-MS`Q*VvQDP{m8A` z{jhdfzLx3uv>!X2Labk8maE()l*C~7BL|rOcO8yGWNXv~ zc+vh@fK>~SoiEa+ss?Od-9wfEx{Mf6H`=0|0TA1fb(LlN>$-_%V3p7If-4|QGwh?|E~NGTn= z;uW?**5-Bax>En!><12HCtTRQCgVrxo*e5>`sab?A@k-Lw}&yD8jYKDqPIkYtW0Wapecc^(eqFN1#MU$OjPkJg4j- z94Ia!3GtcJWnP+hzKKD=;yEz4eznW-W7X2gSVyV=w8d{=B<|iqB;KugK^iB12|F27 z#5)@Z19Ran=7;-Z&`l45qU1VjfHhzi%(M?5FGF@+&?}?{?>HE2G>GuTq>7VVj4?AfX>q@L9-^FW$7qUtBCh!CARX;;fMPFQ}Bnpt&&>#HOar zfW4_@CFUSo_LHus3)Cq@*4L~6>tRxjJGAsmcR4u3I2Ug=orTJ*f^t-Twfk;D?wRv5 zC_Q)n)Hw}9vdi}?pWHY($mw(L*UX7SBPmR1 zuC_wicZQ$u48;J~-CSQ>d7RSmJ%L*7_z1%`dx`3D1Ec9_#d0(`I<8dhv&$v;*tW6O zef!ZN(U+mpL5kAC{LOXs4*Fps^YX)<$|+Q(xJ7w%nw4_eC$sL?GD7cX0phtCC%MJ` zeG5$IUI5xj%dNinQE(s|un6#UfS*6%yT1x}uGJl$jdC!Jeg%iNLh@TsZ59{oWz#0# z_<8K`6%=D|-F%>7fBEfTHpG{@+T@}j1&Un=pj&(hPf71gUXmEMv9{bE;VLk4Tl z;<~G4XM9BZwCKyJN=9GQL&f{%xNDIA2%@VKqb`J9OqVC9 z;pNt$ObILRGb==BwRAyzzmh=aC1f2`Tu?^Ez(GebRX|vJZ9H#O#BR1`kFq;|OkW>V z3#8Lm^AQ+q@L!CEnG8?&6Jq2tts|!L$hB#wQx9*Y+-oQ*w3&H;FQg#w!phPzTwvJ- zso5ZrL1{3phy`R5UPOBPTC7U2AJW}otsE^Sp+f_!l;m>C9%^=OWnMxf~HCs4;{yL+- z=5x5E@Yxcd+;GbMr>lgocR&@O%ymP8Rj>D844E-N)Nj_m&GE!K$OH&-5BPtkG-_CX z7qv04SLG;?B6kO4cn{tC+ig!%_`>!8NWy)&A(8e}{J>Ze=n1auBwxkALB5&uKtE!t*Z+U4zb917$die@)*!C)_?$C@pQTflte<;%`E zx#ZyF1EvNknL;t9-gdB&Uou)?0SA%5&EOf344fYh))9Xpl{phxMoScqLBCaBpq}5L z$6s-|n4Fdl1>EW?B=~{&@BkxJ&(BtC(rQ<5Y&${PQG#OMPWAnQu6qVQJ(!-GN0UKP zH!6~qnk3t~q2gs;?J=*JUCJRd~Gec%n_BM=XA|17+7uP4i)yEgv1M;g?Z_}@V+E;?I^9Nm!(2$gAx zHY*2m?=gnrtUZP47*Eb1w&eWpOuQMPOZ(vaB(IjI_^R6Gr7j2?p5x~7e4^FH(p&(< zakOY-CB+y2IGm1@3&{(@tnYZgNdy#J-SEO*(l*E)M6%qt<5nDuf_^8`(2k{tj(n`* zW}a6z#@Tl6gym#@*%vKjjs~vctNtBn_h)aG{291Rkxj&EY4__Jk0PwX++$h2>JV%+{u?ZrgYFEV}_e<+aL*Va547o9kt zM7K0px1_H2>flX#3dM-Mw#8py#pWZf$0p!DEs(-iZLJ-TK}V~5zm7!YN)(NwPHjL7 z-)6;o$?G3U73i)s$+9Gt>E6FH@x_c7H@FP$mL59She%f-Z)NZ3QKy9`#-wHV^fhv2 z28ev&v?TI)gdzJyb01dyl%UrSf02PkJ~2I{>;qGycbu+$Uwa(Q&o)ymruJy8-&6Q1 z{HQoTd*BiKw{NKg$#qsOtIMvr(jU?*FLWK}U@f-9kV&rPDN~ke5)7Vk(=hd-2S|7M zfNIWpF^uKLmM@`b>fIkJ$}kW?>%MX`dqvC&9RPy+IS|6ll+!M~rQWft)~?@gxw?Et z(IBjTF1WIjm~pcnnATu%m2yC|PW8K5p#JXmY>$WUXGR3_x>IzDhCOzF5~~bT`^*D2 z3*Q%dgNqF*;m3nZ7nVUp6+<$zDw82(VdOZfSWlXJbQDC=&DE~2wWF2> zs?(Zg76|pb*V`}FYt>Lrb8_h*oBZ5R1s&xRO#KeC2NuQUX{M{2NeyN2o1S&*`!BB~ z25cuHER~tmW^h<@GeYsC)%Un01pO%+`;cftvmVK`EG>0}2+@A84;5N&R+}5_X&)D8 z8wozj>mV14hPN&+w!PN%m+Zz!!IBKY&Rh(Zo7ydK`YFCx#yd-A+>wkfT>s=<7S%(Q zit4OeJsp9&XY_36HM?DXz~(T!pb`>bjvpB%$V+YOv)sfs_lt~7{Fp!``}r=tz=dDa zK;U%Wa`)~OrPzbT5S->n>5~1b zIG+w#0!vx*_~*klcdX3Vya&=HmH6!s@epx)4h!-X&zrqH)Cr1&ssoJ+z!iG#yJ%5yb{e(T@ zwGKDsp6R&*XGxUVHUkdZd~|&T7236i;OD)vB?fa8`XR>pqGsLFPbt{65r!7FIs2k4 zuPzvf_POcwm8_nK!&FS z`>>&DQC^AV$v#4nUr1LWbu;{!Fo7(Y9Jx&5iJPe~LF6+XDyQCIe3X%+DgGY~iF;JA zYpes*uCYMTv}M}xm#xKc5L<8N6uuYwi#&X$ay^ZoMqIznZ$0j^^Dfzq+!m~TPG%b^#GX* z`WlEohZVMNNwtthnrGBHQ0;Rm!RJ!iM%u6lY@j+`E>}xYf6f>ZFc8QuN=;EK#@s)o(Z&e<(T1>e>V4&}otU_8k zIwga!)~~gqNf*OY6OqHo5=s2tDONUL7s_tOS$MiTa?>exshldd;Iea#2Z>E^b;Ixn_iMB${m)o1C}AzAgJOZyW^p*O^&Y;rmJaaagx>i0>MPZ? z)Fi{<;kj{T(yip@G_#Ro;p@olD9Ec_Ei-}7_#?iv?`9nR!RcCI2rtML}NSZtG(jL*5mZxrQTCo%ON%oGj^%_u!LenvsBsK4O{GBTph^=r~^(@Lr485NU7>B<3V)fq$&E3C0ZZf zojm9EI~8m?XCF|z#BcBu?Lgvw|IJrzsWWts1X~uN(d@i<*iy;xV?K_r;09CSxhFoK z<8~+yp9cm*t6%I-20pT1eyM1Pbr8=Ks_nEwZEJ=%6tqpu3Vqj97|*^<0mV7Rde{E3`bWNrKbQH|Ky6iJ(JCLNJmt%Q zR%NN7#o$o-z8O0mUr{;5%UcX8L<4cU+z%WYqMq3wD#{#F;r)mxgrcQd$1JH}W2|s} zGJzQ<(4ug5F_OGEfg9gyFY|V*R##W-s&3PiepTNV*vCFAeyQ@U>jpSN{g8?miw}_k zvZ?AXzS4Sp`(-9;<5#ntS>&;DapJLLf(m>WJ#_w(4D(y;j@`E-qm%t&na(||2q^st z?9O7cu`tB;;rA9YI#AHX?pB0cEo)2W-0}a~BCv*+O=XFSMU=l+q*CHiZ6GDKS*aeE zMzr>x%!N!B`SfM3DE(Kr;MHwDS1XD3idWG9wD|TjhxVf42L38w!FFEe{?cR?c^_;H zMTc%-YvSY11r;raTLF%*cR1}Mr>tnPtGK{SoeGSZ;y)%g{x1zcaDgneK3s;)M+7hC zDMp`=Z;-)kd6IlzRlFoMU@q%k*n!Jwqh^j?!kXuzS8jCp5kqpv?M+~{Ll_C0p`t3_ zNi?$+l)E)*|J3yFvbE(?caq3n60sqT>Pscf4Kp2udFL6D4LJ5JwuBZ6i0lb#jrgCz z=zVunRE$dNgq&}qr!ZsfbR~|brKE0}^hV>Ke-0SxxGFR%y4Ixq?MP6d-OGwYfG1Dc zH1%71&#)DLt0qlkxgq(P2G)8oTg4~5o$&Wuujrk<1!8maogZm$@6=L1v9kGV9tjO# z_UCY(v5M-nyAsgCTVEcqt>Pt4cQ@ed+0ch4?fvR{@J3vT0J$BTjW4i(fplr1?H~u^ zB}^9{KJ5u#6^}nKv0Iee6CKwsD)#SBzm_^_e}K9WIR9 zmZYXueg?R0EA7+CjRB`A2GL{Pik6n8$QOWR8Tr(kbJV`Ff& zZWrP_g1V_CtfFtR#kUDjw39Y3idhHQK(9NO6m zPh|N7m(h|tD>kwCG??7&FR>g>GX$FU1#OoqIM#pcOTfy3iQAE+STybB?S$;)9 zn1W4|)%^6m+@}PG_}q8|p!aYMnJyX=L`?-@wG79NG@w^$gq_+CDHJ6qmS|ViIB0HeXCBAO z)0-IGD@M(0|Db&x=FlRU*t=fWNc~Xah<|j&a!E>}^kr}EL9x7x#EE8)uEi!yZev(B zd$h5=OH z8IRIKC>r)1jcBCVfDQzn&oX2H6 z=%yP=azanS$az^;{rM=&9&oa&3XEHDqrbPe;@h_vzU|3aTp{?K03p;+L@V^!I`qAE zu^UcP5x1?i;c9lF*O8~z)c_GvFNVdOF!3~d4Z->2LyU6&`vM&HAK@E(mZZs5Lp4;> zC2nP`m+e+Tv&78J&)DKWeZpyJ5f#Rsa9>wwG;q7SHR!L&<6TCKylZH5*MTbKK|nue zd~=Y>>qUfcd5`UJQ+@4SVYK(X-STLbVMvLS5fi(s79C<7!X@~_c?Kv-B6Rv{cPg?e zwDc|dhT^6;%2wG{9OmSCf`;{IJNt{}W7~Kt?NTQ@?W23JiL8;%@-4DilQZlT8`&Z; zgeDTs96~NDE@2^!Jfa~O*I~L~;uvJ0=o1-oY@v(J@M1FReV$OsBoc z2ZDjWvjCz8_8wtu=_C6Xu&f3IAg0}1X6MI!p~P0a7k zZI=WE616z!EVBct5vls7Z4NG|3Ow+SNe(QyKW~3bOc=yQo@hDXkLRD~?wjNfG-P$k zD^t)IriPhEPj%YQ;jEBe)h2j_R0x(Hcl7`KcC*`p_lVL+bAE8ETs#>`IloPE+Y9{c5K zJE0ay=vhYQsc*QoHIti{o3KbuK8Ebda(C`>T*RB1S zUvX1nr^cmlEjEhbsO}4(;~Z;Q%zgY)`qcM>6$3pgLhd&V;UnXG<~yxj@+!LA0L|Zi zXwkPl6-7wTdKG4^r>2smE57G|z(>I$f+Y*fTX8wR;iXOv>(5E_Qi$t(6UNbUZV_VFPK<3%ux0dakEBR>vrR42 zdYZ3W|v!vXC;Nx<^T{qzKZE|kfY{^<$Y$CnWDs&S{s3NH(w;RqS2Nen-Zla4~ zjfRx^sd=J2-kFiq{!9Y6Znk*dhsx z3hB)DDw9^><_%_6sR4%*K2lr1!nRVIfG)=>xPUsfVZFz8iqWOV@#W;;2VAji;o&?T z<2SZ`VVYyy-2S%wx-MRgljLd&*^}G`)94BCkvSyM0;7h0ZfS4CC4EP{#9Dfdr|W9h zboep9Gcps!L_Nma6pIfWZ#7gVYVq-r73d$J^0U}9oAYT?-9pA6(dXU^!(XIIWab>M zAa%Q@(&;s#(#mqhjqa5CWc36XU5!dHj|+rm66{wH^KQ{Fq`p>WO8sIz%(Pu2>g_B% zq=qRKH@TejW;w&V*<|wY^hs2ykFT`or4x^m9Px>(>Zv?YRqEY&gz<=Y&EC%2>JT%? zebQB>BuZ^AZ;oqVIgS|##3Frg;g7E-S*p=O?a^H!R_kbxE1pYOIdJ>CkP7Y0{b@P< zOi*Ft5ErYbqB&ZDgCWMi^YN~hf{-sFlr_z*KDH$LN9&fr`mt1_iNY{7iUn(4fEkvR zETBVlpDLarG`KCY4WvIGeoJe9pIQ}rzs5H8`IFRpN|x}Hqd3i!=%4A{!WOf{nM!4D z=QyLP?UU?|M#j;74i(i7QX{P9&F)0oBAcBdqUk=OeLC*xtcPUgHbV_Eu=FLG+VH5S zK4Q}qB|kJBqc_PiS%t3@<^-Bs(~i!#Ws_@*O-JZpBv;(HsKP|Hqh!AH8Lk4>k~=w1 zUKN{-^03O|Z=qhP6^u(dbiX^iQ0PHh(Y_J9Bqa*FH>2`i<|fAM+l^Rqf{IjgMUC6< z@HH)una3YL!O{FThGn8sZdv;Yz>1n|3VAL+6nH_CugvDt8bUA#3v|q z(W$5385bGhEekeF4_h9z7z6^%#I%46j@&7C7qYy5q@w#eZz=kgietObBZ#v6Fe~pi zGqR?s4$BLv@^V|)oza{$<_I14{$e6ud+9^%6V}P3?PM$V^HD+Jo%BCf6CWynB*GT6 z*_=dQUcBu^dRVW#ephxMen&-WZ)4)|iJ_!FGP%1xZi)81}AM z@G3Hge6@(sNbDbGytZf)i|vvg7CdE*|J;T&K zLM?w8L+KZ{O0S7CuMOUkzcx1}$DtS&kkGoqeqgfb%fT$rvLlHgMAQ(_F3M3lb43uJ zW2Ao!*0XqDIwjMVZ7kvQBn#`T|3Ri(A!_E6dfoHU3R&?fE00(b!n}o;N~X}K5s8>r z_U$OiNypviZ@5M9*p%J6osSY4*eDACN2a7twx?_vptAMEFxQV)*dZyPYfu%_k1ee# ze5Kr?9AuxjXGY;iR=oA6@(lxdFTGL{c5oZZc~mLaqkzJlZ^WixpwbdeA7Gr;u2?+d zwKAq@#*_N#|K%geR+@GJ|C-WJM5I!LLtywNZwpDu@phPb)mND5sKE5yhUJ1)DHjCu z(fITzko_|9a{BEByyjUGQ=pn1h%}B>Zsp^{anX;$a-)B7hRH+jdxMrU_IJw?1D%8+s5rF#=`=?{AbMlsFg!xt6+jnN;g`T1zrwJk0 z6`$UOaSZ9S{T9NZQ2LlL2U|{lR^R{i=jl7)h~AYFyY_M6x3%QFc~3W*!u{K-E;o1g zm|hcg$KX-6jz_SjWerY_Y}jE44XuzprWYy^au!Z~@D`)TiCxII1e@{DN%ImVjBbGj zjga>7MB(cFcz&U8O?8>4eXTw|c>9{5)-K}N_eik8xqCGop zV#3)GdT(Lw$8u727~$6am_{HvT#3uK{R+62198nb;srO5;s0);h z{eCs#7VF9(N(V}Itm%#b!|v&%E{`(E8rn58?K*AK*#QDa28f<9Y&!eNF=xd-#U~XOuoSuHeX@sobvkV?@neKnH(oaXiETCc56sNEB z`XwM>p2SZ|OBmw+Wol#j^?MB(6{>b>B1PgdmfMM;7}V-l1h20sBs>c8zlX~$fNy>> z7us&}n14tU%67o#jr%g&b}sI#gH1J@JXw&!4waUO&PhF3$@&G0vkgsad}UXG=DB$u zw@QSk^r+h^b#QCJoT9MMU`K(1y}{zTq3n(79j0GD!zLb{)g+#n;_85_RJ_ExEH#Cx zUN=xIk3Z6u=<%YjK#cycba&DfA;kZ~*jvVBwe4%efW%EmqjZNz!!04*jS7kaqLhSm ziF9|1Al<2SigXCl-Q5k+($ARg?OOZ1zjgL`zb%$9bIkFtE8uhIkJUt#WL>BCf5?((P3JaVjlK6;8c_&LLUOMO;-nrFZ7!k_}#J|!?Pv;S28JNX`& zt!chaCDGKKPyD*BQd18m{4`#k=iO_2;_zc=Qn|*$d6PV9>_ed^0(s~@e1V{;+IL5> z!2ZLzkKS$j;7Zi*-j8#0V(FKi?u}GF`P@enbSz*I>jyW;kK3A;&WRil;{JSKsLy5^ zXI0&=G^c<5f^5?8?LZi|@*~clT(qB1FSpP|$z=R>R;OdAr(|amlZy=|4T(y=2i`8| z7cnXgiNJ(6XKVD##u$q8FA;Jo`rRg5R#BnorJPO~n8jace=U2H~y9JlSVQxWnz0c>Ypth{SnQaXV$>x4sAEAg&RH8wHj zEt+j;e6V!_=&1C_rnxmfJg};CDZh&(AqF#`(NWZ?wzyT5|JB6$MZAnw_#OFpUal`n z)ZuZ%w^5W4$mReEdFk05aJdf44pzcn=o7A%6d&*L(2~t(ZG(-lmh!F5X=P zG+br~;l_LvzzoMN<17f<3K#pO(yU*@KV)|h8Rb40_hwhtYvbOh)Unwz*DpYK!K9ZR+_^)(P zzCk(9UG-)n&j1m8~D#9V_`fb>u`K-Em zwV;M5$pf$50FG*8mBTg7STd1fa zS;+{xK(Fw?=SG<*lW$K@Mc5a@`*-i|4qzGalF_y>qBU=6w71IEP=tQUjNvvR4vAO0 z^Y9Xj(VQ7&Yye+Z=Pd<(xmfp8^maQRem)^N$+NE<@#~}W``d7#VRU#lZgXR@C$kTa zV#rquDk=Cp&D&hMi1B4xx_J8>}GNJnbmRh;)g|q_4Q)sOvtLZ#VZ|# zLw#oBIZ{0jeoSWNs~A-9m34frO=;O4_IpP<)cJ!i^O;W*(hhZ!y^^g*bw!p5aj_kC zO;5RZ>l*=A1`1ck^=&o?8djKAKK2li-pkXTJ@{N<0+$C^>L60t}A+d-Ean+){i%OC4M0adi;r<` zy?y9YH*NaR;2M$4h0+BEkYYMMFti~x|I{$Cshhl4mw2jfG3A#|a9s4FA@KYSi(%Xk z<%DgP9Hl${mycJ|lv^|L8#?r^&;|$Uht$i0K3VcNM3q;L?KUOPp)IMpo&H3~hp+IB z!b~d9$6;98$wyRYetKS^`)2Wj9^aLxT3loAh-TUwCo{9v`=;TxImGRGy6&~e69tc9 zTogW~(%>@cOwT_`WlIayl}2@ipEqW;kyVV!PcofPmz$JFuZ(`toXjnJno_o@e^6x{ zW(?%^Ha9v@ox?J4x{H%z)5~Q@wH9xez;f0&D2Ki>W8qmnG zu@Ujf%h-xO%)_PWzC1{m=+TCaTQO4^aKE#rRwQ{(R)X;)$Pv%5wgoXhI+R4uu%LwK zPOpbQ^1U}DzsM7QTIaa1PI#|l50#k#Vf{z$A<{GvA;VfB_-bM0V`c!@^=z9+J0KPzKI zlDtIa3m5G#97we|FxE;#!tv7L@xvUt)fh_hFsaoG(9TBhJbyIH}87 ziN<27GS^S^@*<3)j;)7PgtGPZdu9ue0Rio8nvWCr@g~n0KD{jcK%ZPJgLn__t?>jk z=;dAH`#Yk3zB)+X+otbLMk~rhp+yz#TA@Ph1xtFjdRz$w?*to1ky1NgZrJUm&Py_MVttDG<@SRUY%I=O=wzXoA zG8%XMq;$m5(b#3xQYRr|M=r&U@Uy$a?Yl4-!QLuq)DtN70l}Q;_Qt9US%KDPR^_`R z?I~MQ@!4iuqcP{gj%6b)hOT=db7mt9`k4uq^#aLXb*1qzRPH^9<1Eax!|xlcJgA@8 z)Hiav8>7IWATtVQ^2u84 z5@)-oJl%Q+cPiq`LPKIHn+KXY5rt{!kp?6RNs>R)k7q)V9K$yVc-&P#hjdrQ2rgk* zXq@c7xD&&h5S|U!Qthwb1^CCg4`X)h(3%3pxER#j1C1OH+#i^TZI&UDG^Z~r!(yni z!(S+SxDG#lfzHDHP)e$u!V}?3WfXQ0$&mjSf5CL}Z~ow~waGmF;;kNId`*lZu$Jtz5jXXn&gPv$*%yKk<$0A zI=qtKCFx{8;jC^c0P`?1y4^PodseN}xph_Ne0IYafhM72ZI#lT9r20%S~ zAAOkbHUr9zCnu?bJ-2dG?WO07+^@cze)0=ct5CD|{nlkP%k2ZlM&17zR96U4W&_7@ zb&o!|S38OQ>)HLe%l=K6&H;7Tu+|s-q3Dzbo?3?hBi=wJ_AIVwmM6}my-UsH<3PbmFQ&+I?n(WbB14EhFSTlMPA^ZGw;?ozd+vXYmE2Kgbm zXZf2TpC?okgM|+7Y3y6r!#yh8zi%dN>VGOiz3nbG(&E>EL_{qncFct!>3>^R?6_p1 zNDKvrdoM=>bzsYhUqjpW`RbqJZiXPdBW93D#e-#z2xBI|O;qWEGMy`_k<`cXcYSe{ zfXLMK@S@L{9V_yIRO4nWh$^}Fi{9crcFn&dko5%(>2vt8*fU4 z6(75bAIwSrT6b_1Bp@4Q7G#r)Ti`FIIa5{){OX%c<*O*~J1vGuA+X)uB-OL$sBQ4g z6YmoX%YU8eAsZ5|Z`O}y zl?$u;?{g%8wv1>Dq{D^{^!^B_mTeWVfVs3U>l3S z)<6GWr(X5}znJLpl=sha|NriWf3Eg1IU?TR_x*uq|JSL1pnEdgbTU<$)!$q@pDsNT zt?pn-=vD@p_Ue@>Rub349==@wr?m(A8c7L;@g|-3N2>r8@0&DNPO{Tx>Eb7{yjN#7 zH+$*aRadGJdFiM88b>0*@>%=AD_N%h^(x^^NZ&P@vDptH?GO3M-G+#Yh$?MmV8Vbf zR^wm^k$_-*sPtj6iMJ`M!jJ_WOuPp(^FH+lW4 zvj?)wzN>rze0T4*HUQd5P}`U^cm|rcJS}EogKVoST?;%DlU4ue)rr}|h;NMb4>oO> zlRxLdGmC(gi`U>R(58b-!kA&E6$D?99Yr0~>j5&|A5yH^+!=l4Z0_(z>ggl3wCoe$ zfVO!8aP`AN=(T{df?4<`x`6tF3X}yMz&P>vtQV#DfRYy9kP?sm+1ki0jDLr)KQHa~ z!Z3y-g*4%{Eg$0-(P%$vtNGxS0z~If2EZ<}=yj+rv@umxBzSXqID>Nc<>SF^X@*~! zE5N0?ug%~H*dlC)2_48ebaSLE7coUO#UMmzn=bqkfk}f-B9dyqfaZO zQk-H98Ld>_E&>fAUUE4^E?0}<8!4yE*^H@GQSLjK|TyX{q z>cW{7xB>2_`BT|Iy5MBM(&o26A%L%3RR95h+A{L*>@NXcKJSz0ulZXJfMS*N%Jk_x z0KD|)YHdL=1R2&16d4PFaG^!B4|*6nPxnI;6lsJA?0>j=G1#&Pg1&j%bVwbEH_sg- zrB@s#q)`-*&a`_QK;X|(yr1{n{ivq0zlIwJi0)c7YjZ#rAIKO*k!uc*lh=cII|D$@ zTdRq-Dpi0NRTD`k`wcRsw2R2ItljqmetHpA!HL~i&b>hOBuA2Ee49d20pc%+%t1O2 zOmTobQ>(n9{ch#~ua4sq)Z>r0EE~I zh?}G)xSelMNc~*!r`mNpt(p67J?FSaVY!Qx<6(?HrG$i6eCRT1l5=*H7}XB>amz0Q zv8U)%CHbyXz+5@phZH!o_qbfeHIqY2!3TbUZ4|H)zcUU*W2OO}W}S1Y$yqrF^nGS( zf!d15jRAS@-nT7w2Ox4*1F>Wp9A@`PP4gEZJS*RK!ksVskp7=cIOPtI=Xg@ph=j@C z9cor_tZp$Zp8+xV7v>cEl7*MFbU!Zxwaw!*cfcKa#gfQvog#X*@d)K>d!QXymZ+V1|o--Xakdr-{zk3{f}?p&kz0SFfo}H&rvnE6XKPZRRNh@efqB+FGd_;dSPM@ z{QN#ZB}JXN1cW1(M}aWnY0AxIdsKNi_yWXTR2WlSY^YF8V0cM{0UHnnXwA75Pxk#G z0d6G-KPHHt==+e!{JN_4<{q99sE-em|vt1w?Jgd&qi*;AiIE`9%Z4R?l#Go2)3)r=ayl_z&Niv%$`ZEja!Ek_vugR~&%_Z>!DOl&)zBatt+wP;QfvIgi#Xiuo zp(@Lj6HZwI`ZY&U^7*J8nomBoWZc92$GE}fkAPA9Gaz;&H^ z=TA|ibsbgw3XLr;AV##|OQm@(ajse=sv4-pD z&l<1t6OCd1UW`X*R3WxF(>G#frMFmFB1sHmn*c}6X%~q9{fytHp%G^9oRV{26q92@ z=`l9bpp&Jr|2XzI#U-d?X2xM=hf9we0f|C_j7F3$BaYf*JSA^TX?HQ0U1g--P`()~ zLZg&-V{(VC!yQb{J9{NdZQm9ya83>QCU+thdC?c?wo<^(OA&-X)#~I%D0rl6$Meq* zJEXC1v+_17!U16utB=WeL0RuZ>%1U=I?0P)fB<02y0t5!?EplfrW|=N=^<{sDr`0Qb~LaoM_9&RRs2?lp?zajKcUi7N6^N33b12|F2oYWsq14x`~o;YDY*a zjhPoZYPnA&@Z}L5iW~vT9eVPM!tw1tKvuoP8SoZ4VQ95HO!!?Q9-YlV8?Oe~jduF? zxFiwJLiI(>FvnsbZx9Jg#lpwNIGL`Vn8F359KB|3>Bq^0-S)Am8rOi4+cvJF&QM;Z zTnp!>P~(b~KzuIeiX4S7k2AoAhxA`=kXjU(R7LJJP&(fqnup^U`Bv)QB5m5;lf)4w zY{$eIjIq+cMU1`^65k?T9?r&Lrk1eEaw=t&{Dxbn5kWBIblkQr9~NI#@dH$C3Gprk z6{80W5mhGKz@wa>zW@u!>G^Zafm!IC_Ajdlw-+G!>Zxh)879c6W}h&H8X?bl(Y%*IPeOf zZSro99G`45)-&=?X8UI+|DD?W`5}S|>2?(j#oM&_rH1nM7N74x7G`*N5X^|C*jd>S z((#nF$r)Y&D}vqAhMT%Mg1gH4JVd`a$jh-!u}+(LL#6ixyAKo;J=87YW0UmYABT`b zZ3vR{X1%x$A@aL;q;M|s^gDW4fA<`r+DY>ybPX-i9!`lp=nPp;(Y zf@^$_<_f4)*ML~xCW_vBRh*Id5vT(6B}{lkv_;Orhm@j1R8P(zq9VFUw_W1<#lVu= zddai@JNdb>=T&8m3lS)?(ka4!=+;ayu?}2?o*b)S65KDY46ML!da!_$0PZSdB z(&LVIDgn~I&PC}jkrnXJQ38O2ehtT1nN*G&IZ}pVX0%GHLQn@p)R~Rod887)nBGxbVpf z;-^+26A_s)M_}v6n^KaIA)HLn_@ab0DE}+L%Va0=(5P( z_%cWxt^9a&%?Cge;=g?8o|Cx7#5AseI44k^9I0nW2E3BEjp%{0+4OwU_Q=5x87oan z@D?g4&Ru~e{Ion%(sDS>`!y=g1~Pz1ViKZxgBPH{6Ya^%hxFujTCl#*_7i>l%#V;B zc_C0No<*n8YzI~7=SN;Vb&u8f;y}pXUh2P()&NM@qdD!nCDADO4aC_Um;C<2!k`&` znFYzSEpXyaO$rHWE~!_74{D4JNJX1ye8jqy@VJwC2?+hIp*z7`;AsPy(5kxRI!0{D z4@N)9i)$3SpvVbVV)x+E+{qR;x1LDw3dNZnjM8W3S4JWh1~0ltV7syWX zJ*xJR(7q2-EDdi7TQ?;Mm!6L|{R0iakDr0ek{{6olpyv{9^#yYtma0@sq-rN>D>2m z86f6WHX2Ojve4V#NpuCNImL?i{K~6LKCS84?_XCZO%)y*D0Mls+~%``IK%D!E}))~ zx!I1Wn1|fQphCw_n%R+j7ESpG@E>_qyw9TG=tJ}6R^3DTLM2LZoQFuW9|KSQS9vmP z(G3NG1CoF{RcD9^F6U~UzoAfe(yEbBEbd^$I4lzwr>E@126+5ftv@NGX?X2+_J-=w z&HvWG_#H5Eu@UvnYNSts-9NJjFXmA{N>B#so?Mn+NWAPp;?u=SnN3-&hNUqL`UQM{ z+U|^UR!@I{XkP7RdunTYbT)FPqv?X#0!Pi<016qaoOiibKB`S-m7V}O+&CtkoUlaf z^a}G;Xn!P)@h{4@w*2iZ%2 z+~*k)1&z`sweC#cQoUheZgQXXc1io{lcy^*$p82(2*u|cZ{e`oR8%TPZoGsCPicll zv<=K-u;kAVcz53pY@eilwrMDa5JhP$SN2GSH-z*-=TviBW}v_`Ge7PxSOxx|WpprC z9k6~-qN?AQ7XN}DKUz4;{E?9X;2R2-vp}-R% zjESp@W{A9CzyA2+|DM<-p&<&9Dg5K3`5!yzFa_w_+55lv=X&@*vnbr$nhtE+S%$Cw z*zx#}gQkkWlwvuXT*1Dy3#K~OQH;t5d~rad5BOgwuQ{FWLY{X|Qpldie!&|wC(2f{ z`^QD{ANOX=i3D6CqMU)C&CFNprI%V-G(8u<-9V7gPZT`+v7AR#d_cd%3X_}p4= zB_qf88TVV!e~q8u@J~GvCi_8=`ZgagDH=uU7$~yMK<=9$<5{c7E?XQGe94=+6or?Pf`EliT}x*|6>7ohDoR1QLTb^7nGO$?0=G)hIEy0$~jgl9Pg57Pes{Fw*tJxovL&Y�KbNCP?gGwIFU(&FR31=*p;o)S z0bt?VgR$0o@kE&vA<)T$x+1~BCF|+I-wEI}StA50E| z5F9Uoq(wEP^VtIwW|BWLVL9uAKXuip@(d6K1}M{>Xq4;JtC2voXcp=tSUYiQm}EsS z9zxoRpdIYG@0fv84^)+^#`S`U2=#;6Dy?cWoI1e2tYw2Hy3?Dv@-t`>Xps@hd$5ub zMqxkv#G+65l#pwt+%jJTW$VXz(Misg;I`c5)SNcWpBLdH_FPtsQSjS2+34Z#Wvq$p z3641y^}-ts=bag(^sX-kx?kTxqCC}3L)m)Q$Mha#zp*u2R|DA;O+$h?9ma+3U~AAV zFAayFdXHqH=E0}z0QJZ^${|H*kc-JF$wVP|k>ei$WoY)e`cW9vo78#}{cIX^O*dBK zj3|rHg}`=F4c_DwTX7>&A;2f?0?{b8EnX0(6Q)3635p0Qd2TZ0C1t*u;U4ZTR*^?? z+lC)Zvg6u-0*8eKRDpE8>f;8BBrVJts{VSACH+6X0TRw(do9SQQJmo39LTf13&X`^ z$J{GKeeFMI>~qxC^!~N0da8@1Zoo`pjNHiZVA~9To>QmvJdlC5HCC5!D@}`ZzCK&4 zQgj20uv$$;fFVqlw0udz6D~t7OXF)A2}De$fE-dfb#MnG%k>##w>%Ak|K8B$u0z9N zD~AER{RiZB0cn}IzYKSW)OaR4LGQ`3X8Yza<)(G{9FwEAf7eN~5x9U8pn)7?Vi)u$ zP7NH$i7AfO2U@g2%4Px9Hja0~<}a|b*nt`+cFJ)rY3mjHEZ+h6Kf_nAdfs`1e(?E2 z{LzH+Ih(R*t(6WO&#=Oqx9%8o+OkWp-#aAzy>S(Ii0$K9qtP`Y5Sgd$Mxx$vj^VFL zFD5((ZR2-FiPnBoAgi6ZxthDFhP-rllN@GEr1_7!q37dSiu(eH5W7r~$khLA#%xh@ zzl27})FCG);qI6E;>7XAK*K2d0w{(|1Ng+E8))U-d0DjF3L9N$@&A;BwPTFTw#ZUc zJIDsc3KrEXF^BEh8bUx?n~G`A9k&< zkH*FU*ejhT%w1+D8Uzv0^nWHe8pb;p14Tnp5n9@g#j}u6@ziHq?q#*Q3v;ZN5-WeU z!v14i&20-x29L3QWF-OmjBr#0xLa`rK9O zvVYIM#aQS#zZ0sxC+ng?HFngkB8eh^wL{jN#97*;HO8$)NzcpLui={Rv4`--O?qnTo=Wa!d+(0@=kTykdyECou7qnQrUtlBO+lg@prJsmdcP!v* zkZM^}XMrGp=0dv2Q?0*h+=!7A4#UQ6{J!D4Cceu~yh#iSJ5zbi6+Ityk(Q@#X`Hx4C540XlbVl|qY=uh%RuYc)#)jlqY zn{UeIKWzkSAJftBHUPu`{kiwtS;(} zR^uIKQ2B122PoN50GDcpy(S;2No3`$<35Xz&#$U3-_CrwI-58%W2q9Y7^V3)HULUs zO7Q}m%ORU5t#{>{Me|3wY_LQI@Zrw@chUb-WyD#s3>&yzEF?)eXatnbj_eR~nBs!%-VQAfVx)G6j`P0P1 zRl!3rkbGF~VWNl^u%s%*+`0zM3ST6tVLy?qhbs1)WbtoldAF~5dim)-O+yaeNyz6> zt)hul3rcvNR=hjF3Ax%on^xjwK!?zqo(E%g(8#q9zvl<=UClCly?ctw^Hk>kBK3zo z2QJU;Sr8h6r2~t^74|?7-xojwrLq*_Kp^iCXnCN`-JKT}`x!5m&b?2DVJJ_1wR4L9 zN|DkMNOF9B-0-G`3W`9 zA)}@7?__HKW|MGfvpXu?ux)SooR%y_kbe&}U?A3@OtSB59eNEUy1W(-r=S@oX7hoN zF1{hKtv%K_xQ;s#6O4a`s?_GwfLX75R3e#|eXVh>Fl(-URaN^LylrNjYSzmyjyFBi z*B|};{;F|uIgnx_rAphT?v;$v0+)6Paht8Z3I5vQUj@|GBuoQupZ7`gh5EsHA4WnG zO&s;m2$_W2TFH#82`vV`CfGAz@y=Fq$17zs`xGeFN)DMA^@oeWAltp2L^UYka4Ys@ zBuaW4Fbk|UI|xu9t8hN_=2SB0cn}k7sB+Ve524A8>E{>KgD0`%T(-0T+h|hLNuZ3> z>H}MqE$%asxK2CTotfg8@$=!^srdOV>|a@LqX6Am6O!uP1FR@a!(Bvt^ZrzE6nYL5 z1-!v%y$cYe+QP7Cw(iFv>(GwU_rRrz+guOsSn)`FbHBNsmHGksDJ%2nbT<81vFXU@ z*QM7?j>eE;p3~Xwq37}8o^yGq5D~{xQ2v4MyLf%<3giU8q%}W{?^ zU?d315<~=IZ23&I^2HwZ7?%E;_r}34>pG4lQuVw0rLF&^AK^>=&<7a1w@!|vKd5#c z+KT?LXSBv`2@^qc$zN!h5A zL78U0W%B?q5d|(lCe&`)DIs@&Wo%L!C+3qbjxO-56APWRfOkRZyq~gi<+<4-4QhVn zuT(xG04ZKt@rMRs*nRQobepW}&X9V6_P)X*;^7|>xLflNDd*HzdwO0>F8?Nck z(U@JK!MgbXXiLm`+0Lk8vtY(|d_-x!({pK)Il5NmoO)$Eo+fVL%3R)KK0>OwhCBG( zOps?H+}n_Vk*GMUw`Qptw|k?XsuRDArpNx=QfXd`ik(IIIr^GI44h1Vvg_DQrd&Ph zi)?Iw*b|=BI8fg0oec+k-CUjiyWr?jM}+*=6LGexlis+>U|b2 zbSt(8?)m0Q{)%~ep9WpnWRQLg7*l((!g%szmc|DScWAZ-x?AnOgI?`ZokcG=FLN*> z1F!lSI}=K2&@%~;4zpU(cJP(p3xG0AEdz&~zu#0=zx38ro1sW+xxGBH2Gxf&T^arf zo~F2%$VMTaW*?iFTe@(mlBAGT*E0EnzLXQ8h=!x!^&D}DgcrhBV1s7Motf?4rRU(x z6Tb;{BXrHwYex3MTa0yS+QzsNAjJDX`tAF{M#xxWz&C}9@A%4uWSe;uw`Gi%c}S#R zld_pGV#oS4PUAYCSJt92UVcywKmSxKE1Ue~Di3SNsrE*uN;H}#b^K4Y;3LKWgQL)d z-hr0_71ZyBZ2dO8P1we{6jC|kFyn`bc$^Tbo=!ZMwdg?iRroD4Jx2(KEv^eTx$r{z2R*hE^Q_*he<+?SrIPZfaL7M)tR4l}QZpCKjv3Ci& z0h3o;5i8rv<^fU*8HsPBYkcITCkq#fS{+2$OII2x_pz$3M9TB1Xd+@S|ufB8C->)Li?X zem*UkOzFfcJiV}#x=<6qQ24tW`mseBE$uHY0BHIf!>IoVmrE~3KS0ZjU;h!dav3m5 z{5b4W;z>VAAtMv@30;#R7FAcwdn4Q`Z$CT1LX*=9<5NH(knoQ2ozt2%e$Dk5=abuA zsSp)V%hmD2RGok->-BWveesV5CPHN|4}crdK5vDxH#wS^vERQtnyJD_G}UH4B!;&_ z65(j?b!(EUNaz!fXk%TuZB;uyXgU^$z6^<=6ntkUczd}&Qag*0^TUc<^5Kjw1Kx6B z94X=#-#eN=EQN5S2;)ohb-sbPq}JeVqB)eN?sQOZvNmqZ&bYAbUAOgEpZt(C3t8_r zn-jsssNUPm*na=@d(6*bipeWP++&{?v}esyo%kvDTX8Vv4af4S=0CPfFMOat z)93ORYO@qXihp&satS>F7aPk(`GuxwS0cJTXL#yaYpD(y`92dbTaXst% z@VXZtOb3B(qTtcRW1i13h@z9?xI4xNKl5ee657z0<=%6!Ab0tdB$<=GP-HFf@eYwO zRiuT|eq5vtn2%5S_r_&a;8j+ey$|eDT&?8fajJbL^#GVQJ_6-xW8D4|OqD zuY{23fhl&K1Gg|l{H5=w7+d6dj7J6T5FaptU-AKX-I^ICdugPOZN3$ z!pb&+3QXvo!_;5@qJaYx_;j7k4b1+?v=wIdVk`URU8kTK5+d)aUX-QWt@Uz?!y4+^2y_=#V373i==Wl) z&Q)ecNiHrkLxP@DAX~>&8qv6}Wx6bmm5`PDNWj#0{#^O0%4W6V`Nh)9FCe2DVOXL2 z*YX3~eYtFEnh(4y-Wod~^(r{$V%gAu-N%l3FcsvTB1KjLWjMc9UK>xD^%62E=}rrU z(|j_Q=bfYnY}A52N~WNWH$5QhLh{vdC*9#pyceGx(2(l>uPD-wjR@B)xH6I#*vX00 zfzc6g(5r$=r?{)~0{;|v#~k&x0ttV%cEdR;Mg;+;+XNvi7-1c9`Vy2hXQm64{y!wC z3kNu}yUnuAyC2lwc2tyGmRw(~4Y`OH`z-k(q3wPzLKJTyTj5S5kJ^w6zGG zH|eBW)42WoRITqgN%ss5y$=@42ayl3{T*TN9JoU9>rGiiNvHXRQ6;zECv1bP-i-!(hrgYAE1b$&NL zn>%miEN;6Ie#=Xp-d@<{)W`P5pl*flj-HYb0jH#COrU+Y*iXtha*2!4<>jbHl`X@r zFN`*K`Z+2PZe#g$^M$$xiNCf1`uByVfnaLd9(g$`LALd>2GsvcBhEC4%4r}M?(qMd zea&>3d-QUruPES|w>#TjgT_?KYrKKTza|Nf`H<7GjkJU-jUUg&R7fXjhoDwUD?XS? z50iUaE0@sOPV)*L5xBGsGF}lO((-oQfz&~N>085?hiXsEt8^1K+UypPL z5O}c5ezm>{?lvNP=?p2~@{gtWnl?R9Oqiwu2vHGbIId~%!=KmugQP5SWOz8%^+Ko>b%!n4bma{g5vK3vjQca3i+Az?XF7ggf zTAtwP5*y*+wd7gTYUNs!W78fg?<7iF~-1icK48MujIB^8A=e&KPP9%!svh@L=YgamB*S!83?xIgP zT^PT%#&>tsr2S|pBH(FQ(U89c?a*y&;{A;wYCOl?mL_H;Bge_)t;m>~M{3)z4btiA zAC+%@Ji(r{{*y^Q z2CPR9&)m2cQI7YkAsr_ADyf8~H zr**S%ltf)yIg+95JJ4M4>KYLeeb+R!&40Q%(zRxut;ApQ{?`_4?)jh{=2yt9b@m8- zFXGg%zo>;CxiT&4ikgaMDJ84#>okKmSBGBn;Z!F&=9l)_?UJS9{#g!2Gl`mCv4rV; zZ>?Kwz{_hsdiT=&s_H0ucjTIoR-Ns7r1qw_|C%s8<8SmLH4gGO4aSCUl_?Vo=fv|Y zbd@K>xU}O;T2@UcL+NM5ay9&~J_HxE132`AG^vsWl9{j0U~C2Ay?%qBV*w4$I2 zL+%(=IOupG^W>a^R_{RPs6uq^{Zc5nN$s^y^Vnp(-To7zbQtS)Ma9h+ceZx~rUbe! z2F*O$BE4^Q>W7hP=#jA#Fp^?pOXh@$4|++WqGK)7gN@lv1=&osBSwZPFwsdk8ZVwV z?bDcRw}JRJ2_LZar<#M zOr)O1${xHQ)i65t;WXr=R%IbdPU2qZzRl#n@?rnio5o@3%!)PT*W#s*Px}4dmy}Am z(pmEQ{yI{lRw1Psz`(u1nn$29JF!=c&Kh0gh<2Z}SBmdvY7x&=F4q$3R5Q8ojw78! zI2YlUH)B{h4f9rB2EF&Ni>l*R1Zfzf-Fn#|PTMpt*<8VFowGAqHih=hXHbDIWS->M zPo>muMjZSZT|dS|T0LYmt-al@5lq}*;s||AR{Rq}45WQd>`p;KJO%U|wyFWBs(_0s zL=)O0LodZks&9;yMnlL}Vhd2z0X)hksO-i^sa!sc+zIHF)Ft}H2Ji*Lgz9kwW=A$5 z4u{9xb?*SgD>eeMA%)$KSZ*ws*R#@lgY9MaZ?>B@A>u7k^8)E%G5fC#Z#Dp zL4KuYp~aV7Glw%!$Rc8{zLzOS@clNb$TzvD? zLh~||I_<=*+CKX08-B3$I|>gB551~MyvZt9;M}uBMoo28lp2s>n2l1 z&E4M?2r6*=74!}0`X5V7%57{fUb(yh)14FS?B@4&u_T$P6~1lC{NqwX?}OQ@tblcQ z`q;hAv7!`*S0A&V`Prtjiqp|44|Yb~;UMu-w_A6)=XeG99tx-%|E3-Jh~>y4cm)$l z0NcPiKn^KRd0{xwAO*{$@i25V_%sztDg2O^s3oXM9seVn686LO)Ne&0#m**wU)t}+ zI$#v~0px-ZIVnLzj|n$aV5+O}81rUDKhphEqH3ZbmJ8CYgNkZlF<1>}ytbT)ql^BKkWlPlpZBQE39G2mnop<>B9 zk507h{-*H#An;UCmRm#jIlxEybGA+IM%rN3#Rr*O3CF<l#aDJPYr!QmWVnL&({8j>I`%s32Yq zwi4HjZZAsBInUOak5~n4dE)x17HSs3UuV593Aj^l-ZNMJ9qUn$ZlPh@0iy|ZBIX29 z^vV)Qvnd|q8<<-;yam`h3bYTa%W&jd$|mG`F)T_t!<&g&)6NfUYXQ=^w*;!hO^f>q5$sPkPF3k+Xs|-qszX~X0LL^`ZP@^C9_fh{mP9HH7wo_*h|2yIyx9CM(KO1(e;xeK1nfV+0Epna;*kJ!M0ua|DGdDZJD&aXvBkz9{@R#( zyOYHK@r!EIj~&Pcf3qFYp3(e1WRI7J*%n_{LT)}e7>|c002qljm|)yjB>sN=d-4y! z^l6LbG4o&;{tg0(d||-p`Vx5oMr-3&0Dl1C_Ci@@hUT27zgq7CIGzKvm_GMDxVrV( zLn5^Umss#!K12r6*3wFV_-4}(|0Fv$eOEGzQ8LXj_z;5Ff)t#MeICM-qhb-`rfmJq z1_mTRImvIfbsW*^|9V~zVTiDG$YO=UXj*UbaXzyzrD@jmedWKzJ zL8iPG5cCevfFiZP{C@_Fjw7CxW25h_ukA(ne?DLY=Ai{z0BC<%vv5@mIYB&IRe#03 z@S0L3h~eMwI8_r_O73}ZA~dN1?_Erd<|oMK&c!!DMNKgUDe(-Ve#A0^M$}aP@3GA0 z0HWK=s2X%1gc0k2*>1Idm_VB_u*<$a2L@ECxJBa~fLS&VSz%HFpD=#Xc5nf{HDD^V zRBVF{xnZ9I2>f|2L>0XNnN63xx>_P+a8dvYZ;MXm96P|O2_KUJV}uQ%CuM*m^xo#| zHxz*K4-^1HZW~}S>Wwvjpq3LBfs{0T|J$N8P<#uxfgE2u@Gys7!R+jjN%t?Hnff*~ zbZ+YhJeTl&YgsDz;+fz%2}?EAoEP9e^soUcS#LdslHI7Hk9%Fjv%eU|Zqi~tM@28z z<^H`8xR3y(B2lu8@E~d@zpU2=Vnft0L42NR=A1d?l;8N3Ui2pU3pFRe;K zqQH!!!yEv5MOOFRP6g4dF-dy3N{>giY5-jFJJqN2QwSLdx=(~s31+3|ZuPQZL9DHBl~sSB0nx5FB957GhQbO5=3YjI~auC*E0~(4kW2NFfE>YF;e- zNr0B7_U`1p^$krDPnpZ>IQRu<=#aI%3U$opw+=-MeSb|F{PJ`;|FILm3{C?#oR_E0 z=r`Xa^U40~GgikG0~k7gzH17fMorU#6-qE#^s3Q*zu=3qmUy}K`sO~2u7~R8SGyM{ zyrlT}3cQ_aMfU1UG1Ee7y*Bj80a*M?2o9FDe_RV!t}zAJ1re1zckszJgmb(6 z`l=V_bP$q^;O^H9Kn&cuT=K6})560Mwl$^g|J>m2JXLUg=_i?S(%kUm$8VY+xUGH+ z*bg;XmfAPM8Bi!lMZs-68wOj=>z|p%0=k<>(BPiG0D~c}t&qgpY;9$ii@@t0FH#&o z_;TCj1!jS?#SDZ1+Id1{-HK-c06}3zOgO+0jQx>bA9yJi0P<`DYH}BDh26FBI+;7K z-s?Jmf%DyuIJfuwDV=@*+Lf7zN;USw9(s(*3_%4eB^ix@MTl=R(;7%HBZ0}boMH+j zG0fNUw>y|p?D!u@-ecMrNcOjbfL40|Mr3;mu-U(gx%AukyWg4txB{5DuO6BN^ey|v zsipNU*kLw_(_mL~x|jZ-4SwI_?4A|^M)dmtr@>5DnGOTo0-fj|z&dZ6(^o1fn-aYD zT8k!>yLNyVnNo!k9vIA;cXawG`cXzp3E0*t9Nza#=VixtLZfyIfGmDTewU!z^=Coa zj;`cX{D~0&z?>3%JbtyJns2u9^2_QKm*+(*!6W|Uq)Lc7;6T8rWCiuwUNgXf7m~AJ z|GdBVysB4qI>cpMfZg3TR!gAZbIw-SHyzyz7Y;x96K6I(0o2qf^|R2w=6^Cmpz!x?X6;6csYwoK*Ir1EPuB>8EXp|En`#6G3lNB)@Ou_LVflSHk#dFhm zdhgP#mt$pOmOfey=RVoJx!${}&G>Eu{FXRP9xDN+54WWV3R9Tj=Ub}es&vfbRc(kG z@jBcn+k;ABxKx5AU~!9112gHJD9QQ>YfZOU5>KC&me>D zfF_Nam-XA6RA+`qFTPh_N-?MncrGcH>aIt7usn@4cvcVt*Ug2k%m2}~ydfYrn0 zIJ3t|GStJW2tbeW)Rxm&`u+gMH5f(SjmpJhx2A@j8C8Z2SU7{-i9)k6f*ICo$(&AT zbLYcCaSJw!{O~jY$^+^s%%{x6=)z;2N^{bfl(yCPg>n=W)db7D%cX`APJc(yTmazw z?7$rxQ#e`-Jb!r@iTXpfN4`9N8)NJdEg1sk0I#&dl&o+a0XQLhRaQsfOhd1{P5E%L zc|0TSE`FV{h2xSNEZTjT zJBIi)fg3g*`f~fKCyymk!6hwI|^qG8SF~udF+SH z`~~h`5$mfr$eVA(B^KxnwvujbuyX|VZ$3I~Y#_aiKf6#9j#ps*S1fm=ZM;uUZ(5rK z*V5Rid;UV#*NgsyqSE?($-b6&GxsCfA)n-6_QKCk4Gn`B|Ac=MT+RRQ(8%FpUO_Sp+W$7oN43RPLR|M$ep>Z=wuN6C_cHCs>`%b-t9!nCO z{YH|jlntgjoDDUo=e_)7%^gH=D!yr3|1qjrVASv=xu#LX6*+wR$afcP(53&= z4Cy5g!LZ&^;FsHM?#IOQhH zQlE~TorB5wn-E0{m7+{M-)_mfnm-dwZUSnZcwhntTHR!!lDzYaE}xhmzqNtgiZ`~d>^n3y;PVU+h_h{s?YO~FEWQf?bEhm+RlM{fUTapFIID}5UtMS@@grh@P9oMLNX&4)4c4n`B+8ip=y5dp_Qbi*so8l_S?bx++9yri3ZUW#fws$Yh58LeAZ0b$s@_~ znG&N;Ggn9Mm+7jyZ@^fve-aE%4ndl1k%Wdjr=>W`v0^!m`1~31t#T;7*JhyB&zg{xgF|&HO!s562{{;eW$}wPmiQ z{w?UlM54dM9}!q2#a%-ozSzsNYipK7pV@)Z_(LHQ@kn#PNvR5B@@)bU&Z`+x^$e>X zdJMnOhXD?pQ@x2e0-%y+(V8u6AmW$5a%Drc=R$;QyyVUL9%*t7$_&b5fs#R{Y73hB z9TxNQ`m(n_F9Qzoevi}}Hu1Mq_Q{rWe;vR0x%0?I!FKzV5s&MEqOWZrLVCvQ+{$KZ zJYDjdW6RKJKUVoa2aWjHe!b4lFvB(b9{P1Ax?CL@S^}2t177Sk(V6|1S zQP?0Rb1)p9-0@;atPZ%0FG30BvF}G)5qk& zq3yvIJYxDnXNqRjS0B+(#Oivh@ZtV9U`d`~BcoJ7|H#ksQh*;WBQgxjaTcI$43hDm zMDSqlK*3r!@+>gqe?hV-G zO-)G6DljSz`b}>2Y%1&{&pz*V&kzqGdd2B0#s{ZZxLHc4K&GEwO?OV((wSrNOWa2g zu9JQFGK9g%Oyp~(>rFL!4$_upT+Km+R1Pfv?=(kDf=}^iO=Fd#X7%=|C|%P69lvR! zeEIS8>U{S4Or@J=;&Iq+C1oZW_5@DrVN{CLzLz&|F0m-}Rub0b<)hQZ!@Cj39qbN*}D=! zri5~Qcb+PIo`%7IUg2b27PJ|oSjE8)!?yzi(JA$U^$5{#W9!oRuJ6JHOU08Hb1Ml9 zb}gLvXh~f7mNDt^B>Bx_`~pcd?cZ++FNj%ZO+*@UJdshAkB^nz0CJEo%om{@sBR1= zw5u;Oq1{U)xh2<(XvRJGd_;2I$N(dfg9}mw1ifbM0i(+my!%3g_Lj2hCOofb3z7nO zB6O(lw|SeHl!~*dpw~Y1xYZrWl58mvgsV8REfq_=P#?gXYJBznJ3&>#swllPyp*(M zJDNT|v<0V2@6|7ulW9cRldjkfT}<;}>mo^JHboQA>;}cMoDmEgGBixA5hl6%lsVk| zd4bvQ1Z{%$`kC`dTmTh5sm7%3ww}FZ-Lpe_4~<7nBKLTQz50a=#ivUziHI2^(rza^ zPK?}yK>mxg9@o4#e0J%_=kiT`7c^NSjI+e3)Hh(o=5YQzwd80-FL~Y40pG%TEQ^2d zzv#nK2sFD7HzX&;(dgnTFDh-M!N%beq#D;Y^wGWlKABO!Wgl(`+(0}D@Gtj<0-FM) zXZ8(^tQVEM&s3&4g*I|BFZO5qSEx~L$?6&btGu0=|Gl>whKrHQuiuLmNr;Jg6ls$& zYMQlx>AiqKS+`-rIw@%l0A*DI=kj3e3X8enjb4$C*|MKSRp4kru}_%H^hJq&0!$hK zB`MrR-Q+(ZCJJkqm@FH)LGT1B9i#K4Ib)QfSqa@vxd44qTO=iU#p@$wxQvH614|;m zWMcRmF(pEGs}`Yer)N-6SHmLK8up*w8k%f7*Il|;Fx3Az&MK`zR=7Gq5%L7M9Z zF1d^O9W!MP?^|7CSmeX-ilwPDsr*ESU;5QNBTN}DKUli*Yu89r{5<}!J6SG3YzDLc zk>t=@EOxKiaqYHI_FoeU*aJaLmNLqO->B;99(w`z(KBn-z&Cawq{4 zvQ|VIHzBSOouG3t6{>O?S5tho_e_+hdb}ta3)-Jt@mAGRAvkf>qRgTjeHL_oD{t?E zAnJEOo_YD@7+CRJ2uEP3X5OTG3S?y~>q`gQLmP4$Z27y25L{ zJJ%q}PycjiP<`^%5sNurgFuErb1BE9K4EA4?Mdy68*u~)L#ra8YBA@ttE3o^-dr4IB4x=bg5du;IQ3sv)<~X(iDsD)38K< zF{vW|D9EB&e6ZUOHWR$scW}9f9e*=VXn@PKi_G6w=RUVg{0twf*TWM&vbtS?{j;k8 z*NxvJeMs_|!Bj|a4vb$So@}Myd?{(7Ea{XPAQ9mmL}7DwljLc?okYLx z$_41}_uV5U6a}d7pYd(`zut3f_kG#uLoRMVEjwFw;x6s~!m@-G0D5dS<31S7`H0U*g`KYYUV=?M^@oEvVWIU6KfBc{w2|5$6xG1bpeJ4_n`$hTlt z1t9|bOTs({24fZz61U0Z{N)0RdKSi0FAS)8wegLPjlSNTMJy2|pZUyr0`}dcIfE9} z$TsO_O5!?92=Dm)qI9=JHWt4aocr}FKaG!eEoD6%BJm8;8)65PAf>KP_x!1K|4hXTXWDO7KA2o=z7hLVMLly7OM+ytBkP1Usg z3&C{LAmqCKltA|8uQ*lL(RAz(yM>k0^SqVgbQT+#^ppr!9#1@x!~X6mZd^{Qx&DuK zi5d8P>8t0r(zB-xQ*IboB898SfbGjsfPBK$L+RBYQ9Z@(uSH%y+E8XUfRy$P>s|HeD;M zIGT7+#O~48UdFvG%52tWe8?%sF&;Jvg^(BkDwZ-<-VPb9J@81i`Cq|E7v4zTj1B29 z9`dlUWjF$+tJ5A?i%IQ9*#i*NeKSEs!3~o%8|#Oyq*;Ds?S5Dm-gT$5QACkRLY7L) z<;yvuJ*dA$fpD4E_jZsGUxZF7(#J0a#V4D<{=iRPBEZgYbm@<1`F@vds#;HNw&?TC zAtsnu{s&Iq>e3ywa%WDfzut#1mXcs^jB@3$9oVdDz>dIp7JsKo*ADxs@W{ngtm|{PC$l0KtV7#@b^tLJwHid;rDC8y6qF6G|zh_F8dRAJb(2 z)dA}#)*t%*I5*WgVx0MD&BvFE3(>DNcYz3_M5X=!B2WI7=_-B>%{1+Mt7RttQyC%ewG?iH;2ft0gBc3Pw?UPgL- zK~j_5uZ8y)y$0sWS;@lBcLA=ZE8V_lKb)t0@q%R*TEKmR|7>TW0ChJB)W-J-qPE z31|J?61#(r4SwC@A|Kp#;1RCBtsB3ehp`JEn=Fl?cpgy)|U(0c3`Njs-(6iw>JO z&sbUF=mD#NC3A|paWI}u(Inc>wCYi51guWATKOZZ65DNRd|cxnGlSs(g_(aM8Oi{k zx~oEz+h=`RygEhpc*&<&N3b(l?Ga{}$L*6!a^R`JzrR`}%b1S#>8)Se(|Rh>#URu53U1hoe`Ufe=N~_@2v~od|wQ1Cm4n zK6$dei@5BBaa4SK=NrED&?|4sMHs%0Qi%0$fH-dmQ%-^b&)a398vxi4Ua;dqiClgmY)oOSmJZh_c24nSoc_Ng> z2ZyXanIbJgehk)|qc={h_vJ8No2-hGvI{d7ZvUtX65r$85@vR{?G4=(c`4B!-s)?^ z$&DkrzSJI^$UetMO+V(CE313n)?I7%mfa#s4yKI-!8YMFxK&e(4ngTbqxSiV-*mF+MX9DOORyd%mD5-*IYcXEdx zw%W+eYx&%lP}2{L`4xe^_}on!7(wR7NNXR(FMK-rrvrD2XQW7-89R+Wv7Z95Ywm~a z2|bfy&_wlscU_r|2&;J*V}+lD$1w8l?M*rErx84#pkW4u?tUAr5KIcch4Dna6tYP? z%TO_*q)S*YHhP;~US1t(PhM1N>Jx^sFKgfJoI#RtH=0*$THJUyWF2qQkF2Bn7o<4( zEdY34Fvjp|s(s`m6GYdbzWwKUZpDixC*JZ4nB_}GjHZya+)vmKNaEhou?(1So9ZLh z=kRYX387qO%{`5FHVD8T(@^sS0y{s2k3n0kahSufgix-5DB?7Wk!|UlB&LHJs%6Nl zEY)S|_sO%?5Bsd^>TGwl6-7IE%8ht;Ryhvf*_KF*T|<_ub10l4rx+B6qlUYwtK5c8 zH%o4-JWYJy3Iex_Su_`ch^j_#%5wq)5&xm<*Mhp5pGw~ zW$Cm;1LMOfH6Lnpfnn#e*}$bHGcvEG4*z8N@^YOi+>!dv6$5CcNzI*PHZK+#*{bQh z&f%Oh^{w-}uC9-HsE)J`Z@Zdk%IPA)5CyQxfs&jUxpnNsh`y|v&UREuaX0jQ6D6{q zY1y9YIYCBr+nn4U5ePp6QlM|YgNa` z6;Ymw{UR;wknUqquBc}th7#e~=JjtovG<7yg1?YvDRU)r4N;3*a!seN>AjWF2NX(9 z(w?S4n+?qO-quct@6?3+@lV7w1P;zFRnN~W?0D?@cFIR*tuxae6&}A}y;7KAgRCwL zeXKfPp{kz##t2jc{-fAJHK0O*sY(3GS0GuP(MwYi%X1tGv@7wRTpq_|6(kR9z!?|f9@{P}rE=rkz zE#3%_RJ(yXIq%JHj&CY$doc6pbj@Cu5|Tsn<0YtobLY7@ujtgCd$1MLVGE{fFO7qzro+ebh0C4EYX&dylz8+6T*kq5XAju)m2B z_*r|NWH9UC`u2w$i(^m@A2KsnPT%TB`7bB~PL1I^zgtiyX_}Pcd2NMY|9mhMF761< zKQVI_lcZz8lV;|#D9vt4tg8>eAQ0F)nEaM%NMMxr<(5_asjR?-p=}3&HtOJ8oCeg6 z7}AO~Maac6k_H9Ol(TS82x z_norM*Jc9w6WidGDAB7NF?V`J|H$P`hW94l-uyG@^n{7!{0QkoW-!`H8LQ4N$Two? zGF2wBr^K9<;6`bMI$U<4rgrfU=`h?aC+;L>b4t`T_auFL?cav?b~sJnj?$>e?SBMw z8XHuy$Ff1??`Q+*Dq?f{Frr^+4nsiDSE)uB<{QZ5V>qi_y#-wga7 zJ7WsEKRBwypJ_;+C*ZBmgC^`+wPn7)MA73h@1B;?oP5R@5$aFJzOeWDJI466B*T+b zbv1&a8D2lZq%}}&NBEnhTRH7Wwt#dSYRpT6@g<(A#SZ>IuK=d+ilmPXSM6;MrIro4 z$$el$;u{*;_bjV@toa@O$<}#6_X{Dm- zt8U1U^};vu_ve*~*Es&?N9*Sx9~6r^4Fm-IK?}~s@u(+!niZpaSG*<87d!Io5jCNU z`q|nzbQDYCgEN5sFq0HFLF0cYy4Otj1K>F4XKPt~A2O<#(TS_4T$)ttFOGL)^<>Ac zIEh$AedLI7xFHL1O;;$H13z+Zm za;3h+**TI3{u$a>Twc-}1)nY+xvwHIN=4URpXHj~0DGkp`O#2l?4&u6LNh+(HGTaw>cHCEDA7DcF3^C|x|LaIJu zv`BNGGh8bJ{)|h9l~E7RRpf2*D}R6QIi8sHBJO#1$dhcAS`G++YS7prwQ6QZLX+Sk z)3}K_6~Q+%9(wx4l}e(s6{k?EU2jM`V6Bxq%^LP4+MrR;j+S<>! zg?lz}oegaH^~R0T8{&pwLY~R4CzGR$=r*uiqT8^jEnu1v<^RbgI|`=Gyo=gw7>c~F z7FK#vRz)&dA4!%)4;&KPrQPs*twe5NPY|d^JOxhGM}pn=+UclPV0{e5jhEFx&%Db; z*67_DPAbarK{fmZ-${wWokd+z(ug2OtD}5w?6Nz5rx<@5!hdDi@9yv`sc&$HPPNP4 zU`*u4Cr=B3X-8o37`QszJFt*fS#>Ih-G>Pd`ko?^=33TjC59r2n8;0Xm&3r-fb?b=^BQF@awf_g*|WEElTG`ApW z|2Q3LNSbg_)?D-G*b_2Ce1lL218VKNyKcpIJ6i&J_3}dYu_4NPVsyS|{o~eS1@DA5i<&;?-mA?2^M^0_)dQ_(3AmcF zZ<_CGacGrY8vkF9)W3h(-~v|4y!GwO17U;4fLE23Y`+N)Fyv+08%USHjPV^r|2v@- zP21qHc7}Lh&}_<8D)Ruc4gpNZyTYJmN~iILcfeK%vAv(AWxWIDhVh<6PP+9tC5!$H zUvgecb?Lbu`ALp{-IkvzkdTRq3396Y(O(?@x@A?@`6oLGebZmbeS;BKb=T*0vw$kM*8lC9r&=KzQu8;|g~ z%JJt)rNerR%af2l-_cV~Ol**d)v@ciw+)y=ju;fSV)1-gm4$lCl%r_>1|^ujWWG11 zOCR#w&0-bT`gfW=#P@~ZG(W)2NUCTvQIahLE=KM_a11O$sg7`-;6()D3UC)LP9X}< z765=l7^Kd2y%{8-H<%doh%xNuB)l zLS&g2kgW=GYD7&01zh!cUoBeK{8DoUhO6^KOB<-Kv-nZzSU&Xl@2ZTu(mo>`BjzKX zmm8Z^1+0HmFz|)n=0lEuB1`OiJRO(YS74et+mxa9bdUtxBTmoZXELs=8^GoF4TxB(d97vzp30)&Ke>U9 z%x&810HKnGHPj5pv&KPUeMQ&vm+CRZzgP;JEVue8=)AqD25>=4bz4Pums*JR97;`k z>=f2mHAcJibxKt$dKAKxA%-ggN@5_*Z0Q&gGSsqT>? znSrB5=hgneK7n=umN?xcYfb;vEU-Lng95;InlDSR2=cdbdbNE4W@U)o6vasFkUIM7 zpvD_fx2Gy?AOpOv3`)q5y9GDA2U<_z9i{#-ZspSS!!g8v?K1iS4>nCnY}b@!{GT)1 zcNli^C~qBjlh3n_oHWI8a9~!ykAV2_8);?Z!1w&D=${pc0to6-$~#4 z-T5Y+*;-F-!2@6sbkR8vZ;r#=eIR|F#`)^%;uQBo^j_HBN&w-L-~zv(68td0A2OD# zjX}cOKrl)F^a5wPBjlH+C(#XLbR*TU7maWI#cX#C?7(=BkT@JS zhQm8hitzS6(s?)qht=8Ba7MYJnU)>b@p>-+D(#M3xNw$y``We1 z(&KggcvUsITn5$OWkwDqrmR-o{&r^cg*K9MVi5EUjN$JhmS==fD=fy?{OLa`xCS_g zvYKd=On~(p)>Q+%3g^ID_Tez=-AU8M^mls^+Q?6&c-IqGar7hEJm6e;MT87t`*YEi zl6i6mG1noS?fa@I&i6qW_m|3|YhiA{!+ty{5uR7p(*CHErmMlV6k3?ORoq79v{s=c z^6UBV6@V|EcEHo_xICK$2AOGKRL75}E&2&0Se>DdiZu$D%(`H40*`ks*hsI7i%g1+ zor{m$`cjtd2cU&ngUA0@+tCpqkGd3EP?fFCf?{rGnVetG>^hem&)gEYfz$dy@ibnX zsZ`1rY$#kmR1PoHYro8_1NPC~*!sh+ZIRd;E?I`tgkE7_LB<>i_3}GI21inElM{RM zY3~PIHl7SN>G${g@w}(@R%E!s;#JfqV-ISTYySN}Fl6JqFuOi{S{)OtcfY+kqjnyA z|5yOv3VMnH!^B#L3^VWNJ%FfjR`0ih^~Rchsf^SZgm-L$&}j=w&W&mI~qRy!(UHWdczN#DJqtY)kS+32{_kKOC7~p|IPtHQ#*bqd@ih z9(C77W*&x4k_wLCEq+o(LBcnPUT}#X2e1-a=u|l^Kff<=v^Z$t?;-|mD%!jUojy(s_a zzrx|OIEZ$P%;o3(y}9quzz7Ciq=A!;))Txz((?AMW{fm%CxD&jWmT@F1i=~5+}Q5y zhVgJa7{rFxhm}3b4>N94`Ka*P?CGK>FPNX##m)G^?~P>selXdPWz}K*QF~z{FqdmC zan%v@?~^6QU3TmiGX+LQC9L$ZO^t^g;rcGp3!2GRisc=VR$+ALMh|1>bP_6eNv5l?YDFCIwQzmStKs{w6mtB530b(QBOY-L}58n}JP*+ayxs~w793z^XWRFh!h0NXT*UCptgcg{OZ<43x3cJ4;MNluY)LBpJCFlA9+vP?2H+v&|FX=)KN| zA(UDvaV+k|a?qNxM_rs$6=u`Q!hf*UHf9tH)xW$^KSeUZ`;Rq~;JnMO4fO zlDjD__r4Q4UqT?BJTNq7E-{uXnt)^sG>4Kh5JDMr@~rycPvP9SynQJD`?Zvs11lHo z40ctr+(T8ZZxpIkt8ijIYHtW7o9R;cW(Bq_Wqrt&1i2b%)qhL;GLm5&cBC%azpOIos=HO&q$^OYJ)c&AHObJx)iv%_AWWq`C&1EE*GF8Hpq&caIKp^hW zT+U`qCKiLP{iSiDD|uh?L*`;Px)zXGnQA_G!=ScwWG9@I}!xW!Aehig%-Ow-<%}Z*dzE!+DwU76R(;D9vCUH)dn`N6X^(bAg@@Q+S3TP?koc*n(S)%ww zu)-gpM|UGduTD?WZayEe1R7xZPXK(q^F@{v0Oo&AlzyUaV?`l&3`#=V@M029z-0?r zgr6%>nlOAhgo0)eivP8hS2}}2;@nh786oN!2q>6IDgOXp>znCE3|i5x^}9D$?Hg@$ z%?_#Wit>2nHTB85u+5$;X{5x7ULFon=4HYo?0SEIawf6^#zH^m={NIV3HU&2j{U7) zjC?|O|Ft@oz4oK6ytj7{^jj9WP=661rYKfVwX)T4U+YFy+4)N<1JqXeq3$N;EiY{l z&8baVcAeDF11kVX%q2C+v?fg(;)vL^*VOl^_{!)dL{@;~d-@)lMCjWTLC4P)V+A_G z6Yr;7q2*wJRDNc^Qfzg6gUb!%E22&H)EhuhW)<`)@k}8lW{Tv|Jy^lHP&VU}4Cz-; z>4<%S&w&cEcX#fM$JSV(UiL41yF(Ci=*;!P{0ZD&dCzrQpS4P2%5k?A#j9!N4xe=M z2j=5vm6A$wN%9&e^O!F{$P1zP;$>k&2k^*n4MMxU#&T5{A0?SGwueoebcq^@8hMl4 z=8d>g;X^+SHIfW&(lh0ng^=`MBiv4R^Xdnmc$qwVzye=UP&jrigM2djD$-=d75#HoKe)Lmp%<<3? zQ2Y&jQew|ZYEOG(a-Fm(Z~?#pI7-B2dJ8v-va+a|Rpcu3CB=Kry13^7f^*MX8DLI{ zu4SShNxOW$lR1yGE8k&Rj-kbUfEZZW#+A~2ay~{3e$z7ZmmB8^i=1=0h#j;7dcaS zLPm#BBO@yv>k1H`1;7VdOJNgttHW%=h}1<2`L1;QD;ZF#e~_tnh%{$fjQCQWlOHI- zvhp(gJrNIY8ns5Wfc?rhkVX{}Y#}j0T9)0M{F*oB*19N2pP7k#PbiBpF*2kBT4Z&c ze&F);ZpSWI7V-9OrT|_;_X)qt?p%%nI5p{3+X-U^;uJHlhyC%pk3bvSP11EOxJXea zFDpNnt3_($Ks#30erZ_J;86V~$`ate6}?Gb324=he$g_$AZnv7Vs^W>Y9u9?^!hmv zhudLB|MjC{3Ims5wZ?zH2M*@#h#(%kIZ#?fQH@Kms4KU{)B>KHs6xS!XZwvS{l$jH zk}BXZY;#BI=LnuCtAWJ|c5~J5DtRlXaYSVM&r>(;YSW%yd^fy*kILHxP3>zj_92LA z+d-+6W9fPE4CAf@FY`P!r`!$RbvHN-Ir2WDH&DUEt(IyqDLZTx6VEF6P69iGkqk*Q zlKUdXV05%OkybXxhxXw{NF+KA8NKm~Wa#w9MrsWM@S29>n*{M0Y5(lz^Dg+M zW-3~y-N0|IL9fdsIULv?{k!7+jDjRwx4YXlrl$Q`Du|er9f}z_-a;x%i3tC=3Mk&W zuWyJ^Ngy9QZrZ<>`JJJcZlop|^(Buvni5&!lCq3cVfxW!SN0d<<&NbmLM9gg;|>07 zfZSaDF;jBuKfy@KSL`d{pjkA@ZzHhDl|te?r4wM-y5n&oN6)d=fa${2`iDubpOM3u z-ieKm6p2`V0_iKS>?oN?*OfS!U7nrYyExqx-qdcEVDRBO=(q#gs;tLi-{wxf)4ZE@ z+r4i1_xbrp_}#u+|CycJFDV(f7Oao{pFH&Y4|>IgJn~pJ6VGbkYe=}r%jRHZb+{;@ zPKt3DNpdR7YNyE^jo!Ck*b+vU>5gwidjTcLIIlo?XfMk@j%|21gAL1C!|Y*hJo}Cp z0RpwptbGl1H!eD&Y+hh{<#!;Qv^nm~{BR%dyEdw|D0vn;JeeK(ztbPIFB+KnfMM}$ z#EfCgNkYw^#(C|5p-WKEwah?o9cbq*gs>gUy(_OBk4Ezr|K80(_&K8)fxt=Pih2ox zy0EP_=irm^Qd6aL3O2of#O>+tr72v-q3+-SsWIUodwpb@fQ*1e($; zKBaI+@KF!-%XVWb^nMy4;Q57?9dh{*GsH^?E@b%Q?$a|hZ*%tvFHQw*Vmbk6`iWt% z@?=jK)A;LikNMRBSIn_aj@FJ4VEx5v-0;T$7==Evyj3h0IPG!xkH zq~I;>TM8Pyt^kt!4chkjJX(9(v>M?_HCbUp9X*f$MDn9z9X{`w3o|{TKc5lYd?2fD zg6agU#1%#z1VJYHKz<7Qo|{`1Q5$$YyBHrRzP_;PpnZVfe_42X{8Z#$<$_>G9@(I^ z>cXex?;3J$;!b{HCfOb+#=wt8UzlVr0PV4bTHCKib<4@s)^(RoN-u-r z-qC|(OvZJ^$C=gV=8gecvepIoHpH&M_11yIVG4h3pwQ#{5X~1lArdJLtsCf!-S!FB zLjf3?;igY8??c^s&@SY;12wINk(CP%F+#M2M=*uVa0KwJtoH{P7?ckf)4dj;l-BGN z2=I0fY-@i3uz%};4^qDcODQm%COO5=BedhSzP>uH^CXb;EWo>acnm5$<^!pKop0g@ zL)amrWvN)729%xq_zePeE_(~XhszfbF0uCfN@(X@Em$gL3Y%PN`z@J0`o;(75e{o2 z5`+G9fkD;3Mi?)4Sl7J*SDP*&im?R(jL)t_PeEsRJhOw?N3onE&{FpAX#4|D zlf;C1;J)O#dNot++It-omLv4)aT?~@)hbqE$-mh^P7Qho9G)Tw|p{AQ4e@kjE4(JAxB0ztPwD1D2)C?hsAIXOkP#5kmgN>{&D;91t zpIo*^kO^&YEhGvryV`5fA?oV=fwczO%pHl$O9coiwV*eQUNbARrb{=SZ+xS>;g7Pv z^r{Se5l0WW&%vyQ!ZVDVs+$F;WmoL`;h?+@cn*cV<{Fis#qRoOdtHRI>3{)~=hc&U zg03a5KvV5X;fMiSc z$FgOM(fp+2xpKol8sq=*qWyb!e!q1&qNs4Z^#@i`muKGi$=VLt@oEp&CS7QPjCkV3 z&0az|X-VnxfS3v(=(}5)MMkgJlL2vOx8NRPKG~vReQ0;B#oq;#lvn&c6_J!e(pZ zSR~GvxpntG(H1S1+)pjy*_9!qFUvY7O=Gw42FQeN{+>&6e%p-W-d_Iq|8;5qaUlNt zP@gG$UmYM??MVjj^v!?`2U*jRbn$!O7(DlIAqz5D`j{>LAcX?+tlMR&6=%ns<#2d~ zY_T=M9_V-#?qEoMH)`Ewf+rHIRBp0xGz<9$RrO{k}jN{)ZV%qxLI$iBLKoo-aMv7D6WEAMx`U%1$n^`<6?TPI;{+ zPl%JpQ3IO~v;!R2*6v6BuYLUeApQ3PfU`VD81*i^GT?T%h^F4-tqDMA7D2i-5nf&_ zXH2iEL}dw9AhgqD#_lh8;^5@%rzh#6A~&x{cxkqmYXP}c>eF5UE+gy%A=)-gZlh=G zZ=^mNWuYCUi3c2l<#`LAz!LcX^EO_>gsHnX_@P~07hk?$+h@pg{l8ulEX)9KWSGki z6@b%-_SFo)uT29XiIVFY|C*>4=QlJ% zCFb#Gi6lQpyBMf0$l)~b*}O&MRvz@LCrxCEnxI?xcMzBf6^WstL&NKUz{E=AHK``nlaoESp!4_>xhS=wyav^4&VyTE5;Q2OviZKP8anJDsH+qqt&z& z7M-oW$8H4u{r!DEOJrzbnbQmHhPMJ73c52OM0|r(jEzh7x~mPEP-rSTRQ|(BYpm3? zZ_PtP2$j1z&HKvrc)#m9{pkwc5by>pr@1U(Q5W_5(I)qD?vuV}Y01|pod#(+BApGT zw+hKJqy$d89IX(YMcEWABhgO}e2!t&h%0aitLs_CAtkJi>v9**dEShzRQ-LAhK~-m zw0`;6J!7Z3i)|(^*#k&1$4GQvu<;Th758MZK|9!SeXxc28Z3%kcC2fvG+Tu%N3nvA z8@JO2YoU*pp^ZwyPMU&&O)^K4hu|jzc9`$WEKT4<+$6~i#wcn)CqIe5o4@Z0bX^wt z?^B=&bw8z5yV`|EGEw+A@v%>k;CGV#?Jnde{PfI6X0pf%sG@%Y& zuRIZFTIV*5BE6D)o}aITN0vU?0Y^UppCf@Fk;yTBeYbM z%U@uN$rfmAY9ZB(GPzrLdY=R6xvS@g? zPf)|V2F;~Jx*IS(zS+FiDwb3syGtg~l;is#XTBvdR#H}s<>==ad#4PktUsvf z(l)WoTI1x|YldsUI_#@MK=PtA>8e!nYRv+3N`5*#!l>^toe;%_x($w;0;U&MC9IkI zad^9G*0Z%WjDyi{K`)=HCxZGO?xWSdY};6o-&I-}I6H@E=Iyx0EOQBaSiX-&P?Z>d zf{OZhg|B5&H_2-0IKpC|Tyu;i?s9?K-_WOJJjX(P_}5jSZ?}Dj`%9NQO~*l4!d_vJ z>R_S9gRU|X{{5mXavCWoOKQvaqI@Dt{PT> zC3-goo7|@QHM;hSYxtqmbbq1*aU~f2T;0xE2V>5)pY!5&0D}AsA;~57P1j*SN|fCj zHjuw!K%wluLeBjIOi{P{<_8{{_EOYA*uwKK>k|`@vk9??C?uhp+A|(|FNvXh`&7N$ z!X%F_?GaX0k!2#aD|8hY%R1VzNUa?b=Nj1hZaW&j8uMPMu{dLNCvWJ@zH`289g$~R%OCTio|?VCMnWnz(&OKL8)`JVKGV87I$|O@$8=Rju-ht@T4nK0=~C*fT)3*__wk%(nI9}K zoIHTdGi@`HK;DTa4N>^=L!~+np6g43fEdI05w(=yqS?~U$|szoVckUO(YyAshdOMn z<#~$hcYRc_4AHM?&yTiJ?3Y`1FAWGvM;i~H z=os-y_WbYdM1iRnkW9AQnN(Z3)*G5r;Y|qlFW!lGL9`khjuF3Wa4#+Bk&LjgE@(n< zSsznb@7B+h(BTll@?sr%03-crda%puU!4aK4$Zh!nlp(hxOinSF<{;Oy> zsdoN{I61u3FxXDGZ=W-Z-DTOr#dYs7S6Nc*nfMvBi4EHR!-%~b*+e+O(HO>I?Gmu~ zwO!=Rx4ASQy+P{TebCfd3!ytZoI-XsEW3mWiRYPyI%*jT%!OaT`S}$E+)y;0dt$ug zeAe2z#gVUBcsh$51bJFz80NYO6GGZ;Kk#&u&jtze>bMIFo$56FUg-{)PgMY})kaN6 z-C|@JGfx@u+H>L7QzAp^9V3P#L|I9PvNu;YAEv369O}n>4zTZMrV`S63}Z$x&AndO zbJF#lzN-jX(C)k+)rF}3Ebl^--TFWv73D-!wy=ur$L00xi`IAWR_v_h&t03&KCe?v z@$IYYNrO})xWHrfuR0hONBv-2L_0)&PmP%7LR_NJ??rN;t}zG%+kYnLf$PeZ|G$i3 zMhOUs0OBeDH)MX1xr1n}e$bUz=Hr9we_w6%>vL!oUQ5W0MISjajaz#${=&v~god-S z$X$f&hU?POQ?CoO)B+NdDB>s&+?yYhRDUe2yK<}34C3VCF_PZhZdDgI1dFIP39*Ug z=oz%JFjJ3q&?`qsVjJ_rv3|Bmq=DWD&OpFiziba z1t*;ubL@KsCKg~pk+*wBh4tAo_J_ec*tHA)LPu~aaeAihy{Cy4<3|TukL-*f7s-z~ z(PwERC<=l!27!kYz&_$h7F*x`iUJVH26os^lcs@YW8*=oZ(Mht52K->KaR>6V(5yw zWx{Jt?Tp->oxi^ncq4f?e{S)>y0zw|U0*6L%R6C($~T;HC!)}`lF(xFeHG$!8Ggk` zr!8nO^&4lc+OD*ao;g8sR7&CPp)E9$c4rE*mn8G7?^i9z(9VkCvwuR^fwmL_7dK@ z2fr}UMoEy@Q6PNgqm`!S!8DJ=?9ZLZw51rEz^AYISMl2F{Y znlP8|WW)U=fdbaN4}QZi#`8YC@;>3Dp|h*FN?R%{h#|&JD#YCCOmDs^G1|LOs;*m} z-zt7|U)1%LYoeqvd@$HVepRS(oQMpSm-%^c7%ZK}m}T*xdCAOJU5C7m8AW2`FB=D* z!Al1wyvf_!KMQNNaYaw&);3Vkv27zpd*b$kpFkQo68KH+;5YC%xP?P#vuN$Z5#{pwL{ys-4w74cd;j(kWI_=+ zO{VvB0PAnh>k;2!hI1AP@?KpQuPHY9r{Uvb8Suw#{-X;>B{vUg!;jJChC{)lSFWn1Z;;6wk5 zApI3leZ(NiOwW?cO&npGBP@cRRa>Bk?Ips)=U<26y2cDp+kUcib(@|yMK2uM<M#Zr2@Z{H7OyM@SrAbqe-I%Ya1)TQ!nF6nrDR^bq7s>hx6)g2(ee+3GNgs9-(5qf#d6o0&EJ^ zPyc#=$#7t3e^F&5V}&j_!-sjR`dPohN|a}MoUmk9W0SHg8_ut zH;xr}OyV;JMR=uZo|@X%V_1ttU&4zaqF`NaI<(D1))Gt;xxw28lK?|zprJD5M=oy4 z*=`qnS)fzpwj(3^;NVqvJP9_6^ulsd;r#vJj}OOM4R1H1?-;i~l_io@k`=^8zGaTZ z?WeW<$0y@*kL>-}7cD;a^#&WxKt`^tgy;bmAVK<{F0_Qz#66aUox$(diU6M7GoPM; zOc{4L7W@I55c<*U5Y*&nve)0Kbn{TBo3VvtIby#yNTlv41EEWp4fYY$wYeTq-{;at z7(N-^aSS&3Rf1WETha|RmW(fvuc@O^IOR~739Ywg5P=t=9XiRhe+y+G7ulBw76h1k`#hq=E(*{}@EP}+Ui{&d zbBt$?Pb~v@(kl>5%iQ|2a(T?=T5HFQxxF4kySS#>FYRuhW;Xa^oIhAV(m!RR{e({z z8xQLwSxpj)aDO-?!|=SpzxZaV)d&vRNV8)7$&Y#AJo)hOR=VUp{B=gJux~axmH!W6 zXB`mb)^>eL83bei>6)PoN>XCzmQW0&q*Fi|2I=mWl#nz)KuSPDq#Nl*N;(FRj&G0W zaL)65?-ze6IL_R2-+NzsU2FX=N7ND9+9%G4nfQRr)k}~0!%k>$2h^NFg^m+%l+DvTK}8jU+^a+Ua6NW-J8ojo0tIaqE)KA8v7 zJHOUwxo++AlW+c2G&?k@f-miDBl4P|!u_Ng+$QDJa8@G!uZocp;Xj^1TnHZM_1|T^ z4zaShsu>iHaZmt;R3@aZCOB(oZ{N+~fL5S-RVu>B$G!4hfR`?;*w1@`x77@DOJl&R zWi7QAsX5-$mIp)WU(Iv{6v1OR`TD!+Tupc?oxK95k(3RIYsLy14^$?X+{hCnKCojE ze=?5)Au*HtG73y|M*RqdhS3GgdF+-P)k&$NDB$|*;kIkZVW6)GuaB;PW-T*ozpY2o zkqL2vj6#fMOXv0&-wMgV#ga%|=Y4W@I3=oQHA;}GyL=lkk1*?RFUU?a-+qrA<*chO zIQ@n{9lpQN&)TUMV~t)nePcQ<`z`M~Ay0(i)|jHJJZ-CA|9U{55CWbCA*QbjtN$LD zSV~RYA5D(q$b*knP z|5gcr{k8J;NffuQ>athKGx2RM%1_UDT}(;7`0OY?DA_C`%77+^l9n?0`HnE;5T?Io zUDThhzTsOy)ZSOjh*g+O+|{d~e;h73D3QuSML%zTQ~EvG8?y0>oO6j{$pT5wfQIFD zhtLsA0cmOB_M}1Y^;T@YH$7kCjj$RZcER@+uEDBd53Cn`7C%{Q-<>P%I4p0WwnT1$ z)?l`D*S5J_2jr6n;ukzjdI@hKs`6c%MACu4j)0vJ%eCoBu=r@7J^`)Q!-Sa3NV=c7 zk+V)O*~nsH`i~-?GAY-=e>_e{i3|dR(@sgQr|!JVYV^l{n7QTGeD2@Ou_V)44gc$+ z-rxuGVF*5lQg9F*{Nl$C37C{n$O>R~)=Fz6g=P`<&H<@lvXd6J=+iopD&&y$4f#uw zLYKlrm)DpP7=%qk_Oub#yT8{YBn*?^CeV%U#L+Sy6ElX%kS;J!e?>dxvs~EH3!q<2 zp`p;{ta$n>Cf2B5Y@H5Md^w*up!0Ac(hj-TPIPw#vb`ve`^Rc*6gZ zBJiLH(W}0h5i_j#8{P@#@Ei~otut$*hkr)jM|?b@2ejUS^8nnMb{gjRd_oKN1NiR} zVmFI}A8jU^?On;dwW?pQ_%3Q8e}aaH5EIeNT7~t5DWBh#r%qrbcT$}@@PE|l$YIjS zKqP35Os-ItcP-4G=r=sz5Usm%vI@)Q_iWwr|9d1H5Ndq{L0Vuwc=>ON$qV+srt6eo z%BgB$AO?wX;!FWyFfvDYte`Hs;n|&8U6}(dQ@Au z#HN;naIsXNKZXA}V0zArnxNcUcHf8vAnnhXi&pyBL=y$FmUI#V;)tA!q@(N>_&azZ z<#)f`Wu{Tr-R3JR$nWT|R2q$xI$;=oy6owC(2F%}M~9f~8)US9Ks%Q7lJo;v17xt`OyuO49{ZHx7`31$wD0a}w#<+3 z95&te>|8o|+^%x_%PUrsq-Feinz3t|>9)e~Ooh$NvbZv(U~uvu{$Zgc~3HR{wiifE28DB^A}yWt8WGTfqr1Rfbd}E zmx{Ff2yHPNgY8FRYs>S`5;89c;N8Y?2H{J5q!#A1OhX3MfZLXt9K>aT!w?bmT%mwc zh%O;N{4CVn>rOV^(coB~3XM2Cn1J{|bmFjC2>)0knS}GGOf>yVVbqKr;y;vK83^-L z{&13PtJ~|Z%XN4IR-Xo-AK14oaG3R3$5#_MPHFq(*#?TMV~nDEtN5bj1-&pOsm+1kF$>-@$4ss}nb)Zj&Ba^O(+x=#FbAzy_VVU=(m88j zWp_rafJ-q9-cS6LB~yTu#d+)L%b(wTbTg_4Ltc}1O}GvhXom1R6h*6=|HukBFlKq2 zdG?^@A!Z1AbOMneRiZ8x&?IG6rQe&x$i`d$sVW6@Y)o~AcjDUoRVQJ?oyV#zyA<|1F+5zWL(JH#pLF&LK8Z>P z65NjS_iJn1W)F#pgVNOC~lerFAjA<9&O3Kd$m#JV3F(&tC7+C^A)T54nAqy)%R z(&aGBfs<-iYN#|_AuH(ggZSiEzn7U(c{?>f4`hrhd7Z?yV-b>00%FYQ>@ z-2))ZTc10*{U3rfs3^R{46n$%&1N%=s`FRlzSb-13G~S7XV`Fj?toU|3>#)5(2-q? zcJ}!u3?ew$on-x9tRmzbS_^C6+1~WNLT(8){Fd&I;S(Exx8x-IQ0Y$KWH9T~9K^I| z0$F#gq!KNYo+ygUn&oNKO2&<+$x&w%MTg5>ZFEc@crX6px|mCM3jgjqh-#aQ6*w{4 zyPMq|P+f8hRQEJ*J5C}-l5ipG9NOHWkQ;O!t9(YZ<=j8|4{3KiNTZS z?DmH-LGifzG$tg93T92*oxi_y7QR_ipLZ!#xSjELagPbdz`8KI`x@u>tlq%5bLy}< zeZK|#!z*;3hXXR&_||pTboZ{x*ZTdRy(KGr-H@uX6Q7_vSGiNdW*3h^0y)0p{)yF! z&<+Xf7Sy!Kl7ggR9Z+Fiz+;q1XF3IXoI`8*fmE<3eX8iCiEhO2HSc;1E9|buayxZG zxragonphq|Co+7KO3muGgj^Ig|3~FV6RRC&VF=$CHG?YWjqxMtV?((&koSO(NUGFP z%}+Gyb+)F*`R0jYe>wbT?B;EXxnpD)`XE3xvMAO+9bLf4^@s^o{hpzprhjl9oU2`+ zU&q3$*Tpo_{|tu*rihZpCl%2)NUNYTg^!d`LjX1*|L#t|7xS}q5t64*O0YjbxXDRE z+{IwS(bnJI42SDGBlqJnLNILSN{LCL6B0R=jv@n`{FkgRKqe%#=0)c~N(E23Nhgl- zGA6$3Op#vw{Vn>ETjUDFcnsR{lG^5^34`RDL_GAYD=~u)>nu^dI2lfH){gjh|D+_}@?iNCE_u7B9`_PoS8)!T4dV?N8~~;qZBKqUe^Ly`Avtxkos!;iC+?HOK%)wgw_$ zS9Fx&LDOq_xyQJ1SHX?8Zz7m?{lo}^ig4DNnQLjFy1!q(2<{cvTFsDC)->VDVV({hU{H!*3vR@Au!Fl-{IiS-JqD?NQ@>i!nc(RVviQl=C-E@<^@DzQmKp zPuZwnO$reH0qEfGS={D?gb!z~8}(P(%}=Vy(~*fU=Dteu*3Xp|yt*TLuh#6^XL~q9 znAc{3m2ADZdR^9p4(sy!H=aTLYR;k%Q{z`4;!o@Gs}Ys4h547sF3R#qI}OD#QXx@{ zav&2OK76jW@I>`*Pl&{n)Y~Q>cx+fC2&5p|$P-RubZ%PTT7ahsWPN-9%Bqw|Z$ys6 zSHGiI3QOvii%Z{?Y&%}x?m_fvRamWr_=b|SA(7JS@QmUCRS}j~C3$0PHIXQ1Ab1bd zJi)_>b!C^TkQlz{nw&UvbyrvZYBnQv$zGZOaaRN^sLC+polxf_O4xtTHz#XDQRd;J z6D9R1*RdNrq=STW6~Y8~RL2Oi= z4G*hzN3|!iFl#2GIC6E|ES`|mtch6v6ze3#)XC$t(BeR8A@tL*Z zrc?6^YAThJlf9M4xl;`I)06r4qd#o$>D&D?O`v^+Me2PI1Lw$LM*OL_SQ z6ISf{t(LD@0+-2`_p%U;w}t4~nbYRv7}|(b{@!Kv{x}3mOSpoIwUSJa0)E}ZeUs4Y zIxwT)_6vsUwV@RQT7H@T^iY8^2gU;Oz3*^xK3+BxU^ubFkXjMErU3E{X(G|rshS`7 zNidDC^j)yLg$KHDNcj(HcuqyRd0qXtU9hee5-nOD$aU8#Nux-f{DLSmKmXJih51?cg z)%waml)$bz=f`epDelAQz+aPz`Y6v!`vI64k6kx*bUH@@-2v^s6#H?GNT}>_mcY-C zVwZKrABVvWTyT@db4V3i~SI^PcMtGfu0Yc8~&s1RD}<)8oDO1lPdAIowP z)Qgc|HjYkMZmbPzu6YwoVdN?;1c@+NwYko&_i>jG!;Z{b&|cmA@GiZh^oi+yD2{bk zLFO^oPhTt`+b?gshAz6)S*$49U?91~ye<6Cv*2RtgwcAFoo6wmH{X`_$tOtN|tH#CeC+ zcb6HjrSrO-na-~4f8OF9-*4zB@c-%UNWFDO_dCTvSdWQ^x&$3ib_V5=*5J-qsTn#4 zKe|S;4|>(J9M21MWsu4UU>gUavyyWf!P7Zn4`3JmY_ama#7unjxP&3-0L+OEVFq0;2RTn zEXVdBu;ygdENl(DivsUiYgjNSwh6F7yH;@cNJ6Ye~Tz3Z~6lcDTp z{2v$K&$96EJqvzvg9|J3#HIwpo}~gkvTLVYnlkZSZLk?%Q6Gp;FT$dqJ$HJF+iq#9 z)dK*g#S_5!#W7}6#ae_8sKkwCp5iv(!7aMafz45#dKf$~PHkZX^oUW_#Bon>V%`L4 z!rhhV5k1eNT$>CNf5Am35ap6x0T9q=bVi>eY(_PmPe|D2w~4XBtUlUbL>;}1Bo6|1 z(KA={fa^lEVRYz!7)Cu$QSuMO9`}T=g)@jx*Y^l5(LU&ZBk$&VFt8eIv(%M5A15%4 zG?Krocw7dAxUcAO3+YeM$ngLA`2Y2XC!$!y2RhdD{Yr_P5s2i{mGfVrV7$2ha{M#h z6_|KT;URd6vM_?pAJ1Po1&#P>K(-v>2M!G|z1=LmK%mG>!3sZV^s9@_mmKENIdG|# z#E$kzU6wP0j`Pr=lt|~L7a*PQ5Jt{nj~*Pv4Ctp)|^j`+i!YCPe0PHwI;8SoqDtPEGv=5mBd(XyG(|t_r ztAfYm_Y_WnA$9B~7(dnY9B{hPNf3H*TZ_?R1Lj%Gs?$T#sISMrS5HpUgq?PbcLDk# zMQy{kmqKQG0YFTgKuY!ZQjDa~T0vHAX<9`InC>H2c=H}FIdp4_>T{u z1aI2ng*Vh*A+70cK)+1rj>VtmS~NZuw6EYjTKhf?rCvw`11mRGg;#QPLQfE<&N|@u zR!2{g)c2>7EPJdOe^;F;=5;sP9U4eTLw=TL-1*M&uj1f6J&vvate1_GrjuTM_3@{* zYv|V9pJk07+vf#S&f3UDSRYOvI!6R6+m--nkvo2UO_Ac~hr!|dcq}#`HnTt82j<9y zO6Orqr3AUvSmQ05NuI%&wsX)!Y{^utCq5g=Zw(Pzh^;gzUN5pDz#}3c(qjtokh*TO zF<#EbOJVFVxlJC0_Mf(g$us!#{g(mt^cLw0mwKLgGB0W@5zaT?@%mvo4Gb1grVXJ) zM{&gmJiC#6FmS}k&%Pe8g8{jK4+6KaVQyqGkQtAb?(C=ZOe<-x}~BisS)$& zPOnCQbQkvD9hDmt=m~gxC64G8w8&3y?2k2efO>If3skv(T|V&a4+`RZjQGp%$~D~A z$xq|k#(4^|Z0CIGEt$=V*v72kw9V4wQInODI7XT81V$+Dy-fWI#H}e%Xpy=qw|3^) zDR0X%vlar+!IpuQf0?3&?RBCx9YPWct~z&X&>CTT%ACqx9A{JeJ7K1qwWtK(e`J&5 zP-h1-2S*K5qDz%j=Q&)*&M}RoQ|zAN9HJIqrQgs^zOkuW@zV^np5G17X$4E`hSN7! z7!;o7|F$0luO+>=PQVLf{DAvTwKyGXCfjxMj~Fj7*}haz;H3&diIju4xK!JLRWjj= zB2i8h#A)-`+nSjv>JkFhowFu$!Ivg{%U-zXh=Dek5qLi>>r;X8U%3{42^1UA5kSE?rWxjBbl#pMc00zCwW5sy`XVu-P=m{ZKV z=LP!T3s3OkVw&*GL5lu0LrD0_z&rWY_2R5RG9J@ZG@t9f3KoxD%N-&sw9zz98_B7M zc2j*S_yRIm6RrGjPti6bMNxPs4xY-?f~1moyH)OW9=L+a-xb%}U$A13=0E&73tHvZ ziaveT zt$w_Jd1f4k6n|{;Ezz1nhQK%c+;LkxL7a@7OPbo$cu!Bhsy=%{5vmp}yN?^AGUw>7iiIJ1MI~nZAHHlH-UQ5zcmMnh#1*kDj;=>9! zt)^?L^s43_yhgQrly7-e*d3-Q2EtNwaj~83rOJjYWycvBu7vly4$g_!-N80Gh6s+n zWC7F#DKI@sCsR_^*!qJw!6Gfm@j=PaSTA7Lpy%w>DUTmyJXJ;S?|K29f9NKEMq?E$ zy92sO4Q=L?(jv((vMT?yHS^Ko>-?ARg#U&~1^xk>K%8FzRYay=rR_l9xo0P@>I}?* z$v_H-E7 zm-Tj#bP1uY&RlMv-CJ7FG5ykVD3HZDbMr-U2Bz zHM^ERkT{%Xczp1uP-cog1i4Z=I*M^GnlIVcI!EDwO3NX-a>J<)a_vACReYf&2_s3^ z=|#%|=4cRdfLKhVNw#>D@9g;ZE;o69^#xK^yI8M~XeG*pPj^T8?WoOdYXg4L45h!< zbcm0kyhJQrvuDs{WbOSfWZT=~>g}#ZF3Fd8$ToW$df$n1%S1_%$9V{;@zpMq&JyF& zoVSGrT9g_i9sU!4QABE&DAG+4r)C4h_-lP=$1*>u4=94lo;2Q6NqJ)7zXzU+H9t28 zHP*dtSU{>kKZR5gDAsiYgYDugD39c+jD-Yk_CbG0s4QHX3FDrR;paaHk?&8{HJedc zb%2pw$=f5ybVo{m%S7bs(uTqf;;!f-o0!H}<- z5&kCTGbV@&FpzsBgLL&2Qo#tV1Nw{Qm;(o$M@lU?8epbZki9yS+GIFOyKCT^fs?1_ zyp@b|SCf4cufCa(n$H&9<@maopgjqW2MB_H`5~^qlEY`5YmQ>N3>R-Cs8lp(48HkC zseZTu@sFju__UY5f_1s7-ysH$FI|AqsSVskSH0lGOzA3>NrNY3Eth=!du_s?L3=Rp64x# z#<)Jf=8(Z{2_n7IG~djzVcdqX z4fT`D3*rwxEYz+S=qMkaJz2c`+dDMiGPSHxZ3#nGKr4%%G3Wn<4k6fhJkBuOTrz+A zah@RGdz2UruW7j6eH+Ql*i|)jIRt!m=#qR0;HG3d`CoJmr*F0};GuBpM z4GLI^qiWa=Zz|`T$bzRCBPsj{>HClkDa2O9Mp8soc~*gDd+0N1y94u`j#8ZyJzdde zPqB>?c`ww}n@L>$e9UFZXB8gcSeEeQ#hb0OcUXx2BM)Ok94-r199RQj`S91XB+Y?i z;A&EF!ll{<#Tp6&qYGD?^`8CB6uUtTX*a2PiveFIbK5y39y~yEo81J6LABI6SK%jmKq@~yOhK4v= zdUe{&$0=gJX0FR=TAPI{^OSvvC{q@WBEa$IlewARhFnZ(Qq#oTFW}sf(9+tLREo0M zUGb{1QV~(zJ!knX`Z`~VK9@be?d+WxVhf(rEqw;+^E*ydh>9Pw;@~WDKke~Sq4Vp8?0Ese2kJQ|^TxbJ|(3UpzzB3fUt%8qdVJt8VxOU;IjS}j}$VE#q zyVc@}|J#s1=OPJi7_{)PEnwY`(wIys_6%5Z72DOQU$vS7)Bn4ffY*Vk*LyY74~KXB z+0^G;`vuRpyt1Euuy~T_LU*Ji-hGnjB5ic#j{U`lEFdLbf8bh{e-l{k``Gn>D>Yjz zuFa4Hdn|GXv0|jspZU*|8_k0j_G&MZ9&ILl{7Z54sYW}Bw6}nXdJR3SW$OcAOPFQQ zlJqN@0CBy79Z$e*F63sGw`#&Z*k8vBZJs$s&#P8Wrg@@EtM|2#Q!uZVlfX07@xkW~ z!k~lR^Z+ap z@y5-K8c;Zky`KV!;bh10cOcec7c$+$Bo`iBmJNUX<93U3HYL$0SkaHma_;SAxBC$r zf9C0`i7@L)ZT$DZhP{D~-y!Y(EY3>MpCUH&t&Sl-t#J51u^Sb9=I+6& zXLQn^hiUhi(VS3zfd~d?dPF>VBsiRv(aZcC++fcE=j4pid|vZW21FxxWD`tEt0iaz zdc)ZQ<8+ZJID3~rAIX1KWG>qQ=vruD?M(0`RrJHvAK5`h;myI^`aG(%pk`RT%WIJf z7)#U7J$?^GTJE0k8GOf?QO!w%^?@=*hAnorf^mdv;hcLcl<#WbGrTk2=P4_JA0?sX<5f;DWVOy{{y!jGcQ3?7d19Y2_&TwseOhF|weYj>{)j)v!3)3v;$j|D$2qlt0o z;hoF(1gwN}?jDo^i|G#!E0Bo=r?G>YcV5V?77)vRMo#wXV!l43EXYm8yKlR+$;{?g zS8~V&?sqYBz01=SH%yH6`MTbmZp z+{Tk$*BY%DVBg@_u-&Hb6|#1Uu94MXxlw z$QhO#mhHh$1U%KzYtPVkvcB;2uzZDOVO5?uL3t{N-rDddUeB<3qEWKi3xQbzJnQ=3 z=J!FMI93ZBp-HLerrH0}Ta#$_7i5;#fSI8pR>)jhX|(`F5?Z49i1( z6(03a*i)Yo9?5-}1)M;d@B-=8CG8CA%Do%|WcqQ^dS|P~e0R6!dj1H0q4`MvPe$or+j}C{?r?;;yn*4XXWEd*^Xs zZ(*tFYF~AMb8Q+Vsm7-n@xSTe~K&xPrp_AmTs-P*M2Fm>bCgBR( z^eoFG-yiwFPEtS&nkyX-wuF>bp=RdImWY+{LT7v zGx^J8ld{TEPS2}@X8&AS0Ez`}#{H?szZL$v2kv0{0BUagCtyh|WahD*E(cWOgSsv- zWiG{KELSP9x>x*S@)J0;mm4lNffmFfnm;xIGI%wg-z#0ITq;N(0|v%Bd&&7q8Xtj2P%2W%{jgGi{ma~jx+ zYUa*QcOQJ23uUVY*0Sa>G#@5?-HDW$Ta$Drb;?u zjI%GL8tfe1J3N;j4)AfIX1zm zp$GOE%`-{Vd>v#`v%U$=cs#p9EpgBvrqBz}$4$wg{mf?_An{yMAC32@?#R(ER416n zB}JaLOoINhT4|%*7D%evgKnUSV`1JFEqE{Kj$b^BtKU@@P;PoT{T5xRK1~4m_K=sL zc5>RMGS1StEaTn^69d&TZFy~6>Zcck{p)(k`2$4fJ=do)Bog}9e5xZcl)j?a15Ov5 zfJw>}iW%6O#BDSQ`hKK~*BGkABl4^-w|ZPp-I{BAkA4W2IQc5I0AD4;SR+?3%D z?;8|6O9%5dh$dim6k)Wn;MySs{IjTpLg^Q+ihD@W0NRT+y$gGE1lH|Wvf2HoyCCi_ z7<_~M8IhplX*U{md;lu$S0xkuu@%4Y&OvR$npQYu0r)Wcl;Ho#QUA1ABYYDF3kQwA zrsREDcVs&9#b)NG^4QnryPn10e@(f}{3fgged*I{aiG9&0R9>qPXgIGbMUD+zcTSJ zv&TjDik(;u&aIwuX%ifXV`V8gYs~T+wGg;`$Gdq$F>H|FuN&?C8pNNvKZW%ZcE;73 zlO*CGjOS=Wd(;nsMWSod0n6C}pj+1amg|eoAR~aymyV!ge z#|AYM7T<_#KWB&Eq=a>Lpt3R<(3ZK1bR)AblD?0w>N2;BRz^;vM$l z#S%@BU*T80XFuzwl$ZykeC88>li7_+C36BRt9*bQKywTW!4YRH)FfwVqBZbTjUs6iv$pRCK|$Y)af#4 zsQiLr)2N|tzd@bV2~yq&$*2No5o_WOU1Bq2Ej~b<8A4B$XEvi;;1^D%Ob0#?hwvGB z>0|I1N7WgD_I5m2O4m-S_-0_KU}bgJV@U$E8wy_hB!3Cl3&%nTRKWxUyrW9ylYLs- z!8uj!e&cmUiXsG7yTtZfH!hs?Ud8ytv+1^!S135Gg;Z05p_5l1GSkrAwr?b%5xC7Q}h()!Yf$p&#e`x;_V5F4#qV zBFtT8C+LKmj8*1m7eIG8hTWU3^+6WnVY9W8+cbeEcYG%9?$o}BM!AaoOZRxkx z%%@wb2L7QftMDy0nG&iKc{-=p42j$7pdlKq4XjkaeGittd&1M8ho0@>3@DDvzZIx5 zsNAS{J5#=O+)ACttRA5>ngTwSq#t648a;PZ^YTe|&T~%F>B(irXYt&w^4e7Qj?NgP zDd*YG3=6^^RHJ!Hp5Np5f2elMixRE$2+q{HxqPvmmC9&YU?=qfenoRWl%i+NXtHth zVHbCD2ufRC;`Sz4z3WjMkLGr(`)`M{fZwb*_7dI~SJ5|0*&RPdcXgEuu>#+AKGtq4 z!!!rw^mWkmHW0W-_5z&~+I-o=>vn{7r08?t1b`0k?z9lScLVb0bypVNacLoAztAb$ zQ+-4+iZ}?fE0up#&otSjLx)ga*E65;D{|Jl>u{(*lQ#;!7#IGzy+ykRM4gW#$tWn( z$CU5vh?C)x)%3>PP_*YnU3r9Tw7~vwn^rFYz|Xj3hd^|%UQhiu*@l;bbMGim)W~ZpFvmWH70g%A@NfFd;bD0 zQ}E9XAw|z=1DwH77Zbw1D`Rbb0yyl`u4BH1lb|nh-by>bXEi1&t2jdOAPM7jK z>Sj7JQ?l=u5%eC;!&w9IcBFY$&yFK5oC+e0ogCebyz3p_&=?~gVj8`(M~ptny7#3K z-ka=GHM4>@N^vQbS$;mO#beMa@C6TOXPRTbqH|KEiR&$|W7p`gFPYI|iWb6XuC`QguY8Wx!@MAx2RhkFGo>0`1ezQBNY2gcI zk&7*_B6*K=-*aFBp`u?@zy9d7f~3f-rDG?2<|%v4OIH)eI%n9o1Mdrif>nKfvL4Jf zFyA8Jn@hO2qn$J;_Z)h=6<7r=5D^5*ITIiGXz76AB{kfB7IQ}1aeJebF5M^tmJS|S zUBsBzMTy5!d+P9^+Uj>#=AVPMz?@?CT0dNY`Xrd{`+~;gVMeeO>0)fS;uBWB2=fX= zIB~djrlfwUR6r#Jh1Ub()JMIfac|-cl$TLQ<*1oLNg9xH%?xkX5^1f-I^zmFd2q6O zc9u!dazL{)9lrH#`A4==#Mx<~axzcu;DtL|s~1F_tjXx%-S!^Qf9|7O zsZ@{r6eGR9`wqcSq=k415hN!eLuSvm%js$SB9Qc^P|);g+g{DP$ZX|u>Z7MmK*GL> zG!#l-z(}f{H}02uctu42N)q>m!WCPveW>VfSCMQ(`RsVAfvi?{fk?6!KXeHFp_(u# z-83p~ndyR=f`ey}l`uQCdOz7bV=f z0p}=k)Soil&B9Z)5%v@sZ-+n7Mx*CM{329Jqg64e?}V^DwG7XKwKQq{E7;G^8rJ|0 zjB3kQ1XRTy`U*5g_e~%q-$n{*PEQk>2#L4`3)9nYKq4z62?@qmME6%sTkK$ulGbkEk2JCZ8%xNR>%g?b3Ynm;~fN_cW+9GIe|_ zi;J@62ScIK*v=k8x+|%MAj0wE_xsxa;QjOi27w_dIUI zZA})aYOzMVdj=qqQMl^H_AE^!j)dg=ro*cbFWOwbpJSt@0&q-d6?t}eGaEl%?PA^O z#Q&bqau_q1?%r<|Aj4_0O&>`!Ps+B^Rf$`$-$+?R8AaI|K8PlXaO4{m1P(SG`H+z* zmvNtG$udOph8qYpG<)rJlqhjlH9hM#3!4!=C+%n5yctJ*ni#1KN8fmQF*6K}-bgZK zsWF@Dq*9b|*G_wQR~l;<5B$D$DPnrrDa_Wpx|4XnQjorS|DVE91I@u#XwBB3e&_r| z49naP;I5j}zb(E{(EItrjEH3z3!w=rTq2P@uUncO7R(&}pG1+nP|UFxOWVE*uaHtN znD!J*g&f5KN4%f=*`HR40w^Re{jlb+XA70tYfTR0r@(Aq6+Eb5j!fMCX413|f*f?9 zW+&_tsvgjCU=6o;@d)m__Qatb8kK-A1d z(7n1h`@C8DwTJ4r*Fmf&IuC=CAx{Lb+DwwT4VwM#5!sj*?z%31#Z1OhG?Yu`!?RFl zO8Wd-^rZpyy#6Gp@5xwDX{M9KCKY>EvPQcUu861_;lKQq+bn%|9-q_}DK7PB>_F_9 zAs+#yMat3G_z@UlAcM(DH4o>484EkFC#m^cwz6QgVfc`pCqO6rTbT2`Q3IZF8pq)| zxWb1zQ8U8owfgGhByGmex9`rE4!)JdzR)K!X#030TsUd4*$r_zWnk!nj%M|Q&Oj0S zKd!cJ8yaB^ChVOwjcQXSdRL?nD6qe|ZVAUyFm8_MP4e)ZU%KfKCYRmxrECebfj*LttG%OB}- z0Rdp1PSsYe{*qlO!4E_CI-WE(JGC=PV%TGHk=KND_x)muerAp&Z(&#-0cC5rc>64g zLonU>lVr)hott-FqH>L^Ug19`@~ZgG64(~n*CQzD+o~;KpY#ftEJccDJH!H8B|)k? z4fkWTa*GmzdBaukZsV?B(5Fh!!xx_1#}!TI^6c`{JJfH%mQ|3`_H_GMY}BUD{z)wG z>nw-NFVH$-|XEL&>Ey#3t<#Dgp$CJ^?X8B*k2@vyG5g$lIEW0d;vR7 z>J)E{bn?Q_FD;I?o&Crp$}|`i$o8(GGOGiBDe@xxU4X^Gs*1eaAxk1ggM@ zAJ^Z%EQFb=V%VmxqsG-QVIL7RNMe-n`^=0SH(Jg_EQ|Pn3Q9RD8A5uW-0C% zqpEj=I2}*hmbAupcm%dDQpiXJrnyaRY3t^U`F?-C*4WkrnCYgcy%lRHw{IQS!fV>z zyfzEho0Mn$UZ7HTMKiu5^(Uj?%R{}y8DpkN3tm#XOpw-It-G)|JEvp?^KpJ(Tv;Cr zyx@Qin-;vi77;JJf7;N*uPQ9i-b9WE^}XGBsfXRb2Lf5xqUsZA5tyFzqm~qXFZB(< zQ(g-Tt48qwlu6Jm_BG!9ic@xWh7PBnk_itUk}=k-M|^ zfH?BWTrjwqVY14{)S;vtBy915{3T$OI5(LqzjhkH7rcLB`ikJV_`3bHJ!s^&6~sA! z1;sU zS@YWU;v@qWKZ4?ete8GP(Fz|i6DrkYTbW0?O#I~9xgSq}H3hNDvz@2w^nR(db0xli z@N=XO#sMS@B7K#Y6u)~Xt2Wz++3Gp|^t>E7?_0ybXKaB4{;oD=LZo-St##9&1_Yd+ zfBxnhP$nhsuh^Tb==)y1GkolZOq)=SU`HSsM%fvd8MSzhe@=>9TWcP?KulaIni^ew zdLbC~YLnvZ{Ileb%B~usF3RS6ZefKVS5XqaB7o>sm<*tY(yOMn) zBFJhCf3W`2Y)q4$mF!SV^&2_972b!KrjDMjE+qZS9m$Yz%5cs9NccQDL;-Y zHn}164LjN=H%TU3ahu4OlRJ@Py?(m(D;VX`Y_Idpn zM((;PH$tLv59W7xMeAaJ=+aoEkr9=o-#!Xt$uUYmc^bs9BbuwCk~e!8=zo6xVlZ5F zZEY0N=M2kl(bG70x!z;E~_bVkK{b&kq-R*30(uT#C}*}CoM&U$tL4UP3(r_8Mu z*Agq7F4t`8peu8I^rLe{W4F)i=?_5+S!2`od1L8#y@nxUnyct)Mo)HneVFHk@odnp zqEKmaOqV+QL4>4Wsb^9q>@phEHw|g>cg&jqF&*&e+}ck9L0G91=`QhvQKB2Y2-=~<$wi$FZEoEys|p!aBQ=`BR{>bsM|h!%xLl64^08Tg%7M8VHx|^THiE7 zEcoQ%QxR6*wQr@Tj8gX+F#T@7H=IyzUslHPF;aPUDWxPhmnvzt)}-Z$Aw*p41)Ea} zM_q-~TXP&k`!R^LF==>enNL>b^L#$YQ>CMIFw<-yyx;HD=Vx{-Qpx+Vw}VZKA~_T zMSGIdCu1ewCsTMR*=f5W(mmpw3OPnwJ|`Fpa_)wCjlB)c4LAj5&W#X^GpVchVHK2+ z#_VJ<91lJS`~FH?@k>a{IJLr$B<@jDV?G`-1*JaI(eNATCWu0g$h2p@)|TT@uM)CT z%BWr&zU6vJ(~)LoCmfduzKxlLk^0&hae>i+M``&n6L(x@ZtGlX(wGqDNe5*Gis-`F zWd+C+Y06(HN0Zfe#Qp9`rQVqwQeI5t_v)L3iXj zcvZyrqYLs1LYZ)O7@?&73FIZBU0FYmbc`bSrEDjE8K)U74VP>Tq{G3 zSI!1TR!rojw4zG)tuc7_O?yKrf@b5b#w*yTo2nrjKo=hT;<7c}9V#*LvR^fNZm}j? zC}vF1{BufXcEok3^-tEVWgG4g3Hs)+j2-1Xvl22*OVa{L1>RBP14_Rx0{=`@n6%F) zOe{Fv8`nw_(^yfIo#`-@5M9uSQGLRGHvOWxN=iXPgEx$NSLeWfgQ8VANKA=5o8ML7 z(In&A4E>+)rAvK*Y9Xq@q!CuvGAYtk7keo=m~-Krx;%7{O8I6#;5MHBw&RNt6UL8{ z!AD9$H38gWFJU=H#XM=e-;HVk#m?w6g%m=zezFSHszZyr#lS1Jqb2<|4-ZES8dFr< zY#P1qUFL%frjTKOw`RH+`~?xm-Tu5YNGHb0|8+~_4QmB*8)NRf=j+t1Caw8#QDb}8 zP1VnXZ><`z6o~h6nT0AXXtTSuD=@pG7fR@O4&#PF4on{hgcYCKS z;%U|ZRn|Yl9cj8EqCKhg#l0Yf8^Z}?A|`rct!r$JCR>_fzG0H2xHN!V9QpMKkjs7{ zH9md>S~C2q0%PwAlw;&L+d8~QD#!3{ramk&{}eDm9`zvj3%WOeri%LFPhF=+2om(G zfQf`GD~w*oIT-$ra?dGJrc6N_$FAgOZh*x^6|uhU%vH_zx5G+@`)xjwvzQ8VXZxEq zj$@PW%3xDV9Rn#rCGVv5)wdiQ)L0NyiN@nI7!bfir;|8SUdG^bTY-(loh<9ylN%@`}Bl1u`=C@7M+RXG8!-4}Wn~FeI>t=d``4`NCr^ALF&N}}L z>3u5KXuVt{-O0 zTeG}f32t9!%7IUbUz|F~Pgi)8FW3(=vc&JK0}&qP72?-w$il=WoJHv`BuMsLzQ1J+ zi%|GnW0IiAHkcJL6Jy5hhaiSqo11If;J_pbM1LC5CDZQRF|tqLfpXF3Py^eYv=MJQ zu`j1sZxQjNoEC2ybvq1k2Gc3!qi@G%B$1--)rVNLsdd!^jD4ZHvHpxlfxb-JsP-qQ zt8y7bG;i15Z#68q#rr$^Io|`eyaitT?+9mjv&G0A%^L4V%Er%xgN)cyf+gFeK-${i z4v#e*^S zrPYtgH@OPs*Q*q$Dl^!L=8|J@bsZ`o%rY1z5oUO4fT&F_>Of;OoLmFvWy}9Yf>Y@= zFGgBgtGrajZ0IA7++23)bB5oOd!xVR8y#WMyOWyx+k0M9hyDAtqwo>7gKaP{g*JUY zi6DE!#94N7^RBtPUQokn8S1n-)*8$MNyA=G)fy)fx!0Q@5X!TYK1=7zoxKVE5xZi- z{&$7PBIs;%fTZ$OZ1Z`GD3EhW?|OnsF^pFQ`h?$a?`5b2hGN`hx=uOHE^usS(Pci; zS^Kqsz1*r@-1AHS!J@E+o5f;j*=-7~Q2~k6FXsuI6Z@6tuG8Y`&R@+ARlL$0bZGi; z#I=i4=YIk&?+nX`JqYm_^aZ<+H0`2$k|1I91(qr66`UM~3RfAYFy$HZ=CtUzES$?& zu;w*Q&ja>eAM|NhH#l30a4)a2(#hL(d(vZ?;i873%IgK{# zf&9(%!Y;lC3fJGfXnXx)z`5MvuxBhFW3niX`}MH)O9535fxe?hr&kx`&pM zGLe!_X;2utOKJe=R7wP-djRQf1nCwK>F)m?e{tQ{{oKz>^usW7&Ux;=_FBjBJutJ4 z*yzo8e>jC6If>E4r@90HX`;+eG+3wMc}j;t$#z!tQN ztZU=P9d>5TA;}d6`m7PNcl^W&%VVLpD!&ZRRSTjx=4j^=%{_&ANaMZYg$ja+?;7*% ziRk@~wWk`G)FUTY7<6S1;6~0-%s6K>iUJ`FhZhWM+`GQIOP)bO`4ku;>3eN!4f5#* z#%o&8X~$G|4zbv(w4`$4mt5LROjM$4qMV@t!LHF7qrxnmE@qWnHq& zELemLPGED(YzOt&)tpC@i0g@jNf%s7(GhXazr?J0j4`5$!*i?lt1fQ1bUUnr-f%1e z6?fBpEnjjYsdD0|c=f84&o{0$SOU+}){K>LI!g(b`M+8wIzSw4W zNpJZ}aFOXrRD#;;I6vLB{F8?o+o;?n&@-5iUhl)%^-`0EcsxtPUfAOo8`!=a7%+pS zD6q{iWrgZ*R*W9LUyKW3Qp|89y>keQ=6+e0D(xn#cd*y0KmLgU{!pb=h^axiA3Sd} z1TPx`7X>2^MMAE3?xnKwqokBdDG~{5H!;MyAx@3vUt z#_q|a)$2AhAdek}IgbjCewD?P(x756TPqQOJPC2&3q#H|W8B$hrI}xwVe^!JJjt-xK4j+a)8ZU9bUvA7B-kjT9M+w_8R$npL;9&+ql2J z(FV)VcA*!R;rOdAN|iNn<4z^4B#v_&t#WnO1jZ{8?>u|8aRZLUe=U*kWax+Ck>c43 zXJp!JoO*dPan={~@Z*+t_iyrJ%fuub461c1JCS+GI(p$PGhhOAT>f1r*K&E%Ea(-A zo98W??NJnhG*sF&q~Z$}d0LGbniLUGX$qYxA(dG?&nyN;mz@Hs^>Nfu-##2_5q z0Wq)@G5b+KtP&f}LMK5E=MEK5!M5x73vCn1Vp4kD&v(0wQYA?b%Rwz^PuuKQ9)(*0 z&*HO3Gz=>daI7NyDh^MmtA@nciuXsOKv3^3R9C zG$}`QGv#Pzv{))Wm$DT%p-H|(dpb(~zSyAWE3f0Q&)(psKK8od#%^2M|M#Yicn{?K z@(sLcpLGc-6`c~}zr5t!F>(n%E|&_nl#2b@{aBN>N=~OX^_Z8|Tct>-CBf+dCvUp~ z!)OCL#d*1<3}p*KLl#0{G{gUHFJ3-Fw3j}1BrJ#IsRDE)$=2$~=&?b#Rvm|~KD68v zDXa1Yh5}KJfgWx2zA7oNY;B_g_D{j)qIKy&YnSi-qc_K()Z;n!P?K5&3hs2$$NIT+ z+71nZ{}sg|^%VP3y`tdr-8i*YM)+~xTPY0Yh`J^xLcW)gmTSANbFyN)y=ItZ4Q>hj<^U-?K_75g&*h z)zZ2XH3kbwbUu^qXiTYI7{@DBcA$kK=EK8(LP^`>-qBzH19be0_({coum4|Cv!P+4 z-Ff+bf$WBXvE@di8{;ieH_n&WK{5+Kq~Zkry4|x}WO^p!S<0hAN37SfxdO5evXVN+ zw%bW{3Qc(8-o(h56Fl>+*j1E&@3-Oiq2VcFbSObC59k$!r6=O@cN^S}Zr6P+RZ*xt zCw;2$m32-BrgQ^jSdkF(p5`}u@N>E18NII$Z`cS?Tl>34G6cpmgyXKZtlK2-j68M`({&FZ-IVGr77WBb^}5>oH}D@f5h%FZUl+!HOnj+G5P+ z-VP_V7Kk=Dx?1%-+o^#~mwwZ#EXdF6eg23>>qT%N{#opw^Whh1pLVU@{)Nv!FXf|J zIVee=RG=o;AS$L6SzlVgv=ekNs;Btx7B4e#Z)C@cUjHxpL1sBpY*+qz7_)GY&inGI zj0_$HZ#JrOKI1=!&#vHaDt!Gbr+@vm|M5wX@-|ltBN@@*z58^p6#}H*VI#4Q1nRmK za1cGZs2Ko}UDMR7{BHPJ^Z!pxh*UJj(!=csc^GDue&xOaO+A%fc{+X@VE@8RPTa7+ z`cF#ifB)$}+R4lVCT_2_;!kgW+{Z4gS$dD$)FYlz$I1TP)%cIV61>@ee()8Pr$2_P z&E!tk;PrgH!^l1FaUenpYx$Y(Zd(nsV_3YDIFNq~cYg$X|NQ2^KfJ!}8{keV_9N%3 z`}9jBM#S;*{~(~qWNs0Wi#Zow0Hql9fXs4Kardx|_pJ|Ef5|I9$b!^c5tF+Q|9)$k zIKChxss%VpV1|a{+ERvw6KuJOEg%!FA%67TA5CWFMVrx9oe?JdAj z7*Z}73Efu|YQ^Jg8&25*EZ3_@h?F9wm^T2**aK;46BQIz0*y;%$VCAXEYSyO-~)a_ z>MfsLBBhVOamar*`_vgQL#(QQ7=@XV{>hzJ<|uviv(ya(kVJ~Vf*i3U#X99|w#!s^ zpe>BGN~1MVBCyEY#s(%BF5Bi?WE|b*VVqU=pl|R_DbeeX#Ig<>4d@ zOYT7AH>BBCaLR(I8Zci2n!sMsz9*e5D1nC*XS6M+0`k~r<|!aw-2gf^S{D#w$85q& zL?1sWwgVLc0c>?hAN>mT1u_i^Ys3wisB&|;CaFBImI~D6-AD}=L6pp&`zDi*-Y0J! zOpG4<;Z(oUuZRxoDTwS`%->G|v9YANP}MSCDGsRLaFzROu4 zM2zGPvFu9Vs0SZ$76j^$5FBlcb}q7Af%9fyJ{Zl{nqeay5`4Y!ap^689;Ap!l(q>_ zzpWut>*TrKwC}5OH)CuAow_|twh25%1ZR=QC3)#?4@{IPOo|kwPOl`*fXx-xe;pWH z8mECqMhB8Ta39YX35c&?2a(0bhL#T)kV-u%EIIncbYq!1|8cqYf1dvZzs5BHMASlS z2kshWuY+aq?Q`KQQ!~960a^(=}0y0XRG}q@B(fY5`#iZUs4#lA) zv*diYg}Z;lRRg4`=n1V9tEHWLWd7-%dJ-lAGx6+*GS}-EVZCQvCYiJ0r4S`*o%2+n z*b)*+%^`c=8BO6}o@7dTK~V*g?RAH4J(7(J#4|<)3+n(G%q+;XUPOvfPvL)MwB!4u zP@Y>z0fp1%Hd0j$GUCR^yjMg{=BA<|do*Eba7;hW-qFEHcMt+c+Y$L z4z$G^K%7vpCJI47Oz818aPUx?@wGD_fD_8rDSHnxXM`B1_*C>7+$!71u$d_6e#iy* z`e-~+nOjsyv${4j)~;`WX=w%om2bmY`IaY_Ymr|c=jWxW__a0gz(G#!AD$t_%!}H* z%D?q*&J&D}QAK-ziq(PFUcZ#ENca@|xmu9e#+=Fn#0XeQ{ANwV&cm$J;CY}qff(u< zZx?V@&+v8?o0>jnk>l+DhXtT~HM+qayA7I(xVQ}?$3u{!s@eS2Go`iS`9BX@qz@<# zBkki}$Rlq}A3_TOG?+L@g`C|6WL?GFXr?&d$S>BiFTjH;>7vEY=gGzJ zF_4)wo~#METluP5JJTSu=(u$rNC0zpUf|juP?_D1(RD3u%1Jx9mRt_!n*n5clkR&u zhh4q1d`iqs&o>WR%W3r`d+dRF?v{+8+6@SZazY|K!Bv@DT1Y-&*kPaT?Nc!(3_Ev< z=uh10$b9K0l{J2@Q%ATA%i+r;r8;?VqN1#^c`*8{PV~lmTy~Q6MbkTUFB!2}j@}xmIs@DUjjm!t%P%o87O1{`Wihk|89dlDgndjfJqT zK!HFkgD_6`JM3Jm&U$aD6e39a{KKDmsE6U(r!RmSV(*wJh@&nBg=|`abTIXp&H~8( z9Y(BY1g*V<#J0c>p|+Icl6b4d8qVRr>nr8=0jbE>Bfdr4*<~>hEG7E}McurM8bQ!+ zQIFiN!ID5&gFK@W%TvnVUCL3aO%y@jg8?aR4Y)DILQ~AK9PtO$_kHM*0{`bR)aez3 zdGKDqRM8L)Qm|K1l}YlI<--m>)0TN0@U6KegLM^Q(Cg|;3j;QdzuS7qs%LsUc5 z3PU#4MO}BiM;2U7gGlxE5*ID!&KOGinxKOaD?9GQ7QP@F_ur+4xcQQR?}0Uvj(Tg` z{9Hqh^M?rd_Un+GCUH7M9)TNw=JOv~-M+;^0L=m9!mlZin$h%IBGCxP2 zK}OVwB8Q#vX`!b#-XG2~*3Q^sv;F=wneZc|mW&p~)K1)F+`b1rEV|A5SLuWwjPjhZ z)G{|Icc^Sp&VRA!RnhRGP!eA5*Z|n#7F(mEAh~dvpWLd+{1Mqc^oqq2QNcZ;n}x9+ zGlf7(Y51km6+u7R9IQN*^5vPx*%KY0I&BFi+&kr7W>Wp5n(C7A5$u|x78__WF;92R zy(;XD*SZJ0e&0)xPpeOtXY^=JL2U5|+ymT_`3hnvMjxqrCK%4xi0c zZr@?80#@tqJe#-thbm9xsafZmewX#mfaiOMz7fu?NENUNXlG=8`EvO0bG=vr7| zG0hv8p@WDQHu@K^(s$wS2!HE}wSX%ADX$JamzP7_UX|LN8N3kst6dO!CjkF~q~Wi# z?y4lN)?Q~vuU%L3W>@R#b1&DL4P~d2>|NSlEotF$F!mpO6Yo8Ed@WcKco*W2B1cg! zXziRldx2M%$U$Y(0(PP0T;MN}!sA=$Jh&AazFH*dsWio#t`qJ~jz-xT2%_hM0;`r$ zJNgBuIr{i6jjbSE@!P5WSI--@ z8oMv~xwmOP;5g-E$Npmr<0nLeW0}FR0UHUA?iL7b^ITHu9JB1Qk`iEl>mH>M2LijA$(mO9TDOYa!zNhyS#xvWNwZD?zs4iCM=bbqTjF4k~jGg zEYCqTaYObT7N?#5()1a_GomwDT}N-g73-(*JRFwR4s`dG#$(EIEtY+DN2m&M+HTo? zL6`)OFMULYj+~w01mO(zdxSgl@>kxO4lK9+HJFlb3^JelVOWB$qhkn)k+-%OF!PR)xT1U;?dw8;wQ+KxKV@=9#akpa<4?KL zAw|!Uu-DOy3vp~gbZGVwa@C(QF|(BB-%3}4-y`3rRoOF><_U+~M{LuAC3|6`)$1Na znkg$uJG=fzY2;8=2{(ODn5Q#1@tX- zD13QY>jD;=Yo6Y=ry@)F3A?xj7*zzQJDkX5rl0{y5ix>L+UR$RTr*}D;d)xEk29>Zr7{h&Fsm2IN5u&huvu<76yNKerCy)8i$Na+ww>8 z{Hl$!@%XCJZ6en;;H~-bw}KP7r{~CP1PCltXgsynbkr8AQ=PS(nIy{2+4^%Hcco$s zEGofMW+#!G_yEzx7#1K5ONi6C`+nm$sMK`I5(!oW^}cJRduIPdwXI-9!>eI1^<9h$ zuejw8>tZ!fgnS%*;~-;@m0DgYDdGKmQj5@ZfCubE~_lr``*i|Z2w6j zxEg6>sB?6c1iVhR?piX67adNzwZn+x2dVr2@T-O>K^tdkK(^B!9Aa^4y*S7NfV$>9 z6~q`#=SOZVTKZ$~uq!Ca%9kfbsJeFYQS#P_>z`_vA&*V#!q`%JnTyszn3fHgm3^{s zgeLs}DS9~~T8Z0ns-?$fPvRPw@Oh`74Ag=co0fd|r?KvEIcgEIrBdMWC#9}}yLPc8 z2_6EQ!gI#{WwOpqG8pJE8DQRJK1_Oh95J2ryys0pPc>Y(G_7`fALmsXx)yt< zUo=&ks&?9e>-9Rf>N2hRx~pg?XunfMtR8Dwbm$lgTo4XV%Jf$bVwu0tfK8?j4^5cZ z17OUWT{8vZem1n%+F05T#?PNtEmwy|D%{Qe*ThJJiOQ6~AksI~ZUj1~SvXOZWk%}a zkpN7mYwag3oYzmv!VI-CltCENKMxO=H>aG8N~B)MIzYPhS&RNUY=FFW(4d&8ciCBq zs>;&C)H1^S7$X?6_m?2ySZG9HoTW3GKElS3kCY-j;_w8Bv|YfP>uffpa|HGCgeqxl zSg0FgqC7|X`(PSp&GG|I6gKPwvv2{MEm%6ITcz3FLT+FZY1!4oY5}`$q}GD(ee^HT z0aJCP&PU-R#Vj;Y#FYBQ82a=BNt`5ZKTj6+vkd8Iq?dFHPtYm@i91S|%ROhB@IZ!R0bw7Be6S!K`grCWi=?ti_rlcv(-DYmtOm~kivq!(% zA+ISWnlO9frIyv38NiON6A^uJU!g_3GvICDsVMVb6`f3GDUpv9&kkP~CgLFcZHTfO zBC%^>Stz}#0hFe}FDFIJfxprbP;As3Md>JWxl|3N{Ndah+UAwceAxH8$P~%1hb&B^ zAGI_ADR5ZspIsso1J&eS-*Ox}tfa7VT>GBG`%5113M}1Q4JUKkz`aROcUIxc(Iz)d z4(S?p?y%wTcju9QPsT5LUEz+m{RfFg!On80`5QynK!+KI;MpCabg!OLa0=xa){nrU z9?5K|5c>_&OhJ=*o}o6iL1?J=ax| z>XFCnfmTvak?cs5MU`J~&>5?C?P~+~-ZXPH9#`%1Jmc9DSeyHNI5*&abue?Ya7$@W zoGKy7KKz1}An#!*DC^qLsi9mf5wa2sR9v5xv>q5zBoyU%{^~ynSR_%O9r1rNCV7Pz z_L}62slEm+T;=mf!a>lxaMiR6*z|qH?{8P3Y-Vt$I>9xAPWctGh^u>u)+cP-AN2-* z%i{dbmgTb6&qis)s5|Xgae@_v<=<}lwA-kgPt^JP`2)v$p(@(@hh-}6hwITwgij=N z`hxOR_73gE$S4SMu~Tx$j(KBRNsAb0!`Ok#ct{OLN8-KF&Ss21h2$xHsCXXVr~ANG z?)&gP3Wn|P=3aw|p^vhgL6`wVv|VwCk|Yh<*pa)KpMs?uBs|YQe85K&539IGY{H*j zjD$sZi&*SSg7(5a!-_!o;+!VEcbxG4 zUhQwb`-Yx~Q*wW8!f$(0$>Meu4#Jp;!)wz(m*s~plYZ=&lr(pN{QLhf27EDPzCk}NG3MY9OJJU2t4{+?v@UU5Fo{WMdtitlZ!)(8 z{fG%aPNr%D=s+f9zud-h^JmQJ{g`DBZXcC3a%PMA-I}7jJzrkO6-96?nHK29Y}o;D zfZOQ@%s7{91R0i+Oy) zIG8(Scs!YIFg!Bq^^7^|M1L&nj?q4LJFA_qhsDqq^&0*a@XMKjEGc)ao*W;NjiGv$_k}5f+4}S-@zlC8?w#(MhN-b5kcU}Q=21!gXb|N?$ z`&Da+??3<3b4Qi+k(;&tD6RN{^otd{|2JeBa_f??M@?I{l2z}wG1n29dBT=zV${HD zCYy)ZLLl8v;*zJ5&M^jZe-!I$E_L5~U)ZWFUJP&8VIfPJ_7XQbW|YFOULQ*{63r$|)u9x(k2UWyQ51Xa2|iL3Q_~Vg#sUPU+CTyD8r6gnPIP!u25#OZ_r2k0!_0 zkMGNf&c7R({8L{)jFJMOo%NUPBq-qL3S2aciH`J&(!(e9cNLTVLni*~|I*^%@g@rO zGip6A{(B&0!el@!O)b8j>F?-z-+V3e3AmO2olk)op%?aFf@rVyrvrbLtpEIfrWF&R z)twy>Me~{p@4MdreA&!$ z&-4D79sYGFLH+l2Gs!WG@HdQ}y?F57Z}2~Ok^lS#FJZ_%v0qCJHm+*I%@|b$f3|RN z$r%6@?980%XKvyDxMKhHafa}~bS^&lEuZz>|N8g;>xU!o$=`}UdHL5J`|lh5|GpvQ zi^6H`5PQVc8)l{d_X}s@GH^Tp);s|-1;E#+_LPX57P~G6MFw_aCJKCO|=ByZ!p(#rT?rQ{KD5@w;{xkfWxFoo*q#`MbhX&x8YTL`m3StWk z(rvVlj|U{}OvT*J4#u0J2h5+W0z8A-`wFlQ)YSe=WjhE{_*Q>8pcsuK> zcFKjnk|scZafwvdzBz`Y>W2}o0^Q3$eLM>*48)yQ;aYOLlU@L0BoMc zp?3?3wBNS#zR;18zXLH!j`9J6rm`8!+kZ$;Z-p^-E2crWj>g|h)4iK&<(4gIPdS3M z^BsNq-flY3tH&@;m#KlWJ@KMf|9T0qGjf@|w<^TZ08dAqH;3+N5y`u&H~mdhj^ko_ z3S8a|dzJ->i#8T0B@UmjPdLGug_;JX% zgJPCL+`Uc<>dJkMafhF}4wUruRBK0VEc>IU2!hA==k4ZFns4k?wyYq=Z_W}==A7(+ z1bM!%yl=@Y$wpAfpH;6c{M7q;PhtEcVaMU2d|RWnZ!h)fvE&U-qQ~W8u8i~qF`f_g8qrwLl)uyXJ{8(h#r{!&D%~FU|f~X_8bHIEUn751OP%OX4)bvVoKC~ zbs_*|=M3D#Tpnvh!eO(r=~bzm--!=lEQmFCwMr z6<2l4#Ny^0zl@cG&Bc|=eC-8b26&z}W7$62i746q6jpcEknp(n)LC!*c$G}gKKPt$ zC()uOtv$tT%5qi$i|+Thu3dv*gGPK4@+ld^@&!npIpma^!2v4$uy!SeJI+JL zXFm^`8deIy!JqWp$VsSM_N@OmD+nGab$<1MM8WV#)~6X8^OIF2VuH)=x-!20^MR<_ zSy+qo#$TI}lpq=oLz-vJ^+yXznzg)~S+`bvB{R>TNvyDv>kDx7+SK#OXtEKS`+w z4M&}z<8``2+E+F7YFEgGw|MOh%6)M{HhQ7atqo5j98~Go)DN|b&BUP${26pJ-*nDh z)gSXD+V9S}*PCD6J#Uq}O`$S%+m|2$<|*p(Inmzwomiw;&lv?6ow z#XwoLN4;fLI$g>&D;0Z5M>`< z(ikq8YWow6CwKKS36AV3rH#+Q283%WL;1ySMG-w+QF@Z!b(~idOqqM)C3jHIn>l#T zK#wu#{AQiT>$Bu(F#vuAat$bYfw8VhjmC#G_dvN(?q36bZ*;wxD^$ksQF9z{?Hu(w z-IV-nLynG5Zlm+)x^m$J7%}U?cw3NTMaA=#mMO^za9Gp;Y05m$ zlfmDpZ$pHR=T~A?c$Fs4C$z6W?N|FfB}l&lT9B@OaE4o)%+sro%eCom(A-L0z$wnjLM#DL(@Jc+kYn!_z1{h-287diypAnJPh6ZH=LA<8!PO#& z=HTSu?=2tX)3T|b7~fK;`+d%doCr(PGh}E0aCfGA24G>IR! zUZSVRUSCAgFw37dE)#Tz;U9H=J)*fhJZvQq7va0C7?q*EP?&AiE|PiQ?E6g#W|lgJ*jPY1a%vV?UbrIQM`47I{^qyrN7 zhOIUA4OMHUe*)HBnyL1qHUemg11$a7QQdHYs;|44}ywR`@AIej~>Y_&f~kND;v)-3q-9mm1&#%LBVEI27Z zi0ORQDPdFBLuo~G3XHqxemsV$B*g-Tb{Af!&%CO#DbPQGJv#RaZ{-Z!L#dZ$So@-0 z8M**!8`;iKyRG=npzo*eU6tv7=jkmEy)=wPCBty9k&+i3pdIJDe?rw=ab)RN=k_};{+2JJl?=Roiu{7M` z;U0#B5f@lV!hAh4RB`dP1xH}AeQ3D%D~fF8C;5>i=TVW}THExoh2+v@CD=u!))Y{- zC*LFyj*t$;>o8NO7#Tg^S+(CCRuJl?CEnw{S(>(uRc+zP7C#nWft&4dpbYvK4&>9= z^~Vo)C;qV6&_&RUTRkvWb_f&oN|;a*;5`?<8TPw;GU>*Ttu(3BVHMed&V$tyX-EB%ubNBX1QhWpk(8m<|AAP zHlV*6Si28+=Xtmk6rI$0K0oQEqBn^@pP0H}eOKoN%G@XDXh3{tEF1>eu55VmRHRkx zRt!ekWyMeLOG7lnR2I(NDxOw%E>*?lRpa>UA$lkQlP$s`J}vLh*#xEbqklt1BE`zB zbX(ZN@lm7|h&k#N%?j(Io-NfYQRqz~Ls_-UT{iPRsZg9AVcGy(41(;#`35H$YxsS* z68V}e$`VaP9+Sy?{9}jIYrVRwpl`GE$*M{~6Cj)X?BSuOtHR784ef&l)~+mV|I}8e z4^aBg*URS1?Nvb2Rzg&6r~-jw#@@<&<)dq1k3%Bs3*c$~HwB$32P^dTnmqpg!qlzZFW^jN3ZW^jpR(e9(IP5NMpa9FqJ|HAOy`Cpa&lI-)Q3CkBSI4-fCB_?DTC5q=e)r8) z&U2S-1ne{GTkn)F9F*;7=HP6+y*#wzPi4qv2=oTM5i>fJjnm=_Ha|1VBx2ILk76k& z!_^s$))sT0p4nU~iy!+1tp~T!ZeuZSBUVYPGZJ9=D{=k`0=)OgX_qZ|r+Nfx)lYmt zHg2$Mc(Z9?M$G$;N{VMpuV8~duRQX6-BJ5DP#c%a3e@@Zn2AMVqa|q5f8b%y*nfYy zZ7A6g!E4`Svn@^#{x&bG!sWSnh}**yo~1d{T;)PGryTRcUotT3dxmd13yBL!#iy96!zEOHQXjb>)E1J-PmcpC;;7Kp3Fp0yt8RPJW0N6H=oRRh7&sXw z`|0a=6ib2|6nOlD%wWMxu5YU|EQ7V`tve|=+Iopwso+W6mXkR;9+JexulIwcveQcw z%5uI>aR%(*>v<6l>gx;%su_Flkhjn=A0pKfbdQhOsAxyX)AJYb@&nsmSbKy?CFbIz zy#tgvb-$Yp({l|Vl~@rHgPdwbIp0WSGHpmpiWNs=o|w5kRUUT|?mL-Y+xJ`nM@(LW zwkbUF6I4gct`Y+|-6rUX`u%{LU@URkBC|2hu!ZvFs($w?jx_Cq!7w^vW2pX~Q@hi^ zRiAh;t>6hB`g6Pxd#-Xpg{e23-b80es1y!`>a>4?(7uTARi9>he@*{VqY5M>XY*OV z-PHZ`39E+D8PaPix^nXDhk>dReq?9km(^8jocHapg15*Y5GA=l(Em` z`}Xek(evOw#IfQJ&oP%ecwk8XA$(_-YsBd)j4j>)Hl@x>QFL`T?>oG`wW$gETSWR7VSZxRRF$l9uD zUE^Mv$CB;rOhluxc7f-wqj~O-jS8X18p&O;h06`vZXaKfbO#fX4K4~n^Zj{#_$;oX z32NTpsW!-^>2-P06(te+^Xbw34 z!?qFoGirKGxEWqw8`mxgG!6c zrB?x6sMs|(lpU-e)}uRVj;3wK-{<_9JS7EG<(=kwytYWcc1z6F`W^25s(|+9=vWDt zF@Q?g*-_M=7@U{QYmUcorw7FXrA&Oe3kys8pZAr;sb?P$6H#>sD#pTUZAaPH@Pk9Ga?C#Ayx}QG4>OWz?SyQJ;V{gO zzm&@$m!a^l=re{769$Rxlm@5Fa%uZuJ)HZB#ZTl0Ti@QITHLs*sHsMLokDHo!#Kmy z@~qzpkzV1&53{%Co1c^?#UMVxoySqQMvWn~TYG)g%b{8l&wlYmV&3aIu)JYHBKK=B z0AA|!dn>-(nVT(I6-&)_t=fneKP75P5dj8a{{f| z%2cy&bA8XeLjgC8TBc@+0%F-KP%f0L*>VUKly@)~?{n%fYJI?z$sXcB4bJ4d` zlS3!K9Opa(j^^PpiKTfy!?7gB^3nSk{Yk|ccvJak~kCIuFy(2muTbn!X%q( z`Z=qu{x(r95{gM17{^iI8MaJE!pT7s%;X>7!k^8P{<+Z5_(}lkxA!nWvt5~TiI~_N zsi>OP)3e1v6Djb%1gzHpYd8gudb_axbnx9ys}yMBr#UT-<0_L9J{JFF(T*KyQsV+L zhKOgJzA7rauU`M}g@yc8&nP2PB&y({x zV@$3+?cd}({b)Q?)9tVH(_oE>ZJ3?Le&b72L6^3n@G9QH-wL0tcw(gu>5W+>y9@<` z>3$1OaB);6sgXA%wWH>aW+nw9!6TNA+N0uAqwggf#R%Vo2~eh zx~Y?X0JX#SODIF^q>1#Qi%6tbHo-HVcB+&(no*8q2fv~l{lx=yLB`LVKH&0?7laaM zz2#}xP2H%}&^G8BVI;`@z)5SdNaIQsyLq9JI7~4S?eaoAeA8|osc>0eWST9FS6=U|YhjFdo^1Y>H*J3&~ zGIGkP)kX%KKjI+U>|>@5xeM_8yp;ejjWgkbmokcXG{5eZb;;SXhKlCTB2Fx6W$T4l zvXpQ+E$|wCzRij{VH>$q>;{3GBThhAklVWMD51jD zsMBHBBPwFU#_C*7k3M_enzA-y#O0@kp6Ag5gJ;vpwvf!Zct&pYM!`$Xa85OSw89rS_o|cnQSt-019#;sH3znNVczG{P zU^;ImbT2%GUn}DsL7N2S;898Z*QQ1FxgaH?39iAb=MZXbr>p&+`WRlWy+i41oy2eY z(4-hydPfLwwH&6HIChT8n_J?yMJg`K3!|r^3isInR?c@IR0?RFqK*W=!_CI-jF1$Y zD9*>@g+}QohjhWT1=ct-v~8%L4X;Q=?mgdE>rdo0+rO>vs&$Kx(w>wC(b;Q3&uK_I z>Wt{(e6)%=N44`nk_POJpK6FkSSEah9A~5ld&J^PPsd_u3De^67z3MdF45qYWzG&e z`P^gfDQ(9EofpPjxPEhjWi(_k^=6TV?F^#NuuDcUBC71Y`^5>VRpM7N57+IQHoNH& zEn1myIsCzcxlM($eA(RmHxu_fB__rqrEOpFVjE*GXkunR^Kj?6Y4^6L;8D920lJWb zid%>T6Hs@M<-CO)4>U%=1U*7e7@46mMx@A$f_36fF<*oABuo^OO`JpXj*~x;6 z=iHko`fc9M9jAx5j4*96T;MD@L;+9sroTrPBhJ9sxY3ZrHKvWtt+veBiXM(f~k_{ zHO`QZqfc95rjAR-5o2C$t0TzqTpGkT(VezQydb!PE6ChJ*?Cs-dhy)#Q=}y2y7gU&&~$ zM0^yQiRqu=Z-|D`okr>_JNqPLpfr8-`WRfXs1-5+y9{0v#=VZ%oeBg8Y}kjCkKH!H zQ{!Lr+e51@>;_kr=2Wj<450%c4RzhTw~CaY`kf+STKE1RXBM0(s;j-)-72xvQ6>j< z_sMSXo9b$2Ulqe34%s?=Mv%9-#uw$@NyepK{7v{w$HwIlv~A#GcGGIIXKE^Cy$Ze) zlrG$15P*DIrU=OaGTV_6_st|4my$tb8rh``LIta1{WM{8cBR3H8RvNn1vbC&4c)b8 z(8rIH@uT`hc*uhtu(SREGZeIZtkO=p0G$TBvKEfn2^MOj%dXt(l=gxOIabQGpbBZq zl!uaGcpdWR?x)wkfYpZr+8%d>D|l3O5=`}*tl?M9nzN4j6 zsc+S;$b*Sd^HuY&)q|O!Qnv|lM&_$O$6K*>hG%W_dt#&6LegH4TZyuflj}J0MMYl3 z8`t6t`~@EJ7ivvu&ckNO*$x&J$4sv!koHqho(_EtIHaD7CGod5+e18d_8i6XkZh_^ z8V}L;csMs9f4udZ>;dAt`U(3IL0%YDE{tu3yWfdmj~5}{CeYr&E)Chad>HO4$SmE`9;3bpd>6-cHh4hX8M2t z1i72lL>|)q{6SyriwK#ZMj%u=-M4e2a1iNQmv*8}j&+kMv=G)2 zsr+$guy7D7fp#8T?6TBuPDJc?iR^g(?LXFV3=E3`pt(aa;UC}M)EVnFg2-YX?i$H; zpyxA@w#X=C+=BFXoNB$5|4od!apz7pOnTH-Myeb(2TPpF2v#FA!A5nOa?-PksSyDygP;#=J-G6Ih;BZy7<mj8) zr`{9kA`rticE=Jpi$R(tbDnfnsR4b^ws3&1%9InQYeEt58%Mg_+o2y<`kWvwy8I3Y zCkhYuq?u)I18v8p9EqBD#sv$~Hr?%(Or8m776o_Pb&%H8*{A6QlY-QgdEig{vcmRA?9|(VJ7W~ z`nhY~RfReK&JmTMwdOOIkhT7+YT+%c6TU%4e{Tb$j>?GXO?fNH!qh)cDI1aEmc{uipeZ)pWQ@ejj zW4lWv58^w++%U0_`%DvJ^w{o3+Thv4hG(OM3=@*!61u-`%8lojSOggR4ja`e>#n;L{bVO zf|wQb8ox~8AFPCm4EMqlUix2}b#&^^Jv9Q>H(U%3jI2pCuW=d^$O>*<;fE~{I9J)~ zD-{ft&r6iU*pnATyUR@kVa9t6OxFR${oS*RYr71?(^v)-5%L3IkiJmA5(jO0)`|PoM41SAKjhc=ur2 zR4iadCJ&2*J6kH=#Z+{GPu}&OaUY>H-%+e)*e5#n$7nP1AAo7YXpqZwXc{ z$kP}E2H?`xAO`(N37`Q0v;(d5v=>R8tdcI=dpaYny|&POEd7XsN5o;9Q`{%v$*nh^ zvNkjs`ojd;BFar7rsI#LwYHPnGJX(BCQmj#E;g-mzv){}tTlM|#INYv*T`ijAqxvO z^4*xwg}m{_)z@kPF1txFvSfvm7ycCC^zVdH4-Zwz*!J1R6THtaYPTkfFK)n%RRhf3 zW*E6k8g!C0=a%g*^1W8ojT9cZsEID3qV&s$ZRGP#+unuuVOrj4)Cij^O{eT?+deR9 zlHw}jz_wkRh(gSZ=5#IGEIhP2qq^=gUM`vHw^zAOcZZJCabiNDJb}2&EBzAZ?Z?Oc z9HLoW(brwV?mW}|p(I}sa2$TKlbLG`>*nag&rLB67YpA4FM{8Rs0<(0%tLU69cnSs zYlvW3^|Lu2(;2|1O{41#z}NGFceULN@;0TQJa=c`wG+SV2^18X1lc!YiP9`i%Pfd= z9iH$7un!i6(}<{PGUr7Flz+^)Y9kUM4e{SZ8h`KVdK8IjH7GYjS=q$h{LPH5ux2f1 zc9pEsCn5=l5l8jcyW;R~xWP2-GQw2ZGu!7SKR5}Sc!bS&O82N981-4ojdgg4PS3Zm z_N|U=h%L`27=_7q##f!wdxhZ!RG9~(5AGH3*$lo#e=LZFz;KD@8TYKa!{3Kda<7}J zOeU0MNqt9&(0qM?9y{`r_pbng5X>D4%TSC3*nW6@b>zF(zRfKUJZ0Ng7pLy(-c*ag znx!Zbc(p~<)qJg8fOy9j-1}4b<|G^Vh0uvj-Y^7r915hb`6dh3t*oNZ zK4#=rXApYPcQB2aU#xsa@cxm z;Ud&J=h?Ez#b<)L@NJA`*EwzA-BnizinVldUkiQ>&O=i{bK zwn+S)1eTu@ZbCyZ&*4avBHs|4Ye3AR#K~vr_Xv>cHq!WQZ8IFaSiiOLuT<>jT&v0p z=;YCa`7GD1D9r~NeYW$z$IV;GxnbG`bx`0Toel7|T#u+2-E+xh?0_HyfzMuSQlWR3 zpZ>`FG0s=#rZF0RLNga}&|bhJeDb~XlQ*redinm!IQ4#0H3rFJuW65RAoaR49~-KM zw$99MhC{kkY?HxPH|S|m_~X726d%TO3VR+&#E9yU&p}7y@1`s$*D)mAgl-r5jLmmX zs==qD{gAvzzvBGzdDo?5{U_2vsH^}kPR=l5>Uy6>Y$+Mj^h|c@2yCCOvsb}ts9rx{TQTq&(+4YRZzVgZH|RAO z8^W&8v_F|hh%rgz|vVB9W03`S|)-vSF{n1Y|C#u_EQgD14-`O;fBY zW~p&IEH*?qso-q1yhz7Y-XrPnM%Sy2i8DF$ib5D91e7o_8 z9E}|8Zx+guME_h)!5lj-I&3bFoUk{4dg~J4b;wV?QJ(mjBv8m|QhO|%-A{QQZlurC zuKeVz{ds_ST_rWePp;!twOEY2=R2zFO%?{qG)vSkiRV6I{1l9~W)sCEIA4hyT&x3P zUs5l$FScpd>dy(}g(g-t+D#}1aRx_R3Lg^gyR@+x?nYlGEK=|YZyb?LWC=03u44TX z*!nzeI_?YWkTd#1*;C@*E-M+G=+ zd|p$e?iWDOn2bUargOBt^+g*-%sZ|UV)LR7Q+xfvWR1$biYpv1ABsSIKv~)cp#r|D zmkQ|EZ^Z~*n~UTm^=P^?9x!2dPK;XchH;g9r6ZmNYfhE));B45>QBI}s)b%~n{OMY zbgZW#M((Mj57`@|m}YXmWtV|puA$prXc;A=Ch7z|?tO^;!3{x3C{(&@ZKE}LL)krY z!2j)EsA~-maxo7_QY|NSe<#{|*-!@Vnqk-r{a+Yd{e2IOo1_zQ%xQ6|J6VCsgR~xPMy##$*{_u=BrLWJxd*NaGSXlo|CmK1{k>ZlHTwyh0||N1_CH< zm0s%=-2L|0KwGYOcSP?2!C$1amV~}{{7uO>u+^|I_VT)qCqLmUGTv@KI)CORwFj%1 zkUvYnxrc|u{cWgSBEBpa7-6aPe^90zfrw+E`E2Hff+sOv`u#Fgwq&B=o-R|zNZlv< zIvk4I^q`1q}EAon1Q1sXuvOvsRg46NVCPJL0(WEbx}i~NJ(a3Yt0CFHcd zE3Dpp$_+V6y6eR_&zlgLKX;(ULC!DvZ^54rSMiN~I4DN}Edc*m~#;3g@bn*H)Y z(!e{LTC3b=iq=a%by|y%R5&0WKFSbAf^tnJ_Jg`Kn*64_RVV-NBpLRTx`ukr059E3z?zTlaJ;mUHw)DK% z?IHF5k_P_o%fT`OZ8Zg#R3{*b11A?Abbid0#uN=ql z0nFA~KSHg0i_SpCsusY`vU+wlvx)zTXtkvQ%f%@GM%-jbW9V+nZG#Qa(4F)CwcJI1H_BD82;si7Kl7)y*=C1 z+o;IIAepKxydMK8F-!v1>%x&7IftPy+W=89wJ-sC`adYA#Kp1 zxdSqhHLy-q@azy&7CkT1HVmSlr}}G({BsaIkg~(Df^MO_>7hp>ACc7mI7+|wz&Scv z2%j2|rQ869es+iB7KQYF3C3}nlK}2MUr@7lzvBWRG_~i;0R&zYwK;LY9881`CxPVS z;%5D!9zURz>5G9%k$p4(MRx~oFQG>a2$a1nKlxO^&$oEgD zh`je*4Da$D?QRApK6>y&%^DmsCkRSsBsK@sndD9=ql8uipQ#!D)_MX;L33E=<&E?27$UDaZg!o%KRuLx9s*#k%h>mQvZu;6M^-eV6&71-+4IP~hV4}h&G zfUUZ0f@Of%4Q})Wf!|LR-4+DIUVteF4oh!R|&In$>yqAVsLXybRaCBVnNM}{O6 z5A-F@sY*GH7o$;?m%-Ee4!Kuu0^mAY$GjqBV|!%U@4|5HuPjvwZ3=*$a=9mHF9Pns zpwm060D$h7`vnLdljjSRm$t#IHD;xJx30n&*p83UefCa2t4z9*L6iYJlN%dANyqwA zqDhV{;lqFQssJWl0B6J)klZF#)epc&*3@Rr zC3hD>_qP32k@}F)6keItg;mtKev2tDf=qdfU11UEPB{P*&-7Dpw2%|WYMpI(`-FBO zA-M05q`Ou55B1fdsF|a#_cNE^B{cw!*K!Uvtu;_w#^ibqxxP0O1pxHI$|O*;!`oR& z5x;=Ql&642O}6C=sRVNr$&Uh7=B(@f+EN8@S!I8mNFXq7zP_V99J2xVB_(OB4Ph8x zX`bvuPNj<(aLR(>c9I^#b>s8vnFSE_fG!2#r#m6+v-P0--AB#$H>jQ>0Fk!_&}-?x zsThhsAJ*3ZT!JZp{ai{gmKuxGb6tJdrREXhEPB27`#=aMTlset>m>6}=;D*I-yG)0 z6U3_yfq9;0ebr30GT0LPw%Cs;zczv$d6Vqd8BL|Mh?mP&V_lz3WYs;E-=X|x9TZsM z3!%@5FjpC~l1p|!WF=iiOaUBZbMv=YYI`}su7F^DgAq%K4~Xa}bebvnVjI=H0~n73 zoET4Kgij4n#?;s|(LSY;4U@cz&DliAIBz;{Lk6H>PA`Gl68d%PhCV%b9FAjzvkAt} z^fwkaU6Lt$-_-eQC{0AlQmlr7_OpX+=?qSdW^juH@@7dlYtK$8N`l>M-&Sz)ti`J< zB5Yy@B}$O(cYxyE!)dk`aIk8An%ux}&{-aU_Ah~eoE;?mw@~v=tpnH{uK|&>fT+D= zq~h8+f6_Q#TFKbdP@@qJ3*9$BN}Xj=*)+vbU0%R6+0I`OP~;vqABmq2x$p!pUZ+Y& z#Uvpp>Jq>z?smlh9!Sz^zL=CElaPQ`Pn5u7gyd^N-qd9bvlqnY{@1bisQ9G>5L=64 zLs&2!w~cbF=GuEqJIA^E7o|0e9-b`Ze|6tpP+uWXQtmu~gf_0?yZ|0DT-U%orVyxc z83%_slTx4=o@E{YD?KdqI`0Z$5^Twvj)32>gPe836Vy%%j1R(A5mVoAnwiMC$Y1P+DR+c>i2^gYrVJshmfIvz zwZo0C5HhK5+MOt?l(*Uc@eF%kpK=EdHXpj)cRR9SKMkOw6c`0ttVncm zR8^Pr!1zUt00M(H!EtWd-*@9zE;8_3(q<;b?)^!GeyX4?ZXr1^R;g+JJ_2THCs>1K=G@I407NY!ybf}aHPhU6cz>NBXtBHP(d!E;%qA~CuW zNIH=Opg$jXIf{%Bs0Fs|T0X`R$D3K%^^mHC+jY;37jT$ro8F)X_*q42vUh7=01^N_ zTrQeo$w2>_3R%$S(d~!;b|uo=YoTQPoG1%cm`#|+7B9H3BhQ{*2`EiYDy-*~DhVV$ zo=M2QIRmFkA47kH^sV_V5u$C#2`Kz`)nIh`ik*=bYqO?kH4|5f(fESs!mGn{Gy5(e zr_ogdMjt;$HoKUF$GsVY0P;ApO7fepw>3=q`42p^Ja01>iB+*eHW=x?4!C{Kr%%IA zR$M$WMgMO3GHu>H?p`eda*H z5-Z*TseNdni4o2h!?X!~V3am79zxF}gR6Wj?JD?pW#-|?UIo%H?UyT|>Rp{|0O6(Pmbt?jvH;3$rrc#{6y14IUG z!UtB2qDlR?S;`*UUjY3+qP?nUZ)B%0Z#a$2i7}e1F64A=u}d2yg)xxbOM7^3j|ATc zL&YM~h{Ckjl_>y<4!!gpzdArpV_0kO>DnOoWC#2`t?rvlRK0bejF4r7^Zp6*);ZBg zM%)Uo$Q4H7>cHoSQ!!-b1{L!C69Gu@kbpsg@go+KB-Yz^K89jH62f{!D&Uda<^$x{ zl_9+iKS}prkapmz859A)rBC1k0-OKspRc)VQpy<&BdhzMg}>ld z{xZy>OMa7jz;Pk}r{hEt!A+DS5P;q#Vq5TuJzS9Qd2cPGAL$~&bUl*8Kn%(7?24zJ zNgXk8-VPXoQ5dY5rTVkPHufgB)k@O5E~>{~N5syLoNC}6K2Ke#oZeUcBaYL5j02=a zFIo5}kJmnv{Ha3j%IX7yRmGQ`4ilqPu|oop2)oW@pjyg}b?a0{22uk*lZlSH(Y{uk ztx@{z4i%^&;$_~u9d2%BXN2AIBENy=;0iE6Er)=Y|5DunO@S~}fh{@UB43kVVkm6F z3FQ10+J_t8Rh3f~BbSIL0+(d3SF?1Qc^98#Z0QD>$?Plvbkd_DX8Qp5$ha{;ynN$; z8Z5~Q=1$bNO-K_^Mc#bVbOJ#rzB3F56~l!P(xPpx6lM<|KOAg1YW5!PA(ZgDLhIY#Un^D|l1xB8&-H*DIL9oM zT?nRrMd7kfPz<)Nucv*RW-p%x9Y#GC3`= zqa-?+6S(&IG%)yR(MMep3!ZR@9EfP&&JHh6&(~pIG$$E_@0aS+2U9q$53@+kX(c#U zrVI^FJnVb^`JL$ip~rgZ=yZ0TS@lFHQzHGxQc-5 zGwNk}xEb)ek;=2BBz?ghtUeZ_E0i%{%6xYnH!ar#d^xB%EK0afQenc}sop2fv3uqx z6o$Ibdn zB-Hq}9Na*6Z!^>TJpDC$qpc$^asd8#1}NatFQQReL4>Y5pBdj?wP~FGtHqO*>aSNa z27G<3c*me4*yTCg3uQ-;ODZJ5!z=hrF%}eXyqbz^4C6r<>E`XtcCjJSOBzyJpq45m z$bS@mN7HlH$ph?BuJtcsZD3Qa0lwY4Zwni^oy;^`bR1t@b|ntx)4!$R4ms&PnE(RC z^zv`pFgH9G0X=3$l%H_R`?IEcb=C9g#&vU-)JB?3pucD%Z1-gR&-ea}BUiPO5Mdoi z!kHib*%Jo|o>43&sh;(Iy!isit!{#1B%h~7GB}L0Rdtas&7tJtt7An@Z&7<7e9JgC zO9i&VonsezTvfH4WI@K1yU>QirZtqkq+SgIn;A38a+;T?^Uw4Ee~IGk0Vpg_(<9tw zfoukb)uZaDG(hnVQbe_*@=b8XU2 ztL#_WSIvMoflop3HLF+`j5o-f$QJqK>bgiiXFNu6Xe4!DuBvTT=>%eIR7K>4z2dxG zYI!*Z+J^;F3!zuPKuM2rE)0AtNgB;9P%&U%towV~qaQHjN2*ord}W$~I9O)u&Z7na zvq+>$oyS{1)ffBRE2@bpu|nYd+{YPS)6glQK@2vc{KI}qnV0k6I<;F2f6)pRyC%T0 zrU>YN?It1~8Ez#&IDZt{Si>#q3bMkzO{4&9k)!vEWD03#L*`=~72r0OhuP{=ZrCoe zYB)q4QXcLAG9pFY0`I8)8>$WQu{C36OFrA#FA+kERpyCXpi(t1O$PO4w9#ZEPzSDD zNR?a*Zo?V)VA3SXHN9Z&5_Lr4eMcjS+7xfW6pzO#*(!CVFz}SEZR&Z@N#`w z@L=H#Rbi|KZuP~kp=HE&si4C1?X#&}w&d}fSsx~x6}F%}sw3^3_2s%KSqEZ7YnN#z zoK(QUtkkJZ*_6EU=Z9dP+bicr%R%ub9Scs}^;@DP8{ebyN7D1|rvRJz>_wsTtAZAW ztmjpoNsf49?37)g&6e>b%BE&2*z0h0C@YgW^@X)l!N^+**;CRq*_r9+Jo=TLmT0d9 zp+pV5_y!)t!tU7JZ}`hSgJxFOw(=at&kizQ$lYhH{V}2t9+SL)dS7z#!`I8X07{+~ z>fDeOAoi{@1!?DIDrzEFzTppdxgeBC+=8E5LsayRtnl4M_fm@#N7iGwd3e;T;0s(Y zRF#`Mi`x0g14O!@m|!x5&D>UJQ~rKezG9igw!yhwzPCI@2uiiswstKX`~URW-bw>2 z05A94incUo0a!x^Ghq8ce-vv1=k6I{GIFZz$W;>$I9rdcVHc0adp(-`xOvMSA zd}eV$n9cLD2LU7QaPz@+ChY25_X{yaBQb{0JuT5%Q}5=F{Tguy)4Sfy*63a`ineMu zmDt-Q!8-~<5mA}$#x$DG$(2TGw)eG@95_GMM7x&|0|&y=6&RF8&y;b&g(D*3FSOw#SC(t-ofgU@kz$=Ci`C;AbOW-x+496GB(*P<{?%8201m3}Eew%Zyg z3-y$Ipj4U(ElKDB2}}iPg_({~S>fIahmfREpNc~UBCfoOT4hL7NNNU@vi)0?wkPAo zyo~2oCtdJ&?N)VdHXBY+@(gyVd6rHj!FvY9gcWV;0KlLkI$xB{s;+hnm4cAu#g%rI z!-7{T0rnv7UZ^lq64}~VscFe`^MG|jt+rJ-JhietZ`w&IoI-dKG$PiIDuTE01+hFq zd~&a%1cJtPw+p%n!WyZVQzFF0L2Y)v`TJOfaPxi#W)6W^ z#WrnypBv3KpU?(B8~DAT6Ji&@j~M!qU^>$>uZ~lfSEUpBL{FfB*|W)kUruMejGDTc zn~Uqy{lTtJLu~|7zkrH^g91x=jI{ZFTraUNdaxDL5;5*G{Yo`7V<@?96Z=#hU0e~N z^CD7uzQyP0o@{E2l;s;roI?kKP_qMy8K3Xrf{x#PRy|=UHn!$5JC#UMK&6}@Ost+z zmJ_pkFTi~IR{yjSi+NB*47L?LN(ZQ?Hfo%=DCBTNY7%ysuew^?_mRz}#w9HFqA$Yh zcfF%OWgj?2XS|?e6qk~}{{#sMi5`vSp~`FIw`iWP<$9yUBSNCoaOOyGq}9X_G+n;8 z?AdO;zW18WL;j%*ywP*bbv$W0b!seSY--FSZTED;$=T7-aes(w=*Oji?aAR)9&t*jh)-O~nl!%P&vCQ!6liWyLKZ+uvNymiwqYS8F`Uk=p^>z0MbS-83XaVc;OP_~1SLCk_5Qfu~5yrIhDCWpC)+ zGT`PzJk$W>VAV5@`P0#tH` z$9BLOjtH>Kt$w&X=?f9-TcIZ^TX$KT;Qkd5-RN02ffw4&G(2Gt zKU9+Uu#srwYps5C<>h1Jg<~>`3&|z&{Bvmi9EtyT{k&0LiygbWe$)z&MQCse@=&zH z@SPS79rP$$O&NHaI{R!t7pVdtK?p$l7SfJ^5)TzN9va$G6|ON9$#RixA8d?-Rbt#k zgE4p~klFm%)!!Hi!)$|OIZdg2T3<~Jvsdw}Bvy3<+ffpd#Myg+fho%RD! zdyz7qRY@0vxqZ^TXr;iz#>;ba%GBxVrf{R97HwgSzIgqB_?uoa+U>7{nI&0Ux&zX8 zFs3X`zkTn`d;yzYsU8UKyD*N|<#7?FksBiR{-Vn(AacYEdT!)h3#sT`oqhGA;Ky%4 zGqg&;R|&fyvF}kdbqH#F!dV7mnmJyCHwqmU61to|9m?0ygC7O~WcHm^a5MEgw$fmC z{rRC7ay|9qHuVCb%x?SK*6C!UpDG`U>w!;1`TqSd6&zLsdjV>*6iF%1_2$Ae%YgbRH5g6fG`l`Px-6$bnHS zRo7NfxAQfwh+YT#+qU(}77)Fq7z{T38pCLQM6m>ECjRg+sI_i=?PoJ}u^k|qneIH0 zj=L{LaM>RqqK0#ep>YLX@G2h?fBAtfkvJJ#=)S~sV@|^pI9@Q=y*sjKdK)h$5xl6b zG#hm=)YVUL%F?%9^Lxp_@q@AY)Om=n)G~k-gia&0UOrt?`X^NhgQ`yN$4Lcc&55Z= zX-ph=v&2JWVqUz?v0q;2{w$~JGNS9OOE0qpbQc+UD3BQ??$0mk`^R&v1c@@F=yOIU zct-}w+81gu(4upkfF`hFGYbtrjeuSwTD31hQ@0Z&mKG>aKK*4WZ_NCiysE1K+!jB8 zxI4gmc|EXpNpaxEs=gmb7nMI>*l4g7Q0bAEx|^R&Uq1>KT=nFx=y4apD;BG=V_Bi* zBGByFFBZsK$`aZCOvj9`P?#(&=qU0y9%^*Pw!8>@lsc$Gn>sjo-M@uKEg(U+_fu*Z zBwmwi;7UC#yA-%0Gp3Pc*R`M#|98i{$46GQfAsE6f=_GXkE;##XL;BM&=<#F(aVMJ zOV2ft%`ql)Raz@r2Ubn&InVhK4VPwF2{}L(l5}yy3rrnI(9NhN{TNK3Ua4kd&Wqx| z3r9D)SvsUFTK`cbun=e#crHB+JxcDN6ZuutqGAVz#bkC;Z^<7WMJ~l@v%1KX;uq>N zOw960xX$8+a3BaLS})gP+k8XdA^}rCbD=mXj{5N{FNqL(p&R~Y;ekquL6oEW>2G4u_FtQxyqn(p zgd|(Ho3f>74wvK_Gq8r_jv~|2Jm!#k1-M=s&8;d0hyp~`_!Qb^Y?rR z_&jt=Ep9N)tH7l}sGkEdu_Ok{yfmWX__?>$b9Q9KNxKfif(UivsD>gi_+wDdT|&Oi z{5YRCpGqnq-mc*ijHd2^30}aWLGTE7G|KX8x7r9g=&?m_3#z|%U`=hoHHc%U&$Iy( z$QvKH^_Dfzh7|QWGeb3eHOzSzTwArQox@eAmqZP@1ExR^rVY%{DBp!DXza)eCmeAy zxY8BCqnBtNOpii+lUSDKI5qU8TNDE^ejOK}s}t{pd*81P*XSK5Ze=0{zGTGk|L<3w z!|fE#>=5#IKzj%Iae8avtIP>+xhQu-=tfbh=X6wRSjJ$y2#@_3qOFp@!URXb9zn}T zRQGul2>b$LIAuf{ZMtq^>&@0Aq1J^_Jyw3~IZ5_;Z6Jo*V@}>@gYs;R*e(-l|Ch1V z<&3@Gz4i`dCxayyY@2GFKbOL;nHaL$EywpWENF>_B^rNu#TE2TNrOXY5c4mVC|JRN)+-;bhkG}HM%I@nFS6ryiLgxXk+>wcuh3&`35 zI&GRCdGm#UQ3GQ;&uIcTo;L7%9pXgUDT_Qm-7oagwOTs#Y2EfN;5>7quPb=fB+%+s zmx;gvbFyw#>$<~r3FmsDO8Woq$Nz3k9~67>nlWSeEQhedai^?^O047FfGm+>=16Zs zUV%2P^(&25=P;`{#Ry&%Ni}RqOUPW-sI&@b$mQ;9P`k^)Pgp^7KT>F|d;8ZpBHT*{ zM}Z`Gbb|WGo{e4N6Z@PIOm7_)&Ca8#7zaxiOxlqe2c&>_^;OtWJ8uJS*Y&vS6@L6D zhPc)@eE8~0cCTlY`kX!vf8qhmcosE>PQZgyck#lH7qASXkGlu8t;&Mp9TaWNs=}xi z|BWtx&)U^@Bgf4yThWQw{Mo5z(i|OE)ix?kq#M&LKdYNeN>KtnuEL#K-WlG>eSk%1 z7zNYxAp^9K;}?#}EB%t#jVL^qcpHx&iR%`Daf&F*u9thSMBv>Nw`!1Xeq=@)b>YLs z6WvS4{^$Wo560d_Ig6PU{Wl{0X9s{kzBfYVGU1=7y=$82TL0F}4TxhCz{}@dx+y;} z&eP&gw@JAcdhX{2W4q5@Zv#^DKc3#fNom~s$VM+tsI14ZK|6VqqIa%%audb(CF~oH zE0Ay-B)E9(4mq;efgteFKJg2VPkdE}==rL0ZWpmK(65Z!##UrM%6)#G!v}_mQ5`&v z8;)|=4BjC@sJ!E58Ea7qmh22kbR07sJRJ3iqW0P(c&`rj99JNc5{W--DyZWSXhy{Q zF2t&9F;3mqKoF%1p+)2R>r*0&nEU?VyEs}1mc-(xYujYlL#IK2ww@Lw1Gvh**%l_a z36m~kuEz3(3%&pBJb4KEFje%Fq=7SmD+ajF1S)hNiXji(L=s>LdO%4IZ>fLjX?ir( zE!&4tiLnb+Ah1Wse3Jb)KW3!inn0IF(vb^ypZVB-V#W{w2>2Awu+1ZY+4`?G(2-XI zeSdy)72&}^%n-RySSZe;Kwq$z%L9wZ;Q|4EvK(wDjusE!fk8+x1cGS0pPLs|f`5QC zKvaCKPg5wl_>7D(y+?E{fZYuwx_4S1_qG`^2tuX_DnD=6xu73^aiqD)#X%9h=&}8V z(vp!lTt~_PgB1W;)VeR4cy`u%M%Ftl>k#cvRp8RH$c8NKjvNC9Qw5-JPA3o@7O0F0 zikQIlmR0sIq=^Z=aESnFsQ?&e1{*L!`yBncPu?2s0BX)WoL^c68D~MOSpuhl(a?)X zcy8mSW1&I{@+9`A;K<2_jaTjaq4(C4ErIksA}x;J(W_Z}g2ZP5mWw6uPM=)7Qs~T; zLkIeRulqc2P*^Rv7QFg#RG)~@@Q`bvjX~q3lYD~|+y?`=gf7sdz=PQ!gQaq`=Nknb z;oHrbASZ4F%ug53fA_Obm-PEvV^2O;8UK9U^3_7<)5u7WtZmi-nC<2sfuNc!WQ}f7 z4A2vV;9x0IbP<57;(e8xF;kOPtmik!*d~CVzTEhr zPxw%$$t*CCbjHD2W`v!FR+P0*Hi1Ea?>O`&XRDQf>?+j|bXV_PM-n(>19O>06bTQs zH-uPZ=Z{6#|GgAGNhANX)+n5*oG1=)9))AyO%li6*d9deYJ6R160Zp$GJAq&M*Wy5 zQ`-rv#OK)(O)ztm6n!1N(R_zEmR&r`N!*t*I=P`^snJw;0+y3%Aic7z28?5eR$bV@ zw_)3lEfbf38zqpR690!MBKWx_`YL`$X{Kasq%d0FH%*)jWte8O9Bj?6|IKWMJb30m ziIBgoG;I;K+l&I))=9Rfr4)b9mwpl*dm_r}VETIh&eSQ~`o*2o4~lv7aK&in(cm~S z8SjK;sOY|R_qDAr(f-MLVcL@IQ}CA0km0QOZmCj zialgm=8oOFrdaeP+Q!`#}(VeOoZWzLQ6tcWH8Gzqb_q$L&x(w#xs^-*;EF=TF+ zRF}jrxb~`?UCUSg4oCB6j$#`86nwn5Ghp*)8AWnS6tDmV$u=L6VJ=6 zui86T1*JH840UKOY%rGU(TCR)?ITQFYmZcvSq@c-nRCN{2N%x>kP@EMw&9;To|OR0Of!5@XK{<4A@TU z?ctDye&}#;<5F3Uf>b~cRKm~Y8&!Qz(_5_a#@7QIlheW)Cee8JK%OV+$K5?-lrlgG zLC^3qX<42_03}8O72oUPXF8xCxWmk{9-=6YVvM|Yk$A2eN_cQ6epRLAECC|ih;F2kvEIqWam5t zIY)VTVq>4u@%xiDFxW~=`(&4LGAu|)!j*LI?;TEprbuLNymj7We4V!q5m=_jyv}w~ ze{YEMDoNKrLiywe8$`ob)E}33H(?lPQ`jso^swq+N6g=zLupz9H#`66-+!-bqp$C%d;MIzXA>&70(OK{7Ir}HKC_?ML(+Y7d zx&rAcwy%+L=4jk5#2%3y83mME6;Q(j^6tEb!eB}MNW8|g8QfCqj5;@00i4hsFJkq@ z0&f^rbzpU$r;P7xTWFha0otc(U4U$B3lKea)t(;=e$Wxr)5;0HXU+UVB2Ru!I;P|5AOkAX&7l=FjmE`MHkI5llS%e7)sY+C_l zdz)iDolB4k#`Y?7=B{@askxZp*X^zb1_pU#=&fG6{2Lj44DhlU9(-GXW0Yc){yE_7 zDc9z0Ms3@c`3k1+IEd4!>UOp}Nq>>G-meGgaL)X8NXssB2;V;3&H{?5UAM@rRk;Uh_SOCYB1OyAFRWsf!0Hjwc5lvw~KHOm1&UAR`nS=HS_ zT(sakmXI#OFqmhv1vMG1l217lVDe5D<*b3> z;*zOsi%!->g>({$4iQ6M>_laK*r&CX4~cNNGZO3CqC#MeM?5A%dryEInJy zb8Jb>URXH(=D{o#W?y;cxdm9!Z3YMi>DcywB?{9rh$KRvwM0*TW~lOE_?owRT(DOS zj*Ts*Oa`ytRYXl)nk22ubWulOFa->MT8dfaON zton86br<`Eg*jhrS0`~|6Z6VasCjHaAi3@o0PE>DvxK_sl0Vi{&5wQHabR#{&1hb~ zKg%hG{!@Xor15!1uO!=Kos6WduAT-ahX-WoydT{Ccvz=q>$&``T@FEu{T z53ef`09 zP?}^mbX)yRVA<~>m92C>Mjwov{ZrGjh^ z==mUj;o~I1tE9Q_7z$w;eSzKZ2iQx*{`YV`T#tU@2kYtD<}}LQf5?;{voo7A;;^a4 zadjjU#8A-6eFEi~7t)z`X6YxHy1gs}aTRdYi4lWL87&;GW~tI(7waKFid_p~&<7de zn>cp`cQ73F1k{aQV7a&yY%6}4WDsv48tIdx7Mcp0dX&v*XboWzZ$#_vScbZi0lhr) z!RaQUIaQPY!~q_Z`{Fh3cFr;_JQ0d)nhSI zHb)o0uzyCR7(QL*(3?9v1ejPRYf$pMcC9?Ee?jR|^r?u7Hviz=%-QndR5t?c(?+l8 z;7))5t59oK$E$k`Mj;DmrMUABndRD$=29B~;-^UIr-}j`sOQc@6HY0HZR7dYnk)yl zg0yO^Z5`PoJphi-%IV0ZF~~Cf@Q`6jEy7xS(f^-2L=va7eC1&T#e4$pRLT27ybc(?9#?N+n?%}&N~@6D7mnf_d*RZWGNv;JvB;Rk&I@bky)=mhQk zc6!MOOHa@X&*|3B=8MLvfK(dFZw-l4piuj>(w1$@hCF6qq!Uh)C04R#Xd8V$*QtXe`0Dz~Gr8nzn zt=3W1U@H(!js5Ng?s?`N*u<||&}WK<_3*z!5?cEwLO}cIp?*!L1`po>>xgo&)t^~} zj}n>?Xn!!0awNN%-%YlaxR0e=IX4RG>@)^#fsL|ZS(27S;(2#4PpKdXh@YI8KB$QC zzsCtmhRR=*me-rI%{Aa2hPgQAe9vIfsv7{fS-c8GC9&H+>jkw1ox*{u%(-s)6=eNO zH_5F+E;>VT8PJ+WLDj(fo-4e!l2P@OTI0LGLf?e}+-{)tDeZhl4&;nv)vjc}(9r-+Nyk|}3_ z{nJ-GiMp2l0LMBZfsu#=p4i)FrdNW{YEfVdnd?iz3h+9en3=vO zqe|F}*^=jC-huN$GK3*CD2E^ep9G44R%lYm#!j?3cq5+Nn21tqm(C17;8oEe=toY& zV-G{#g<{}5P^ZY3dAqHG&&H#JdfF+ehf&NYsvP4d7ray)LOTP>V4d@ZsJnXo5U*h# zbgu6MyD71#XuD0FpHsjTYS4^GsBYI(YLRj^DuU2=U=+A!+$3n)_3u~qwfia@>_XB1 zgdPRa&hV~3K@gLZK260>bSjDd_whw6-`s^Or# zkUV;3O25_pnlE~j1?fQi?(T$W@)Pza!?y8gvqG=3TL6@7^e2+YBxk@oFS?QNN`XEF zsaJI+=o8J9bDwcK0K^*6>|8rHjega#16gDZEqj+x<{_(aW}mm5$mcnxDe4`w-xsjh zB`&yJ`QJW$ru*PL)Ny0`tR*^J6pANeStzMM$n{~!GK``0U0?+?B0CEWnBxyY>zUCY zoo<^m5E@s1>JbUI^Z3D|1Gq(KU2kg zkJ2+iD)2%_$g;NamcoC27$L^x^Du(-?tJz&TrKDS z8C&DWiWLa2Pzy4w?Q7Wl%`ZT#P$WTypzY#kZW7KR&OZa>um89m`JYciid;>VAK)-E zNytR=H+a*rv*0IyX4UNr?*Dl&Jg_5l{C?fL+mMZ{pd1yv_q*2oKkbmK1E-(-X8`&t zMX3It%kjV8=g(JDv`3DmItTk)&3Y*MEU8}TzrXVDZv6e(V6@292a~)UnQ4G^G!JT1 zMyPhY0}^%7x4?#{4nDQ67Y{tMj8#&WfiL~DrsvTBKdjh>!S$`b%tFc>5MKcR?n>r8q3>2yv^SN0IR=YY1Q=iLdIxdC1uYk@Kwn zKKcNuRoN3n(nuY{MkDBTzI`yPkx{ijtld$fg@2)gcK(J~2&CvO9764jWr&+{N>T0c69G&w80JSm*dj8?jTlxOxo&+5x1?w8|5aC^yR5F69@ z1j*>vi8d~HTm(5a<`qJv$5mlNF9&onWgn5{_)=_mfxGi9nx5Txw>0S<;@!B9!n z2KqRvlh8C0+yX80Aggs8Zv-j)!Oy%QbquId^bI zn81A>AQ@@~C&Yh!gEqOtjCkY~F#I7zrGU?xr8L_^i3S0{h}t*p=IFvQm2e=h^ENO> zpOPPL__hl$?RU<8gF)C2P;lBH_r-a@ZDVZ!iRhin^O?)3fqNa$|5-q8(=h+Y##Pl0 zc)B^N*(IwtfRS+7+4(H0=+8Cc(Se{IIv*0BNOw;QX@_$D>6NXV9SUZ!ciwxUtBt>6 zl?!)q1O&-t2PG*}5_w;bPAgD%F^2*EX^gM!3BbPy&j3Dou*e7Ttl{1_37q!IGfH1G z^5!UpLW>6EQ^uDPL2y#Z*aME!Y=GL68?ym|pILl8+t3y$?hOGHkdaW=VZadVsLgHx zEk^K*8_|SLf0edDtIRDcp7r1q>VY@QK*S_-k?YOm9Isc18jqx9rTd${+WY{7xu=jH zlQ}^@u!z!422%+9c2&@n1oaKT{t$x9K>5VTgIj<@5cwqobS8}CX2A^xYbkw@_O`bl zN_*th^o(Plz6GO>vQePx^wzn4U6=7}`Z0NmPzS&{$2YdVoLB z`21z&q2ZU18y>3}ABD?eWE&-b)ffUomHbMg%W`5c@GNC&>kGSXrbgqm9S{$XZY$Su z7?6Hc8xSk=%M_z9xMoiNk&X!*&(#RDQyy_-1-uN=17yR`7r2IgST_n#sk6JbeZwsp z0P8NPgn$xEVO1zbjT{uue#(kIG|(f#W`6=*Me^RJ?H!^Q2t&U+>i2$zXagSCTTph_ z!oh>mc0U>$I1$dmKb%SPTa`j z7Pk;ij-3cfq&sZeItjCFsg0mgcZXT06`ggLjSn+HXZ z&kKg$#^4CtW;Iak8_zc>FyX(`t4)fd*6NcUH`!!%$&XV+4aR*>&uE? zJQNbT-@dj1V$x}X?t<$Fbt(uLvjwEPx44_sQRr5AFmiU(BBc3bQ}QH6?yks%J;Ge- z%3aL8qaY#F%kLm4rHKOPm|D&0N*#joSvQL4)95lo%E~f_(TP~))H|T=Y@F;WxVf;3 zsHP|#7T;#Golb?{6U&eQIb+u9$p||yvsMRN=+aFfz&2$eSn)vxHr7HV-u-uJ!=ocm zjSSB!x4Kmpj{J9n0Q1|vGY69*0-zRQ3t7qB5#K2VoXVX*$VF*QGa5;x((#rMDJALU z6QnbB+$KJZw$qm{_>SB<)FS@rw7{c))uKb!eWp0V2Y=G6E~MceA%+rZhOJb?N6=4> zJ})4H)kwY{fYSpGm{>8Jx7Q~HU&#QNB;p>wz6k0KxXve86qx0h#h6tY@J~Q|SvlA- zvMD+K$qT>Es`6$eNuEwnH`<6Uo$6bu%^+Ry5QUf3Nq< z#6_)A@(f1mNf8xn5>yFvceB82*8no$-P0N~ z?RDHDR+wNQ2s8lZNYS?#*2<+r%Z>1`G5H!Qh$0{1>(ISl{A_C;m%s;iF+9P~BGw!D z*9xRR+;7zzSle^8x`yUr!Qb00Sgdesh1WO%HCpy*SMPJPd8HA6xzK*|xhSu4?n<|4 zERBNtiy^dK+1QvZT5{v+uF?;qD5@E6&TEk{7EgPLvGC zfgO;@hLHeeS~0xpq0e!qU%vdIND!zeH<+nJ4{|0Aq+cPm2 z%AD}ByPxgJ>-xhzNbLyG)`2%W+9kx69S=Z)0cZe^_f-ip!eLaAy8?|K&}$OG)SU-TlYdqj5EWw#UxtATDp4h7K@m;Cb>?5vPs2%o#rYiwj2QXeQA zs=z;x7_8X5*&tF|i8*{sy(@@3FaGR7BuK@A)IZ&6A4Q41W{s@#b9bwX{Q;~)jOV*I zTZ+PAe|?4Sh8Vu*n&%jGu8p!H%&;AymJVtPa1h+`Hb;ZoIJu*!Lu4uQdzbs^z#Efy z>&y4PEWMuidNIul3S952jeuEvM$+X>=i|2E{EnJ7z?sbyL>QgOrkIIq#AqAE9$*eF z{q@rlK@=B$9k-L4)z$&_sLpz+`|U1(jeTOMqnhaXE^Z+}|LDu7iShN~^rO7*;HHaD zQ3W93ME~e$Va|tz)i}-NFML!hBBstU#^A0fgh zGOdw0+x9EUI^I_Z11@*KTcBxE?khZJ&xyVz!_i%&N|oLP%9Ony1U8j6tS&1DIekoi z9EcW5nUGJht>NJ7j@wmCD^ev2HB)yM6H4_I>;5h;x@PyvzYdFuyOjJVDl+JpJw(V5J+-XKMx!5lh& zSx#>9dXK z?Mh(NYR8?-u`}Pw%DW<2Vuv6QXD?3M?u4qe_k2oggdlvS)iu>NB_NtQe9@Xu-ecRT>=i{Aoo5d=w)CSKarpA+^t;icaCn*5w<2? zQoYn5New3Ndp0bAfv;{OZPgOCB9J#ugD2EHc6(X(_?RnVKcAY?v05qL+#Eq z@E^Q#6mS$aojK5*`$CbOgBZ(SGct>~rXB2jBrd$+a&SbuFjuB?sOWM0@i=;8X=n4& zoErzQ+>NnF-lV)dS8ChvatB4wbI?v7Gu}lq&8ReWN&0j~S9R_4yJ=>8b*{wSBmztE zH7d>{*1gPI-ESI_8L&G&D)t4%+th-pA{l61!o_fjUAh9i-Dw`x*;Dl+ycm?Gjv`=4 zYy0{OI+?Gm>w>f8V#NoaJs=8lm+-K)S*CXzc32QgAuqZfxMk zB#u@p#T)WtP&31N8K7`qm8CW_*u}w%Wo{h?y1YRi0+&3zGf6w#F)uaE8WHa$a?U9u zhBJI@V_!vQRXk+Z&>$+(EIAJ0SAX6P!7nsJ9U)-&g0uzWGiwnOsp#XDxXfGT^(=2c zOk!_CVB?C?+?Ia4)EX{{B^Pn7!cc;%*{XHt=i;OEo7k^#DBQX=zXk7Wk1+@bTSz}pLohTJg`@TMB@4MrJ zk@h{(k4p`n(mkI~uWWUZxM6VCdU2x%%tK~S{9SmV)zs9S6s9em8NR4{ffH|4yuYK? z4TGyA)d^&9O;rWaP0Tdrju-(2@@V!N1I$-u$;fM{n9ic;$~kAJ69=COS^)(OT5x2g zh`68KOkp2p+Me2!dee;1P)=;|o!Z-*xQ+s;vFtU9Joi!vP^$GIj&*y^^PH$m`Ejf}j`D#;mK_z|IP+ni(Fb2B!o1AO)Q{xoh}2@LXQz8^|f(cCqpvOnp)G{XNshK_*Eb;A+%uQ z91kI_oCRHpzU>nAHC9itx0wylG zg-V?&_0*PeIymKpm5~SXicY7vq%Ksi|~|FL_{tbBO-eK0*_>8?^J&uksX(Q ze7*}`I-wJ<*58GQ#j93T|teGM$5jqI^1>r2>h6siZ4jx>E-;2;>pOhJlTL~>K}=nv%?O(;4!~{MHrD5V zd6Dw8%6FL#ClIB-72mgVH0K?F);TVJm4@ z79$aR+Ev^Ss+`ZM(>zmQsfDQCjf1BXU43e_qSx8o5e`HJCF;m#@h!)fmm}xgu5;F{ z47!42bu03eDGyz6`3#nQnnco)*BqsMLfLJbqRKwDNaMsY~P2`*NvoUm5^P|$qqm>Bu#^NMFQg=K%(zNNfQNAbC&AUR9J}gU9?UnI|ACD(| zjumR!%pfN>{2a*l3fr+NDc0z6+1S@>a(W01;dS>0Gj`|-biQJbSKuMPHtl~(b{}>> zU}6TIzz_i^nLHJdaaod9|JaNy%r!`nmv{*EGJKbsjul4udKh6%9$)N3gl)x{&k;Ex ztzq_fL#Cw4NrWmpx*(Z#^de@GWUi6N0WdrLR{8-gFaE*E0T@7t{I@06k_M33mZJ!7oX`+*}=2VWtQ9K)~wVt<*Z7-lX zQ2DhU-Y2pY$c?+*FUf)iN74PO;)H8HKKBq~rW7)|ZOn2B&)07uz4yqnIoQ-^MO&;V zhd=Ed&(5gUZ5yt)7I?n$J>GcW@B=pxA(g>kz}nA;{Km%9BH)OpQa#NsV7O68g^N<8 zb2p!%MFE1?>re15`WTB&;XROpjThsxE-a)qBoNRGzArXsXo&C$)Kx`_k6z;4`m8)y z^}s)v*RW5QMwYhl&4X{>cO_9%B-l)&v}ta2Ni{Y14#)1^3`lwKLYkiNX>{Py;|YM< zAg#|L;ix;5%VR&j3){u2bz(HF>^ehNyD+Gj!J02L85%umK7onSAnK3h(a2zC%uhUc zTHjeDmc9gqag%WC?1T>%Gqg#b41lm-R;@Obse>w$3YMY9;VfxSniWNDAl{5$qh=i+ z>zHP0Afv)fq6V6Cfy|SM*Df}6-ZT{BH5@0!4XM1IFmvGUBWL|qn9Uatz1iRcW#a8{ z*GEJ_45-J*?gotyN61at57`;L`YA27ICaNa7NZIll4(7--4icq7?(E8Y$`YDG}Av8 zT$)3pr}o$JNGw@KIVP z2ad!Gyq7XV4W7(V@@~Lp9Rb?+;?;L0+S0X8f@xma2bit7Y7FZ^TBDjghlsoDRaxxm6JLAJqV?;}1&)&_Vocd2`T>KTu0ETU&Kcpx+_51= zWcR>Q&hBYZTfo!iJ(66!Xi~bty6_y0k4my(coH(8?~Kv-8h1%(7an;A;;KRK!MX*1UuPOeKR?b-D$PG4UU0n$>_eh zTp21%`#jKR(mfC}gvO0wLsw)?d8P)zI_x|M`s!Pwgfn_Mc8SpPmLeCH7~e4UQfyP- zh+5merke)BfR)%Aq~tC|AK&(uNK^7Yqpp-kP?3oyxUxsm)Gb0(h1`TA6!o~U_U`m@ z{odxM!qMqiZS>U63F(VsJ^(PO7cPa%u%|>AE2qpi^*pf6a5(w=ZVKV;^Sy$=GTfgq z<6R(T^{H^`TA0|j#dNcxYIJt;n%xo2mq9v}<1ga_VGl|PAVY@yvD9nvIsdJMfn-<% z3YT1#3KN6F=J0ZJuv0)V^ktojx9!6om8Lp;+-gRgo>NSM1`=8(2$s2+TbdV#1i}+u z`0HA#YWj6aWf63fKKEX-o<7kE<_AE6>S1e8Fq$?O}Hg@lnyT? zYH^ta>f=i%&7sLuI7vU_7)+X|26G4|jQhjdGgYP=zaJHxue51|9m`TQi3%=Up4MAu zL$f<(77KqZ%{HO-3fX#frS&gaiMcw%HXHGnS&Xt*283<(41nZ=bqJr)`|pyVmg^O z$!lwmpSniF=?*=s3&K=(G=EHDkks3u+c8w?^dCCNnICb+3FMH<+pP2U;`_lc@j-1M z6cuNRAoDC%erOKkE7s(XO~QfmMy~vh_VxP%;$UW)H;Q!?p0YJ~I|_PHBp@jIDxT<`ttefJtR} zzHhmbI~`nNkj+c!VmYY8-Z1yXEMZs<1o*NZVUarG;)~szr&xN9$qN}{on)DH(AacZ z_Y6!RGZmm449{vdT1D7|sdpX@7U>fcUqMwkP3>J|B9`^oJj&xw!keO8UhhgtSt6Sk zKh0LGaO>8OuvKu_3C(4!DWZJQ|h*?2ub|J4vVgzLFbMcNHU#1;>5tf`W z?h>3EdDScv8>U>HyrKHQ29B4}Q)WBNv$|$|muJnl%w;(kO`JM8(VSvL9BDl9Fz^M< z+B?z=>T^W^LBu4PX_4A-1glPI>}9(tG&U9&<6O@BW9nL4ckF*mU8K|uqrpzx9owEM zhYKMoA#thr@mh)=QaYe^{MIF#S_8fZd@mW3YGgZ;kxJh>Lij~eDAA-WlYV{qZA$DN zmxI=$JqzlOy9^yQ*45v7zH#<2{K)kEha=VS^c4Dx2o4_F5B3E>U)W7x=<)To$+M4y zP2oIW5khmkE0pr&JPz9rGKzU>oC}GiIb`UH+QU2u?q*FDaHuovDVRcN+OR5qiy#60g+b6Rm3WO$x@tn&!RH_eQKJQxu0%dMG8D2C$~(oMdLx0<{C7%uKC zHev7AvSVdjwyK6Davp78@BOA`Ew7Z21A0neuw>|H=sWwZVi4B|5fb9mLjbSE4n=25} z*Y!1#Nu4rE!JP=x_Jp|u92aNm_JVf_7uBpUhR-pf?eclW43x8v#gLmF2CJuKgxozH zP6DpaO?gmiQIWr^odq|Rr4FAiU!r4=n+ZxnQcEb#s}T__4r)C1%u()m-2utdjVshE z&*3sQ-FRwE{NIF!iADA(pZj6TnexoSxu;T7yYk9`i}O0gR8sLkX^O7-{eqL0puXPbEgg?9r|s^4ty-P`)Drq$`}nNE5$b+v-W4o6NXb5?qR}QZBZ9G0hl+ZF} z|IW)jT`$s6xibCGu#vv9cIN!853~z2tvan7Etl5c0-cinULecx=>9^4&e6q~O7L+H z;PsVEqlJV8TUN}Q?R*NBLHwS!zdXao0(Elw_GQ^f)e!)l$=N{A)$@l=-QX1wkH?|0 z_6JuVKbFPe^rC3fZaxLlRF>~}h@$3z~-``(%1-RHkx65iir zdY(#uvx6t5yCpI-&J1B!^Qrt~rs+i--&^YR5$#M>i}(rhbIa@+98a^4_9`*^hq14G zbC|a~%C*pk$Ri6ycf*+y!=Uw~mfd%0@rUkI?oIc~Y%42Ae0(w_m}kaT_CSoI_1C1T z(qUQ5E!{ds4A6vCzQ5^s#TO$nn!D@SBJIhY&e5C`MH@Zt=!G{f?q7B`4YsvEMcckE z2SI5bV~a3LUA~O+Nr2^gG3F96Vc+EVc4w$fOG^J_zlny;+=BZQTVQ>0;@ISd1*h7l z8Upjl@HCfR0mRm@LsI8GEF_9iBDu?prA4a~H)8q!}KUBjCia7PMUs8;cy~ zkF!?{Y_6>pIEi5MMVM_Iw7J8@Zky%9O7S@4l**e_^mNPSkd6s$7wqN<1qT_P<*>%s zP9241yK;=*S@@!BvoCIY<&q$8uu4U`mP{=#+nElobXf)sJH0u6N@nCBntuZDjJR7m z+D?BhPY>ic1j*2z4T2dF2rk_~;vX(kzY(4E+Bl&b%E~QnO3Uag3hnwPTEr<^%$+EO zSsC=qMWF4L(Mak7v_`L=2QTksCsN)b^AbYqN)oc*a^@t3?|i4lP3|XXT#jr`KgldY zimAo)oy&;!@%?;s*szU^^(~uQ3o_!7^sTOjlB|9{>~Moyg|{lpIE7eS!AbEmz1mkkwbyMvD+)KROj+BCtQZ?scJQXN7=2C6b(oCH9LOlRjJrBx* zGPv~+w_YIc6Jf7Gp4k-jT&XjlM9*nJgp>9PJzZArckqs7F%Pp@C=$M^=G2WOL zepQ^hX7}0kX6)D2HM`iaD~_Cd14|c3;Gy@n$spZ*q%}g9; z0(s6E%-d+I=Z~@XQ>%>qoht`M_J4qpq&%@=RHH_-C^9SS`|gZnzJ?v$IB0c4{z#KU zsaXgc1iy%#pv$=&B}=3gP6Ydr-~06^Hcmf%&wT6!JkM)){tI~)6Cy>I9G_6|gDBvN zjhicdXjbE59JtTerhB*o5I`$L*C2NZdb%yPWm`wvayj(bA84qbzmCKPD1cP|@4JDk zA0MKTJb$AEfY$@8xe)ds(qcdbAfPupR8QbdY0x#35&0n9<$pNr`uBJ=s zHi;ToJ=~|+BF(Y763j)|{o=O(!0I{sZwxU^0}H==i9r2Jh1{LqPzW<;& zg4Vp%Uyx;P!n$vprt6F@{&~r~g&<R2A{&|E9PUQqgR>w!T7 z_F@;aXAK_vmdf+I;Qwk1YSy@$EM#}R3st2bm49ooOYEh^ub~C07<1Bv)V_<^`v<=M zd;;)yba*qZ5=?@0L?nj8|2~YrjEKRH2%?t&6jtNyD=z0O68;M#`1db%;sLsH$JqsS zB7y&2Tz`Ec)NeUREI|9M;;m=@A1((y9Ea@3l>6DM{sm$9x0lY~H%bb-tfay9&TZ!2 zv;TQVzm_-DgBK|%cu(3k@F^I7z4HH_zMs9!P=4VUbSH{Vtu2o0Up^M$U!wchx&PY` zf$k3*pkeS^vg(B1{T8BgG8b1F@m=>PaNnV)&D-KmIbc2 z@5d+_DGrF5A8*fa^|*j|yU@2MAOesA;N z-K-K&VHg1KBF$0~$MEC-eQSQajGFFBSCx=>b{c;{bN+tHulHx1#QK6kynWPz=fBQ} z|5_eZgJfWq<{ZQtO1aa1-sAr}7U&ynSHW>3Xx?c4rPVP0|99+|0p2P5DNpD5AiYb; z#s6yRzh@PWhYP@SGmNR9)inIiZ;}0Tt3Q7Gg80{B-_E(UDDfua_TQJ_1KMq*Dx^wC@z0V=zB2P)DOuZ_9doSYphHV`mcj#!DL-pvk^3v`j02bkH z(Yj&~|KRlRDN?n?Dy{W&^L>Qej(pAf<5&bH9iyg%Cm8>X-)&R&CtEkuNHVN|fnJn66!w%1@aNt{57@jW5;fza@^(%na1d&sTj)X}o&xHX4Ah9v8W{sb<^Pf%WY?!oku5rqvb%n1B_H^Oqzn53Ke5L(g{v*zUOg$L(59p))e@d2~^ zdjMdiu3vdCK5!sv?wPl%%Ju7d(_{xQy5|fAmPt|m&hztI4aBt-2vH9CYbi?>IYULE6JlL)}mVv#Mw>1_}jqKLI#Xe zfAe>s;F|_Q+5@Yq^y%-e{Qa;3Q4kBPGiMjx3w^wi64#7a`Trke=@bQkZhdzpP0W*C56XqmO|~{r&4;2?DIVJHf(@D2QU!Fu#@de*xy;ZDd`5rU4-P zc`BYx@xFU(?Ut(Q@q<1C)iUrKSbC<3;P)Eq5O0Icb5ql$vDeiH{sWdLI1h5>?dDWWHN zRN(Rw>ewq`4IpAC0cX>^w8IoYN3R<0ej2#I-;v;30&=E?R!sE}&+D!JYBf+^PG^(O z3oda75$hi8Pymd7cqMlK1Sl%0EvY8yq9v(ZX!q|cuq$Q{YybtR3rL^~pHsKhqhZ7e znBx%_JRsb@v+Q}blzKCw+MFAM2-M6f$L-A z8lq8D`{;5(kLTzu`rj5S2+m59j2}$_M5loRfOo!Lgy^n35XHw7lvAO5?@{9EZZ|P9 z2TCt-7#=O^Wbej9oV^*{Z?{VdtS|LQ*jj;~_t5ZKf(3&&X$3ty?nlCZ$UXgBdT(7n zsxcd@w<=^T^QZ5rVgUZt{S;1M2~dy89|X8ny&c9YfP!wsLv(#QsyF2R*SogMAi!D= zxB~oA#@=8rJ;z=H6ot!pZ$U{I=c7(jh?f>Aw$XHBF!SZktWf3k8Cix(fc(Uvk*zsH zEEYu-ma zY%;V4;$k8v8teo=Qv zN~@G;_G}jkW}vj>Q3N7trOQyU9_=5vSsPWa=C#wbH%+`w0MvG^!BVebduA8K8bJNW zsq_Mk3qQegG8Om=LB}V7R?FpCKmj`axu9ZyaS}p{$}M{YL6xvSq)+N@_yCTW`q%mC zM)%BS39tq)L8|88o&+cgZxfVxkKQW%Lzr^woL@r}t-JBU@tfJfe*Xp{EM0DeIl7h* zZ9tuBJ;l2S(J_mF!pXI#UHa7^#hudf`jAZ&Q%4>~l5w3rt;+;b=XC&`X|UW78#Iqm z>lPd(fY8#p-g`F$_LXwa+qzd^3>C)#x-4ZEf|O4eb=^`Ft1koOf{VOKW@g&bsH+eX z_ySbtt!E;_#`kzL9Rj-N%7-h^5C-fH0g)oCE?!QmmZDT1(xIZRHxGQ$iuCE5KcHr> z6)2~k(b5pPyRn9aWgpTtJ+Y}t9|})dQ%acwC_k$rNJTTGYi}+L-2?!|dR`kb>EW_C zoNslw6=F;PBcDEshio#fu~g-!0|}1AP9(Pda8teYHCp&dZ)$z zscCs64@~L^#-lY)r$bC*Hk|NbK8WkrL#Y3fb`n7`j#`q}c(RWTK$4@r4A4VL)R|WS z1LJa*YN9s8w5*3jl5P=+lJY~sRkq7u5q1Tp4 zgdlj*6;AA#+V|wOp3HTMbq|9W961@a*XxLCnW>7%hk&)!{bdwrV)Y27pI#OB6_|u3 z5`;v5+&}ly6)3Xe1wF>Jnni74UOJ81gs$S zbe;~RqAN=HXu$VKM}=MXC}sGj0!Js{^FxZ0L8!THzTw{%s1(+b%;R+`grr%C6Yfo= zdnzl;7xf4xl%AUkUXRO+OPrm*Oq-1`&~$%*l*o5icS0- z0gQK?jz7(;3D6&opUWL#wn^7H_xZQmA~ig| zFXKc4?u{w9LJGP`o^2MABFKU#>S;~C=~V9bQLu~b6lF>)=jn%g3{1hYX}#BZE~VN8 zk`)uxin@ZjYjh;|%sJuX=|Zn~z<#VtI?`VP`n`G}nSL!=oRA|=@LS$6klF0x4T;44 z%G(yD+dE|Y`O$qTCt?3tfYI3#Wc|Q~R4@Q1w(GqS!&XplLfiY&y1!);Tgt-6>h(jk z`0FJd!IU-JRC2_Qu~+tq>-t|OUj#8vJ!{yB777Kw8)q9ahw-|s~W_Nwfx^@}71*7K| z*O*IQ<4yT>MMjnynNO$UpF17y6m+xE`U83j^+!wz<_Xybc-A`-d^6h!XEfzTO}ZEebvzkx86oL54WVXo!nMRLO(D+E z+6^;0d^Mwq{jCtH%W~)7esdZ=Zo?`Pvdyd}h<42Fh3Uw=FoJe<4It) z&44@K@S4)Gct%gin(D}U3lfc+E^pYe7_=*%!TOhXb{7}!?lA~rJoWx?u$qH;^&&!F zFN`-TvpfW5o+|A=>U@1u+2Ezt*KvAR?%b>K9v>#Xn4w~ptUMx%ItFHDQp&l(__8w3 zuM)^j$UysHhZ!#e2Vyh)>q7QjX%S>Ss{6)O3#H@Y{ci&mrN&q_h4al;$%C~k;r6FZ z0Chqm?~Y1jgs{!+$x59!Du^5W0ox!Lm%IayB}6_5SD-D5;ME^v)<1`FBDFl|vK|j& zTos~ZVtvIpq3*~Ws{k_*O%Nz(UIoemS15~$MzF7#x2&Cya72wHbIN>}9%WM7V|pa8 zNM(WCet&78CaV2p_vF}U1CH#V$q)Fr0>PPwRH#TMjuR$1i?K~=_GTB ztVE{+*Kk|CQ?1P$Xd;<}(c@2OiOvLSpKndIQONbCn{$McMNq(}>LbaIz|k{bZVw>k z@QQYXbP_w53;3x;BF5#wRJm=_bzsCAdv)(vEOi^=P~VWLBb4?4P};mYJt~L5!WRz8 zc?%@_8@fHW8NJ^-0&C;WwY!jJH&Eq?m^d6Ql)R*nXbev`FZA(xNX)7_F53%hZx`Rq}VGuX1?=|TLcg^SoMNMX~F!^*tU9T`1oP&w^TCiDLmp_9V z^*XqD9g4nMCbRM^0#!QU3$n|LxJ3#zVABQPwAzG}?;!W2(+P5+h97;J%U;^V3T32K zn93uUJ+)c~g$}L^0drdaUE__<@UzS4V02$?$PYd$xa-oXTvVsafHR~snnrT~^gNQ~ zjr8b(fdu;-ozhSp2~zx`#Sn~mEGW+BC2R3^2htAf^C-KTVK893B$P7c>B3cKM9iDC zxyckLB$~>(^6=wW^x@~kfzO6MbgGgkstOh06lK2iL!$48ALXYk`?$~_D$Ip}a-5-^ z!ieeAP2oTkFg-Ljy%|`{0;@7oRWDZ$+s~TZVxPQbvd4tuk{0YTdOIQJj9DPN|JL?^ zkjuVY1-#$qRPIlR&yDw3P?}<*bOZGsM%tj1*Nnj`q}m zz%vnh%Hg`rdEgu`udQ!Kz+VZ$3k+q~3r>?O)0bTUdb`!=0^>eC;-9NZc1l`f{H_{6#gg zcG2^r{qABm3hgt3dMlfUG(V;A!SaC5VgtE?``WeI1UY1lD3K|zngoNS`@L2^kvWXF z>_C}}}bM}M!jlg#Gc29`N(#qyF5p{QXgC|YZ^;v@Noz99=$Ln7aE0#`rY{!*y zvdnA?lP6y@nOPcu0!!-TnE|^C4tBK(TW6$2sBUa+09I&awLzAM$sxj^_0y6&Y2%Zb%Wfkv** zE`F(MrnV6FJRmI>eBUXnG#G!&dn?b%l91SJvPCRbHnYdN0*Ex7XDc>GOoj6wTiHto zdX5{;jxqqR<_-GCt!C+9rOVb3m`uw-Ln&9vnZkmLNGo2WyWLk8W zi?lqWHdut@s)KOKqcgmZ7(XG93zFlCJyISq4&(7hiU%;+rGuG?NA zODrx>Z(V!!JLD8#KvtB${*f8IjC*gy%J3US0W#*)m-Yem!x3InU)sJt0s)+66)amw zYU7#CCJ3F5>dMPph5W}p2^jOm+6Xh!a1I`Vml7h>Oz$c(!(nV8W!$tx&T#va#EIks z4Onbpi0`GLJxzJB_oQDF=PkfZI7hQ&Av93K66bYX`?1VRf%21bNNgc+8s0UrpO0{k ztKEx)Pfh>@In`h%dR!|fKt6oE#yaB*gm1V;fd=%QdMDrDgH#(gbgqoSpP3GCC5B5L zHpO&6w9h8+a>mJgU3LUr%u`57{kd?2lMGD#EJ*LWeKV(60MUy(4}o4)ktkOvyMa(m zpd4=0VB_c8G5l&}E1Q?ceo|t=-FPGme3b04`_D&F1sv3P0gZwoZQdm)h!6c}BMOW8 zEnNhh4c}ZFSxsPabvG-M)UAQiiojK=2*fogf&ukRg>G_W7GrnM)smV3c@I#v-^cdf zmZ41n^`UM<5&}b}!1F37Rs6I8gs?bhlY%7~Uh1GY!thpblB=*8DW%hw(7||)1tdu} zazKS$2Z$Z0JoR#v8`Na;H(yPRENcRqEjJmIh%Iq50#}@1OpeF>b>(H0Bf4tG{{ASyykOO@)|Dr8rtgyNq z3Q8{gitDMuvA*07?g^UxVg;{VIQ#PYtPf+pz@tyq1XhVK(lVema1p?hS068zlxL{A zGTHWAeE8n>+nm}A;d8;RAv0Nn^n+j5&y?DW@GI-z_^>fXZyUF?67^q4me|;YHu9&% zs19oFiUi3b+GkA#7Si|Hth&wp)yNsi@E;eFx$q`U)mVRIH0=L^xQ=!Mx&hMl)-6q6 zNc%xGfwYh=t+Fn|$>*wvQ<^m*T_}Ys0SptTy)|uBh^dea$IZ4S$uLD6j@0I0i z1@3D1rTDeXj|}YzcH=h|O$81}beC#8Q1EaCgX?pML8bgBomUwZHuv&8>+NZs7lCf~ zx{&j&X~Ab}xG^4N@6Yn2Ul!$wQICWa>Ey#LB?n*^O|F}Y8WFjoH@*J2Q9$6A`LP*J z>c;ji)uOT}?A+;^MfS^#uK+T3*qEeWJ5LmCj zDBQo->s6qmV}0=IHEh%Pnc1}uQHF|C9HwaJWrh|%bBH zrraO7$q6z&XMJmVsitJFH7RD~*Sf8nmqy@IMRhyJpH!;69DqLKX@vB*@A?*R3$LC$m@Q5qc@UJ#OOyd9`I25 z(pK)zEOx8B1ySt3ou6O!>tAw?a9qH87&HJLq|9@esKE}s-`L6V?%5)QQ?2Nyk?9BS z5(B@jy{{2_qy?=Oxk-{EFcx#`8cKS1)VJ-^z@U2zclo>{~A+3 z`N0{+b~!Kb7F#c;bTB33LK+Qc+k&YF;trvBS&~?^vRnd%1Gr}%h&-_&OX$Q_*r!eG zy!2@1pZZkA!t$7i>JDBv2tXZNZA;3FAoT0IbMKKHyQygz&{{B&YxIc1W+U^9_EBW( zzNV-1M=a|veS>q6NO?vs<;l3l;@ze}4*o?p=r05R{ohX3pILhDR+{u$46LC=m}Tmw zpE9B!N*Jkx|IQHAiHCZ|4zP7IX;h%MF{~uJEUR7L`x}01Z?be2V841t@+jEn-JD#W z4xF%o97B~?{Bx#Xi~+#j&<)f(>;73G2mXL2tpb=Vqdqpaj{#ClP_JciDn<0 z+y71$;z!U+YG#gJZeb@g6> zB^WZF;)imC@F$N(rVZHnDuzbOFf)?f#cm#B3VIcdzb!`i9_}E~+KTvV@g49w2=3tDkzy0*o${(yCRRb<=cB{aPt2@7B?;9JBnF z%;3;8Jh2cHmBGhs==rS4=@B`Lhdn4ev)0c#R@BYjOMT^v88l}Xx?bE*{MFY23F8)Agwan`xfY_&3N%&nW;|NaM{H(g^=4r2Rv^D7JW-=z0Co zKeVD+3!Z*Gz1P0fQM=YE+l1TjPZ#fZXMc|qu-y`*uD_jFp2-YCYdyU1K0{x~ToEaK zFXi{4`VS2pDnfuQAaAmqPY<^9e+sDn&-eUnlB6i# zoAvXVH=dVz1CpCAvaYH<^yhgD{|5*4`)I0q^D_*iHSyr(|2*%{m%VNWfLT5i|2A`~ zxB~dyW{#Hs0z&ygUIAT7-W|#PGphXeX5n`rHj0GLE=ZU;OhA|Il4)MdMF{ye^Bq3+j?bTRNsgf0*5W?*{ak7x%D$Hr4JH z@CFPvoYLpk*ed{zBfVLp(E#FLKMlUHxC~PVjJMR?UHwdsvF`qS-v`f?g$@UVhPORepmGRN`3RM-!LE>5m3;NM|Ez5dqx2Q+Ec2qu_!1Q+@)J)d24idDL!7l%XIAVe8V_CNW6PphQx0_`Z z6mY%S(w1D9|NGqj$DxU^J}wP!7>=#fiefWcP(P~OsG3S9;``TjG}#|#g_r7UAXiTF zW}2OA^=*tfzF+=HHf{Ca_P^2#h4F6f@MBGm8)bD79h)WFQEcSrBtY7qo?C~fgV^ym z(BdCwAd2)OjLRL)n}iDRP*OBO+(-vVqsF*aS*G@XU7e5NwCVf3*+kSg!h>!p`a3g- zA8qvramp_|XjzdK&tqD4%8Do|z>rYVf7S}1a_;2iRdGUb70Xl;pbX>< zl#VP@!DZF6aZ=_c&++t(w7`4Hvlrwkr7I5yWD)qt3Cg-n1l`d(n&+&%bgbIs$Ik^x zw_^Z2_%pdyk_pH-;U6(tpB}GAU_W%DtJjbf+ocG^6Q`}D6CV@6@ zwCawW6s~_ItUgG2eVJU6gFjJ-B;_{>7@(-ZY7#4<_m;GQ`j?<7r1yXBJ!`=)%uxy|xfVw^K}MY`7M z%DH_v%)S_+?-dMuWACsnyXjLlG(%xmIYymQJE1x6EFz*VA)4Luw)6gn!P`q1L@#D{ z*X;=@Qu*V{7t0D6FBx{O(_#BP9awS+5^E4Rb;eEBS*^w(1x`T7Jy4y#OO2qA4>Edt zi=waLditG1$N3cCGOh>^P1uM%WnGF+7h4t^4ln=8lV~woB8|b6SqRU{_bZXgQ)WDsect&iL#> zddi8lZ+?t^@%^Yam#+vOhbQz;#UG&E1-HZJSkMxNshjf;_WBN<`@DL5nE@Yl*ebMVzyrF-ro%EBi1QiS9+k0FkWK&dL5sFQB>wDPHW@{w9k5K@19<* zi`D(ZV*LRLgYvtcpT6JSF&?PqoU|0lC(Rcqa&j1PuP+MwN;RC*dOhF6)sRZ4S!GI7 zvdz4Aly_}n=e|XXG%9}BEBv*#@U_50Qj4XY~DJf=M-Sj;#)epE9iMa3fvLo&x`r<<;f# IWsLp*150CxiU0rr diff --git a/docs/static/img/interface/CAMDevice.png b/docs/static/img/interface/CAMDevice.png new file mode 100644 index 0000000000000000000000000000000000000000..4226882cfb6eed0feed6edbb4e59b1ef0d026c12 GIT binary patch literal 40889 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 literal 0 HcmV?d00001 diff --git a/docs/static/img/interface/main.png b/docs/static/img/interface/main.png index 4577acccb8584f127ecced34b3de718cb4569d9d..a9bedf9d3d3744d8e0ca505d48526015b359dfca 100644 GIT binary patch literal 520364 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%0APxsmRd;zr&WLXr#TDks%j+M~oF^)i85aKjW2y#v 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�uoED$ez#?D1 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�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

Bidppg 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 VJ3_KdJu=@iD34+bUbMj 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 diff --git a/docs/static/img/interface/prefs-CAM.png b/docs/static/img/interface/prefs-CAM.png new file mode 100644 index 0000000000000000000000000000000000000000..d68372f5861c8230cca35acac97591f482994d40 GIT binary patch literal 30122 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 literal 0 HcmV?d00001 diff --git a/docs/static/img/interface/prefs-FDM.png b/docs/static/img/interface/prefs-FDM.png new file mode 100644 index 0000000000000000000000000000000000000000..bb94761260dec0d1dfb2ab450fe6310c363a3858 GIT binary patch literal 29749 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 Qbt)Lj3hMF&awdNN2E0+IUjP6A literal 0 HcmV?d00001 diff --git a/docs/static/img/preferences-cam.png b/docs/static/img/preferences-cam.png deleted file mode 100644 index d0236bf3981e22b2048a8430d3e1c45ce5f095dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70018 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 TpVK`?0srJ>RHREJ&HVo#9u~m* diff --git a/docs/static/img/preferences-fdm.png b/docs/static/img/preferences-fdm.png deleted file mode 100644 index fb521b82ec8e71dc1c391d12d477124ed3546a89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71681 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

cnlQiIZjPV9Z|dqi{5ipIB?SiMM(rJ&&$LzwQ# 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 Date: Mon, 22 Sep 2025 21:19:03 -0600 Subject: [PATCH 008/151] grammar check --- docs/kiri-moto/CAM/interface.mdx | 28 +++++++++----------- docs/kiri-moto/interface.mdx | 44 +++++++++++++++++--------------- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/docs/kiri-moto/CAM/interface.mdx b/docs/kiri-moto/CAM/interface.mdx index fd63e3fe..4f7a988c 100644 --- a/docs/kiri-moto/CAM/interface.mdx +++ b/docs/kiri-moto/CAM/interface.mdx @@ -1,32 +1,28 @@ --- -description: Overview of cam mode +description: Overview of CAM mode --- import { ImageCarousel } from "@site/docs/src/components/carousel.js"; # Interface -The CAM interface is in most regards the same as the [general interface](/kiri-moto/interface). It is highly reccommended to familiarize yourself with the general interface before using the CAM interface. +The CAM interface is, in most respects, the same as the [general interface](/kiri-moto/interface). It is highly recommended to familiarize yourself with the general interface before using the CAM interface. -With that in mind, Here are the key differences: +With that in mind, here are the key differences: -- Operation list +## Operation List - The Operation list defines the order in which Operations are - done on the model. Selecting the Plus button will open a popup - menu for selecting an Operation to add. The Operations are - draggable, enabling easy re-ordering. An operation can be - disabled by ctrl+clicking it. disabled operations will be - skipped in the slice/preview/export process. Finally, - The thin blue bar in the Operation list is also draggable. - moving the bar automitically disables all operations below it. - This allows you to slice, preview and export up to a specific - point in the timeline + The Operation List defines the order in which operations are + performed on the model. Selecting the **plus** button will open a + popup menu for choosing an operation to add. The operations are + draggable, enabling easy re-ordering. + - An operation can be disabled by **Ctrl+clicking** it. Disabled operations will be skipped in the slice/preview/export process. + - The thin blue bar in the Operation List is also draggable. Moving the bar automatically disables all operations below it. This allows you to slice, preview, and export up to a specific point in the timeline. -- Origin selection +## Origin Selection - Origin selection, a feature released in v4.3 enables automatically setting an origin to points on interest on the model, including corners and arc centers. + Origin Selection (introduced in v4.3) enables automatically setting an origin to points of interest on the model, including corners and arc centers. ![](/img/CAM/interface/originSelect.png) diff --git a/docs/kiri-moto/interface.mdx b/docs/kiri-moto/interface.mdx index c17bbe57..02220607 100644 --- a/docs/kiri-moto/interface.mdx +++ b/docs/kiri-moto/interface.mdx @@ -6,42 +6,46 @@ import { ImageCarousel } from "@site/docs/src/components/carousel.js"; # Interface -Kiri:Moto's interface is designed for maximum access to the workspace and to present only the options that are necessary and relevant to the current action. +Kiri:Moto's interface is designed for maximum access to the workspace, showing only the options necessary and relevant to the current action. -[OBJ](https://www.cs.cmu.edu/~mbz/personal/graphics/obj.html), [STL](), and [3MF](https://docs.fileformat.com/3d/3mf/) files import natively. [SVG](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics), [JPG](https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format), and [PNG](https://en.wikipedia.org/wiki/Portable_Network_Graphics) are auto-extruded into a 3D parts. +[OBJ](https://www.cs.cmu.edu/~mbz/personal/graphics/obj.html), [STL](), and [3MF](https://docs.fileformat.com/3d/3mf/) files import natively. [SVG](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics), [JPG](https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format), and [PNG](https://en.wikipedia.org/wiki/Portable_Network_Graphics) files are auto-extruded into 3D parts. -For the CAM interface, click [here](/kiri-moto/cam) +For the CAM interface, click [here](/kiri-moto/cam). ![A minimalist approach](/img/interface/main.png) -## Top menu +## Top Menu -On the left are buttons to move through the Arrange->Slice->Preview->Export workflow . These buttons are also available as [keyboard shortcuts](/kiri-moto/controls). Selecting an option here will automatically move through the prior steps. +- **Left:** Buttons to move through the `Arrange → Slice → Preview → Export` workflow. These steps are also available as [keyboard shortcuts](/kiri-moto/controls). Selecting an option here will automatically run prior steps as needed. +- **Center:** Clicking the [logo](/kiri-moto) opens a dialog with version selection, helpful links, and your current Kiri:Moto version. If you are unsure which version to use, check the [release notes](https://github.com/GridSpace/grid-apps/releases/) on GitHub. +- **Right:** Options for importing/exporting the workspace, manipulating the view, changing modes, and setting preferences. Kiri:Moto currently supports CAM, FDM, SLA, and LASER modes. Some other modes are extensions of the LASER workflow, but do not have first-class support. The [preferences menu](#preferences) will be covered later in this section. + - Changing the mode updates the left menu and enables/disables mode-specific options such as the `CAM Operation` menu and the `CAM Animate` step. + - Learn about K:M file types [here](/kiri-moto/faq#what-are-the-kmz-and-km-file-formats-short-for). -In the center-top, clicking the [logo](/kiri-moto) opens a dialog with options for version selection, helpful links, and a display of your current version of kiri:moto. -if you are unsure which version to select, you can view the [release notes](https://github.com/GridSpace/grid-apps/releases/) on github. +## Left Menu -On the right are options for importing/exporting the workspace, manipulating the view, changing the mode, and setting preferences. You can learn about K:M filetypes [here](kiri-moto/faq#what-are-the-kmz-and-km-file-formats-short-for). Changing the mode changes the options available in the left menu, and enables/disables mode-specific options, such as the `CAM Operation` menu, and the `CAM Animate` step. Kiri:Moto currently supports CAM, FDM, SLA, and LASER modes. Some other modes are available as extentions of the laser workflow, but do not have first class support. The [prefrences menu](#prefrences) will be discussed later in this section. - -## Left menu - -The left menu contains options for the current mode. These vary wildly, and although there is ample documentation on the [CAM Process Options](/kiri-moto/cam/processOpts), the same does not yet exist for the other modes. Many of the options will be self-explanitory for those familiar with the mode of manufacturing they are using, and more detail can be found by hovering over the option. Otherwise, a quick google can typically explain what the option does. - -## Right menu - -The right menu contains controls for the objects in the workspace. Hovering over the arrow on the left of the object will display options for deleting, renaming, disabling, and replacing the object. if an object is disabled, it will be displayed, but will be ignored in slicing and exporting. +The left menu contains options for the current mode. These vary widely: +- CAM has ample documentation on [Process Options](/kiri-moto/cam/processOpts). +- Other modes are less documented but many options are self-explanatory if you're familiar with the manufacturing process. +- Hovering over an option provides tooltips. When in doubt, a quick search usually explains the option in detail. +## Right Menu +The right menu contains controls for objects in the workspace. +- Hovering over the arrow next to an object reveals options for deleting, renaming, disabling, or replacing it. +- Disabled objects remain visible but are ignored during slicing and exporting. ## Machines Dialog ![Device Dialog](/img/interface/CAMDevice.png) -The device dialog can be accessed through the settings dropdown. Once opened, it contains options for configuring a device, or finding a pre-defined one. The device dropdown will only show devices for the current mode. The options inputs will be greyed out and not editable for a stock device. The `customize` button must be selected first, and then the device can be configured. you can find more information about how K:M handles CAM devices [here](/kiri-moto/cam/devices). - +The device dialog is accessed through the settings dropdown. It allows you to configure a device or select a predefined one. +- The dropdown only shows devices available for the current mode. +- Stock device settings are greyed out. To modify them, click `Customize`. +- Learn more about how K:M handles CAM devices [here](/kiri-moto/cam/devices). ## Preferences -Application preferences are accessed through the settings dropdown. They are mode-dependent, but share many common options. For example, CNC preferences show animation controls. - +Application preferences are also accessed through the settings dropdown. These are mode-dependent but share many common options. For example, CNC preferences include animation controls. + \ No newline at end of file From 4e20ab3128f253a57f2ac64d9e48c9c7e5300fd4 Mon Sep 17 00:00:00 2001 From: bakedpotatolord Date: Mon, 22 Sep 2025 21:20:38 -0600 Subject: [PATCH 009/151] apply format --- docs/kiri-moto/CAM/interface.mdx | 19 ++++++++-------- docs/kiri-moto/interface.mdx | 37 +++++++++++++++++--------------- docs/src/components/carousel.js | 5 ++--- docs/src/custom.css | 13 ++++++----- 4 files changed, 38 insertions(+), 36 deletions(-) diff --git a/docs/kiri-moto/CAM/interface.mdx b/docs/kiri-moto/CAM/interface.mdx index 4f7a988c..c83cb992 100644 --- a/docs/kiri-moto/CAM/interface.mdx +++ b/docs/kiri-moto/CAM/interface.mdx @@ -12,17 +12,18 @@ With that in mind, here are the key differences: ## Operation List - The Operation List defines the order in which operations are - performed on the model. Selecting the **plus** button will open a - popup menu for choosing an operation to add. The operations are - draggable, enabling easy re-ordering. - - An operation can be disabled by **Ctrl+clicking** it. Disabled operations will be skipped in the slice/preview/export process. - - The thin blue bar in the Operation List is also draggable. Moving the bar automatically disables all operations below it. This allows you to slice, preview, and export up to a specific point in the timeline. +The Operation List defines the order in which operations are +performed on the model. Selecting the **plus** button will open a +popup menu for choosing an operation to add. The operations are +draggable, enabling easy re-ordering. - +- An operation can be disabled by **Ctrl+clicking** it. Disabled operations will be skipped in the slice/preview/export process. +- The thin blue bar in the Operation List is also draggable. Moving the bar automatically disables all operations below it. This allows you to slice, preview, and export up to a specific point in the timeline. + + ## Origin Selection - Origin Selection (introduced in v4.3) enables automatically setting an origin to points of interest on the model, including corners and arc centers. +Origin Selection (introduced in v4.3) enables automatically setting an origin to points of interest on the model, including corners and arc centers. - ![](/img/CAM/interface/originSelect.png) +![](/img/CAM/interface/originSelect.png) diff --git a/docs/kiri-moto/interface.mdx b/docs/kiri-moto/interface.mdx index 02220607..8bdf1bf7 100644 --- a/docs/kiri-moto/interface.mdx +++ b/docs/kiri-moto/interface.mdx @@ -16,36 +16,39 @@ For the CAM interface, click [here](/kiri-moto/cam). ## Top Menu -- **Left:** Buttons to move through the `Arrange → Slice → Preview → Export` workflow. These steps are also available as [keyboard shortcuts](/kiri-moto/controls). Selecting an option here will automatically run prior steps as needed. -- **Center:** Clicking the [logo](/kiri-moto) opens a dialog with version selection, helpful links, and your current Kiri:Moto version. If you are unsure which version to use, check the [release notes](https://github.com/GridSpace/grid-apps/releases/) on GitHub. -- **Right:** Options for importing/exporting the workspace, manipulating the view, changing modes, and setting preferences. Kiri:Moto currently supports CAM, FDM, SLA, and LASER modes. Some other modes are extensions of the LASER workflow, but do not have first-class support. The [preferences menu](#preferences) will be covered later in this section. - - Changing the mode updates the left menu and enables/disables mode-specific options such as the `CAM Operation` menu and the `CAM Animate` step. - - Learn about K:M file types [here](/kiri-moto/faq#what-are-the-kmz-and-km-file-formats-short-for). +- **Left:** Buttons to move through the `Arrange → Slice → Preview → Export` workflow. These steps are also available as [keyboard shortcuts](/kiri-moto/controls). Selecting an option here will automatically run prior steps as needed. +- **Center:** Clicking the [logo](/kiri-moto) opens a dialog with version selection, helpful links, and your current Kiri:Moto version. If you are unsure which version to use, check the [release notes](https://github.com/GridSpace/grid-apps/releases/) on GitHub. +- **Right:** Options for importing/exporting the workspace, manipulating the view, changing modes, and setting preferences. Kiri:Moto currently supports CAM, FDM, SLA, and LASER modes. Some other modes are extensions of the LASER workflow, but do not have first-class support. The [preferences menu](#preferences) will be covered later in this section. + - Changing the mode updates the left menu and enables/disables mode-specific options such as the `CAM Operation` menu and the `CAM Animate` step. + - Learn about K:M file types [here](/kiri-moto/faq#what-are-the-kmz-and-km-file-formats-short-for). ## Left Menu -The left menu contains options for the current mode. These vary widely: -- CAM has ample documentation on [Process Options](/kiri-moto/cam/processOpts). -- Other modes are less documented but many options are self-explanatory if you're familiar with the manufacturing process. -- Hovering over an option provides tooltips. When in doubt, a quick search usually explains the option in detail. +The left menu contains options for the current mode. These vary widely: + +- CAM has ample documentation on [Process Options](/kiri-moto/cam/processOpts). +- Other modes are less documented but many options are self-explanatory if you're familiar with the manufacturing process. +- Hovering over an option provides tooltips. When in doubt, a quick search usually explains the option in detail. ## Right Menu -The right menu contains controls for objects in the workspace. -- Hovering over the arrow next to an object reveals options for deleting, renaming, disabling, or replacing it. -- Disabled objects remain visible but are ignored during slicing and exporting. +The right menu contains controls for objects in the workspace. + +- Hovering over the arrow next to an object reveals options for deleting, renaming, disabling, or replacing it. +- Disabled objects remain visible but are ignored during slicing and exporting. ## Machines Dialog ![Device Dialog](/img/interface/CAMDevice.png) -The device dialog is accessed through the settings dropdown. It allows you to configure a device or select a predefined one. -- The dropdown only shows devices available for the current mode. -- Stock device settings are greyed out. To modify them, click `Customize`. -- Learn more about how K:M handles CAM devices [here](/kiri-moto/cam/devices). +The device dialog is accessed through the settings dropdown. It allows you to configure a device or select a predefined one. + +- The dropdown only shows devices available for the current mode. +- Stock device settings are greyed out. To modify them, click `Customize`. +- Learn more about how K:M handles CAM devices [here](/kiri-moto/cam/devices). ## Preferences Application preferences are also accessed through the settings dropdown. These are mode-dependent but share many common options. For example, CNC preferences include animation controls. - \ No newline at end of file + diff --git a/docs/src/components/carousel.js b/docs/src/components/carousel.js index 510dff6e..0174fc2d 100644 --- a/docs/src/components/carousel.js +++ b/docs/src/components/carousel.js @@ -58,7 +58,7 @@ const imageDescripts = { ["/1.png", "Tabs added to part"], ["/2.png", "Sliced part with tabs"], ], - camInterface:[ + camInterface: [ ["/1.png", "Empty Ops list"], ["/2.png", "Sample Ops list"], ["/3.png", "Ops list with history bar"], @@ -78,8 +78,7 @@ const imageDescripts = { */ export function ImageCarousel({ base, images, sml }) { return ( -

- +
{imageDescripts[images].map(([image, caption], index) => (
diff --git a/docs/src/custom.css b/docs/src/custom.css index a93cfa83..23ac403b 100644 --- a/docs/src/custom.css +++ b/docs/src/custom.css @@ -6,14 +6,13 @@ height: 4.5rem; } -.carouselWrapper{ - width:100%; - - display:flex; +.carouselWrapper { + width: 100%; + display: flex; justify-content: center; } -.carouselWrapper .carousel-root{ - width:fit-content; +.carouselWrapper .carousel-root { + width: fit-content; max-width: 20rem; -} \ No newline at end of file +} From ecbd007ef7ecd7b8de9679422d1c46fa97df0f1f Mon Sep 17 00:00:00 2001 From: bakedpotatolord Date: Mon, 22 Sep 2025 21:31:44 -0600 Subject: [PATCH 010/151] only build if docs are changed --- .github/workflows/build-docs.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 8f9d9b9e..7014846a 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -2,6 +2,8 @@ name: 'docs-publish' on: push: branches: [ master ] + paths: + - 'docs/**' workflow_dispatch: From d61ef54b73729228b332ea68072f0f6ca33f41d5 Mon Sep 17 00:00:00 2001 From: bakedpotatolord Date: Mon, 22 Sep 2025 21:42:55 -0600 Subject: [PATCH 011/151] do not run build tests on docs edits --- .github/workflows/build-test.yml | 2 ++ .github/workflows/prod-test.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index e9092fd2..5ec1acde 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -3,6 +3,8 @@ name: Test Electron App Production Build on: # Runs on pushes targeting the default branch push: + paths: + - '!docs/**' # Allows you to run this workflow manually from the Actions tab workflow_dispatch: diff --git a/.github/workflows/prod-test.yml b/.github/workflows/prod-test.yml index a94ec631..c4a80607 100644 --- a/.github/workflows/prod-test.yml +++ b/.github/workflows/prod-test.yml @@ -3,6 +3,8 @@ name: Test NPM Production Build on: # Runs on pushes targeting the default branch push: + paths: + - '!docs/**' # Allows you to run this workflow manually from the Actions tab workflow_dispatch: From bda7456bbf10f152c4cb601f02a0784390c6c3e1 Mon Sep 17 00:00:00 2001 From: bakedpotatolord Date: Thu, 25 Sep 2025 19:25:23 -0600 Subject: [PATCH 012/151] update docusaurus to 3.9 --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index be292bd0..32fe787e 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "node": ">=22.0.0" }, "dependencies": { - "@docusaurus/plugin-client-redirects": "^3.8.1", + "@docusaurus/plugin-client-redirects": "^3.9.0", "@fortawesome/fontawesome-free": "^6.1.1", "@gridspace/app-server": "^0.0.18", "@gridspace/basic-ftp": "^5.0.5", @@ -65,8 +65,8 @@ "ws": "^8.18.2" }, "devDependencies": { - "@docusaurus/core": "^3.7.0", - "@docusaurus/preset-classic": "^3.7.0", + "@docusaurus/core": "^3.9.0", + "@docusaurus/preset-classic": "^3.9.0", "@electron/notarize": "^3.0.0", "copy-webpack-plugin": "^12.0.2", "docusaurus-lunr-search": "^3.6.0", From 9a5987c10acafea15c532c9005b217e3ed95009a Mon Sep 17 00:00:00 2001 From: bakedpotatolord Date: Thu, 25 Sep 2025 20:19:12 -0600 Subject: [PATCH 013/151] update broken links --- docs/kiri-moto/interface.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/kiri-moto/interface.mdx b/docs/kiri-moto/interface.mdx index 8bdf1bf7..f372e032 100644 --- a/docs/kiri-moto/interface.mdx +++ b/docs/kiri-moto/interface.mdx @@ -10,7 +10,7 @@ Kiri:Moto's interface is designed for maximum access to the workspace, showing o [OBJ](https://www.cs.cmu.edu/~mbz/personal/graphics/obj.html), [STL](), and [3MF](https://docs.fileformat.com/3d/3mf/) files import natively. [SVG](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics), [JPG](https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format), and [PNG](https://en.wikipedia.org/wiki/Portable_Network_Graphics) files are auto-extruded into 3D parts. -For the CAM interface, click [here](/kiri-moto/cam). +For the CAM interface, click [here](/kiri-moto/CAM). ![A minimalist approach](/img/interface/main.png) @@ -26,7 +26,7 @@ For the CAM interface, click [here](/kiri-moto/cam). The left menu contains options for the current mode. These vary widely: -- CAM has ample documentation on [Process Options](/kiri-moto/cam/processOpts). +- CAM has ample documentation on [Process Options](/kiri-moto/CAM/processOpts). - Other modes are less documented but many options are self-explanatory if you're familiar with the manufacturing process. - Hovering over an option provides tooltips. When in doubt, a quick search usually explains the option in detail. @@ -45,7 +45,7 @@ The device dialog is accessed through the settings dropdown. It allows you to co - The dropdown only shows devices available for the current mode. - Stock device settings are greyed out. To modify them, click `Customize`. -- Learn more about how K:M handles CAM devices [here](/kiri-moto/cam/devices). +- Learn more about how K:M handles CAM devices [here](/kiri-moto/CAM/machines). ## Preferences From 1cca29349525122d7effb7b5c9815ce6d22f9bae Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 29 Sep 2025 19:11:24 -0400 Subject: [PATCH 014/151] add hole and perimeter offset compensation as expert settings --- notes.md | 2 -- src/kiri/core/api.js | 6 ++++++ src/kiri/core/conf.js | 2 ++ src/kiri/core/widget.js | 4 +++- src/kiri/mode/fdm/init-menu.js | 2 ++ src/kiri/mode/fdm/post.js | 29 +++++++++++++++++++++++------ src/kiri/mode/fdm/slice.js | 5 ++++- web/kiri/lang/en.js | 4 ++++ 8 files changed, 44 insertions(+), 10 deletions(-) diff --git a/notes.md b/notes.md index b7e7a9a1..7cf2186c 100644 --- a/notes.md +++ b/notes.md @@ -33,8 +33,6 @@ * `F` new parameter to cap output flow rate (on printer device) * `F` new parameters for bridging speed / bridge fan control -* `F` new base paremeter for hole and perimeter compensation -* `F` new parameters for inner / outer perimeter compensation * `F` convert ranges to z offsets while continuing to show layer # * `F` support pillar top/bottom should conform to part * `F` more explicit line width control with ranges and min/max adaptive diff --git a/src/kiri/core/api.js b/src/kiri/core/api.js index c66292a3..42ec035c 100644 --- a/src/kiri/core/api.js +++ b/src/kiri/core/api.js @@ -96,6 +96,7 @@ let UC = UI.prefix('kiri').inputAction(settings.conf.update), put: (key, val) => localSet(key, val), set: (key, val) => localSet(key, val), setItem: (key, val) => localSet(key, val), + removeItem: (key) => localRemove(key) }, tweak = { line_precision(v) { api.work.config({ base: { clipperClean: v } }) }, @@ -119,6 +120,11 @@ function localSet(key, val) { return val; } +function localRemove(key) { + let sloc = api.conf.get().local; + return delete sloc[key]; +} + export const api = { ajax, beta, diff --git a/src/kiri/core/conf.js b/src/kiri/core/conf.js index 4daf5556..71908b54 100644 --- a/src/kiri/core/conf.js +++ b/src/kiri/core/conf.js @@ -267,6 +267,8 @@ export const conf = { sliceLayerStartX: 0, sliceLayerStartY: 0, sliceLineWidth: 0, + sliceCompInner: 0, + sliceCompOuter: 0, sliceFillGrow: 0, sliceFillAngle: 45, sliceFillWidth: 1, diff --git a/src/kiri/core/widget.js b/src/kiri/core/widget.js index 783598ca..47222eb7 100644 --- a/src/kiri/core/widget.js +++ b/src/kiri/core/widget.js @@ -782,9 +782,11 @@ class Widget { } if (set) { let dark = this.api.space.is_dark(); + let cam = this.api.mode.is_cam(); + let color = dark && !cam ? 0xffffff : 0; let angle = this.api.conf.get().controller.edgeangle || 20; let edges = new THREE.EdgesGeometry(mesh.geometry, angle); - let material = new THREE.LineBasicMaterial({ color: 0 }); + let material = new THREE.LineBasicMaterial({ color }); this.outline = new THREE.LineSegments(edges, material); this.outline.renderOrder = -20; mesh.add(this.outline); diff --git a/src/kiri/mode/fdm/init-menu.js b/src/kiri/mode/fdm/init-menu.js index fc0506c1..07571f0b 100644 --- a/src/kiri/mode/fdm/init-menu.js +++ b/src/kiri/mode/fdm/init-menu.js @@ -181,6 +181,8 @@ export function menu() { outputScarfLength: newInput(LANG.ad_scar_s, {title:LANG.ad_scar_l, convert:toFloat, bound:bound(0,1000)}), outputShortPoly: newInput(LANG.ad_spol_s, {title:LANG.ad_spol_l, convert:toFloat, bound:bound(0,10000)}), outputCoastDist: newInput(LANG.ad_scst_s, {title:LANG.ad_scst_l, convert:toFloat, bound:bound(0.0,10)}), + sliceCompInner: newInput(LANG.sl_ofin_s, {title:LANG.sl_ofin_l, convert:toFloat, bound:bound(-10.0,10.0)}), + sliceCompOuter: newInput(LANG.sl_ofot_s, {title:LANG.sl_ofot_l, convert:toFloat, bound:bound(-10.0,10.0)}), zHopDistance: newInput(LANG.ad_zhop_s, {title:LANG.ad_zhop_l, convert:toFloat, bound:bound(0,3.0)}), outputLoops: newInput(LANG.ag_loop_s, {title:LANG.ag_loop_l, convert:toInt, bound:bound(-1,1000), show:isBelt}), diff --git a/src/kiri/mode/fdm/post.js b/src/kiri/mode/fdm/post.js index 25cd368e..b910958a 100644 --- a/src/kiri/mode/fdm/post.js +++ b/src/kiri/mode/fdm/post.js @@ -17,12 +17,13 @@ slicer.slicePost.FDM = slicePost; * data object. return is ignored. */ export function slicePost(data, options) { - const { z, lines, groups } = data; - const { useAssembly, post_args, zIndexes } = options; - const { process, isSynth, vaseMode } = post_args; - const { shellOffset, fillOffset, clipOffset } = post_args; + const { groups, z } = data; + const { post_args, useAssembly, zIndexes } = options; + const { isSynth, process, vaseMode } = post_args; + const { compInner, compOuter, pump } = post_args; + const { clipOffset, fillOffset, shellOffset } = post_args; - if (options.pump) { + if (pump) { let nugroups = []; let pump = shellOffset / 10; for (let p of groups) { @@ -41,6 +42,19 @@ export function slicePost(data, options) { data.tops = POLY.nest(groups); } + // perimeter and inner hole compensation offsets + if (compInner || compOuter) { + let inner = POLY.inner(data.tops).flat(); + let outer = POLY.outer(data.tops); + if (compInner) { + inner = POLY.flatten(POLY.offset(inner, compInner/2)); + } + if (compOuter) { + outer = POLY.flatten(POLY.offset(outer, -compOuter/2)); + } + data.tops = POLY.nest([...inner, ...outer]); + } + if (isSynth) { const process = post_args.process; if (process.sliceSupportGrow > 0) { @@ -54,6 +68,7 @@ export function slicePost(data, options) { delete data.groups; return; } + const index = zIndexes.indexOf(z); const range = getRangeParameters(process, index); // calculate fractional shells @@ -129,7 +144,7 @@ function offset_default(params) { } const deltaBig = 160; - const deltSmall = 20; + const deltaSmall = 20; // look for close points on adjacent segmented polys and merge let test_polys = first !== last ? [ ...first, ...last ] : last; @@ -139,6 +154,8 @@ function offset_default(params) { for (let poly of test_flats) poly.forEachSegment((p0, p1) => { p0.angle = new Slope(p0, p1); + // todo calc vertex angle + // exclude segment vertex from merge when angle < deltaSmall }); // segment each poly to be tested diff --git a/src/kiri/mode/fdm/slice.js b/src/kiri/mode/fdm/slice.js index bc91bb0e..9bda3df8 100644 --- a/src/kiri/mode/fdm/slice.js +++ b/src/kiri/mode/fdm/slice.js @@ -140,7 +140,8 @@ export function fdm_slice(settings, widget, onupdate, ondone) { fillOffset = lineWidth * fillOffsetMult, clipOffset = process.sliceSupportOffset, sliceFillAngle = process.sliceFillAngle, - supportDensity = process.sliceSupportDensity; + supportDensity = process.sliceSupportDensity, + { sliceCompInner, sliceCompOuter } = process; // override globals used by vopt() isFlat = controller.lineType === "flat"; @@ -230,6 +231,8 @@ export function fdm_slice(settings, widget, onupdate, ondone) { useAssembly, post: 'FDM', post_args: { + compInner: sliceCompInner, + compOuter: sliceCompOuter, shellOffset, fillOffset, clipOffset, diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index 451bcadb..39eb200d 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -362,6 +362,10 @@ self.lang['en-us'] = { sl_ordr_l: ["output shell order","inside to outside","or outside to inside","affects surface quality"], sl_strt_s: "start point", sl_strt_l: ["layer starting point","last = where last layer ended","center = part center","origin = device origin","random = yolo"], + sl_ofin_s: "shell inner offset", + sl_ofin_l: ["inner hole perimeter offset","in millimeters"], + sl_ofot_s: "shell outer offset", + sl_ofot_l: ["outer wall perimeter offset","in millimeters"], // FDM SOLID fs_menu: "solid fill", From 70f02f4c8253e4142480a0723772b910a0f7a86c Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 29 Sep 2025 21:19:57 -0400 Subject: [PATCH 015/151] bump rev 4.3.2 --- package.json | 2 +- src/moto/license.js | 2 +- web/kiri/manifest.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 82e76bb8..d8d10734 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grid-apps", - "version": "4.3.1", + "version": "4.3.2", "description": "grid.space 3d slicing & modeling tools", "author": "Stewart Allen ", "license": "MIT", diff --git a/src/moto/license.js b/src/moto/license.js index 21ca7569..62c0e58c 100644 --- a/src/moto/license.js +++ b/src/moto/license.js @@ -3,7 +3,7 @@ const terms = { COPYRIGHT: "Copyright (C) Stewart Allen - All Rights Reserved", LICENSE: "See the license.md file included with the source distribution", - VERSION: "4.3.1" + VERSION: "4.3.2" }; export const beta = 0; diff --git a/web/kiri/manifest.json b/web/kiri/manifest.json index 051f5f4c..80b2d2f8 100644 --- a/web/kiri/manifest.json +++ b/web/kiri/manifest.json @@ -1,5 +1,5 @@ { - "name": "Kiri:Moto 4.3.1", + "name": "Kiri:Moto 4.3.2", "short_name": "Kiri:Moto", "description": "Slicer for 3D printers, CNC mills, laser cutters and more", "start_url": "/kiri/", From 295dcd12ece3a307095ebbbcf7c4d0753f7d05e7 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 30 Sep 2025 07:37:39 -0400 Subject: [PATCH 016/151] sort fdm, cam, control property names for easier navigation --- src/kiri/core/conf.js | 574 +++++++++++++++++++++--------------------- 1 file changed, 287 insertions(+), 287 deletions(-) diff --git a/src/kiri/core/conf.js b/src/kiri/core/conf.js index 71908b54..7ea214ac 100644 --- a/src/kiri/core/conf.js +++ b/src/kiri/core/conf.js @@ -182,33 +182,33 @@ function normalize(settings) { // auto field renaming on import const renamed = { - roughingTool: "camRoughTool", - roughingSpindle: "camRoughSpindle", - roughingDown: "camRoughDown", - roughingOver: "camRoughOver", - roughingSpeed: "camRoughSpeed", - roughingPlunge: "camRoughPlunge", - roughingStock: "camRoughStock", - roughingPocket: "camRoughVoid", - roughingOn: "camRoughOn", - finishingTool: "camOutlineTool", - finishingSpindle: "camOutlineSpindle", + camWideCutout: "camOutlineWide", + drillDown: "camDrillDown", + drillDownSpeed: "camDrillDownSpeed", + drillDwell: "camDrillDwell", + drillingOn: "camDrillingOn", + drillLift: "camDrillLift", + drillSpindle: "camDrillSpindle", + drillTool: "camDrillTool", finishingDown: "camOutlineDown", - finishingOver: "camContourOver", - finishingSpeed: "camOutlineSpeed", - finishingPlunge: "camOutlinePlunge", finishingOn: "camOutlineOn", + finishingOver: "camContourOver", + finishingPlunge: "camOutlinePlunge", + finishingSpeed: "camOutlineSpeed", + finishingSpindle: "camOutlineSpindle", + finishingTool: "camOutlineTool", finishingXOn: "camContourXOn", finishingYOn: "camContourYOn", - drillTool: "camDrillTool", - drillSpindle: "camDrillSpindle", - drillDownSpeed: "camDrillDownSpeed", - drillDown: "camDrillDown", - drillDwell: "camDrillDwell", - drillLift: "camDrillLift", - drillingOn: "camDrillingOn", - camWideCutout: "camOutlineWide", - outputClockwise: "camConventional" + outputClockwise: "camConventional", + roughingDown: "camRoughDown", + roughingOn: "camRoughOn", + roughingOver: "camRoughOver", + roughingPlunge: "camRoughPlunge", + roughingPocket: "camRoughVoid", + roughingSpeed: "camRoughSpeed", + roughingSpindle: "camRoughSpindle", + roughingStock: "camRoughStock", + roughingTool: "camRoughTool", }; export const conf = { @@ -258,97 +258,97 @@ export const conf = { }, // process defaults FDM:Process p:{ + antiBacklash: 0, + arcTolerance: 0, + firstLayerBedTemp: 0, + firstLayerBeltBump: 0, + firstLayerBeltLead: 3, + firstLayerBrim: 0, + firstLayerBrimGap: 0, + firstLayerBrimIn: 0, + firstLayerBrimTrig: 0, + firstLayerFanSpeed: 0, + firstLayerFillRate: 35, + firstLayerFlatten: 0, + firstLayerLineMult: 1.0, + firstLayerNozzleTemp: 0, + firstLayerPrintMult: 1.0, + firstLayerRate: 30, + firstLayerYOffset: 0, + firstSliceHeight: 0.25, + outputAlternating: false, + outputAvoidGaps: true, + outputBedTemp: 60, + outputBeltFirst: false, + outputBrimCount: 2, + outputBrimOffset: 2, + outputCoastDist: 0, + outputDraftShield: false, + outputFanLayer: 1, + outputFanSpeed: 255, + outputFeedrate: 50, + outputFillMult: 1.25, + outputFinishrate: 50, + outputInvertX: false, + outputInvertY: false, + outputLayerRetract: false, + outputLoops: 0, + outputMinLayerTime: 10, + outputMinSpeed: 10.0, + outputPurgeTower: 0, + outputRaft: false, + outputRaftSpacing: 0.2, + outputRetractDist: 1.5, + outputRetractDwell: 20, + outputRetractSpeed: 40, + outputRetractWipe: 0, + outputScarfLength: 5, + outputSeekrate: 80, + outputShellMult: 1.25, + outputShortPoly: 0.0, + outputSparseMult: 1.25, + outputTemp: 200, processName: "default", + ranges: [], + sliceAdaptive: false, sliceAngle: 45, + sliceBottomLayers: 3, + sliceCompInner: 0, + sliceCompOuter: 0, + sliceDetectThin: "basic", + sliceFillAngle: 45, + sliceFillGrow: 0, + sliceFillOverlap: 0.35, + sliceFillRate: 0, + sliceFillRepeat: 1, + sliceFillSparse: 0.25, + sliceFillType: "hex", + sliceFillWidth: 1, sliceHeight: 0.25, - sliceShells: 3, - sliceShellOrder: "in-out", sliceLayerStart: "last", sliceLayerStartX: 0, sliceLayerStartY: 0, sliceLineWidth: 0, - sliceCompInner: 0, - sliceCompOuter: 0, - sliceFillGrow: 0, - sliceFillAngle: 45, - sliceFillWidth: 1, - sliceFillOverlap: 0.35, - sliceFillSparse: 0.25, - sliceFillRepeat: 1, - sliceFillRate: 0, - sliceSolidRate: 0, - sliceFillType: "hex", - sliceSupportDensity: 0.1, - sliceSupportOffset: 1.0, - sliceSupportGap: 1, - sliceSupportSize: 5, - sliceSupportArea: 0.1, - sliceSupportSpan: 5, - sliceSupportGrow: 0, - sliceSupportExtra: 0, - sliceSupportAngle: 50, - sliceSupportNozzle: 0, - sliceSupportEnable: false, - sliceSupportOutline: true, - sliceZInterleave: false, - sliceSolidMinArea: 1, - sliceBottomLayers: 3, - sliceTopLayers: 3, - firstSliceHeight: 0.25, - firstLayerRate: 30, - firstLayerFillRate: 35, - firstLayerPrintMult: 1.0, - firstLayerLineMult: 1.0, - firstLayerYOffset: 0, - firstLayerNozzleTemp: 0, - firstLayerBedTemp: 0, - firstLayerBrim: 0, - firstLayerBrimIn: 0, - firstLayerBrimTrig: 0, - firstLayerBrimGap: 0, - firstLayerBeltLead: 3, - firstLayerBeltBump: 0, - firstLayerFanSpeed: 0, - firstLayerFlatten: 0, - outputRaft: false, - outputRaftSpacing: 0.2, - outputDraftShield: false, - outputTemp: 200, - outputBedTemp: 60, - outputFeedrate: 50, - outputFinishrate: 50, - outputSeekrate: 80, - outputShellMult: 1.25, - outputFillMult: 1.25, - outputSparseMult: 1.25, - outputFanLayer: 1, - outputFanSpeed: 255, - outputRetractDist: 1.5, - outputRetractSpeed: 40, - outputRetractWipe: 0, - outputRetractDwell: 20, - outputBrimCount: 2, - outputBrimOffset: 2, - outputScarfLength: 0, - outputShortPoly: 100.0, - outputMinSpeed: 10.0, - outputMinLayerTime: 0, - outputCoastDist: 0, - outputPurgeTower: 0, - outputBeltFirst: false, - outputAvoidGaps: true, - outputAlternating: false, - outputLayerRetract: false, - outputLoops: 0, - outputInvertX: false, - outputInvertY: false, - sliceDetectThin: "off", sliceMinHeight: 0, - sliceAdaptive: false, + sliceShellOrder: "in-out", + sliceShells: 3, + sliceSolidMinArea: 1, + sliceSolidRate: 0, + sliceSupportAngle: 50, + sliceSupportArea: 0.1, + sliceSupportDensity: 0.1, + sliceSupportEnable: false, + sliceSupportExtra: 0, + sliceSupportGap: 1, + sliceSupportGrow: 0, + sliceSupportNozzle: 0, + sliceSupportOffset: 1.0, + sliceSupportOutline: true, + sliceSupportSize: 5, + sliceSupportSpan: 5, + sliceTopLayers: 3, + sliceZInterleave: false, zHopDistance: 0.2, - arcTolerance: 0, - antiBacklash: 0, - ranges: [] } }, sla:{ @@ -422,186 +422,186 @@ export const conf = { }, // process defaults CAM:Process p:{ - processName: "default", - camLevelTool: 1000, - camLevelSpindle: 1000, - camLevelOver: 0.75, - camLevelStepZ: 0, - camLevelSpeed: 1000, - camLevelDown: 0, - camLevelInset: 0.5, - camLevelStock: true, - camRoughTool: 1000, - camRoughSpindle: 1000, - camRoughDown: 2, - camRoughOver: 0.4, - camRoughSpeed: 1000, - camRoughPlunge: 250, - camRoughStock: 0, - camRoughStockZ: 0, - camRoughAll: true, - camRoughVoid: false, - camRoughFlat: true, - camRoughTop: true, - camRoughIn: true, - camRoughOn: true, - camRoughOmitThru: false, - camRoughOmitVoid: false, - camOutlineTool: 1000, - camOutlineSpindle: 1000, - camOutlineTop: true, - camOutlineDown: 3, - camOutlineOver: 0.4, - camOutlineOverCount: 1, - camOutlineSpeed: 800, - camOutlinePlunge: 250, - camOutlineWide: false, - camOutlineDogbone: false, - camOutlineOmitThru: false, - camOutlineOmitVoid: false, - camOutlineOut: true, - camOutlineIn: false, - camOutlineOn: true, - camContourTool: 1000, - camContourSpindle: 1000, - camContourOver: 0.5, - camContourSpeed: 1000, + camArcEnabled: false, + camArcResolution: 5, + camArcTolerance: 0.15, camContourAngle: 85, - camContourLeave: 0, - camContourReduce: 2, camContourBottom: false, + camContourBridge: 0, camContourCurves: false, camContourIn: false, + camContourLeave: 0, + camContourOver: 0.5, + camContourReduce: 2, + camContourSpeed: 1000, + camContourSpindle: 1000, + camContourTool: 1000, camContourXOn: true, camContourYOn: true, - camLatheTool: 1000, - camLatheSpindle: 1000, - camLatheOver: 0.1, - camLatheAngle: 1, - camLatheSpeed: 500, - camLatheLinear: true, - camTolerance: 0, - camTraceTool: 1000, - camTraceSpindle: 1000, - camTraceType: "follow", - camTraceOver: 0.5, - camTraceDown: 0, - camTraceThru: 0, - camTraceSpeed: 250, - camTracePlunge: 200, - camTraceOffOver: 0, - camTraceDogbone: false, - camTraceMerge: false, - camTraceLines: false, - camTraceZTop: 0, - camTraceZBottom: 0, - camPocketSpindle: 1000, - camPocketTool: 1000, - camPocketOver: 0.25, - camPocketDown: 1, - camPocketSpeed: 250, - camPocketPlunge: 200, - camPocketExpand: 0, - camPocketSmooth: 0, - camPocketRefine: 20, - camPocketFollow: 5, - camPocketContour: false, - camPocketEngrave: false, - camPocketOutline: false, - camPocketZTop: 0, - camPocketZBottom: 0, - camDrillTool: 1006, - camDrillSpindle: 1000, - camDrillDownSpeed: 250, + camConventional: false, // outputClockwise + camDepthFirst: false, camDrillDown: 5, + camDrillDownSpeed: 250, camDrillDwell: 250, + camDrillFromStockTop: false, + camDrillingOn: false, camDrillLift: 2, camDrillMark: false, - camDrillFromStockTop: false, - camDrillThru: 5, camDrillPrecision: 1, - camDrillingOn: false, - camRegisterSpeed: 1000, - camRegisterThru: 5, - camRegisterOffset: 10, - camHelicalTool: 1000, - camHelicalSpindle: 1000, - camHelicalDownSpeed: 250, - camHelicalSpeed: 1000, - camHelicalDown: 5, - camHelicalBottomFinish: true, - camHelicalThru: 0, - camHelicalOffset: "auto", - camHelicalForceStartAngle: false, - camHelicalStartAngle: 0, - camHelicalOffsetOverride: 0, - camHelicalEntry: false, - camHelicalEntryOffset:0, - camHelicalReverse: false, - camHelicalClockwise: true, - camFlipAxis: "X", - camFlipOther: "", - camLaserEnable: ["M321"], - camLaserDisable: ["M322"], - camLaserOn: ["M3"], - camLaserOff: ["M5"], - camLaserSpeed: 100, - camLaserPower: 1, - camLaserAdaptive: false, - camLaserAdaptMod: false, - camLaserFlatten: false, - camLaserFlatZ: 0, - camLaserPowerMin: 0, - camLaserPowerMax: 1, - camLaserZMin: 0, - camLaserZMax: 0, - camTabsWidth: 5, - camTabsHeight: 5, - camTabsDepth: 5, - camTabsMidline: false, - camDepthFirst: false, - camInnerFirst: false, - camEaseDown: false, + camDrillSpindle: 1000, + camDrillThru: 5, + camDrillTool: 1006, camEaseAngle: 10, - camOriginTop: true, - camZAnchor: "middle", - camZOffset: 0, - camZTop: 0, - camZBottom: 0, - camZClearance: 1, - camZThru: 0, + camEaseDown: false, + camExpertFast: false, camFastFeed: 6000, camFastFeedZ: 300, - camTolerance: 0, + camFirstZMax: false, camFlatness: 0.001, - camContourBridge: 0, - camStockX: 5, - camStockY: 5, - camStockZ: 5, - camStockOffset: true, - camStockClipTo: false, - camStockIndexed: false, - camStockIndexGrid: true, - camIndexAxis: 0, + camFlipAxis: "X", + camFlipOther: "", + camForceZMax: false, + camFullEngage: 0.8, + camHelicalBottomFinish: true, + camHelicalClockwise: true, + camHelicalDown: 5, + camHelicalDownSpeed: 250, + camHelicalEntry: false, + camHelicalEntryOffset:0, + camHelicalForceStartAngle: false, + camHelicalOffset: "auto", + camHelicalOffsetOverride: 0, + camHelicalReverse: false, + camHelicalSpeed: 1000, + camHelicalSpindle: 1000, + camHelicalStartAngle: 0, + camHelicalThru: 0, + camHelicalTool: 1000, camIndexAbs: true, - camConventional: false, // outputClockwise + camIndexAxis: 0, + camInnerFirst: false, + camLaserAdaptive: false, + camLaserAdaptMod: false, + camLaserDisable: ["M322"], + camLaserEnable: ["M321"], + camLaserFlatten: false, + camLaserFlatZ: 0, + camLaserOff: ["M5"], + camLaserOn: ["M3"], + camLaserPower: 1, + camLaserPowerMax: 1, + camLaserPowerMin: 0, + camLaserSpeed: 100, + camLaserZMax: 0, + camLaserZMin: 0, + camLatheAngle: 1, + camLatheLinear: true, + camLatheOver: 0.1, + camLatheSpeed: 500, + camLatheSpindle: 1000, + camLatheTool: 1000, + camLevelDown: 0, + camLevelInset: 0.5, + camLevelOver: 0.75, + camLevelSpeed: 1000, + camLevelSpindle: 1000, + camLevelStepZ: 0, + camLevelStock: true, + camLevelTool: 1000, camOriginCenter: false, camOriginOffX: 0, camOriginOffY: 0, camOriginOffZ: 0, + camOriginTop: true, + camOutlineDogbone: false, + camOutlineDown: 3, + camOutlineIn: false, + camOutlineOmitThru: false, + camOutlineOmitVoid: false, + camOutlineOn: true, + camOutlineOut: true, + camOutlineOver: 0.4, + camOutlineOverCount: 1, + camOutlinePlunge: 250, + camOutlineSpeed: 800, + camOutlineSpindle: 1000, + camOutlineTool: 1000, + camOutlineTop: true, + camOutlineWide: false, + camPocketContour: false, + camPocketDown: 1, + camPocketEngrave: false, + camPocketExpand: 0, + camPocketFollow: 5, + camPocketOutline: false, + camPocketOver: 0.25, + camPocketPlunge: 200, + camPocketRefine: 20, + camPocketSmooth: 0, + camPocketSpeed: 250, + camPocketSpindle: 1000, + camPocketTool: 1000, + camPocketZBottom: 0, + camPocketZTop: 0, + camRegisterOffset: 10, + camRegisterSpeed: 1000, + camRegisterThru: 5, + camRoughAll: true, + camRoughDown: 2, + camRoughFlat: true, + camRoughIn: true, + camRoughOmitThru: false, + camRoughOmitVoid: false, + camRoughOn: true, + camRoughOver: 0.4, + camRoughPlunge: 250, + camRoughSpeed: 1000, + camRoughSpindle: 1000, + camRoughStock: 0, + camRoughStockZ: 0, + camRoughTool: 1000, + camRoughTop: true, + camRoughVoid: false, + camStockClipTo: false, + camStockIndexed: false, + camStockIndexGrid: true, + camStockOffset: true, + camStockX: 5, + camStockY: 5, + camStockZ: 5, + camTabsDepth: 5, + camTabsHeight: 5, + camTabsMidline: false, + camTabsWidth: 5, + camTolerance: 0, + camTolerance: 0, + camToolInit: true, + camTraceDogbone: false, + camTraceDown: 0, + camTraceLines: false, + camTraceMerge: false, + camTraceOffOver: 0, + camTraceOver: 0.5, + camTracePlunge: 200, + camTraceSpeed: 250, + camTraceSpindle: 1000, + camTraceThru: 0, + camTraceTool: 1000, + camTraceType: "follow", + camTraceZBottom: 0, + camTraceZTop: 0, + camTrueShadow: false, + camZAnchor: "middle", + camZBottom: 0, + camZClearance: 1, + camZOffset: 0, + camZThru: 0, + camZTop: 0, + op2: [], // flip ops + ops: [], // current ops outputInvertX: false, outputInvertY: false, - camExpertFast: false, - camTrueShadow: false, - camArcEnabled: false, - camArcTolerance: 0.15, - camArcResolution: 5, - camForceZMax: false, - camFirstZMax: false, - camToolInit: true, - camFullEngage: 0.8, - ops: [], // current ops - op2: [] // flip ops + processName: "default", } }, laser: { @@ -917,37 +917,37 @@ export const conf = { devproc: {}, // application ui and control preferences (Q menu) controller:{ - view: null, - dark: false, - shiny: false, - drawer: false, - scrolls: true, - zoomSpeed: 1.0, - lineType: "path", - autoSave: true, + animesh: "800", antiAlias: true, + assembly: false, + autoLayout: true, + autoSave: true, + dark: false, + detail: "50", + devel: false, + drawer: false, + edgeangle: 20, + exportGhost: false, + exportLocal: false, + exportOcto: false, + exportPreview: false, + exportThumb: false, + freeLayout: true, + healMesh: false, + lineType: "path", + ortho: false, reverseZoom: true, + scrolls: true, + shiny: true, showOrigin: false, showRulers: true, showSpeeds: true, - freeLayout: true, - autoLayout: true, - spaceRandoX: false, spaceLayout: 1, - edgeangle: 20, - units: "mm", - exportOcto: false, - exportGhost: false, - exportLocal: false, - exportThumb: false, - exportPreview: false, - detail: "50", - animesh: "800", - healMesh: false, + spaceRandoX: false, threaded: true, - assembly: false, - ortho: false, - devel: false + units: "mm", + view: null, + zoomSpeed: 1.0, }, // default hidden ui groups hidden: { From 07bbe547e32acc1aed2f6d7ab45ab5e4c671e4a0 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 30 Sep 2025 16:30:53 -0400 Subject: [PATCH 017/151] fix legacy png lib to work with esm build --- notes.md | 1 + src/ext/pngjs.esm.js | 2 +- src/ext/pngjs.js | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/notes.md b/notes.md index 7cf2186c..56c74577 100644 --- a/notes.md +++ b/notes.md @@ -15,6 +15,7 @@ * `P` move all persisted / workspace settings/data to IndexedDB (LS limitations) * `P` faster ray intersect https://github.com/gkjohnson/three-mesh-bvh/ * `P` try material clipping planes for slice range selection +* `P` switch png lib to https://github.com/photopea/UPNG.js * `F` edit in Mesh:Tool * `F` custom device vars for profiles / ranges / gcode diff --git a/src/ext/pngjs.esm.js b/src/ext/pngjs.esm.js index 1da89a23..fd8cbbb7 100644 --- a/src/ext/pngjs.esm.js +++ b/src/ext/pngjs.esm.js @@ -4,4 +4,4 @@ import './pngjs.js'; // Re-export the PNG object -export const PNG = self.png ? self.png.PNG : null; \ No newline at end of file +export const PNG = globalThis.png ? globalThis.png.PNG : null; \ No newline at end of file diff --git a/src/ext/pngjs.js b/src/ext/pngjs.js index 561ca443..da7ca622 100644 --- a/src/ext/pngjs.js +++ b/src/ext/pngjs.js @@ -1,4 +1,4 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.png = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i Date: Tue, 30 Sep 2025 16:44:16 -0400 Subject: [PATCH 018/151] add npm i to mods at setup --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index d8d10734..c344e3d8 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,8 @@ "webpack-cli": "^5.1.4" }, "scripts": { - "setup": "npm i && npm run clean && npm run dev -- --dryrun && npm run webpack-ext", + "setup": "npm run setup-mods && npm i && npm run clean && npm run dev -- --dryrun && npm run webpack-ext", + "setup-mods": "cd mods && npm i", "build": "npm run prebuild && electron-builder", "build-nopublish": "npm run prebuild && electron-builder --publish never", "build-debug": "npm run prebuild && DEBUG=electron-builder electron-builder", From 53a65777f8a6abef881728abddb6e10c8a8c05e9 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 2 Oct 2025 10:15:14 -0400 Subject: [PATCH 019/151] update min layer time to respect min output speed --- src/kiri/core/conf.js | 2 +- src/kiri/core/print.js | 1 + src/kiri/mode/fdm/prepare.js | 26 ++++++++++++++------------ 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/kiri/core/conf.js b/src/kiri/core/conf.js index 7ea214ac..69303af1 100644 --- a/src/kiri/core/conf.js +++ b/src/kiri/core/conf.js @@ -294,7 +294,7 @@ export const conf = { outputLayerRetract: false, outputLoops: 0, outputMinLayerTime: 10, - outputMinSpeed: 10.0, + outputMinSpeed: 5.0, outputPurgeTower: 0, outputRaft: false, outputRaftSpacing: 0.2, diff --git a/src/kiri/core/print.js b/src/kiri/core/print.js index 86736811..5f3ee901 100644 --- a/src/kiri/core/print.js +++ b/src/kiri/core/print.js @@ -129,6 +129,7 @@ class Print { close = !options.open, scarf = !poly.open ? (options.scarf ?? 0) : false, tool = options.tool, + zmax = options.zmax, last = startPoint, first = true; diff --git a/src/kiri/mode/fdm/prepare.js b/src/kiri/mode/fdm/prepare.js index 8d560b43..c1453b77 100644 --- a/src/kiri/mode/fdm/prepare.js +++ b/src/kiri/mode/fdm/prepare.js @@ -46,8 +46,6 @@ export async function fdm_prepare(widgets, settings, update) { output = [], layerout = []; - let lastLayerStart = null; - // compute bounds if missing if (!bounds) { bounds = new THREE.Box3(); @@ -553,12 +551,9 @@ export async function fdm_prepare(widgets, settings, update) { offset, layerout, { - routeAround: process.outputAvoidGaps, - seedPoint: printPoint.sub(offset), - params, // range parameters first: slice.index === 0, - support: slice.widget.support, onBelt: beltStart, + params, // range parameters pretract: (wipeDist) => { if (!(lastLayer && lastLayer.length)) { return; @@ -573,7 +568,11 @@ export async function fdm_prepare(widgets, settings, update) { print.addOutput(lastLayer, endpoint, null, null, lastOut.tool); } } - } + }, + routeAround: process.outputAvoidGaps, + seedPoint: printPoint.sub(offset), + support: slice.widget.support, + zmax, } ); layerout.print_time = printPoint.layer_time; @@ -823,8 +822,10 @@ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) { fillSpeed = opt.speed || opt.fillSpeed || (firstLayer ? firstFillSpeed || firstShellSpeed : process.outputFeedrate), infillSpeed = process.sliceFillRate || opt.infillSpeed || fillSpeed || printSpeed, moveSpeed = process.outputSeekrate, + minSpeed = process.outputMinSpeed, origin = startPoint.add(offset), zhop = process.zHopDistance || 0, + zmax = opt.zmax, antiBacklash = process.antiBacklash, wipeDist = process.outputRetractWipe || 0, isBelt = device.bedBelt, @@ -1100,9 +1101,6 @@ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) { coast: firstLayer ? 0 : coastDist, extrude: numOrDefault(opt.extrude, shellMult), nozzleSize, - rate: finishShell ? finishSpeed : printSpeed, - scarf, - tool: extruder, onfirst: (firstPoint, preout) => { let from = seedPoint || startPoint; if (from.distTo2D(firstPoint) > retractDist) { @@ -1111,7 +1109,11 @@ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) { } } seedPoint = null; - } + }, + rate: finishShell ? finishSpeed : printSpeed, + scarf, + tool: extruder, + zmax }); lastPoly = slice.lastPoly = poly; } @@ -1600,7 +1602,7 @@ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) { if (minLayerTime && tt < minLayerTime) { let fact = tt / minLayerTime; for (let p of preout) { - if (p.emit) p.speed *= fact; + if (p.emit) p.speed = Math.max(p.speed * fact, minSpeed); } } From a697950a369ebcc9da7c0bee99157eafb90fe3d2 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 5 Oct 2025 10:22:14 -0400 Subject: [PATCH 020/151] lower fan speed for bridge layers --- src/kiri/mode/fdm/export.js | 5 +++-- src/kiri/mode/fdm/prepare.js | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/kiri/mode/fdm/export.js b/src/kiri/mode/fdm/export.js index b6768e4b..6b359f56 100644 --- a/src/kiri/mode/fdm/export.js +++ b/src/kiri/mode/fdm/export.js @@ -613,6 +613,7 @@ export function fdm_export(print, online, ondone, ondebug) { for (pidx=0; pidx Date: Sat, 11 Oct 2025 22:17:42 -0400 Subject: [PATCH 021/151] work in boot/install url using updated service worker --- app.js | 2 ++ bin/bundle.config.json | 11 ++++++ bin/bundler.mjs | 80 ++++++++++++++++++++++++++++++++++++++++++ src/main/service.js | 9 +++-- 4 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 bin/bundle.config.json create mode 100644 bin/bundler.mjs diff --git a/app.js b/app.js index 4c27cc73..f5e629f4 100644 --- a/app.js +++ b/app.js @@ -122,6 +122,7 @@ function init(mod) { mod.add(serveWasm); mod.add(serveCode); mod.add(fullpath({ + "/boot" : redir((pre??"") + "/boot/", 301), "/kiri" : redir((pre??"") + "/kiri/", 301), "/mesh" : redir((pre??"") + "/mesh/", 301), "/meta" : redir((pre??"") + "/meta/", 301), @@ -147,6 +148,7 @@ function init(mod) { mod.static("/mesh/", "web/mesh"); mod.static("/moto/", "web/moto"); mod.static("/kiri/", "web/kiri"); + mod.static("/boot/", "web/boot"); // module loader function load_modules(root, force) { diff --git a/bin/bundle.config.json b/bin/bundle.config.json new file mode 100644 index 00000000..655fa67e --- /dev/null +++ b/bin/bundle.config.json @@ -0,0 +1,11 @@ +{ + "outputs": { + "bundle": "./web/kiri/bundle.bin" + }, + "inputs": [ + { "root": "./web", "prefix": "" }, + { "root": "./src", "prefix": "lib" }, + { "root": "./src/wasm", "prefix": "wasm" }, + { "root": "./src/wasm", "prefix": "lib/kiri/wasm" } + ] +} diff --git a/bin/bundler.mjs b/bin/bundler.mjs new file mode 100644 index 00000000..199f4d45 --- /dev/null +++ b/bin/bundler.mjs @@ -0,0 +1,80 @@ +import fs from 'fs'; +import path from 'path'; +import { Buffer } from 'buffer'; + +const cfg = JSON.parse(fs.readFileSync(process.argv[2] || './bundle.config.json', 'utf8')); + +// --- recursive directory walker (follows symlinks safely) --- +function* walk(dir, seen = new Set()) { + const real = fs.realpathSync(dir); + if (seen.has(real)) { + return; + } + seen.add(real); + + for (const name of fs.readdirSync(dir)) { + const p = path.join(dir, name); + let st; + try { st = fs.statSync(p); } catch { continue; } + if (st.isDirectory()) yield* walk(p, seen); + else yield p; + } +} + +// --- collect all files according to config --- +let entries = []; +for (const input of cfg.inputs) { + const root = input.root; + const prefix = input.prefix || ''; + for (const file of walk(root)) { + const rel = path.relative(root, file).replace(/\\/g, '/'); + const virt = prefix ? `${prefix}/${rel}` : rel; + entries.push({ file, virt }); + } +} + +// --- build header and data --- +const dataParts = []; +const entryMeta = []; +let offset = 0; + +for (const { file, virt } of entries) { + const data = fs.readFileSync(file); + entryMeta.push({ virt, offset, length: data.length }); + dataParts.push(data); + offset += data.length; +} + +// temporary header without offsets to measure total size +let tempHeaderParts = []; +for (const { virt, offset, length } of entryMeta) { + const name = Buffer.from(virt, 'utf8'); + const nlen = Buffer.alloc(2); nlen.writeUInt16LE(name.length); + const offb = Buffer.alloc(4); offb.writeUInt32LE(0); // placeholder + const lenb = Buffer.alloc(4); lenb.writeUInt32LE(length); + tempHeaderParts.push(nlen, name, offb, lenb); +} +const count = Buffer.alloc(4); count.writeUInt32LE(entries.length); +const tempHeader = Buffer.concat([count, ...tempHeaderParts]); +const headerSize = tempHeader.length; // true data offset base + +// now rebuild header with correct absolute offsets +let headerParts = []; +for (const { virt, offset, length } of entryMeta) { + const name = Buffer.from(virt, 'utf8'); + const nlen = Buffer.alloc(2); nlen.writeUInt16LE(name.length); + const offb = Buffer.alloc(4); offb.writeUInt32LE(headerSize + offset); + const lenb = Buffer.alloc(4); lenb.writeUInt32LE(length); + headerParts.push(nlen, name, offb, lenb); + console.log(virt); +} + +const header = Buffer.concat([count, ...headerParts]); +const full = Buffer.concat([header, ...dataParts]); + +// --- write final bundle --- +const outPath = cfg.outputs.bundle || './bundle.bin'; +fs.mkdirSync(path.dirname(outPath), { recursive: true }); +fs.writeFileSync(outPath, full); // ⚡ write raw binary + +console.log(`✅ Bundled ${entries.length} files → ${outPath} (${full.length} bytes)`); diff --git a/src/main/service.js b/src/main/service.js index 6d8af693..80db6047 100644 --- a/src/main/service.js +++ b/src/main/service.js @@ -11,8 +11,9 @@ async function start_service_worker() { debug('service worker registration'); try { - // const reg = await navigator.serviceWorker.register("/src/moto/service.js?013", { scope: "/" }); - const reg = await navigator.serviceWorker.register("/code/service.js?"+version, { scope: "/" }); + const reg = await navigator + .serviceWorker + .register(`/code/service.js?${version}`, { scope: "/" }); if (reg.installing) { debug('service worker installing'); } else if (reg.waiting) { @@ -31,4 +32,6 @@ async function start_service_worker() { } } -if (service_worker && self.enable_service) start_service_worker(); +if (service_worker && self.enable_service) { + start_service_worker(); +} From 09a30911e89d71fdbef4c3a460c47975eecebbd0 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 12 Oct 2025 00:20:13 -0400 Subject: [PATCH 022/151] add option to compress/uglify boot image. fix indexeddb reload race --- bin/bundler.mjs | 36 +++++++++++++++++++++++++++++++----- src/data/index.js | 21 +++++++++++++++------ 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/bin/bundler.mjs b/bin/bundler.mjs index 199f4d45..21cec2bd 100644 --- a/bin/bundler.mjs +++ b/bin/bundler.mjs @@ -1,8 +1,10 @@ import fs from 'fs'; import path from 'path'; +import uglify from 'uglify-js'; import { Buffer } from 'buffer'; const cfg = JSON.parse(fs.readFileSync(process.argv[2] || './bundle.config.json', 'utf8')); +const compress = process.env.UGLIFY ? true : false // --- recursive directory walker (follows symlinks safely) --- function* walk(dir, seen = new Set()) { @@ -37,12 +39,36 @@ for (const input of cfg.inputs) { const dataParts = []; const entryMeta = []; let offset = 0; +let cache = new Map(); for (const { file, virt } of entries) { - const data = fs.readFileSync(file); - entryMeta.push({ virt, offset, length: data.length }); - dataParts.push(data); - offset += data.length; + let record = cache.get(file); + if (record) { + // console.log({ dup: file }); + entryMeta.push({ ...record, virt }); + } else { + let data = fs.readFileSync(file); + if (compress && file.endsWith("js")) { + console.log('compress', file); + data = uglify.minify(data.toString(), { + compress: { + merge_vars: false, + unused: false + } + }); + // console.log({ to: typeof(data), data }); + if (!data.code) { + console.log({ skip: file }); + continue; + } + data = Buffer.from(data.code); + } + record = { virt, offset, length: data.length }; + cache.set(file, record); + entryMeta.push(record); + dataParts.push(data); + offset += data.length; + } } // temporary header without offsets to measure total size @@ -66,7 +92,7 @@ for (const { virt, offset, length } of entryMeta) { const offb = Buffer.alloc(4); offb.writeUInt32LE(headerSize + offset); const lenb = Buffer.alloc(4); lenb.writeUInt32LE(length); headerParts.push(nlen, name, offb, lenb); - console.log(virt); + // console.log(virt); } const header = Buffer.concat([count, ...headerParts]); diff --git a/src/data/index.js b/src/data/index.js index e28217be..f92b7089 100644 --- a/src/data/index.js +++ b/src/data/index.js @@ -168,7 +168,7 @@ SP.init = function(options = {}) { request = IDB.open(name, this.version); request.onupgradeneeded = function(event) { - let db = storage.db = request.result; + let db = request.result; let current = [...db.objectStoreNames]; let stores = storage.stores; // add missing stores @@ -184,16 +184,16 @@ SP.init = function(options = {}) { // remove obsolete stores for (let curr of current) { if (stores.indexOf(curr) < 0) { - storage.db.deleteObjectStore(curr); + db.deleteObjectStore(curr); console.log({index_dropped: curr}); } } - event.target.transaction.oncomplete = function(event) { - storage.runQueue(); - }; + // allow transactions + storage.db = db; }; request.onsuccess = function(event) { + console.log('IDB open succeeded'); storage.current = storage.stores[0]; storage.db = request.result; storage.runQueue(); @@ -217,6 +217,7 @@ SP.runQueue = function() { let i = 0, q = this.queue, e; while (i < q.length) { e = q[i++]; + // console.log('runQ', i, ...e); switch (e.shift()) { case 'iterate': this.iterate(...e); break; case 'keys': this.keys(...e); break; @@ -252,7 +253,11 @@ SP.put = function(key, value, callback, store = this.current) { req.onerror = function(event) { callback(false) }; } } catch (e) { - console.log(e); + if (e.name === 'InvalidStateError') { + console.log({ putRetry: key }); + return this.queue.push(['put', key, value, callback, store]); + } + console.log(e.name, e); if (callback) callback(false); } }; @@ -275,6 +280,10 @@ SP.get = function(key, callback, store = this.current) { req.onerror = function(event) { callback(null) }; } } catch (e) { + if (e.name === 'InvalidStateError') { + console.log({ getRetry: key }); + return this.queue.push(['get', key, callback, store]); + } console.log(e); if (callback) callback(null); } From 6afa649f20ddde5d323a6526392f6613660863c9 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 12 Oct 2025 01:25:39 -0400 Subject: [PATCH 023/151] remove grid:local and grid:host targets --- src/kiri/core/api.js | 3 +- src/kiri/core/conf.js | 2 - src/kiri/core/export.js | 231 ---------------------------------------- src/kiri/core/init.js | 5 - src/kiri/core/main.js | 44 +------- web/kiri/index.html | 27 ----- 6 files changed, 2 insertions(+), 310 deletions(-) diff --git a/src/kiri/core/api.js b/src/kiri/core/api.js index 42ec035c..eb41dccb 100644 --- a/src/kiri/core/api.js +++ b/src/kiri/core/api.js @@ -9,7 +9,7 @@ import { client as work } from './client.js'; import { consts, COLOR as color, LISTS as lists } from './consts.js'; import { device, devices } from './devices.js'; import { catalog, dialog, event, group, help, hide, image } from './main.js'; -import { modal, mode, probe, process, show, space, util, view } from './main.js'; +import { modal, mode, process, show, space, util, view } from './main.js'; import { local as dataLocal } from '../../data/local.js'; import { noop, ajax, o2js, js2o } from './utils.js'; import { functions } from './function.js'; @@ -162,7 +162,6 @@ export const api = { o2js, onkey, platform, - probe, process, sdb: dataLocal, selection, diff --git a/src/kiri/core/conf.js b/src/kiri/core/conf.js index 69303af1..affad216 100644 --- a/src/kiri/core/conf.js +++ b/src/kiri/core/conf.js @@ -927,8 +927,6 @@ export const conf = { devel: false, drawer: false, edgeangle: 20, - exportGhost: false, - exportLocal: false, exportOcto: false, exportPreview: false, exportThumb: false, diff --git a/src/kiri/core/export.js b/src/kiri/core/export.js index b7440ab1..dbabe999 100644 --- a/src/kiri/core/export.js +++ b/src/kiri/core/export.js @@ -218,207 +218,6 @@ function exportGCodeDialog(gcode, sections, info, names) { ajax.send(form); } - function gridhost_tracker(host,key) { - ajax(host+"/api/check?key="+key, function(data) { - data = js2o(data); - console.log(data); - if (!(data.done || data.error)) { - setTimeout(function() { gridhost_tracker(host,key) }, 1000); - } - }); - } - - function gridlocal_probe(ev, devs) { - if (ev && ev.code !== 'Enter') return; - - if (!devs && api.probe.local(gridlocal_probe)) return; - - grid_local = devs; - - let gdev = localGet('grid-local'); - let gloc = $('grid-local'); - let html = []; - for (let uuid in devs) { - gdev = gdev || uuid; - let dev = devs[uuid]; - let sel = uuid === gdev ? ' selected' : ''; - html.push(``); - } - - if (html.length) { - gloc.innerHTML = html.join('\n'); - gloc.onchange = (ev) => { - localSet('grid-local', gloc.options[gloc.selectedIndex].value); - }; - $('send-to-gridhead').style.display = 'flex'; - $('send-to-gridspool').style.display = 'flex'; - } else { - $('send-to-gridhead').style.display = ''; - $('send-to-gridspool').style.display = ''; - } - } - - function sendto_gridlocal() { - let uuid = $('grid-local').value; - let dev = grid_local[uuid]; - if (dev) { - let file = $('print-filename').value; - fetch( - `${api.probe.live}/api/grid_send?uuid=${uuid}&file=${encodeURIComponent(file + "." + fileext)}`, - {method: "POST", body: gcode} - ) - .then(t => t.text()) - .then(t => { - api.stats.add(`ua_${api.mode.get_lower()}_print_local_ok`); - console.log({grid_spool_said: t}); - }) - .catch(e => { - api.stats.add(`ua_${api.mode.get_lower()}_print_local_err`); - console.log({grid_local_spool_error: e}); - }) - .finally(() => { - api.modal.hide(); - }); - } - } - - function admin_gridlocal() { - let dev = grid_local[$('grid-local').value]; - if (dev && dev.stat && dev.stat.device) { - let dsd = dev.stat.device; - window.open(`http://${dsd.addr[0]}:${dsd.port || 4080}`, "_grid_admin"); - } - } - - function gridhost_probe(ev, set_host) { - if (ev && ev.code !== 'Enter') return; - if (!(grid_host && grid_apik)) return; - - if (set_host) grid_host.value = set_host; - - let xhtr = new XMLHttpRequest(), - host = grid_host.value, - apik = grid_apik.value, - target = grid_target.value; - - if (!apik) $('gpapik').style.display = 'none'; - - if (!host && api.probe.grid(gridhost_probe)) return; - - if (!host) return; - - xhtr.onreadystatechange = function() { - if (xhtr.readyState === 4) { - if (xhtr.status >= 200 && xhtr.status < 300) { - localSet('grid-host', host); - localSet('grid-apik', apik); - let res = JSON.parse(xhtr.responseText); - let sel = false; - let match = false; - let first = null; - let html = []; - grid_targets = {}; - for (let key in res) { - first = first || key; - if (!localGet('grid-target')) { - localSet('grid-target', key); - sel = true; - } else { - sel = localGet('grid-target') === key; - } - match = match || sel; - grid_targets[html.length] = key; - html.push( - "" - ); - } - if (!match) { - localSet('grid-target', first); - } - grid_target.innerHTML = html.join('\n'); - } else if (xhtr.status === 401) { - $('gpapik').style.display = ''; - } else { - local.removeItem('grid-host'); - local.removeItem('grid-apik'); - console.log("invalid grid:host url"); - } - } - }; - - xhtr.open("GET", host + "/api/active?key=" + apik); - xhtr.send(); - } - - function sendto_gridhost() { - if (!(grid_host && grid_apik)) return; - - let xhtr = new XMLHttpRequest(), - host = grid_host.value, - apik = grid_apik.value, - target = localGet('grid-target') || ''; - - if (target === '') { - api.show.alert('invalid or missing target'); - return; - } - if (host.indexOf("http") !== 0) { - api.show.alert("host missing protocol (http:// or https://)"); - return; - } - if (host.indexOf("://") < 0) { - api.show.alert("host:port malformed"); - return; - } - if (api.const.SECURE && !api.util.isSecure(host)) { - api.show.alert("host must begin with 'https' on a secure site"); - return; - } - - localSet('grid-host', host.trim()); - localSet('grid-apik', apik.trim()); - - xhtr.onreadystatechange = function() { - if (xhtr.readyState === 4) { - let status = xhtr.status; - api.stats.add(`ua_${api.mode.get_lower()}_print_grid_${status}`); - if (status >= 200 && status < 300) { - let json = js2o(xhtr.responseText); - gridhost_tracker(host,json.key); - api.ajax(host+"/api/wait?key="+json.key, function(data) { - data = js2o(data); - console.log(data); - api.show.alert("print to "+target+": "+data.status, 600); - }); - } else { - api.show.alert("grid:host error\nstatus: "+status+"\nmessage: "+xhtr.responseText, 10000); - } - api.show.progress(0); - } - }; - xhtr.upload.addEventListener('progress', function(evt) { - api.show.progress(evt.loaded/evt.total, "sending"); - }); - filename = $('print-filename').value; - xhtr.open("POST", - host + "/api/print?" + - "filename=" + filename + - "&target=" + target + - "&key=" + apik + - "&time=" + Math.round(info.time) + - "&length=" + Math.round(info.distance) + - "&image=" + filename - ); - xhtr.setRequestHeader("Content-Type", "text/plain"); - let snapshot = api.view.snapshot; - xhtr.send(snapshot ? [gcode,snapshot].join("\0") : gcode); - api.modal.hide(); - } - function download() { filename = $('print-filename').value; api.util.download(gcode, filename + "." + fileext); @@ -463,8 +262,6 @@ function exportGCodeDialog(gcode, sections, info, names) { let set = api.conf.get(); let fdm = MODE === MODES.FDM; let octo = set.controller.exportOcto && MODE !== MODES.CAM; - let ghost = set.controller.exportGhost; - let local = set.controller.exportLocal; let preview = set.controller.exportPreview; $('code-preview-head').style.display = preview ? '' : 'none'; $('code-preview').style.display = preview ? '' : 'none'; @@ -484,8 +281,6 @@ function exportGCodeDialog(gcode, sections, info, names) { // persist fields when changed bindField('octo-host', 'octo-host'); bindField('octo-apik', 'octo-apik'); - bindField('grid-host', 'grid-host'); - bindField('grid-apik', 'grid-apik'); // in cam mode, show zip file option let downloadZip = $('print-zip'); @@ -699,37 +494,11 @@ function exportGCodeDialog(gcode, sections, info, names) { $('ophost').style.display = 'none'; $('opapik').style.display = 'none'; $('oph1nt').style.display = 'none'; - $('send-to-gridhost').style.display = 'none'; } octo_host.value = localGet('octo-host') || ''; octo_apik.value = localGet('octo-apik') || ''; } catch (e) { console.log(e) } - // grid:host setup - $('send-to-hosthead').style.display = ghost ? '' : 'none'; - $('send-to-gridhost').style.display = ghost ? '' : 'none'; - if (ghost) try { - $('print-gridhost').onclick = sendto_gridhost; - $('grid-host').onkeyup = gridhost_probe; - $('grid-apik').onkeyup = gridhost_probe; - grid_host = $('grid-host'); - grid_apik = $('grid-apik'); - grid_target = $('grid-target'); - grid_target.onchange = function(ev) { - localSet('grid-target', grid_targets[grid_target.selectedIndex]); - }; - grid_host.value = localGet('grid-host') || ''; - grid_apik.value = localGet('grid-apik') || ''; - gridhost_probe(); - } catch (e) { console.log(e) } - - // grid:local setup - if (local) try { - gridlocal_probe(); - $('print-gridlocal').onclick = sendto_gridlocal; - $('admin-gridlocal').onclick = admin_gridlocal; - } catch (e) { console.log(e) } - // preview of the generated GCODE (first 64k max) if (preview && gcode) $('code-preview-textarea').value = gcode.substring(0,65535); } diff --git a/src/kiri/core/init.js b/src/kiri/core/init.js index 02dd0a55..95492134 100644 --- a/src/kiri/core/init.js +++ b/src/kiri/core/init.js @@ -155,8 +155,6 @@ function booleanSave() { control.reverseZoom = ui.reverseZoom.checked; control.dark = ui.dark.checked; control.exportOcto = ui.exportOcto.checked; - control.exportGhost = ui.exportGhost.checked; - control.exportLocal = ui.exportLocal.checked; control.exportThumb = ui.exportThumb.checked; control.exportPreview = ui.exportPreview.checked; control.healMesh = ui.healMesh.checked; @@ -904,7 +902,6 @@ function init_one() { xany: $('mod-x-any'), xsla: $('mod-x-sla'), xlaser: $('mod-x-laser'), - local: $('mod-local'), don8: $('mod-don8'), any: $('mod-any'), }, @@ -1058,8 +1055,6 @@ function init_one() { spaceRandoX: newBoolean(LANG.op_spcx_s, booleanSave, {title:LANG.op_spcx_l, show:isBelt}), spaceLayout: newInput(LANG.op_spcr_s, {title:LANG.op_spcr_l, convert:toFloat, size:3, units}), _____: newGroup(LANG.xp_menu, $('prefs-xpo'), {inline: true}), - exportLocal: newBoolean(`Grid:Local`, booleanSave, {title:LANG.op_exgl_l}), - exportGhost: newBoolean(`Grid:Host`, booleanSave, {title:LANG.op_exgh_l}), exportOcto: newBoolean(`OctoPrint`, booleanSave, {title:LANG.op_exop_l}), exportThumb: newBoolean(`Thumbnail`, booleanSave, {modes:FDM}), exportPreview: newBoolean(`Code Preview`, booleanSave), diff --git a/src/kiri/core/main.js b/src/kiri/core/main.js index 51a00689..ed2f9363 100644 --- a/src/kiri/core/main.js +++ b/src/kiri/core/main.js @@ -114,12 +114,6 @@ export const mode = { } }; -export const probe = { - live: "https://live.grid.space", - grid: noop, - local: noop -}; - export const process = { code: currentProcessCode, get: currentProcessName @@ -784,43 +778,7 @@ function showHelpFile(local,then) { } function showLocal() { - showModal('local'); - api.probe.local((err,data) => { - let devc = 0; - let bind = []; - let html = ['']; - html.push(``); - html.push(``); - let recs = []; - for (let k in data) { - recs.push(data[k].stat); - } - recs.sort((a,b) => { - return a.device.name < b.device.name ? -1 : 1; - }); - for (let r of recs) { - bind.push({uuid: r.device.uuid, host: r.device.addr[0], port: r.device.port}); - html.push(``); - html.push(``); - html.push(``); - html.push(``); - html.push(``); - html.push(``); - devc++; - } - html.push(``); - html.push(`
devicetypestatus
${r.device.name}${r.device.mode}${r.state}
`); - if (devc) { - $('mod-local').innerHTML = html.join(''); - } else { - $('mod-local').innerHTML = `
no local devices`; - } - bind.forEach(rec => { - $(rec.uuid).onclick = () => { - window.open(`http://${rec.host}:${rec.port||4080}/`); - }; - }); - }); + // deprecated } function setViewMode(mode) { diff --git a/web/kiri/index.html b/web/kiri/index.html index a72a261a..2fcce519 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -612,8 +612,6 @@
- -
@@ -667,31 +665,6 @@
CORS support must be enabled in API settings
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
- - -
-
- - -
-
-
From 46c135ba239747f322fd0b2005641917050aed18 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 12 Oct 2025 16:01:38 -0400 Subject: [PATCH 024/151] fix tab reference for mirror op add box area constraint for contour ops --- src/data/index.js | 1 - src/kiri/mode/cam/client.js | 2 +- src/kiri/mode/cam/op-contour.js | 75 +++++++++++++++++++++++++++------ src/kiri/mode/cam/op-lathe.js | 28 ++++++------ src/kiri/mode/cam/prepare.js | 4 +- src/kiri/mode/cam/topo3.js | 17 +++----- src/main/kiri.js | 1 + web/kiri/index.css | 2 + 8 files changed, 87 insertions(+), 43 deletions(-) diff --git a/src/data/index.js b/src/data/index.js index f92b7089..ee631f26 100644 --- a/src/data/index.js +++ b/src/data/index.js @@ -193,7 +193,6 @@ SP.init = function(options = {}) { }; request.onsuccess = function(event) { - console.log('IDB open succeeded'); storage.current = storage.stores[0]; storage.db = request.result; storage.runQueue(); diff --git a/src/kiri/mode/cam/client.js b/src/kiri/mode/cam/client.js index bd509dbf..aa847a64 100644 --- a/src/kiri/mode/cam/client.js +++ b/src/kiri/mode/cam/client.js @@ -10,7 +10,7 @@ import { Layers } from '../../core/layers.js'; import { Stack } from '../../core/stack.js'; import { updateStock } from './cl-stock.js'; import { createPopOps } from './cl-ops.js'; -import { tabAdd, tabDone, tabClear, restoreTabs, rotateTabs, updateTabs, clearTabs } from './cl-tab.js'; +import { tabAdd, tabDone, tabClear, restoreTabs, rotateTabs, updateTabs, clearTabs, mirrorTabs } from './cl-tab.js'; import { traceOn, traceDone, unselectTraces } from './cl-trace.js'; import { holeSelOn, selectHolesDone, clearHolesRec } from './cl-hole.js'; import { surfaceOn, surfaceDone } from './cl-surface.js'; diff --git a/src/kiri/mode/cam/op-contour.js b/src/kiri/mode/cam/op-contour.js index ae7e089a..1d14b313 100644 --- a/src/kiri/mode/cam/op-contour.js +++ b/src/kiri/mode/cam/op-contour.js @@ -4,26 +4,70 @@ import { CamOp } from './op.js'; import { Tool } from './tool.js'; import { generate as Topo } from './topo3.js'; import { newPoint } from '../../../geo/point.js'; +import { newPolygon } from '../../../geo/polygon.js'; import { tip2tipEmit } from '../../../geo/paths.js'; -function createFilter(op) { +function createFilter(op, origin, axis) { + console.log({ origin, axis }); + let ok = () => true; let filter = slices => slices; let filterString = op.filter?.map(l => l.trim()).join('\n'); if (filterString) { try { const obj = eval(`( ${filterString} )`); - let idx = 0; - if (obj && obj.slices) { - const nadd = []; - filter = function (slices) { - for (let slice of slices) { - if (obj.slices(slice, idx++)) { - nadd.push(slice); + let box = obj?.box; + let slice_fn = obj?.slices; + let index = 0; + const accept = []; + filter = function (slices) { + for (let slice of slices) { + if (slice_fn && slice_fn(slice, index++)) { + accept.push(slice); + } else if (box) { + // slice.z = x when axis = y + // slice.z = y when axis = x + let { x, y, z } = box; + x = x ?? [ -Infinity, Infinity ]; + y = y ?? [ -Infinity, Infinity ]; + z = z ?? [ -Infinity, Infinity ]; + let ok = false; + if (axis === 'x') { + let sy = slice.z + origin.y; + if (sy >= y[0] && sy <= y[1]) { + ok = true; + for (let p of slice.camLines) { + p.points = p.points.filter(p => + p.x - origin.x >= x[0] && p.x - origin.x <= x[1] && + p.z - origin.z >= z[0] && p.z - origin.z <= z[1] + ); + } + } + } else { + let sx = slice.z - origin.x; + if (sx >= x[0] && sx <= x[1]) { + ok = true; + for (let p of slice.camLines) { + p.points = p.points.filter(p => + p.y + origin.y >= y[0] && p.y + origin.y <= y[1] && + p.z - origin.z >= z[0] && p.z - origin.z <= z[1] + ); + } + } + } + if (ok) { + slice.camLines = slice.camLines.map(p => { + if (p.points.length > 1) { + return newPolygon(p.points).setOpen(true); + } else { + return undefined; + } + }).filter(p => p); + accept.push(slice); } } - return nadd; - }; - } + } + return accept; + }; } catch (e) { console.log('filter parse error', e, op.filter); } @@ -38,8 +82,8 @@ class OpContour extends CamOp { async slice(progress) { let { op, state } = this; - let { addSlices, settings, updateToolDiams } = state; - let filter = createFilter(op); + let { color, addSlices, settings, updateToolDiams } = state; + let filter = createFilter(op, settings.origin, op.axis.toLowerCase()); let toolDiam = this.toolDiam = new Tool(settings, op.tool).fluteDiameter(); updateToolDiams(toolDiam); // we need topo for safe travel moves when roughing and outlining @@ -54,6 +98,11 @@ class OpContour extends CamOp { slices = filter(slices); this.sliceOut = slices; addSlices(slices); + for (let slice of slices) { + slice.output() + .setLayer(`contour ${op.axis}`, { face: color, line: color }) + .addPolys(slice.camLines); + } }, contour: op, state: state diff --git a/src/kiri/mode/cam/op-lathe.js b/src/kiri/mode/cam/op-lathe.js index 915ae7e1..d1cde28b 100644 --- a/src/kiri/mode/cam/op-lathe.js +++ b/src/kiri/mode/cam/op-lathe.js @@ -6,22 +6,23 @@ import { generate as topo4_generate } from './topo4.js'; import { newPoint } from '../../../geo/point.js'; function createFilter(op) { + let ok = () => true; let filter = slices => slices; - if (op.filter) { + let filterString = op.filter?.map(l => l.trim()).join('\n'); + if (filterString) { try { - const obj = eval(`( ${op.filter.join('\n')} )`); - let idx = 0; - if (obj && obj.slices) { - const nadd = []; - filter = function (slices) { - for (let slice of slices) { - if (obj.slices(slice, idx++)) { - nadd.push(slice); - } + const obj = eval(`( ${filterString} )`); + const accept = []; + let index = 0; + let sl_fn = obj?.slices ?? ok; + filter = function (slices) { + for (let slice of slices) { + if (sl_fn(slice, index++)) { + accept.push(slice); } - return nadd; - }; - } + } + return accept; + }; } catch (e) { console.log('filter parse error', e, op.filter); } @@ -38,7 +39,6 @@ class OpLathe extends CamOp { let { op, state } = this; let { addSlices } = state; let filter = createFilter(op); - this.topo = await topo4_generate({ op, state, diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index fac80971..cbeefb87 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -973,8 +973,8 @@ export function prepEach(widget, settings, print, firstPoint, update) { let arcPoints = arcToPath(from, to, arcPreviewRes, { clockwise, center }) - .map(applyWidgetMovement); - + .map(applyWidgetMovement); + // console.log({arcPoints}) camOut(from, 1); diff --git a/src/kiri/mode/cam/topo3.js b/src/kiri/mode/cam/topo3.js index 84a54fce..678cf831 100644 --- a/src/kiri/mode/cam/topo3.js +++ b/src/kiri/mode/cam/topo3.js @@ -16,7 +16,7 @@ export class Topo { async generate(opt = {}) { let { state, contour, onupdate, ondone } = opt; - let { widget, settings, tshadow, center, tabs, color } = opt.state; + let { widget, settings, tshadow, tabs } = opt.state; let { controller, process } = settings, animesh = parseInt(controller.animesh || 100) * 2500, @@ -177,8 +177,7 @@ export class Topo { clipTabZ: clipTab ? clipTab.map(t => t.z) : undefined, tabHeight, newslices, - leave, - color + leave }, (i, l, p) => { onupdate(l / 2 + i / 2, l, p); }); @@ -304,7 +303,7 @@ export class Topo { const { minX, maxX, minY, maxY, boundsX, boundsY, stepsX, stepsY } = params; const { gridDelta, resolution, density, partOff, toolStep, contourX, contourY } = params; - const { clipTo, clipTab, clipTabZ, tabHeight, newslices, color, leave } = params; + const { clipTo, clipTab, clipTabZ, tabHeight, newslices, leave } = params; let stepsTaken = 0, stepsTotal = 0; @@ -370,11 +369,8 @@ export class Topo { gridy }, segments => { if (segments.length > 0) { - let slice = newSlice(gridx); + let slice = newSlice(x); slice.camLines = segments; - slice.output() - .setLayer("contour y", { face: color, line: color }) - .addPolys(segments); slicesY.push(slice); } onupdate(++stepsTaken, stepsTotal, "contour y"); @@ -399,11 +395,8 @@ export class Topo { gridy }, segments => { if (segments.length > 0) { - let slice = newSlice(gridy); + let slice = newSlice(y); slice.camLines = segments; - slice.output() - .setLayer("contour x", { face: color, line: color }) - .addPolys(segments); slicesX.push(slice); } onupdate(++stepsTaken, stepsTotal, "contour x"); diff --git a/src/main/kiri.js b/src/main/kiri.js index e21a7734..14ec062c 100644 --- a/src/main/kiri.js +++ b/src/main/kiri.js @@ -20,6 +20,7 @@ function safeExec(fn) { function checkReady() { if (document.readyState === 'complete') { + console.log(`kiri | boot ctrl | ` + (navigator.serviceWorker.controller ? true : false)); kiri.api = run(); self.$ = kiri.api.web.$; for (let fn of load) { diff --git a/web/kiri/index.css b/web/kiri/index.css index 5b39165b..aa19ea56 100644 --- a/web/kiri/index.css +++ b/web/kiri/index.css @@ -1376,6 +1376,8 @@ details[open] summary::after { #camops { display: flex; padding: 5px 0 0 0; + max-height: 70vh; + /* overflow-y: auto; */ } .cam-pop-op { top: 50%; From d7acc93872b268c23e53f1a0e45e592b3e9ba7bc Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 12 Oct 2025 19:23:28 -0400 Subject: [PATCH 025/151] fix overflowing ops lists and popup positioning --- src/kiri/mode/cam/client.js | 33 ++++++++++++++++++--------------- web/kiri/index.css | 10 +++++++--- web/kiri/index.html | 2 +- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/kiri/mode/cam/client.js b/src/kiri/mode/cam/client.js index aa847a64..8f6af172 100644 --- a/src/kiri/mode/cam/client.js +++ b/src/kiri/mode/cam/client.js @@ -320,6 +320,7 @@ export function opRender() { el.classList.add("disabled"); } bounds.push(el); + let parent = $('camops'); let timer = null; let inside = true; let popped = false; @@ -329,14 +330,14 @@ export function opRender() { } el.rec = rec; el.unpop = () => { - let pos = [...el.childNodes].indexOf(poprec.div); + let pos = [...parent.childNodes].indexOf(poprec.div); if (pos >= 0) { - el.removeChild(poprec.div); + parent.removeChild(poprec.div); } popped = false; }; function onEnter(ev) { - if ((surfaceOn || traceOn) && env.poppedRec != rec) { + if ((clock || surfaceOn || traceOn) && env.poppedRec != rec) { return; } if (popped && env.poppedRec != rec) { @@ -351,22 +352,24 @@ export function opRender() { popped = true; poprec.use(rec); env.hoveredOp = el; - if (!clock) { - // offset Y position of pop div by % of Y screen location of button - el.appendChild(poprec.div); - poprec.addNote(); - const { innerHeight } = window; - const brect = ev.target.getBoundingClientRect(); - const prect = poprec.div.getBoundingClientRect(); - const pcty = (brect.top / innerHeight) * 0.9; - const offpx = -pcty * prect.height; - poprec.div.style.transform = `translateY(${offpx}px)`; - } + // offset Y position of pop div by % of Y screen location of button + parent.appendChild(poprec.div); + poprec.addNote(); + const { innerHeight } = window; + const brect = ev.target.getBoundingClientRect(); + const prect = parent.getBoundingClientRect(); + const Prect = poprec.div.getBoundingClientRect(); + const tdiff = prect.top - brect.top; + const botoff = innerHeight - (brect.top + Prect.height); + const offpx = -tdiff + (botoff < 0 ? botoff : -Prect.height/3); + poprec.div.style.transform = `translateY(${offpx}px)`; + poprec.div.onmouseenter = () => { inside = true }; + poprec.div.onmouseleave = onLeave; // option click event appears latent // and overides the sticky settings setTimeout(() => { UC.setSticky(false); - }, 0); + }, 10); } function onLeave(ev) { inside = false; diff --git a/web/kiri/index.css b/web/kiri/index.css index aa19ea56..ad3b7705 100644 --- a/web/kiri/index.css +++ b/web/kiri/index.css @@ -1375,12 +1375,16 @@ details[open] summary::after { } #camops { display: flex; - padding: 5px 0 0 0; + padding: 0 0 0 0; +} +#oplist { max-height: 70vh; - /* overflow-y: auto; */ + min-height: 0; + overflow-y: auto; + padding-top: 1px; } .cam-pop-op { - top: 50%; + top: 0; right: calc(100% + 4px); text-align: left; position: absolute; diff --git a/web/kiri/index.html b/web/kiri/index.html index 2fcce519..598e6ad5 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -420,7 +420,7 @@
-
+
From 91fa194ab834407efccff577a53a6ae7756f817c Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 12 Oct 2025 19:25:06 -0400 Subject: [PATCH 026/151] bump rev 4.3.3 --- package.json | 2 +- src/moto/license.js | 2 +- web/kiri/manifest.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index c344e3d8..1f9a9bca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grid-apps", - "version": "4.3.2", + "version": "4.3.3", "description": "grid.space 3d slicing & modeling tools", "author": "Stewart Allen ", "license": "MIT", diff --git a/src/moto/license.js b/src/moto/license.js index 62c0e58c..f3975212 100644 --- a/src/moto/license.js +++ b/src/moto/license.js @@ -3,7 +3,7 @@ const terms = { COPYRIGHT: "Copyright (C) Stewart Allen - All Rights Reserved", LICENSE: "See the license.md file included with the source distribution", - VERSION: "4.3.2" + VERSION: "4.3.3" }; export const beta = 0; diff --git a/web/kiri/manifest.json b/web/kiri/manifest.json index 80b2d2f8..0f24310a 100644 --- a/web/kiri/manifest.json +++ b/web/kiri/manifest.json @@ -1,5 +1,5 @@ { - "name": "Kiri:Moto 4.3.2", + "name": "Kiri:Moto 4.3.3", "short_name": "Kiri:Moto", "description": "Slicer for 3D printers, CNC mills, laser cutters and more", "start_url": "/kiri/", From 25b55383a3c329475e72a621f97191c6dbd801be Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 12 Oct 2025 19:31:14 -0400 Subject: [PATCH 027/151] add experimental boot --- web/boot/index.html | 56 ++++++++++++++ web/boot/service.js | 177 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 233 insertions(+) create mode 100644 web/boot/index.html create mode 100644 web/boot/service.js diff --git a/web/boot/index.html b/web/boot/index.html new file mode 100644 index 00000000..9cc47226 --- /dev/null +++ b/web/boot/index.html @@ -0,0 +1,56 @@ + + + + + + Kiri:Moto (loading) + + + + + + Kiri:Moto is Loading + + + \ No newline at end of file diff --git a/web/boot/service.js b/web/boot/service.js new file mode 100644 index 00000000..be51a7ae --- /dev/null +++ b/web/boot/service.js @@ -0,0 +1,177 @@ +// --- configurable --- +const CACHE_VERSION = 'kiri-v001'; +const BUNDLE_URL = '/kiri/bundle.bin'; +const VERSION_KEY = '/__version__'; + +let mode = 'cached'; +let currentVersion = null; + +// --- logging --- +const log = (...a) => console.log('[SW]', ...a); +self.addEventListener('install', e => log('install')); +self.addEventListener('activate', e => log('activate')); +// self.addEventListener('fetch', e => log('fetch', e.request.url)); + +// --- lifecycle --- +self.skipWaiting(); +self.addEventListener('activate', e => e.waitUntil(clients.claim())); + +// --- mode control --- +self.addEventListener('message', e => { + log({ message: e.data }); + const data = e.data || {}; + if (data.mode) mode = data.mode; + if (data.mode === 'cached' && data.version !== undefined) { + ensureVersion(data.version); + } +}); + +// --- version check and preload --- +async function ensureVersion(incomingVersion) { + const cache = await caches.open(CACHE_VERSION); + let needPreload = false; + + const existing = await cache.match(VERSION_KEY); + if (!existing) { + log('no version stored → preload'); + needPreload = true; + } else { + const text = await existing.text(); + const stored = parseInt(text, 10); + if (stored !== incomingVersion) { + log(`version mismatch ${stored} ≠ ${incomingVersion} → preload`); + needPreload = true; + } else { + log(`version OK (${stored})`); + } + } + + if (needPreload) { + await preloadBundle(); + await cache.put( + VERSION_KEY, + new Response(String(incomingVersion), { headers: { 'Content-Type': 'text/plain' } }) + ); + broadcast('preload-complete'); + } else { + broadcast('preload-cached'); + } +} + +// --- fetch with redirect handler --- +async function fetch_safe(req) { + const res = await fetch(req); + if (res.redirected) { + log({ was_redirected_cloning: res.url }); + // clone into a fresh non-redirect response + const clone = res.clone(); + return new Response(await clone.blob(), { + headers: clone.headers, + status: 200, + statusText: 'OK' + }); + } + return res; +} + +// --- fetch handler --- +self.addEventListener('fetch', e => { + const { request } = e; + const url = new URL(request.url); + + if (request.method !== 'GET') return; + + if (mode === 'transparent') { + e.respondWith(fetch_safe(e.request)); + return; + } + + e.respondWith(fromCacheOrNetwork(request)); +}); + +// --- helpers --- +async function fromCacheOrNetwork(req) { + const cache = await caches.open(CACHE_VERSION); + const hit = await cache.match(req); + if (hit) { + // log({ hit: hit.url || req.url }); + return hit; + } + const net = await fetch_safe(req); + cache.put(req, net.clone()); + log({ put: net.url }); + return net; +} + +async function serveIndex() { + const cache = await caches.open(CACHE_VERSION); + const hit = await cache.match('/kiri/index.html'); + log({ serve_index: hit, cache }); + if (hit) return hit; + return fetch_safe('/kiri/index.html'); +} + +async function broadcast(message) { + const clientsList = await clients.matchAll({ type: 'window' }); + for (const client of clientsList) { + client.postMessage(message); + } +} + +const sec_headers = { + 'Cross-Origin-Opener-Policy': 'same-origin', + 'Cross-Origin-Embedder-Policy': 'require-corp' +}; + +// --- preload & unpack bundle --- +async function preloadBundle() { + // return; + const cache = await caches.open(CACHE_VERSION); + const res = await fetch(BUNDLE_URL, { cache: 'no-store' }); + const buf = await res.arrayBuffer(); + const files = await unpackBundle(buf); + log({ files }); + await Promise.all( + Object.entries(files).map(([path, blob]) => { + const ext = path.split('.').pop(); + const type = + ext === 'html' ? 'text/html' : + ext === 'js' ? 'application/javascript' : + ext === 'css' ? 'text/css' : + ext === 'json' ? 'application/json' : + ext === 'wasm' ? 'application/wasm' : + ext === 'svg' ? 'image/svg+xml' : + 'application/octet-stream'; + const headers = { 'Content-Type': type, ...sec_headers }; + // Object.assign(headers, sec_headers); + const resp = new Response(blob, { headers }); + return cache.put('/' + path, resp); + }) + ); +} + +// --- simple bundle format --- +// [count:uint32][entries...][file data...] +// entry: [nlen:uint16][name][offset:uint32][length:uint32] +async function unpackBundle(buf) { + const view = new DataView(buf); + let pos = 0; + const count = view.getUint32(pos, true); pos += 4; + const decoder = new TextDecoder(); + const table = []; + + for (let i = 0; i < count; i++) { + const nlen = view.getUint16(pos, true); pos += 2; + const name = decoder.decode(new Uint8Array(buf, pos, nlen)); pos += nlen; + const offset = view.getUint32(pos, true); pos += 4; + const len = view.getUint32(pos, true); pos += 4; + table.push({ name, offset, len }); + } + log({ table }); + + const files = {}; + for (const { name, offset, len } of table) + files[name] = buf.slice(offset, offset + len); + + return files; +} From 38a6ef8f038143ecb750915cef623e35cf732fcf Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 12 Oct 2025 20:22:53 -0400 Subject: [PATCH 028/151] exclude bundle from itself. add ability to force SW cache update --- .gitignore | 3 ++- bin/bundle.config.json | 2 +- bin/bundler.mjs | 5 ++++- web/boot/index.html | 6 ++++-- web/boot/service.js | 7 +++---- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index c66e12fd..3132d9dc 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,8 @@ jszip-esm.js logs mod node_modules +pack package-lock.json three.js tmp -pack +web/boot/bundle.bin diff --git a/bin/bundle.config.json b/bin/bundle.config.json index 655fa67e..f2e3a8e7 100644 --- a/bin/bundle.config.json +++ b/bin/bundle.config.json @@ -1,6 +1,6 @@ { "outputs": { - "bundle": "./web/kiri/bundle.bin" + "bundle": "./web/boot/bundle.bin" }, "inputs": [ { "root": "./web", "prefix": "" }, diff --git a/bin/bundler.mjs b/bin/bundler.mjs index 21cec2bd..e55e9821 100644 --- a/bin/bundler.mjs +++ b/bin/bundler.mjs @@ -3,7 +3,7 @@ import path from 'path'; import uglify from 'uglify-js'; import { Buffer } from 'buffer'; -const cfg = JSON.parse(fs.readFileSync(process.argv[2] || './bundle.config.json', 'utf8')); +const cfg = JSON.parse(fs.readFileSync(process.argv[2] || './bin/bundle.config.json', 'utf8')); const compress = process.env.UGLIFY ? true : false // --- recursive directory walker (follows symlinks safely) --- @@ -42,6 +42,9 @@ let offset = 0; let cache = new Map(); for (const { file, virt } of entries) { + if (file.endsWith('/bundle.bin')) { + continue; + } let record = cache.get(file); if (record) { // console.log({ dup: file }); diff --git a/web/boot/index.html b/web/boot/index.html index 9cc47226..d34a84e2 100644 --- a/web/boot/index.html +++ b/web/boot/index.html @@ -19,8 +19,10 @@ font-weight: bold; } - diff --git a/web/boot/service.js b/web/boot/service.js index b1491641..b28524c8 100644 --- a/web/boot/service.js +++ b/web/boot/service.js @@ -1,8 +1,9 @@ // --- configurable --- -const CACHE_VERSION = 'boot-v001'; +const CACHE_VERSION = 'boot-001'; const BUNDLE_URL = '/boot/bundle.bin'; const VERSION_KEY = '/__version__'; +let loaded = 0; let mode = 'cached'; let currentVersion = null; @@ -18,14 +19,33 @@ self.addEventListener('activate', e => e.waitUntil(clients.claim())); // --- mode control --- self.addEventListener('message', e => { - log({ message: e.data }); const data = e.data || {}; - if (data.mode) mode = data.mode; - if (data.mode === 'cached' && data.version !== undefined) { - ensureVersion(data.version); + const { clear, disable, version } = data; + if (clear) { + clearCache(); + } + if (disable) { + mode = 'transparent'; + broadcast('transparent mode'); + unregister(); + } else if (version !== undefined) { + mode = 'cached'; + log('version', version); + ensureVersion(version); } }); +// --- unregister current service worker --- +async function unregister() { + await self.registration.unregister(); +} + +// --- erase existing cache --- +async function clearCache() { + log('clearing cache'); + await caches.delete(CACHE_VERSION); +} + // --- version check and preload --- async function ensureVersion(incomingVersion) { const cache = await caches.open(CACHE_VERSION); @@ -38,10 +58,8 @@ async function ensureVersion(incomingVersion) { } else { const stored = await existing.text(); if (stored !== incomingVersion) { - log(`version mismatch ${stored} ≠ ${incomingVersion} → preload`); + log(`mismatch ${stored} ≠ ${incomingVersion} → preload`); needPreload = true; - } else { - log(`version OK (${stored})`); } } @@ -51,9 +69,9 @@ async function ensureVersion(incomingVersion) { VERSION_KEY, new Response(String(incomingVersion), { headers: { 'Content-Type': 'text/plain' } }) ); - broadcast('preload-complete'); + broadcast(`preload added ${loaded} files`); } else { - broadcast('preload-cached'); + broadcast('preload cached'); } } @@ -80,7 +98,7 @@ self.addEventListener('fetch', e => { if (request.method !== 'GET') return; - if (mode === 'transparent') { + if (mode == 'transparent') { e.respondWith(fetch_safe(e.request)); return; } @@ -93,23 +111,15 @@ async function fromCacheOrNetwork(req) { const cache = await caches.open(CACHE_VERSION); const hit = await cache.match(req); if (hit) { - // log({ hit: hit.url || req.url }); + // log(`hit: ${req.url}`); return hit; } const net = await fetch_safe(req); cache.put(req, net.clone()); - log({ put: net.url }); + log(`put: ${net.url}`); return net; } -async function serveIndex() { - const cache = await caches.open(CACHE_VERSION); - const hit = await cache.match('/kiri/index.html'); - log({ serve_index: hit, cache }); - if (hit) return hit; - return fetch_safe('/kiri/index.html'); -} - async function broadcast(message) { const clientsList = await clients.matchAll({ type: 'window' }); for (const client of clientsList) { @@ -124,12 +134,11 @@ const sec_headers = { // --- preload & unpack bundle --- async function preloadBundle() { - // return; + loaded = 0; const cache = await caches.open(CACHE_VERSION); const res = await fetch(BUNDLE_URL, { cache: 'no-store' }); const buf = await res.arrayBuffer(); const files = await unpackBundle(buf); - log({ files }); await Promise.all( Object.entries(files).map(([path, blob]) => { const ext = path.split('.').pop(); @@ -142,8 +151,8 @@ async function preloadBundle() { ext === 'svg' ? 'image/svg+xml' : 'application/octet-stream'; const headers = { 'Content-Type': type, ...sec_headers }; - // Object.assign(headers, sec_headers); const resp = new Response(blob, { headers }); + loaded++; return cache.put('/' + path, resp); }) ); @@ -166,7 +175,6 @@ async function unpackBundle(buf) { const len = view.getUint32(pos, true); pos += 4; table.push({ name, offset, len }); } - log({ table }); const files = {}; for (const { name, offset, len } of table) From 5894dcc61c0b28bc14a6f41e2500752df995f685 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 13 Oct 2025 12:24:23 -0400 Subject: [PATCH 032/151] add bundler load order priority, module bundling with --dryrun --- app.js | 18 ++++++++++++++++-- bin/bundle.config.json | 3 ++- bin/bundler.mjs | 8 +++++++- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app.js b/app.js index 54b8d3f4..0bcf5072 100644 --- a/app.js +++ b/app.js @@ -37,6 +37,7 @@ let util; let dir; let log; let pre; +let alt; const EventEmitter = require('events'); class AppEmitter extends EventEmitter {} @@ -64,6 +65,7 @@ function init(mod) { startTime = time(); lastmod = mod.util.lastmod; logger = mod.log; + alt = ENV.alt; pre = ENV.pre || mod.meta.pre; debug = ENV.debug || mod.meta.debug; oversion = ENV.over || mod.meta.over; @@ -191,6 +193,14 @@ function init(mod) { append[key] = minify(append[key]); } } + + if (alt) { + for (let [ key, val ] of Object.entries(append)) { + fs.mkdirSync(`alt/main`, { recursive: true }); + let body = fs.readFileSync(`src/main/${key}.js`); + fs.writeFileSync(`alt/main/${key}.js`, body + val); + } + } }; // either add module assets to path or require(init.js) @@ -288,14 +298,14 @@ function initModule(mod, file, dir) { const path = mod.dir + '/' + dir + '/' + file; try { const body = fs.readFileSync(path); - // console.log({ inject: code, file, opt }); + logger.log({ inject: code, file, opt }); if (opt.first) { append[code] = body.toString() + '\n' + append[code]; } else { append[code] += body.toString() + '\n'; } } catch (e) { - console.log({ missing_file: path, dir, mod }); + logger.log({ missing_file: path, dir, mod }); } }, onload(fn) { @@ -430,6 +440,10 @@ function generateDevices() { let dstr = JSON.stringify(devs); util.mkdir(PATH.join(dir,"src","pack")); fs.writeFileSync(PATH.join(dir,"src","pack","kiri-devs.js"), `export const devices = ${dstr};`); + if (alt) { + fs.mkdirSync('alt/pack', { recursive: true }); + fs.writeFileSync(PATH.join(dir,"alt","pack","kiri-devs.js"), `export const devices = ${dstr};`); + } } function minify(code) { diff --git a/bin/bundle.config.json b/bin/bundle.config.json index 93994e27..e7bd3566 100644 --- a/bin/bundle.config.json +++ b/bin/bundle.config.json @@ -5,7 +5,8 @@ }, "inputs": [ { "root": "web", "prefix": "" }, - { "root": "src", "prefix": "lib" }, + { "root": "alt", "prefix": "lib"}, + { "root": "src", "prefix": "lib"}, { "root": "src/wasm", "prefix": "wasm" }, { "root": "src/wasm", "prefix": "lib/kiri/wasm" } ], diff --git a/bin/bundler.mjs b/bin/bundler.mjs index 3a96efb4..36d66e9e 100644 --- a/bin/bundler.mjs +++ b/bin/bundler.mjs @@ -32,13 +32,19 @@ function* walk(dir, seen = new Set()) { // --- collect all files according to config --- let entries = []; +let virtMap = new Set(); for (const input of inputs) { const root = input.root; const prefix = input.prefix || ''; for (const file of walk(root)) { const rel = path.relative(root, file).replace(/\\/g, '/'); const virt = prefix ? `${prefix}/${rel}` : rel; - entries.push({ file, virt }); + if (virtMap.has(virt)) { + console.log('pre-existing', virt, rel, root); + } else { + entries.push({ file, virt }); + virtMap.add(virt); + } } } From a205e9710dd2102a09d42ac85ae0e0fc5c3bf634 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 13 Oct 2025 16:42:32 -0400 Subject: [PATCH 033/151] fix custom op naming --- src/kiri/mode/cam/cl-ops.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/kiri/mode/cam/cl-ops.js b/src/kiri/mode/cam/cl-ops.js index 944f8d2e..eb9232dd 100644 --- a/src/kiri/mode/cam/cl-ops.js +++ b/src/kiri/mode/cam/cl-ops.js @@ -9,6 +9,7 @@ import { selectHoles } from './cl-hole.js'; import { selectHelical } from './cl-helical.js'; import { surfaceAdd } from './cl-surface.js'; import { traceAdd } from './cl-trace.js'; +import { opRender } from './client.js'; const { MODES } = api.const; const { uc: UC } = api; From 998603efe215e9184427c1a7e8ae303bdef36f79 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 13 Oct 2025 16:43:03 -0400 Subject: [PATCH 034/151] fix rapid plunge in Z --- src/kiri/mode/cam/export.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/kiri/mode/cam/export.js b/src/kiri/mode/cam/export.js index 84afee08..09571532 100644 --- a/src/kiri/mode/cam/export.js +++ b/src/kiri/mode/cam/export.js @@ -257,17 +257,18 @@ export function cam_export(print, online) { points--; return; } - let gn; - if (out.emit >= 0 && out.emit <= 3) gn = `G${out.emit}`; - let speed = out.speed, - arc = out.emit == 2 || out.emit == 3, - center = out.center, - nl = (compact_output && lastGn === gn) ? [] : [gn], - dx = opt.dx || newpos.x - pos.x, + + let dx = opt.dx || newpos.x - pos.x, dy = opt.dy || newpos.y - pos.y, dz = opt.dz || newpos.z - pos.z, da = newpos.a != pos.a, - maxf = dz ? maxZd : maxXYd, + gv = (dz >= 0 && out.emit >= 0 && out.emit <= 3) ? out.emit : 1, + gn = `G${gv}`, + speed = out.speed, + arc = out.emit == 2 || out.emit == 3, + center = out.center, + nl = (compact_output && lastGn === gn) ? [] : [gn], + maxf = dz < 0 ? maxZd : maxXYd, feed = Math.min(speed || maxf, maxf), dist = Math.sqrt(dx * dx + dy * dy + dz * dz), newFeed = feed && feed !== pos.f; @@ -357,6 +358,7 @@ export function cam_export(print, online) { // } append(nl.join('')); points++; + if (dz < 0) console.log(nl); } // look for SCALE header directive From fb3420566d08bfa5044d741c984b338b7d65b4a0 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 13 Oct 2025 16:43:34 -0400 Subject: [PATCH 035/151] fix lathe thru stock depth --- src/kiri/mode/cam/topo4.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/kiri/mode/cam/topo4.js b/src/kiri/mode/cam/topo4.js index 5bd4f528..95053024 100644 --- a/src/kiri/mode/cam/topo4.js +++ b/src/kiri/mode/cam/topo4.js @@ -52,7 +52,7 @@ export class Topo { console.log(widget.id, 'topo4 auto tolerance', resolution.round(4)); } - this.zBottom = state.zBottom; + this.zBottom = state.zBottom ?? 0; this.resolution = resolution; this.vertices = widget.getGeoVertices({ unroll: true, translate: true }); this.tabverts = widget.getTabVertices(); @@ -285,8 +285,8 @@ export class Topo { } } if (mz === -Infinity) { - mz = zBottom; // Math.min(0, lz) - } else if (zBottom && mz < zBottom) { + mz = zBottom; + } else if (mz < zBottom) { mz = zBottom; } heights.push(rx, 0, lz = mz); From 4d9250e6620608e198e7aa920be838d36443694b Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 13 Oct 2025 20:45:23 -0400 Subject: [PATCH 036/151] refactor cam indexed animations to show cut path only --- src/kiri/mode/cam/anim-3d-be.js | 116 +++++++++++++++++--------------- src/kiri/mode/cam/anim-3d-fe.js | 84 ++++++++++++++++++++--- src/kiri/mode/cam/client.js | 4 +- src/kiri/mode/cam/export.js | 1 - web/kiri/index.css | 2 +- 5 files changed, 139 insertions(+), 68 deletions(-) diff --git a/src/kiri/mode/cam/anim-3d-be.js b/src/kiri/mode/cam/anim-3d-be.js index 204e5b2a..13df6084 100644 --- a/src/kiri/mode/cam/anim-3d-be.js +++ b/src/kiri/mode/cam/anim-3d-be.js @@ -5,31 +5,31 @@ import { CSG } from '../../../geo/csg.js'; import { Tool } from './tool.js'; -let nextMeshID = 1; -let stock, center, rez; -let path, pathIndex, tool, tools, last; - -let stockZ; -let stockIndexMsg = false; -let stockSlices; -let stockIndex; -let startTime; - -let toolID = -1; -let toolMesh; -let toolRadius; -let toolUpdateMsg; - -let animateClear = false; -let animating = false; -let moveDist = 0; -let renderDist = 0; -let renderDone = false; -let renderPause = 10; -let renderSteps = 0; -let renderSpeed = 0; -let indexCount = 0; -let updates = 0; +let nextMeshID = 1, + stock, + path, + pathIndex, + tool, + tools, + last, + stockZ, + stockIndexMsg = false, + stockSlices, + stockIndex, + startTime, + toolID = -1, + toolMesh, + toolRadius, + toolUpdateMsg, + showStock = false, + animateClear = false, + animating = false, + renderDone = false, + renderSteps = 0, + renderSpeed = 0, + indexCount = 0, + updates = 0, + maxR; export function init(worker) { const { dispatch } = worker; @@ -45,8 +45,6 @@ export function init(worker) { path = print.output.flat(); tools = settings.tools; stock = settings.stock; - rez = 1 / Math.sqrt(density / (stock.x * stock.y)); - tool = null; last = null; animating = false; @@ -56,11 +54,14 @@ export function init(worker) { startTime = 0; updates = 0; stockZ = isIndexed ? 0 : stock.z; + maxR = Math.hypot(stock.y, stock.z); stockSlices = []; const { x, y, z } = stock; const sliceCount = parseInt(settings.controller.animesh || 2000) / 100; const sliceWidth = stock.x / sliceCount; + + if (showStock) for (let i = 0; i < sliceCount; i++) { let xmin = -(x / 2) + (i * sliceWidth) + sliceWidth / 2; let slice = new Stock(sliceWidth, y, z).translate(xmin, 0, 0); @@ -74,7 +75,6 @@ export function init(worker) { }; dispatch.animate2 = function (data, send) { - renderPause = data.pause || renderPause; renderSpeed = data.speed || 0; if (animating) { return send.done(); @@ -126,7 +126,6 @@ function renderPath(send) { return; } pathIndex++; - // console.log(next.point.z); if (next.tool && (!tool || tool.getID() !== next.tool.getID())) { // on real tool change, go to safe Z first @@ -143,44 +142,50 @@ function renderPath(send) { } const id = toolID; - const rezstep = rez * 2; + const rezstep = Math.min(tool.maxDiameter(), 1) / 4; + // console.log({ rezstep }); + if (last) { + // console.log(last.point, next.point); const lp = last.point, np = next.point; last = next; + + // render move line on client + send.data({ line: [ lp, np ]}); + // dwell ops have no point if (!np || !lp) { return renderPath(send); } + let dx = np.x - lp.x, dy = np.y - lp.y, dz = np.z - lp.z, - da = Math.abs((np.a || 0) - (lp.a || 0)), - dr = (da / 360) * (2 * Math.PI * Math.max(np.z, lp.z)), - dist = Math.sqrt(dx * dx + dy * dy + dz * dz + dr * dr); - - moveDist += dist; - - // skip moves that are less than grid resolution - if (moveDist < rezstep) { - // console.log('skip', moveDist, rezstep, next); - renderPath(send); - return; - } + da = (np.a ?? 0) - (lp.a ?? 0), // delta rotation degrees + AD = maxR * 2, // arc diameter @ max z + dr = (Math.abs(da) / 360) * AD, // delta rotation arc + dist = Math.max(Math.hypot(dx, dy, dz), dr); // motion distance + // console.log({ dz, da, AD, dr, dist }); + // sub-divide long moves for animation and better boolean ops const md = Math.max(Math.abs(dx), Math.abs(dy), Math.abs(dz), dr); - const st = Math.ceil(md / rezstep); - const mx = dx / st, my = dy / st, mz = dz / st; - // const sd = Math.sqrt(mx*mx + my*my + mz*mz + dr*dr); - const sd = Math.sqrt(mx * mx + my * my + Math.min(1, mz * mz) + dr * dr); + const st = Math.ceil(md / rezstep); // steps + const mx = dx / st, my = dy / st, mz = dz / st, ma = da / st; + const sd = Math.sqrt(mx * mx + my * my + mz * mz + ma * ma); + const sp = next.speed; const moves = []; - for (let i = 0, x = lp.x, y = lp.y, z = lp.z; i < st; i++) { - moves.push({ x, y, z, a: lp.a, md: sd, dx, dy, dz }); + for (let i = 0, x = lp.x, y = lp.y, z = lp.z, a = lp.a; i < st; i++) { + moves.push({ x, y, z, a, md: sd, dx, dy, dz, sp }); x += mx; y += my; z += mz; + a += ma; } - moveDist = 0; - moves.push({ ...next.point, md: sd }); + // console.log({ dist: md, steps: st, speed: next.speed, moves }); + + // push last point + moves.push({ ...next.point, md: sd, sp }); + // console.log(...moves); renderMoves(id, moves, send); } else { last = next; @@ -197,7 +202,7 @@ function renderMoves(id, moves, send, seed = 0) { if (!pos) { throw `no pos @ ${index} of ${moves.length}`; } - const { dx, dy, dz } = pos; + const { dx, dy, dz, sp, md } = pos; toolMove(pos); // console.log('renderMoves', {id, moves, seed}); let subs = 0; @@ -208,15 +213,14 @@ function renderMoves(id, moves, send, seed = 0) { subs++; } } - // console.log({ index, subs }); - renderDist += pos.md; // pause renderer at specified offsets - if (renderSpeed && renderDist >= renderSpeed) { - renderDist = 0; + if (renderSpeed) { + let time = sp ? (md / sp) * 60000 : 10; + // console.log({ time, ...pos }); renderUpdate(send); setTimeout(() => { renderMoves(id, moves, send, index + 1); - }, renderPause); + }, time / renderSpeed); return; } } diff --git a/src/kiri/mode/cam/anim-3d-fe.js b/src/kiri/mode/cam/anim-3d-fe.js index 3f31d97f..2300fdab 100644 --- a/src/kiri/mode/cam/anim-3d-fe.js +++ b/src/kiri/mode/cam/anim-3d-fe.js @@ -10,24 +10,26 @@ const { client } = api; let meshes = {}, button = {}, label = {}, + lineTracker, material, - speedPauses = [0, 0, 0, 0, 0], speedValues = [1, 2, 4, 8, 32], speedNames = ["1x", "2x", "4x", "8x", "!!"], speedMax = speedValues.length - 1, speedIndex = 0, speed, origin, - color = 0; + color = 0, + A2R = Math.PI / 180; export function animate_clear2(api) { let { anim } = api.ui; - client.animate_cleanup2(); + lineTracker?.clear(); Object.keys(meshes).forEach(id => deleteMesh(id)); api.widgets.setAxisIndex(0); api.uc.setVisible(anim.laba, true); api.uc.setVisible(anim.vala, true); anim.vala.value = "0.0"; + client.animate_cleanup2(); } export function animate2(api, delay) { @@ -86,8 +88,9 @@ Object.assign(client, { }, animate_setup2(settings, ondone) { + initPathMesh(); color = settings.controller.dark ? 0x888888 : 0; - material = new THREE.MeshPhongMaterial({ + material = material ?? new THREE.MeshPhongMaterial({ flatShading: true, transparent: false, opacity: 0.5, @@ -102,6 +105,66 @@ Object.assign(client, { } }); +function initPathMesh() { + if (lineTracker) { + return lineTracker.clear(); + } + let count = 0, + max = 10000, + rot = new THREE.Euler(0,0,0), + geo = new THREE.BufferGeometry(), + mat = new THREE.LineBasicMaterial({ color: 0xffff00 }), + pos = new Float32Array(max * 6), + lines = new THREE.LineSegments(geo, mat), + vec = new THREE.Vector3(0,0,0), + ang = new THREE.Vector3(1,0,0); + geo.setAttribute('position', new THREE.BufferAttribute(pos, 3)); + let track = lineTracker = { + xro(p) { + vec.set(p.x, p.y, p.z); + vec.applyAxisAngle(ang, p.a * A2R); + }, + add(p1, p2) { + let ind = count * 6; + track.xro(p1); + pos[ind+0] = vec.x; + pos[ind+1] = vec.y; + pos[ind+2] = vec.z; + track.xro(p2); + pos[ind+3] = vec.x; + pos[ind+4] = vec.y; + pos[ind+5] = vec.z; + count++; + if (count >= max) { + let opos = pos; + max += 10000; + pos = new Float32Array(max * 6), + pos.set(opos); + geo.setAttribute('position', new THREE.BufferAttribute(pos, 3)); + } + geo.setDrawRange(0, count * 2); + geo.attributes.position.needsUpdate = true; + track.visible(true); + }, + clear() { + count = 0; + geo.setDrawRange(0,0); + track.rotate(0); + track.visible(false); + }, + rotate(angle) { + rot.x = angle * A2R; + lines.setRotationFromEuler(rot); + }, + visible(bool) { + if (bool !== lines.visible) { + lines.visible = bool; + } + } + } + space.world.add(lines); +} + function meshAdd(id, ind, pos, ilen, plen) { const geo = new THREE.BufferGeometry(); const pa = plen ? pos.subarray(0, plen * 3) : pos; @@ -132,6 +195,7 @@ function meshUpdate(id, ind, pos, ilen, plen) { function deleteMesh(id) { space.world.remove(meshes[id]); + meshes[id].geometry.dispose(); delete meshes[id]; } @@ -165,8 +229,7 @@ function play(opts) { } client.animate2({ speed, - steps: steps || Infinity, - pause: speedPauses[speedIndex] + steps: steps || Infinity }, handleUpdate); } @@ -177,8 +240,7 @@ function fast(opts) { button.pause.style.display = ''; client.animate2({ speed, - steps: steps || Infinity, - pause: speedPauses[speedIndex] + steps: steps || Infinity }, handleUpdate); } @@ -216,6 +278,7 @@ function handleUpdate(data) { if (data.stock_index !== undefined) { api.widgets.setAxisIndex(data.stock_index); label.a.value = -data.stock_index.toFixed(1); + lineTracker.rotate(-data.stock_index); } if (data.mesh_index) { const { id, index } = data.mesh_index; @@ -229,9 +292,12 @@ function handleUpdate(data) { const { id, ind, pos, ilen, plen } = data.mesh_update; meshUpdate(id, ind, pos, ilen, plen); } - if (data && data.progress) { + if (data.progress) { label.progress.value = (data.progress * 100).toFixed(1); } + if (data.line) { + lineTracker.add(...data.line); + } } function updateSpeed(inc = 0) { diff --git a/src/kiri/mode/cam/client.js b/src/kiri/mode/cam/client.js index 8f6af172..65eba6db 100644 --- a/src/kiri/mode/cam/client.js +++ b/src/kiri/mode/cam/client.js @@ -29,6 +29,7 @@ const { widgets: WIDGETS } = api; class Client { animVer = 0; camStock; + showStock = true; current; currentIndex; flipping; @@ -640,7 +641,8 @@ export function init() { }); api.event.on("cam.stock.toggle", (bool) => { - env.camStock && (env.camStock.visible = bool ?? !env.camStock.visible); + env.showStock = bool ?? !env.showStock; + updateStock(); }); api.event.on("boolean.click", api.platform.update_bounds); diff --git a/src/kiri/mode/cam/export.js b/src/kiri/mode/cam/export.js index 09571532..a162786c 100644 --- a/src/kiri/mode/cam/export.js +++ b/src/kiri/mode/cam/export.js @@ -358,7 +358,6 @@ export function cam_export(print, online) { // } append(nl.join('')); points++; - if (dz < 0) console.log(nl); } // look for SCALE header directive diff --git a/web/kiri/index.css b/web/kiri/index.css index ad3b7705..efc8c86d 100644 --- a/web/kiri/index.css +++ b/web/kiri/index.css @@ -1378,7 +1378,7 @@ details[open] summary::after { padding: 0 0 0 0; } #oplist { - max-height: 70vh; + max-height: calc(70vh - 200px); min-height: 0; overflow-y: auto; padding-top: 1px; From 1c6a988d272b29f74ca930600361bc4c5e30ca50 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 14 Oct 2025 00:33:36 -0400 Subject: [PATCH 037/151] make bundler more resilient to missing sources --- app.js | 7 ++++++- bin/bundler.mjs | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app.js b/app.js index 0bcf5072..57b03227 100644 --- a/app.js +++ b/app.js @@ -196,8 +196,13 @@ function init(mod) { if (alt) { for (let [ key, val ] of Object.entries(append)) { + let src = `src/main/${key}.js`; + if (!fs.existsSync(src)) { + logger.log('missing:', src); + continue; + } fs.mkdirSync(`alt/main`, { recursive: true }); - let body = fs.readFileSync(`src/main/${key}.js`); + let body = fs.readFileSync(src); fs.writeFileSync(`alt/main/${key}.js`, body + val); } } diff --git a/bin/bundler.mjs b/bin/bundler.mjs index 36d66e9e..e0628abf 100644 --- a/bin/bundler.mjs +++ b/bin/bundler.mjs @@ -14,6 +14,9 @@ function* walk(dir, seen = new Set()) { if (excludes.indexOf(dir) >= 0) { return; } + if (!fs.existsSync(dir)) { + return; + } const real = fs.realpathSync(dir); if (seen.has(real)) { From e183be3bd77a6e0fe82a479d39fa1dc72dac113a Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 14 Oct 2025 02:07:49 -0400 Subject: [PATCH 038/151] fully host /kiri from /boot --- web/boot/service.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/web/boot/service.js b/web/boot/service.js index b28524c8..300e8693 100644 --- a/web/boot/service.js +++ b/web/boot/service.js @@ -94,6 +94,14 @@ async function fetch_safe(req) { // --- fetch handler --- self.addEventListener('fetch', e => { const { request } = e; + + if (request.url.endsWith("/kiri") || request.url.endsWith("/kiri/")) { + e.respondWith((async () => { + return Response.redirect("/kiri/index.html", 302); + })()); + return; + } + const url = new URL(request.url); if (request.method !== 'GET') return; From acbd84402d2d21a25ed0928f6e8b1c6107708e6b Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 14 Oct 2025 15:58:09 -0400 Subject: [PATCH 039/151] handle base redirects when it's a cache hit --- web/boot/index.html | 4 +--- web/boot/service.js | 35 +++++++++++++++++++++++++---------- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/web/boot/index.html b/web/boot/index.html index 8616a0ee..8f7c9381 100644 --- a/web/boot/index.html +++ b/web/boot/index.html @@ -62,8 +62,6 @@ - - Kiri:Moto is Loading - +Booting Grid.Space \ No newline at end of file diff --git a/web/boot/service.js b/web/boot/service.js index 300e8693..ea27470e 100644 --- a/web/boot/service.js +++ b/web/boot/service.js @@ -94,16 +94,14 @@ async function fetch_safe(req) { // --- fetch handler --- self.addEventListener('fetch', e => { const { request } = e; - - if (request.url.endsWith("/kiri") || request.url.endsWith("/kiri/")) { - e.respondWith((async () => { - return Response.redirect("/kiri/index.html", 302); - })()); - return; - } - const url = new URL(request.url); + if (url.pathname.endsWith("/")) { + return e.respondWith(redirectOr404(appendURL(url, 'index.html').pathname)); + } else if (url.pathname.indexOf(".") < 0) { + return e.respondWith(redirectOr404(appendURL(url, '/index.html').pathname)); + } + if (request.method !== 'GET') return; if (mode == 'transparent') { @@ -115,13 +113,30 @@ self.addEventListener('fetch', e => { }); // --- helpers --- -async function fromCacheOrNetwork(req) { +function appendURL(url, append) { + return new URL(url.origin + url.pathname + append + url.search); +} + +async function redirectOr404(path) { const cache = await caches.open(CACHE_VERSION); - const hit = await cache.match(req); + const hit = await cache.match(path, { ignoreSearch: true }); + if (hit) { + return Response.redirect(path, 302); + } else { + return new Response('Not Found', { status: 404, statusText: 'Not Found' }); + } +} + +async function fromCacheOrNetwork(req, test) { + const cache = await caches.open(CACHE_VERSION); + const hit = await cache.match(req, { ignoreSearch: true }); if (hit) { // log(`hit: ${req.url}`); return hit; } + if (test) { + return test; + } const net = await fetch_safe(req); cache.put(req, net.clone()); log(`put: ${net.url}`); From 19cc99fddff69203c23ce7e870c637d3c4c42ee2 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 14 Oct 2025 16:00:16 -0400 Subject: [PATCH 040/151] fix cache vs transparent --- web/boot/service.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/web/boot/service.js b/web/boot/service.js index ea27470e..c32533d2 100644 --- a/web/boot/service.js +++ b/web/boot/service.js @@ -96,12 +96,6 @@ self.addEventListener('fetch', e => { const { request } = e; const url = new URL(request.url); - if (url.pathname.endsWith("/")) { - return e.respondWith(redirectOr404(appendURL(url, 'index.html').pathname)); - } else if (url.pathname.indexOf(".") < 0) { - return e.respondWith(redirectOr404(appendURL(url, '/index.html').pathname)); - } - if (request.method !== 'GET') return; if (mode == 'transparent') { @@ -109,7 +103,13 @@ self.addEventListener('fetch', e => { return; } - e.respondWith(fromCacheOrNetwork(request)); + if (url.pathname.endsWith("/")) { + return e.respondWith(redirectOr404(appendURL(url, 'index.html').pathname)); + } else if (url.pathname.indexOf(".") < 0) { + return e.respondWith(redirectOr404(appendURL(url, '/index.html').pathname)); + } else { + e.respondWith(fromCacheOrNetwork(request)); + } }); // --- helpers --- From 183c110ed93c0c47f2b97f2cbe588dea6281b978 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 14 Oct 2025 21:00:00 -0400 Subject: [PATCH 041/151] fix fan setting for empty bridge layers --- src/kiri/mode/fdm/prepare.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/kiri/mode/fdm/prepare.js b/src/kiri/mode/fdm/prepare.js index 301d47fb..7152f12a 100644 --- a/src/kiri/mode/fdm/prepare.js +++ b/src/kiri/mode/fdm/prepare.js @@ -1617,7 +1617,7 @@ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) { print.addPrintPoints(preout, output); // bridge layer fan change - if (slice.isBridgeLayer) { + if (preout.length && slice.isBridgeLayer) { preout[0].fan = Math.round(fanSpeed / 3); preout.peek().fan = fanSpeed; } From a08fedf28cc2a3e6755eeae6030ce140db0a038e Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 14 Oct 2025 21:06:18 -0400 Subject: [PATCH 042/151] fix case where max feedrates are all 0 --- src/kiri/mode/cam/export.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/kiri/mode/cam/export.js b/src/kiri/mode/cam/export.js index a162786c..41280974 100644 --- a/src/kiri/mode/cam/export.js +++ b/src/kiri/mode/cam/export.js @@ -268,7 +268,7 @@ export function cam_export(print, online) { arc = out.emit == 2 || out.emit == 3, center = out.center, nl = (compact_output && lastGn === gn) ? [] : [gn], - maxf = dz < 0 ? maxZd : maxXYd, + maxf = (dz < 0 ? maxZd : maxXYd) || speed, feed = Math.min(speed || maxf, maxf), dist = Math.sqrt(dx * dx + dy * dy + dz * dz), newFeed = feed && feed !== pos.f; From 8a908cb373635b9261ed5271b4a82914eddbc065 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Wed, 15 Oct 2025 13:26:11 -0400 Subject: [PATCH 043/151] allow short move to cut in roughing --- src/kiri/mode/cam/prepare.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index cbeefb87..9f3b19b4 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -412,7 +412,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { } // convert short planar moves to cuts in some cases - if (hasDelta && !isRough && !isArc && isMove && deltaXY <= moveLen && deltaZ <= 0 && !lasering) { + if (hasDelta && !isArc && isMove && deltaXY <= moveLen && deltaZ <= 0 && !lasering) { let iscontour = tolerance > 0; let isflat = absDeltaZ < 0.001; // restrict this to contouring From b9f9678529acc19ebe43ebc4e91f0a01aa67ceae Mon Sep 17 00:00:00 2001 From: bakedpotatolord Date: Thu, 16 Oct 2025 16:54:59 -0600 Subject: [PATCH 044/151] add file meta to widget codec --- src/kiri/core/codec.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/kiri/core/codec.js b/src/kiri/core/codec.js index 3547fb6f..1ad844ac 100644 --- a/src/kiri/core/codec.js +++ b/src/kiri/core/codec.js @@ -225,7 +225,9 @@ Widget.prototype.encode = function(state) { json: json, // safe for JSON (float32array mess) group: this.group.id, track: this.track, - geo: json ? Array.from(geo) : geo + geo: json ? Array.from(geo) : geo, + meta: this.meta, + anno: this.anno, }; return coded; }; @@ -234,8 +236,12 @@ registerDecoder(TYPE.WIDGET, function(v, state) { const id = v.id, group = v.group || id, track = v.track || undefined, - widget = newWidget(id, Widget.Groups.forid(group)); + widget = newWidget(id, Widget.Groups.forid(group)), + meta= v.meta || widget.meta, + anno = v.anno || widget.anno; + widget.meta = meta; + widget.anno = anno; widget.loadVertices(v.json ? v.geo.toFloat32() : v.geo); widget.saved = Date.now(); if (track && track.pos) { From a26b1d6bef0a741ce667a7a1792f30afa033ee9c Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 16 Oct 2025 21:39:24 -0400 Subject: [PATCH 045/151] add fdm volumetric flow output caps --- package.json | 2 +- src/kiri/core/conf.js | 1 + src/kiri/mode/cam/topo4.js | 7 ++++--- src/kiri/mode/fdm/driver-be.js | 1 + src/kiri/mode/fdm/export.js | 11 ++-------- src/kiri/mode/fdm/init-menu.js | 1 + src/kiri/mode/fdm/prepare.js | 37 ++++++++++++++++++++++++++++++++-- web/boot/service.js | 6 +----- web/kiri/lang/en.js | 2 ++ 9 files changed, 48 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 1f9a9bca..0720297b 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "three": "^0.178.0", "three-mesh-bvh": "^0.7.6", "uglify-js": "3.14.5", - "validator": ">=13.7.0", + "validator": ">=13.15.15", "ws": "^8.18.2" }, "devDependencies": { diff --git a/src/kiri/core/conf.js b/src/kiri/core/conf.js index a66aa09d..bc3729bf 100644 --- a/src/kiri/core/conf.js +++ b/src/kiri/core/conf.js @@ -293,6 +293,7 @@ export const conf = { outputInvertY: false, outputLayerRetract: false, outputLoops: 0, + outputMaxFlowrate: 15, outputMinLayerTime: 10, outputMinSpeed: 5.0, outputPurgeTower: 0, diff --git a/src/kiri/mode/cam/topo4.js b/src/kiri/mode/cam/topo4.js index 95053024..3a60e611 100644 --- a/src/kiri/mode/cam/topo4.js +++ b/src/kiri/mode/cam/topo4.js @@ -38,7 +38,6 @@ export class Topo { x: axis === "x", y: axis === "y" }, - zMin = min.z + 0.0001, tolerance = op.tolerance, resolution = tolerance ? tolerance : 1 / Math.sqrt(density / (span.x * span.y)), step = this.step = (tool.traceOffset() * 2) * op.step, @@ -123,7 +122,9 @@ export class Topo { let slices = this.slices = []; let slice = { min: range.min, max: range.min + step, index }; - for (let z = range.min; z < range.max; z += resolution) { + // console.log({ shards, step, range, resolution }); + for (let z = range.min; z <= range.max; z += resolution) { + // console.log({ z }); if (z > slice.max) { slices.push(slice); slice = { min: z, max: z + step, index }; @@ -131,7 +132,7 @@ export class Topo { index++; } slices.push(slice); - // console.log({ shards, range, step, slices }); + // console.log({ shards, range, step, slices: slices.slice() }); const { minions } = self.kiri_worker; if (minions?.running > 1) { diff --git a/src/kiri/mode/fdm/driver-be.js b/src/kiri/mode/fdm/driver-be.js index f1164acc..2efb734d 100644 --- a/src/kiri/mode/fdm/driver-be.js +++ b/src/kiri/mode/fdm/driver-be.js @@ -9,6 +9,7 @@ import { fdm_export } from './export.js'; // fil = filament diameter // slice = slice height function extrudePerMM(noz, fil, slice) { + // (ratio of nozzle to filament) * (ratio of slice to nozzle) return ((Math.PI * util.sqr(noz / 2)) / (Math.PI * util.sqr(fil / 2))) * (slice / noz); }; diff --git a/src/kiri/mode/fdm/export.js b/src/kiri/mode/fdm/export.js index 6b359f56..a65d6ca9 100644 --- a/src/kiri/mode/fdm/export.js +++ b/src/kiri/mode/fdm/export.js @@ -26,7 +26,6 @@ export function fdm_export(print, online, ondone, ondebug) { { extrudeAbs } = device, { exportThumb } = controller, { extrudeMM, extrudePerMM } = FDM, - extused = Object.keys(print.extruders).map(v => parseInt(v)), timeFactor = (device.gcodeTime || 1) * 1.5, decimals = config.gcode_decimals || 4, zMoveMax = device.deviceZMax || 0, @@ -49,7 +48,6 @@ export function fdm_export(print, online, ondone, ondebug) { last = null, zpos = 0, bmax = 0, - blastz = 0, belt_add_y = (process.firstLayerYOffset || 0) - (belty || 0), oloops = process.outputLoops || 0, zhop = process.zHopDistance || 0, // range @@ -58,10 +56,8 @@ export function fdm_export(print, online, ondone, ondebug) { retDist = process.outputRetractDist || 0, // range retSpeed = process.outputRetractSpeed * 60 || 1, // range retDwell = process.outputRetractDwell || 0, // range - timeDwell = retDwell / 1000, scarfZ = process.outputScarfLength ? true : false, arcDist = isBelt || scarfZ ? 0 : (process.arcTolerance || 0), - arcMin = 1, arcRes = 20, arcDev = 0.5, arcMax = 40, @@ -85,7 +81,6 @@ export function fdm_export(print, online, ondone, ondebug) { fanSpeedSave = undefined, fanSpeedBase = 0, fanSpeed = 0, - lastType = undefined, lastNozzleTemp = nozzleTemp, lastBedTemp = bedTemp, lastFanSpeed = fanSpeed, @@ -169,7 +164,6 @@ export function fdm_export(print, online, ondone, ondebug) { retDist = params.outputRetractDist || 0; // range retSpeed = params.outputRetractSpeed * 60 || 1; // range retDwell = params.outputRetractDwell || 0; // range - timeDwell = retDwell / 1000; nozzleTemp = layer === 0 ? params.firstLayerNozzleTemp || params.outputTemp : params.outputTemp || params.firstLayerNozzleTemp; @@ -470,7 +464,7 @@ export function fdm_export(print, online, ondone, ondebug) { if (isBelt) { let zheight = path ? path.height || 0 : 0; epos.x = originCenter ? -pos.x : device.bedWidth - pos.x; - epos.z = blastz = pos.z * icos; + epos.z = pos.z * icos; epos.y = -pos.y + epos.z * bcos + belt_add_y; lout = epos; } @@ -635,7 +629,7 @@ export function fdm_export(print, online, ondone, ondebug) { // emit comment on output type chage if (last && out.type !== last.type) { - lastType = subst.feature = out.type; + subst.feature = out.type; if (gcodeFeature && gcodeFeature.length) { appendAllSub(gcodeFeature); } else { @@ -752,7 +746,6 @@ export function fdm_export(print, online, ondone, ondebug) { } // if new point is off the arc - // if (deem || depm || desp || dc > arcDist || cc.r < arcMin || cc.r > arcMax || dist > cc.r) { if (deem || depm || desp || dc * arcQ.center.length / arcQ.rSum > arcDist || dist > cc.r || cc.r > arcMax || radFault || !arcValid()) { // let debug = [deem, depm, desp, dc * arcQ.center.length / arcQ.rSum > arcDist, dist > cc.r, cc.r > arcMax, radFault]; if (arcQ.length === 4) { diff --git a/src/kiri/mode/fdm/init-menu.js b/src/kiri/mode/fdm/init-menu.js index 07571f0b..dc062c28 100644 --- a/src/kiri/mode/fdm/init-menu.js +++ b/src/kiri/mode/fdm/init-menu.js @@ -177,6 +177,7 @@ export function menu() { arcTolerance: newInput(LANG.ad_arct_s, {title:LANG.ad_arct_l, convert:toFloat, bound:bound(0,1.0), show:() => { return isNotBelt() }}), outputRetractDwell: newInput(LANG.ad_rdwl_s, {title:LANG.ad_rdwl_l, convert:toInt}), outputMinSpeed: newInput(LANG.ad_mins_s, {title:LANG.ad_mins_l, convert:toFloat, bound:bound(1,200)}), + outputMaxFlowrate: newInput(LANG.ad_maxf_s, {title:LANG.ad_maxf_l, convert:toFloat, bound:bound(1,200)}), outputPurgeTower: newInput(LANG.ad_purg_s, {title:LANG.ad_purg_l, convert:toInt, bound:bound(0,1000)}), outputScarfLength: newInput(LANG.ad_scar_s, {title:LANG.ad_scar_l, convert:toFloat, bound:bound(0,1000)}), outputShortPoly: newInput(LANG.ad_spol_s, {title:LANG.ad_spol_l, convert:toFloat, bound:bound(0,10000)}), diff --git a/src/kiri/mode/fdm/prepare.js b/src/kiri/mode/fdm/prepare.js index 7152f12a..1a46dea0 100644 --- a/src/kiri/mode/fdm/prepare.js +++ b/src/kiri/mode/fdm/prepare.js @@ -1,5 +1,6 @@ /** Copyright Stewart Allen -- All Rights Reserved */ +import { FDM } from './driver-be.js'; import { base, util } from '../../../geo/base.js'; import { poly2polyEmit, tip2tipEmit } from '../../../geo/paths.js'; import { newBounds } from '../../../geo/bounds.js'; @@ -794,10 +795,22 @@ export async function fdm_prepare(widgets, settings, update) { } }; + +/** + * Output and route Slice (shell,fill) paths for a single Slice + * + * @param {*} print Print output Object + * @param {*} slice current slice being Output + * @param {*} startPoint starting point for this layer + * @param {*} offset start point offset + * @param {*} output output prebuffer + * @param {*} opt options + */ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) { const { settings } = print; const { device } = settings; const { bedWidth, bedDepth, bedRound } = device; + const { extrudePerMM } = FDM; let preout = [], process = opt.params || settings.process, @@ -806,6 +819,7 @@ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) { scarfLength = process.outputScarfLength || 0, minLayerTime = process.outputMinLayerTime || 0, nozzleSize = process.sliceLineWidth || device.extruders[extruder].extNozzle, + nozzles = device.extruders.map(e => e.extNozzle), firstLayer = (opt.first || false) && !opt.support, thinWall = nozzleSize * (opt.thinWall || 1.75), retractDist = opt.retractOver || (nozzleSize * 5), @@ -828,6 +842,7 @@ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) { zhop = process.zHopDistance || 0, zmax = opt.zmax, antiBacklash = process.antiBacklash, + maxFlowRate = process.outputMaxFlowrate, wipeDist = process.outputRetractWipe || 0, isBelt = device.bedBelt, bedOffset = originCenter ? { @@ -1595,16 +1610,34 @@ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) { if (!p.emit) continue; let mms = p.speed ?? 1; let dst = lp?.distTo2D(p.point) ?? 0; + lp = p.point; if (dst) { tt += (dst/mms); td += dst; + p.dst = dst; } - lp = p.point; } if (minLayerTime && tt < minLayerTime) { let fact = tt / minLayerTime; for (let p of preout) { - if (p.emit) p.speed = Math.max(p.speed * fact, minSpeed); + if (p.emit) { + p.speed = Math.max(p.speed * fact, minSpeed); + } + } + } + + // apply speed damping when output exceeds volumetric flowrate cap + if (maxFlowRate) { + for (let p of preout) { + if (p.emit && p.dst) { + let vfr = nozzles[p.tool] * slice.height * p.speed; + if (vfr > maxFlowRate) { + let old = p.speed; + let damp = maxFlowRate / vfr; + p.speed = p.speed * damp; + // console.log({ vfr, damp, old, new: p.speed }); + } + } } } diff --git a/web/boot/service.js b/web/boot/service.js index c32533d2..8d0f405a 100644 --- a/web/boot/service.js +++ b/web/boot/service.js @@ -127,16 +127,12 @@ async function redirectOr404(path) { } } -async function fromCacheOrNetwork(req, test) { +async function fromCacheOrNetwork(req) { const cache = await caches.open(CACHE_VERSION); const hit = await cache.match(req, { ignoreSearch: true }); if (hit) { - // log(`hit: ${req.url}`); return hit; } - if (test) { - return test; - } const net = await fetch_safe(req); cache.put(req, net.clone()); log(`put: ${net.url}`); diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index 39eb200d..c73e00ca 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -868,6 +868,8 @@ self.lang['en-us'] = { ad_msol_l: ["minimum area (mm^2)","required to keep solid","must be > 0.1"], ad_mins_s: "min speed", ad_mins_l: ["minimum speed","for short segments"], + ad_maxf_s: "max flowrate", + ad_maxf_l: ["maximum volumetric flowrate supported by this print head and filament","in millimeters^3 / second"], ad_scar_s: "scarf length", ad_scar_l: ["ease up length for scarf joint. disables arc detection","0 = disabled"], ad_spol_s: "short path", From f0f0bae52b4f0a0264cb461d27fd2661b9661902 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 17 Oct 2025 00:49:21 -0400 Subject: [PATCH 046/151] remove first layer line width and flow rate since they will become range parameters in the flow rate value refactor --- src/kiri/core/conf.js | 2 -- src/kiri/mode/fdm/client.js | 1 - src/kiri/mode/fdm/init-menu.js | 6 ++---- src/kiri/mode/fdm/post.js | 7 ++----- src/kiri/mode/fdm/prepare.js | 10 ---------- src/kiri/mode/fdm/slice.js | 6 ++---- 6 files changed, 6 insertions(+), 26 deletions(-) diff --git a/src/kiri/core/conf.js b/src/kiri/core/conf.js index bc3729bf..df9fd4c4 100644 --- a/src/kiri/core/conf.js +++ b/src/kiri/core/conf.js @@ -270,9 +270,7 @@ export const conf = { firstLayerFanSpeed: 0, firstLayerFillRate: 35, firstLayerFlatten: 0, - firstLayerLineMult: 1.0, firstLayerNozzleTemp: 0, - firstLayerPrintMult: 1.0, firstLayerRate: 30, firstLayerYOffset: 0, firstSliceHeight: 0.25, diff --git a/src/kiri/mode/fdm/client.js b/src/kiri/mode/fdm/client.js index 7bb6d5cf..9fdbb6b0 100644 --- a/src/kiri/mode/fdm/client.js +++ b/src/kiri/mode/fdm/client.js @@ -41,7 +41,6 @@ export function init() { "sliceTopLayers": LANG.sl_ltop_s, "sliceBottomLayers": LANG.sl_lbot_s, "firstLayerRate": LANG.fl_rate_s, - "firstLayerPrintMult": LANG.fl_mult_s, "firstLayerFanSpeed": LANG.ou_fans_s, // prepare "sliceShellOrder": LANG.sl_ordr_s, diff --git a/src/kiri/mode/fdm/init-menu.js b/src/kiri/mode/fdm/init-menu.js index dc062c28..44da3b9c 100644 --- a/src/kiri/mode/fdm/init-menu.js +++ b/src/kiri/mode/fdm/init-menu.js @@ -99,6 +99,8 @@ export function menu() { _____: newGroup(LANG.fh_menu, $('fdm-heat'), { modes:FDM, driven, hideable, separator, group:"fdm-heat" }), outputTemp: newInput(LANG.ou_nozl_s, {title:LANG.ou_nozl_l, convert:toInt}), outputBedTemp: newInput(LANG.ou_bedd_s, {title:LANG.ou_bedd_l, convert:toInt}), + separator: newBlank({ class:"set-sep", driven }), + outputDraftShield: newBoolean(LANG.fr_draf_s, onBooleanClick, {title:LANG.fr_draf_l, trigger, show:() => isNotBelt()}), _____: newGroup(LANG.fc_menu, $('fdm-cool'), { modes:FDM, driven, hideable, separator, group:"fdm-cool" }), outputFanLayer: newInput(LANG.ou_fanl_s, { title:LANG.ou_fanl_l, convert:toInt, bound:bound(0,255) }), outputFanSpeed: newInput(LANG.ou_fans_s, {title:LANG.ou_fans_l, convert:toInt, bound:bound(0,255)}), @@ -137,9 +139,6 @@ export function menu() { firstLayerFlatten: newInput(LANG.fl_flat_s, {title:LANG.fl_flat_l, convert:toFloat, show:isBelt}), firstLayerRate: newInput(LANG.fl_rate_s, {title:LANG.fl_rate_l, convert:toFloat}), firstLayerFillRate: newInput(LANG.fl_frat_s, {title:LANG.fl_frat_l, convert:toFloat, show:isNotBelt}), - separator: newBlank({ class:"set-sep", driven, show:isNotBelt }), - firstLayerLineMult: newInput(LANG.fl_sfac_s, {title:LANG.fl_sfac_l, convert:toFloat, bound:bound(0.5,2), show:isNotBelt}), - firstLayerPrintMult: newInput(LANG.fl_mult_s, {title:LANG.fl_mult_l, convert:toFloat}), separator: newBlank({ class:"set-sep", driven, show:isBelt }), firstLayerBrim: newInput(LANG.fl_brim_s, {title:LANG.fl_brim_l, convert:toInt, show:isBelt}), firstLayerBrimIn: newInput(LANG.fl_brin_s, {title:LANG.fl_brin_l, convert:toInt, show:isBelt}), @@ -154,7 +153,6 @@ export function menu() { outputRaftSpacing: newInput(LANG.fr_spac_s, {title:LANG.fr_spac_l, convert:toFloat, bound:bound(0.0,3.0), show: () => ui.outputRaft.checked && isNotBelt() }), separator: newBlank({ class:"set-sep", driven, show:isNotBelt }), outputRaft: newBoolean(LANG.fr_nabl_s, onBooleanClick, {title:LANG.fr_nabl_l, trigger, show:() => isNotBelt()}), - outputDraftShield: newBoolean(LANG.fr_draf_s, onBooleanClick, {title:LANG.fr_draf_l, trigger, show:() => isNotBelt()}), _____: newGroup(LANG.ou_menu, $('fdm-output'), { modes:FDM, driven, hideable, separator, group:"fdm-out" }), outputFeedrate: newInput(LANG.ou_feed_s, {title:LANG.ou_feed_l, convert:toInt}), outputFinishrate: newInput(LANG.ou_fini_s, {title:LANG.ou_fini_l, convert:toInt}), diff --git a/src/kiri/mode/fdm/post.js b/src/kiri/mode/fdm/post.js index b910958a..88168a09 100644 --- a/src/kiri/mode/fdm/post.js +++ b/src/kiri/mode/fdm/post.js @@ -82,12 +82,9 @@ export function slicePost(data, options) { let trg = shellFrac > 0.5 ? 1 : parts - 1; sliceShells += rem >= trg ? 1 : 0; } - const isFirst = index === 0; - const height = process.sliceHeight; - const spaceMult = isFirst ? process.firstLayerLineMult || 1 : 1; const count = isSynth ? 1 : sliceShells; - const offset = shellOffset * spaceMult; - const fillOff = fillOffset * spaceMult; + const offset = shellOffset; + const fillOff = fillOffset; const thinType = isSynth ? undefined : process.sliceDetectThin; const nutops = []; // co-locate shell processing with top generation in slicer diff --git a/src/kiri/mode/fdm/prepare.js b/src/kiri/mode/fdm/prepare.js index 1a46dea0..62352eb0 100644 --- a/src/kiri/mode/fdm/prepare.js +++ b/src/kiri/mode/fdm/prepare.js @@ -683,7 +683,6 @@ export async function fdm_prepare(widgets, settings, update) { for (let rec of layer) { overate = rec.overate >= 0 ? rec.overate : overate; let brate = params.firstLayerRate || firstLayerRate; - let bmult = params.firstLayerPrintMult || params.firstLayerPrintMult; let point = rec.point; let belty = rec.belty = -point.y + (point.z * belt.slope); let lowrate = belty <= thresh ? brate : overate || brate; @@ -695,7 +694,6 @@ export async function fdm_prepare(widgets, settings, update) { if (rec.emit && belty <= thresh && lastout && Math.abs(lastout.belty - belty) < 0.01) { // apply base speed to segments touching belt rec.speed = params.firstLayerRate || Math.min(rec.speed, lowrate); - rec.emit *= bmult; rec.fan = params.firstLayerFanSpeed; minx = Math.min(minx, point.x, lastout.point.x); maxx = Math.max(maxx, point.x, lastout.point.x); @@ -831,7 +829,6 @@ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) { fanSpeed = process.outputFanSpeed, firstShellSpeed = process.firstLayerRate, firstFillSpeed = process.firstLayerFillRate, - firstPrintMult = process.firstLayerPrintMult, finishSpeed = firstLayer ? firstShellSpeed : (opt.speed || process.outputFinishrate), printSpeed = opt.speed || (firstLayer ? firstShellSpeed : process.outputFeedrate), fillSpeed = opt.speed || opt.fillSpeed || (firstLayer ? firstFillSpeed || firstShellSpeed : process.outputFeedrate), @@ -882,13 +879,6 @@ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) { printSpeed /= 2; } - // apply first layer extrusion multipliers - if (firstLayer) { - fillMult *= firstPrintMult; - shellMult *= firstPrintMult; - sparseMult *= firstPrintMult; - } - function retract() { let array = preout.length ? preout : output; if (array.length) { diff --git a/src/kiri/mode/fdm/slice.js b/src/kiri/mode/fdm/slice.js index 9bda3df8..5bc215da 100644 --- a/src/kiri/mode/fdm/slice.js +++ b/src/kiri/mode/fdm/slice.js @@ -498,7 +498,6 @@ export function fdm_slice(settings, widget, onupdate, ondone) { // just the top/bottom special solid layers or range defined solid layers forSlices(0.15, 0.2, slice => { let range = slice.params; - let spaceMult = slice.index === 0 ? process.firstLayerLineMult || 1 : 1; let isBottom = slice.index < bottomLayers; let isTop = topLayers && slice.index > slices.length - topLayers - 1; let isTopBase = isTop && slice.index === slices.length - topLayers; @@ -506,7 +505,7 @@ export function fdm_slice(settings, widget, onupdate, ondone) { let isSolid = (isBottom || ((isTop || isDense) && !vaseMode)) && !isSynth; let solidWidth = isSolid ? range.sliceFillWidth || 1 : 0; if (solidWidth) { - let fillSpace = fillSpacing * spaceMult * solidWidth; + let fillSpace = fillSpacing * solidWidth; doSolidLayerFill(slice, fillSpace, sliceFillAngle); } if (slice.index === slices.length - 1) { @@ -755,8 +754,7 @@ export function fdm_slice(settings, widget, onupdate, ondone) { let params = slice.params || process; let first = slice.index === 0; let solidWidth = params.sliceFillWidth || 1; - let spaceMult = first ? params.firstLayerLineMult || 1 : 1; - let fillSpace = fillSpacing * spaceMult * solidWidth; + let fillSpace = fillSpacing * solidWidth; let solidMinArea = params.sliceSolidMinArea; doSolidsFill(slice, fillSpace, sliceFillAngle, solidMinArea, promises); sliceFillAngle = (sliceFillAngle + 90.0) % 360; From e614c34998bccd7cf479eaaee4922606feece6ce Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 17 Oct 2025 01:08:30 -0400 Subject: [PATCH 047/151] remove confusing/unused fill speed parameters, rename other params for clarity --- src/kiri/core/conf.js | 2 -- src/kiri/mode/fdm/client.js | 2 -- src/kiri/mode/fdm/init-menu.js | 5 +---- src/kiri/mode/fdm/prepare.js | 7 +------ web/kiri/lang/en.js | 12 ++++++------ 5 files changed, 8 insertions(+), 20 deletions(-) diff --git a/src/kiri/core/conf.js b/src/kiri/core/conf.js index df9fd4c4..83c02e83 100644 --- a/src/kiri/core/conf.js +++ b/src/kiri/core/conf.js @@ -318,7 +318,6 @@ export const conf = { sliceFillAngle: 45, sliceFillGrow: 0, sliceFillOverlap: 0.35, - sliceFillRate: 0, sliceFillRepeat: 1, sliceFillSparse: 0.25, sliceFillType: "hex", @@ -332,7 +331,6 @@ export const conf = { sliceShellOrder: "in-out", sliceShells: 3, sliceSolidMinArea: 1, - sliceSolidRate: 0, sliceSupportAngle: 50, sliceSupportArea: 0.1, sliceSupportDensity: 0.1, diff --git a/src/kiri/mode/fdm/client.js b/src/kiri/mode/fdm/client.js index 9fdbb6b0..466856f9 100644 --- a/src/kiri/mode/fdm/client.js +++ b/src/kiri/mode/fdm/client.js @@ -34,9 +34,7 @@ export function init() { "sliceFillType": LANG.fi_type, "sliceFillWidth": LANG.fi_wdth_s, "sliceFillSparse": LANG.fi_pcnt_s, - "sliceFillRate": LANG.ou_feed_s, "sliceFillGrow": LANG.fi_grow_s, - "sliceSolidRate": LANG.ou_fini_s, "sliceSolidMinArea": LANG.ad_msol_s, "sliceTopLayers": LANG.sl_ltop_s, "sliceBottomLayers": LANG.sl_lbot_s, diff --git a/src/kiri/mode/fdm/init-menu.js b/src/kiri/mode/fdm/init-menu.js index 44da3b9c..453d83da 100644 --- a/src/kiri/mode/fdm/init-menu.js +++ b/src/kiri/mode/fdm/init-menu.js @@ -79,6 +79,7 @@ export function menu() { _____: newGroup(LANG.sw_menu, $('fdm-walls'), { modes:FDM, driven, hideable, separator, group:"fdm-walls" }), sliceShells: newInput(LANG.sl_shel_s, { title:LANG.sl_shel_l, convert:toFloat }), sliceLineWidth: newInput(LANG.sl_line_s, { title:LANG.sl_line_l, convert:toFloat, bound:bound(0,5) }), + sliceFillOverlap: newInput(LANG.fi_over_s, {title:LANG.fi_over_l, convert:toFloat, bound:bound(0.0,1.0)}), separator: newBlank({ class:"set-sep", driven }), sliceShellOrder: newSelect(LANG.sl_ordr_s, { title:LANG.sl_ordr_l}, "shell"), sliceDetectThin: newSelect(LANG.ad_thin_s, { title: LANG.ad_thin_l, action: thinWallSave }, "thin"), @@ -86,16 +87,12 @@ export function menu() { sliceZInterleave: newBoolean(LANG.ad_zint_s, onBooleanClick, {title:LANG.ad_zint_l, show:zIntShow}), _____: newGroup(LANG.fs_menu, $('fdm-solid'), { modes:FDM, driven, hideable, separator, group:"fdm-solid" }), sliceFillAngle: newInput(LANG.fi_angl_s, {title:LANG.fi_angl_l, convert:toFloat}), - sliceFillOverlap: newInput(LANG.fi_over_s, {title:LANG.fi_over_l, convert:toFloat, bound:bound(0.0,2.0)}), sliceFillGrow: newInput(LANG.fi_grow_s, {title:LANG.fi_grow_l, convert:toFloat}), sliceSolidMinArea: newInput(LANG.ad_msol_s, {title:LANG.ad_msol_l, convert:toFloat}), _____: newGroup(LANG.fi_menu, $('fdm-fill'), { modes:FDM, driven, hideable, separator, group:"fdm-fill" }), sliceFillType: newSelect(LANG.fi_type, {trigger}, "infill"), sliceFillSparse: newInput(LANG.fi_pcnt_s, {title:LANG.fi_pcnt_l, convert:toFloat, bound:bound(0.0,1.0), show:hasInfill}), sliceFillRepeat: newInput(LANG.fi_rept_s, {title:LANG.fi_rept_l, convert:toInt, bound:bound(1,10), show:fillIsLinear}), - separator: newBlank({ class:"set-sep", driven }), - sliceFillRate: newInput(LANG.ou_feed_s, {title:LANG.ou_feed_l, convert:toInt, bound:bound(0,500)}), - sliceSolidRate: newInput(LANG.ou_fini_s, {title:LANG.ou_fini_l, convert:toInt, bound:bound(0,500)}), _____: newGroup(LANG.fh_menu, $('fdm-heat'), { modes:FDM, driven, hideable, separator, group:"fdm-heat" }), outputTemp: newInput(LANG.ou_nozl_s, {title:LANG.ou_nozl_l, convert:toInt}), outputBedTemp: newInput(LANG.ou_bedd_s, {title:LANG.ou_bedd_l, convert:toInt}), diff --git a/src/kiri/mode/fdm/prepare.js b/src/kiri/mode/fdm/prepare.js index 62352eb0..680cc075 100644 --- a/src/kiri/mode/fdm/prepare.js +++ b/src/kiri/mode/fdm/prepare.js @@ -832,7 +832,7 @@ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) { finishSpeed = firstLayer ? firstShellSpeed : (opt.speed || process.outputFinishrate), printSpeed = opt.speed || (firstLayer ? firstShellSpeed : process.outputFeedrate), fillSpeed = opt.speed || opt.fillSpeed || (firstLayer ? firstFillSpeed || firstShellSpeed : process.outputFeedrate), - infillSpeed = process.sliceFillRate || opt.infillSpeed || fillSpeed || printSpeed, + infillSpeed = opt.infillSpeed || fillSpeed || printSpeed, moveSpeed = process.outputSeekrate, minSpeed = process.outputMinSpeed, origin = startPoint.add(offset), @@ -863,11 +863,6 @@ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) { shellOrder = -shellOrder; } - // update fill speed when solids detected - if (slice.finishSolids) { - fillSpeed = process.sliceSolidRate || finishSpeed; - } - // on flats layers also slow down shell print speed if (slice.isFlatsLayer) { printSpeed = finishSpeed || printSpeed; diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index c73e00ca..da85f39a 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -356,7 +356,7 @@ self.lang['en-us'] = { ad_thin_l: ["detect and fill gaps","between shell walls"], // FDM SHELLS - sl_line_s: "shell width", + sl_line_s: "line width", sl_line_l: ["extrusion width in millimeters","0 = nozzle diameter"], sl_ordr_s: "shell order", sl_ordr_l: ["output shell order","inside to outside","or outside to inside","affects surface quality"], @@ -369,8 +369,8 @@ self.lang['en-us'] = { // FDM SOLID fs_menu: "solid fill", - fi_over_s: "shell overlap", - fi_over_l: ["overlap with shell and other fill","for improved extrusion bonding","as fraction of nozzle diameter","0.0 - 2.0"], + fi_over_s: "fill overlap", + fi_over_l: ["overlap between shells and solid or sparse infill. can improve bonding to shells","as fraction of line width","0.0 - 1.0"], fi_angl_s: "start angle", fi_angl_l: ["starting angle in degrees","90 degrees added to ","each following layer","applies only to solid layers"], fi_grow_s: "area expand", @@ -393,7 +393,7 @@ self.lang['en-us'] = { fc_menu: "cooling", // FDM FIRST LAYER - fl_menu: "base", + fl_menu: "base layer", fl_lahi_s: "layer height", fl_lahi_l: ["height of each slice","in millimeters","should be >= slice height"], fl_rate_s: "shell speed", @@ -864,8 +864,8 @@ self.lang['en-us'] = { ad_rdwl_l: ["time between re-engaging","filament and movement","in milliseconds"], ad_scst_s: "shell coast", ad_scst_l: ["non-printing end","of perimeter shells","in millimeters"], - ad_msol_s: "min area", - ad_msol_l: ["minimum area (mm^2)","required to keep solid","must be > 0.1"], + ad_msol_s: "area filter", + ad_msol_l: ["minimum area (mm^2)","bridges and flats less than this are culled"], ad_mins_s: "min speed", ad_mins_l: ["minimum speed","for short segments"], ad_maxf_s: "max flowrate", From 9c8c9ff30bdcabc49117367676b695d8c12b62c9 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 18 Oct 2025 01:03:58 -0400 Subject: [PATCH 048/151] add lathe start/end offset option, fix large step precision --- notes.md | 1 - src/kiri/core/conf.js | 2 ++ src/kiri/mode/cam/cl-ops.js | 7 ++++- src/kiri/mode/cam/topo4.js | 61 ++++++++++++++++++++++--------------- src/kiri/run/minion.js | 1 - src/moto/space.js | 2 -- web/kiri/lang/en.js | 10 +++--- 7 files changed, 49 insertions(+), 35 deletions(-) diff --git a/notes.md b/notes.md index 56c74577..e39f50d8 100644 --- a/notes.md +++ b/notes.md @@ -32,7 +32,6 @@ * `B` multi-extruder rendering of raft fails to offset the rest of the print * `B` multi-extruder purge blocks fail to generate properly for rafts -* `F` new parameter to cap output flow rate (on printer device) * `F` new parameters for bridging speed / bridge fan control * `F` convert ranges to z offsets while continuing to show layer # * `F` support pillar top/bottom should conform to part diff --git a/src/kiri/core/conf.js b/src/kiri/core/conf.js index 83c02e83..ae5512d5 100644 --- a/src/kiri/core/conf.js +++ b/src/kiri/core/conf.js @@ -497,6 +497,8 @@ export const conf = { camLatheSpeed: 500, camLatheSpindle: 1000, camLatheTool: 1000, + camLatheOffStart: 0, + camLatheOffEnd: 0, camLevelDown: 0, camLevelInset: 0.5, camLevelOver: 0.75, diff --git a/src/kiri/mode/cam/cl-ops.js b/src/kiri/mode/cam/cl-ops.js index eb9232dd..5d05ed31 100644 --- a/src/kiri/mode/cam/cl-ops.js +++ b/src/kiri/mode/cam/cl-ops.js @@ -350,7 +350,9 @@ export function createPopOps() { tolerance: 'camTolerance', filter: 'camContourFilter', leave: 'camContourLeave', - linear: 'camLatheLinear' + linear: 'camLatheLinear', + offStart: 'camLatheOffStart', + offEnd: 'camLatheOffEnd' }).inputs = { tool: UC.newSelect(LANG.cc_tool, {}, "tools"), // axis: UC.newSelect(LANG.cd_axis, {}, "xyaxis"), @@ -361,6 +363,9 @@ export function createPopOps() { step: UC.newInput(LANG.cc_sovr_s, { title: LANG.cc_sovr_l, convert: UC.toFloat, bound: UC.bound(0.01, 100.0) }), angle: UC.newInput(LANG.cc_sang_s, { title: LANG.cc_sang_l, convert: UC.toFloat, bound: UC.bound(0.01, 180.0) }), sep: UC.newBlank({ class: "pop-sep" }), + offStart: UC.newInput(LANG.ci_laso_s, { title: LANG.ci_laso_l, convert: UC.toFloat}), + offEnd: UC.newInput(LANG.ci_laeo_s, { title: LANG.ci_laeo_l, convert: UC.toFloat}), + sep: UC.newBlank({ class: "pop-sep" }), tolerance: UC.newInput(LANG.ou_toll_s, { title: LANG.ou_toll_l, convert: UC.toFloat, bound: UC.bound(0, 10.0), units: true, round: 4 }), leave: UC.newInput(LANG.cf_leav_s, { title: LANG.cf_leav_l, convert: UC.toFloat, bound: UC.bound(0, 100) }), sep: UC.newBlank({ class: "pop-sep" }), diff --git a/src/kiri/mode/cam/topo4.js b/src/kiri/mode/cam/topo4.js index 3a60e611..f29934c2 100644 --- a/src/kiri/mode/cam/topo4.js +++ b/src/kiri/mode/cam/topo4.js @@ -39,7 +39,7 @@ export class Topo { y: axis === "y" }, tolerance = op.tolerance, - resolution = tolerance ? tolerance : 1 / Math.sqrt(density / (span.x * span.y)), + resolution = (tolerance ? tolerance : 1 / Math.sqrt(density / (span.x * span.y))).round(5), step = this.step = (tool.traceOffset() * 2) * op.step, angle = this.angle = op.angle || 1; @@ -58,10 +58,13 @@ export class Topo { this.tool = tool.generateProfile(resolution).profile; this.maxo = tool.profileDim.maxo * resolution; this.diam = tool.fluteDiameter(); + this.unit = tool.unitScale(); this.zoff = widget.track.top || 0; this.leave = op.leave || 0; this.linear = op.linear || false; this.lineColor = state.settings.controller.dark ? 0xffff00 : 0x555500; + this.offStart = op.offStart ?? 0; + this.offEnd = op.offEnd ?? 0; onupdate(0, "lathe"); @@ -85,8 +88,8 @@ export class Topo { } async slice(onupdate) { - const { vertices, resolution, tabverts, zoff } = this; - + const { vertices, resolution, tabverts, zoff, offStart, offEnd, tool, unit } = this; + const { minions } = self.kiri_worker; const range = this.range = { min: Infinity, max: -Infinity }; const box = this.box = new THREE.Box2(); @@ -100,9 +103,10 @@ export class Topo { range.max = Math.max(range.max, x); } - // add tool radius to slice min/max range ot fully carve part - range.min -= this.diam / 2; - range.max += this.diam / 2; + // add tool diameter to slice min/max range to fully carve part + range.min += offStart * unit; + range.max -= offEnd * unit; + range.max += resolution * 2; // merge in tab vertices here so they don't affect slice range / dimensions for (let i = 0, l = tabverts.length; i < l; i += 3) { @@ -115,26 +119,31 @@ export class Topo { // re-create shared vertex array for workers this.vertices = [].appendAll(vertices).appendAll(tabverts).toFloat32().toShared(); + const zSpan = range.max - range.min; const shards = Math.ceil(Math.min(25, vertices.length / 27000)); - const step = (range.max - range.min) / shards; + const totalSteps = Math.ceil(zSpan / resolution); + const stardSteps = Math.ceil(totalSteps / shards); + const stepWidth = stardSteps * resolution; - let index = 0; let slices = this.slices = []; - let slice = { min: range.min, max: range.min + step, index }; - - // console.log({ shards, step, range, resolution }); - for (let z = range.min; z <= range.max; z += resolution) { - // console.log({ z }); - if (z > slice.max) { - slices.push(slice); - slice = { min: z, max: z + step, index }; - } - index++; + for (let i=0; i 1) { return await this.sliceMinions(onupdate); } else { @@ -218,10 +227,10 @@ export class Topo { const tlen = tool.length; const slen = slices.length; - const sinc = Math.max(1, Math.ceil(step / resolution)); const heights = []; - // cull slice lines to only the ones in range (5x faster) + // console.log({ tlen, slen, sinc, slices: slices.map(s => s.z) }); + // cull slice lines to only the ones in range (~5x faster) const oslices = []; for (let slice of slices) { const lines = slice.lines; @@ -245,7 +254,9 @@ export class Topo { // iterate over all slices (real x = z) // find max real z using z ray intersect from tool point to slice lines + offset let lz = 0; - for (let si = 0; si < slen; si += sinc) { + for (let sz = 0; ; sz += step) { + let si = Math.ceil(sz / resolution); + if (si >= oslices.length) break; const rx = oslices[si].z; let mz = -Infinity; // iterate over tool offsets @@ -282,7 +293,7 @@ export class Topo { } if (mz === -Infinity && xo === 0 && yo === 0) { // tool tip is off the model - continue; + // continue; } } if (mz === -Infinity) { diff --git a/src/kiri/run/minion.js b/src/kiri/run/minion.js index ae1c2920..412da396 100644 --- a/src/kiri/run/minion.js +++ b/src/kiri/run/minion.js @@ -315,7 +315,6 @@ const funcs = self.minion = { const topo4 = Object.assign(new Topo4(), cache.lathe); const heights = topo4.lathePath(stmp, tool); - reply({ seq, heights }); } }; diff --git a/src/moto/space.js b/src/moto/space.js index 8aa5047d..45101885 100644 --- a/src/moto/space.js +++ b/src/moto/space.js @@ -98,7 +98,6 @@ let WIN = self.window || {}, fontColor = '#333333', fontScale = 1.4, // computed relative to grid size rulerColor, - axisColor, axesOn = true, volumeOn = true, viewControl, @@ -388,7 +387,6 @@ function setPlatformColor(color) { function setFont(options) { if (options.color) fontColor = options.color; if (options.scale) fontScale = options.scale; - if (options.axisColor) axisColor = options.axisColor; if (options.rulerColor) rulerColor = options.rulerColor; updateRulers(); } diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index da85f39a..ea00c48b 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -393,7 +393,7 @@ self.lang['en-us'] = { fc_menu: "cooling", // FDM FIRST LAYER - fl_menu: "base layer", + fl_menu: "base", fl_lahi_s: "layer height", fl_lahi_l: ["height of each slice","in millimeters","should be >= slice height"], fl_rate_s: "shell speed", @@ -654,6 +654,10 @@ self.lang['en-us'] = { ci_face_l: "select face to rotate facing up", ci_line_s: "linear", ci_line_l: "make linear passes along X then rotate Y", + ci_laso_s: "offset start", + ci_laso_l: ["x offet from left of part. negative values are outside of the part. in workspace units"], + ci_laeo_s: "offset end", + ci_laeo_l: ["x offet from right of part. negative values are outside of the part. in workspace units"], // CNC LASER On/Off Operations (Carvera) cl_powr_s: "power", @@ -675,10 +679,6 @@ self.lang['en-us'] = { cl_maxz_s: "max z height", cl_maxz_l: ["highest Z band position. when set to 0, uses the highest Z point of the workspace"], - - - - // CNC CUTOUT TABS ct_menu: "tabs", ct_angl_s: "angle", From 9123a70b7b8a280e6a318b760268a55b6fc7584f Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 18 Oct 2025 11:55:12 -0400 Subject: [PATCH 049/151] add compression caching to bundler --- bin/bundler.mjs | 46 ++++++++++++++++++++++++++++++++++------------ package.json | 6 +++--- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/bin/bundler.mjs b/bin/bundler.mjs index e0628abf..e63aba3e 100644 --- a/bin/bundler.mjs +++ b/bin/bundler.mjs @@ -56,6 +56,20 @@ const dataParts = []; const entryMeta = []; let offset = 0; let cache = new Map(); +let compEnable = (envcomp ?? compress); +let cacheDir = cfg.cacheDir ?? ".bcache"; + +if (compEnable) { + fs.mkdirSync(cacheDir, { recursive: true }); +} + +function fileTime(path) { + try { + return (fs.statSync(path).ctimeMs/1000) | 0; + } catch (e) { + return 0; + } +} for (const { file, virt } of entries) { if (excludes.indexOf(file) >= 0) { @@ -68,20 +82,28 @@ for (const { file, virt } of entries) { } else { if (debug) console.log({ write: virt, from: file }); let data = fs.readFileSync(file); - if ((envcomp ?? compress) && file.endsWith("js")) { - console.log('compress', file); - data = uglify.minify(data.toString(), { - compress: { - merge_vars: false, - unused: false + if (compEnable && file.endsWith("js")) { + let cpath = path.resolve(cacheDir, file); + if (fileTime(cpath) > fileTime(file)) { + data = fs.readFileSync(cpath); + console.log('cached', file); + } else { + console.log('compress', file); + data = uglify.minify(data.toString(), { + compress: { + merge_vars: false, + unused: false + } + }); + // console.log({ to: typeof(data), data }); + if (!data.code) { + if (debug) console.log({ skip: file }); + continue; } - }); - // console.log({ to: typeof(data), data }); - if (!data.code) { - if (debug) console.log({ skip: file }); - continue; + data = Buffer.from(data.code); + fs.mkdirSync(path.dirname(cpath), { recursive: true }); + fs.writeFileSync(cpath, data); } - data = Buffer.from(data.code); } record = { virt, offset, length: data.length }; cache.set(file, record); diff --git a/package.json b/package.json index 0720297b..ef499c79 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "webpack-cli": "^5.1.4" }, "scripts": { - "setup": "npm run setup-mods && npm i && npm run clean && npm run dev -- --dryrun && npm run webpack-ext", + "setup": "npm run setup-mods && npm i && npm run clean && npm run dev -- --alt --dryrun && npm run webpack-ext", "setup-mods": "cd mods && npm i", "build": "npm run prebuild && electron-builder", "build-nopublish": "npm run prebuild && electron-builder --publish never", @@ -92,13 +92,13 @@ "build-win-arm": "npm run build -- --win --arm64", "build-mac": "npm run build -- --mac --arm64", "build-mac-intel": "npm run build -- --mac --x64", - "clean": "rm -rf build data dist src/pack tmp src.old web.old", + "clean": "rm -rf build data dist src/pack tmp src.old web.old .bcache", "docs-dev": "docusaurus start --config conf/docusaurus.config.js", "docs-build": "docusaurus build --config conf/docusaurus.config.js", "docs-serve": "docusaurus serve --config conf/docusaurus.config.js", "docs-check": "prettier --config ./conf/prettier.config.js ./docs --check", "dev": "npm run webpack-ext && gs-app-server --debug --single", - "prod": "npm run webpack-ext && npm run webpack-src prod && gs-app-server", + "prod": "npm run webpack-ext && npm run webpack-src prod && COMPRESS=1 node bin/bundler.mjs && gs-app-server", "prod-pack": "npm run webpack-ext && npm run webpack-src prod", "prod-dryrun": "gs-app-server --dryrun", "start": "npm run prebuild prod && electron .", From 3fb36a2254710ba1e65f7e24168c5295e0c7aa9c Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 18 Oct 2025 12:14:24 -0400 Subject: [PATCH 050/151] bump rev 4.3.4 --- package.json | 2 +- src/moto/license.js | 2 +- web/kiri/manifest.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index ef499c79..49b5b331 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grid-apps", - "version": "4.3.3", + "version": "4.3.4", "description": "grid.space 3d slicing & modeling tools", "author": "Stewart Allen ", "license": "MIT", diff --git a/src/moto/license.js b/src/moto/license.js index f3975212..669e0eb7 100644 --- a/src/moto/license.js +++ b/src/moto/license.js @@ -3,7 +3,7 @@ const terms = { COPYRIGHT: "Copyright (C) Stewart Allen - All Rights Reserved", LICENSE: "See the license.md file included with the source distribution", - VERSION: "4.3.3" + VERSION: "4.3.4" }; export const beta = 0; diff --git a/web/kiri/manifest.json b/web/kiri/manifest.json index 0f24310a..5d913d11 100644 --- a/web/kiri/manifest.json +++ b/web/kiri/manifest.json @@ -1,5 +1,5 @@ { - "name": "Kiri:Moto 4.3.3", + "name": "Kiri:Moto 4.3.4", "short_name": "Kiri:Moto", "description": "Slicer for 3D printers, CNC mills, laser cutters and more", "start_url": "/kiri/", From 50811b306d23a3e39fcc559e0c5d9107c0168c74 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 20 Oct 2025 23:34:32 -0400 Subject: [PATCH 051/151] adjust cam ops add hover bg dark. exclude belt from bridge fan layer --- src/kiri/mode/fdm/prepare.js | 2 +- web/kiri/index.css | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/kiri/mode/fdm/prepare.js b/src/kiri/mode/fdm/prepare.js index 680cc075..8cfde6e8 100644 --- a/src/kiri/mode/fdm/prepare.js +++ b/src/kiri/mode/fdm/prepare.js @@ -1635,7 +1635,7 @@ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) { print.addPrintPoints(preout, output); // bridge layer fan change - if (preout.length && slice.isBridgeLayer) { + if (!isBelt && preout.length && slice.isBridgeLayer) { preout[0].fan = Math.round(fanSpeed / 3); preout.peek().fan = fanSpeed; } diff --git a/web/kiri/index.css b/web/kiri/index.css index efc8c86d..a3a2f596 100644 --- a/web/kiri/index.css +++ b/web/kiri/index.css @@ -1530,6 +1530,10 @@ details[open] summary::after { border-radius: 3px; text-align: center; } +.dark #op-add-list > div:hover { + color: black; + background-color: var(--blue-2) !important; +} #op-add-list > div:hover { background-color: var(--blue-4); } @@ -1538,9 +1542,6 @@ details[open] summary::after { right: 0; top: 0; } -#cam-lathe:hover { - background-color: rgba(0,0,0,0) !important; -} #progress { left: 0; From 86864954800b3e141ce595921d7706840115668a Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 21 Oct 2025 00:42:03 -0400 Subject: [PATCH 052/151] fixes #438 belt fan control order --- src/kiri/mode/fdm/export.js | 16 +++++++++------- src/kiri/mode/fdm/prepare.js | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/kiri/mode/fdm/export.js b/src/kiri/mode/fdm/export.js index a65d6ca9..4b17bd32 100644 --- a/src/kiri/mode/fdm/export.js +++ b/src/kiri/mode/fdm/export.js @@ -607,7 +607,9 @@ export function fdm_export(print, online, ondone, ondebug) { for (pidx=0; pidx Date: Fri, 24 Oct 2025 23:56:06 -0400 Subject: [PATCH 053/151] add mesh script tool --- src/main/mesh.js | 27 +++++++++++++++++++++++++-- src/mesh/api.js | 10 +++++++--- src/mesh/build.js | 7 ++++++- src/mesh/script.js | 31 +++++++++++++++++++++++++++++++ web/mesh/index.css | 24 ++++++++++++++++++++++++ 5 files changed, 93 insertions(+), 6 deletions(-) create mode 100644 src/mesh/script.js diff --git a/src/main/mesh.js b/src/main/mesh.js index aaae2bee..37306d62 100644 --- a/src/main/mesh.js +++ b/src/main/mesh.js @@ -224,7 +224,11 @@ function space_init(data) { if (evt.key === '?') { return api.welcome(version); } - let { shiftKey, metaKey, ctrlKey, code } = evt; + let { shiftKey, metaKey, ctrlKey, code, target } = evt; + if (target.nodeName === 'TEXTAREA') { + api.script.changed(); + return; + } switch (code) { case 'Digit1': return api.mode.sketch(); @@ -286,7 +290,26 @@ function space_init(data) { } }, 'keydown', evt => { - let { shiftKey, metaKey, ctrlKey, code } = evt; + let { shiftKey, metaKey, ctrlKey, code, target } = evt; + if (target.nodeName === 'TEXTAREA') { + if (code === 'Tab') { + estop(evt); + const start = target.selectionStart; + const end = target.selectionEnd; + const val = target.value; + const upto = val.slice(0, start); + const col = start - upto.lastIndexOf('\n') - 1; + const tab = ' '.substring(col % 4); + target.value = val.slice(0, start) + tab + val.slice(end); + target.selectionStart = target.selectionEnd = start + tab.length; + } + if (code === 'Enter' && metaKey) { + api.script.execute(); + } else { + api.script.changed(); + } + return; + } let once = keyOnce[code]; if (once) { delete keyOnce[code]; diff --git a/src/mesh/api.js b/src/mesh/api.js index baf7fe78..4567d6fd 100644 --- a/src/mesh/api.js +++ b/src/mesh/api.js @@ -11,6 +11,7 @@ import { edges as meshEdges } from './edges.js'; import { group as meshGroup } from './group.js'; import { model as meshModel } from './model.js'; import { sketch as meshSketch } from './sketch.js'; +import { script } from './script.js'; import { newPolygon } from '../geo/polygon.js'; import { THREE } from '../ext/three.js'; import { $, $C, h } from '../moto/webui.js'; @@ -771,11 +772,12 @@ let add = { }, cube() { + const [ x,y,z ] = [ ...arguments ]; const box = new THREE.BoxGeometry(1,1,1).toNonIndexed(); const vert = box.attributes.position.array; const nmdl = new meshModel({ file: "box", mesh: vert }); const ngrp = api.group.new([ nmdl ]); - ngrp.scale(10, 10, 10).floor(); + ngrp.scale(x ?? 10, y ?? 10, z ?? 10).floor(); selection.set([ nmdl ]); return ngrp; }, @@ -1515,8 +1517,8 @@ const api = { }, clear() { - for (let group of group.list()) { - group.remove(group); + for (let grp of group.list()) { + group.remove(grp); } }, @@ -1645,6 +1647,8 @@ const api = { prefs, + script, + selection, sketch, diff --git a/src/mesh/build.js b/src/mesh/build.js index d4ea9918..3259f49c 100644 --- a/src/mesh/build.js +++ b/src/mesh/build.js @@ -383,7 +383,7 @@ function menu_item(text, fn, short, id) { // create html elements function ui_build() { - let { bind, div, input, hr, label } = h; + let { bind, div, input, hr, label, textarea } = h; let { file, selection, mode, tool, sketch, prefs, add } = api; let trash = FontAwesome.icon({ prefix: "fas", iconName: "trash" }).html[0]; let eye_open = FontAwesome.icon({ prefix: "fas", iconName: "eye" }).html[0]; @@ -402,6 +402,7 @@ function ui_build() { menu_item('Export', file.export, 'X'), hr(), menu_item('Slicer', api.kirimoto), + menu_item('Script', api.script.toggle), hr(), menu_item('Close', window.close), ]) @@ -579,6 +580,10 @@ function ui_build() { div({ id: 'objecttools', class: "tools sketch-off" }), div({ id: 'logger', onmouseover() { log.show() } }), ]), + div({ id: 'script', class: "hide" }, [ + div({ id: 'script-header', _: "script" }), + textarea({ id: 'script-editor', rows: 20, cols: 60 }), + ]), div({ id: 'grouplist' }), div({ id: 'selectlist' }), div({ id: 'download', class: "hide" }) diff --git a/src/mesh/script.js b/src/mesh/script.js new file mode 100644 index 00000000..98085992 --- /dev/null +++ b/src/mesh/script.js @@ -0,0 +1,31 @@ +/** Copyright Stewart Allen -- All Rights Reserved */ + +import { api } from '../mesh/api.js'; +import { $, h, estop } from '../moto/webui.js'; + +export const script = { + visible: false, + changed() { + localStorage.script = $('script-editor').value; + }, + hide() { + $('script').classList.add('hide'); + script.visible = false; + }, + show() { + $('script').classList.remove('hide'); + $('script-editor').value = localStorage.script ?? ''; + script.visible = true; + }, + toggle() { + if (script.visible) { + script.hide(); + } else { + script.show(); + } + }, + execute() { + let cmd = localStorage.script || `console.log('no script')`; + if (cmd) eval(`{ ${cmd} }`); + } +}; diff --git a/web/mesh/index.css b/web/mesh/index.css index 0c3dc2b4..b69a1ca4 100644 --- a/web/mesh/index.css +++ b/web/mesh/index.css @@ -629,6 +629,30 @@ button:hover { display: grid; } +#script { + margin-left: 5px; + flex-direction: column; + justify-content: end; + color: white; +} + +#script-header { + padding: 3px 5px 3px 5px; + background-color: #333; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-top: 1px solid #999; + border-left: 1px solid #999; + border-right: 1px solid #999; + flex-direction: row; +} + +#script-editor { + color: white; + background-color: #222; + outline: none; +} + /** group/model buttons top/right of workspace **/ #grouplist { From 485b31e5c5a5d8d554c563a544d2bce987cd7c3f Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 25 Oct 2025 00:19:46 -0400 Subject: [PATCH 054/151] fix script newline --- src/mesh/build.js | 2 +- src/mesh/script.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mesh/build.js b/src/mesh/build.js index 3259f49c..94cb9c94 100644 --- a/src/mesh/build.js +++ b/src/mesh/build.js @@ -582,7 +582,7 @@ function ui_build() { ]), div({ id: 'script', class: "hide" }, [ div({ id: 'script-header', _: "script" }), - textarea({ id: 'script-editor', rows: 20, cols: 60 }), + textarea({ id: 'script-editor', rows: 30, cols: 60 }), ]), div({ id: 'grouplist' }), div({ id: 'selectlist' }), diff --git a/src/mesh/script.js b/src/mesh/script.js index 98085992..61e6ba46 100644 --- a/src/mesh/script.js +++ b/src/mesh/script.js @@ -26,6 +26,6 @@ export const script = { }, execute() { let cmd = localStorage.script || `console.log('no script')`; - if (cmd) eval(`{ ${cmd} }`); + if (cmd) eval(`{ \n ${cmd} \n }`); } }; From 9c58f0569253359c9f443e4975d475d17b97ebd1 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 25 Oct 2025 18:25:21 -0400 Subject: [PATCH 055/151] add plane and plane.loft --- src/mesh/api.js | 42 ++++++++++++++++++++++++++++++++++++++++++ src/mesh/build.js | 2 +- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/mesh/api.js b/src/mesh/api.js index 4567d6fd..3cfb134a 100644 --- a/src/mesh/api.js +++ b/src/mesh/api.js @@ -771,6 +771,48 @@ let add = { api.modal.bound.genvrt.focus(); }, + plane() { + const [ x,y ] = [ ...arguments ]; + const box = new THREE.PlaneGeometry(1,1).toNonIndexed(); + const vert = box.attributes.position.array; + const nmdl = new meshModel({ file: "plane", mesh: vert }); + nmdl._loft = function(plane) { + function uv(v) { + let m = new Set(); + let g = [...v].group(3).filter(a => { + let k = a.map(v => v.round(5)).join('-'); + if (m.has(k)) return false; + m.add(k); return true; + }); + return [ g[0], g[1], g[3], g[2] ]; + }; + let s0 = uv(vert); + let s1 = uv(plane.attributes.position.array); + let v = []; + for (let i=0; i<4; i++) { + let p0 = [ s0[i], s0[(i+1)%4] ]; + let p1 = [ s1[i], s1[(i+1)%4] ]; + v.push(...p1[1]); + v.push(...p0[1]); + v.push(...p0[0]); + v.push(...p1[0]); + v.push(...p1[1]); + v.push(...p0[0]); + } + let pa = [...plane.attributes.position.array]; + v.push(...pa.group(3).reverse().flat()); + v.push(...vert); + const nmdl = new meshModel({ file: "loft", mesh: v.toFloat32() }); + const ngrp = api.group.new([ nmdl ]); + selection.set([ nmdl ]); + return ngrp; + }; + const ngrp = api.group.new([ nmdl ]); + ngrp.scale(x ?? 10, y ?? 10, 1).floor(); + selection.set([ nmdl ]); + return ngrp; + }, + cube() { const [ x,y,z ] = [ ...arguments ]; const box = new THREE.BoxGeometry(1,1,1).toNonIndexed(); diff --git a/src/mesh/build.js b/src/mesh/build.js index 94cb9c94..97e886ed 100644 --- a/src/mesh/build.js +++ b/src/mesh/build.js @@ -582,7 +582,7 @@ function ui_build() { ]), div({ id: 'script', class: "hide" }, [ div({ id: 'script-header', _: "script" }), - textarea({ id: 'script-editor', rows: 30, cols: 60 }), + textarea({ id: 'script-editor', rows: 50, cols: 60 }), ]), div({ id: 'grouplist' }), div({ id: 'selectlist' }), From ac7e37b225ccf55f0fac56c88e07d36d9d9eb76a Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 25 Oct 2025 22:13:54 -0400 Subject: [PATCH 056/151] allow better scripting --- src/mesh/api.js | 9 ++++++--- src/mesh/group.js | 5 +++++ src/mesh/model.js | 1 + src/mesh/script.js | 9 ++++++++- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/mesh/api.js b/src/mesh/api.js index 3cfb134a..a3d87fa5 100644 --- a/src/mesh/api.js +++ b/src/mesh/api.js @@ -80,6 +80,7 @@ const selection = { selected = objects.map(o => o.models ? o.models : o).flat(); tools = toolist || []; meshUtil.defer(selection.update); + return api.selection; }, // @param group {MeshObject} @@ -1028,7 +1029,7 @@ const tool = { return log('nothing to merge'); } log(`merging ${models.length} models`).pin(); - worker.model_merge(models.map(m => { + return worker.model_merge(models.map(m => { return { id: m.id, matrix: m.matrix } })) .then(data => { @@ -1039,6 +1040,7 @@ const tool = { api.selection.visible(false); api.selection.set([group]); log('merge complete').unpin(); + return group; }); }, @@ -1118,7 +1120,7 @@ const tool = { return log('nothing to subtract'); } log(`subtract ${models.length} models`).pin(); - worker.model_subtract(models.map(m => { + return worker.model_subtract(models.map(m => { return { id: m.id, tool: m.tool() } })) .then(data => { @@ -1128,6 +1130,7 @@ const tool = { })]).promote(); api.selection.delete(); api.selection.set([group]); + return group; }) .catch(error => { log(`subtract error: ${error}`); @@ -1150,7 +1153,7 @@ const tool = { for (let m of models) { nm.push(m.duplicate({ select: dup_sel, shift: dup_shift })); } - tool.regroup(nm); + return tool.regroup(nm); }, mirror() { diff --git a/src/mesh/group.js b/src/mesh/group.js index 37ec9077..e8d5035d 100644 --- a/src/mesh/group.js +++ b/src/mesh/group.js @@ -41,6 +41,11 @@ class MeshGroup extends meshObject { return box3; } + rename(name) { + this.name = name; + return this; + } + // @param model {MeshModel} add(model) { model.group = this; diff --git a/src/mesh/model.js b/src/mesh/model.js index 70a5a92d..fd0655b5 100644 --- a/src/mesh/model.js +++ b/src/mesh/model.js @@ -334,6 +334,7 @@ class MeshModel extends meshObject { rename(file) { this.file = file; this.sync(); + return this; } // sync to worker and indexeddb for page restoration or worker ops diff --git a/src/mesh/script.js b/src/mesh/script.js index 61e6ba46..31e19498 100644 --- a/src/mesh/script.js +++ b/src/mesh/script.js @@ -26,6 +26,13 @@ export const script = { }, execute() { let cmd = localStorage.script || `console.log('no script')`; - if (cmd) eval(`{ \n ${cmd} \n }`); + if (cmd) { + cmd = [ + '(async () => {', + cmd, + '})();' + ].join('\n'); + eval(`{ \n ${cmd} \n }`); + } } }; From d45666dd27f55a59c346238af6347a0e515453bc Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 25 Oct 2025 23:37:40 -0400 Subject: [PATCH 057/151] add mesh:tool step export --- src/load/step.js | 226 +++++++++++++++++++++++++++++++++++++++++++++++ src/mesh/api.js | 3 +- src/mesh/work.js | 13 +++ 3 files changed, 241 insertions(+), 1 deletion(-) create mode 100644 src/load/step.js diff --git a/src/load/step.js b/src/load/step.js new file mode 100644 index 00000000..e91afb3f --- /dev/null +++ b/src/load/step.js @@ -0,0 +1,226 @@ +/** Copyright Stewart Allen -- All Rights Reserved */ + +const { Vector3 } = THREE; + +/** + * Convert STL triangles to STEP file format + * + * @param {Array} triangles - Array of triangle objects with vertices: [{v1, v2, v3}, ...] + * where v1, v2, v3 are {x, y, z} objects or Vector3 instances + * @param {Object} options - Optional parameters + * @param {string} options.productName - Name for the STEP product (default: 'mesh') + * @param {string} options.units - Units: 'mm', 'cm', 'm', 'inch' (default: 'mm') + * @returns {string} STEP file content as a string + */ +export function meshToSTEP(triangles, options = {}) { + const productName = options.productName || 'mesh'; + const units = options.units || 'mm'; + + // Build vertex and triangle topology + const vertices = []; + const vertexMap = new Map(); // Map vertex coords to index + const faces = []; + + // Helper to find or add vertex + function getOrAddVertex(v) { + const vec = v instanceof Vector3 ? v : new Vector3(v.x, v.y, v.z); + + // Check if vertex already exists + for (let i = 0; i < vertices.length; i++) { + if (vertices[i].equals(vec)) { + return i; + } + } + + // Add new vertex + vertices.push(vec); + return vertices.length - 1; + } + + // Process triangles + for (const tri of triangles) { + const idx0 = getOrAddVertex(tri.v1 || tri.vertices[0]); + const idx1 = getOrAddVertex(tri.v2 || tri.vertices[1]); + const idx2 = getOrAddVertex(tri.v3 || tri.vertices[2]); + + faces.push([idx0, idx1, idx2]); + } + + // Generate STEP file + let step = `ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('STL to STEP Conversion'),'2;1'); +FILE_NAME('${productName}.step','${new Date().toISOString()}',(''),(''),'stl-to-step','',''); +FILE_SCHEMA(('AUTOMOTIVE_DESIGN')); +ENDSEC; +DATA; +`; + + let id = 1; + + // Units mapping + const unitMultiplier = { + 'mm': '.MILLI.', + 'cm': '.CENTI.', + 'm': '', + 'inch': '.INCH.' + }; + const unitPrefix = unitMultiplier[units] || '.MILLI.'; + + // Units and context + const lengthUnit = id++; + const planeAngleUnit = id++; + const solidAngleUnit = id++; + + step += `#${lengthUnit}=(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT(${unitPrefix},.METRE.));\n`; + step += `#${planeAngleUnit}=(NAMED_UNIT(*)PLANE_ANGLE_UNIT()SI_UNIT($,.RADIAN.));\n`; + step += `#${solidAngleUnit}=(NAMED_UNIT(*)SI_UNIT($,.STERADIAN.)SOLID_ANGLE_UNIT());\n`; + + const uncertainty = id++; + step += `#${uncertainty}=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#${lengthUnit},'distance_accuracy_value','confusion accuracy');\n`; + + // Geometric representation context + const geomContextId = id++; + step += `#${geomContextId}=(GEOMETRIC_REPRESENTATION_CONTEXT(3)GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#${uncertainty}))GLOBAL_UNIT_ASSIGNED_CONTEXT((#${lengthUnit},#${planeAngleUnit},#${solidAngleUnit}))REPRESENTATION_CONTEXT('ID1','3D'));\n`; + + // Application context + const appContext = id++; + step += `#${appContext}=APPLICATION_CONTEXT('configuration controlled 3d designs of mechanical parts and assemblies');\n`; + + const appProtocol = id++; + step += `#${appProtocol}=APPLICATION_PROTOCOL_DEFINITION('international standard','automotive_design',1998,#${appContext});\n`; + + // Product definition + const productId = id++; + step += `#${productId}=PRODUCT('${productName}','${productName}','',(#${appContext}));\n`; + + const productDefFormId = id++; + step += `#${productDefFormId}=PRODUCT_DEFINITION_FORMATION('','',#${productId});\n`; + + const productDefCtx = id++; + step += `#${productDefCtx}=PRODUCT_DEFINITION_CONTEXT('part definition',#${appContext},'design');\n`; + + const productDefId = id++; + step += `#${productDefId}=PRODUCT_DEFINITION('design','',#${productDefFormId},#${productDefCtx});\n`; + + // Shape representation - reserve ID + const shapeRepId = id++; + + // Create cartesian points for all vertices + const vertexIds = []; + for (let i = 0; i < vertices.length; i++) { + const v = vertices[i]; + const pointId = id++; + step += `#${pointId}=CARTESIAN_POINT('',(${v.x.toFixed(6)},${v.y.toFixed(6)},${v.z.toFixed(6)}));\n`; + vertexIds.push(pointId); + } + + // Create vertex points + const vertexPointIds = []; + for (let i = 0; i < vertices.length; i++) { + const vpId = id++; + step += `#${vpId}=VERTEX_POINT('',#${vertexIds[i]});\n`; + vertexPointIds.push(vpId); + } + + // Advanced B-rep shape representation + const manifoldId = id++; + const closedShellId = id++; + + step += `#${shapeRepId}=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#${manifoldId}),#${geomContextId});\n`; + step += `#${manifoldId}=MANIFOLD_SOLID_BREP('',#${closedShellId});\n`; + + const faceIds = []; + for (let i = 0; i < faces.length; i++) { + faceIds.push(id++); + } + + step += `#${closedShellId}=CLOSED_SHELL('',(${faceIds.map(fid => `#${fid}`).join(',')}));\n`; + + // Create each triangular face + for (let faceIdx = 0; faceIdx < faces.length; faceIdx++) { + const faceVertices = faces[faceIdx]; + const faceId = faceIds[faceIdx]; + + const faceOuterBoundId = id++; + const edgeLoopId = id++; + + // Create edges for this triangular face + const orientedEdgeIds = []; + + for (let i = 0; i < 3; i++) { + const v1Idx = faceVertices[i]; + const v2Idx = faceVertices[(i + 1) % 3]; + + const orientedEdgeId = id++; + const edgeCurveId = id++; + const lineId = id++; + const vectorId = id++; + const directionId = id++; + + orientedEdgeIds.push(orientedEdgeId); + + // Direction vector + const v1 = vertices[v1Idx]; + const v2 = vertices[v2Idx]; + const dx = v2.x - v1.x; + const dy = v2.y - v1.y; + const dz = v2.z - v1.z; + const len = Math.sqrt(dx * dx + dy * dy + dz * dz); + + if (len < 1e-10) { + console.warn(`Warning: Degenerate edge in face ${faceIdx}`); + continue; + } + + step += `#${directionId}=DIRECTION('',(${(dx / len).toFixed(6)},${(dy / len).toFixed(6)},${(dz / len).toFixed(6)}));\n`; + step += `#${vectorId}=VECTOR('',#${directionId},${len.toFixed(6)});\n`; + step += `#${lineId}=LINE('',#${vertexIds[v1Idx]},#${vectorId});\n`; + step += `#${edgeCurveId}=EDGE_CURVE('',#${vertexPointIds[v1Idx]},#${vertexPointIds[v2Idx]},#${lineId},.T.);\n`; + step += `#${orientedEdgeId}=ORIENTED_EDGE('',*,*,#${edgeCurveId},.T.);\n`; + } + + step += `#${edgeLoopId}=EDGE_LOOP('',(${orientedEdgeIds.map(eid => `#${eid}`).join(',')}));\n`; + step += `#${faceOuterBoundId}=FACE_OUTER_BOUND('',#${edgeLoopId},.T.);\n`; + + // Create plane for face + const planeId = id++; + const axisPlacementId = id++; + const normalDirId = id++; + const refDirId = id++; + + // Calculate face normal and reference direction + const v0 = vertices[faceVertices[0]]; + const v1 = vertices[faceVertices[1]]; + const v2 = vertices[faceVertices[2]]; + + const edge1 = v1.clone().sub(v0); + const edge2 = v2.clone().sub(v0); + const normal = edge1.clone().cross(edge2).normalize(); + + // Calculate face center for plane origin + const centerX = (v0.x + v1.x + v2.x) / 3; + const centerY = (v0.y + v1.y + v2.y) / 3; + const centerZ = (v0.z + v1.z + v2.z) / 3; + + const centerPointId = id++; + step += `#${centerPointId}=CARTESIAN_POINT('',(${centerX.toFixed(6)},${centerY.toFixed(6)},${centerZ.toFixed(6)}));\n`; + + step += `#${normalDirId}=DIRECTION('',(${normal.x.toFixed(6)},${normal.y.toFixed(6)},${normal.z.toFixed(6)}));\n`; + const refDir = edge1.normalize(); + step += `#${refDirId}=DIRECTION('',(${refDir.x.toFixed(6)},${refDir.y.toFixed(6)},${refDir.z.toFixed(6)}));\n`; + step += `#${axisPlacementId}=AXIS2_PLACEMENT_3D('',#${centerPointId},#${normalDirId},#${refDirId});\n`; + step += `#${planeId}=PLANE('',#${axisPlacementId});\n`; + + step += `#${faceId}=ADVANCED_FACE('',(#${faceOuterBoundId}),#${planeId},.T.);\n`; + } + + // Product definition shape + const prodDefShapeId = id++; + step += `#${prodDefShapeId}=PRODUCT_DEFINITION_SHAPE('','',#${productDefId});\n`; + step += `#${id++}=SHAPE_DEFINITION_REPRESENTATION(#${prodDefShapeId},#${shapeRepId});\n`; + + step += `ENDSEC;\nEND-ISO-10303-21;\n`; + + return step; +} diff --git a/src/mesh/api.js b/src/mesh/api.js index a3d87fa5..b68a9509 100644 --- a/src/mesh/api.js +++ b/src/mesh/api.js @@ -1009,7 +1009,8 @@ let file = { ]), h.div([ h.button({ _: "download OBJ", onclick() { doit('obj') } }), - h.button({ _: "download STL", onclick() { doit('stl') } }) + h.button({ _: "download STL", onclick() { doit('stl') } }), + h.button({ _: "download STEP", onclick() { doit('step') } }), ]) ]) ] }); diff --git a/src/mesh/work.js b/src/mesh/work.js index 1c0c3c1c..3abd4f46 100644 --- a/src/mesh/work.js +++ b/src/mesh/work.js @@ -16,6 +16,7 @@ import { polygons } from '../geo/polygons.js'; import { CSG } from '../geo/csg.js'; import { util } from './util.js'; import { tool as meshTool } from './tool.js'; +import { meshToSTEP } from '../load/step.js'; const { Triangle, Vector3, BufferGeometry, BufferAttribute, computeFaceNormal } = THREE; @@ -604,6 +605,18 @@ const file = { vtot += (vs.length / 3); } switch (format) { + case "step": + let varr = []; + for (let rec of recs) { + let tris = rec.varr + .group(3) + .map(r => { return { x:r[0], y:r[1], z:r[2] } }) + .group(3) + .map(f => { return { v1: f[0], v2: f[1], v3: f[2] } }); + console.log({ rec, tris }); + varr.push(...tris); + } + return meshToSTEP(varr); case "obj": let p = 1; let obj = [header]; From e6c3dc513d3cd17365442c2d4c058e87f61a7ded Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 26 Oct 2025 09:58:27 -0400 Subject: [PATCH 058/151] add step with faces --- src/load/step.js | 266 +++++++++++++++++++++++++++++++++++++++++++++++ src/mesh/work.js | 4 +- 2 files changed, 268 insertions(+), 2 deletions(-) diff --git a/src/load/step.js b/src/load/step.js index e91afb3f..7cb16ee6 100644 --- a/src/load/step.js +++ b/src/load/step.js @@ -1,5 +1,7 @@ /** Copyright Stewart Allen -- All Rights Reserved */ +import { tool as MeshTool } from '../mesh/tool.js'; + const { Vector3 } = THREE; /** @@ -224,3 +226,267 @@ DATA; return step; } + +/** + * Convert STL triangles to STEP file format with face merging + * Groups co-planar connected triangles into larger faces + * + * @param {Array} triangles - Array of triangle objects with vertices: [{v1, v2, v3}, ...] + * where v1, v2, v3 are {x, y, z} objects or Vector3 instances + * @param {Object} options - Optional parameters + * @param {string} options.productName - Name for the STEP product (default: 'mesh') + * @param {string} options.units - Units: 'mm', 'cm', 'm', 'inch' (default: 'mm') + * @param {number} options.angleTolerance - Angle tolerance in degrees for co-planarity (default: 1) + * @returns {string} STEP file content as a string + */ +export function meshToSTEPWithFaces(triangles, options = {}) { + const productName = options.productName || 'mesh'; + const units = options.units || 'mm'; + const angleTolerance = options.angleTolerance || 1; + const radianTolerance = angleTolerance * (Math.PI / 180); + + // Convert triangles to flat vertex array for MeshTool + const vertices = []; + for (const tri of triangles) { + const v1 = tri.v1 || tri.vertices[0]; + const v2 = tri.v2 || tri.vertices[1]; + const v3 = tri.v3 || tri.vertices[2]; + + vertices.push( + v1.x, v1.y, v1.z, + v2.x, v2.y, v2.z, + v3.x, v3.y, v3.z + ); + } + + // Use MeshTool to index faces and find adjacency + const tool = new MeshTool(); + tool.index(vertices); + + const totalFaces = triangles.length; + const processed = {}; + const surfaces = []; + + // Find all connected surfaces + for (let i = 0; i < totalFaces; i++) { + if (processed[i]) continue; + + // Find all connected co-planar faces starting from this face + const connectedFaces = tool.findConnectedSurface([i], radianTolerance, undefined, processed); + + if (connectedFaces.length > 0) { + // Generate outline(s) for this surface + const outlines = tool.generateOutlines(connectedFaces); + surfaces.push({ faces: connectedFaces, outlines }); + } + } + + console.log(`Merged ${totalFaces} triangles into ${surfaces.length} faces`); + + // Generate STEP file + let step = `ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('STL to STEP Conversion with Face Merging'),'2;1'); +FILE_NAME('${productName}.step','${new Date().toISOString()}',(''),(''),'stl-to-step','',''); +FILE_SCHEMA(('AUTOMOTIVE_DESIGN')); +ENDSEC; +DATA; +`; + + let id = 1; + + // Units mapping + const unitMultiplier = { + 'mm': '.MILLI.', + 'cm': '.CENTI.', + 'm': '', + 'inch': '.INCH.' + }; + const unitPrefix = unitMultiplier[units] || '.MILLI.'; + + // Units and context + const lengthUnit = id++; + const planeAngleUnit = id++; + const solidAngleUnit = id++; + + step += `#${lengthUnit}=(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT(${unitPrefix},.METRE.));\n`; + step += `#${planeAngleUnit}=(NAMED_UNIT(*)PLANE_ANGLE_UNIT()SI_UNIT($,.RADIAN.));\n`; + step += `#${solidAngleUnit}=(NAMED_UNIT(*)SI_UNIT($,.STERADIAN.)SOLID_ANGLE_UNIT());\n`; + + const uncertainty = id++; + step += `#${uncertainty}=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#${lengthUnit},'distance_accuracy_value','confusion accuracy');\n`; + + // Geometric representation context + const geomContextId = id++; + step += `#${geomContextId}=(GEOMETRIC_REPRESENTATION_CONTEXT(3)GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#${uncertainty}))GLOBAL_UNIT_ASSIGNED_CONTEXT((#${lengthUnit},#${planeAngleUnit},#${solidAngleUnit}))REPRESENTATION_CONTEXT('ID1','3D'));\n`; + + // Application context + const appContext = id++; + step += `#${appContext}=APPLICATION_CONTEXT('configuration controlled 3d designs of mechanical parts and assemblies');\n`; + + const appProtocol = id++; + step += `#${appProtocol}=APPLICATION_PROTOCOL_DEFINITION('international standard','automotive_design',1998,#${appContext});\n`; + + // Product definition + const productId = id++; + step += `#${productId}=PRODUCT('${productName}','${productName}','',(#${appContext}));\n`; + + const productDefFormId = id++; + step += `#${productDefFormId}=PRODUCT_DEFINITION_FORMATION('','',#${productId});\n`; + + const productDefCtx = id++; + step += `#${productDefCtx}=PRODUCT_DEFINITION_CONTEXT('part definition',#${appContext},'design');\n`; + + const productDefId = id++; + step += `#${productDefId}=PRODUCT_DEFINITION('design','',#${productDefFormId},#${productDefCtx});\n`; + + // Shape representation - reserve ID + const shapeRepId = id++; + + // Build vertex map and IDs + const vertexMap = new Map(); + const cartesianPointIds = new Map(); + const vertexPointIds = new Map(); + + function getOrCreateVertex(x, y, z) { + const key = `${x.toFixed(6)},${y.toFixed(6)},${z.toFixed(6)}`; + + if (!vertexMap.has(key)) { + // Create cartesian point + const pointId = id++; + step += `#${pointId}=CARTESIAN_POINT('',(${x.toFixed(6)},${y.toFixed(6)},${z.toFixed(6)}));\n`; + cartesianPointIds.set(key, pointId); + + // Create vertex point + const vpId = id++; + step += `#${vpId}=VERTEX_POINT('',#${pointId});\n`; + vertexPointIds.set(key, vpId); + + vertexMap.set(key, { pointId, vpId, x, y, z }); + } + + return vertexMap.get(key); + } + + // Advanced B-rep shape representation + const manifoldId = id++; + const closedShellId = id++; + + step += `#${shapeRepId}=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#${manifoldId}),#${geomContextId});\n`; + step += `#${manifoldId}=MANIFOLD_SOLID_BREP('',#${closedShellId});\n`; + + // Reserve face IDs + const faceIds = []; + for (let i = 0; i < surfaces.length; i++) { + faceIds.push(id++); + } + + step += `#${closedShellId}=CLOSED_SHELL('',(${faceIds.map(fid => `#${fid}`).join(',')}));\n`; + + // Create each merged face + for (let surfaceIdx = 0; surfaceIdx < surfaces.length; surfaceIdx++) { + const surface = surfaces[surfaceIdx]; + const faceId = faceIds[surfaceIdx]; + + // For now, use the first outline (main boundary) + // TODO: handle holes (additional outlines) + const outline = surface.outlines[0]; + + if (!outline || outline.length < 3) { + console.warn(`Skipping invalid surface ${surfaceIdx} with ${outline?.length || 0} vertices`); + continue; + } + + const faceOuterBoundId = id++; + const edgeLoopId = id++; + + // Create edges for this face outline + const orientedEdgeIds = []; + const vertices = []; + + // Get vertices and create vertex records + for (let i = 0; i < outline.length; i++) { + const pt = outline[i]; + const vertex = getOrCreateVertex(pt.x, pt.y, pt.z); + vertices.push(vertex); + } + + // Create edges + for (let i = 0; i < vertices.length; i++) { + const v1 = vertices[i]; + const v2 = vertices[(i + 1) % vertices.length]; + + const dx = v2.x - v1.x; + const dy = v2.y - v1.y; + const dz = v2.z - v1.z; + const len = Math.sqrt(dx * dx + dy * dy + dz * dz); + + if (len < 1e-10) { + console.warn(`Warning: Degenerate edge in surface ${surfaceIdx}`); + continue; + } + + const orientedEdgeId = id++; + const edgeCurveId = id++; + const lineId = id++; + const vectorId = id++; + const directionId = id++; + + orientedEdgeIds.push(orientedEdgeId); + + step += `#${directionId}=DIRECTION('',(${(dx / len).toFixed(6)},${(dy / len).toFixed(6)},${(dz / len).toFixed(6)}));\n`; + step += `#${vectorId}=VECTOR('',#${directionId},${len.toFixed(6)});\n`; + step += `#${lineId}=LINE('',#${v1.pointId},#${vectorId});\n`; + step += `#${edgeCurveId}=EDGE_CURVE('',#${v1.vpId},#${v2.vpId},#${lineId},.T.);\n`; + step += `#${orientedEdgeId}=ORIENTED_EDGE('',*,*,#${edgeCurveId},.T.);\n`; + } + + step += `#${edgeLoopId}=EDGE_LOOP('',(${orientedEdgeIds.map(eid => `#${eid}`).join(',')}));\n`; + step += `#${faceOuterBoundId}=FACE_OUTER_BOUND('',#${edgeLoopId},.T.);\n`; + + // Calculate face normal from first three vertices + const v0 = new Vector3(vertices[0].x, vertices[0].y, vertices[0].z); + const v1 = new Vector3(vertices[1].x, vertices[1].y, vertices[1].z); + const v2 = new Vector3(vertices[2].x, vertices[2].y, vertices[2].z); + + const edge1 = v1.clone().sub(v0); + const edge2 = v2.clone().sub(v0); + const normal = edge1.clone().cross(edge2).normalize(); + + // Calculate face center for plane origin + let centerX = 0, centerY = 0, centerZ = 0; + for (let vertex of vertices) { + centerX += vertex.x; + centerY += vertex.y; + centerZ += vertex.z; + } + centerX /= vertices.length; + centerY /= vertices.length; + centerZ /= vertices.length; + + const centerPointId = id++; + step += `#${centerPointId}=CARTESIAN_POINT('',(${centerX.toFixed(6)},${centerY.toFixed(6)},${centerZ.toFixed(6)}));\n`; + + const planeId = id++; + const axisPlacementId = id++; + const normalDirId = id++; + const refDirId = id++; + + step += `#${normalDirId}=DIRECTION('',(${normal.x.toFixed(6)},${normal.y.toFixed(6)},${normal.z.toFixed(6)}));\n`; + const refDir = edge1.normalize(); + step += `#${refDirId}=DIRECTION('',(${refDir.x.toFixed(6)},${refDir.y.toFixed(6)},${refDir.z.toFixed(6)}));\n`; + step += `#${axisPlacementId}=AXIS2_PLACEMENT_3D('',#${centerPointId},#${normalDirId},#${refDirId});\n`; + step += `#${planeId}=PLANE('',#${axisPlacementId});\n`; + + step += `#${faceId}=ADVANCED_FACE('',(#${faceOuterBoundId}),#${planeId},.T.);\n`; + } + + // Product definition shape + const prodDefShapeId = id++; + step += `#${prodDefShapeId}=PRODUCT_DEFINITION_SHAPE('','',#${productDefId});\n`; + step += `#${id++}=SHAPE_DEFINITION_REPRESENTATION(#${prodDefShapeId},#${shapeRepId});\n`; + + step += `ENDSEC;\nEND-ISO-10303-21;\n`; + + return step; +} diff --git a/src/mesh/work.js b/src/mesh/work.js index 3abd4f46..82bf41ec 100644 --- a/src/mesh/work.js +++ b/src/mesh/work.js @@ -16,7 +16,7 @@ import { polygons } from '../geo/polygons.js'; import { CSG } from '../geo/csg.js'; import { util } from './util.js'; import { tool as meshTool } from './tool.js'; -import { meshToSTEP } from '../load/step.js'; +import { meshToSTEPWithFaces } from '../load/step.js'; const { Triangle, Vector3, BufferGeometry, BufferAttribute, computeFaceNormal } = THREE; @@ -616,7 +616,7 @@ const file = { console.log({ rec, tris }); varr.push(...tris); } - return meshToSTEP(varr); + return meshToSTEPWithFaces(varr); case "obj": let p = 1; let obj = [header]; From 64cf8be4ab80d33275d8a2fa50df2797837b711a Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 26 Oct 2025 10:53:41 -0400 Subject: [PATCH 059/151] improve step face generation --- src/load/step.js | 228 ++++++++++++++++++++++++++++++++++++----------- src/mesh/work.js | 1 - 2 files changed, 175 insertions(+), 54 deletions(-) diff --git a/src/load/step.js b/src/load/step.js index 7cb16ee6..5faf8596 100644 --- a/src/load/step.js +++ b/src/load/step.js @@ -277,7 +277,31 @@ export function meshToSTEPWithFaces(triangles, options = {}) { if (connectedFaces.length > 0) { // Generate outline(s) for this surface const outlines = tool.generateOutlines(connectedFaces); - surfaces.push({ faces: connectedFaces, outlines }); + + if (outlines.length > 1) { + console.log(`Surface with ${connectedFaces.length} faces has ${outlines.length} outlines:`); + outlines.forEach((outline, idx) => { + console.log(` Outline ${idx}: ${outline.length} vertices`); + }); + } + + // Sort outlines by area (largest first = outer boundary) + // Use shoelace formula to calculate signed area + const outlinesWithArea = outlines.map(outline => { + let area = 0; + for (let i = 0; i < outline.length; i++) { + const p1 = outline[i]; + const p2 = outline[(i + 1) % outline.length]; + area += (p1.x * p2.y - p2.x * p1.y); + } + return { outline, area: Math.abs(area) }; + }); + + // Sort by area descending (largest = outer boundary) + outlinesWithArea.sort((a, b) => b.area - a.area); + const sortedOutlines = outlinesWithArea.map(o => o.outline); + + surfaces.push({ faces: connectedFaces, outlines: sortedOutlines }); } } @@ -383,71 +407,168 @@ DATA; step += `#${closedShellId}=CLOSED_SHELL('',(${faceIds.map(fid => `#${fid}`).join(',')}));\n`; + // Helper function to merge co-linear edges in an outline + function mergeColinearEdges(outline) { + if (outline.length < 3) return outline; + + const tolerance = 1e-6; + + // Helper to check if three points are co-linear + function areColinear(p1, p2, p3) { + const v1 = new Vector3(p2.x - p1.x, p2.y - p1.y, p2.z - p1.z); + const v2 = new Vector3(p3.x - p2.x, p3.y - p2.y, p3.z - p2.z); + + const len1 = v1.length(); + const len2 = v2.length(); + + if (len1 < tolerance || len2 < tolerance) return true; + + v1.normalize(); + v2.normalize(); + + // Check if vectors are parallel (dot product close to 1 or -1) + const dot = Math.abs(v1.dot(v2)); + return dot > 1 - tolerance; + } + + // Mark vertices to keep + const keep = new Array(outline.length).fill(true); + + // Check each vertex to see if it's on a straight line + for (let i = 0; i < outline.length; i++) { + const prev = outline[(i - 1 + outline.length) % outline.length]; + const curr = outline[i]; + const next = outline[(i + 1) % outline.length]; + + if (areColinear(prev, curr, next)) { + keep[i] = false; + } + } + + // Build merged array with only kept vertices + const merged = []; + for (let i = 0; i < outline.length; i++) { + if (keep[i]) { + merged.push(outline[i]); + } + } + + return merged.length >= 3 ? merged : outline; + } + // Create each merged face for (let surfaceIdx = 0; surfaceIdx < surfaces.length; surfaceIdx++) { const surface = surfaces[surfaceIdx]; const faceId = faceIds[surfaceIdx]; - // For now, use the first outline (main boundary) - // TODO: handle holes (additional outlines) - const outline = surface.outlines[0]; - - if (!outline || outline.length < 3) { - console.warn(`Skipping invalid surface ${surfaceIdx} with ${outline?.length || 0} vertices`); + if (!surface.outlines || surface.outlines.length === 0) { + console.warn(`Skipping invalid surface ${surfaceIdx} with no outlines`); continue; } - const faceOuterBoundId = id++; - const edgeLoopId = id++; + // Process all outlines: first is outer boundary, rest are holes + const boundIds = []; + let allVertices = []; - // Create edges for this face outline - const orientedEdgeIds = []; - const vertices = []; + for (let outlineIdx = 0; outlineIdx < surface.outlines.length; outlineIdx++) { + let outline = surface.outlines[outlineIdx]; - // Get vertices and create vertex records - for (let i = 0; i < outline.length; i++) { - const pt = outline[i]; - const vertex = getOrCreateVertex(pt.x, pt.y, pt.z); - vertices.push(vertex); - } - - // Create edges - for (let i = 0; i < vertices.length; i++) { - const v1 = vertices[i]; - const v2 = vertices[(i + 1) % vertices.length]; - - const dx = v2.x - v1.x; - const dy = v2.y - v1.y; - const dz = v2.z - v1.z; - const len = Math.sqrt(dx * dx + dy * dy + dz * dz); - - if (len < 1e-10) { - console.warn(`Warning: Degenerate edge in surface ${surfaceIdx}`); + if (!outline || outline.length < 3) { + console.warn(`Skipping invalid outline ${outlineIdx} in surface ${surfaceIdx}`); continue; } - const orientedEdgeId = id++; - const edgeCurveId = id++; - const lineId = id++; - const vectorId = id++; - const directionId = id++; + // Merge co-linear edges + const originalLength = outline.length; + outline = mergeColinearEdges(outline); - orientedEdgeIds.push(orientedEdgeId); + if (originalLength !== outline.length) { + console.log(` Merged outline ${outlineIdx}: ${originalLength} -> ${outline.length} vertices`); + } - step += `#${directionId}=DIRECTION('',(${(dx / len).toFixed(6)},${(dy / len).toFixed(6)},${(dz / len).toFixed(6)}));\n`; - step += `#${vectorId}=VECTOR('',#${directionId},${len.toFixed(6)});\n`; - step += `#${lineId}=LINE('',#${v1.pointId},#${vectorId});\n`; - step += `#${edgeCurveId}=EDGE_CURVE('',#${v1.vpId},#${v2.vpId},#${lineId},.T.);\n`; - step += `#${orientedEdgeId}=ORIENTED_EDGE('',*,*,#${edgeCurveId},.T.);\n`; + if (outline.length < 3) { + console.warn(`Outline ${outlineIdx} in surface ${surfaceIdx} has < 3 vertices after merging`); + continue; + } + + const boundId = id++; + const edgeLoopId = id++; + + // Create edges for this outline + const orientedEdgeIds = []; + const vertices = []; + + // Get vertices and create vertex records + for (let i = 0; i < outline.length; i++) { + const pt = outline[i]; + const vertex = getOrCreateVertex(pt.x, pt.y, pt.z); + vertices.push(vertex); + } + + // Store vertices from first outline for normal calculation + if (outlineIdx === 0) { + allVertices = vertices; + } + + // For holes, reverse the vertex order to get opposite winding + const orderedVertices = outlineIdx === 0 ? vertices : vertices.slice().reverse(); + + // Create edges + for (let i = 0; i < orderedVertices.length; i++) { + const v1 = orderedVertices[i]; + const v2 = orderedVertices[(i + 1) % orderedVertices.length]; + + const dx = v2.x - v1.x; + const dy = v2.y - v1.y; + const dz = v2.z - v1.z; + const len = Math.sqrt(dx * dx + dy * dy + dz * dz); + + if (len < 1e-10) { + console.warn(`Warning: Degenerate edge in surface ${surfaceIdx}, outline ${outlineIdx}`); + continue; + } + + const orientedEdgeId = id++; + const edgeCurveId = id++; + const lineId = id++; + const vectorId = id++; + const directionId = id++; + + orientedEdgeIds.push(orientedEdgeId); + + step += `#${directionId}=DIRECTION('',(${(dx / len).toFixed(6)},${(dy / len).toFixed(6)},${(dz / len).toFixed(6)}));\n`; + step += `#${vectorId}=VECTOR('',#${directionId},${len.toFixed(6)});\n`; + step += `#${lineId}=LINE('',#${v1.pointId},#${vectorId});\n`; + step += `#${edgeCurveId}=EDGE_CURVE('',#${v1.vpId},#${v2.vpId},#${lineId},.T.);\n`; + step += `#${orientedEdgeId}=ORIENTED_EDGE('',*,*,#${edgeCurveId},.T.);\n`; + } + + if (orientedEdgeIds.length === 0) { + console.warn(`No valid edges in outline ${outlineIdx} of surface ${surfaceIdx}`); + continue; + } + + step += `#${edgeLoopId}=EDGE_LOOP('',(${orientedEdgeIds.map(eid => `#${eid}`).join(',')}));\n`; + + // First outline is FACE_OUTER_BOUND, subsequent ones are holes (FACE_BOUND) + if (outlineIdx === 0) { + step += `#${boundId}=FACE_OUTER_BOUND('',#${edgeLoopId},.T.);\n`; + } else { + step += `#${boundId}=FACE_BOUND('',#${edgeLoopId},.T.);\n`; + } + + boundIds.push(boundId); } - step += `#${edgeLoopId}=EDGE_LOOP('',(${orientedEdgeIds.map(eid => `#${eid}`).join(',')}));\n`; - step += `#${faceOuterBoundId}=FACE_OUTER_BOUND('',#${edgeLoopId},.T.);\n`; + if (boundIds.length === 0 || allVertices.length < 3) { + console.warn(`Skipping surface ${surfaceIdx} - no valid bounds`); + continue; + } - // Calculate face normal from first three vertices - const v0 = new Vector3(vertices[0].x, vertices[0].y, vertices[0].z); - const v1 = new Vector3(vertices[1].x, vertices[1].y, vertices[1].z); - const v2 = new Vector3(vertices[2].x, vertices[2].y, vertices[2].z); + // Calculate face normal from first three vertices of outer boundary + const v0 = new Vector3(allVertices[0].x, allVertices[0].y, allVertices[0].z); + const v1 = new Vector3(allVertices[1].x, allVertices[1].y, allVertices[1].z); + const v2 = new Vector3(allVertices[2].x, allVertices[2].y, allVertices[2].z); const edge1 = v1.clone().sub(v0); const edge2 = v2.clone().sub(v0); @@ -455,14 +576,14 @@ DATA; // Calculate face center for plane origin let centerX = 0, centerY = 0, centerZ = 0; - for (let vertex of vertices) { + for (let vertex of allVertices) { centerX += vertex.x; centerY += vertex.y; centerZ += vertex.z; } - centerX /= vertices.length; - centerY /= vertices.length; - centerZ /= vertices.length; + centerX /= allVertices.length; + centerY /= allVertices.length; + centerZ /= allVertices.length; const centerPointId = id++; step += `#${centerPointId}=CARTESIAN_POINT('',(${centerX.toFixed(6)},${centerY.toFixed(6)},${centerZ.toFixed(6)}));\n`; @@ -478,7 +599,8 @@ DATA; step += `#${axisPlacementId}=AXIS2_PLACEMENT_3D('',#${centerPointId},#${normalDirId},#${refDirId});\n`; step += `#${planeId}=PLANE('',#${axisPlacementId});\n`; - step += `#${faceId}=ADVANCED_FACE('',(#${faceOuterBoundId}),#${planeId},.T.);\n`; + // Create ADVANCED_FACE with all bounds (outer + holes) + step += `#${faceId}=ADVANCED_FACE('',(${boundIds.map(bid => `#${bid}`).join(',')}),#${planeId},.T.);\n`; } // Product definition shape diff --git a/src/mesh/work.js b/src/mesh/work.js index 82bf41ec..214854d4 100644 --- a/src/mesh/work.js +++ b/src/mesh/work.js @@ -613,7 +613,6 @@ const file = { .map(r => { return { x:r[0], y:r[1], z:r[2] } }) .group(3) .map(f => { return { v1: f[0], v2: f[1], v3: f[2] } }); - console.log({ rec, tris }); varr.push(...tris); } return meshToSTEPWithFaces(varr); From 947f4ab7503bf0da01255b8ecce49d7b2c4c1f6e Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 26 Oct 2025 10:58:39 -0400 Subject: [PATCH 060/151] work on step and faces --- src/load/step.js | 54 ++++++++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/src/load/step.js b/src/load/step.js index 5faf8596..e017c076 100644 --- a/src/load/step.js +++ b/src/load/step.js @@ -399,13 +399,9 @@ DATA; step += `#${shapeRepId}=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#${manifoldId}),#${geomContextId});\n`; step += `#${manifoldId}=MANIFOLD_SOLID_BREP('',#${closedShellId});\n`; - // Reserve face IDs - const faceIds = []; - for (let i = 0; i < surfaces.length; i++) { - faceIds.push(id++); - } - - step += `#${closedShellId}=CLOSED_SHELL('',(${faceIds.map(fid => `#${fid}`).join(',')}));\n`; + // We'll write the CLOSED_SHELL after creating faces + // Track which face IDs are actually created + const createdFaceIds = []; // Helper function to merge co-linear edges in an outline function mergeColinearEdges(outline) { @@ -456,16 +452,22 @@ DATA; return merged.length >= 3 ? merged : outline; } + // Buffer to collect face geometry before writing CLOSED_SHELL + let faceStepData = ''; + // Create each merged face for (let surfaceIdx = 0; surfaceIdx < surfaces.length; surfaceIdx++) { const surface = surfaces[surfaceIdx]; - const faceId = faceIds[surfaceIdx]; if (!surface.outlines || surface.outlines.length === 0) { console.warn(`Skipping invalid surface ${surfaceIdx} with no outlines`); continue; } + // Allocate face ID now (only for valid surfaces) + const faceId = id++; + createdFaceIds.push(faceId); + // Process all outlines: first is outer boundary, rest are holes const boundIds = []; let allVertices = []; @@ -536,11 +538,11 @@ DATA; orientedEdgeIds.push(orientedEdgeId); - step += `#${directionId}=DIRECTION('',(${(dx / len).toFixed(6)},${(dy / len).toFixed(6)},${(dz / len).toFixed(6)}));\n`; - step += `#${vectorId}=VECTOR('',#${directionId},${len.toFixed(6)});\n`; - step += `#${lineId}=LINE('',#${v1.pointId},#${vectorId});\n`; - step += `#${edgeCurveId}=EDGE_CURVE('',#${v1.vpId},#${v2.vpId},#${lineId},.T.);\n`; - step += `#${orientedEdgeId}=ORIENTED_EDGE('',*,*,#${edgeCurveId},.T.);\n`; + faceStepData += `#${directionId}=DIRECTION('',(${(dx / len).toFixed(6)},${(dy / len).toFixed(6)},${(dz / len).toFixed(6)}));\n`; + faceStepData += `#${vectorId}=VECTOR('',#${directionId},${len.toFixed(6)});\n`; + faceStepData += `#${lineId}=LINE('',#${v1.pointId},#${vectorId});\n`; + faceStepData += `#${edgeCurveId}=EDGE_CURVE('',#${v1.vpId},#${v2.vpId},#${lineId},.T.);\n`; + faceStepData += `#${orientedEdgeId}=ORIENTED_EDGE('',*,*,#${edgeCurveId},.T.);\n`; } if (orientedEdgeIds.length === 0) { @@ -548,13 +550,13 @@ DATA; continue; } - step += `#${edgeLoopId}=EDGE_LOOP('',(${orientedEdgeIds.map(eid => `#${eid}`).join(',')}));\n`; + faceStepData += `#${edgeLoopId}=EDGE_LOOP('',(${orientedEdgeIds.map(eid => `#${eid}`).join(',')}));\n`; // First outline is FACE_OUTER_BOUND, subsequent ones are holes (FACE_BOUND) if (outlineIdx === 0) { - step += `#${boundId}=FACE_OUTER_BOUND('',#${edgeLoopId},.T.);\n`; + faceStepData += `#${boundId}=FACE_OUTER_BOUND('',#${edgeLoopId},.T.);\n`; } else { - step += `#${boundId}=FACE_BOUND('',#${edgeLoopId},.T.);\n`; + faceStepData += `#${boundId}=FACE_BOUND('',#${edgeLoopId},.T.);\n`; } boundIds.push(boundId); @@ -562,6 +564,8 @@ DATA; if (boundIds.length === 0 || allVertices.length < 3) { console.warn(`Skipping surface ${surfaceIdx} - no valid bounds`); + // Remove the face ID we allocated since we're not creating this face + createdFaceIds.pop(); continue; } @@ -586,23 +590,29 @@ DATA; centerZ /= allVertices.length; const centerPointId = id++; - step += `#${centerPointId}=CARTESIAN_POINT('',(${centerX.toFixed(6)},${centerY.toFixed(6)},${centerZ.toFixed(6)}));\n`; + faceStepData += `#${centerPointId}=CARTESIAN_POINT('',(${centerX.toFixed(6)},${centerY.toFixed(6)},${centerZ.toFixed(6)}));\n`; const planeId = id++; const axisPlacementId = id++; const normalDirId = id++; const refDirId = id++; - step += `#${normalDirId}=DIRECTION('',(${normal.x.toFixed(6)},${normal.y.toFixed(6)},${normal.z.toFixed(6)}));\n`; + faceStepData += `#${normalDirId}=DIRECTION('',(${normal.x.toFixed(6)},${normal.y.toFixed(6)},${normal.z.toFixed(6)}));\n`; const refDir = edge1.normalize(); - step += `#${refDirId}=DIRECTION('',(${refDir.x.toFixed(6)},${refDir.y.toFixed(6)},${refDir.z.toFixed(6)}));\n`; - step += `#${axisPlacementId}=AXIS2_PLACEMENT_3D('',#${centerPointId},#${normalDirId},#${refDirId});\n`; - step += `#${planeId}=PLANE('',#${axisPlacementId});\n`; + faceStepData += `#${refDirId}=DIRECTION('',(${refDir.x.toFixed(6)},${refDir.y.toFixed(6)},${refDir.z.toFixed(6)}));\n`; + faceStepData += `#${axisPlacementId}=AXIS2_PLACEMENT_3D('',#${centerPointId},#${normalDirId},#${refDirId});\n`; + faceStepData += `#${planeId}=PLANE('',#${axisPlacementId});\n`; // Create ADVANCED_FACE with all bounds (outer + holes) - step += `#${faceId}=ADVANCED_FACE('',(${boundIds.map(bid => `#${bid}`).join(',')}),#${planeId},.T.);\n`; + faceStepData += `#${faceId}=ADVANCED_FACE('',(${boundIds.map(bid => `#${bid}`).join(',')}),#${planeId},.T.);\n`; } + // Now write CLOSED_SHELL with only the faces that were actually created + step += `#${closedShellId}=CLOSED_SHELL('',(${createdFaceIds.map(fid => `#${fid}`).join(',')}));\n`; + + // Append all the face geometry + step += faceStepData; + // Product definition shape const prodDefShapeId = id++; step += `#${prodDefShapeId}=PRODUCT_DEFINITION_SHAPE('','',#${productDefId});\n`; From 1ba9fbee19b616ee0f471f21f89707e78bb3d294 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 26 Oct 2025 11:03:51 -0400 Subject: [PATCH 061/151] fix step face generation with inner holes --- src/load/step.js | 17 +++++++++-------- src/main/mesh.js | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/load/step.js b/src/load/step.js index e017c076..91174695 100644 --- a/src/load/step.js +++ b/src/load/step.js @@ -305,7 +305,7 @@ export function meshToSTEPWithFaces(triangles, options = {}) { } } - console.log(`Merged ${totalFaces} triangles into ${surfaces.length} faces`); + console.log(`[v3] Merged ${totalFaces} triangles into ${surfaces.length} faces`); // Generate STEP file let step = `ISO-10303-21; @@ -512,13 +512,13 @@ DATA; allVertices = vertices; } - // For holes, reverse the vertex order to get opposite winding - const orderedVertices = outlineIdx === 0 ? vertices : vertices.slice().reverse(); + // Create edges - for holes (outlineIdx > 0), use opposite orientation + const isHole = outlineIdx > 0; + const edgeOrientation = isHole ? '.F.' : '.T.'; - // Create edges - for (let i = 0; i < orderedVertices.length; i++) { - const v1 = orderedVertices[i]; - const v2 = orderedVertices[(i + 1) % orderedVertices.length]; + for (let i = 0; i < vertices.length; i++) { + const v1 = vertices[i]; + const v2 = vertices[(i + 1) % vertices.length]; const dx = v2.x - v1.x; const dy = v2.y - v1.y; @@ -542,7 +542,7 @@ DATA; faceStepData += `#${vectorId}=VECTOR('',#${directionId},${len.toFixed(6)});\n`; faceStepData += `#${lineId}=LINE('',#${v1.pointId},#${vectorId});\n`; faceStepData += `#${edgeCurveId}=EDGE_CURVE('',#${v1.vpId},#${v2.vpId},#${lineId},.T.);\n`; - faceStepData += `#${orientedEdgeId}=ORIENTED_EDGE('',*,*,#${edgeCurveId},.T.);\n`; + faceStepData += `#${orientedEdgeId}=ORIENTED_EDGE('',*,*,#${edgeCurveId},${edgeOrientation});\n`; } if (orientedEdgeIds.length === 0) { @@ -608,6 +608,7 @@ DATA; } // Now write CLOSED_SHELL with only the faces that were actually created + console.log(`[v3] Created ${createdFaceIds.length} faces for CLOSED_SHELL (expected ${surfaces.length})`); step += `#${closedShellId}=CLOSED_SHELL('',(${createdFaceIds.map(fid => `#${fid}`).join(',')}));\n`; // Append all the face geometry diff --git a/src/main/mesh.js b/src/main/mesh.js index 37306d62..1ef33ee0 100644 --- a/src/main/mesh.js +++ b/src/main/mesh.js @@ -494,7 +494,7 @@ function space_init(data) { } else if (sketch_item) { sketch_item.toggle(); } else { - console.log('unknown selection'); + // console.log('unknown selection'); } } else { // return objects upSelect can choose from From 7688623d537879d9f7087f676becc2af725b1fc5 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 26 Oct 2025 11:19:34 -0400 Subject: [PATCH 062/151] step: add global edge map, edge reuse, fix edge and curve reodering --- src/load/step.js | 84 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 66 insertions(+), 18 deletions(-) diff --git a/src/load/step.js b/src/load/step.js index 91174695..f8852cbe 100644 --- a/src/load/step.js +++ b/src/load/step.js @@ -305,7 +305,7 @@ export function meshToSTEPWithFaces(triangles, options = {}) { } } - console.log(`[v3] Merged ${totalFaces} triangles into ${surfaces.length} faces`); + console.log(`[v4] Merged ${totalFaces} triangles into ${surfaces.length} faces`); // Generate STEP file let step = `ISO-10303-21; @@ -392,6 +392,40 @@ DATA; return vertexMap.get(key); } + // Build global edge map - each unique edge gets one EDGE_CURVE + const edgeMap = new Map(); + + function getOrCreateEdge(v1, v2, stepBuffer) { + // Create consistent key regardless of vertex order + const key1 = `${v1.pointId},${v2.pointId}`; + const key2 = `${v2.pointId},${v1.pointId}`; + + let edgeData = edgeMap.get(key1) || edgeMap.get(key2); + + if (!edgeData) { + const dx = v2.x - v1.x; + const dy = v2.y - v1.y; + const dz = v2.z - v1.z; + const len = Math.sqrt(dx * dx + dy * dy + dz * dz); + + const edgeCurveId = id++; + const lineId = id++; + const vectorId = id++; + const directionId = id++; + + stepBuffer.append = stepBuffer.append || ''; + stepBuffer.append += `#${directionId}=DIRECTION('',(${(dx / len).toFixed(6)},${(dy / len).toFixed(6)},${(dz / len).toFixed(6)}));\n`; + stepBuffer.append += `#${vectorId}=VECTOR('',#${directionId},${len.toFixed(6)});\n`; + stepBuffer.append += `#${lineId}=LINE('',#${v1.pointId},#${vectorId});\n`; + stepBuffer.append += `#${edgeCurveId}=EDGE_CURVE('',#${v1.vpId},#${v2.vpId},#${lineId},.T.);\n`; + + edgeData = { edgeCurveId, v1, v2, len }; + edgeMap.set(key1, edgeData); + } + + return edgeData; + } + // Advanced B-rep shape representation const manifoldId = id++; const closedShellId = id++; @@ -514,35 +548,48 @@ DATA; // Create edges - for holes (outlineIdx > 0), use opposite orientation const isHole = outlineIdx > 0; - const edgeOrientation = isHole ? '.F.' : '.T.'; + + // Buffer for edge geometry (needs to be written before ORIENTED_EDGEs) + const edgeBuffer = {}; + const orientedEdgeData = []; // Store oriented edge info to write after EDGE_CURVEs for (let i = 0; i < vertices.length; i++) { const v1 = vertices[i]; const v2 = vertices[(i + 1) % vertices.length]; - const dx = v2.x - v1.x; - const dy = v2.y - v1.y; - const dz = v2.z - v1.z; - const len = Math.sqrt(dx * dx + dy * dy + dz * dz); + // Get or create shared edge + const edgeData = getOrCreateEdge(v1, v2, edgeBuffer); - if (len < 1e-10) { + if (edgeData.len < 1e-10) { console.warn(`Warning: Degenerate edge in surface ${surfaceIdx}, outline ${outlineIdx}`); continue; } + // Determine orientation - check if edge is stored in same direction we're traversing + const sameDirection = (edgeData.v1.pointId === v1.pointId && edgeData.v2.pointId === v2.pointId); + let edgeOrientation; + + if (isHole) { + // For holes, flip the orientation + edgeOrientation = sameDirection ? '.F.' : '.T.'; + } else { + // For outer boundary, use natural orientation + edgeOrientation = sameDirection ? '.T.' : '.F.'; + } + const orientedEdgeId = id++; - const edgeCurveId = id++; - const lineId = id++; - const vectorId = id++; - const directionId = id++; - orientedEdgeIds.push(orientedEdgeId); + orientedEdgeData.push({ orientedEdgeId, edgeCurveId: edgeData.edgeCurveId, edgeOrientation }); + } - faceStepData += `#${directionId}=DIRECTION('',(${(dx / len).toFixed(6)},${(dy / len).toFixed(6)},${(dz / len).toFixed(6)}));\n`; - faceStepData += `#${vectorId}=VECTOR('',#${directionId},${len.toFixed(6)});\n`; - faceStepData += `#${lineId}=LINE('',#${v1.pointId},#${vectorId});\n`; - faceStepData += `#${edgeCurveId}=EDGE_CURVE('',#${v1.vpId},#${v2.vpId},#${lineId},.T.);\n`; - faceStepData += `#${orientedEdgeId}=ORIENTED_EDGE('',*,*,#${edgeCurveId},${edgeOrientation});\n`; + // Write edge geometry first (EDGE_CURVEs must exist before ORIENTED_EDGEs reference them) + if (edgeBuffer.append) { + faceStepData += edgeBuffer.append; + } + + // Now write ORIENTED_EDGEs + for (const oed of orientedEdgeData) { + faceStepData += `#${oed.orientedEdgeId}=ORIENTED_EDGE('',*,*,#${oed.edgeCurveId},${oed.edgeOrientation});\n`; } if (orientedEdgeIds.length === 0) { @@ -608,7 +655,8 @@ DATA; } // Now write CLOSED_SHELL with only the faces that were actually created - console.log(`[v3] Created ${createdFaceIds.length} faces for CLOSED_SHELL (expected ${surfaces.length})`); + console.log(`[v4] Created ${createdFaceIds.length} faces for CLOSED_SHELL (expected ${surfaces.length})`); + console.log(`[v4] Shared ${edgeMap.size} unique edges across all faces`); step += `#${closedShellId}=CLOSED_SHELL('',(${createdFaceIds.map(fid => `#${fid}`).join(',')}));\n`; // Append all the face geometry From b52ab788e57c5d0a381f4f63375489b91cac7989 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 26 Oct 2025 18:15:13 -0400 Subject: [PATCH 063/151] disable step debug. add mesh script persistance, control, error dialog --- src/load/step.js | 15 +++++++++------ src/main/mesh.js | 6 +++++- src/mesh/api.js | 3 ++- src/mesh/build.js | 11 ++++++++--- src/mesh/script.js | 28 ++++++++++++++++++++++++---- web/mesh/index.css | 30 +++++++++++++++++++++++++----- 6 files changed, 73 insertions(+), 20 deletions(-) diff --git a/src/load/step.js b/src/load/step.js index f8852cbe..8245db53 100644 --- a/src/load/step.js +++ b/src/load/step.js @@ -3,6 +3,9 @@ import { tool as MeshTool } from '../mesh/tool.js'; const { Vector3 } = THREE; +function debug() { + if (false) console.log(...arguments); +} /** * Convert STL triangles to STEP file format @@ -279,9 +282,9 @@ export function meshToSTEPWithFaces(triangles, options = {}) { const outlines = tool.generateOutlines(connectedFaces); if (outlines.length > 1) { - console.log(`Surface with ${connectedFaces.length} faces has ${outlines.length} outlines:`); + debug(`Surface with ${connectedFaces.length} faces has ${outlines.length} outlines:`); outlines.forEach((outline, idx) => { - console.log(` Outline ${idx}: ${outline.length} vertices`); + debug(` Outline ${idx}: ${outline.length} vertices`); }); } @@ -305,7 +308,7 @@ export function meshToSTEPWithFaces(triangles, options = {}) { } } - console.log(`[v4] Merged ${totalFaces} triangles into ${surfaces.length} faces`); + debug(`[v4] Merged ${totalFaces} triangles into ${surfaces.length} faces`); // Generate STEP file let step = `ISO-10303-21; @@ -519,7 +522,7 @@ DATA; outline = mergeColinearEdges(outline); if (originalLength !== outline.length) { - console.log(` Merged outline ${outlineIdx}: ${originalLength} -> ${outline.length} vertices`); + debug(` Merged outline ${outlineIdx}: ${originalLength} -> ${outline.length} vertices`); } if (outline.length < 3) { @@ -655,8 +658,8 @@ DATA; } // Now write CLOSED_SHELL with only the faces that were actually created - console.log(`[v4] Created ${createdFaceIds.length} faces for CLOSED_SHELL (expected ${surfaces.length})`); - console.log(`[v4] Shared ${edgeMap.size} unique edges across all faces`); + debug(`[v4] Created ${createdFaceIds.length} faces for CLOSED_SHELL (expected ${surfaces.length})`); + debug(`[v4] Shared ${edgeMap.size} unique edges across all faces`); step += `#${closedShellId}=CLOSED_SHELL('',(${createdFaceIds.map(fid => `#${fid}`).join(',')}));\n`; // Append all the face geometry diff --git a/src/main/mesh.js b/src/main/mesh.js index 1ef33ee0..5be86f84 100644 --- a/src/main/mesh.js +++ b/src/main/mesh.js @@ -187,7 +187,11 @@ async function restore_space() { // hide loading curtain $d('curtain','none'); // restore handles visibility - handles.setEnabled(api.prefs.map.space.bounds); + handles.setEnabled(api.prefs.map.space.bounds ?? false); + // restore script if was showing + if (api.prefs.map.space.script) { + api.script.show(); + } if (api.prefs.map.info.welcome !== false) { api.welcome(version); } diff --git a/src/mesh/api.js b/src/mesh/api.js index b68a9509..080ab478 100644 --- a/src/mesh/api.js +++ b/src/mesh/api.js @@ -815,7 +815,7 @@ let add = { }, cube() { - const [ x,y,z ] = [ ...arguments ]; + const [ x,y,z ] = [ ...arguments ].map(v => parseFloat(v) || undefined); const box = new THREE.BoxGeometry(1,1,1).toNonIndexed(); const vert = box.attributes.position.array; const nmdl = new meshModel({ file: "box", mesh: vert }); @@ -1445,6 +1445,7 @@ const prefs = { dark: false, floor: false, grid: true, + script: false, select: [], snap: 1, snapon: false, diff --git a/src/mesh/build.js b/src/mesh/build.js index 97e886ed..b2942c6c 100644 --- a/src/mesh/build.js +++ b/src/mesh/build.js @@ -383,7 +383,7 @@ function menu_item(text, fn, short, id) { // create html elements function ui_build() { - let { bind, div, input, hr, label, textarea } = h; + let { bind, button, div, input, hr, label, span, textarea } = h; let { file, selection, mode, tool, sketch, prefs, add } = api; let trash = FontAwesome.icon({ prefix: "fas", iconName: "trash" }).html[0]; let eye_open = FontAwesome.icon({ prefix: "fas", iconName: "eye" }).html[0]; @@ -581,8 +581,13 @@ function ui_build() { div({ id: 'logger', onmouseover() { log.show() } }), ]), div({ id: 'script', class: "hide" }, [ - div({ id: 'script-header', _: "script" }), - textarea({ id: 'script-editor', rows: 50, cols: 60 }), + div({ id: 'script-header' }, [ + span("script"), + div({ class: "grow" }), + button({ _: "run", onclick: api.script.execute }), + button({ _: "×", class: "close", onclick: api.script.hide }) + ]), + textarea({ id: 'script-editor', rows: 30, cols: 65 }), ]), div({ id: 'grouplist' }), div({ id: 'selectlist' }), diff --git a/src/mesh/script.js b/src/mesh/script.js index 31e19498..4a1d8079 100644 --- a/src/mesh/script.js +++ b/src/mesh/script.js @@ -4,18 +4,25 @@ import { api } from '../mesh/api.js'; import { $, h, estop } from '../moto/webui.js'; export const script = { + running: false, visible: false, changed() { localStorage.script = $('script-editor').value; }, + error(e) { + api.modal.dialog({ + title: "script error", + body: [ h.div({ id: "script-error", _: e.message || e.toString() }) ] + }); + }, hide() { $('script').classList.add('hide'); - script.visible = false; + api.prefs.save(api.prefs.map.space.script = script.visible = false); }, show() { $('script').classList.remove('hide'); $('script-editor').value = localStorage.script ?? ''; - script.visible = true; + api.prefs.save(api.prefs.map.space.script = script.visible = true); }, toggle() { if (script.visible) { @@ -27,12 +34,25 @@ export const script = { execute() { let cmd = localStorage.script || `console.log('no script')`; if (cmd) { + if (script.running) { + return script.error('script running'); + } cmd = [ '(async () => {', cmd, - '})();' + '})()', + '.catch(error => {', + 'api.script.error(error)', + '})', + '.finally(() => {', + 'api.script.running = false;', + '});' ].join('\n'); - eval(`{ \n ${cmd} \n }`); + try { + eval(`{ \n ${cmd} \n }`); + } catch (e) { + script.error(e); + } } } }; diff --git a/web/mesh/index.css b/web/mesh/index.css index b69a1ca4..218f306c 100644 --- a/web/mesh/index.css +++ b/web/mesh/index.css @@ -144,6 +144,10 @@ button:hover { /** misc ui **/ +.grow { + flex-grow: 1; +} + .hide { display: none; } @@ -209,10 +213,6 @@ button:hover { padding: 4px 8px 4px 8px; } -.menu-items .grow { - flex-grow: 1; -} - .menu-items .short { gap: 1px; } @@ -630,10 +630,13 @@ button:hover { } #script { - margin-left: 5px; + margin: 5px 0px 5px 5px; + /* margin-top: 5px; + margin-left: 5px; */ flex-direction: column; justify-content: end; color: white; + height: calc(100% - 10px); } #script-header { @@ -645,12 +648,29 @@ button:hover { border-left: 1px solid #999; border-right: 1px solid #999; flex-direction: row; + gap: 3px; +} + +#script-header button { + border-radius: 3px; +} + +#script-header .close { + font-weight: bold; + line-height: 1; } #script-editor { color: white; background-color: #222; outline: none; + height: 100%; + resize: none; +} + +#script-error { + flex-direction: column; + font-family: monospace; } /** group/model buttons top/right of workspace **/ From cff74ef04c2d318a37ee1e1b0ac7c1a2ae8b6c30 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 26 Oct 2025 19:17:03 -0400 Subject: [PATCH 064/151] add left align (y axis) --- src/kiri/core/init.js | 1 + src/kiri/core/tools.js | 24 ++++++++++++++++++++++++ web/kiri/index.css | 4 ++++ web/kiri/index.html | 4 ++++ 4 files changed, 33 insertions(+) diff --git a/src/kiri/core/init.js b/src/kiri/core/init.js index 95492134..02520c08 100644 --- a/src/kiri/core/init.js +++ b/src/kiri/core/init.js @@ -1784,6 +1784,7 @@ function init_two() { $('context-duplicate').onclick = duplicateSelection; $('context-mirror').onclick = mirrorSelection; $('context-layflat').onclick = () => { api.event.emit("tool.mesh.lay-flat") }; + $('context-lefty').onclick = () => { api.event.emit("tool.mesh.lefty") }; $('context-setfocus').onclick = () => { api.event.emit( "tool.camera.focus", diff --git a/src/kiri/core/tools.js b/src/kiri/core/tools.js index e4738c22..8b8062b4 100644 --- a/src/kiri/core/tools.js +++ b/src/kiri/core/tools.js @@ -49,6 +49,24 @@ function onLayFlatSelect() { // endIt(); } +function onLeftySelect() { + // Project the face normal onto the XY plane (ignore Z component) + let projectedNormal = new Vector3(lastface.normal.x, lastface.normal.y, 0).normalize(); + + // Target direction on XY plane (negative Y axis) + let targetDir = new Vector3(0, -1, 0); + + // Calculate angle between projected normal and target + let angle = Math.atan2( + projectedNormal.x * targetDir.y - projectedNormal.y * targetDir.x, // cross product Z component + projectedNormal.x * targetDir.x + projectedNormal.y * targetDir.y // dot product + ); + + // Create quaternion for Z-axis rotation only + let q = new Quaternion().setFromAxisAngle(ZAXIS, angle); + api.selection.rotate(q); +} + function onFaceUpSelect() { api.event.emit('tool.mesh.face-normal', lastface.normal); // endIt(); @@ -105,6 +123,12 @@ api.event.on('tool.mesh.lay-flat', () => { startIt(); }); +api.event.on('tool.mesh.lefty', () => { + opName = 'align y axis'; + onDone = onLeftySelect; + startIt(); +}); + function scale() { let cam = space.internals().camera; let dist = cam.position.distanceTo(pmesh.position); diff --git a/web/kiri/index.css b/web/kiri/index.css index a3a2f596..c7aa6b49 100644 --- a/web/kiri/index.css +++ b/web/kiri/index.css @@ -213,6 +213,10 @@ details[open] summary::after { transform: rotate(90deg); } +.rot90 { + transform: rotate(90deg); +} + /* for bambu mgr dialog */ .video { border: 1px solid #888; diff --git a/web/kiri/index.html b/web/kiri/index.html index 598e6ad5..f9baab76 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -304,6 +304,10 @@
choose a face to place
on the work surface
+ + +
choose a face to align
to the y axis
+
choose focal point
camera orbit center
From 7ee0d72b4a15c1f769e39db61900b2ea93c6b757 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 26 Oct 2025 19:18:21 -0400 Subject: [PATCH 065/151] start 4.4.0 beta work --- package.json | 2 +- src/moto/license.js | 4 ++-- web/kiri/manifest.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 49b5b331..e6dfc19c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grid-apps", - "version": "4.3.4", + "version": "4.4.0", "description": "grid.space 3d slicing & modeling tools", "author": "Stewart Allen ", "license": "MIT", diff --git a/src/moto/license.js b/src/moto/license.js index 669e0eb7..84e126ee 100644 --- a/src/moto/license.js +++ b/src/moto/license.js @@ -3,9 +3,9 @@ const terms = { COPYRIGHT: "Copyright (C) Stewart Allen - All Rights Reserved", LICENSE: "See the license.md file included with the source distribution", - VERSION: "4.3.4" + VERSION: "4.4.0" }; -export const beta = 0; +export const beta = 4401; export const license = terms; export const version = terms.VERSION; diff --git a/web/kiri/manifest.json b/web/kiri/manifest.json index 5d913d11..c08e6a84 100644 --- a/web/kiri/manifest.json +++ b/web/kiri/manifest.json @@ -1,5 +1,5 @@ { - "name": "Kiri:Moto 4.3.4", + "name": "Kiri:Moto 4.4.0", "short_name": "Kiri:Moto", "description": "Slicer for 3D printers, CNC mills, laser cutters and more", "start_url": "/kiri/", From 450410ab338d13f303545f3c0037c7135853d8c3 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 26 Oct 2025 23:24:58 -0400 Subject: [PATCH 066/151] switch from npmjs.org to git repos for gridspace org packages --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e6dfc19c..54240d16 100644 --- a/package.json +++ b/package.json @@ -36,8 +36,8 @@ }, "dependencies": { "@fortawesome/fontawesome-free": "^6.1.1", - "@gridspace/app-server": "^0.0.18", - "@gridspace/basic-ftp": "^5.0.5", + "@gridspace/app-server": "github:gridspace/app-server#v0.0.19", + "@gridspace/basic-ftp": "github:gridspace/basic-ftp#v5.0.5-gridspace", "@gridspace/net-level-client": "^0.2.3", "@tracespace/parser": "^5.0.0-next.0", "@tweenjs/tween.js": "^16.6.0", From f67e5991ebcbc5818f1e7b058a3655d6cc50d199 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Wed, 29 Oct 2025 11:08:06 -0400 Subject: [PATCH 067/151] remove dups from PR #440 --- src/geo/point.js | 4 ---- src/geo/slope.js | 7 ------- src/kiri/core/conf.js | 1 - 3 files changed, 12 deletions(-) diff --git a/src/geo/point.js b/src/geo/point.js index add35a8c..1c270f35 100644 --- a/src/geo/point.js +++ b/src/geo/point.js @@ -441,10 +441,6 @@ class Point { return this === p || (this.x === p.x && this.y === p.y && this.z === p.z); } - isEqual2D(p) { - return this === p || (this.x === p.x && this.y === p.y); - } - /** * returns true if points are close enough to be considered equivalent */ diff --git a/src/geo/slope.js b/src/geo/slope.js index 1777832d..f95c4137 100644 --- a/src/geo/slope.js +++ b/src/geo/slope.js @@ -60,13 +60,6 @@ export class Slope { return this; } - invert() { - this.dx = -this.dx; - this.dy = -this.dy; - this.angle = 180 - this.angle; - return this; - } - angleDiff(s2,sign) { const n1 = this.angle; const n2 = s2.angle; diff --git a/src/kiri/core/conf.js b/src/kiri/core/conf.js index ae5512d5..f4fd6ccd 100644 --- a/src/kiri/core/conf.js +++ b/src/kiri/core/conf.js @@ -573,7 +573,6 @@ export const conf = { camTabsMidline: false, camTabsWidth: 5, camTolerance: 0, - camTolerance: 0, camToolInit: true, camTraceDogbone: false, camTraceDown: 0, From 052716ec6d7d4ac6940950f1ed252286c835892f Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Wed, 29 Oct 2025 19:40:52 -0400 Subject: [PATCH 068/151] use epsilon value for more accurate zflat calculation --- src/geo/slicer.js | 4 +++- src/kiri/mode/cam/slice.js | 13 +++++-------- src/kiri/mode/cam/slicer.js | 3 ++- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/geo/slicer.js b/src/geo/slicer.js index e9713328..16b4b174 100644 --- a/src/geo/slicer.js +++ b/src/geo/slicer.js @@ -12,6 +12,8 @@ import { polygons } from '../geo/polygons.js'; import { newPoint } from '../geo/point.js'; import { config } from '../geo/base.js'; +const epsilon = 10e-5; + function dval(v, dv) { return v !== undefined ? v : dv; } @@ -75,7 +77,7 @@ export async function slice(points, options = {}) { // used to calculate buckets (rough sum of z span) zSum += (Math.abs(p1.z - p2.z) + Math.abs(p2.z - p3.z) + Math.abs(p3.z - p1.z)); // use co-flat and co-line detection to adjust slice Z - if (p1.z === p2.z && p2.z === p3.z && p1.z >= zMin) { + if (Math.abs(p1.z - p2.z) < epsilon && Math.abs(p2.z - p3.z) < epsilon && p1.z >= zMin) { // detect faces co-planar with Z and sum the enclosed area let zkey = p1.z, area = Math.abs(base.util.area2(p1,p2,p3)) / 2; diff --git a/src/kiri/mode/cam/slice.js b/src/kiri/mode/cam/slice.js index 2c9f454f..eec8f94d 100644 --- a/src/kiri/mode/cam/slice.js +++ b/src/kiri/mode/cam/slice.js @@ -688,7 +688,7 @@ export async function holes(settings, widget, individual, rec, onProgress) { let opts = { each: onEach, progress: (num, total) => onProgress(num / total * 0.5, "slice") }; await slicer.slice(indices, opts); let shadowedDrills = false; - // console.log("slices",slices) + for (let [i, slice] of slices.entries()) { for (let top of slice.tops) { // console.log("slicing",slice.z,top) @@ -698,13 +698,13 @@ export async function holes(settings, widget, individual, rec, onProgress) { continue; } for (let poly of inner) { - if (poly.points.length < 7) continue; - + if (poly.points.length < 7) { + continue; + } let center = poly.calcCircleCenter(); center.area = poly.area(); center.overlapping = [center]; center.depth = 0; - // console.log("center",center) if (poly.circularity() < 0.98) { // if not circular, don't add to holes continue; @@ -717,8 +717,7 @@ export async function holes(settings, widget, individual, rec, onProgress) { let overlap = false; for (let [i, circle] of circles.entries()) { let dist = circle.distTo2D(center); - - // //if on the same xy point, + // if on the same xy point, if (dist <= centerDiff) { // console.log("overlap",center,circle); circle.overlapping.push(center); @@ -732,12 +731,10 @@ export async function holes(settings, widget, individual, rec, onProgress) { } onProgress(0.5 + (i / slices.length * 0.25), "recognize circles"); } - let drills = []; for (let [i, c] of circles.entries()) { let overlapping = c.overlapping; - let last = overlapping.shift(); while (overlapping.length) { let circ = overlapping.shift(); diff --git a/src/kiri/mode/cam/slicer.js b/src/kiri/mode/cam/slicer.js index 4ed66eff..0cd36e38 100644 --- a/src/kiri/mode/cam/slicer.js +++ b/src/kiri/mode/cam/slicer.js @@ -12,6 +12,7 @@ const { sliceConnect, sliceDedup } = slicer; const { config } = base; const timing = false; const zDecimal = 3; +const epsilon = 10e-5; const begin = function () { if (timing) console.time(...arguments); @@ -94,7 +95,7 @@ export class Slicer { countZ(p3.z); } // use co-flat and co-line detection to adjust slice Z - if (p1.z === p2.z && p2.z === p3.z) { + if (Math.abs(p1.z - p2.z) < epsilon && Math.abs(p2.z - p3.z) < epsilon) { // detect zFlat faces to avoid slicing directly on them let zkey = p1.z.toFixed(zDecimal), area = Math.abs(util.area2(p1, p2, p3)) / 2; From 32b5248fdaaa2f2dc2a3876c50b5b8aa47db462b Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 30 Oct 2025 23:49:33 -0400 Subject: [PATCH 069/151] fixes for indexed rotations --- src/kiri/core/print.js | 4 ++-- src/kiri/mode/cam/export.js | 5 ++++- src/kiri/mode/cam/op-index.js | 4 ++-- src/kiri/mode/cam/prepare.js | 21 +++++++++++++++++---- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/kiri/core/print.js b/src/kiri/core/print.js index 5f3ee901..8a86606a 100644 --- a/src/kiri/core/print.js +++ b/src/kiri/core/print.js @@ -56,8 +56,8 @@ class Print { // drop duplicates (usually intruced by FDM bisections) if (lastPoint && point && !arc && type !== 'lerp') { // nested due to uglify confusing browser - const { x, y, z } = lastPoint; - if (point.x == x && point.y == y && point.z == z && lastEmit == emit) { + const { x, y, z, a } = lastPoint; + if (point.x == x && point.y == y && point.z == z && point.a == z && lastEmit == emit) { return lastOut; } } diff --git a/src/kiri/mode/cam/export.js b/src/kiri/mode/cam/export.js index 41280974..96d31f63 100644 --- a/src/kiri/mode/cam/export.js +++ b/src/kiri/mode/cam/export.js @@ -169,6 +169,7 @@ export function cam_export(print, online) { function moveTo(out, opt = {}) { let laser = out.type === 'laser'; let newpos = out.point; + console.log(mode.type, out.point); // no point == dwell // out.speed = time to dwell in ms @@ -425,7 +426,9 @@ export function cam_export(print, online) { toolz[out.tool] = ctool; } point = out.point; - if (!point || point.mod) return; + if (!point || point.mod) { + return; + } // ensure not point is modified twice point.mod = 1; if (isOffset) { diff --git a/src/kiri/mode/cam/op-index.js b/src/kiri/mode/cam/op-index.js index d226aac0..1b1fd92a 100644 --- a/src/kiri/mode/cam/op-index.js +++ b/src/kiri/mode/cam/op-index.js @@ -25,7 +25,7 @@ export class OpIndex extends CamOp { } prepare(ops, progress) { - const { lastPoint, zmax, zclear, camOut, stock } = ops; + const { lastPoint, zmax, zclear, camOut, stock, newLayer } = ops; let last = lastPoint(); if (last) { // max point of stock corner radius when rotating (safe z when indexing) @@ -34,7 +34,7 @@ export class OpIndex extends CamOp { // move above rotating stock camOut(last = last.clone().setZ(zmove), 0); // issue rotation command - camOut(last = last.clone().setY(0).setA(this.degrees), 0); + camOut(last = last.clone().setZ(zmove).setA(this.degrees), 0); } } } diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index 9f3b19b4..fafe22c6 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -112,6 +112,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { toolDiamMove, plungeRate = process.camFastFeedZ, feedRate, + lastOp, lastTool, lastPush, lastPoint, @@ -268,6 +269,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { if (dz < 0 && speed > plungeRate) { speed = plungeRate; } + // if (options?.type !== 'lerp') console.log( point, currentOp.type ); layerOut.mode = currentOp; if (lasering) { let power = emit ? laserPower : 0; @@ -333,7 +335,13 @@ export function prepEach(widget, settings, print, firstPoint, update) { * @param {number} opts.factor speed scale factor */ function camOut(point, emit = 1, opts) { - // console.trace({point, emit, opts}) + let lop = lastOp; + lastOp = currentOp; + if (lop?.type === 'index' && lop !== currentOp ) { + // console.log('post index first point', point); + camOut(point.clone().setZ(lastPoint.z).setA(lastPoint.a), 1); + } + let { center = {}, clockwise = true, @@ -370,7 +378,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { for (let a of lerp) { let lp = point.clone().setA(a); // console.log(lp.a, lp.x, lp.y, lp.z); - lastPoint = layerPush( + layerPush( lp, emit, rate, @@ -403,10 +411,11 @@ export function prepEach(widget, settings, print, firstPoint, update) { layerPush(point.clone().setZ(stockz + 1), 0, 0, tool); // change to cutting move for remainder of plunge emit = 1; + isMove = false; } // drop points too close together - if (!isLathe && !isArc && deltaXY < 0.001 && point.z === lastPoint.z) { + if (!isLathe && !isArc && deltaXY < 0.001 && point.z === lastPoint.z && point.a === lastPoint.a) { // console.trace(["drop dup",lastPoint,point]); return; } @@ -420,6 +429,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { emit = 1; isMove = false; } else if (deltaZ <= -tolerance) { + console.log({ deltaZ, tolerance }); // move over before descending layerPush(point.clone().setZ(lastPoint.z), 0, 0, tool); // new pos for plunge calc @@ -1096,7 +1106,10 @@ export function prepEach(widget, settings, print, firstPoint, update) { if (lastPoint && newOutput.length) { let lastLayer = newOutput.filter(layer => Array.isArray(layer)).peek(); if (Array.isArray(lastLayer)) { - print.addOutput(lastLayer, printPoint = lastPoint.clone().setZ(zmax_outer), 0, 0, tool); + printPoint = lastPoint.clone(); + if (printPoint.z < zmax_outer) printPoint.setZ(zmax_outer); + print.addOutput(lastLayer, printPoint, 0, 0, tool); + // print.addOutput(lastLayer, printPoint = lastPoint.clone().setZ(zmax_outer), 0, 0, tool); } } // console.log("prepare output", newOutput); From 49127b8296e4ac7510d913b0099ab17108b86589 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 31 Oct 2025 00:48:54 -0400 Subject: [PATCH 070/151] add { deleteMerged } option to api.selection.merge() --- src/kiri/core/selection.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/kiri/core/selection.js b/src/kiri/core/selection.js index f5fb2a91..6ef28db1 100644 --- a/src/kiri/core/selection.js +++ b/src/kiri/core/selection.js @@ -189,7 +189,7 @@ function rotate(x, y, z) { space.update(); } -function merge() { +function merge({ deleteMerged = true }) { let sel = widgets(); if (sel.length === 0) { sel = api.widgets.all(); @@ -207,7 +207,7 @@ function merge() { } }); let w = api.platform.load_verts([], obj, "merged"); - api.platform.delete(sel); + if (deleteMerged) api.platform.delete(sel); api.platform.select(w); } @@ -234,7 +234,7 @@ function isolateBodies(){ if(bodies.length ==1){ api.platform.select(widget); }else{ - console.log(bodies,Array.from(bodies.entries())) + // console.log(bodies,Array.from(bodies.entries())) for(let [i,verts] of bodies.entries()){ let w = api.platform.load_verts([], verts, `isolate ${i} of ${ widget.anno.file}`); api.platform.select(w) From 49a63fad04eec77648b51800dae5fb4c36dd6670 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 31 Oct 2025 17:35:26 -0400 Subject: [PATCH 071/151] add radial gpu option (work in progress) --- app.js | 2 + package.json | 1 + src/gpu/raster-worker.js | 1 + src/gpu/raster.js | 1 + src/kiri/core/conf.js | 1 + src/kiri/core/init.js | 50 ++++++++++++---------- src/kiri/mode/cam/topo4.js | 86 +++++++++++++++++++++++++++++++++++++- web/kiri/lang/en.js | 2 + 8 files changed, 119 insertions(+), 25 deletions(-) create mode 120000 src/gpu/raster-worker.js create mode 120000 src/gpu/raster.js diff --git a/app.js b/app.js index 57b03227..a6e439d2 100644 --- a/app.js +++ b/app.js @@ -578,6 +578,8 @@ function rewriteHtmlVersion(req, res, next) { if ([ "/kiri/", "/mesh/", + "/lib/gpu/raster.js", + "/lib/gpu/raster-worker.js", "/lib/mesh/work.js", "/lib/kiri/run/worker.js", "/lib/kiri/run/minion.js", diff --git a/package.json b/package.json index 54240d16..dfd0d1d1 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "@gridspace/app-server": "github:gridspace/app-server#v0.0.19", "@gridspace/basic-ftp": "github:gridspace/basic-ftp#v5.0.5-gridspace", "@gridspace/net-level-client": "^0.2.3", + "@gridspace/raster-path": "github:gridspace/raster-path#main", "@tracespace/parser": "^5.0.0-next.0", "@tweenjs/tween.js": "^16.6.0", "base64-js": "^1.5.1", diff --git a/src/gpu/raster-worker.js b/src/gpu/raster-worker.js new file mode 120000 index 00000000..3abe7863 --- /dev/null +++ b/src/gpu/raster-worker.js @@ -0,0 +1 @@ +../../node_modules/@gridspace/raster-path/src/web/webgpu-worker.js \ No newline at end of file diff --git a/src/gpu/raster.js b/src/gpu/raster.js new file mode 120000 index 00000000..5ebcfa64 --- /dev/null +++ b/src/gpu/raster.js @@ -0,0 +1 @@ +../../node_modules/@gridspace/raster-path/src/index.js \ No newline at end of file diff --git a/src/kiri/core/conf.js b/src/kiri/core/conf.js index f4fd6ccd..b8f5ffb4 100644 --- a/src/kiri/core/conf.js +++ b/src/kiri/core/conf.js @@ -943,6 +943,7 @@ export const conf = { threaded: true, units: "mm", view: null, + webGPU: false, zoomSpeed: 1.0, }, // default hidden ui groups diff --git a/src/kiri/core/init.js b/src/kiri/core/init.js index 02520c08..29dd46a2 100644 --- a/src/kiri/core/init.js +++ b/src/kiri/core/init.js @@ -142,26 +142,27 @@ function booleanSave() { if (control.antiAlias != ui.antiAlias.checked) { api.show.alert('Page Reload Required to Change Aliasing'); } - control.shiny = ui.shiny.checked; + control.antiAlias = ui.antiAlias.checked; + control.assembly = ui.assembly.checked; + control.autoLayout = ui.autoLayout.checked; + control.autoSave = ui.autoSave.checked; + control.dark = ui.dark.checked; + control.devel = ui.devel.checked; control.drawer = ui.drawer.checked; + control.exportOcto = ui.exportOcto.checked; + control.exportPreview = ui.exportPreview.checked; + control.exportThumb = ui.exportThumb.checked; + control.freeLayout = ui.freeLayout.checked; + control.healMesh = ui.healMesh.checked; + control.ortho = ui.ortho.checked; + control.reverseZoom = ui.reverseZoom.checked; control.scrolls = ui.scrolls.checked; + control.shiny = ui.shiny.checked; control.showOrigin = ui.showOrigin.checked; control.showRulers = ui.showRulers.checked; - control.autoLayout = ui.autoLayout.checked; - control.freeLayout = ui.freeLayout.checked; control.spaceRandoX = ui.spaceRandoX.checked; - control.autoSave = ui.autoSave.checked; - control.antiAlias = ui.antiAlias.checked; - control.reverseZoom = ui.reverseZoom.checked; - control.dark = ui.dark.checked; - control.exportOcto = ui.exportOcto.checked; - control.exportThumb = ui.exportThumb.checked; - control.exportPreview = ui.exportPreview.checked; - control.healMesh = ui.healMesh.checked; control.threaded = setThreaded(ui.threaded.checked); - control.assembly = ui.assembly.checked; - control.ortho = ui.ortho.checked; - control.devel = ui.devel.checked; + control.webGPU = ui.webGPU.checked; space.view.setZoom(control.reverseZoom, control.zoomSpeed); // platform.layout(); api.conf.save(); @@ -1063,6 +1064,7 @@ function init_one() { healMesh: newBoolean(LANG.pt_heal_s, booleanSave, {title: LANG.pt_heal_l}), threaded: newBoolean(LANG.pt_thrd_s, booleanSave, {title: LANG.pt_thrd_l, modes:THREED}), assembly: newBoolean(LANG.pt_assy_s, booleanSave, {title: LANG.pt_assy_l, modes:THREED}), + webGPU: newBoolean(LANG.pt_wgpu_s, booleanSave, {title: LANG.pt_wgpu_l, modes:THREED}), prefadd: uc.checkpoint($('prefs-add')), @@ -1630,20 +1632,22 @@ function init_two() { space.platform.setZOff(0.05); // restore UI state from settings + ui.antiAlias.checked = control.antiAlias; + ui.assembly.checked = control.assembly; + ui.autoLayout.checked = control.autoLayout; + ui.autoSave.checked = control.autoSave; + ui.devel.checked = control.devel; + ui.freeLayout.checked = control.freeLayout; + ui.healMesh.checked = control.healMesh; + ui.ortho.checked = control.ortho; + ui.reverseZoom.checked = control.reverseZoom; ui.showOrigin.checked = control.showOrigin; ui.showRulers.checked = control.showRulers; ui.showSpeeds.checked = control.showSpeeds; - ui.freeLayout.checked = control.freeLayout; - ui.autoLayout.checked = control.autoLayout; ui.spaceRandoX.checked = control.spaceRandoX; - ui.antiAlias.checked = control.antiAlias; - ui.reverseZoom.checked = control.reverseZoom; - ui.autoSave.checked = control.autoSave; - ui.healMesh.checked = control.healMesh; ui.threaded.checked = setThreaded(control.threaded); - ui.assembly.checked = control.assembly; - ui.ortho.checked = control.ortho; - ui.devel.checked = control.devel; + ui.webGPU.checked = control.webGPU; + lineTypeSave(); detailSave(); updateStats(); diff --git a/src/kiri/mode/cam/topo4.js b/src/kiri/mode/cam/topo4.js index f29934c2..171b93d0 100644 --- a/src/kiri/mode/cam/topo4.js +++ b/src/kiri/mode/cam/topo4.js @@ -7,6 +7,7 @@ import { sliceConnect } from '../../../geo/slicer.js'; import { newSlice } from '../../core/slice.js'; import { Tool } from './tool.js'; import { Slicer as topo_slicer } from './slicer_topo.js'; +import { RasterPath } from '../../../gpu/raster.js'; const RAD2DEG = 180 / Math.PI; const DEG2RAD = Math.PI / 180; @@ -24,6 +25,7 @@ export class Topo { let { state, op, onupdate, ondone } = opt; let { widget, settings, tabs } = opt.state; let { controller, process } = settings; + let { webGPU } = controller; let axis = op.axis.toLowerCase(), tool = new Tool(settings, op.tool), @@ -65,11 +67,14 @@ export class Topo { this.lineColor = state.settings.controller.dark ? 0xffff00 : 0x555500; this.offStart = op.offStart ?? 0; this.offEnd = op.offEnd ?? 0; + this.bounds = bounds; + this.gpu = webGPU ?? false; onupdate(0, "lathe"); const range = this.range = { min: Infinity, max: -Infinity }; const slices = this.sliced = await this.slice(scale(onupdate, 0.25, 0)); + for (let slice of slices) { range.min = Math.min(range.min, slice.z); range.max = Math.max(range.max, slice.z); @@ -91,7 +96,6 @@ export class Topo { const { vertices, resolution, tabverts, zoff, offStart, offEnd, tool, unit } = this; const { minions } = self.kiri_worker; const range = this.range = { min: Infinity, max: -Infinity }; - const box = this.box = new THREE.Box2(); // swap XZ in shared array for (let i = 0, l = vertices.length; i < l; i += 3) { @@ -119,6 +123,11 @@ export class Topo { // re-create shared vertex array for workers this.vertices = [].appendAll(vertices).appendAll(tabverts).toFloat32().toShared(); + // rp.rasterizeMesh(vertices, resolution).then(rpo => console.log({ rpo })); + if (this.gpu) { + return await this.sliceGPU(onupdate); + } + const zSpan = range.max - range.min; const shards = Math.ceil(Math.min(25, vertices.length / 27000)); const totalSteps = Math.ceil(zSpan / resolution); @@ -151,6 +160,73 @@ export class Topo { } } + async sliceGPU(onupdate) { + const { angle, linear, offStart, offEnd, resolution, tool, unit, vertices, zBottom } = this; + + let gpu = new RasterPath({ workerName: "/lib/gpu/raster-worker.js" }); + await gpu.init(); + await gpu.initWorkerPool(); + + let tickperstep = Math.round(this.step / resolution); + let bounds = this.bounds.clone(); + bounds.min.x += offStart * unit; + bounds.max.x -= offEnd * unit; + let output = await gpu.generateRadialToolpath( + vertices, + tool, + angle, + tickperstep, + zBottom, + resolution, + bounds, + (pct, msg) => { console.log({ pct, msg }) } + ); + + // console.log({ tool, output, tickperstep }); + // const axis = new THREE.Vector3(1, 0, 0); + let { numRotations, pointsPerLine, pathData } = output; + let degPerRow = 360 / numRotations; + let slices = this.gpu_slices = []; + let xmult = tickperstep * resolution; + let xoff = bounds.min.x; + let rows = []; + for (let i=0; i newPoint(j * xmult + xoff, 0, v).setA(-i * degPerRow)); + // let points = Array.from(lineData).map((v,i) => [ i * xmult + xoff, 0, v ]).flat().toFloat32(); + // let rot = new THREE.Matrix4().makeRotationAxis(axis, (Math.PI / numRotations * 2) * i); + // new THREE.BufferAttribute(points, 3).applyMatrix4(rot); + // points = Array.from(points).group(3).map((v,i) => newPoint(v[0], v[1], v[2])); + rows.push(points); + } + if (linear) { + for (let i=0; i row[i]); + // points.push(points[0].setA(points[0].a - 360)); + if (i % 2 === 1) points.reverse(); + slice.index = i; + slice.camLines = [ newPolygon(points).setOpen() ]; + slices.push(slice); + } + } + for (let slice of slices) { + slice.output() + .setLayer("lathe", { line: this.lineColor }) + .addPoly(slice.camLines[0].clone().applyRotations()); + } + // console.log({ webGPU: output, slices }); + return slices; + } + async sliceWorker(onupdate) { const { vertices, slices, resolution } = this; @@ -215,13 +291,19 @@ export class Topo { async lathe(onupdate) { const { minions } = self.kiri_worker; - if (minions?.running > 1) { + if (this.gpu) { + return await this.latheGPU(onupdate); + } else if (minions?.running > 1) { return await this.latheMinions(onupdate); } else { return await this.latheWorker(onupdate); } } + async latheGPU(onupdate) { + return this.gpu_slices; + } + lathePath(slices, tool) { const { resolution, step, zBottom, maxo } = this; diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index ea00c48b..ac673935 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -323,6 +323,8 @@ self.lang['en-us'] = { pt_thrd_l: ["use parallel processing when browser supports nested workers. may increase memory pressure on larger models. disable if you are getting out of memory errors"], pt_assy_s: "assembly", pt_assy_l: ["use web assembly when supported by browser. if you experience artifacts or memory errors, try disabling this."], + pt_wgpu_s: "web gpu", + pt_wgpu_l: ["use web gpu when supported by browser"], xp_menu: "exports", From df58e7f4651527fbb2fa3fa79426ecc21f8ac72b Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 31 Oct 2025 18:16:55 -0400 Subject: [PATCH 072/151] move/cache gpu worker, fix tool offsets when using gpu --- src/kiri/mode/cam/topo4.js | 18 ++++++------------ src/kiri/run/worker.js | 11 +++++++++++ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/kiri/mode/cam/topo4.js b/src/kiri/mode/cam/topo4.js index 171b93d0..b6760dc7 100644 --- a/src/kiri/mode/cam/topo4.js +++ b/src/kiri/mode/cam/topo4.js @@ -7,7 +7,6 @@ import { sliceConnect } from '../../../geo/slicer.js'; import { newSlice } from '../../core/slice.js'; import { Tool } from './tool.js'; import { Slicer as topo_slicer } from './slicer_topo.js'; -import { RasterPath } from '../../../gpu/raster.js'; const RAD2DEG = 180 / Math.PI; const DEG2RAD = Math.PI / 180; @@ -163,17 +162,19 @@ export class Topo { async sliceGPU(onupdate) { const { angle, linear, offStart, offEnd, resolution, tool, unit, vertices, zBottom } = this; - let gpu = new RasterPath({ workerName: "/lib/gpu/raster-worker.js" }); - await gpu.init(); - await gpu.initWorkerPool(); + let gputool = tool.slice(); + for (let i=0; i { console.log({ pct, msg }) } ); - // console.log({ tool, output, tickperstep }); - // const axis = new THREE.Vector3(1, 0, 0); let { numRotations, pointsPerLine, pathData } = output; let degPerRow = 360 / numRotations; let slices = this.gpu_slices = []; @@ -193,10 +192,6 @@ export class Topo { for (let i=0; i newPoint(j * xmult + xoff, 0, v).setA(-i * degPerRow)); - // let points = Array.from(lineData).map((v,i) => [ i * xmult + xoff, 0, v ]).flat().toFloat32(); - // let rot = new THREE.Matrix4().makeRotationAxis(axis, (Math.PI / numRotations * 2) * i); - // new THREE.BufferAttribute(points, 3).applyMatrix4(rot); - // points = Array.from(points).group(3).map((v,i) => newPoint(v[0], v[1], v[2])); rows.push(points); } if (linear) { @@ -211,7 +206,6 @@ export class Topo { for (let i=0; i row[i]); - // points.push(points[0].setA(points[0].a - 360)); if (i % 2 === 1) points.reverse(); slice.index = i; slice.camLines = [ newPolygon(points).setOpen() ]; diff --git a/src/kiri/run/worker.js b/src/kiri/run/worker.js index cb6b659b..9059a3c7 100644 --- a/src/kiri/run/worker.js +++ b/src/kiri/run/worker.js @@ -17,6 +17,7 @@ import { version } from '../../moto/license.js'; import { Widget, newWidget } from '../core/widget.js'; import { load } from "../../load/png.js"; import { JSZip } from '../../ext/jszip-esm.js'; +import { RasterPath } from '../../gpu/raster.js'; import { CAM } from '../mode/cam/driver-be.js'; import { DRAG } from '../mode/drag/driver.js'; @@ -64,6 +65,16 @@ self.alert = function(o) { self.uuid = ((Math.random() * Date.now()) | 0).toString(36); +self.get_raster_gpu = async function() { + let gpu = self.raster_gpu; + if (!gpu) { + gpu = self.raster_gpu = new RasterPath({ workerName: "/lib/gpu/raster-worker.js" }); + await gpu.init(); + await gpu.initWorkerPool(); + } + return gpu; +}; + function minhandler(msg) { let data = msg.data; let seq = data.seq; From 007d03b629d3b762ada87f65ce157a0223dd3bb8 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 31 Oct 2025 19:39:46 -0400 Subject: [PATCH 073/151] swap vertices for gpu compute, fix progress --- src/kiri/mode/cam/topo4.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/kiri/mode/cam/topo4.js b/src/kiri/mode/cam/topo4.js index b6760dc7..c29be373 100644 --- a/src/kiri/mode/cam/topo4.js +++ b/src/kiri/mode/cam/topo4.js @@ -162,11 +162,21 @@ export class Topo { async sliceGPU(onupdate) { const { angle, linear, offStart, offEnd, resolution, tool, unit, vertices, zBottom } = this; + // invert tool Z offset for gpu code let gputool = tool.slice(); for (let i=0; i { console.log({ pct, msg }) } + { onProgress(pct, msg) { onupdate(pct/100) } } ); let { numRotations, pointsPerLine, pathData } = output; From f271fa0fc843fe6c0ba7cd15be1621584194efc1 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 31 Oct 2025 22:53:37 -0400 Subject: [PATCH 074/151] add gpu accelerated contouring --- src/kiri/mode/cam/op-contour.js | 2 +- src/kiri/mode/cam/prepare.js | 2 +- src/kiri/mode/cam/topo3.js | 124 +++++++++++++++++++++++++++++++- src/kiri/mode/cam/topo4.js | 2 +- src/kiri/run/worker.js | 3 + 5 files changed, 129 insertions(+), 4 deletions(-) diff --git a/src/kiri/mode/cam/op-contour.js b/src/kiri/mode/cam/op-contour.js index 1d14b313..ebeae04d 100644 --- a/src/kiri/mode/cam/op-contour.js +++ b/src/kiri/mode/cam/op-contour.js @@ -8,7 +8,7 @@ import { newPolygon } from '../../../geo/polygon.js'; import { tip2tipEmit } from '../../../geo/paths.js'; function createFilter(op, origin, axis) { - console.log({ origin, axis }); + // console.log({ origin, axis }); let ok = () => true; let filter = slices => slices; let filterString = op.filter?.map(l => l.trim()).join('\n'); diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index fafe22c6..516a5a09 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -429,7 +429,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { emit = 1; isMove = false; } else if (deltaZ <= -tolerance) { - console.log({ deltaZ, tolerance }); + console.log({ deltaZ, tolerance, iscontour }); // move over before descending layerPush(point.clone().setZ(lastPoint.z), 0, 0, tool); // new pos for plunge calc diff --git a/src/kiri/mode/cam/topo3.js b/src/kiri/mode/cam/topo3.js index 678cf831..abe4984e 100644 --- a/src/kiri/mode/cam/topo3.js +++ b/src/kiri/mode/cam/topo3.js @@ -19,6 +19,7 @@ export class Topo { let { widget, settings, tshadow, tabs } = opt.state; let { controller, process } = settings, + { webGPU } = controller, animesh = parseInt(controller.animesh || 100) * 2500, axis = contour.axis.toLowerCase(), contourX = axis === "x", @@ -46,7 +47,6 @@ export class Topo { maxangle = contour.angle, curvesOnly = contour.curves, bridge = contour.bridging || 0, - // R2A = 180 / Math.PI, stepsX = Math.ceil(boundsX / resolution), stepsY = Math.ceil(boundsY / resolution), widtopo = widget.topo, @@ -107,6 +107,128 @@ export class Topo { newslices.push(debug); } + if (webGPU) { + // invert tool Z offset for gpu code + let gputool = toolOffset.slice(); + for (let i=0; i calcPoint(i * ymult + yoff, j * xmult + xoff, v, i * xStep, j * yStep)) + : Array.from(lineData).map((v,j) => calcPoint(j * xmult + xoff, i * ymult + yoff, v, j * xStep, i * yStep)) + ; + let slice = newSlice(i); + let poly = newPolygon().setOpen(); + let lines = slice.camLines = [ ]; + let skip = 0; + let lp; + for (let p of points) { + if (inside && positions[p.ty * terrain.gridWidth + p.tx] < zBottom - epsilon) { + if (poly.length > 1) { + lines.push(poly); + poly = newPolygon().setOpen(); + } else if (poly.length === 1) { + poly = newPolygon().setOpen(); + } + lp = undefined; + skip = 0; + continue; + } + if (p.z < zBottom - epsilon) { + lp = p; + if (poly.length === 0) { + skip++; + continue; + } + if (poly.length > 1) { + skip = 0; + p.z = zBottom; + poly.push(p); + lines.push(poly); + poly = newPolygon().setOpen(); + continue; + } + } else if (lp && skip && poly.length === 0) { + lp.z = zBottom; + poly.push(lp); + } + poly.push(lp = p); + skip = 0; + } + if (poly.length > 1) { + lines.push(poly); + } + if (!inside && clipTab.length) + for (let poly of lines) { + for (let p of poly.points) { + for (let clip of clipTab) { + if (p.z < clip.z && p.isInPolygon(clip)) { + p.z = clip.z; + break; + } + } + } + } + slices.push(slice); + if (inside) { + onupdate(i, numScanlines); + } + } + ondone(slices); + return this; + } + const probe = this.probe = new Probe({ profile: toolOffset, data, diff --git a/src/kiri/mode/cam/topo4.js b/src/kiri/mode/cam/topo4.js index c29be373..af58f74e 100644 --- a/src/kiri/mode/cam/topo4.js +++ b/src/kiri/mode/cam/topo4.js @@ -190,7 +190,7 @@ export class Topo { zBottom, resolution, bounds, - { onProgress(pct, msg) { onupdate(pct/100) } } + { onProgress(pct) { onupdate(pct/100) } } ); let { numRotations, pointsPerLine, pathData } = output; diff --git a/src/kiri/run/worker.js b/src/kiri/run/worker.js index 9059a3c7..e55ad8aa 100644 --- a/src/kiri/run/worker.js +++ b/src/kiri/run/worker.js @@ -65,6 +65,9 @@ self.alert = function(o) { self.uuid = ((Math.random() * Date.now()) | 0).toString(36); +/** + * @returns {RasterPath} + */ self.get_raster_gpu = async function() { let gpu = self.raster_gpu; if (!gpu) { From 244969ef5f3106e9d5a67a5aed8ee472d3abd665 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 31 Oct 2025 23:12:02 -0400 Subject: [PATCH 075/151] fix tolerance/resolution for topo3 gpu raster mesh --- src/kiri/mode/cam/topo3.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/kiri/mode/cam/topo3.js b/src/kiri/mode/cam/topo3.js index abe4984e..206a3f4b 100644 --- a/src/kiri/mode/cam/topo3.js +++ b/src/kiri/mode/cam/topo3.js @@ -135,7 +135,7 @@ export class Topo { let xStep = density; let yStep = Math.round(toolStep / resolution); let epsilon = 10e-5; - let terrain = await gpu.rasterizeMesh(vertices, tolerance, 0, wbounds); + let terrain = await gpu.rasterizeMesh(vertices, resolution, 0, wbounds); let { positions } = terrain; let output = await gpu.generatePlanarToolpath( positions, From e10111ce5b25d04f88bd795160d69ea6a4911047 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 1 Nov 2025 10:47:52 -0400 Subject: [PATCH 076/151] add traceload debug option. change electron module init order --- mods/electron/electron.js | 4 ++-- src/main/kiri.js | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/mods/electron/electron.js b/mods/electron/electron.js index bbd19230..30e93f2d 100644 --- a/mods/electron/electron.js +++ b/mods/electron/electron.js @@ -1,8 +1,8 @@ if (self.kiri && !self.kiri.electron) { self.kiri.electron = {}; self.kiri.load(api => { - console.log('ELECTRON MODULE RUNNING'); - api.event.on('load-done', () => { + console.log('ELECTRON MODULE LOADED'); + api.event.on('init-done', () => { $('app-name-text').innerText = "More Info"; $('top-sep').style.display = 'flex'; }); diff --git a/src/main/kiri.js b/src/main/kiri.js index 14ec062c..b68b0a90 100644 --- a/src/main/kiri.js +++ b/src/main/kiri.js @@ -6,12 +6,29 @@ import '../add/three.js'; import '../kiri/core/lang.js'; import '../kiri/core/lang-en.js'; +import { broker } from '../moto/broker.js'; import { run } from '../kiri/core/init.js'; +let traceload = location.search.indexOf('traceload') > 0; let load = []; +if (traceload) { + broker.subscribe([ + "init.one", + "init.two", + "init.lang", + "init-done", + "load-done", + ], (msg, topic) => { + console.log(topic, '->', msg); + }) +} + function safeExec(fn) { try { + if (traceload) { + console.log('kiri | exec |', fn); + } fn(kiri.api); } catch (error) { console.log('load error', fn, error); From e816ec531dde152bf8a0c345add09465c54948e1 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 1 Nov 2025 10:56:26 -0400 Subject: [PATCH 077/151] fix npe with tabs in contour --- src/kiri/mode/cam/topo3.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/kiri/mode/cam/topo3.js b/src/kiri/mode/cam/topo3.js index 206a3f4b..b78d7690 100644 --- a/src/kiri/mode/cam/topo3.js +++ b/src/kiri/mode/cam/topo3.js @@ -90,7 +90,7 @@ export class Topo { // used by Pocket -> Contour this.tolerance = resolution; - if (tabs) { + if (tabsOn) { clipTab.appendAll(tabs.map(tab => { let ctab = POLY.expand([tab.poly], toolDiameter / 2); ctab.forEach(ct => ct.z = tab.dim.z / 2 + tab.pos.z); @@ -209,7 +209,7 @@ export class Topo { if (poly.length > 1) { lines.push(poly); } - if (!inside && clipTab.length) + if (!inside && tabsOn && clipTab.length) for (let poly of lines) { for (let p of poly.points) { for (let clip of clipTab) { From 46b2a627749a0ca5ff181a0955cecedcbad9af98 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 1 Nov 2025 11:20:10 -0400 Subject: [PATCH 078/151] sanitize topo3 resolution to avoid gpu fpu errros --- src/kiri/mode/cam/topo3.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/kiri/mode/cam/topo3.js b/src/kiri/mode/cam/topo3.js index b78d7690..980bdfdf 100644 --- a/src/kiri/mode/cam/topo3.js +++ b/src/kiri/mode/cam/topo3.js @@ -38,7 +38,7 @@ export class Topo { boundsY = maxY - minY, inside = contour.inside, density = 1 + (contour.reduction || 0), - resolution = tolerance ? tolerance : 1 / Math.sqrt(animesh / (boundsX * boundsY)), + resolution = (tolerance ? tolerance : 1 / Math.sqrt(animesh / (boundsX * boundsY))).round(5), tool = new Tool(settings, contour.tool), toolOffset = tool.generateProfile(resolution).profile, toolDiameter = tool.fluteDiameter(), From 4262ca8a52bc9d396accb2079771c016b243c611 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 1 Nov 2025 19:19:20 -0400 Subject: [PATCH 079/151] quiet raster worker by default --- src/kiri/run/worker.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/kiri/run/worker.js b/src/kiri/run/worker.js index e55ad8aa..23958136 100644 --- a/src/kiri/run/worker.js +++ b/src/kiri/run/worker.js @@ -71,7 +71,10 @@ self.uuid = ((Math.random() * Date.now()) | 0).toString(36); self.get_raster_gpu = async function() { let gpu = self.raster_gpu; if (!gpu) { - gpu = self.raster_gpu = new RasterPath({ workerName: "/lib/gpu/raster-worker.js" }); + gpu = self.raster_gpu = new RasterPath({ + workerName: "/lib/gpu/raster-worker.js", + quiet: true + }); await gpu.init(); await gpu.initWorkerPool(); } From 0fa2843fbf3d97cb5f03f607e6ec17d050553a43 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 2 Nov 2025 21:23:15 -0500 Subject: [PATCH 080/151] update to latest raster code --- src/gpu/raster-worker.js | 2 +- src/gpu/raster.js | 2 +- src/kiri/mode/cam/topo3.js | 37 ++++++++++++++----------- src/kiri/mode/cam/topo4.js | 55 +++++++++++++++++++++++--------------- src/kiri/run/worker.js | 22 ++++++++------- 5 files changed, 69 insertions(+), 49 deletions(-) diff --git a/src/gpu/raster-worker.js b/src/gpu/raster-worker.js index 3abe7863..5b532b07 120000 --- a/src/gpu/raster-worker.js +++ b/src/gpu/raster-worker.js @@ -1 +1 @@ -../../node_modules/@gridspace/raster-path/src/web/webgpu-worker.js \ No newline at end of file +../../../gs-raster-path/build/webgpu-worker.js \ No newline at end of file diff --git a/src/gpu/raster.js b/src/gpu/raster.js index 5ebcfa64..107e9b6f 120000 --- a/src/gpu/raster.js +++ b/src/gpu/raster.js @@ -1 +1 @@ -../../node_modules/@gridspace/raster-path/src/index.js \ No newline at end of file +../../../gs-raster-path/build/raster-path.js \ No newline at end of file diff --git a/src/kiri/mode/cam/topo3.js b/src/kiri/mode/cam/topo3.js index 980bdfdf..262fa309 100644 --- a/src/kiri/mode/cam/topo3.js +++ b/src/kiri/mode/cam/topo3.js @@ -108,11 +108,15 @@ export class Topo { } if (webGPU) { + console.log({ tool }); // invert tool Z offset for gpu code - let gputool = toolOffset.slice(); - for (let i=0; i newPoint(j * xmult + xoff, 0, v).setA(-i * degPerRow)); rows.push(points); diff --git a/src/kiri/run/worker.js b/src/kiri/run/worker.js index 23958136..27e8b570 100644 --- a/src/kiri/run/worker.js +++ b/src/kiri/run/worker.js @@ -68,16 +68,18 @@ self.uuid = ((Math.random() * Date.now()) | 0).toString(36); /** * @returns {RasterPath} */ -self.get_raster_gpu = async function() { - let gpu = self.raster_gpu; - if (!gpu) { - gpu = self.raster_gpu = new RasterPath({ - workerName: "/lib/gpu/raster-worker.js", - quiet: true - }); - await gpu.init(); - await gpu.initWorkerPool(); - } +self.get_raster_gpu = async function({ mode, resolution, rotationStep }) { + console.log({ mode, resolution, rotationStep }); + let gpu = new RasterPath({ + mode, + resolution, + rotationStep, + workerName: "/lib/gpu/raster-worker.js", + maxWorkers: 20, + quiet: false, + debug: true, + }); + await gpu.init(); return gpu; }; From 494397706f5f9c4dbf9f57a793ce4a25a588ca69 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 2 Nov 2025 21:48:02 -0500 Subject: [PATCH 081/151] updates for radial raster --- src/kiri/mode/cam/topo4.js | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/kiri/mode/cam/topo4.js b/src/kiri/mode/cam/topo4.js index f4e9f6c2..86cf2a5d 100644 --- a/src/kiri/mode/cam/topo4.js +++ b/src/kiri/mode/cam/topo4.js @@ -171,23 +171,21 @@ export class Topo { } let toolData = { positions: toolPos, bounds: toolBounds }; - console.time('swap XZ vertices'); + // console.time('swap XZ vertices'); // swap XZ vertices for gpu code for (let i=0; i newPoint(j * xmult + xoff, 0, v).setA(-i * degPerRow)); + let points = Array.from(lineData).map((v,j) => newPoint(j * xmult + xoff, 0, v).setA(-i * degPerRow - 90)); rows.push(points); } if (linear) { From 9de5457ec452c5fe0f89c9c339b54262b3f0b67d Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 2 Nov 2025 22:32:07 -0500 Subject: [PATCH 082/151] fix gpu lathe progress, gpu contour api use --- src/kiri/mode/cam/topo3.js | 4 ++-- src/kiri/mode/cam/topo4.js | 8 +++++--- src/kiri/run/worker.js | 1 - 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/kiri/mode/cam/topo3.js b/src/kiri/mode/cam/topo3.js index 262fa309..37120093 100644 --- a/src/kiri/mode/cam/topo3.js +++ b/src/kiri/mode/cam/topo3.js @@ -108,7 +108,6 @@ export class Topo { } if (webGPU) { - console.log({ tool }); // invert tool Z offset for gpu code let toolBounds = new THREE.Box3(); let toolPos = tool.profile.slice(); @@ -155,6 +154,7 @@ export class Topo { onProgress(pct) { console.log({ pct }); onupdate(pct/100, 100) } }); let { numScanlines, pointsPerLine, pathData } = output; + let { positions, gridWidth } = terrainData; let xmult = xStep * resolution; let ymult = yStep * resolution; let xoff = wbounds.min.x; @@ -179,7 +179,7 @@ export class Topo { let skip = 0; let lp; for (let p of points) { - if (inside && positions[p.ty * terrain.gridWidth + p.tx] < zBottom - epsilon) { + if (inside && positions[p.ty * gridWidth + p.tx] < zBottom - epsilon) { if (poly.length > 1) { lines.push(poly); poly = newPolygon().setOpen(); diff --git a/src/kiri/mode/cam/topo4.js b/src/kiri/mode/cam/topo4.js index 86cf2a5d..1fd15de6 100644 --- a/src/kiri/mode/cam/topo4.js +++ b/src/kiri/mode/cam/topo4.js @@ -71,8 +71,9 @@ export class Topo { onupdate(0, "lathe"); + const parts = webGPU ? [ 0.8, 0.2 ] : [ 0.25, 0.75 ]; const range = this.range = { min: Infinity, max: -Infinity }; - const slices = this.sliced = await this.slice(scale(onupdate, 0.25, 0)); + const slices = this.sliced = await this.slice(scale(onupdate, parts[0], 0)); for (let slice of slices) { range.min = Math.min(range.min, slice.z); @@ -82,7 +83,7 @@ export class Topo { .addPolys(slice.topPolys()); } - const lathe = await this.lathe(scale(onupdate, 0.75, 0.25)); + const lathe = await this.lathe(scale(onupdate, parts[1], parts[0])); onupdate(1, "lathe"); ondone(lathe); @@ -191,7 +192,8 @@ export class Topo { boundsOverride.max.x -= offEnd * unit; let terrainData = await gpu.rasterizeModel({ triangles: vertices, - boundsOverride + boundsOverride, + onProgress(pct) { onupdate(pct/100) } }); let output = await gpu.generateToolpaths({ terrainData, diff --git a/src/kiri/run/worker.js b/src/kiri/run/worker.js index 27e8b570..f5ebdf5e 100644 --- a/src/kiri/run/worker.js +++ b/src/kiri/run/worker.js @@ -69,7 +69,6 @@ self.uuid = ((Math.random() * Date.now()) | 0).toString(36); * @returns {RasterPath} */ self.get_raster_gpu = async function({ mode, resolution, rotationStep }) { - console.log({ mode, resolution, rotationStep }); let gpu = new RasterPath({ mode, resolution, From ee5144a97094003666ef8e66f3916dbdb432cb4c Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 4 Nov 2025 18:34:32 -0500 Subject: [PATCH 083/151] webgpu updates --- mods/bambu/bambu.js | 2 +- src/kiri/mode/cam/topo3.js | 9 ++++++--- src/kiri/mode/cam/topo4.js | 30 ++++++++++++++++++------------ src/kiri/run/worker.js | 3 ++- 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/mods/bambu/bambu.js b/mods/bambu/bambu.js index 2903cfbd..a16189c6 100644 --- a/mods/bambu/bambu.js +++ b/mods/bambu/bambu.js @@ -34,7 +34,7 @@ self.kiri.load(api => { }).map(v => `${v.substring(1)}FF`); let local_port = 5309; - let local_url = `http://localhost:${local_port}`; + let local_url = `ws://localhost:${local_port}`; let sequence_id = (Math.random() * 0xfff) | 0; let user_id = ((Math.random() * 0xfffffff) | 0).toString(); let init = false; diff --git a/src/kiri/mode/cam/topo3.js b/src/kiri/mode/cam/topo3.js index 37120093..cf7f83d8 100644 --- a/src/kiri/mode/cam/topo3.js +++ b/src/kiri/mode/cam/topo3.js @@ -109,10 +109,12 @@ export class Topo { if (webGPU) { // invert tool Z offset for gpu code - let toolBounds = new THREE.Box3(); + let toolBounds = new THREE.Box3() + .expandByPoint({ x: -toolDiameter/2, y: -toolDiameter/2, z: 0 }) + .expandByPoint({ x: toolDiameter/2, y: toolDiameter/2, z: 0 }); let toolPos = tool.profile.slice(); for (let i=0; i newPoint(j * xmult + xoff, 0, v).setA(-i * degPerRow - 90)); + let points = Array.from(lineData).map((v,j) => newPoint(j * xmult + xoff, 0, v).setA(-i * degPerRow)); rows.push(points); } if (linear) { diff --git a/src/kiri/run/worker.js b/src/kiri/run/worker.js index f5ebdf5e..d119d13a 100644 --- a/src/kiri/run/worker.js +++ b/src/kiri/run/worker.js @@ -74,7 +74,8 @@ self.get_raster_gpu = async function({ mode, resolution, rotationStep }) { resolution, rotationStep, workerName: "/lib/gpu/raster-worker.js", - maxWorkers: 20, + radialRotationOffset: -90, + trianglesPerTile: 15000, quiet: false, debug: true, }); From 17e40ceed05bb33a8ba6d6814533b8121e9b6898 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 4 Nov 2025 18:57:49 -0500 Subject: [PATCH 084/151] fix bambu local url --- mods/bambu/bambu.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/bambu/bambu.js b/mods/bambu/bambu.js index a16189c6..c00782d2 100644 --- a/mods/bambu/bambu.js +++ b/mods/bambu/bambu.js @@ -34,7 +34,7 @@ self.kiri.load(api => { }).map(v => `${v.substring(1)}FF`); let local_port = 5309; - let local_url = `ws://localhost:${local_port}`; + let local_host = `localhost:${local_port}`; let sequence_id = (Math.random() * 0xfff) | 0; let user_id = ((Math.random() * 0xfffffff) | 0).toString(); let init = false; @@ -53,7 +53,7 @@ self.kiri.load(api => { if (socket.ws) { return; } - let ws_url = api.onshape ? `${local_url}/bambu` : "/bambu"; + let ws_url = api.onshape ? `ws://${local_host}/bambu` : "/bambu"; let ws = socket.ws = new WebSocket(ws_url); ws.onerror = (error) => { socket.open = false; @@ -1288,7 +1288,7 @@ self.kiri.load(api => { function send(filename, gcode, start) { const spool = print_ams_select; - const baseUrl = api.onshape ? `${local_url}/api/bambu_send` : "/api/bambu_send"; + const baseUrl = api.onshape ? `http://${local_host}/api/bambu_send` : "/api/bambu_send"; const url = new URL(baseUrl, window.location.origin); url.searchParams.append('host', host); url.searchParams.append('code', password); From 8fdd16979b9e20909a1908b894ee5526b668cf7b Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 7 Nov 2025 00:06:40 -0500 Subject: [PATCH 085/151] update to v3 raster gpu api --- mods/bambu/bambu.js | 1 + src/kiri/mode/cam/op-lathe.js | 2 +- src/kiri/mode/cam/topo3.js | 10 ++++++---- src/kiri/mode/cam/topo4.js | 25 +++++++++++-------------- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/mods/bambu/bambu.js b/mods/bambu/bambu.js index c00782d2..76b43dfa 100644 --- a/mods/bambu/bambu.js +++ b/mods/bambu/bambu.js @@ -54,6 +54,7 @@ self.kiri.load(api => { return; } let ws_url = api.onshape ? `ws://${local_host}/bambu` : "/bambu"; + console.log({ bambu_ws_url: ws_url }); let ws = socket.ws = new WebSocket(ws_url); ws.onerror = (error) => { socket.open = false; diff --git a/src/kiri/mode/cam/op-lathe.js b/src/kiri/mode/cam/op-lathe.js index d1cde28b..802db102 100644 --- a/src/kiri/mode/cam/op-lathe.js +++ b/src/kiri/mode/cam/op-lathe.js @@ -37,7 +37,7 @@ class OpLathe extends CamOp { async slice(progress) { let { op, state } = this; - let { addSlices } = state; + let { addSlices, color } = state; let filter = createFilter(op); this.topo = await topo4_generate({ op, diff --git a/src/kiri/mode/cam/topo3.js b/src/kiri/mode/cam/topo3.js index cf7f83d8..250e2644 100644 --- a/src/kiri/mode/cam/topo3.js +++ b/src/kiri/mode/cam/topo3.js @@ -143,21 +143,23 @@ export class Topo { let xStep = density; let yStep = Math.ceil(toolStep / resolution); let epsilon = 10e-5; - let terrainData = await gpu.rasterizeModel({ + await gpu.loadTool({ + sparseData: toolData + }); + let terrain = await gpu.loadTerrain({ triangles: vertices, boundsOverride: wbounds }); + let { gridWidth, positions } = terrain; let output = await gpu.generateToolpaths({ - terrainData, - toolData, xStep, yStep, zFloor: zBottom - 1, onProgress(pct) { console.log({ pct }); onupdate(pct/100, 100) } }); gpu.terminate(); + let { numScanlines, pointsPerLine, pathData } = output; - let { positions, gridWidth } = terrainData; let xmult = xStep * resolution; let ymult = yStep * resolution; let xoff = wbounds.min.x; diff --git a/src/kiri/mode/cam/topo4.js b/src/kiri/mode/cam/topo4.js index a1f1de5a..38300db5 100644 --- a/src/kiri/mode/cam/topo4.js +++ b/src/kiri/mode/cam/topo4.js @@ -22,7 +22,7 @@ export class Topo { async generate(opt = {}) { let { state, op, onupdate, ondone } = opt; - let { widget, settings, tabs } = opt.state; + let { widget, settings, tabs, color } = state; let { controller, process } = settings; let { webGPU } = controller; @@ -64,7 +64,7 @@ export class Topo { this.zoff = widget.track.top || 0; this.leave = op.leave || 0; this.linear = op.linear || false; - this.lineColor = controller.dark ? 0xffff00 : 0x555500; + this.lineColor = color;//controller.dark ? 0xffff00 : 0x555500; this.offStart = op.offStart ?? 0; this.offEnd = op.offEnd ?? 0; this.bounds = bounds; @@ -79,9 +79,6 @@ export class Topo { for (let slice of slices) { range.min = Math.min(range.min, slice.z); range.max = Math.max(range.max, slice.z); - slice.output() - .setLayer("lathe", { line: 0x888888 }) - .addPolys(slice.topPolys()); } const lathe = await this.lathe(scale(onupdate, parts[1], parts[0])); @@ -195,14 +192,15 @@ export class Topo { let boundsOverride = this.bounds.clone(); boundsOverride.min.x += offStart * units; boundsOverride.max.x -= offEnd * units; - let terrainData = await gpu.rasterizeModel({ + await gpu.loadTool({ + sparseData: toolData + }); + await gpu.loadTerrain({ triangles: vertices, boundsOverride, onProgress(pct) { onupdate(pct/100) } }); let output = await gpu.generateToolpaths({ - terrainData, - toolData, xStep, yStep: 1, zFloor: zBottom, @@ -210,15 +208,14 @@ export class Topo { }); gpu.terminate(); - let { numScanlines, pointsPerLine, pathData } = output; - let degPerRow = 360 / numScanlines; + let { numStrips, strips } = output; + let degPerRow = 360 / numStrips; let slices = this.gpu_slices = []; let xmult = resolution * xStep; - let xoff = output.generationBounds.min.x; + let xoff = boundsOverride.min.x; let rows = []; - for (let i=0; i newPoint(j * xmult + xoff, 0, v).setA(-i * degPerRow)); + for (let i=0; i newPoint(j * xmult + xoff, 0, v).setA(-i * degPerRow)); rows.push(points); } if (linear) { From f311134e36612b32b7d1f84eebd3eace45f6b964 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 7 Nov 2025 00:43:35 -0500 Subject: [PATCH 086/151] update raster gpu package links --- src/gpu/raster-worker.js | 2 +- src/gpu/raster.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gpu/raster-worker.js b/src/gpu/raster-worker.js index 5b532b07..20411287 120000 --- a/src/gpu/raster-worker.js +++ b/src/gpu/raster-worker.js @@ -1 +1 @@ -../../../gs-raster-path/build/webgpu-worker.js \ No newline at end of file +../../node_modules/@gridspace/raster-path/build/webgpu-worker.js \ No newline at end of file diff --git a/src/gpu/raster.js b/src/gpu/raster.js index 107e9b6f..ff5321e2 120000 --- a/src/gpu/raster.js +++ b/src/gpu/raster.js @@ -1 +1 @@ -../../../gs-raster-path/build/raster-path.js \ No newline at end of file +../../node_modules/@gridspace/raster-path/build/raster-path.js \ No newline at end of file From 6ad4b69599d8d350de5408255a3359506a1279dd Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 7 Nov 2025 00:54:15 -0500 Subject: [PATCH 087/151] use npm package for raster-path to allow post-install build --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index dfd0d1d1..c0b7dc2d 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@gridspace/app-server": "github:gridspace/app-server#v0.0.19", "@gridspace/basic-ftp": "github:gridspace/basic-ftp#v5.0.5-gridspace", "@gridspace/net-level-client": "^0.2.3", - "@gridspace/raster-path": "github:gridspace/raster-path#main", + "@gridspace/raster-path": "^1.0.2", "@tracespace/parser": "^5.0.0-next.0", "@tweenjs/tween.js": "^16.6.0", "base64-js": "^1.5.1", From beae3ddab6d7504ee865184d5d102d9d6927415e Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 7 Nov 2025 00:56:58 -0500 Subject: [PATCH 088/151] bump raster package version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c0b7dc2d..e270182f 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@gridspace/app-server": "github:gridspace/app-server#v0.0.19", "@gridspace/basic-ftp": "github:gridspace/basic-ftp#v5.0.5-gridspace", "@gridspace/net-level-client": "^0.2.3", - "@gridspace/raster-path": "^1.0.2", + "@gridspace/raster-path": "^1.0.3", "@tracespace/parser": "^5.0.0-next.0", "@tweenjs/tween.js": "^16.6.0", "base64-js": "^1.5.1", From eb67e1976d0ae206d96065499e19e05c40ac076d Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 10 Nov 2025 00:15:41 -0500 Subject: [PATCH 089/151] update to newer raster path --- package.json | 2 +- src/kiri/mode/cam/topo4.js | 4 +++- src/mesh/build.js | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index e270182f..128217f0 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@gridspace/app-server": "github:gridspace/app-server#v0.0.19", "@gridspace/basic-ftp": "github:gridspace/basic-ftp#v5.0.5-gridspace", "@gridspace/net-level-client": "^0.2.3", - "@gridspace/raster-path": "^1.0.3", + "@gridspace/raster-path": "^1.0.4", "@tracespace/parser": "^5.0.0-next.0", "@tweenjs/tween.js": "^16.6.0", "base64-js": "^1.5.1", diff --git a/src/kiri/mode/cam/topo4.js b/src/kiri/mode/cam/topo4.js index 38300db5..e3a09916 100644 --- a/src/kiri/mode/cam/topo4.js +++ b/src/kiri/mode/cam/topo4.js @@ -179,6 +179,7 @@ export class Topo { for (let i=0; i Date: Mon, 10 Nov 2025 08:28:24 -0500 Subject: [PATCH 090/151] cam: add zsafe and move to safe z at start of new operation --- src/kiri/mode/cam/op-drill.js | 9 ++++----- src/kiri/mode/cam/prepare.js | 26 ++++++++++++++++++-------- src/kiri/mode/cam/topo4.js | 1 + 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/kiri/mode/cam/op-drill.js b/src/kiri/mode/cam/op-drill.js index eefde0cf..b97428be 100644 --- a/src/kiri/mode/cam/op-drill.js +++ b/src/kiri/mode/cam/op-drill.js @@ -14,8 +14,8 @@ class OpDrill extends CamOp { async slice(progress) { let { op, state } = this; let { settings, addSlices, widget, updateToolDiams } = state; - let { zBottom, zThru, thruHoles, color } = state; - let { drills, drillThrough } = op + let { color } = state; + let { drills } = op let drillTool = new Tool(settings, op.tool), drillToolDiam = drillTool.fluteDiameter(), @@ -55,11 +55,10 @@ class OpDrill extends CamOp { } prepare(ops, progress) { - let { op, state } = this; - let { settings, widget, addSlices, updateToolDiams } = state; + let { op } = this; let { setTool, setSpindle, setDrill, emitDrills } = ops; setTool(op.tool, undefined, op.rate); - setDrill(op.down, op.lift, op.dwell, op.thru); + setDrill(op.down, op.lift, op.dwell); setSpindle(op.spindle); emitDrills(this.sliceOut.map(slice => slice.camLines).flat()); } diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index 516a5a09..113fc7f9 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -56,8 +56,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { if (widget.camops.length === 0 || widget.meta.disabled) return; - let device = settings.device, - process = settings.process, + let { device, process } = settings, isIndexed = process.camStockIndexed, startCenter = process.camOriginCenter, alignTop = settings.controller.alignTop, @@ -65,7 +64,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { stockz = stock.z * (isIndexed ? 0.5 : 1), outer = settings.bounds || widget.getPositionBox(), outerz = outer.max.z, - slices = widget.slices, + // slices = widget.slices, zclear = (process.camZClearance || 1), zmax_force = process.camForceZMax || false, zmax_outer = stockz + zclear, @@ -75,13 +74,14 @@ export function prepEach(widget, settings, print, firstPoint, update) { boundsz = isIndexed ? stock.z / 2 : bounds.max.z + ztOff, zadd = !isIndexed ? stock.z - boundsz : alignTop ? outerz - boundsz : 0, zmax = outerz + zclear + (process.camOriginOffZ || 0), + zsafe = isIndexed ? Math.hypot(bounds.dim.y, bounds.dim.z) / 2 + zclear : zmax, wmpos = widget.track.pos, wmx = wmpos.x, wmy = wmpos.y, originx = (startCenter ? 0 : -stock.x / 2) + (process.camOriginOffX || 0), originy = (startCenter ? 0 : -stock.y / 2) + (process.camOriginOffY || 0), origin = newPoint(originx + wmx, originy + wmy, zmax), - output = print.output, + // output = print.output, easeDown = process.camEaseDown, easeAngle = process.camEaseAngle, depthFirst = process.camDepthFirst, @@ -94,13 +94,12 @@ export function prepEach(widget, settings, print, firstPoint, update) { drillDown = 0, drillLift = 0, drillDwell = 0, - drillThru = 0, lasering = false, laserPower = 0, newOutput = print.output || [], layerOut = [], printPoint, - isNewMode, + // isNewMode, isPocket, isContour, isRough, @@ -188,11 +187,10 @@ export function prepEach(widget, settings, print, firstPoint, update) { laserPower = power; } - function setDrill(down, lift, dwell, thru) { + function setDrill(down, lift, dwell) { drillDown = down; drillLift = lift; drillDwell = dwell; - drillThru = thru; } function emitDrills(polys) { @@ -337,6 +335,17 @@ export function prepEach(widget, settings, print, firstPoint, update) { function camOut(point, emit = 1, opts) { let lop = lastOp; lastOp = currentOp; + + // on operation changes: + // 1. move to safe z of current point preserving angle + // 2. move to safe z of new point preserving old angle + // 3. move to safe z of new point with new angle + if (lop !== currentOp && lastPoint) { + camOut(lastPoint.clone().setZ(zsafe).setA(lastPoint.a), 1); + camOut(point.clone().setZ(zsafe).setA(lastPoint.a), 1); + camOut(point.clone().setZ(zsafe), 1); + } + if (lop?.type === 'index' && lop !== currentOp ) { // console.log('post index first point', point); camOut(point.clone().setZ(lastPoint.z).setA(lastPoint.a), 1); @@ -710,6 +719,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { bounds, zclear, zmax, + zsafe, lastPoint: () => { return lastPoint } }; diff --git a/src/kiri/mode/cam/topo4.js b/src/kiri/mode/cam/topo4.js index e3a09916..df72df16 100644 --- a/src/kiri/mode/cam/topo4.js +++ b/src/kiri/mode/cam/topo4.js @@ -229,6 +229,7 @@ export class Topo { slices.push(slice); } } else { + let { pointsPerLine } = strips[0]; for (let i=0; i row[i]); From 0d8284c41f0ddda55f726559549f05bd942db6b0 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 10 Nov 2025 22:46:08 -0500 Subject: [PATCH 091/151] update raster-path dep, fix progress reporting --- package.json | 2 +- src/gpu/raster-worker.js | 2 +- src/kiri/mode/cam/topo4.js | 2 +- src/kiri/run/worker.js | 2 -- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 128217f0..433966d5 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@gridspace/app-server": "github:gridspace/app-server#v0.0.19", "@gridspace/basic-ftp": "github:gridspace/basic-ftp#v5.0.5-gridspace", "@gridspace/net-level-client": "^0.2.3", - "@gridspace/raster-path": "^1.0.4", + "@gridspace/raster-path": "^1.0.6", "@tracespace/parser": "^5.0.0-next.0", "@tweenjs/tween.js": "^16.6.0", "base64-js": "^1.5.1", diff --git a/src/gpu/raster-worker.js b/src/gpu/raster-worker.js index 20411287..1a1379dc 120000 --- a/src/gpu/raster-worker.js +++ b/src/gpu/raster-worker.js @@ -1 +1 @@ -../../node_modules/@gridspace/raster-path/build/webgpu-worker.js \ No newline at end of file +../../node_modules/@gridspace/raster-path/build/raster-worker.js \ No newline at end of file diff --git a/src/kiri/mode/cam/topo4.js b/src/kiri/mode/cam/topo4.js index df72df16..67ff8203 100644 --- a/src/kiri/mode/cam/topo4.js +++ b/src/kiri/mode/cam/topo4.js @@ -206,7 +206,7 @@ export class Topo { xStep, yStep: 1, zFloor: zBottom, - onProgress(pct) { onupdate(pct/100) } + onProgress(i,j) { onupdate(i/j) } }); gpu.terminate(); diff --git a/src/kiri/run/worker.js b/src/kiri/run/worker.js index d119d13a..15ac1ad8 100644 --- a/src/kiri/run/worker.js +++ b/src/kiri/run/worker.js @@ -74,8 +74,6 @@ self.get_raster_gpu = async function({ mode, resolution, rotationStep }) { resolution, rotationStep, workerName: "/lib/gpu/raster-worker.js", - radialRotationOffset: -90, - trianglesPerTile: 15000, quiet: false, debug: true, }); From 14def831cd6d32e12fec8b1a06474c5828451aec Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 10 Nov 2025 23:14:08 -0500 Subject: [PATCH 092/151] add new cam op register mode that marks the bottom cutout tabs --- src/kiri/core/consts.js | 3 ++- src/kiri/mode/cam/op-register.js | 22 +++++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/kiri/core/consts.js b/src/kiri/core/consts.js index 4efe0ba5..0f6e9ff7 100644 --- a/src/kiri/core/consts.js +++ b/src/kiri/core/consts.js @@ -108,7 +108,8 @@ const LISTS = { regaxis: [ { name: "X" }, { name: "Y" }, - { name: "-" } + { name: "-" }, + { name: "=" } ], regpoints: [ { name: "2" }, diff --git a/src/kiri/mode/cam/op-register.js b/src/kiri/mode/cam/op-register.js index 9c01da50..3905f4ec 100644 --- a/src/kiri/mode/cam/op-register.js +++ b/src/kiri/mode/cam/op-register.js @@ -19,6 +19,7 @@ class OpRegister extends CamOp { let tool = new Tool(settings, op.tool); let sliceOut = this.sliceOut = []; + let axis = op.axis.toLowerCase(); updateToolDiams(tool.fluteDiameter()); @@ -42,7 +43,7 @@ class OpRegister extends CamOp { return; } - switch (op.axis.toLowerCase()) { + switch (axis) { case "x": if (op.points == 3) { pathPoints.push(newPoint(boundMinX - cutOffset, centerY, 0)); @@ -64,6 +65,7 @@ class OpRegister extends CamOp { } break; case "-": + case "=": let halfOffset = toolOffset / 2, loopMinX = boundMinX - cutOffset, loopMaxX = boundMaxX + cutOffset, @@ -84,7 +86,7 @@ class OpRegister extends CamOp { } function rept(count, step, fn) { while (count-- > 0) { - fn(step, count === 0); + fn(step, count); step = -step; } } @@ -93,9 +95,16 @@ class OpRegister extends CamOp { addSlices(slice); sliceOut.push(slice); start(z); - rept(4, halfOffset, oy => { + rept(4, halfOffset, (oy, count) => { move(0, -oy); - move(deltaX, 0); + if (axis === '=' && count % 2 === 1) { + move(deltaX/2, 0); + move(0, oy/2); + move(0, -oy/2); + move(deltaX/2, 0); + } else { + move(deltaX, 0); + } }); rept(4, halfOffset, ox => { move(ox, 0); @@ -136,11 +145,10 @@ class OpRegister extends CamOp { } prepare(ops, progress) { - let { op, state } = this; - let { settings, widget, addSlices, updateToolDiams } = state; + let { op } = this; let { setTool, setSpindle, setDrill, emitDrills } = ops; - if (op.axis === '-') { + if (op.axis === '-' || op.axis === '=') { setTool(op.tool, op.feed, op.rate); setSpindle(op.spindle); for (let slice of this.sliceOut) { From f4d7a3726595434b8511bcfdd177aa1b40cbb600 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 11 Nov 2025 15:06:05 -0500 Subject: [PATCH 093/151] add curves-only support to gpu contour, merge co-planar point runs --- src/geo/point.js | 6 ++++ src/geo/polygon.js | 2 ++ src/kiri/mode/cam/export.js | 5 +-- src/kiri/mode/cam/op-contour.js | 12 +++---- src/kiri/mode/cam/prepare.js | 30 ++++++++-------- src/kiri/mode/cam/topo3.js | 64 ++++++++++++++++++++++++++------- web/kiri/lang/en.js | 4 +-- 7 files changed, 84 insertions(+), 39 deletions(-) diff --git a/src/geo/point.js b/src/geo/point.js index 1c270f35..23f09d8c 100644 --- a/src/geo/point.js +++ b/src/geo/point.js @@ -127,6 +127,12 @@ class Point { return p; } + // annotate instance with other field data (see clone()) + annotate(obj = {}) { + Object.assign(this, obj); + return this; + } + slopeTo(p) { return newSlope(this, p); } diff --git a/src/geo/polygon.js b/src/geo/polygon.js index ddce7094..952a0474 100644 --- a/src/geo/polygon.js +++ b/src/geo/polygon.js @@ -908,6 +908,7 @@ export class Polygon { * todo make more efficient * * @param {Boolean} deep + * @param {String[]} fields to copy beyond class fields * @returns {Polygon} */ clone(deep, fields) { @@ -2145,6 +2146,7 @@ export class Polygon { return null; } + // annotate instance with other field data (see clone()) annotate(obj = {}) { Object.assign(this, obj); return this; diff --git a/src/kiri/mode/cam/export.js b/src/kiri/mode/cam/export.js index 96d31f63..1a6f9866 100644 --- a/src/kiri/mode/cam/export.js +++ b/src/kiri/mode/cam/export.js @@ -12,10 +12,8 @@ export function cam_export(print, online) { const widget = print.widgets[0]; if (!widget) return; - console.log({ cam_export: print }); - const { settings } = print; - const { device, tools } = settings; + const { device } = settings; let i, time = 0, @@ -169,7 +167,6 @@ export function cam_export(print, online) { function moveTo(out, opt = {}) { let laser = out.type === 'laser'; let newpos = out.point; - console.log(mode.type, out.point); // no point == dwell // out.speed = time to dwell in ms diff --git a/src/kiri/mode/cam/op-contour.js b/src/kiri/mode/cam/op-contour.js index ebeae04d..e0437079 100644 --- a/src/kiri/mode/cam/op-contour.js +++ b/src/kiri/mode/cam/op-contour.js @@ -113,11 +113,11 @@ class OpContour extends CamOp { prepare(ops, progress) { let { op, state, sliceOut } = this; - let { settings, widget } = state; + let { settings } = state; let { process } = settings; let { setTolerance, setTool, setSpindle, setPrintPoint } = ops; - let { camOut, polyEmit, newLayer, printPoint, lastPoint } = ops; + let { camOut, newLayer, printPoint, lastPoint } = ops; let { bounds, zmax } = ops; let toolDiam = this.toolDiam; @@ -136,9 +136,9 @@ class OpContour extends CamOp { if (!slice.camLines) { continue; } - let polys = [], poly, emit; + let polys = [], poly; slice.camLines.forEach(function (poly) { - if (depthFirst) poly = poly.clone(true); + if (depthFirst) poly = poly.clone(true).annotate({ slice: slice.index + 1 }); polys.push({ first: poly.first(), last: poly.last(), poly: poly }); }); if (depthFirst) { @@ -150,7 +150,7 @@ class OpContour extends CamOp { poly.reverse(); } poly.forEachPoint(function (point, pidx) { - camOut(point.clone(), pidx > 0, stepover); + camOut(point.clone(), pidx > 0, { moveLen: stepover }); }, false); }); newLayer(); @@ -164,7 +164,7 @@ class OpContour extends CamOp { poly.reverse(); } poly.forEachPoint(function (point, pidx) { - camOut(point.clone(), pidx > 0, stepover); + camOut(point.clone().annotate({ slice: poly.slice }), pidx > 0, { moveLen: stepover }); }, false); newLayer(); return lastPoint(); diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index 113fc7f9..75466311 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -64,7 +64,6 @@ export function prepEach(widget, settings, print, firstPoint, update) { stockz = stock.z * (isIndexed ? 0.5 : 1), outer = settings.bounds || widget.getPositionBox(), outerz = outer.max.z, - // slices = widget.slices, zclear = (process.camZClearance || 1), zmax_force = process.camForceZMax || false, zmax_outer = stockz + zclear, @@ -81,7 +80,6 @@ export function prepEach(widget, settings, print, firstPoint, update) { originx = (startCenter ? 0 : -stock.x / 2) + (process.camOriginOffX || 0), originy = (startCenter ? 0 : -stock.y / 2) + (process.camOriginOffY || 0), origin = newPoint(originx + wmx, originy + wmy, zmax), - // output = print.output, easeDown = process.camEaseDown, easeAngle = process.camEaseAngle, depthFirst = process.camDepthFirst, @@ -99,7 +97,6 @@ export function prepEach(widget, settings, print, firstPoint, update) { newOutput = print.output || [], layerOut = [], printPoint, - // isNewMode, isPocket, isContour, isRough, @@ -263,8 +260,8 @@ export function prepEach(widget, settings, print, firstPoint, update) { */ function layerPush(point, emit, speed, tool, options) { const { type, center, arcPoints } = options ?? {}; - const dz = (point && lastPush && lastPush.point) ? point.z - lastPush.point.z : 0; - if (dz < 0 && speed > plungeRate) { + const dz = (point && lastPush?.point) ? point.z - lastPush.point.z : 0; + if (dz < -0.05 && speed > plungeRate) { speed = plungeRate; } // if (options?.type !== 'lerp') console.log( point, currentOp.type ); @@ -320,7 +317,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { p.x + wmx, p.y + wmy, p.z + zadd - ).setA(p.a ?? lastPoint?.a); + ).setA(p.a ?? lastPoint?.a).annotate({ slice: p.slice }); } /** @@ -359,14 +356,12 @@ export function prepEach(widget, settings, print, firstPoint, update) { factor = 1, } = opts ?? {} - // console.log({radius}) const isArc = emit == 2 || emit == 3; + const pointA = point.a; // apply widget movement pos - const pointA = point.a; point = applyWidgetMovement(point); - // console.log(point.z); if (nextIsMove) { emit = 0; nextIsMove = false; @@ -429,6 +424,9 @@ export function prepEach(widget, settings, print, firstPoint, update) { return; } + // no jump moves in contour mode to adjacent slice points + let steady = lastPoint && currentOp.type === 'contour' && Math.abs(point.slice - lastPoint.slice) < 4; + // convert short planar moves to cuts in some cases if (hasDelta && !isArc && isMove && deltaXY <= moveLen && deltaZ <= 0 && !lasering) { let iscontour = tolerance > 0; @@ -438,7 +436,6 @@ export function prepEach(widget, settings, print, firstPoint, update) { emit = 1; isMove = false; } else if (deltaZ <= -tolerance) { - console.log({ deltaZ, tolerance, iscontour }); // move over before descending layerPush(point.clone().setZ(lastPoint.z), 0, 0, tool); // new pos for plunge calc @@ -450,7 +447,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { } else if (point.z < lastPoint.z) { layerPush(point.clone().setZ(lastPoint.z), 0, 0, tool); } - } else if (isMove) { + } else if (isMove && !steady) { // for longer moves, check the terrain to see if we need to go up and over const bigXY = (deltaXY > moveLen && !lasering); const bigZ = (deltaZ > toolDiam / 2 && deltaXY > tolerance); @@ -497,13 +494,15 @@ export function prepEach(widget, settings, print, firstPoint, update) { } // set new plunge rate + let tmprate; + if (false) if (!lasering && !isLathe && deltaZ < -tolerance) { let threshold = Math.min(deltaXY / 2, absDeltaZ), modifier = threshold / absDeltaZ; if (synthPlunge && threshold && modifier && deltaXY > tolerance) { // use modifier to speed up long XY move plunge rates // console.log('modifier', modifier); - rate = Math.max( + tmprate = Math.max( plungeRate, Math.round(plungeRate + ((feedRate - plungeRate) * modifier)) ); @@ -511,7 +510,8 @@ export function prepEach(widget, settings, print, firstPoint, update) { let L = Math.hypot(deltaXY, absDeltaZ); let limXY = feedRate * L / deltaXY; let limZ = plungeRate * L / Math.abs(deltaZ); - rate = Math.min(feedRate, limXY, limZ); + tmprate = Math.min(feedRate, limXY, limZ); + console.log({ rate_override: rate, was: rate }); // let zps = len / absDeltaZ; // rate = Math.max( // plungeRate, @@ -527,7 +527,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { lastPoint = layerPush( point, clockwise ? 2 : 3, - rate, + tmprate ?? rate, tool, { center, @@ -542,7 +542,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { lastPoint = layerPush( point, emit, - rate, + tmprate ?? rate, tool ); } diff --git a/src/kiri/mode/cam/topo3.js b/src/kiri/mode/cam/topo3.js index 250e2644..91a4d59d 100644 --- a/src/kiri/mode/cam/topo3.js +++ b/src/kiri/mode/cam/topo3.js @@ -7,6 +7,7 @@ import { newSlice } from '../../core/slice.js'; import { Slicer as topo_slicer } from './slicer_topo.js'; import { polygons as POLY } from '../../../geo/polygons.js'; import { Tool } from './tool.js'; +import { poly2polyEmit } from '../../../geo/paths.js'; const RAD2DEG = 180 / Math.PI; const DEG2RAD = Math.PI / 180; @@ -42,7 +43,7 @@ export class Topo { tool = new Tool(settings, contour.tool), toolOffset = tool.generateProfile(resolution).profile, toolDiameter = tool.fluteDiameter(), - toolStep = toolDiameter * contour.step, //tool.contourOffset(contour.step), + toolStep = toolDiameter * contour.step, leave = contour.leave || 0, maxangle = contour.angle, curvesOnly = contour.curves, @@ -75,12 +76,7 @@ export class Topo { clipTo = inside ? shadow : POLY.expand(shadow, toolDiameter / 2 + resolution * 3), partOff = inside ? 0 : toolDiameter / 2 + resolution, gridDelta = Math.floor(partOff / resolution), - debug = false, - debug_clips = debug && true, - debug_topo = debug && true, - debug_topo_lines = debug && true, - debug_topo_shells = debug && true, - time = Date.now; + debug_clips = false; if (tolerance === 0 && !topoCache) { console.log(widget.id, 'topo auto tolerance', resolution.round(4)); @@ -142,7 +138,7 @@ export class Topo { }); let xStep = density; let yStep = Math.ceil(toolStep / resolution); - let epsilon = 10e-5; + let epsilon = 10e-4; await gpu.loadTool({ sparseData: toolData }); @@ -180,7 +176,7 @@ export class Topo { ; let slice = newSlice(i); let poly = newPolygon().setOpen(); - let lines = slice.camLines = [ ]; + let lines = [ ]; let skip = 0; let lp; for (let p of points) { @@ -216,9 +212,11 @@ export class Topo { poly.push(lp = p); skip = 0; } + // require two points or more if (poly.length > 1) { lines.push(poly); } + // raize output points when inside tab boundaries if (!inside && tabsOn && clipTab.length) for (let poly of lines) { for (let p of poly.points) { @@ -230,6 +228,49 @@ export class Topo { } } } + // drop interior points along a continuous slope + for (let poly of lines) { + let { points } = poly; + let merged = [ points[0] ]; + let lp = points[1]; + let dz = points[0].z - lp.z; + for (let i=2; i epsilon) { + // slope changed + merged.push(lp); + dz = ndz; + } else if (curvesOnly && Math.abs(ndz) < epsilon) { + // add empty points as path separators + merged.push(undefined); + } + lp = np; + } + if (merged.peek() !== lp) { + merged.push(lp); + } + poly.points = merged; + } + // drop flat regions when enabled + if (curvesOnly) { + let nulines = []; + for (let poly of lines) { + let { points } = poly; + let newp = []; + for (let p of points) { + if (p) { + newp.push(p); + } else if (newp.length) { + nulines.push(newPolygon(newp).setOpen()); + newp = []; + } + } + nulines.push(newPolygon(newp).setOpen()); + } + lines = nulines.filter(p => p.perimeter() > toolStep); + } + slice.camLines = lines; slices.push(slice); if (inside) { onupdate(i, numScanlines); @@ -659,9 +700,9 @@ export class Trace { console.log(...arguments); } - const push_point = this.push_point = function (x, y, z) { + this.push_point = function (x, y, z) { const newP = newPoint(x, y, z); - const lastP = lastPP;//trace.last(); + const lastP = lastPP; if (lastP) { const dl = (x - lastP.x) || (y - lastP.y); @@ -678,7 +719,6 @@ export class Trace { } if (curvesOnly) { const dv = contourX ? Math.abs(lastP.x - x) : Math.abs(lastP.y - y); - // const dz = lastPP.z - z; const angle = Math.atan2(Math.abs(dz), dv) * RAD2DEG; if (angle > maxangle) { end_poly(); diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index ac673935..e8ccb87c 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -321,10 +321,10 @@ self.lang['en-us'] = { pt_heal_l: ["attempt to heal non-manifold meshes during slicing. may increase slicing time. enables a warning when non-manifold geometries are detected."], pt_thrd_s: "threaded", pt_thrd_l: ["use parallel processing when browser supports nested workers. may increase memory pressure on larger models. disable if you are getting out of memory errors"], - pt_assy_s: "assembly", + pt_assy_s: "web asm", pt_assy_l: ["use web assembly when supported by browser. if you experience artifacts or memory errors, try disabling this."], pt_wgpu_s: "web gpu", - pt_wgpu_l: ["use web gpu when supported by browser"], + pt_wgpu_l: ["use web gpu when supported by browser. if you experience artifacts or memory errors, try disabling this."], xp_menu: "exports", From ed11fbd82a1e768a7eca3fd264769843e4b229d4 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 11 Nov 2025 15:51:12 -0500 Subject: [PATCH 094/151] fix 'safe' moves during operation changes to be moves, not cuts --- src/kiri/mode/cam/prepare.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index 75466311..9db0a70e 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -338,9 +338,9 @@ export function prepEach(widget, settings, print, firstPoint, update) { // 2. move to safe z of new point preserving old angle // 3. move to safe z of new point with new angle if (lop !== currentOp && lastPoint) { - camOut(lastPoint.clone().setZ(zsafe).setA(lastPoint.a), 1); - camOut(point.clone().setZ(zsafe).setA(lastPoint.a), 1); - camOut(point.clone().setZ(zsafe), 1); + camOut(lastPoint.clone().setZ(zsafe).setA(lastPoint.a), 0); + camOut(point.clone().setZ(zsafe).setA(lastPoint.a), 0); + camOut(point.clone().setZ(zsafe), 0); } if (lop?.type === 'index' && lop !== currentOp ) { From 783f39bb4e34a643699e0c6f387ee0d5225aac89 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 11 Nov 2025 19:16:55 -0500 Subject: [PATCH 095/151] add install/uninstall options in the setup menu --- bin/bundle.config.json | 4 ++-- bin/bundler.mjs | 11 ++++++++--- package.json | 4 +++- src/main/kiri.js | 15 ++++++++++++++- web/boot/service.js | 4 ++-- web/kiri/index.html | 9 +++++++++ web/kiri/lang/en.js | 2 ++ web/kiri/manifest.json | 2 +- 8 files changed, 41 insertions(+), 10 deletions(-) diff --git a/bin/bundle.config.json b/bin/bundle.config.json index e7bd3566..97890b62 100644 --- a/bin/bundle.config.json +++ b/bin/bundle.config.json @@ -1,7 +1,7 @@ { "compress": false, "outputs": { - "bundle": "./web/boot/bundle.bin" + "bundle": "./web/boot/bundle-{version}.bin" }, "inputs": [ { "root": "web", "prefix": "" }, @@ -12,6 +12,6 @@ ], "excludes": [ "src/pack", - "web/boot/bundle.bin" + "web/boot/bundle*" ] } diff --git a/bin/bundler.mjs b/bin/bundler.mjs index e63aba3e..12f43186 100644 --- a/bin/bundler.mjs +++ b/bin/bundler.mjs @@ -3,8 +3,10 @@ import path from 'path'; import uglify from 'uglify-js'; import { Buffer } from 'buffer'; +const version = JSON.parse(fs.readFileSync('package.json', 'utf8')).version; const cfg = JSON.parse(fs.readFileSync(process.argv[2] || './bin/bundle.config.json', 'utf8')); const { inputs, outputs, excludes, compress } = cfg; +const excludePre = (excludes ?? []).filter(s => s.indexOf('*') >= 0).map(s => s.replaceAll('*','')); const envcomp = process.env.COMPRESS ? JSON.parse(process.env.COMPRESS) : undefined; const debug = process.env.DEBUG; @@ -65,7 +67,7 @@ if (compEnable) { function fileTime(path) { try { - return (fs.statSync(path).ctimeMs/1000) | 0; + return (fs.statSync(path).ctimeMs / 1000) | 0; } catch (e) { return 0; } @@ -75,6 +77,9 @@ for (const { file, virt } of entries) { if (excludes.indexOf(file) >= 0) { continue; } + if (excludePre.filter(ex => file.startsWith(ex)).length) { + continue; + } let record = cache.get(file); if (record) { if (debug) console.log({ alias: virt, from: file }); @@ -86,7 +91,7 @@ for (const { file, virt } of entries) { let cpath = path.resolve(cacheDir, file); if (fileTime(cpath) > fileTime(file)) { data = fs.readFileSync(cpath); - console.log('cached', file); + // console.log('cached', file); } else { console.log('compress', file); data = uglify.minify(data.toString(), { @@ -141,7 +146,7 @@ const header = Buffer.concat([count, ...headerParts]); const full = Buffer.concat([header, ...dataParts]); // --- write final bundle --- -const outPath = outputs.bundle || './bundle.bin'; +const outPath = (outputs.bundle || './bundle.bin').replace('{version}', version); fs.mkdirSync(path.dirname(outPath), { recursive: true }); fs.writeFileSync(outPath, full); // ⚡ write raw binary diff --git a/package.json b/package.json index 433966d5..47cea945 100644 --- a/package.json +++ b/package.json @@ -93,13 +93,15 @@ "build-win-arm": "npm run build -- --win --arm64", "build-mac": "npm run build -- --mac --arm64", "build-mac-intel": "npm run build -- --mac --x64", + "bundle": "npm run dev -- --alt --dryrun && COMPRESS=1 node bin/bundler.mjs", + "bundle:dev": "npm run dev -- --alt --dryrun && node bin/bundler.mjs", "clean": "rm -rf build data dist src/pack tmp src.old web.old .bcache", "docs-dev": "docusaurus start --config conf/docusaurus.config.js", "docs-build": "docusaurus build --config conf/docusaurus.config.js", "docs-serve": "docusaurus serve --config conf/docusaurus.config.js", "docs-check": "prettier --config ./conf/prettier.config.js ./docs --check", "dev": "npm run webpack-ext && gs-app-server --debug --single", - "prod": "npm run webpack-ext && npm run webpack-src prod && COMPRESS=1 node bin/bundler.mjs && gs-app-server", + "prod": "npm run webpack-ext && npm run webpack-src prod && npm run bundle && gs-app-server", "prod-pack": "npm run webpack-ext && npm run webpack-src prod", "prod-dryrun": "gs-app-server --dryrun", "start": "npm run prebuild prod && electron .", diff --git a/src/main/kiri.js b/src/main/kiri.js index b68b0a90..185a9cf3 100644 --- a/src/main/kiri.js +++ b/src/main/kiri.js @@ -37,7 +37,8 @@ function safeExec(fn) { function checkReady() { if (document.readyState === 'complete') { - console.log(`kiri | boot ctrl | ` + (navigator.serviceWorker.controller ? true : false)); + let bootctrl = navigator.serviceWorker.controller; + console.log(`kiri | boot ctrl | ` + (bootctrl ? true : false)); kiri.api = run(); self.$ = kiri.api.web.$; for (let fn of load) { @@ -45,6 +46,18 @@ function checkReady() { } load = undefined; kiri.api.event.emit('load-done', stats); + if (bootctrl) { + $('install').classList.add('hide'); + $('uninstall').classList.remove('hide'); + $('uninstall').onclick = () => { + bootctrl.postMessage({ clear: true, disable: true }); + location.reload(); + } + } else { + $('install').onclick = () => { + location.replace('/boot'); + } + } } } diff --git a/web/boot/service.js b/web/boot/service.js index 8d0f405a..2c5d6625 100644 --- a/web/boot/service.js +++ b/web/boot/service.js @@ -1,11 +1,10 @@ // --- configurable --- const CACHE_VERSION = 'boot-001'; -const BUNDLE_URL = '/boot/bundle.bin'; const VERSION_KEY = '/__version__'; let loaded = 0; let mode = 'cached'; -let currentVersion = null; +let BUNDLE_URL = '/boot/bundle.bin'; // --- logging --- const log = (...a) => console.log('[SW]', ...a); @@ -30,6 +29,7 @@ self.addEventListener('message', e => { unregister(); } else if (version !== undefined) { mode = 'cached'; + BUNDLE_URL = `/boot/bundle-${version}.bin`; log('version', version); ensureVersion(version); } diff --git a/web/kiri/index.html b/web/kiri/index.html index f9baab76..d8bc28c3 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -229,6 +229,15 @@
+
+
+ + +
+
+ + +
diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index e8ccb87c..cfba031e 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -27,6 +27,7 @@ self.lang['en-us'] = { hide: "hide", // left render pop menu (invisible) home: "home", import: "import", + install: "install", language: "language", left: "left", machines: "machines", // device or machine @@ -58,6 +59,7 @@ self.lang['en-us'] = { tools: "tools", // CAM tool menu button top: "top", type: "type", // CAM tool type + uninstall: "uninstall", version: "version", view: "view", // left view pop menu wire: "wire", // left render pop menu diff --git a/web/kiri/manifest.json b/web/kiri/manifest.json index c08e6a84..01f7287f 100644 --- a/web/kiri/manifest.json +++ b/web/kiri/manifest.json @@ -2,7 +2,7 @@ "name": "Kiri:Moto 4.4.0", "short_name": "Kiri:Moto", "description": "Slicer for 3D printers, CNC mills, laser cutters and more", - "start_url": "/kiri/", + "start_url": "/boot/", "id": "/kiri/", "display": "standalone", "theme_color": "#7e99b7", From f78e392e715a23b5ad664b9de33a41ae319a4448 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Wed, 12 Nov 2025 00:46:25 -0500 Subject: [PATCH 096/151] add src/dst bundle inputs, prod bundle config --- app.js | 11 +++++++++++ bin/bundle-prod.config.json | 23 +++++++++++++++++++++++ bin/bundler.mjs | 15 +++++++++++++-- package.json | 9 +++++---- 4 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 bin/bundle-prod.config.json diff --git a/app.js b/app.js index a6e439d2..b871a598 100644 --- a/app.js +++ b/app.js @@ -204,6 +204,17 @@ function init(mod) { fs.mkdirSync(`alt/main`, { recursive: true }); let body = fs.readFileSync(src); fs.writeFileSync(`alt/main/${key}.js`, body + val); + if (true) { + // packed + src= `src/pack/${key}-main.js`; + if (!fs.existsSync(src)) { + logger.log('missing:', src); + continue; + } + fs.mkdirSync(`alt/pack`, { recursive: true }); + body = fs.readFileSync(src); + fs.writeFileSync(`alt/pack/${key}-main.js`, body + val); + } } } }; diff --git a/bin/bundle-prod.config.json b/bin/bundle-prod.config.json new file mode 100644 index 00000000..f3a21fd0 --- /dev/null +++ b/bin/bundle-prod.config.json @@ -0,0 +1,23 @@ +{ + "compress": true, + "outputs": { + "bundle": "./web/boot/bundle-{version}.bin" + }, + "inputs": [ + { "root": "web/moto", "prefix": "moto" }, + { "root": "web/kiri", "prefix": "kiri" }, + { "root": "web/font", "prefix": "font" }, + { "root": "src/wasm", "prefix": "wasm" }, + { "root": "src/wasm", "prefix": "lib/kiri/wasm" }, + { "src": "alt/pack/kiri-main.js", "dst": "lib/main/kiri.js" }, + { "src": "src/pack/kiri-main.js", "dst": "lib/main/kiri.js" }, + { "src": "src/pack/kiri-work.js", "dst": "lib/kiri/run/worker.js" }, + { "src": "src/pack/kiri-pool.js", "dst": "lib/kiri/run/minion.js" }, + { "src": "src/gpu/raster-worker.js", "dst": "lib/gpu/raster-worker.js" }, + { "src": "src/ext/tween.js", "dst": "lib/ext/tween.js" } + ], + "excludes": [ + "src/pack", + "web/boot/bundle*" + ] +} diff --git a/bin/bundler.mjs b/bin/bundler.mjs index 12f43186..5bf621fa 100644 --- a/bin/bundler.mjs +++ b/bin/bundler.mjs @@ -39,8 +39,18 @@ function* walk(dir, seen = new Set()) { let entries = []; let virtMap = new Set(); for (const input of inputs) { - const root = input.root; - const prefix = input.prefix || ''; + const { root, prefix, src, dst } = input; + + if (src && dst) { + if (virtMap.has(dst)) { + console.log('pre-existing', dst); + } else { + entries.push({ file: src, virt: dst }); + virtMap.add(dst); + } + } + + if (root) for (const file of walk(root)) { const rel = path.relative(root, file).replace(/\\/g, '/'); const virt = prefix ? `${prefix}/${rel}` : rel; @@ -115,6 +125,7 @@ for (const { file, virt } of entries) { entryMeta.push(record); dataParts.push(data); offset += data.length; + if (debug) console.log('write', virt, data.length); } } diff --git a/package.json b/package.json index 47cea945..3c508215 100644 --- a/package.json +++ b/package.json @@ -93,16 +93,17 @@ "build-win-arm": "npm run build -- --win --arm64", "build-mac": "npm run build -- --mac --arm64", "build-mac-intel": "npm run build -- --mac --x64", - "bundle": "npm run dev -- --alt --dryrun && COMPRESS=1 node bin/bundler.mjs", + "bundle": "npm run dev -- --alt --dryrun && COMPRESS=1 node bin/bundler.mjs bin/bundle-prod.config.json", "bundle:dev": "npm run dev -- --alt --dryrun && node bin/bundler.mjs", - "clean": "rm -rf build data dist src/pack tmp src.old web.old .bcache", + "bundle:prod": "npm run dev -- --alt --dryrun && node bin/bundler.mjs bin/bundle-prod.config.json", + "clean": "rm -rf alt build data dist src/pack tmp src.old web.old .bcache", "docs-dev": "docusaurus start --config conf/docusaurus.config.js", "docs-build": "docusaurus build --config conf/docusaurus.config.js", "docs-serve": "docusaurus serve --config conf/docusaurus.config.js", "docs-check": "prettier --config ./conf/prettier.config.js ./docs --check", "dev": "npm run webpack-ext && gs-app-server --debug --single", - "prod": "npm run webpack-ext && npm run webpack-src prod && npm run bundle && gs-app-server", - "prod-pack": "npm run webpack-ext && npm run webpack-src prod", + "prod": "npm run webpack-ext && npm run webpack-src prod && gs-app-server", + "prod-pack": "npm run webpack-ext && npm run webpack-src prod && npm run bundle", "prod-dryrun": "gs-app-server --dryrun", "start": "npm run prebuild prod && electron .", "start-dev": "npm run prebuild prod && electron . --devel", From 4737c49ed3ac32ba3a862b7dc10c2098dc9c6f13 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Wed, 12 Nov 2025 01:27:33 -0500 Subject: [PATCH 097/151] update npm scripts --- .gitignore | 4 +++- bin/bundler.mjs | 4 +++- bin/esbuild.config.mjs | 2 +- package.json | 19 ++++++++++--------- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 3132d9dc..7abc853e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ .DS_Store +.bache .docusaurus .env +alt app.json build data @@ -13,4 +15,4 @@ pack package-lock.json three.js tmp -web/boot/bundle.bin +web/boot/bundle* diff --git a/bin/bundler.mjs b/bin/bundler.mjs index 5bf621fa..3ab7715d 100644 --- a/bin/bundler.mjs +++ b/bin/bundler.mjs @@ -42,7 +42,9 @@ for (const input of inputs) { const { root, prefix, src, dst } = input; if (src && dst) { - if (virtMap.has(dst)) { + if (!fs.existsSync(src)) { + console.log({ src_missing: src }); + } else if (virtMap.has(dst)) { console.log('pre-existing', dst); } else { entries.push({ file: src, virt: dst }); diff --git a/bin/esbuild.config.mjs b/bin/esbuild.config.mjs index 0cb973bb..26a4315a 100644 --- a/bin/esbuild.config.mjs +++ b/bin/esbuild.config.mjs @@ -66,7 +66,7 @@ const rec = { logOverride, minify: isProd, // false for dev, true for prod platform: 'browser', - sourcemap: !isProd, // true for dev, false for prod + sourcemap: false, target: 'es2020', }; diff --git a/package.json b/package.json index 3c508215..406c0036 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "webpack-cli": "^5.1.4" }, "scripts": { - "setup": "npm run setup-mods && npm i && npm run clean && npm run dev -- --alt --dryrun && npm run webpack-ext", + "setup": "npm run setup-mods && npm i && npm run clean && npm run webpack-ext", "setup-mods": "cd mods && npm i", "build": "npm run prebuild && electron-builder", "build-nopublish": "npm run prebuild && electron-builder --publish never", @@ -93,18 +93,17 @@ "build-win-arm": "npm run build -- --win --arm64", "build-mac": "npm run build -- --mac --arm64", "build-mac-intel": "npm run build -- --mac --x64", - "bundle": "npm run dev -- --alt --dryrun && COMPRESS=1 node bin/bundler.mjs bin/bundle-prod.config.json", - "bundle:dev": "npm run dev -- --alt --dryrun && node bin/bundler.mjs", - "bundle:prod": "npm run dev -- --alt --dryrun && node bin/bundler.mjs bin/bundle-prod.config.json", - "clean": "rm -rf alt build data dist src/pack tmp src.old web.old .bcache", + "bundle": "COMPRESS=1 npm run bundle:prod", + "bundle:dev": "node bin/bundler.mjs", + "bundle:prod": "node bin/bundler.mjs bin/bundle-prod.config.json", + "clean": "rm -rf alt build data dist src/pack src.old tmp web.old .bcache", "docs-dev": "docusaurus start --config conf/docusaurus.config.js", "docs-build": "docusaurus build --config conf/docusaurus.config.js", "docs-serve": "docusaurus serve --config conf/docusaurus.config.js", "docs-check": "prettier --config ./conf/prettier.config.js ./docs --check", - "dev": "npm run webpack-ext && gs-app-server --debug --single", - "prod": "npm run webpack-ext && npm run webpack-src prod && gs-app-server", - "prod-pack": "npm run webpack-ext && npm run webpack-src prod && npm run bundle", - "prod-dryrun": "gs-app-server --dryrun", + "dryrun": "gs-app-server --debug --single --alt --dryrun", + "dev": "npm run pack-dev && gs-app-server --debug --single", + "prod": "npm run pack-prod && npm run webpack-src prod && gs-app-server", "start": "npm run prebuild prod && electron .", "start-dev": "npm run prebuild prod && electron . --devel", "start-dbg": "npm run prebuild && electron . --debugg", @@ -114,6 +113,8 @@ "prebuild": "npm run setup && npm run webpack-src prod && node bin/electron-pre.js", "postbuild": "node bin/electron-post.js", "preinstall": "node bin/install-pre.js", + "pack-dev": "npm run dryrun && npm run webpack-src && npm run dryrun && npm run bundle:dev", + "pack-prod": "npm run dryrun && npm run webpack-src prod && npm run dryrun && npm run bundle", "webpack-ext": "npm run webpack-three && npm run webpack-zip", "webpack-src": "node bin/esbuild.config.mjs", "webpack-three": "npx webpack --config bin/webpack-three-esm.js", From 662024e5577380a3d7a7480f82bddf14ad590f56 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Wed, 12 Nov 2025 09:53:38 -0500 Subject: [PATCH 098/151] npm scripts and serviceworker updates --- package.json | 2 +- web/boot/service.js | 22 ++++++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 406c0036..e13988fc 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "docs-check": "prettier --config ./conf/prettier.config.js ./docs --check", "dryrun": "gs-app-server --debug --single --alt --dryrun", "dev": "npm run pack-dev && gs-app-server --debug --single", - "prod": "npm run pack-prod && npm run webpack-src prod && gs-app-server", + "prod": "npm run pack-prod && gs-app-server", "start": "npm run prebuild prod && electron .", "start-dev": "npm run prebuild prod && electron . --devel", "start-dbg": "npm run prebuild && electron . --debugg", diff --git a/web/boot/service.js b/web/boot/service.js index 2c5d6625..7b31588c 100644 --- a/web/boot/service.js +++ b/web/boot/service.js @@ -1,8 +1,10 @@ // --- configurable --- -const CACHE_VERSION = 'boot-001'; +const CACHE_VERSION = 'boot-003'; const VERSION_KEY = '/__version__'; +const cacheOpen = caches.open(CACHE_VERSION); let loaded = 0; +let debug = false; let mode = 'cached'; let BUNDLE_URL = '/boot/bundle.bin'; @@ -12,6 +14,8 @@ self.addEventListener('install', e => log('install')); self.addEventListener('activate', e => log('activate')); // self.addEventListener('fetch', e => log('fetch', e.request.url)); +log('cache version', CACHE_VERSION); + // --- lifecycle --- self.skipWaiting(); self.addEventListener('activate', e => e.waitUntil(clients.claim())); @@ -19,7 +23,8 @@ self.addEventListener('activate', e => e.waitUntil(clients.claim())); // --- mode control --- self.addEventListener('message', e => { const data = e.data || {}; - const { clear, disable, version } = data; + const { debug, clear, disable, version } = data; + debug = data.debug ?? debug; if (clear) { clearCache(); } @@ -48,7 +53,7 @@ async function clearCache() { // --- version check and preload --- async function ensureVersion(incomingVersion) { - const cache = await caches.open(CACHE_VERSION); + const cache = await cacheOpen; let needPreload = false; const existing = await cache.match(VERSION_KEY); @@ -79,7 +84,7 @@ async function ensureVersion(incomingVersion) { async function fetch_safe(req) { const res = await fetch(req); if (res.redirected) { - log({ was_redirected_cloning: res.url }); + log({ redirect_clone: res.url }); // clone into a fresh non-redirect response const clone = res.clone(); return new Response(await clone.blob(), { @@ -99,7 +104,7 @@ self.addEventListener('fetch', e => { if (request.method !== 'GET') return; if (mode == 'transparent') { - e.respondWith(fetch_safe(e.request)); + e.respondWith(fetch(e.request)); return; } @@ -118,7 +123,7 @@ function appendURL(url, append) { } async function redirectOr404(path) { - const cache = await caches.open(CACHE_VERSION); + const cache = await cacheOpen; const hit = await cache.match(path, { ignoreSearch: true }); if (hit) { return Response.redirect(path, 302); @@ -128,11 +133,12 @@ async function redirectOr404(path) { } async function fromCacheOrNetwork(req) { - const cache = await caches.open(CACHE_VERSION); + const cache = await cacheOpen; const hit = await cache.match(req, { ignoreSearch: true }); if (hit) { return hit; } + if (debug) log('CACHE MISS'); const net = await fetch_safe(req); cache.put(req, net.clone()); log(`put: ${net.url}`); @@ -154,7 +160,7 @@ const sec_headers = { // --- preload & unpack bundle --- async function preloadBundle() { loaded = 0; - const cache = await caches.open(CACHE_VERSION); + const cache = await cacheOpen; const res = await fetch(BUNDLE_URL, { cache: 'no-store' }); const buf = await res.arrayBuffer(); const files = await unpackBundle(buf); From ca61b0d6186ca9edaffb1f055095965ccce3c9db Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Wed, 12 Nov 2025 16:41:42 -0500 Subject: [PATCH 099/151] add service routes when available --- web/boot/service.js | 74 +++++++++++++++++++++++++++++++++------------ 1 file changed, 55 insertions(+), 19 deletions(-) diff --git a/web/boot/service.js b/web/boot/service.js index 7b31588c..e623cf10 100644 --- a/web/boot/service.js +++ b/web/boot/service.js @@ -1,5 +1,5 @@ // --- configurable --- -const CACHE_VERSION = 'boot-003'; +const CACHE_VERSION = 'boot'; const VERSION_KEY = '/__version__'; const cacheOpen = caches.open(CACHE_VERSION); @@ -10,20 +10,18 @@ let BUNDLE_URL = '/boot/bundle.bin'; // --- logging --- const log = (...a) => console.log('[SW]', ...a); -self.addEventListener('install', e => log('install')); -self.addEventListener('activate', e => log('activate')); -// self.addEventListener('fetch', e => log('fetch', e.request.url)); - log('cache version', CACHE_VERSION); // --- lifecycle --- +self.addEventListener('install', _install); +self.addEventListener('activate', _activate); +self.addEventListener('fetch', _fetch); self.skipWaiting(); -self.addEventListener('activate', e => e.waitUntil(clients.claim())); // --- mode control --- self.addEventListener('message', e => { const data = e.data || {}; - const { debug, clear, disable, version } = data; + const { clear, disable, version } = data; debug = data.debug ?? debug; if (clear) { clearCache(); @@ -37,15 +35,51 @@ self.addEventListener('message', e => { BUNDLE_URL = `/boot/bundle-${version}.bin`; log('version', version); ensureVersion(version); + } else if (data.mode) { + mode = data.mode; } }); +async function _install(e) { + log('install'); + if (e.addRoutes) { + for (let pre of ["font","mesh","kiri","lib","wasm"]) { + e.addRoutes({ + condition: { urlPattern: new URLPattern({ pathname: `/${pre}/.*` }) }, + source: { cacheName: CACHE_VERSION } + }); + } + } +} + +async function _activate(event) { + log('activate'); + event.waitUntil(clients.claim()) +} + // --- unregister current service worker --- async function unregister() { await self.registration.unregister(); } -// --- erase existing cache --- +// --- cache helpers --- +async function cacheGetText(key) { + const cache = await cacheOpen; + const entry = await cache.match(key); + if (entry) { + return entry.text(); + } else { + return undefined; + } +} + +async function cachePutText(key, value) { + const cache = await cacheOpen; + return cache.put( key, new Response(String(value), { + headers: { 'Content-Type': 'text/plain' } + }) ); +} + async function clearCache() { log('clearing cache'); await caches.delete(CACHE_VERSION); @@ -56,24 +90,21 @@ async function ensureVersion(incomingVersion) { const cache = await cacheOpen; let needPreload = false; - const existing = await cache.match(VERSION_KEY); + const existing = await cacheGetText(VERSION_KEY); if (!existing) { log('no version stored → preload'); needPreload = true; } else { - const stored = await existing.text(); - if (stored !== incomingVersion) { - log(`mismatch ${stored} ≠ ${incomingVersion} → preload`); + // const stored = await existing.text(); + if (existing !== incomingVersion) { + log(`mismatch ${existing} ≠ ${incomingVersion} → preload`); needPreload = true; } } if (needPreload) { await preloadBundle(); - await cache.put( - VERSION_KEY, - new Response(String(incomingVersion), { headers: { 'Content-Type': 'text/plain' } }) - ); + await cachePutText(VERSION_KEY, incomingVersion); broadcast(`preload added ${loaded} files`); } else { broadcast('preload cached'); @@ -97,10 +128,12 @@ async function fetch_safe(req) { } // --- fetch handler --- -self.addEventListener('fetch', e => { +async function _fetch(e) { const { request } = e; const url = new URL(request.url); + if (debug) log({ method: request.method, url: request.url }); + if (request.method !== 'GET') return; if (mode == 'transparent') { @@ -115,7 +148,7 @@ self.addEventListener('fetch', e => { } else { e.respondWith(fromCacheOrNetwork(request)); } -}); +} // --- helpers --- function appendURL(url, append) { @@ -126,8 +159,10 @@ async function redirectOr404(path) { const cache = await cacheOpen; const hit = await cache.match(path, { ignoreSearch: true }); if (hit) { + if (debug) log('REDIRECT', path); return Response.redirect(path, 302); } else { + if (debug) log('404', path); return new Response('Not Found', { status: 404, statusText: 'Not Found' }); } } @@ -136,9 +171,10 @@ async function fromCacheOrNetwork(req) { const cache = await cacheOpen; const hit = await cache.match(req, { ignoreSearch: true }); if (hit) { + if (debug) log('CACHE HIT', req.url); return hit; } - if (debug) log('CACHE MISS'); + if (debug) log('CACHE MISS', req.url); const net = await fetch_safe(req); cache.put(req, net.clone()); log(`put: ${net.url}`); From a66d7fe202a9bdfe545d7ff27b9dba18dd56e001 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Wed, 12 Nov 2025 23:29:36 -0500 Subject: [PATCH 100/151] clean up electron build, merge electron mod into core --- app-el.js | 28 ++++++++---- bin/electron-notarize.js | 1 + bin/electron-pre.js | 19 ++++---- mods/electron/.electron | 0 mods/electron/electron.js | 15 ------- mods/electron/init.js | 9 ---- package.json | 91 ++++++++++++--------------------------- src/kiri/core/api.js | 1 + src/main/kiri.js | 13 ++++-- src/main/mesh.js | 1 + src/main/service.js | 37 ---------------- web/kiri/index.html | 4 ++ 12 files changed, 71 insertions(+), 148 deletions(-) delete mode 100644 mods/electron/.electron delete mode 100644 mods/electron/electron.js delete mode 100644 mods/electron/init.js delete mode 100644 src/main/service.js diff --git a/app-el.js b/app-el.js index 513f9afe..57de12d7 100644 --- a/app-el.js +++ b/app-el.js @@ -9,8 +9,8 @@ const appDir = path.join(usrDir, 'gapp'); const cnfDir = path.join(appDir, 'conf'); const logDir = path.join(appDir, 'logs'); const datDir = path.join(appDir, 'data'); -const debug = process.argv.slice(2).map(v => v.replaceAll('-', '')).contains('debugg'); -const devel = process.argv.slice(2).map(v => v.replaceAll('-', '')).contains('devel'); +const debug = process.argv.slice(2).map(v => v.replaceAll('-', '')).indexOf('debugg') >= 0; +const devel = process.argv.slice(2).map(v => v.replaceAll('-', '')).indexOf('devel') >= 0; process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = true; @@ -40,23 +40,31 @@ function createWindow() { width: 1600, height: 900, webPreferences: { + // contextIsolation: true, + // nodeIntegration: false, + // sandbox: true, + // preload: undefined + // nodeIntegration: true, + // contextIsolation: false // preload: path.join(__dirname, 'preload.js') } }); + const { webContents } = mainWindow; + mainWindow.loadURL('http://localhost:5309/kiri'); // default normal url navigation or page opens to happen outside Electron - mainWindow.webContents.setWindowOpenHandler((details) => { + webContents.setWindowOpenHandler((details) => { // console.log('EXTERNAL', details); shell.openExternal(details.url); return { action: 'deny' } }); // prevent "other" urls from opening inside Electron (alerts are problematic) - mainWindow.webContents.on('will-navigate', (event, url) => { + webContents.on('will-navigate', (event, url) => { // console.log('DIVERT', url); - if (url.endsWith('/kiri') || url.endsWith('/kiri/')) { + if (url.endsWith('/kiri') || url.endsWith('/kiri/')) { return; } if (url.endsWith('/mesh') || url.endsWith('/mesh/')) { @@ -66,9 +74,13 @@ function createWindow() { shell.openExternal(url); }); + webContents.on('did-finish-load', () => { + mainWindow.webContents.executeJavaScript(`{ let x = document.getElementById('app-quit'); if (x) { x.onclick = () => window.close() } }; null;`); + }); + if (devel) { console.log("opening developer tools"); - mainWindow.webContents.openDevTools(); + webContents.openDevTools(); } } @@ -77,9 +89,7 @@ app.on('ready', () => { }); app.on('window-all-closed', () => { - if (process.platform !== 'darwin') { - app.quit(); - } + app.quit(); }); app.on('activate', () => { diff --git a/bin/electron-notarize.js b/bin/electron-notarize.js index fbfc7eb4..63af71a2 100644 --- a/bin/electron-notarize.js +++ b/bin/electron-notarize.js @@ -5,6 +5,7 @@ exports.default = async function notarizing(context) { const { electronPlatformName, appOutDir } = context; if (process.env.SKIPNOT || electronPlatformName !== 'darwin') { + console.log('SKIP NOTARIZING'); return; } diff --git a/bin/electron-pre.js b/bin/electron-pre.js index d25e6f8c..f4ff8e0b 100644 --- a/bin/electron-pre.js +++ b/bin/electron-pre.js @@ -4,28 +4,25 @@ const server = require('@gridspace/app-server'); // deref src, web, mod for windows const srcTmp = path.join('tmp','src'); -fs.copySync("src", srcTmp, { dereference: true }); +fs.copySync("src", srcTmp, { dereference: true, filter:(src) => { + return src.indexOf('web/pack') < 0; +} }); const webTmp = path.join('tmp','web'); -fs.copySync("web", webTmp, { dereference: true }); +fs.copySync("web", webTmp, { dereference: true, filter:(src) => { + return src.indexOf('web/boot') < 0; +} }); const modTmp = path.join('tmp','mod'); if (fs.existsSync("mod")) fs.copySync("mod", modTmp, { dereference: true, filter:(src,dst) => { - const ok = - src === 'mod' || - src.indexOf('mod/standalone') === 0 || - src.indexOf('mod/node_modules') === 0; + const ok = src === 'mod' || src.indexOf('mod/standalone') === 0; return ok; } }); const modsTmp = path.join('tmp','mods'); fs.copySync("mods", modsTmp, { dereference: true, filter:(src,dst) => { - const ok = - src === 'mods' || - src.indexOf('mods/bambu') === 0 || - src.indexOf('mods/electron') === 0 || - src.indexOf('mods/node_modules') === 0; + const ok = src === 'mods' || src.indexOf('mods/bambu') === 0; return ok; } }); diff --git a/mods/electron/.electron b/mods/electron/.electron deleted file mode 100644 index e69de29b..00000000 diff --git a/mods/electron/electron.js b/mods/electron/electron.js deleted file mode 100644 index 30e93f2d..00000000 --- a/mods/electron/electron.js +++ /dev/null @@ -1,15 +0,0 @@ -if (self.kiri && !self.kiri.electron) { - self.kiri.electron = {}; - self.kiri.load(api => { - console.log('ELECTRON MODULE LOADED'); - api.event.on('init-done', () => { - $('app-name-text').innerText = "More Info"; - $('top-sep').style.display = 'flex'; - }); - api.stats.set('kiri', api.version + 'e'); - }); -} - -if (self.mesh && self.mesh) { - self.mesh.electron = {}; -} diff --git a/mods/electron/init.js b/mods/electron/init.js deleted file mode 100644 index 9a8fc6e7..00000000 --- a/mods/electron/init.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * for electron standalone build support - */ -module.exports = function(server) { - // insert script before all others in kiri client - server.inject("kiri", "electron.js"); - // insert scripts into mesh client - server.inject("mesh", "electron.js"); -}; diff --git a/package.json b/package.json index e13988fc..bedc9966 100644 --- a/package.json +++ b/package.json @@ -82,39 +82,39 @@ "webpack-cli": "^5.1.4" }, "scripts": { - "setup": "npm run setup-mods && npm i && npm run clean && npm run webpack-ext", - "setup-mods": "cd mods && npm i", - "build": "npm run prebuild && electron-builder", - "build-nopublish": "npm run prebuild && electron-builder --publish never", "build-debug": "npm run prebuild && DEBUG=electron-builder electron-builder", - "build-linux": "npm run build -- --linux --x64", "build-linux-arm": "npm run build -- --linux --arm64", - "build-win": "npm run build -- --win --x64", - "build-win-arm": "npm run build -- --win --arm64", - "build-mac": "npm run build -- --mac --arm64", + "build-linux": "npm run build -- --linux --x64", "build-mac-intel": "npm run build -- --mac --x64", - "bundle": "COMPRESS=1 npm run bundle:prod", - "bundle:dev": "node bin/bundler.mjs", + "build-mac": "npm run build -- --mac --arm64", + "build-nopublish": "npm run prebuild && electron-builder --publish never", + "build-win-arm": "npm run build -- --win --arm64", + "build-win": "npm run build -- --win --x64", + "build": "npm run prebuild && electron-builder", + "bundle:dev": "node bin/bundler.mjs bin/bundle.config.json", "bundle:prod": "node bin/bundler.mjs bin/bundle-prod.config.json", + "bundle": "COMPRESS=1 npm run bundle:prod", "clean": "rm -rf alt build data dist src/pack src.old tmp web.old .bcache", - "docs-dev": "docusaurus start --config conf/docusaurus.config.js", - "docs-build": "docusaurus build --config conf/docusaurus.config.js", - "docs-serve": "docusaurus serve --config conf/docusaurus.config.js", - "docs-check": "prettier --config ./conf/prettier.config.js ./docs --check", - "dryrun": "gs-app-server --debug --single --alt --dryrun", "dev": "npm run pack-dev && gs-app-server --debug --single", - "prod": "npm run pack-prod && gs-app-server", - "start": "npm run prebuild prod && electron .", - "start-dev": "npm run prebuild prod && electron . --devel", - "start-dbg": "npm run prebuild && electron . --debugg", - "start-ddb": "npm run prebuild && electron . --devel --debugg", - "mk-links": "find src web -type l | xargs -I{} sh -c 'echo \"{},$(readlink {})\"' > conf/links.csv", + "docs-build": "docusaurus build --config conf/docusaurus.config.js", + "docs-check": "prettier --config ./conf/prettier.config.js ./docs --check", + "docs-dev": "docusaurus start --config conf/docusaurus.config.js", + "docs-serve": "docusaurus serve --config conf/docusaurus.config.js", + "dryrun": "gs-app-server --debug --single --alt --dryrun", "mac-verify": "spctl --assess -vv --type install dist/*/*.app", - "prebuild": "npm run setup && npm run webpack-src prod && node bin/electron-pre.js", - "postbuild": "node bin/electron-post.js", - "preinstall": "node bin/install-pre.js", + "mk-links": "find src web -type l | xargs -I{} sh -c 'echo \"{},$(readlink {})\"' > conf/links.csv", "pack-dev": "npm run dryrun && npm run webpack-src && npm run dryrun && npm run bundle:dev", "pack-prod": "npm run dryrun && npm run webpack-src prod && npm run dryrun && npm run bundle", + "postbuild": "node bin/electron-post.js", + "prebuild": "npm run setup && npm run pack-dev prod && node bin/electron-pre.js", + "preinstall": "node bin/install-pre.js", + "prod": "npm run pack-prod && gs-app-server", + "setup-mods": "cd mods && npm i", + "setup": "npm run setup-mods && npm i && npm run clean && npm run webpack-ext", + "start-dbg": "npm run prebuild && electron . --debugg", + "start-ddb": "npm run prebuild && electron . --devel --debugg", + "start-dev": "npm run prebuild prod && electron . --devel", + "start": "npm run prebuild prod && electron .", "webpack-ext": "npm run webpack-three && npm run webpack-zip", "webpack-src": "node bin/esbuild.config.mjs", "webpack-three": "npx webpack --config bin/webpack-three-esm.js", @@ -128,52 +128,17 @@ "artifactName": "KiriMoto-${os}-${arch}.${ext}", "files": [ { - "from": "tmp/src", - "to": "src", - "filter": [ - "**/*" - ] - }, - { - "from": "tmp/web", - "to": "web", - "filter": [ - "**/*" - ] - }, - { - "from": "tmp/mod", - "to": "mod", - "filter": [ - "**/*" - ] - }, - { - "from": "tmp/mod/node_modules", - "to": "mod/node_modules", - "filter": [ - "**/*" - ] - }, - { - "from": "tmp/mods", - "to": "mods", - "filter": [ - "**/*" - ] - }, - { - "from": "tmp/mods/node_modules", - "to": "mods/node_modules", + "from": "tmp", + "to": "", "filter": [ "**/*" ] }, + "app-el.js", + "app.js", "bin/*", "conf/**/*", "data/cache/**/*", - "app-el.js", - "app.js", "package.json" ], "extraFiles": [], diff --git a/src/kiri/core/api.js b/src/kiri/core/api.js index eb41dccb..76f00517 100644 --- a/src/kiri/core/api.js +++ b/src/kiri/core/api.js @@ -143,6 +143,7 @@ export const api = { dialog, doit, event, + electron: navigator.userAgent.includes('Electron'), feature, function: functions, group, diff --git a/src/main/kiri.js b/src/main/kiri.js index 185a9cf3..918898a5 100644 --- a/src/main/kiri.js +++ b/src/main/kiri.js @@ -39,14 +39,19 @@ function checkReady() { if (document.readyState === 'complete') { let bootctrl = navigator.serviceWorker.controller; console.log(`kiri | boot ctrl | ` + (bootctrl ? true : false)); - kiri.api = run(); - self.$ = kiri.api.web.$; + let api = kiri.api = run(); + self.$ = api.web.$; for (let fn of load) { safeExec(fn); } load = undefined; - kiri.api.event.emit('load-done', stats); - if (bootctrl) { + api.event.emit('load-done', stats); + if (api.electron) { + $('install').classList.add('hide'); + $('app-quit').classList.remove('hide'); + $('app-name-text').innerText = "More Info"; + $('top-sep').style.display = 'flex'; + } else if (bootctrl) { $('install').classList.add('hide'); $('uninstall').classList.remove('hide'); $('uninstall').onclick = () => { diff --git a/src/main/mesh.js b/src/main/mesh.js index 5be86f84..f0cbf138 100644 --- a/src/main/mesh.js +++ b/src/main/mesh.js @@ -99,6 +99,7 @@ function init() { // for electron self.mesh = { api }; + self.electron = navigator.userAgent.includes('Electron'); } // restore space layout and view from previous session diff --git a/src/main/service.js b/src/main/service.js deleted file mode 100644 index 80db6047..00000000 --- a/src/main/service.js +++ /dev/null @@ -1,37 +0,0 @@ -const service_worker = navigator.serviceWorker; - -import { version } from '../moto/license.js'; - -async function start_service_worker() { - function debug() { - console.log(`[${version}]`, ...arguments); - } - - // install service worker - debug('service worker registration'); - - try { - const reg = await navigator - .serviceWorker - .register(`/code/service.js?${version}`, { scope: "/" }); - if (reg.installing) { - debug('service worker installing'); - } else if (reg.waiting) { - debug('service worker waiting'); - } else if (reg.active) { - debug('service worker active'); - } else { - debug({ service_worker: reg }); - } - - if (service_worker.controller) { - service_worker.controller.postMessage('ctrl message'); - } - } catch (err) { - debug('service worker registration failed', err); - } -} - -if (service_worker && self.enable_service) { - start_service_worker(); -} diff --git a/web/kiri/index.html b/web/kiri/index.html index d8bc28c3..c9dd5b55 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -238,6 +238,10 @@
+
+ + +

*Ssasl<>|6bJ>!ku9_!N2(KI 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%0A8P3#!ZnH5DVe*a8 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

From b046ae2fa8fdf2b0be1c32f62d360488dbe460e1 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 09:48:45 -0500 Subject: [PATCH 101/151] set content-type for appended code bodies --- app-el.js | 9 --------- app.js | 1 + 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/app-el.js b/app-el.js index 57de12d7..e62ad888 100644 --- a/app-el.js +++ b/app-el.js @@ -14,15 +14,6 @@ const devel = process.argv.slice(2).map(v => v.replaceAll('-', '')).indexOf('dev process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = true; -// console.log({ appDir, usrDir, logDir, datDir, basDir }); -// console.log({ argv: process.argv, debug, devel }); -// console.log({ -// cwd: process.cwd(), -// dir: require('fs').readdirSync('.'), -// out: require('fs').readdirSync(appDir), -// ___: require('fs').readdirSync(basDir) -// }); - server({ port: 5309, apps: basDir, diff --git a/app.js b/app.js index b871a598..b997d49e 100644 --- a/app.js +++ b/app.js @@ -624,6 +624,7 @@ function rewriteHtmlVersion(req, res, next) { } body += data; res.setHeader('Content-Length', Buffer.byteLength(body)); + res.setHeader('Content-Type', "application/javascript; charset=utf-8"); real_write.call(res, body); real_end.call(res); }; From fc63f395a4b6b59abc5c52401d26311399f790fc Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 11:32:15 -0500 Subject: [PATCH 102/151] reflow build/serve of alt, update app-server dep for proper fallthrough handling --- app.js | 104 +++++++++-------------------------------- bin/esbuild.config.mjs | 28 +++++++++++ package.json | 8 ++-- 3 files changed, 54 insertions(+), 86 deletions(-) diff --git a/app.js b/app.js index b997d49e..ada97f20 100644 --- a/app.js +++ b/app.js @@ -37,7 +37,6 @@ let util; let dir; let log; let pre; -let alt; const EventEmitter = require('events'); class AppEmitter extends EventEmitter {} @@ -65,7 +64,6 @@ function init(mod) { startTime = time(); lastmod = mod.util.lastmod; logger = mod.log; - alt = ENV.alt; pre = ENV.pre || mod.meta.pre; debug = ENV.debug || mod.meta.debug; oversion = ENV.over || mod.meta.over; @@ -80,10 +78,6 @@ function init(mod) { dversion = debug ? `_${version}` : version; forceUseCache = ENV.cache ? true : false; - if (!ENV.electron) { - generateDevices(); - } - if (pre) { for (let [k,v] of Object.entries(productionMap)) { productionMap[`${pre}${k}`] = `${pre}${v}`; @@ -142,7 +136,8 @@ function init(mod) { return "reload"; }); } - mod.add(rewriteHtmlVersion); + mod.add(addAppHeaders); + mod.static("/lib/", "alt"); mod.static("/lib/", "src"); mod.static("/obj/", "web/obj"); mod.static("/font/", "web/font"); @@ -194,28 +189,26 @@ function init(mod) { } } - if (alt) { - for (let [ key, val ] of Object.entries(append)) { - let src = `src/main/${key}.js`; - if (!fs.existsSync(src)) { - logger.log('missing:', src); - continue; - } - fs.mkdirSync(`alt/main`, { recursive: true }); - let body = fs.readFileSync(src); - fs.writeFileSync(`alt/main/${key}.js`, body + val); - if (true) { - // packed - src= `src/pack/${key}-main.js`; - if (!fs.existsSync(src)) { - logger.log('missing:', src); - continue; - } - fs.mkdirSync(`alt/pack`, { recursive: true }); - body = fs.readFileSync(src); - fs.writeFileSync(`alt/pack/${key}-main.js`, body + val); - } + // create alt artifacts with module extensions + logger.log('create alt artifacts'); + for (let [ key, val ] of Object.entries(append)) { + let src = `src/main/${key}.js`; + if (!fs.existsSync(src)) { + logger.log('missing:', src); + continue; } + fs.mkdirSync(`alt/main`, { recursive: true }); + let body = fs.readFileSync(src); + fs.writeFileSync(`alt/main/${key}.js`, body + val); + + src= `src/pack/${key}-main.js`; + if (!fs.existsSync(src)) { + logger.log('missing:', src); + continue; + } + fs.mkdirSync(`alt/pack`, { recursive: true }); + body = fs.readFileSync(src); + fs.writeFileSync(`alt/pack/${key}-main.js`, body + val); } }; @@ -440,28 +433,6 @@ function serveWasm(req, res, next) { } } -// pack/concat device script strings to inject into /code/ scripts -function generateDevices() { - let root = PATH.join(dir,"src","kiri","dev"); - let devs = {}; - fs.readdirSync(root).forEach(type => { - let map = devs[type] = devs[type] || {}; - fs.readdirSync(PATH.join(root,type)).forEach(device => { - let deviceName = device.endsWith('.json') - ? device.substring(0,device.length-5) - : device; - map[deviceName] = JSON.parse(fs.readFileSync(PATH.join(root,type,device))); - }); - }); - let dstr = JSON.stringify(devs); - util.mkdir(PATH.join(dir,"src","pack")); - fs.writeFileSync(PATH.join(dir,"src","pack","kiri-devs.js"), `export const devices = ${dstr};`); - if (alt) { - fs.mkdirSync('alt/pack', { recursive: true }); - fs.writeFileSync(PATH.join(dir,"alt","pack","kiri-devs.js"), `export const devices = ${dstr};`); - } -} - function minify(code) { let mini = uglify.minify(code.toString(), { compress: { @@ -585,7 +556,7 @@ function cookieValue(cookie,key) { } } -function rewriteHtmlVersion(req, res, next) { +function addAppHeaders(req, res, next) { if ([ "/kiri/", "/mesh/", @@ -599,37 +570,6 @@ function rewriteHtmlVersion(req, res, next) { ].indexOf(req.app.path) >= 0) { addCorsHeaders(req, res); } - if ([ - "/lib/main/kiri.js", - "/lib/main/mesh.js" - ].indexOf(req.app.path) >= 0) { - addCorsHeaders(req, res); - // const data = append[req.app.path.split('/')[3].split('.')[0]]; - const data = append[req.app.path.split('.')[0].split('/').pop()]; - - if (!data) return next(); - if (debug) logger.log({ append: req.app.path, data: data.length }); - - const real_write = res.write; - const real_end = res.end; - let body = ''; - - res.write = function (chunk, encoding) { - body += chunk.toString(encoding); - }; - - res.end = function (chunk, encoding) { - if (chunk) { - body += chunk.toString(encoding); - } - body += data; - res.setHeader('Content-Length', Buffer.byteLength(body)); - res.setHeader('Content-Type', "application/javascript; charset=utf-8"); - real_write.call(res, body); - real_end.call(res); - }; - } - next(); } diff --git a/bin/esbuild.config.mjs b/bin/esbuild.config.mjs index 26a4315a..1a55e3e8 100644 --- a/bin/esbuild.config.mjs +++ b/bin/esbuild.config.mjs @@ -1,5 +1,6 @@ import { build, transform } from 'esbuild'; import fs from 'fs/promises'; +import path from 'path'; import glob from 'fast-glob'; // Get build mode from command line argument @@ -38,6 +39,30 @@ async function appendExtraModules(extras, outfile, minify = false) { console.log(`Appended ${files.length} module(s) to ${outfile}`); } +async function generateDevices(dir = '') { + let root = path.join(dir, "src", "kiri", "dev"); + let devs = {}; + let files = await fs.readdir(root); + for (let type of files) { + let map = devs[type] = devs[type] || {}; + let devices = await fs.readdir(path.join(root, type)); + for (let device of devices) { + let deviceName = device.endsWith('.json') + ? device.substring(0, device.length - 5) + : device; + map[deviceName] = JSON.parse(await fs.readFile(path.join(root, type, device))); + } + } + let dstr = JSON.stringify(devs); + fs.mkdir(path.join(dir, "src", "pack"), { recursive: true }); + await fs.writeFile(path.join(dir, "src", "pack", "kiri-devs.js"), `export const devices = ${dstr};`); + if (true) { + // create alt artifacts + await fs.mkdir('alt/pack', { recursive: true }); + await fs.writeFile(path.join(dir, "alt", "pack", "kiri-devs.js"), `export const devices = ${dstr};`); + } +} + const logOverride = { 'duplicate-class-member': 'silent', 'duplicate-object-key': 'silent', @@ -72,6 +97,9 @@ const rec = { async function buildApp() { try { + // Concatenate kiri devices + generateDevices(); + // Bundle mesh main app await build(Object.assign({}, rec, { entryPoints: [ 'src/main/mesh.js' ], diff --git a/package.json b/package.json index bedc9966..23ee11a5 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ }, "dependencies": { "@fortawesome/fontawesome-free": "^6.1.1", - "@gridspace/app-server": "github:gridspace/app-server#v0.0.19", + "@gridspace/app-server": "github:gridspace/app-server#v0.0.20", "@gridspace/basic-ftp": "github:gridspace/basic-ftp#v5.0.5-gridspace", "@gridspace/net-level-client": "^0.2.3", "@gridspace/raster-path": "^1.0.6", @@ -57,7 +57,7 @@ "npm": "^11.4.2", "prettier": "^3.5.3", "react-responsive-carousel": "^3.2.23", - "serve-static": "^1.14.1", + "serve-static": "^2.2.0", "three": "^0.178.0", "three-mesh-bvh": "^0.7.6", "uglify-js": "3.14.5", @@ -103,8 +103,8 @@ "dryrun": "gs-app-server --debug --single --alt --dryrun", "mac-verify": "spctl --assess -vv --type install dist/*/*.app", "mk-links": "find src web -type l | xargs -I{} sh -c 'echo \"{},$(readlink {})\"' > conf/links.csv", - "pack-dev": "npm run dryrun && npm run webpack-src && npm run dryrun && npm run bundle:dev", - "pack-prod": "npm run dryrun && npm run webpack-src prod && npm run dryrun && npm run bundle", + "pack-dev": "npm run webpack-src && npm run dryrun && npm run bundle:dev", + "pack-prod": "npm run webpack-src prod && npm run dryrun && npm run bundle", "postbuild": "node bin/electron-post.js", "prebuild": "npm run setup && npm run pack-dev prod && node bin/electron-pre.js", "preinstall": "node bin/install-pre.js", From 0a41bb2f4232451d336df1b7871668fca7cc7abb Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 12:35:07 -0500 Subject: [PATCH 103/151] revert to npm for app-server dep --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 23ee11a5..a673f931 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ }, "dependencies": { "@fortawesome/fontawesome-free": "^6.1.1", - "@gridspace/app-server": "github:gridspace/app-server#v0.0.20", + "@gridspace/app-server": "^0.0.20", "@gridspace/basic-ftp": "github:gridspace/basic-ftp#v5.0.5-gridspace", "@gridspace/net-level-client": "^0.2.3", "@gridspace/raster-path": "^1.0.6", From 3d6a974fe8c63f97767237075afdc4ad6f4973d2 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 13:18:30 -0500 Subject: [PATCH 104/151] suppress debug logging in dryrun --- app.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app.js b/app.js index ada97f20..5e998b90 100644 --- a/app.js +++ b/app.js @@ -31,6 +31,7 @@ let oversion; let dversion; let lastmod; let logger; +let single; let debug; let http; let util; @@ -66,6 +67,7 @@ function init(mod) { logger = mod.log; pre = ENV.pre || mod.meta.pre; debug = ENV.debug || mod.meta.debug; + single = ENV.single; oversion = ENV.over || mod.meta.over; crossOrigin = ENV.xorigin || mod.meta.xorigin || false; serviceWorker = (ENV.service || mod.meta.service) !== false; @@ -74,7 +76,7 @@ function init(mod) { dir = mod.dir; log = mod.log; - if (ENV.single) console.log({ cwd: process.cwd(), env: ENV }); + if (single) console.log({ cwd: process.cwd(), env: ENV }); dversion = debug ? `_${version}` : version; forceUseCache = ENV.cache ? true : false; @@ -151,7 +153,7 @@ function init(mod) { function load_modules(root, force) { lastmod(`${dir}/${root}`) && fs.readdirSync(`${dir}/${root}`).forEach(mdir => { const modpath = `${root}/${mdir}`; - if (dir.charAt(0) === '.' && !ENV.single) return; + if (dir.charAt(0) === '.' && !single) return; const stats = fs.lstatSync(`${mod.dir}/${modpath}`); if (!(stats.isDirectory() || stats.isSymbolicLink())) return; if (util.isfile(PATH.join(mod.dir,modpath,".disable"))) return; @@ -190,11 +192,11 @@ function init(mod) { } // create alt artifacts with module extensions - logger.log('create alt artifacts'); + logger.log('creating artifacts', Object.keys(append)); for (let [ key, val ] of Object.entries(append)) { let src = `src/main/${key}.js`; if (!fs.existsSync(src)) { - logger.log('missing:', src); + logger.log('missing', src); continue; } fs.mkdirSync(`alt/main`, { recursive: true }); @@ -203,7 +205,7 @@ function init(mod) { src= `src/pack/${key}-main.js`; if (!fs.existsSync(src)) { - logger.log('missing:', src); + logger.log('missing', src); continue; } fs.mkdirSync(`alt/pack`, { recursive: true }); @@ -307,7 +309,7 @@ function initModule(mod, file, dir) { const path = mod.dir + '/' + dir + '/' + file; try { const body = fs.readFileSync(path); - logger.log({ inject: code, file, opt }); + if (debug && !single) logger.log({ inject: code, file, opt }); if (opt.first) { append[code] = body.toString() + '\n' + append[code]; } else { From 2d50774aea8e46e007aa388fe8c88667fb47de3a Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 13:57:41 -0500 Subject: [PATCH 105/151] patch language maps. needs review --- web/kiri/lang/da.js | 997 ++++++++++++++++++++---------- web/kiri/lang/de-de.js | 1150 ++++++++++++++++++++++------------ web/kiri/lang/es-es.js | 924 +++++++++++++++++++--------- web/kiri/lang/fr.js | 1146 ++++++++++++++++++++++------------ web/kiri/lang/pl-pl.js | 1328 +++++++++++++++++++++++++--------------- web/kiri/lang/pt.js | 1026 ++++++++++++++++++++----------- web/kiri/lang/zh.js | 1131 ++++++++++++++++++++++------------ 7 files changed, 5025 insertions(+), 2677 deletions(-) diff --git a/web/kiri/lang/da.js b/web/kiri/lang/da.js index c6607075..2c597c01 100644 --- a/web/kiri/lang/da.js +++ b/web/kiri/lang/da.js @@ -2,76 +2,103 @@ // Will defer to English map for any missing key/value pairs self.lang['da'] = self.lang['da-dk'] = { - version: "version", - enable: "enable", - settings: "indstillinger", // common keys and menus animate: "animer", // CAM animate button arrange: "arranger", // layout workspace objects - axis: "ake", // left object scale pop menu + axis: "akse", // left object scale pop menu + back: "tilbage", clear: "ryd", // clear workspace (remove all objects) copy: "kopier", + clone: "klon", // create duplicate delete: "slet", detail: "detaljer", done: "færdig", + edit: "rediger", enable: "aktiver", + disable: "deaktiver", + donate: "doner", export: "eksporter", files: "filer", + filter: "filter", + front: "front", + fullscreen: "fuld skærm", help: "hjælp", ghost: "spøgelse", // left render pop menu (wireframe) hide: "skjul", // left render pop menu (invisible) home: "hjem", import: "importer", + install: "installer", language: "sprog", - machine: "maskine", // device or machine + left: "venstre", + machines: "maskiner", // device or machine + mesh: "mesh", // mesh editing metric: "måleenhed", name: "navn", + new: "ny", // file new + off: "fra", // turn something off (like a lightbulb) + on: "til", // turn something on (like a lightbulb) + profs: "profiler", // right menu "profiles" prefs: "præferencer", // left menu "preferences" preview: "forhåndsvisning", recent: "nylig", + rename: "omdøb", render: "render", // left render pop menu - reset: "Nulstil", + reset: "nulstil", + right: "højre", rotate: "roter", // left rotate pop menu save: "gem", scale: "skala", // left object scale pop menu + select: "vælg", setup: "setup", settings: "indstillinger", size: "størrelse", + slice: "slice", solid: "solid", // view type pop menu + start: "start", tool: "værktøj", tools: "værktøjer", // CAM tool menu button top: "top", type: "type", // CAM tool type + uninstall: "afinstaller", version: "version", view: "vis", // left view pop menu wire: "tråd", // left render pop menu + volume: "volumen", // device build area acct_xpo: ["lav en sikkerhedskopi af din enhed","og enhedsprofiler med mulighed for at","medtage arbejdsområdeobjekter og positioner"], // RIGHT-CLICK CONTEXT MENU rc_clws: "ryd arbejdsområde", rc_xpws: "eksporter arbejdsområde", - rc_lafl: "læg flat", + rc_lafl: "læg fladt", rc_mirr: "spejlvend", rc_dupl: "dupliker", - rc_xstl: "eksporter som STL", + rc_focs: "indstil fokus", + rc_heal: "reparer meshes", + rc_swap: "erstat vertices", + rc_xobj: "eksporter OBJ", + rc_xstl: "eksporter STL", + sb_info: ["print hastighed","i mm/s"], + rc_merg: "flet objekt meshes", + rc_splt: "isoler legemer", // DEVICE MENU and related dialogs dm_sldt: "vælg en enhedstype", - dm_stdd: "standard enhed", + dm_stdd: "standard enheder", dm_mydd: "mine enheder", - dm_seld: "valgte enheder", + dm_seld: "valgt enhed", dm_rcnt: "nylige filer", - dm_savs: "gemte indstillinger", - dm_appp: "Programindstillinger", + dm_savs: "indstillinger", + dm_appp: "programindstillinger", // CAM Tool Dialog td_tyem: "ende", // end mill td_tybm: "kugle", // ball mill td_tytm: "konisk", // taper mill + td_tydr: "bor", // drill td_tonm: "værktøj #", td_shft: "skaft", // endmill shaft specs - td_flut: "spiral", // endmill flute specs + td_flut: "spånrille", // endmill flute specs td_tapr: "konisk", // endmill taper specs // DEVICE dialog groups @@ -92,7 +119,15 @@ self.lang['da-dk'] = { dv_bedd_s: "dybde", dv_bedd_l: "arbejdsområde enheder", dv_bedh_s: "højde", - dv_bedh_l: ["max bygge højde","arbejdsområde enheder"], + dv_bedh_l: ["max bygge højde","i arbejdsområde enheder"], + dv_rezx_s: "opløsning X", + dv_rezx_l: ["x opløsning"], + dv_rezy_s: "opløsning Y", + dv_rezy_l: ["y opløsning"], + dv_zmax_s: "Z-akse hastighedsgrænse", + dv_zmax_l: ["maksimal Z-akse hastighed","i millimeter / sekund","0 for at deaktivere"], + dv_time_s: "output tidsfaktor", + dv_time_l: ["modificerer til print-tidsestimater","i gcode eksport-dialogen","hæv eller sænk værdi baseret på din","forudsagte vs. observerede printtider"], dv_spmx_s: "maks. spindel", dv_spmx_l: ["maks. spindel rpm","0 for at deaktivere"], dv_xtab_s: "absolut positionering", @@ -105,388 +140,621 @@ self.lang['da-dk'] = { dv_bedc_l: "enhedens plade er rund", dv_belt_s: "bælte plade", dv_belt_l: "kontinuerlig printplade", - dv_fanp_s: "blæser styrke", - dv_fanp_l: "bestem køle blæser styrke", + dv_fsrc_s: "filament kilde", + dv_fsrc_l: ["hvordan filament fødes\nind i ekstrusoren"], + dv_retr_s: "firmware tilbagetrækning", + dv_retr_l: ["enhedens firmware understøtter G10/G11"], + dv_fanp_s: "køling", + dv_fanp_l: "indstil køle blæser styrke", + dv_feat_s: "funktion", + dv_feat_l: "indsæt kode for specificerede funktioner", dv_prog_s: "fremgang", dv_prog_l: "output for hver % fremgang", dv_layr_s: "lag", - dv_layr_l: ["output fra hver","lag skifte"], + dv_layr_l: ["output ved hvert","lag skifte"], dv_tksp_s: "token mellemrum", - dv_tksp_l: ["tilføj et mellemrum mellem","gkode akseparametre","G0X0Y0X0","vs","G0 X0 Y0 Z0"], - dv_strc_s: "strip comments", - dv_strc_l: ["fjern gkode kommentarer","som begynder med ;"], - dv_fext_s: "filtypenavn", - dv_fext_l: "file name extension", - dv_dwll_s: "dwell", - dv_dwll_l: "gkode dvale kode", - dv_tool_s: "værktøj skift", - dv_tool_l: "værktøj skift kode", - dv_sspd_s: "spindel hastighed", - dv_sspd_l: "sæt spindel hastighed", + dv_tksp_l: ["tilføj et mellemrum mellem","gcode akser parametre","G0X0Y0X0","vs","G0 X0 Y0 Z0"], + dv_strc_s: "fjern kommentarer", + dv_strc_l: ["fjern gcode kommentarer","kommentarer begynder med ;"], + dv_fext_s: "filtype udvidelse", + dv_fext_l: "filnavn udvidelse", + dv_lazr_s: "aktiver laser", + dv_lazr_l: ["aktiver laser operationer"], + + dv_dwll_s: "dvale", + dv_dwll_l: "gcode dvale script", + dv_tool_s: "værktøj", + dv_tool_l: "værktøj skift script", + dv_sspd_s: "spindel", + dv_sspd_l: "indstil spindel hastighed", dv_paus_s: "pause", - dv_paus_l: "gkode pause kode", + dv_paus_l: "gcode pause script", dv_head_s: "sidehovede", - dv_head_l: "sidehovede gkode", + dv_head_l: "gcode sidehovede script", dv_foot_s: "sidefod", - dv_foot_l: "sidefod gkode", - dv_lzon_s: "tænd laser", - dv_lzon_l: "tænd laser gkode", - dv_lzof_s: "sluk laser", - dv_lzof_l: "sluk laser gkode", + dv_foot_l: "gcode sidefod script", + dv_pext_s: "ydre", + dv_pext_l: ["gcode script kørt før","printning af ydre linjer"], + dv_pint_s: "indre", + dv_pint_l: ["gcode script kørt før","printning af indre linjer"], + dv_lzon_s: "laser tændt", + dv_lzon_l: "gcode laser tændt script", + dv_lzof_s: "laser slukket", + dv_lzof_l: "gcode laser slukket script", + + dv_waon_s: "vand tændt", + dv_waon_l: "gcode vandpumpe tændt script", + dv_waof_s: "vand slukket", + dv_waof_l: "gcode vandpumpe slukket script", + + dv_dkon_s: "kniv ned", + dv_dkon_l: "gcode kniv ned script", + dv_dkof_s: "kniv op", + dv_dkof_l: "gcode kniv op script", + dv_exts_s: "vælg", - dv_exts_l: "gkode for at aktivere denne ekstruder", - dv_dext_s: "fravalgt", - dv_dext_l: "gcode køres, før en anden ekstruder aktiveres", - dv_extd_s: "fravalgt", - dv_extd_l: "gkode for at fravælge denne ekstruder", + dv_exts_l: "gcode kørt for at aktivere denne ekstruder", + dv_dext_s: "fravælg", + dv_dext_l: "gcode kørt før en anden ekstruder aktiveres", + dv_extd_s: "deaktiver", + dv_extd_l: "gcode for at fravælge denne ekstruder", dv_exox_s: "forskydning x", dv_exox_l: "dyse forskydning x", dv_exoy_s: "forskydning y", dv_exoy_l: "dyse forskydning y", + dv_paid_s: "printer id", + dv_paid_l: ["unik printer identifikator","kan være opdigtet"], + dv_paps_s: "ping mellemrum", + dv_paps_l: ["minimum filament forbrug","mellem pings i millimeter","anbefalet 500 - 1000","0 = deaktiver pings"], + dv_pafe_s: "føde længde", + dv_pafe_l: ["feeder rør længde i millimeter","kort=570, mellem=800, lang=1100"], + dv_papl_s: "skub længde", + dv_papl_l: ["afstand mellem ekstruder tandhjul","og dysespids i millimeter"], + dv_paof_s: "forskydningslængde", + dv_paof_l: ["længde at tilføje eller fjerne fra","første segment i millimeter","normalt 0"], + dv_pahe_s: "opvarmningstid", + dv_pahe_l: ["forskydning fra standard"], + dv_paco_s: "afkølingstid", + dv_paco_l: ["forskydning fra standard"], + dv_pacm_s: "kompressionstid", + dv_pacm_l: ["forskydning fra standard"], + // MODE mo_menu: "tilstand", - mo_fdmp: "FDM Print", - mo_slap: "SLA Print", - mo_lazr: "Laser skær", - mo_cncm: "CNC fræs", + mo_fdmp: "FDM print", + mo_slap: "SLA print", + mo_lazr: "laser skæring", + mo_cncm: "CNC fræsning", // SETUP su_menu: "setup", - su_devi: "Enheder", - su_tool: "Værktøjer", - su_locl: "Lokal", - su_xprt: "Eksport", - su_help: "Hjælp", + su_devi: "enheder", + su_tool: "værktøjer", + su_locl: "lokal", + su_xprt: "eksport", + su_help: "hjælp", // LOAD fe_menu: "fil", - fn_recn: "Nylig", - fn_impo: "Importér", + fn_recn: "nylige", + fn_impo: "importer", // FUNCTION fn_menu: "handling", - fn_arra: "Arranger", - fn_slic: "Slice", - fn_prev: "Eksempel", - fn_expo: "Eksport", + fn_arra: "arranger", + fn_slic: "slice", + fn_prev: "forhåndsvisning", + fn_expo: "eksporter", // VIEW vu_menu: "vis", vu_home: "hjem", - vu_rset: "Nulstil", - vu_sptp: "Top", - vu_spfr: "Front", - vu_splt: "Venstre", - vu_sprt: "Højre", + vu_rset: "nulstil", + vu_sptp: "top", + vu_spfr: "front", + vu_splt: "venstre", + vu_sprt: "højre", // WORKSPACE ws_menu: "vis", - ws_save: "Gem", - ws_cler: "Ryd", + ws_save: "gem", + ws_cler: "ryd", // OPTIONS op_menu: "brugerflade", - op_disp: "Skærm", + op_disp: "skærm", op_xprt_s: "ekspert", op_xprt_l: "vis flere indstillinger", - op_decl_s: "mærkater", + op_decl_s: "vis mærkater", op_decl_l: "vis enhedsmærkater og logoer", - op_dang_s: "eksperimentel", - op_dang_l: "Vis eksperimentelle parametre", - op_hopo_s: "hold over pop op", + op_shny_s: "detalje render", + op_shny_l: "vælg en slice render metode der er langsommere og bruger spekulær fremhævning. dette gør det nemmere at se detaljer i nogle modeller på bekostning af render hastighed", + op_devl_s: "udvikler", + op_devl_l: ["vis udvikler indstillinger","aktiver udvikler debugging"], + op_hopo_s: "hold-over pop", op_hopo_l: ["aktiver menu ved at","holde over den"], op_dark_s: "mørkt tema", op_dark_l: "mørkt tema brugerflade", op_comp_s: "kompakt brugerflade", op_comp_l: ["kompakt brugerflade","bedre til små skærme","og tablets"], op_shor_s: "vis udgangspunkt", - op_shor_l: "vis enhedens eller proccens udgangspunkt", + op_shor_l: "vis enhedens eller proces udgangspunkt", op_shru_s: "vis linealer", - op_shru_l: ["vis akse linealer på større","gitterlinjer"], + op_shru_l: ["vis akse linealer","på større gitterlinjer"], op_sped_s: "vis hastigheder", op_sped_l: ["vis hastighed til farve bar","i forhåndsvisning"], - op_auto_s: "auto fordel", - op_auto_l: ["automatisk layoutplatform,","når nye dele tilføjes"], + op_auto_s: "auto layout", + op_auto_l: ["automatisk layout platform","når nye dele tilføjes"], op_free_s: "frit layout", op_free_l: ["tillad trækbart layout","ingen effekt i laser-tilstand"], op_spcr_s: "afstand", - op_spcr_l: ["afstand mellem objekter","under automatisk layout","i arbejdsrumsenheder"], + op_spcr_l: ["afstand mellem objekter","under auto layout","i arbejdsområde enheder","i bælte tilstand, brug 0","til auto-afstand efter højde"], + op_spoa_s: "kant vinkel", + op_spoa_l: ["overflade vinkel forskel der udløser en kant sporing"], + op_spcx_s: "tilfældig X", + op_spcx_l: ["i bælte tilstand, tilfældigt","layout delen på X","for jævn bælte slid"], + op_orth_s: "ortografisk", + op_orth_l: ["ortografisk visning","kræver side genindlæsning"], + op_anta_s: "anti-aliasing", + op_anta_l: ["glat visning. bedre men langsommere","kræver en side genindlæsning"], op_invr_s: "vend zoom om", - op_invr_l: ["vender zoom på musens","hjul om"], + op_invr_l: ["vend musens hjul","scroll zoom om"], op_save_s: "auto gem", - op_save_l: ["beholder objekter i arbejdsområdet","mellem genindlæsninger"], + op_save_l: ["behold objekter i arbejdsområdet","mellem applikations genindlæsninger"], op_line_s: "linje type", - op_line_l: ["linjestil til gengivelse","af linjer i 3d\sti: 3d bedst","flad: 2d god","linje 1d hurtig"], + op_line_l: ["linje stil til sti rendering","påvirker 3d ydeevne","sti: 3d bedst","flad: 2d god","linje = 1d hurtig"], op_unit_s: "enheder", - op_unit_l: ["arbejdsområde enheder har effekt","på hatigheder og distancer"], + op_unit_l: ["arbejdsområde enheder påvirker","hastigheder og distancer"], op_anim_s: "animer", - op_anim_l: ["animation mesh tæthed","højere er mere tæt","kræver mere hukommelse","og er langsommere"], + op_anim_l: ["animation mesh tæthed","højere er mere tæt","tager mere hukommelse","og er langsommere"], + op_exgl_l: ["vis Grid:Local enheder i eksport dialog","inkluderer Grid:Bots og OctoPrint plugins"], + op_exgh_l: ["legacy Grid:Host lokalt netværk support"], + op_exop_l: ["legacy OctoPrint lokalt netværk support","Grid:Space OctoPrint plugin anbefalet"], - lo_menu: "fordeling", + lo_menu: "layout", - pt_menu: "dele", + pt_menu: "slicer", pt_deci_s: "decimer", - pt_deci_l: ["aktivere eller deaktivere punktdecimering","under portimport. for hurtigere hebandling","og lavere hukommelsesforbrug"], - pt_qual_s: "kvalitet", - pt_qual_l: ["detaljeringsniveau, der","skal bevares under behandling"," lavere er hurtigere"], - pt_heal_s: "reparer medeller", - pt_heal_l: ["forsøg på at reparere","ikke-manifold modeller","forøger slice tid"], + pt_deci_l: ["aktiver eller deaktiver punkt decimering","under import. for hurtigere slicing","og lavere hukommelsesforbrug"], + pt_qual_s: "detalje", + pt_qual_l: ["detaljeringsniveau der skal bevares under slicing operationer. lavere er hurtigere og bruger mindre hukommelse. store modeller har ofte ikke gavn af højere detalje. i stedet kan det kun resultere i hukommelses- og behandlingsproblemer. reducer denne værdi hvis du får out of memory fejl."], + pt_heal_s: "reparer mesh", + pt_heal_l: ["forsøg at reparere ikke-manifold meshes under slicing. kan øge slicing tid. aktiverer en advarsel når ikke-manifold geometrier opdages."], + pt_thrd_s: "threaded", + pt_thrd_l: ["brug parallel behandling når browser understøtter indlejrede workers. kan øge hukommelsespres på større modeller. deaktiver hvis du får out of memory fejl"], + pt_assy_s: "web asm", + pt_assy_l: ["brug web assembly når understøttet af browser. hvis du oplever artefakter eller hukommelsesfejl, prøv at deaktivere dette."], + pt_wgpu_s: "web gpu", + pt_wgpu_l: ["brug web gpu når understøttet af browser. hvis du oplever artefakter eller hukommelsesfejl, prøv at deaktivere dette."], - xp_menu: "eksporteringer", + xp_menu: "eksporter", // SETTINGS se_menu: "profil", se_load: "indlæs", se_save: "gem", - // FDM SLICING + // FDM LAYERS sl_menu: "lag", - sl_lahi_s: "højde", - sl_lahi_l: ["højden af hver","lag i milimeter"], - ad_minl_s: "højde min", + sl_angl_s: "slice vinkel", + sl_angl_l: ["slice vinkel bias i grader"], + sl_lahi_s: "laghøjde", + sl_lahi_l: ["højde af hver slice","lag i millimeter"], + ad_minl_s: "lag minimum", ad_minl_l: ["adaptiv min laghøjde","i millimeter","skal være ikke-nul"], + ad_adap_s: "adaptiv højde", + ad_adap_l: ["brug adaptive laghøjder","med 'laghøjde' som maks","og 'lag minimum' som minimum"], sl_ltop_s: "top lag", - sl_ltop_l: ["antallet af faste lag","der skal lægges på","toppen af en print"], - sl_lsld_s: "faste lag", - sl_lsld_l: ["faste udfyldnigner beregnet","ud fra lag deltaen. se","lag pop op menuen"], - sl_lbot_s: "bund lag", - sl_lbot_l: ["antallet af faste lag","der skal lægges i","bunden af en print"], - ad_adap_s: "fleksibel", - ad_adap_l: ["brug adaptive laghøjder","med 'laghøjde' som maks","og 'lag min' som minimum"], + sl_ltop_l: ["antal af solide lag i toppen af printet eller på flade områder vendt opad"], + sl_lsld_s: "solide lag", + sl_lsld_l: ["solide fyld områder beregnet","fra broer og flade områder","opdaget mellem slicede lag"], + sl_lbot_s: "basis lag", + sl_lbot_l: ["antal af solide lag i bunden af printet eller under bro spænd"], + + // FDM WALLS + sw_menu: "skaller", + sl_shel_s: "skal antal", + sl_shel_l: ["antal omkreds","vægge at generere"], + ad_thin_s: "tynde vægge", + ad_thin_l: ["opdag og fyld huller","mellem skal vægge"], // FDM SHELLS - sl_shel_s: "antal skaller", - sl_shel_l: ["antal omkredse","vægge, der skal genereres"], + sl_line_s: "linje bredde", + sl_line_l: ["ekstruderingsbredde i millimeter","0 = dyse diameter"], sl_ordr_s: "skal rækkefølge", - sl_ordr_l: ["output shell rækkefølge","indvendigt til udvendigt","eller udvendigt til indvendigt","påvirker overfladekvaliteten"], - sl_strt_s: "lag start", - sl_strt_l: ["lagets startpunkt","sidste = sidste lag slut","center = del center","udgangspunkt = delens udgangspunkt"], - ad_thin_s: "tynde vægge", - ad_thin_l: ["opdage og udfylde huller","mellem vægge"], + sl_ordr_l: ["output skal rækkefølge","inderside til yderside","eller yderside til inderside","påvirker overfladekvalitet"], + sl_strt_s: "startpunkt", + sl_strt_l: ["lag startpunkt","sidste = hvor sidste lag sluttede","center = del center","udgangspunkt = enhedens udgangspunkt","tilfældig = yolo"], + sl_ofin_s: "indre skal forskydning", + sl_ofin_l: ["indre hul omkreds forskydning","i millimeter"], + sl_ofot_s: "ydre skal forskydning", + sl_ofot_l: ["ydre væg omkreds forskydning","i millimeter"], + + // FDM SOLID + fs_menu: "solid fyld", + fi_over_s: "fyld overlap", + fi_over_l: ["overlap mellem skaller og solid eller sparsom fyld. kan forbedre binding til skaller","som brøkdel af linje bredde","0.0 - 1.0"], + fi_angl_s: "start vinkel", + fi_angl_l: ["start vinkel i grader","90 grader tilføjet til","hvert følgende lag","gælder kun for solide lag"], + fi_grow_s: "område udvid", + fi_grow_l: ["udvid projicerede solider","kan hjælpe med solide områder","over sparsomme fyld områder","enheder i millimeter"], // FDM FILL - fi_menu: "fylde", - fi_type: "type", - fi_pcnt_s: "fylde brøkdel", - fi_pcnt_l: ["fylde densitet værdier","0.0 - 1.0"], - fi_angl_s: "startvinkel", - fi_angl_l: "bund vinkel i grader", - fi_over_s: "overlap", - fi_over_l: ["overlap as fyldet og skallen","som % af dysen bredde","højere binder bedre","0.0 - 1.0"], + fi_menu: "sparsom fyld", + fi_type: "fyld type", + fi_pcnt_s: "fyld mængde", + fi_pcnt_l: ["fyld tæthed værdier","0.0 - 1.0"], + fi_rept_s: "fyld gentagelse", + fi_rept_l: ["antal gange at gentage","uændrede fyld lag"], // fi_rate_s: "print hastighed", - fi_rate_l: ["ekstruderingshastighed til fylde","indstillet til 0 for at bruge standard","output-printhastigheder"], + fi_rate_l: ["ekstruderingshastighed til fyld","indstil til 0 for at bruge standard","output print hastigheder"], + + // FDM HEATING + fh_menu: "opvarmning", + + // FDM COOLING + fc_menu: "køling", // FDM FIRST LAYER - fl_menu: "bund", + fl_menu: "basis", fl_lahi_s: "laghøjde", - fl_lahi_l: ["højde af hver lag","i millimeter","skulle være >= laghøjde"], + fl_lahi_l: ["højde af hver slice","i millimeter","skal være >= slice højde"], fl_rate_s: "skal hastighed", - fl_rate_l: ["max hastighed på skaller","i millimeter / sekund"], - fl_frat_s: "fylde hastighed", - fl_frat_l: ["fylde max print hastighed","i millimeter / sekund"], - fl_mult_s: "print factor", + fl_rate_l: ["skal printning maks hastighed","i millimeter / sekund"], + fl_frat_s: "fyld hastighed", + fl_frat_l: ["fyld printning maks hastighed","i millimeter / sekund"], + fl_mult_s: "flow faktor", fl_mult_l: ["ekstrudering multiplikator","0.0 - 2.0"], - fl_sfac_s: "width factor", - fl_sfac_l: ["dyse strørrelse multiplikator","ændre linjeafstanden"], - fl_zoff_s: "lag forskydning", - fl_zoff_l: ["højde forskydning fra bælte","af laveste ekstrudering","i millimeter"], - fl_brim_s: "skygge størrelse", - fl_brim_l: ["tilføj skygge til delens bund","størrelsen er bredden i millimeter","0 for at deaktivere"], - fl_skrt_s: "antal skørter", - fl_skrt_l: ["antal første lag udvidelser","skørter at generere"], - fl_skro_s: "skirt offset", - fl_skro_l: ["skirt offset from part","in millimeters"], + fl_sfac_s: "bredde faktor", + fl_sfac_l: ["multiplikator på dyse størrelse","ændrer linje mellemrum"], + fl_skrt_s: "skørt antal", + fl_skrt_l: ["antal første-lag forskydning","brims at generere"], + fl_skro_s: "skørt forskydning", + fl_skro_l: ["skørt forskydning fra del","i millimeter","når rafts bruges","er dette raft forskydningen"], fl_nozl_s: "dyse temp", - fl_nozl_l: ["grader i celsius","output indstillingen bruges","hvis denne er nul"], + fl_nozl_l: ["grader i celsius","output indstilling bruges","når denne er nul"], fl_bedd_s: "plade temp", - fl_bedd_l: ["grader i celsius","output indstillingen bruges","hvis denne er nul"], - fr_spac_s: "flåde mellemrum", - fr_spac_l: ["ekstra afstand","mellem første lag og flåden","i millimeter"], - fr_nabl_s: "slå flåde til", - fr_nabl_l: ["lav en flåde under","modellen for bedre vedhæftning","bruger skørte afstand og","slår skørte fra"], + fl_bedd_l: ["grader i celsius","output indstilling bruges","når denne er nul"], + fr_spac_s: "raft mellemrum", + fr_spac_l: ["ekstra lag mellemrum","mellem 1. lag og raft","i millimeter"], + fr_nabl_s: "raft aktiver", + fr_nabl_l: ["lav en raft under","modellen for bedre vedhæftning","bruger skørt forskydning og","deaktiverer skørt output"], + fr_draf_s: "træk skjold", + fr_draf_l: ["udvid skørt til delens højde","som virker som et skjold mod","træk og fanger varm luft"], // FDM BELT ONLY fl_zoff_s: "bælte forskydning", - fl_zoff_l: ["højde forskudt fra bælte","af laveste ekstrudering","i millimeter"], - fl_brim_s: "skygge størrelse", - fl_brim_l: ["tilføj skygge til delens bund","størrelse er bredde i millimeter","0 for at deaktivere"], - fl_brmn_s: "skygge udløser", - fl_brmn_l: ["kun tilføje bremser, når segmentet","vendt mod bælet er kortere end dette","værdi i millimeter","0 = Uendelig"], - fl_bled_s: "model anker", - fl_bled_l: ["bælte model anker","ved start af print","i millimeter"], + fl_zoff_l: ["højde forskydning fra bælte","af laveste ekstrudering","i millimeter"], + fl_flat_s: "fladgør", + fl_flat_l: ["fladgør til bæltet ethvert punkt","højde mindre end denne værdi","i millimeter"], + fl_brim_s: "brim sider", + fl_brim_l: ["tilføj brim til del omkreds","størrelse er bredde i millimeter","0 for at deaktivere"], + fl_brin_s: "brim indre", + fl_brin_l: ["tilføj brim til del indre","når indre hulrum eksisterer","størrelse er bredde i millimeter","0 for at deaktivere"], + fl_brmn_s: "brim udløser", + fl_brmn_l: ["tilføj brims kun når segment","vendt mod bælte er kortere end dette","værdi i millimeter","0 = uendeligt"], + fl_brco_s: "brim kam", + fl_brco_l: ["tilføj brim huller","hver n linjer","0 for at deaktivere"], + fl_brgp_s: "brim mellemrum", + fl_brgp_l: ["mellemrum mellem brim og del","i millimeter"], + fl_bled_s: "del anker", + fl_bled_l: ["bælte del anker","ved start af print","i millimeter"], + fl_blmp_s: "anker bump", + fl_blmp_l: ["tilføj en bump til starten af","et anker for at hjælpe det med at skrælle","af ved enden af bæltet","i millimeter"], // FDM SUPPORT sp_menu: "støtte", sp_detect: "registrer", - sp_dens_s: "densitet", - sp_dens_l: ["brøkdel 0.0 - 1.0\anbefaledeet 0.15","0 for at deaktivere"], + sp_dens_s: "tæthed", + sp_dens_l: ["brøkdel 0.0 - 1.0","anbefalet 0.15","0 for at deaktivere"], sp_size_s: "søjle størrelse", - sp_size_l: ["søjle bredde","i millimeter"], - sp_offs_s: "del afstand", - sp_offs_l: ["afstand til del","i millimeter"], - sp_gaps_s: "mellemrum", - sp_gaps_l: ["antal lag","mellem støtte og del"], - sp_span_s: "max bro", - sp_span_l: ["maximum ikke-understøttet afstand"," der generere støtte","i millimeter"], - sp_angl_s: "max vinkel", - sp_angl_l: ["max overhæng vinkel før","støtte søjler genereres"], + sp_size_l: ["søjle bredde i millimeter","mindre værdier øger eksponentielt","registrerings tider"], + sp_offs_s: "del forskydning", + sp_offs_l: ["forskydning fra del","i millimeter"], + sp_gaps_s: "mellemrum lag", + sp_gaps_l: ["antal lag","forskydning fra del"], + sp_span_s: "maks spænd", + sp_span_l: ["ikke-understøttet spænd der forårsager","en ny støtte at blive genereret","i millimeter"], + sp_angl_s: "maks vinkel", + sp_angl_l: ["maks overhæng vinkel før","støtte søjle genereres","normale værdier 45-60","bælte værdier 0-10"], sp_area_s: "min område", - sp_area_l: ["minimum område for","en støtte søjle","i millimeter"], + sp_area_l: ["minimum område for","en støtte søjle","i millimeter","mindre værdier vil","sænke registrering"], sp_xpnd_s: "udvid", - sp_xpnd_l: ["udvid støtte område","udover delen beyond part grænse","i millimeter"], + sp_xpnd_l: ["udvid støtte område","ud over del grænse","i millimeter"], + sp_grow_s: "voks", + sp_grow_l: ["voks støtte søjle til at fylde små huller","i millimeter"], sp_nozl_s: "ekstruder", - sp_nozl_l: ["til multi-ekstruder systemer","hvor én ekstruder bruges","til støtte materiale"], + sp_nozl_l: ["i multi-ekstruder systemer","den ekstruder at bruge til","støtte materiale"], + sp_outl_s: "indesluttet", + sp_outl_l: ["indeslut støtte mønster","inden i en omkreds skal"], sp_auto_s: "automatisk", - sp_auto_l: ["aktiver genereret støtte\ved brug af 'at-slice-time' geometri","støtte vil først laves","efter slicing er færdig"], - - // LASER SLICING - ls_offs_s: "forskydning", - ls_offs_l: ["juster stråle bredden ","i millimeter"], - ls_lahi_s: "højde", - ls_lahi_l: ["laghøjde","i millimeter","0 = auto/opdag"], - ls_lahm_s: "min", - ls_lahm_l: ["layer height minimum","will merge auto slices","under this thickness","in millimeters"], - ls_sngl_s: "enkelt", - ls_sngl_l: ["lav kun én omgang","ved den specificerede laghøjde"], + sp_auto_l: ["aktiver genererede støtter","ved brug af slice-tid geometri","støtter vil kun vises","efter slicing fuldføres"], // CNC COMMON terms - cc_tool: "Værktøj", + cc_tool: "værktøj", cc_offs_s: "forskydning", - cc_offs_l: ["forskyd værktøj center"," fra valgt sti"], + cc_offs_l: ["forskyd værktøj center","fra valgt sti"], cc_spnd_s: "spindel rpm", - cc_spnd_l: ["spindel hastighed i","revolutioner / minuttet"], + cc_spnd_l: ["spindel hastighed i","omdrejninger / minut"], cc_sovr_s: "step over", - cc_sovr_l: ["as a brøkdel af","værktøjsdiameteren"], + cc_sovr_l: ["en brøkdel af værktøj diameter mellem 0 og 1. værdier større end 0.49 kan resultere i uafskårne områder eller uønskede artefakter."], + cc_sovc_s: "brede trin", + cc_sovc_l: ["antal brede udskærings trin"], + cc_sang_s: "trin vinkel", + cc_sang_l: ["rotation i grader mellem drejebænk aksiale punkter"], cc_sdwn_s: "step ned", - cc_sdwn_l: ["step ned dybde","for hver omgang","i arbejdsområdets enheder","0 for at deaktivere"], - cc_feed_s: "hastighed", - cc_feed_l: ["max skærehastighed i"," arbejdsområdets enheder / minuttet"], + cc_sdwn_l: ["step ned dybde","for hver passage","i arbejdsområde enheder","0 for at deaktivere"], + cc_thru_s: "skær igennem", + cc_thru_l: ["yderligere skæredybde under spor bund"], + cc_offd_s: "forskydning", + cc_offd_l: ["tilsidesætter standard forskydnings afstand (som er værktøj radius) når sat til enhver værdi undtagen nul"], + cc_feed_s: "fremføringshastighed", + cc_feed_l: ["maks skærehastighed i","arbejdsområde enheder / minut"], cc_plng_s: "dyk hastighed", - cc_plng_l: ["max z ake hastighed i","arbejdsområdets enheder / minuttet"], + cc_plng_l: ["maks z akse hastighed i","arbejdsområde enheder / minut"], cc_sngl_s: "vælg kun linjer", - cc_sngl_l: ["vælg kun enkelte kanter","i stedet for forbundede polyliner"], + cc_sngl_l: ["vælg kun enkelte kanter","i stedet for forbundne polylinjer"], + cc_sele_s: "vælg", + cc_sele_l: ["vælg linjer til at følge","vælg loops til at rydde","vælg overflade til lomme"], // CNC COMMON - cc_menu: "begrændsninger", - cc_flip: "flip", - cc_rapd_s: "xy hastighed", - cc_rapd_l: ["max xy rejse hastighed","i arbejdsområdets enheder / minuttet"], - cc_rzpd_s: "z hastighed", - cc_rzpd_l: ["max z rejse hastighed ","i arbejdsområdets enheder / minuttet"], + cc_menu: "grænser", + cc_rapd_s: "xy fremføring", + cc_rapd_l: ["maks xy bevægelses fremføringshastighed","i arbejdsområde enheder / minut"], + cc_rzpd_s: "z fremføring", + cc_rzpd_l: ["maks z bevægelses fremføringshastighed","i arbejdsområde enheder / minut"], - cc_loff_s: "forskydning", - cc_loff_l: ["distance fra materialets flade","for planing","i arbejdsområdets enheder"], + // CNC LEVELING + cc_loff_s: "z forskydning", + cc_loff_l: ["afstand fra lager flade","i arbejdsområde enheder"], + cc_lxyo_s: "xy forskydning", + cc_lxyo_l: ["xy forskydning fra del grænse som en brøkdel af værktøj diameter (0 - 1.0)"], + cc_lsto_s: "lager", + cc_lsto_l: ["brug lager område i stedet for del område"], // CNC ROUGHING - cr_menu: "groft", - cr_lsto_s: "efterlad materiale", - cr_lsto_l: ["horizontal forskydning fra vertikal flade","materiale efterlades til efterbehandling","i arbejdsområdets enheder"], + cr_menu: "grovbearbejdning", + cr_lsto_s: "efterlad lager", + cr_lsto_l: ["horisontal forskydning fra lodrette flader","lager at efterlade til efterbehandling","i arbejdsområde enheder"], + cr_lstz_s: "efterlad lager z", + cr_lstz_l: ["lodret forskydning for grovbearbejdnings passager i arbejdsområde enheder. bedst til grovbearbejdning af kurvede overflader."], cr_ease_s: "let ned", - cr_ease_l: ["dyk skæring vil","følge en spiralform ned eller","køre langsomt langs en linært sti"], + cr_ease_l: ["dyk snit vil","spirale ned eller lette","langs en lineær sti"], + cr_clst_s: "ryd lager", + cr_clst_l: ["i indekseret tilstand, ryd hele lager område, ikke kun til del omkreds"], cr_clrt_s: "ryd top", - cr_clrt_l: ["kør en rydning over","grændseområdet af delen","ved z = 0"], + cr_clrt_l: ["kør en rydnings passage over","grænsningsområdet af delen","ved z = 0"], cr_clrp_s: "ryd hulrum", cr_clrp_l: ["fræs ud gennem lommer","i stedet for kun omridset"], cr_clrf_s: "ryd flader", - cr_clrf_l: ["interpolere trin ned for at","rydde eventuelle opdagede flade områder"], + cr_clrf_l: ["interpoler step ned for at","rydde eventuelle registrerede flade områder"], cr_olin_s: "kun indersider", - cr_olin_l: ["begræns skæring til","indvendige delgrænser"], + cr_olin_l: ["begræns skæring til","indvendige del grænser"], // CNC OUTLINE co_menu: "omrids", + co_merg_s: "flet overlap", + co_merg_l: ["flet overlappende linjer for at forhindre overskæring ind i tilstødende solids"], co_dogb_s: "dogbones", - co_dogb_l: ["indsæt dogbone skræinger","ind i indersidens hjørner"], + co_dogb_l: ["indsæt dogbone snit","ind i indvendige hjørner"], + co_dogr_s: "omvendt bones", + co_dogr_l: ["omvend dogbone retning"], + co_clrt_s: "ryd top", + co_clrt_l: ["skær startende ved toppen af lager","når lager er aktiveret"], co_wide_s: "bred udskæring", - co_wide_l: ["udvide udskæringsstier","for deep cuts in hard material"], + co_wide_l: ["udvid udvendige udskærings stier","til dybe snit i hårdt materiale"], co_olin_s: "kun indersider", - co_olin_l: ["begræns skæring til","indvendige delgrænser"], + co_olin_l: ["begræns skæring til","indvendige del grænser"], co_olot_s: "kun ydersider", - co_olot_l: ["begrænse skæring til","udvendige delgrænser","som kan betragtes som skyggeomrids"], - co_omit_s: "udelade igennem", - co_omit_l: "eliminer gennemhulninger", + co_olot_l: ["begræns skæring til","ydre del grænser","som kan betragtes","som skygge omridset"], + co_omit_s: "udelad gennemgående", + co_omit_l: "eliminer gennemgående huller", + co_omvd_s: "udelad lomme", + co_omvd_l: "eliminer indvendige lommer", co_olen_s: "aktiver", - co_olen_l: "aktiver omrids skæring", + co_olen_l: "aktiveret omrids skæring", // CNC CONTOUR cn_menu: "kontur", - cf_angl_s: "max vinkel", - cf_angl_l: ["vinkler større end dette","betragtes som lodrette"], + cf_angl_s: "maks vinkel", + cf_angl_l: ["ændringer i z der resulterer i vinkler større end dette betragtes som lodrette og udeladt fra kurver"], + cf_leav_s: "efterlad lager", + cf_leav_l: ["mængde af lager at efterlade over del overflade"], + cf_botm_s: "z bund", + cf_botm_l: ["adlyd z bund grænse"], cf_curv_s: "kun kurver", - cf_curv_l: ["begrænse lineær oprydning","til buede overflader"], + cf_curv_l: ["begræns lineær oprydning","til kurvede overflader"], cf_olin_s: "kun indersider", - cf_olin_l: ["begræns skæring til","indvendige delgrænser"], - cf_linx_s: "aktiver y passering", + cf_olin_l: ["begræns skæring til","indvendige del grænser"], + cf_linx_s: "aktiver y passage", cf_linx_l: "lineær y-akse efterbehandling", - cf_liny_s: "aktiver x passering", + cf_liny_s: "aktiver x passage", cf_liny_l: "lineær x-akse efterbehandling", // CNC TRACE cu_menu: "spor", cu_type_s: "type", - cu_type_l: ["følg = værktøjsspids følger linje","til højre eller venstre = værktøjsspids","følger linje forskudt efter værktøjsradius"], + cu_type_l: ["ryd = ryd en lukket-linje lomme","følg = værktøj spids følger linje","med forskydnings mulighed når lukket"], + + // CNC POCKET + cp_xpnd_s: "udvid", + cp_xpnd_l: ["voks (+) eller krymp (-) valgte områder","kontur bruger hele det valgte område","ikke-kontur standard til værktøj radius","i arbejdsområde enheder"], + cp_smoo_s: "glat", + cp_smoo_l: ["ryd takket kanter forårsaget af vinklede vægge. kan fremskynde og forbedre lomme fræsning for detaljerede geometrier. anbefal at starte med værdier omkring 1 hvis slicing tager for lang tid eller konturerne ser takkede ud"], + cp_foll_s: "valg", + cp_foll_l: ["kurvatur valgs grænse i grader. værdier tættere på 0 vil begrænse valg til fladere overflader"], + cp_refi_s: "finér", + cp_refi_l: ["antal finerings passager at udføre på konturerede polylinjer. beregnet til at adressere Z delta savtandning forårsaget af flader geometrier mens glatning håndterer XY. værdier > 10 virker godt for blidt konturerede geometrier med betydelig Z bevægelse."], + cp_cont_s: "kontur", + cp_cont_l: ["ignorer indvendige hulrum og funktioner"], + cp_engr_s: "graver", + cp_engr_l: ["opsætter en enkelt passage omkring omkredsen af det valgte område. også nyttigt til 3D laser markering"], + cp_outl_s: "kun omrids", + cp_outl_l: ["ignorer indvendige hulrum og funktioner"], // CNC DRILLING - cd_menu: "bore", + cd_menu: "boring", cd_axis: "akse", cd_points: "punkter", - cd_plpr_s: "dyk per", - cd_plpr_l: ["max dyk mellem","dvale perioden","i arbejdsområdets enheder","0 for at deaktivere"], + // cd_plpr_s: "dyk pr", + // cd_plpr_l: ["maks dyk mellem","dvale perioder","i arbejdsområde enheder","0 for at deaktivere"], cd_dwll_s: "dvale tid", - cd_dwll_l: ["dvale tid","mellem dyk","i millisekunder"], - cd_lift_s: "løft bor", - cd_lift_l: ["løft mellem dyk","efter opholdsperiode","i arbejdsområdets enheder","0 for at deaktivere"], + cd_dwll_l: ["dvale tid","mellem dyk i","i millisekunder"], + cd_lift_s: "bor løft", + cd_lift_l: ["løft mellem dyk","efter dvale periode","i arbejdsområde enheder","0 for at deaktivere"], + cd_thru_s: "z forlængelse", + cd_thru_l: ["forlæng nedadgående snit gennem lager","i arbejdsområde enheder"], + cd_dtru_s: "bor igennem", + cd_dtru_l: ["yderligere bore dybde under del bund","tilsidesætter global z gennem","0 for at deaktivere"], + cd_mark_s: "markering", + cd_mark_l: ["kun marker huller, bor ikke ud","step ned indstillingen bruges","til at bestemme hvor dybt at markere"], + cd_ftop_s: "fra lager top", + cd_ftop_l: ["bor fra lager top","i stedet for del overflade"], + cd_prcn_s: "præcision", + cd_prcn_l: ["afstand mellem slices","til at søge efter huller","i arbejdsområde enheder","lavere er langsommere og","bruger mere hukommelse","0 = kun flader"], + + cd_seli_l: ["individuelt vælg huller","til boring"], + cd_sela_s: "vælg matchende diameter", + cd_sela_l: ["vælg alle huller der", "matcher valgt værktøj diameter"], + + //CNC Registration cd_regi_s: "registrer", - cd_regi_l: ["bore registreringshuller","til dobbeltsidede dele","uafhængigt af aktivering af","boring, men bruger samme værktøj og indstillinger"], + cd_regi_l: ["bor registrerings huller","til dobbeltsidede dele","uafhængigt af aktivering","boring men bruger samme","værktøj og indstillinger"], + cd_rego_s: "del forskydning", + cd_rego_l: ["forskydning af hul center","fra del begrænsnings boks","i arbejdsområde enheder"], + + // CNC HELICAL toolpath + ch_menu: "helikal", + ch_sdwn_s: "step ned (stigning)", + ch_sdwn_l: ["z-afstand","pr omdrejning","i arbejdsområde enheder","(omvendt af gevind pr enhed)", "0 for at deaktivere"], + ch_fsta_s: "tving start vinkel", + ch_fsta_l: ["tilsidesæt start vinkel","standard til nærmeste punkt til værktøj"], + ch_stra_s: "start vinkel", + ch_stra_l: ["start vinkel af helix","i grader ccw af +x akse"], + ch_selc_l: ["vælg en cylinder flade", "indvendige huller der er for små","vil blive ignoreret."], + ch_fini_s: "bund efterbehandlings passage", + ch_fini_l: ["spor en cirkel ved bund af helix","brugt til hul rydning"], + ch_entr_s: "gå ind fra center", + ch_entr_l: ["start snit fra center af cylinder","blidt buende ind horisontalt", "i stedet for at dykke"], + ch_ento_s: "center indgangs forskydning", + ch_ento_l: ["forskydning fra sti til kurvet indgang","normalt gevind dybde hvis gevind fræsning","i arbejdsområde enheder","0 for en lineær indgang"], + ch_rvrs_s: "omvendt", + ch_rvrs_l: ["omvend helikal z-akse retning","lav-Z til høj-Z når markeret","nyttigt til gevind fræsning","ikke anbefalet til andre operationer"], + ch_clkw_s: "med uret", + ch_clkw_l: ["omvend helikal rotation omkring cylinder","med uret når markeret"], + + // CNC FLIP + cf_menu: "vend", + cf_nvrt_s: "z bund", + cf_nvrt_l: "omvend z bund indstilling til at følge lager", + + // CNC INDEX AXIS + ci_degr_s: "grader", + ci_degr_l: "grader at rotere A (indekseret) akse", + ci_abso_s: "absolut", + ci_abso_l: "grad rotation er absolut", + ci_face_s: "flade", + ci_face_l: "vælg flade at rotere opad", + ci_line_s: "lineær", + ci_line_l: "lav lineære passager langs X derefter rotér Y", + ci_laso_s: "forskydning start", + ci_laso_l: ["x forskydning fra venstre af del. negative værdier er uden for delen. i arbejdsområde enheder"], + ci_laeo_s: "forskydning slut", + ci_laeo_l: ["x forskydning fra højre af del. negative værdier er uden for delen. i arbejdsområde enheder"], + + // CNC LASER On/Off Operations (Carvera) + cl_powr_s: "kraft", + cl_powr_l: "laser kraft fra 0 til 1.0", + cl_adap_s: "adaptiv", + cl_adap_l: "brug adaptiv kraft baseret på Z højde", + cl_adrp_s: "gentagne", + cl_adrp_l: "anvend en modulus af Z højde ved brug af det givne bånd til at lave gentagne mønstre", + cl_flat_s: "fladgør", + cl_flat_l: "fladgør output til en given Z højde", + cl_flaz_s: "flad højde", + cl_flaz_l: ["fladgør output til denne Z højde", "i arbejdsområde enheder"], + cl_minp_s: "z min kraft", + cl_minp_l: ["kraft indstilling ved den laveste del af Z båndet. kan være højere eller lavere end den anden ende af Z båndet."], + cl_maxp_s: "z maks kraft", + cl_maxp_l: ["kraft indstilling ved den højeste del af Z båndet. kan være højere eller lavere end den anden ende af Z båndet."], + cl_minz_s: "min z højde", + cl_minz_l: ["laveste Z bånd position"], + cl_maxz_s: "maks z højde", + cl_maxz_l: ["højeste Z bånd position. når sat til 0, bruger det højeste Z punkt af arbejdsområdet"], // CNC CUTOUT TABS ct_menu: "tapper", ct_angl_s: "vinkel", - ct_angl_l: ["startvinkel for tapmellemrum","i grader (0-360)"], + ct_angl_l: ["start vinkel for tap mellemrum","i grader (0-360)"], ct_numb_s: "antal", - ct_numb_l: ["antal tapper der skal bruges","bliver fordelt jævnt","omkring delen"], + ct_numb_l: ["antal tapper at bruge","vil blive spredt jævnt","rundt om delen"], ct_wdth_s: "bredde", - ct_wdth_l: "bredde i arbejdsområdets enheder", + ct_wdth_l: "bredde i arbejdsområde enheder", ct_hght_s: "højde", - ct_hght_l: "højde i arbejdsområdets enheder", + ct_hght_l: "højde i arbejdsområde enheder", ct_dpth_s: "dybde", - ct_dpth_l: ["distance arbejdsområdets enheder","som tappen projekteres fra","delens flade"], + ct_dpth_l: ["afstand i arbejdsområde enheder","som tappen projekteres fra","del overfladen"], ct_midl_s: "midtlinje", - ct_midl_l: ["brug midterlinjen på tappen","i stedet for z-bunden","til dobbeltsidet arbejde"], + ct_midl_l: ["brug midtlinje af tap","i stedet for z bund","til dobbeltsidigt arbejde"], ct_nabl_s: "auto", - ct_nabl_l: ["generer automatisk radiale tapper","projekteret fra delens center","ved hjælp af optælling og vinkelforskydning"], + ct_nabl_l: ["auto generer radiale tapper","projekteret fra del center","ved brug af antal og vinkel forskydning"], // OUTPUT ou_menu: "output", - // LASER KNIFE - dk_menu: "kniv", - dk_dpth_s: "skæredybde", - dk_dpth_l: ["endelig skæredybde","i millimeter"], - dk_pass_s: "skærepasseringer", - dk_pass_l: ["antal passeringer","ned for at skære dybde"], - dk_offs_s: "spids forskydning", - dk_offs_l: ["afstand fra knivspids","til midten af værktøjet","i millimeter"], + // LASER SLICING + ls_offs_s: "forskydning / skærebredde", + ls_offs_l: ["afstand mellem center af skærings","stien og kanten af tilbageværende materiale","i millimeter"], + ls_lahi_s: "slice højde", + ls_lahi_l: ["laghøjde","i millimeter","0 = auto/registrer"], + ls_lahm_s: "slice minimum", + ls_lahm_l: ["laghøjde minimum","vil flette auto slices","under denne tykkelse","i millimeter"], + ls_sngl_s: "enkelt slice", + ls_sngl_l: ["udfør kun én slice","ved specificeret laghøjde"], - // OUTPUT LASER + // LASER KNIFE + dk_menu: "træk kniv", + dk_dpth_s: "skære dybde", + dk_dpth_l: ["endelig skære dybde","i millimeter"], + dk_pass_s: "skære passager", + dk_pass_l: ["antal passager","ned til skære dybde"], + dk_offs_s: "spids forskydning", + dk_offs_l: ["afstand fra klinge spids","til center af værktøj","i millimeter"], + + // WIRE EDM + we_omit_s: "udelad indre", + we_omit_l: "udelad indre polygoner", + + // LASER OUTPUT ou_spac_s: "mellemrum", - ou_spac_l: ["afstand mellem lagoutput","i millimeter"], + ou_spac_l: ["afstand mellem lag output","i millimeter"], ou_scal_s: "skalering", - ou_scal_l: "multiplikator (0.1 to 100)", + ou_scal_l: "multiplikator (0.1 til 100)", ou_powr_s: "kraft", ou_powr_l: ["0 - 100","repræsenterer %"], ou_sped_s: "hastighed", ou_sped_l: "millimeter / sekund", - ou_mrgd_s: "sammensæt", - ou_mrgd_l: ["flet alle lag ved hjælp af","farvekodning for at betegne","stabeldybde"], + ou_mrgd_s: "sammenføjet", + ou_mrgd_l: ["flet alle lag ved brug af","farvekodning til at betegne","stablings dybde"], ou_grpd_s: "grupperet", - ou_grpd_l: ["bevarer hvert lag som","en samlet gruppering","i stedet for adskilt","polygoner"], - ou_layr_s: "lagrækkefølge", - ou_layr_l: ["outputlagsrækkefølge","fra øverst til højre til","nederst til venstre"], - ou_layo_s: "lagfarve", - ou_layo_l: ["outputlagsfarver","for hvert z-indeks","overskrævet af sammensætning"], + ou_grpd_l: ["behold hvert lag som","en samlet gruppering","i stedet for adskilte","polygoner"], + ou_layr_s: "lag rækkefølge", + ou_layr_l: ["output lag rækkefølge","fra top højre til","bund venstre"], + ou_layo_s: "lag farve", + ou_layo_l: ["output lag farver","for hvert z indeks","tilsidesat af sammenføjet"], + ou_lays_s: "lag markering", + ou_lays_l: ["marker lag til stabeling. det lag over vil blive outputtet i en anden farve som laseren kan markere med lavere kraft. aktiverer lag gruppering."], ou_drkn_s: "træk kniv", - ou_drkn_l: ["aktiver trækkniv","output i gcode","skårne radier tilføjes","til hjørner med","nedskæringspasseringer"], + ou_drkn_l: ["aktiver træk kniv","output i gcode","skære radier tilføjes","til hjørner med","skære ned passager"], + ou_stak_s: "3d stak", + ou_stak_l: ["output er en 3D stak af 2D stier snarere end pakning af lag fladt i 2D"], + ou_maxp_s: "maks kraft", + ou_maxp_l: ["maks kraft værdi i gcode. kraft % fra indstillinger vil skalere fra 0 til denne værdi"], + ou_inch_s: "imperial", + ou_inch_l: ["output værdier i tommer"], + ou_shap_s: "shaper værktøj", + ou_shap_l: ["annotér SVG med Shaper Tool brugerdefinerede attributter"], // OUTPUT FDM ou_nozl_s: "dyse temp", @@ -494,156 +762,221 @@ self.lang['da-dk'] = { ou_bedd_s: "plade temp", ou_bedd_l: "grader i celsius", ou_feed_s: "print hastighed", - ou_feed_l: ["max print hastighed","millimeter / sekund"], - ou_fini_s: "afslutningshastighed", - ou_fini_l: ["yderste skalhastighed","millimeter / sekund"], - ou_move_s: "print hastighed", - ou_move_l: ["rejsehastighed","millimeter / sekund","0 = aktiver G0 bevægelser"], + ou_feed_l: ["maks print hastighed","sat til 0 for at bruge standard","millimeter / sekund"], + ou_fini_s: "efterbehandlings hastighed", + ou_fini_l: ["yderste skal hastighed","bro/flad solid lag","sat til 0 for at bruge standard","millimeter / sekund"], + ou_move_s: "bevægelses hastighed", + ou_move_l: ["ikke-print bevægelses hastighed","millimeter / sekund","0 = aktiver G0 bevægelser"], ou_shml_s: "skal faktor", ou_flml_s: "solid faktor", - ou_spml_s: "fylde faktor", - ou_exml_l: ["ekstruderingsmultiplikator","0.0 - 2.0"], - // ou_fanl_s: "blæser lag", - // ou_fanl_l: "laget hvor blæseren aktiveres", - ou_fans_s: "blæser hastighed", + ou_spml_s: "fyld faktor", + ou_exml_l: ["ekstrudering multiplikator","0.0 - 2.0"], + ou_fanl_s: "blæser på lag", + ou_fanl_l: ["lag # til at tænde blæser","lag starter ved 0"], + ou_fans_s: "blæser på hastighed", ou_fans_l: "0 - 255", + ou_layt_s: "min lag tid", + ou_layt_l: ["minimum tilladt lag print tid i sekunder. printning vil blive bremset hvis laget ellers ville fuldføres på færre sekunder.","0 = deaktiveret"], // OUTPUT CAM - ou_toll_s: "tolerance", - ou_toll_l: ["overfladepræcision","i arbejdsområdets enheder","lavere er langsommere og","bruger mere hukommelse","0 = automatisk baseret","på animation præference"], + ou_toll_s: "præcision", + ou_toll_l: ["overflade præcision","i arbejdsområde enheder","lavere er langsommere og","bruger mere hukommelse","0 = automatisk baseret","på animere præference"], + ou_flat_s: "fladhed", + ou_flat_l: ["delta z under hvilken to tilstødende punkter betragtes som kollineære. 0 = beregn ved brug af tolerance"], + ou_redu_s: "reduktion", + ou_redu_l: ["antal akse trin at springe over for hver enhed af præcision. højere præcision kan kræve reduktion for at producere rimelige fil størrelser. start ved 0 og test i trin på 1."], + ou_brdg_s: "brobygning", + ou_brdg_l: ["flad afstand mellem kurvede","områder at bygge bro med et snit"], ou_zanc_s: "z anker", - ou_zanc_l: ["styrer delens position","når lager Z overstiger del Z"], + ou_zanc_l: ["kontrollerer position af delen","når lager Z overstiger del Z"], ou_ztof_s: "z forskydning", - ou_ztof_l: ["forskyd z anker","i arbejdsområdets enheder","har ingen effekt når","anker er i midten"], - ou_zbot_s: "z bottom", - ou_zbot_l: ["afstand fra delens bund"," til begrænset skære dybde","i arbejdsområdets enheder"], - ou_zclr_s: "z frihøjde", - ou_zclr_l: ["sikker rejse forskydning","fra toppen af delen","i arbejdsområdets enheder"], + ou_ztof_l: ["forskyd z anker","i arbejdsområde enheder"], + ou_ztop_s: "z top", + ou_ztop_l: ["forskydning fra lager bund","til at sætte start af skæredybde","i arbejdsområde enheder","* boring/kontur ignorer dette *"], + ou_zbot_s: "z bund", + ou_zbot_l: ["forskydning fra lager bund","til at begrænse skæredybde","i arbejdsområde enheder"], + ou_zclr_s: "z frigang", + ou_zclr_l: ["sikker rejse forskydning","fra top af del","i arbejdsområde enheder"], ou_ztru_s: "z gennem", - ou_ztru_l: ["forlæng udskæringen nedad","i arbejdsområdets enheder"], + ou_ztru_l: ["forlæng udskærings passage ned","i arbejdsområde enheder"], ou_conv_s: "konventionel", - ou_conv_l: ["fræsningsretning","fjern markeringen for 'stigning'"], + ou_conv_l: ["fræsnings retning","fjern markering for 'stigning'"], ou_depf_s: "dybde først", - ou_depf_l: ["optimer lommee skæringer"," med dybde prioritet"], + ou_depf_l: ["optimer lomme snit","med dybde prioritet"], + ou_inrf_s: "indre først", + ou_inrf_l: ["skær altid indvendigt til udvendigt"], + ou_toin_s: "værktøj init", + ou_toin_l: "tilføj værktøj skift med første operation. når deaktiveret, antager gcode at første værktøj er indlæst og forskydning probet", + ou_forz_s: "tving z maks", + ou_forz_l: "alle bevægelser mellem lommer vil gå til z maks (over lager). dette er normalt påkrævet hvis du ikke udfører en grovbearbejdnings operation før lomme operationer.", + ou_z1st_s: "første z maks", + ou_z1st_l: "første bevægelse i jobbet vil være til Z maks (rejse afstand over lager)", + ou_feng_s: "indgriben faktor", + ou_feng_l: "hastigheds skalering (0.1-1) når endefræse er fuldt indgrebet på et nyt snit. stepped over snit når endefræsen er mindre end fuldt indgrebet kører ved en faktor på 1 relativ til output hastighed. typisk relaterer dette sig til grovbearbejdning eller enhver operation med step over.", + ou_eang_s: "lettelses vinkel", + ou_eang_l: "nedstigning vinkel for let ned i grader", // CAM STOCK - cs_menu: "materiale", + cs_menu: "lager", cs_wdth_s: "bredde", - cs_wdth_l: ["bredde (x) i arbejdsområdets enheder","0 er standard sat til delens størrelse"], + cs_wdth_l: ["bredde (x) i arbejdsområde enheder","0 standard til del størrelse"], cs_dpth_s: "dybde", - cs_dpth_l: ["dybde (y) i arbejdsområdets enheder","0 er standard sat til delens størrelse"], + cs_dpth_l: ["dybde (y) i arbejdsområde enheder","0 standard til del størrelse"], cs_hght_s: "højde", - cs_hght_l: ["højde (z) i arbejdsområdets enheder","0 er standard sat til delens størrelse"], + cs_hght_l: ["højde (z) i arbejdsområde enheder","0 standard til del størrelse"], cs_offs_s: "forskydning", - cs_offs_l: ["brug bredde, dybde, højde"," som astand fra max","delstørrelse på platformen"], - cs_clip_s: "fastgør til", - cs_clip_l: ["groft og omrids","fastgør skærestier","til defineret materiale"], + cs_offs_l: ["brug bredde, dybde, højde","som forskydninger fra maks","del størrelse på platform"], + cs_clip_s: "klip til", + cs_clip_l: ["grov og omrids","klip skære stier","til defineret lager"], + cs_ishg_s: "vis gitter", + cs_ishg_l: ["vis platform gitter i indekseret tilstand"], + cs_indx_s: "indekseret", + cs_indx_l: ["lager er monteret til en roterende indekser"], cs_offe_s: "aktiver", - cs_offe_l: "aktiver fræsemateriale", + cs_offe_l: "aktiver fræsnings lager", // ORIGIN (CAM & LASER) or_bnds_s: "udgangspunkt grænser", - or_bnds_l: ["udgangspunkt er relativt til","grænserne af alle objekter"], + or_bnds_l: ["udgangspunkt er relativt til","grænse af alle objekter"], or_cntr_s: "udgangspunkt center", - or_cntr_l: "udgangspunkt er refereret til fra centrum", + or_cntr_l: "udgangspunkt er refereret fra centeret", or_topp_s: "udgangspunkt top", - or_topp_l: "udgangspunkt er refereretfra toppen af objektet", + or_topp_l: "udgangspunkt er refereret fra toppen af objekter", + or_offx_s: "udgangspunkt forskydning X", + or_offx_l: "udgangspunkt forskydning X", + or_offy_s: "udgangspunkt forskydning Y", + or_offy_l: "udgangspunkt forskydning Y", + + // CAM ORIGIN + co_menu: "udgangspunkt", + co_offx_s: "forskydning x", + co_offx_l: ["forskyd udgangspunkt langs x akse","i arbejdsområde enheder"], + co_offy_s: "forskydning y", + co_offt_l: ["forskyd udgangspunkt langs y akse","i arbejdsområde enheder"], + co_offz_s: "forskydning z", + co_offz_l: ["forskyd udgangspunkt langs z akse","i arbejdsområde enheder"], // FDM ADVANCED - ad_menu: "ekpert", + ad_menu: "ekspert", ad_rdst_s: "tilbagetræk afstand", - ad_rdst_l: ["mængden af tilbagetrukket filament","for lange rejser. i millimeter"], + ad_rdst_l: ["mængde at trække filament tilbage","for lange bevægelser. i millimeter"], ad_rrat_s: "tilbagetræk hastighed", - ad_rrat_l: ["hastigheden på filamentet","i et tilbagetræk i mm/s"], - ad_rdwl_s: "påbegynd dvale", + ad_rrat_l: ["hastighed af filament","tilbagetrækning i mm/s"], + ad_rdwl_s: "indgreb dvale", ad_wpln_s: "tilbagetræk aftørring", - ad_wpln_l: ["ikke-printbevægelse","efter tilbagetræk","i millimeter"], - ad_rdwl_l: ["tid mellem genopstart af","filament og bevægelser","i millisekunder"], - ad_scst_s: "skal trykudligning", - ad_scst_l: ["ikke-printende ende","af en skal omkreds","i millimeter"], - ad_msol_s: "min solid", - ad_msol_l: ["minimumsareal (mm^2)","kræves for at holde solid","skal være > 0.1"], + ad_wpln_l: ["ikke-print bevægelse","efter tilbagetrækning","i millimeter"], + ad_rdwl_l: ["tid mellem gen-indgreb","filament og bevægelse","i millisekunder"], + ad_scst_s: "skal coasting", + ad_scst_l: ["ikke-print slutning","af omkreds skaller","i millimeter"], + ad_msol_s: "område filter", + ad_msol_l: ["minimum område (mm^2)","broer og flader mindre end dette beskæres"], ad_mins_s: "min hastighed", - ad_mins_l: ["minimum hastighed","for korte sektioner"], - ad_spol_s: "korte polygoner", - ad_spol_l: ["polygoner kortere end dette","har deres printhastighed","nedskaleret til min. hastighed","i millimeter"], + ad_mins_l: ["minimum hastighed","for korte segmenter"], + ad_maxf_s: "maks flowrate", + ad_maxf_l: ["maksimal volumetrisk flowrate understøttet af dette printhoved og filament","i millimeter^3 / sekund"], + ad_scar_s: "scarf længde", + ad_scar_l: ["lette op længde for scarf samling. deaktiverer bue registrering","0 = deaktiveret"], + ad_spol_s: "kort sti", + ad_spol_l: ["polygoner kortere end dette","vil have deres print hastighed","skaleret ned til min hastighed","i millimeter"], ad_arct_s: "bue tolerance", - ad_arct_l: ["konverter facetterede linjer til buer","center point drift tolerance","når matchende buepunkter","overvej værdier omkring 0,15","i millimeter","0 for at deaktivere"], - ad_zhop_s: "z hop dist", - ad_zhop_l: ["mængden z skal hæves\ikke tilbagetrækning bevægelser","i millimeter","0 for at deaktivere"], - ad_abkl_s: "anti-tilbageslag", - ad_abkl_l: ["brug mikrobevægelser til at annullere","tilbageslag mens der fyldes","i millimeter"], - ad_lret_s: "lag tilbagetræk", - ad_lret_l: ["tving filament tilbagetræk","mellem lag"], - ad_play_s: "polish layers", - ad_play_l: ["polish up to specified","# of layers at a time"], - ad_pspd_s: "polish speed", - ad_pspd_l: ["polishing speed","in millimeters / second"], + ad_arct_l: ["konverter facetterede linjer til buer","center punkt drift tolerance","når matchende bue punkter","overvej værdier omkring 0.15","værdi i millimeter","0 eller scarf deaktiverer dette"], + ad_zhop_s: "z hop afstand", + ad_zhop_l: ["mængde at hæve z","på tilbagetræk bevægelser","i millimeter","0 for at deaktivere"], + ad_abkl_s: "anti-backlash", + ad_abkl_l: ["for bedre flad overflade finish","brug mikro-bevægelser til at annullere","backlash i solid lag output","i millimeter","0 for at deaktivere","hvis din firmware har M425","læg det i gcode sidehovedeet","og lad dette være 0"], + ad_lbir_s: "bælte først", + ad_lbir_l: ["print altid skaller der rører bæltet før alle andre skaller. dette er ikke længere en anbefalet indstilling baseret på omfattende test."], + ad_altr_s: "alternerende", + ad_altr_l: ["alternér skal viklings rækkefølge","med uret / mod uret","kan reducere vridning i tynde områder","og hjælpe med bælte kant vedhæftning"], + ad_zint_s: "interleave z", + ad_zint_l: ["interleave Z højder med ulige antal skaller"], + ad_lret_s: "tving tilbagetræk", + ad_lret_l: ["tving filament tilbagetrækning mellem lag"], + ad_agap_s: "undgå huller", + ad_agap_l: ["rute rundt om huller snarere","end at udføre en tilbagetrækning","når muligt"], + ad_play_s: "poler lag", + ad_play_l: ["poler op til specificeret","# af lag på en gang"], + ad_pspd_s: "poler hastighed", + ad_pspd_l: ["polerings hastighed","i millimeter / sekund"], + ad_purg_s: "purge tårn", + ad_purg_l: ["purge tårn område i mm^2","til multi ekstruder opsætninger","0 = deaktiveret"], // CAM EXPERT cx_fast_s: "spring skygge over", - cx_fast_l: ["deaktiver detektering af overhæng","kan være hurtigere og bruge mindre","hukommelse med komplekse modeller","men mislykkes med udhæng","prøv at aktivere, hvis slicer","hænger under skygge"], + cx_fast_l: ["deaktiver overhæng registrering","kan være hurtigere og bruge mindre","hukommelse med komplekse modeller","men fejler med overhæng","prøv at aktivere hvis slicing","hænger under skygge"], + cx_true_s: "sand skygge", + cx_true_l: ["beregningsmæssigt korrekt skygge","vil være langsommere men producere","bedre snit til komplekse dele"], + cx_arce_s: "bue output", + cx_arce_l: ["EKSPERIMENTEL: aktiver sti til bue konvertering"], + cx_arct_s: "bue tolerance", + cx_arct_l: ["konverter cirkulære stier til buer;","center punkt drift tolerance","når matchende bue punkter","overvej værdier omkring 0.15","i mm, eller 0.006 tommer;","høje værdier kan forårsage","uventet adfærd","0 for at deaktivere"], + cx_arcr_s: "bue opløsning", + cx_arcr_l: ["ændring i linje retning","acceptabel i en bue","overvej værdier omkring 5","høje værdier kan forårsage","uventet adfærd",], // FDM GCODE - ag_menu: "gkode", + ag_menu: "gcode", ag_nozl_s: "dyse", ag_nozl_l: "vælg output dyse eller hoved", - ag_paws_s: "pause lag", - ag_paws_l: ["kommasepareret liste over lag","der skal indsættet pause kommandoer før"], - ag_loop_s: "loop lag", - ag_loop_l: ["lagintervaller, der skal gentages i formatet","første-sidste-optælling,første-sidste-optælling,...","udeladt antal = 1"], + ag_peel_s: "peel vagt", + ag_peel_l: ["starter ved denne bælte z position","periodisk rul printet af og","tilbage på bæltet for at frigøre det","og forhindre rullings afbøjning"], + // ag_paws_s: "pause lag", + // ag_paws_l: ["komma-separeret liste over lag","til at indsætte pause kommandoer før"], + // ag_loop_s: "loop lag", + // ag_loop_l: ["lag intervaller at gentage i formatet","første-sidste-antal,første-sidste-antal,...","udeladt antal = 1"], + ag_loop_s: "loop antal", + ag_loop_l: ["antal gange at gentage","det valgte område eller det","hele print hvis intet område"], // SLA MENU sa_menu: "slicing", sa_lahe_s: "laghøjde", - sa_lahe_l: ["laghøjdet","i millimeter"], + sa_lahe_l: ["laghøjde","i millimeter"], sa_shel_s: "hul skal", - sa_shel_l: ["skaltykkelse i mm","Brug flere af lagets højde","brug 0 for solid (deaktiveret)"], + sa_shel_l: ["skal tykkelse i mm","brug multiple af laghøjde","brug 0 for solid (deaktiveret)"], sa_otop_s: "åben top", sa_otop_l: ["hvis skal er aktiveret","resulterer i en åben top"], - sa_obas_s: "åben bund", - sa_obas_l: ["hvis skal er aktiveret","resulterer i en åben bund","deaktiveret med understøtninger"], + sa_obas_s: "åben basis", + sa_obas_l: ["hvis skal er aktiveret","resulterer i en åben basis","deaktiveret med støtter"], sa_layr_m: "lag", sa_lton_s: "lys tændt tid", - sa_lton_l: ["lys tændt tid","tid i sekunder"], + sa_lton_l: ["lag lys tændt","tid i sekunder"], sa_ltof_s: "lys slukket tid", - sa_ltof_l: ["lys slukket tid","tid i sekunder"], - sa_pldi_s: "skræl afstand", - sa_pldi_l: ["skræl afstand","i millimeter"], - sa_pllr_s: "afskalningshastighed", - sa_pllr_l: ["afskalningshastighed","i mm/sek"], - sa_pldr_s: "afskalningshastighed drop", - sa_pldr_l: ["afskalningshastighed drop","i mm/sek"], + sa_ltof_l: ["lag lys slukket","tid i sekunder"], + sa_pldi_s: "peel afstand", + sa_pldi_l: ["peel afstand","i millimeter"], + sa_pllr_s: "peel løft hastighed", + sa_pllr_l: ["peel løft hastighed","i mm/sek"], + sa_pldr_s: "peel fald hastighed", + sa_pldr_l: ["peel fald hastighed","i mm/sek"], - sa_base_m: "bund", - sa_balc_s: "antal lag", - sa_balc_l: ["antal","bundlag"], - sa_bltn_l: ["bundlag lys tændt","tid i sekunder"], - sa_bltf_l: ["bundlag lys slukket","tid i sekunder"], + sa_base_m: "basis", + sa_balc_s: "lag antal", + sa_balc_l: ["antal af","basis lag"], + sa_bltn_l: ["basis lag lys tændt","tid i sekunder"], + sa_bltf_l: ["basis lag lys slukket","tid i sekunder"], - sa_infl_m: "fylde", - sa_ifdn_s: "densitet", - sa_ifdn_l: ["procent udfyldning","kræver skal","0 = deaktiveret","gyldig 0.0 - 1.0"], - sa_iflw_s: "linjebredde", - sa_iflw_l: ["luge linjebredde","i millimeter"], + sa_infl_m: "fyld", + sa_ifdn_s: "tæthed", + sa_ifdn_l: ["procent fyld","kræver skal","0 = deaktiveret","gyldig 0.0 - 1.0"], + sa_iflw_s: "linje bredde", + sa_iflw_l: ["hatch linje bredde","i millimeter"], sa_supp_m: "støtte", - sa_slyr_s: "bundlag", - sa_slyr_l: ["bund støtte lag","værdiområde 0-10"], - sa_slgp_s: "mellemrum", - sa_slgp_l: ["antal lag mellem","flåde og bund på objektet"], - sa_sldn_s: "densitet", - sa_sldn_l: ["bruges til at beregne","antal støttesøjler","0.0-1.0 (0 = deaktiver)"], + sa_slyr_s: "basis lag", + sa_slyr_l: ["basis støtte lag","værdi område 0-10"], + sa_slgp_s: "mellemrum lag", + sa_slgp_l: ["antal lag mellem","raft og bund af objekt"], + sa_sldn_s: "tæthed", + sa_sldn_l: ["brugt til at beregne","antal støtte søjler","0.0-1.0 (0 = deaktiver)"], sa_slsz_s: "størrelse", - sa_slsz_l: ["maks. størrelse på en","støtte søjle","i millimeter"], + sa_slsz_l: ["maks størrelse af en","støtte søjle","i millimeter"], sa_slpt_s: "punkter", - sa_slpt_l: ["antal punkter i","hver støttesøjle","i millimeter"], - sl_slen_l: "aktiver understøtte", + sa_slpt_l: ["antal punkter i","hver støtte søjle","i millimeter"], + sl_slen_l: "aktiver støtter", sa_outp_m: "output", sa_opzo_s: "z forskydning", - sa_opzo_l: ["z lagforskydning","almost always 0.0","0.0-1.0 in millimeters"], + sa_opzo_l: ["z lag forskydning","næsten altid 0.0","0.0-1.0 i millimeter"], sa_opaa_s: "anti alias", - sa_opaa_l: ["aktivere anti-aliasing","producerer større filer","kan sløre detaljer"] + sa_opaa_l: ["aktiver anti-aliasing","producerer større filer","kan sløre detaljer"] }; diff --git a/web/kiri/lang/de-de.js b/web/kiri/lang/de-de.js index 82880d59..25a1aca0 100644 --- a/web/kiri/lang/de-de.js +++ b/web/kiri/lang/de-de.js @@ -6,52 +6,81 @@ self.lang['de-de'] = { animate: "Animieren", // CAM animate button arrange: "Anordnen", // layout workspace objects axis: "Achse", // left object scale pop menu + back: "Zurück", clear: "alles entfernen", // clear workspace (remove all objects) copy: "Kopieren", + clone: "Klonen", // create duplicate delete: "Löschen", detail: "Details", done: "Fertig", + edit: "Bearbeiten", enable: "Aktivieren", + disable: "Deaktivieren", + donate: "Spenden", export: "Export", files: "Dateien", + filter: "Filter", + front: "Vorne", + fullscreen: "Vollbild", help: "Hilfe", ghost: "Geist", // left render pop menu (wireframe) hide: "Verbergen", // left render pop menu (invisible) - home: "home", + home: "Home", import: "Import", + install: "Installieren", language: "Sprache", - machine: "Maschine", // device or machine + left: "Links", + machines: "Maschinen", // device or machine + mesh: "Mesh", // mesh editing metric: "Metrisch", name: "Name", - prefs: "Einstellungen", // left menu "preferences" + new: "Neu", // file new + off: "Aus", // turn something off + on: "Ein", // turn something on + profs: "Profile", // right menu "profiles" + prefs: "Einstellungen", // right menu "preferences" preview: "Vorschau", recent: "Letzte Objekte", + rename: "Umbenennen", render: "Rendern", // left render pop menu reset: "Zurücksetzen", + right: "Rechts", rotate: "Rotieren", // left rotate pop menu save: "Speichern", scale: "Skalieren", // left object scale pop menu + select: "Auswählen", setup: "Einrichtung", settings: "Einstellungen", size: "Größe", + slice: "Slicen", solid: "Undurchsichtig", // view type pop menu + start: "Start", tool: "Werkzeug", tools: "Werkzeuge", // CAM tool menu button top: "Oben", type: "Typ", // CAM tool type + uninstall: "Deinstallieren", version: "Version", view: "Ansicht", // left view pop menu wire: "Drahtansicht", // left render pop menu + volume: "Volumen", // device build area acct_xpo: ["Lege ein Backup Deiner Geräte","und Geräte-Profile an, mit der","Option, den Arbeitsbereich und","mit Objekten und Anordnung zu speichern"], // RIGHT-CLICK CONTEXT MENU rc_clws: "Arbeitsbereich freiräumen", rc_xpws: "Arbeitsbereich exportieren", - rc_lafl: "Auf das Bett", + rc_lafl: "Auf das Bett legen", rc_mirr: "Spiegeln", rc_dupl: "Duplizieren", + rc_focs: "Fokus setzen", + rc_heal: "Meshes reparieren", + rc_swap: "Vertices ersetzen", + rc_xobj: "Als OBJ exportieren", rc_xstl: "Als STL exportieren", + sb_info: ["Druckgeschwindigkeit","in mm/s"], + rc_merg: "Objekt-Meshes zusammenführen", + rc_splt: "Körper isolieren", // DEVICE MENU and related dialogs dm_sldt: "Wähle einen Geräte-Typ aus", @@ -59,23 +88,24 @@ self.lang['de-de'] = { dm_mydd: "Meine Geräte", dm_seld: "Ausgewähltes Gerät", dm_rcnt: "Letzte Dateien", - dm_savs: "Gespeicherte Voreinstellungen", + dm_savs: "Einstellungen", dm_appp: "Anwendungseinstellungen", // CAM Tool Dialog - td_tyem: "end", // end mill - td_tybm: "ball", // ball mill - td_tytm: "Kegel", // taper mill + td_tyem: "Schaftfräser", // end mill + td_tybm: "Kugelfräser", // ball mill + td_tytm: "Kegelfräser", // taper mill + td_tydr: "Bohrer", // drill td_tonm: "Werkzeug #", - td_shft: "Schafft", // endmill shaft specs - td_flut: "Spannut", // endmill flute specs - td_tapr: "Kegel", // endmill taper specs + td_shft: "Schaft", // endmill shaft specs + td_flut: "Spannut", // endmill flute specs + td_tapr: "Kegel", // endmill taper specs // DEVICE dialog groups dv_gr_dev: "Gerät", dv_gr_ext: "Extruder", - dv_gr_out: "Output", - dv_gr_gco: "GCode Macros", + dv_gr_out: "Ausgabe", + dv_gr_gco: "GCode Makros", // DEVICE dialog (_s = label, _l = hover help) dv_name_s: "Name", @@ -89,11 +119,19 @@ self.lang['de-de'] = { dv_bedd_s: "Tiefe", dv_bedd_l: "Maßeinheiten der Arbeitsfläche", dv_bedh_s: "Höhe", - dv_bedh_l: ["Maximale Objekthöhe","in Maßeinheiten der Arbeitsfläche"], + dv_bedh_l: ["Maximale Bauhöhe","in Maßeinheiten der Arbeitsfläche"], + dv_rezx_s: "Auflösung X", + dv_rezx_l: ["X-Auflösung"], + dv_rezy_s: "Auflösung Y", + dv_rezy_l: ["Y-Auflösung"], + dv_zmax_s: "Z-Achsen Geschwindigkeitslimit", + dv_zmax_l: ["Maximale Z-Achsen Geschwindigkeit","in mm/Sekunde","0 zum Deaktivieren"], + dv_time_s: "Ausgabe-Zeitfaktor", + dv_time_l: ["Modifikator für Druckzeit-Schätzungen","im GCode-Export-Dialog","Wert erhöhen oder senken basierend","auf vorhergesagten vs. beobachteten Druckzeiten"], dv_spmx_s: "Max. Spindelgeschwindigkeit", - dv_spmx_l: ["Maximale Umdrehungen pro Minute der Spindel","0 zum deaktivieren"], + dv_spmx_l: ["Maximale Spindel-RPM","0 zum Deaktivieren"], dv_xtab_s: "Absolute Positionierung", - dv_xtab_l: "Filament wird mit absoluter Positionierung extrudiert", + dv_xtab_l: "Extrusion mit absoluter Positionierung", dv_orgc_s: "Nullpunkt in der Mitte", dv_orgc_l: "Nullpunkt des Druckbetts in der Mitte", // dv_orgt_s: "origin top", @@ -101,51 +139,92 @@ self.lang['de-de'] = { dv_bedc_s: "Rundes Druckbett", dv_bedc_l: "Der Druckbereich des Gerätes ist rund", dv_belt_s: "Riemen-Druckbett", - dv_belt_l: "Für bewegliche Druckbetten", - dv_fanp_s: "Lüfter-Einstellung", - dv_fanp_l: "Wie stark der Lüfter eingestellt sein soll", - dv_prog_s: "Fortschrittsanzeige", - dv_prog_l: "Wenn für jedes % der Fertigstellung eine Nachicht angezeigt werden soll", - dv_layr_s: "Ebene", - dv_layr_l: ["Ausgabe bei jeder","neuen Ebene"], - dv_tksp_s: "Befehls-Trenner", - dv_tksp_l: ["Füge ein Leerzeichen ein bei","GCode-Achsen-Befehlen","G0X0Y0X0","oder","G0 X0 Y0 Z0"], + dv_belt_l: "Kontinuierliches Druckbett", + dv_fsrc_s: "Filamentquelle", + dv_fsrc_l: ["Wie Filament in den","Extruder eingeführt wird"], + dv_retr_s: "Firmware-Einzug", + dv_retr_l: ["Geräte-Firmware unterstützt G10/G11"], + dv_fanp_s: "Kühlung", + dv_fanp_l: "Lüfterleistung einstellen", + dv_feat_s: "Feature", + dv_feat_l: "Code für spezifische Features einfügen", + dv_prog_s: "Fortschritt", + dv_prog_l: "Ausgabe bei jedem Prozent Fortschritt", + dv_layr_s: "Schicht", + dv_layr_l: ["Ausgabe bei jedem","Schichtwechsel"], + dv_tksp_s: "Token-Trenner", + dv_tksp_l: ["Leerzeichen zwischen","GCode-Achsen-Parametern einfügen","G0X0Y0Z0","vs","G0 X0 Y0 Z0"], dv_strc_s: "Kommentare entfernen", - dv_strc_l: ["Kommentare aus GCode entfernen","Kommentare beginnen mit ;"], + dv_strc_l: ["GCode-Kommentare entfernen","Kommentare beginnen mit ;"], dv_fext_s: "Datei-Erweiterung", - dv_fext_l: "Datei-Erweiterung", + dv_fext_l: "Dateiname-Erweiterung", + dv_lazr_s: "Laser aktivieren", + dv_lazr_l: ["Laser-Operationen aktivieren"], + dv_dwll_s: "Verweilzeit", - dv_dwll_l: "gcode Verweilzeit script", - dv_tool_s: "Werkzeg-Wechel", - dv_tool_l: "Skript zum Werkzeugwechsel", - dv_sspd_s: "Spindelgeschwindigkeit", - dv_sspd_l: "Einstellung der Spindelgeschwindigkeit", + dv_dwll_l: "GCode Verweilzeit-Script", + dv_tool_s: "Werkzeug", + dv_tool_l: "Werkzeugwechsel-Script", + dv_sspd_s: "Spindel", + dv_sspd_l: "Spindelgeschwindigkeit einstellen", dv_paus_s: "Pause", - dv_paus_l: "Skript zum Ausführen bei einer Pause", - dv_head_s: "Anfang", - dv_head_l: "Skript für den Anfang einer GCode-Datei", - dv_foot_s: "Ende", - dv_foot_l: "Skript für das Ende einer GCode-Datei", + dv_paus_l: "GCode Pausen-Script", + dv_head_s: "Header", + dv_head_l: "GCode Header-Script", + dv_foot_s: "Footer", + dv_foot_l: "GCode Footer-Script", + dv_pext_s: "Außenwand", + dv_pext_l: ["GCode-Script vor dem","Drucken der Außenwände"], + dv_pint_s: "Innenwand", + dv_pint_l: ["GCode-Script vor dem","Drucken der Innenwände"], dv_lzon_s: "Laser an", - dv_lzon_l: "Skript, um den Laser einzuschalten", + dv_lzon_l: "GCode Laser-Ein-Script", dv_lzof_s: "Laser aus", - dv_lzof_l: "Skript, um den Laser auszuschalten", + dv_lzof_l: "GCode Laser-Aus-Script", + + dv_waon_s: "Wasser an", + dv_waon_l: "GCode Wasserpumpe-Ein-Script", + dv_waof_s: "Wasser aus", + dv_waof_l: "GCode Wasserpumpe-Aus-Script", + + dv_dkon_s: "Messer runter", + dv_dkon_l: "GCode Messer-Runter-Script", + dv_dkof_s: "Messer hoch", + dv_dkof_l: "GCode Messer-Hoch-Script", + dv_exts_s: "Auswählen", - dv_exts_l: "GCode, um diesen Extruder auszuwählen", + dv_exts_l: "GCode um diesen Extruder zu aktivieren", dv_dext_s: "Abwählen", - dv_dext_l: "GCode, bevor ein anderer Extruder ausgewählt wird", + dv_dext_l: "GCode vor Aktivierung eines anderen Extruders", dv_extd_s: "Deaktivieren", - dv_extd_l: "GCode, um diesen Extruder zu deaktivieren", - dv_exox_s: "X-Offset", - dv_exox_l: "X-Offset der Düse", - dv_exoy_s: "Y-Offset", - dv_exoy_l: "Y-Offset der Düse", + dv_extd_l: "GCode um diesen Extruder zu deaktivieren", + dv_exox_s: "Offset X", + dv_exox_l: "Düsen-Offset X", + dv_exoy_s: "Offset Y", + dv_exoy_l: "Düsen-Offset Y", + + dv_paid_s: "Drucker-ID", + dv_paid_l: ["Eindeutige Drucker-Kennung","kann frei gewählt werden"], + dv_paps_s: "Ping-Abstand", + dv_paps_l: ["Minimaler Filamentverbrauch","zwischen Pings in mm","empfohlen 500 - 1000","0 = Pings deaktivieren"], + dv_pafe_s: "Zufuhrlänge", + dv_pafe_l: ["Feeder-Schlauch-Länge in mm","kurz=570, mittel=800, lang=1100"], + dv_papl_s: "Vorschublänge", + dv_papl_l: ["Abstand zwischen Extruder-Zahnrad","und Düsenspitze in mm"], + dv_paof_s: "Offset-Länge", + dv_paof_l: ["Länge zum Hinzufügen oder Entfernen","vom ersten Segment in mm","normalerweise 0"], + dv_pahe_s: "Aufheizzeit", + dv_pahe_l: ["Offset vom Standard"], + dv_paco_s: "Kühlzeit", + dv_paco_l: ["Offset vom Standard"], + dv_pacm_s: "Kompressionszeit", + dv_pacm_l: ["Offset vom Standard"], // MODE - mo_menu: "Arbeits-Modus", + mo_menu: "Modus", mo_fdmp: "FDM-Druck", mo_slap: "SLA-Druck", - mo_lazr: "Laser-Cutting", + mo_lazr: "Laser-Schnitt", mo_cncm: "CNC-Fräsen", // SETUP @@ -162,20 +241,20 @@ self.lang['de-de'] = { fn_impo: "Import", // FUNCTION - fn_menu: "Modus", + fn_menu: "Aktion", fn_arra: "Anordnen", - fn_slic: "Slice", + fn_slic: "Slicen", fn_prev: "Vorschau", fn_expo: "Export", // VIEW vu_menu: "Ansicht", - vu_home: "Standard", + vu_home: "Home", vu_rset: "Zurücksetzen", vu_sptp: "Oben", - vu_spfr: "Vorn", + vu_spfr: "Vorne", vu_splt: "Links", - vu_sprt: "Ansicht", + vu_sprt: "Rechts", // WORKSPACE ws_menu: "Ansicht", @@ -185,456 +264,719 @@ self.lang['de-de'] = { // OPTIONS op_menu: "Interface", op_disp: "Anzeige", - op_xprt_s: "Fortgeschritten", - op_xprt_l: "weitere Einstellungen", - op_decl_s: "decals", - op_decl_l: "show device decals and logos", - op_dang_s: "Experimentell", - op_dang_l: "Zeige experimentelle Parameter", - op_hopo_s: "hover pop", - op_hopo_l: ["enable menu hover","to activate"], + op_xprt_s: "Experte", + op_xprt_l: "Mehr Einstellungsoptionen anzeigen", + op_decl_s: "Decals anzeigen", + op_decl_l: "Geräte-Decals und Logos anzeigen", + op_shny_s: "Detail-Rendering", + op_shny_l: "Slice-Rendering-Methode wählen, die langsamer ist und Specular-Highlighting verwendet. Dies erleichtert das Sehen von Details in einigen Modellen auf Kosten der Rendering-Geschwindigkeit", + op_devl_s: "Entwickler", + op_devl_l: ["Entwickleroptionen anzeigen","Entwickler-Debugging aktivieren"], + op_hopo_s: "Hover-Pop", + op_hopo_l: ["Menü-Hover aktivieren","zum Aktivieren"], op_dark_s: "Dunkler Modus", op_dark_l: "Dunkles Interface", op_comp_s: "Kompakt", - op_comp_l: ["Kompakte Ansicht","Besser für kleine Bildschirme","und Tablets"], + op_comp_l: ["Kompakte Benutzeroberfläche","Besser für kleine Bildschirme","und Tablets"], op_shor_s: "Nullpunkt anzeigen", - op_shor_l: "Zeige den Nullpunkt des Gerätes oder des Prozesses", - op_shru_s: "Lineal einblenden", - op_shru_l: ["Zeige Lineale mit Maßen","auf den Hauptachsen"], - op_sped_s: "Geschwindigkeiten einblenden", - op_sped_l: ["Zeige Legende für Farben und Geschwindigkeiten","in der Vorschau"], - op_auto_s: "Automatische Anordnung", - op_auto_l: ["Ordne automatisch an","wenn neue Objekte hinzugefügt werden"], - op_free_s: "Freie Anordnung", - op_free_l: ["Erlaube Freie Anordnung von Objekten","Keine Auswirkung im Laser-Cutting Arbeitsmodus"], + op_shor_l: "Geräte- oder Prozess-Nullpunkt anzeigen", + op_shru_s: "Lineale anzeigen", + op_shru_l: ["Achsen-Lineale anzeigen","auf Hauptgitterlinien"], + op_sped_s: "Geschwindigkeiten anzeigen", + op_sped_l: ["Geschwindigkeit-zu-Farbe-Leiste","im Vorschau-Modus anzeigen"], + op_auto_s: "Auto-Layout", + op_auto_l: ["Plattform automatisch anordnen","wenn neue Objekte hinzugefügt werden"], + op_free_s: "Freies Layout", + op_free_l: ["Ziehbares Layout erlauben","keine Auswirkung im Laser-Modus"], op_spcr_s: "Abstand", - op_spcr_l: ["Abstand zwischen Objekten","bei automatischer Anordnung","in Maßeinheiten der Arbeitsfläche"], - op_invr_s: "Zoom Umkehren", - op_invr_l: ["Kehre die Richtung beim Mausrad-","Zoomen um"], - op_save_s: "Automatisch speichern", - op_save_l: ["Behalte Objekte im Arbeitsbereich","wenn die Anwendung neu geladen wird"], - op_line_s: "Darstellungs-Typ", - op_line_l: ["Wie Linien bei der Darstellung der Pfade gezeichnet werden","Beeinflußt 3D-Performance","Pfad: 3D (beste)","Flach: 2d (gut)","Linie = 1d (schnell)"], - op_unit_s: "Maßeinheiten", - op_unit_l: ["die Maßeinheit des Arbeitsbereich wirkt sich auf die Darstellung von ","Geschwindigkeiten und Entfernungen aus"], + op_spcr_l: ["Abstand zwischen Objekten","während Auto-Layout","in Arbeitsbereich-Einheiten","im Riemen-Modus 0 verwenden","für Auto-Abstand nach Höhe"], + op_spoa_s: "Kantenwinkel", + op_spoa_l: ["Oberflächenwinkeldifferenz, die eine Kantenverfolgung auslöst"], + op_spcx_s: "Zufälliges X", + op_spcx_l: ["Im Riemen-Modus, zufällig","das Teil auf X platzieren","für gleichmäßigen Riemenverschleiß"], + op_orth_s: "Orthografisch", + op_orth_l: ["Orthografische Anzeige","erfordert Seitenneuladung"], + op_anta_s: "Anti-Aliasing", + op_anta_l: ["Glatte Anzeige. Besser aber langsamer","erfordert Seitenneuladung"], + op_invr_s: "Zoom umkehren", + op_invr_l: ["Mausrad-","Scroll-Zoom umkehren"], + op_save_s: "Auto-Speichern", + op_save_l: ["Objekte im Arbeitsbereich bewahren","zwischen Anwendungsneustarts"], + op_line_s: "Linientyp", + op_line_l: ["Linienstil für Pfad-Rendering","beeinflusst 3D-Performance","Pfad: 3D am besten","Flach: 2D gut","Linie = 1D schnell"], + op_unit_s: "Einheiten", + op_unit_l: ["Arbeitsbereich-Einheiten beeinflussen","Geschwindigkeiten und Distanzen"], op_anim_s: "Animieren", - op_anim_l: ["Dichte des Netzgitters beim Animieren","Je höher, desto dichter","benötigt mehr Speicher","und ist langsamer"], + op_anim_l: ["Animations-Mesh-Dichte","höher ist dichter","benötigt mehr Speicher","und ist langsamer"], + op_exgl_l: ["Grid:Local Geräte im Export-Dialog anzeigen","inkludiert Grid:Bots und OctoPrint Plugins"], + op_exgh_l: ["Legacy Grid:Host lokale Netzwerkunterstützung"], + op_exop_l: ["Legacy OctoPrint lokale Netzwerkunterstützung","Grid:Space OctoPrint Plugin empfohlen"], - lo_menu: "Anordnung", + lo_menu: "Layout", - pt_menu: "Objekte", - pt_deci_s: "Deizimierung", - pt_deci_l: ["Punktdezimierung","während des Imports. Für schnelleres Slicen","und weniger Speicherverbrauch"], - pt_qual_s: "Qualität", - pt_qual_l: ["Detailstufe beim","Slicen","geringer ist schneller"], + pt_menu: "Slicer", + pt_deci_s: "Dezimierung", + pt_deci_l: ["Punkt-Dezimierung während des Imports aktivieren oder deaktivieren. Für schnelleres Slicing und geringeren Speicherverbrauch"], + pt_qual_s: "Detail", + pt_qual_l: ["Detailstufe beim Slicing. Niedriger ist schneller und verwendet weniger Speicher. Großmaßstäbliche Modelle profitieren oft nicht von höherem Detail. Stattdessen kann es nur zu Speicher- und Verarbeitungsproblemen führen. Diesen Wert reduzieren bei Out-of-Memory-Fehlern."], pt_heal_s: "Mesh reparieren", - pt_heal_l: ["Versuche","defekte Meshes zu reparieren","wirkt sich auf die Verarbeitungszeit us"], + pt_heal_l: ["Versuche nicht-manifolde Meshes während des Slicing zu reparieren. Kann Slicing-Zeit erhöhen. Aktiviert Warnung bei Erkennung nicht-manifolder Geometrien."], + pt_thrd_s: "Threaded", + pt_thrd_l: ["Parallele Verarbeitung verwenden wenn Browser verschachtelte Worker unterstützt. Kann Speicherdruck bei größeren Modellen erhöhen. Deaktivieren bei Out-of-Memory-Fehlern"], + pt_assy_s: "Web ASM", + pt_assy_l: ["Web Assembly verwenden wenn vom Browser unterstützt. Bei Artefakten oder Speicherfehlern versuchen dies zu deaktivieren."], + pt_wgpu_s: "Web GPU", + pt_wgpu_l: ["Web GPU verwenden wenn vom Browser unterstützt. Bei Artefakten oder Speicherfehlern versuchen dies zu deaktivieren."], - xp_menu: "Export", + xp_menu: "Exporte", // SETTINGS se_menu: "Profil", se_load: "Laden", se_save: "Speichern", - // FDM SLICING + // FDM LAYERS sl_menu: "Schichten", - sl_lahi_s: "Höhe", - sl_lahi_l: ["Höhe jeder Schicht","Schichthöhe in mm"], - ad_minl_s: "Mindesthöhe", - ad_minl_l: ["Mindesthöhe für adaptive Schichthöhe","in mm","Darf nicht null sein"], - sl_ltop_s: "top layers", - sl_ltop_l: ["number of solid layers","to enforce at the","top of the print"], - sl_lsld_s: "solid layers", - sl_lsld_l: ["solid fill areas computed","from layer deltas. see","layer pop menu"], - sl_lbot_s: "base layers", - sl_lbot_l: ["Anzahl der soliden Schichten","um die Unterseite des","Drucks zu verstärken"], + sl_angl_s: "Slice-Winkel", + sl_angl_l: ["Slice-Winkel-Bias in Grad"], + sl_lahi_s: "Schichthöhe", + sl_lahi_l: ["Höhe jeder Slice-","Schicht in mm"], + ad_minl_s: "Schicht-Minimum", + ad_minl_l: ["Adaptive Min-Schichthöhe","in mm","muss ungleich null sein"], ad_adap_s: "Adaptive Höhe", - ad_adap_l: ["Verwende adaptive Schichthöhe","mit 'Maximale Höhe' als Maximum","und 'Mindesthöhe' als Minimum"], + ad_adap_l: ["Adaptive Schichthöhen verwenden","mit 'Schichthöhe' als Maximum","und 'Schicht-Minimum' als Minimum"], + sl_ltop_s: "Obere Schichten", + sl_ltop_l: ["Anzahl solider Schichten oben am Druck oder auf flachen nach oben gerichteten Bereichen"], + sl_lsld_s: "Solide Schichten", + sl_lsld_l: ["Solide Füllbereiche berechnet","aus Brücken und flachen Bereichen","erkannt zwischen Slice-Schichten"], + sl_lbot_s: "Basis-Schichten", + sl_lbot_l: ["Anzahl solider Schichten unten am Druck oder unter Brückenspannen"], + + // FDM WALLS + sw_menu: "Wände", + sl_shel_s: "Wand-Anzahl", + sl_shel_l: ["Anzahl der Perimeter-","Wände zu generieren"], + ad_thin_s: "Dünne Wände", + ad_thin_l: ["Lücken zwischen","Wänden erkennen und füllen"], // FDM SHELLS - sl_shel_s: "Anzahl Außenwände", - sl_shel_l: ["Anzahl der äußeren","Wände, die erzeugt werden sollen"], - sl_ordr_s: "Druckreihenfolge der Wände", - sl_ordr_l: ["In welcher Reihenfolge die Wände gedruckt werden","innen nach aussen","oder aussen nach innen","wirkt sich auf die Oberflächenqualität aus"], - sl_strt_s: "Start der Ebene", - sl_strt_l: ["Startpunkt der Ebene","Letzte = Ende der letzten Ebene ","Mitte = Zur Mitte des Objekts","Nullpunkt = Zum Nullpunkt des Gerätes"], - ad_thin_s: "Dünne Wände", - ad_thin_l: ["Finde und fülle schmale Lücken","zwischen Außenwänden"], + sl_line_s: "Linienbreite", + sl_line_l: ["Extrusionsbreite in mm","0 = Düsendurchmesser"], + sl_ordr_s: "Wand-Reihenfolge", + sl_ordr_l: ["Ausgabe-Wand-Reihenfolge","innen nach außen","oder außen nach innen","beeinflusst Oberflächenqualität"], + sl_strt_s: "Startpunkt", + sl_strt_l: ["Schicht-Startpunkt","Letzter = wo letzte Schicht endete","Mitte = Teilmitte","Nullpunkt = Geräte-Nullpunkt","Zufällig = YOLO"], + sl_ofin_s: "Innenwand-Offset", + sl_ofin_l: ["Innenloch-Perimeter-Offset","in mm"], + sl_ofot_s: "Außenwand-Offset", + sl_ofot_l: ["Außenwand-Perimeter-Offset","in mm"], + + // FDM SOLID + fs_menu: "Vollfüllung", + fi_over_s: "Füll-Überlappung", + fi_over_l: ["Überlappung zwischen Wänden und solider oder spärlicher Füllung. Kann Verbindung zu Wänden verbessern","als Bruchteil der Linienbreite","0.0 - 1.0"], + fi_angl_s: "Startwinkel", + fi_angl_l: ["Startwinkel in Grad","90 Grad hinzugefügt zu","jeder folgenden Schicht","gilt nur für solide Schichten"], + fi_grow_s: "Bereichserweiterung", + fi_grow_l: ["Projizierte Solids erweitern","kann bei soliden Bereichen","über spärlichen Füllbereichen helfen","Einheiten in mm"], // FDM FILL - fi_menu: "Füllmaterial", - fi_type: "Typ", - fi_pcnt_s: "Füll-Dichte", - fi_pcnt_l: ["Füll-Dichte ","0.0 - 1.0"], - fi_angl_s: "Startwinkel für volle Füllung", - fi_angl_l: ["Startwinkel in Grad","90 Grad werden ","bei jeder folgender Schicht dazugerechnet","Wirkt sich nur auf vollgefüllte Schichten aus."], - fi_over_s: "Schicht-Überlappung", - fi_over_l: ["Überlappung von Schichten und Füllung","als Anteil des Düsen-Durchmessers","0.0 - 1.0"], - // fi_rate_s: "print speed", - fi_rate_l: ["Druckgeschwindigkeit für Füllmaterial","Auf 0 setzen, um die Standard-","Druckgeschwindigkeit zu verwenden"], + fi_menu: "Spärliche Füllung", + fi_type: "Fülltyp", + fi_pcnt_s: "Füllmenge", + fi_pcnt_l: ["Fülldichte-Werte","0.0 - 1.0"], + fi_rept_s: "Füll-Wiederholung", + fi_rept_l: ["Anzahl der Wiederholungen","unveränderter Füllschichten"], + // fi_rate_s: "Druckgeschwindigkeit", + fi_rate_l: ["Extrusionsgeschwindigkeit für Füllung","auf 0 setzen um Standard-","Ausgabe-Druckgeschwindigkeiten zu verwenden"], + + // FDM HEATING + fh_menu: "Heizung", + + // FDM COOLING + fc_menu: "Kühlung", // FDM FIRST LAYER - fl_menu: "Erste Schicht", + fl_menu: "Basis", fl_lahi_s: "Schichthöhe", - fl_lahi_l: ["Höhe der ersten Schicht","in in mm","sollte >= der Standard-Schichthöhe sein"], + fl_lahi_l: ["Höhe jeder Schicht","in mm","sollte >= Slice-Höhe sein"], fl_rate_s: "Wand-Geschwindigkeit", - fl_rate_l: ["Maximalgeschwindigkeit beim Drucken von Wänden","in mm / s"], - fl_frat_s: "Füll-Geschwindikeit", - fl_frat_l: ["Maximalgeschwindikeit beim Drucken von Füllung","in mm / s"], - fl_mult_s: "Extrusions-Faktor", - fl_mult_l: ["Exktrusions-Faktor","0.0 - 2.0"], + fl_rate_l: ["Wand-Druck-Maximalgeschwindigkeit","in mm / Sekunde"], + fl_frat_s: "Füll-Geschwindigkeit", + fl_frat_l: ["Füll-Druck-Maximalgeschwindigkeit","in mm / Sekunde"], + fl_mult_s: "Flow-Faktor", + fl_mult_l: ["Extrusions-Multiplikator","0.0 - 2.0"], fl_sfac_s: "Breiten-Faktor", - fl_sfac_l: ["Multipliziert mit dem Düsenfaktor","beeinflußt die Breite der Drucklinien"], - fl_skrt_s: "Anzahl der Skirt-Linien", - fl_skrt_l: ["Wieviele Linien um die erste Schicht","herum generiert werden sollen"], - fl_skro_s: "Skirt-Abstand", - fl_skro_l: ["Abstand des Skirts vom Objekt","in mm"], - fl_nozl_s: "Drucktemperatur", - fl_nozl_l: ["in Grad Celsius","Standard-Einstellung wird verwendet","wenn auf 0 gestellt"], + fl_sfac_l: ["Multiplikator auf Düsengröße","ändert Linienabstand"], + fl_skrt_s: "Skirt-Anzahl", + fl_skrt_l: ["Anzahl der ersten Schicht Offset-","Brims zu generieren"], + fl_skro_s: "Skirt-Offset", + fl_skro_l: ["Skirt-Offset vom Teil","in mm","wenn Rafts verwendet werden","ist dies der Raft-Offset"], + fl_nozl_s: "Düsentemperatur", + fl_nozl_l: ["Grad in Celsius","Ausgabe-Einstellung verwendet","wenn dies null ist"], fl_bedd_s: "Betttemperatur", - fl_bedd_l: ["in Grad Celsius","Standard-Einstellung wird verwendet","when auf 0 gestellt"], - fr_spac_s: "Raft Abstand", - fr_spac_l: ["Zusätzlicher Abstand","zwischen erster Schicht und Raft","in mm"], - fr_nabl_s: "Raft verwenden", - fr_nabl_l: ["Erzeuge ein Raft unter dem","Objekt für bessere Betthaftung","verwendet Skirt-Abstand und","Deaktiviert die Erzeugung eines Skirt"], + fl_bedd_l: ["Grad in Celsius","Ausgabe-Einstellung verwendet","wenn dies null ist"], + fr_spac_s: "Raft-Abstand", + fr_spac_l: ["Zusätzlicher Schichtabstand","zwischen 1. Schicht und Raft","in mm"], + fr_nabl_s: "Raft aktivieren", + fr_nabl_l: ["Raft unter dem Modell","für bessere Haftung erstellen","verwendet Skirt-Offset und","deaktiviert Skirt-Ausgabe"], + fr_draf_s: "Draft-Schild", + fr_draf_l: ["Skirt auf Teilhöhe erweitern","wirkt als Schild gegen","Zugluft und fängt heiße Luft"], // FDM BELT ONLY - fl_zoff_s: "belt offset", - fl_zoff_l: ["height offset from belt","of lowest extrusion","in millimeters"], - fl_brim_s: "Größe des Brim", - fl_brim_l: ["Brim am Fuß des Objekts erzeugen","Größe in mm","0 um zu deaktivieren"], + fl_zoff_s: "Riemen-Offset", + fl_zoff_l: ["Höhen-Offset vom Riemen","der niedrigsten Extrusion","in mm"], + fl_flat_s: "Abflachen", + fl_flat_l: ["Zum Riemen jeden Punkt abflachen","mit Höhe kleiner als dieser Wert","in mm"], + fl_brim_s: "Brim-Seiten", + fl_brim_l: ["Brim zu Teil-Perimeter hinzufügen","Größe ist Breite in mm","0 zum Deaktivieren"], + fl_brin_s: "Brim-Inneres", + fl_brin_l: ["Brim zu Teil-Innerem hinzufügen","wenn innere Hohlräume existieren","Größe ist Breite in mm","0 zum Deaktivieren"], fl_brmn_s: "Brim-Auslöser", - fl_brmn_l: ["Erzeuge nur Brim, wenn die Fläche","auf dem Gurt kürzer ist als dieser Wert","Angegeben in mm","0 = Immer"], - fl_bled_s: "Objekt verankern", - fl_bled_l: ["Objekt mit dem Gurt verankern","zu Beginn des Drucks","in mm"], + fl_brmn_l: ["Brims nur hinzufügen wenn Segment","zum Riemen gerichtet kürzer ist als dies","Wert in mm","0 = Unendlich"], + fl_brco_s: "Brim-Kamm", + fl_brco_l: ["Brim-Lücken hinzufügen","alle n Linien","0 zum Deaktivieren"], + fl_brgp_s: "Brim-Abstand", + fl_brgp_l: ["Abstand zwischen Brim und Teil","in mm"], + fl_bled_s: "Teil-Anker", + fl_bled_l: ["Riemen-Teil-Anker","am Druckstart","in mm"], + fl_blmp_s: "Anker-Bump", + fl_blmp_l: ["Bump am Anfang eines Ankers hinzufügen","um Ablösen am Riemenende zu helfen","in mm"], // FDM SUPPORT - sp_menu: "Stützstrukturen", - sp_detect: "Analysieren", + sp_menu: "Stützen", + sp_detect: "Erkennen", sp_dens_s: "Dichte", - sp_dens_l: ["Anteil 0.0 - 1.0","empfohlen 0.15","0 zum deaktivieren"], - sp_size_s: "Breite der Säule", - sp_size_l: ["Breite der Säule","in mm"], - sp_offs_s: "Abstand", - sp_offs_l: ["Abstand vom Objekt","in mm"], - sp_gaps_s: "Schicht-Abstand", - sp_gaps_l: ["Anzahl der Schichten","zwischen Stützstruktur und Objekt"], - sp_span_s: "Maximale Spannbreite", - sp_span_l: ["Für Spannen über dieser Breite","werden Stützstrukturen erzeugt","in mm"], - sp_angl_s: "Maximaler Winkel", - sp_angl_l: ["Für Überhänge über diesem Winkel","werden Stützstrukturen erzeugt"], - sp_area_s: "Mindestfläche", - sp_area_l: ["Mindestfläche für","Eine Stützsäule","in mm"], - sp_xpnd_s: "Ausdehung", - sp_xpnd_l: ["Dehne die Stützstruktur","über die Objekt-Grenzen aus","in mm"], + sp_dens_l: ["Bruchteil 0.0 - 1.0","empfohlen 0.15","0 zum Deaktivieren"], + sp_size_s: "Säulengröße", + sp_size_l: ["Säulenbreite in mm","kleinere Werte erhöhen","Erkennungszeiten exponentiell"], + sp_offs_s: "Teil-Offset", + sp_offs_l: ["Offset vom Teil","in mm"], + sp_gaps_s: "Lücken-Schichten", + sp_gaps_l: ["Anzahl der Schichten","Offset vom Teil"], + sp_span_s: "Max. Spanne", + sp_span_l: ["Nicht unterstützte Spanne die","eine neue Stütze generiert","in mm"], + sp_angl_s: "Max. Winkel", + sp_angl_l: ["Max. Überhangwinkel bevor","Stützsäule generiert wird","normale Werte 45-60","Riemen-Werte 0-10"], + sp_area_s: "Min. Fläche", + sp_area_l: ["Minimale Fläche für","eine Stützsäule","in mm","kleinere Werte werden","Erkennung verlangsamen"], + sp_xpnd_s: "Erweitern", + sp_xpnd_l: ["Stützbereich über","Teil-Grenze hinaus erweitern","in mm"], + sp_grow_s: "Wachsen", + sp_grow_l: ["Stützsäule wachsen lassen um kleine Lücken zu füllen","in mm"], sp_nozl_s: "Extruder", - sp_nozl_l: ["In Geräten mit mehreren Extrudern","welcher Extruder wird für","Stützmaterial verwendet"], + sp_nozl_l: ["In Multi-Extruder-Systemen","der Extruder für","Stützmaterial"], + sp_outl_s: "Eingeschlossen", + sp_outl_l: ["Stützmuster in","Perimeter-Wand einschließen"], sp_auto_s: "Automatisch", - sp_auto_l: ["Erzeuge Stützstrukturen automatisch","beim Slicen","Stützstruktuen werden erst","Nach dem Slicen angezeigt"], - - // LASER SLICING - ls_offs_s: "Abstand", - ls_offs_l: ["Anpassung for Strahlbreite","in millimeters"], - ls_lahi_s: "Höhe", - ls_lahi_l: ["Schichthöhe","in mm","0 = auto/erkennen"], - ls_lahm_s: "min", - ls_lahm_l: ["Minimale Schichthöhe","Autoslices unter dieser Höhe","werden zusammengeführt","in millimeters"], - ls_sngl_s: "Einfach", - ls_sngl_l: ["Nur einen Slice bei","angegebener Schichthöhe ausführen"], + sp_auto_l: ["Generierte Stützen aktivieren","mit At-Slice-Time-Geometrie","Stützen erscheinen nur","nach Slice-Abschluss"], // CNC COMMON terms cc_tool: "Werkzeug", - cc_offs_s: "Versatz", - cc_offs_l: ["Versatz tool center","from chosen path"], - cc_spnd_s: "spindle rpm", - cc_spnd_l: ["spindle speed in","revolutions / minute"], - cc_sovr_s: "step over", - cc_sovr_l: ["as a fraction of","tool durchmesser"], - cc_sdwn_s: "step down", - cc_sdwn_l: ["step down depth","for each pass","in workspace units","0 to disable"], - cc_feed_s: "feed rate", - cc_feed_l: ["max cutting speed in","workspace units / minute"], - cc_plng_s: "plunge rate", - cc_plng_l: ["max z axis speed in","workspace units / minute"], - cc_sngl_s: "select lines only", - cc_sngl_l: ["select only single edges","instead of connected polylines"], + cc_offs_s: "Offset", + cc_offs_l: ["Werkzeugmitte offsetieren","vom gewählten Pfad"], + cc_spnd_s: "Spindel-RPM", + cc_spnd_l: ["Spindelgeschwindigkeit in","Umdrehungen / Minute"], + cc_sovr_s: "Überfahrt", + cc_sovr_l: ["Ein Bruchteil des Werkzeugdurchmessers zwischen 0 und 1. Werte größer als 0.49 können zu ungeschnittenen Bereichen oder unerwünschten Artefakten führen."], + cc_sovc_s: "Breite Schritte", + cc_sovc_l: ["Anzahl breiter Ausschnitt-Schritte"], + cc_sang_s: "Schritt-Winkel", + cc_sang_l: ["Rotation in Grad zwischen Drehbank-Axialpunkten"], + cc_sdwn_s: "Zustellung", + cc_sdwn_l: ["Zustelltiefe","für jeden Durchgang","in Arbeitsbereich-Einheiten","0 zum Deaktivieren"], + cc_thru_s: "Durchschneiden", + cc_thru_l: ["Zusätzliche Schnitttiefe unter Spurende"], + cc_offd_s: "Offset", + cc_offd_l: ["Überschreibt Standard-Offset-Distanz (Werkzeugradius) wenn auf einen Wert ungleich null gesetzt"], + cc_feed_s: "Vorschubrate", + cc_feed_l: ["Max. Schnittgeschwindigkeit in","Arbeitsbereich-Einheiten / Minute"], + cc_plng_s: "Eintauchrate", + cc_plng_l: ["Max. Z-Achsen-Geschwindigkeit in","Arbeitsbereich-Einheiten / Minute"], + cc_sngl_s: "Nur Linien auswählen", + cc_sngl_l: ["Nur einzelne Kanten auswählen","statt verbundene Polylinien"], + cc_sele_s: "Auswählen", + cc_sele_l: ["Linien für Folgen auswählen","Schleifen für Räumen auswählen","Oberfläche für Tasche auswählen"], // CNC COMMON - cc_menu: "Begrenzungen", - cc_flip: "Umdrehen", - cc_rapd_s: "xy feed", - cc_rapd_l: ["max xy moves feedrate","in workspace units / minute"], - cc_rzpd_s: "z feed", - cc_rzpd_l: ["max z moves feedrate","in workspace units / minute"], + cc_menu: "Grenzen", + cc_rapd_s: "XY-Vorschub", + cc_rapd_l: ["Max. XY-Bewegungs-Vorschubrate","in Arbeitsbereich-Einheiten / Minute"], + cc_rzpd_s: "Z-Vorschub", + cc_rzpd_l: ["Max. Z-Bewegungs-Vorschubrate","in Arbeitsbereich-Einheiten / Minute"], - cc_loff_s: "Versatz", - cc_loff_l: ["distance from stock face","for leveling pass","in workspace units"], + // CNC LEVELING + cc_loff_s: "Z-Offset", + cc_loff_l: ["Distanz von Rohteil-Oberfläche","in Arbeitsbereich-Einheiten"], + cc_lxyo_s: "XY-Offset", + cc_lxyo_l: ["XY-Offset von Teil-Grenze als Bruchteil des Werkzeugdurchmessers (0 - 1.0)"], + cc_lsto_s: "Rohteil", + cc_lsto_l: ["Rohteil-Bereich statt Teil-Bereich verwenden"], // CNC ROUGHING - cr_menu: "rough", - cr_lsto_s: "leave stock", - cr_lsto_l: ["horizontal Versatz from vertical faces","stock to leave for finishing pass","in workspace units"], - cr_ease_s: "ease down", - cr_ease_l: ["plunge cuts will","spiral down or ease","along a linear path"], - cr_clrt_s: "clear top", - cr_clrt_l: ["run a clearing pass over","the bounding area of the part","at z = 0"], - cr_clrp_s: "clear voids", - cr_clrp_l: ["mill out through pockets","instead of just the outline"], - cr_clrf_s: "clear faces", - cr_clrf_l: ["interpolate step down to","clear any detected flat areas"], - cr_olin_s: "inside only", - cr_olin_l: ["limit cutting to","inside part boundaries"], + cr_menu: "Schruppen", + cr_lsto_s: "Aufmaß lassen", + cr_lsto_l: ["Horizontaler Offset von vertikalen Flächen","Aufmaß für Schlichtdurchgang","in Arbeitsbereich-Einheiten"], + cr_lstz_s: "Aufmaß Z lassen", + cr_lstz_l: ["Vertikaler Offset für Schrupp-Durchgänge in Arbeitsbereich-Einheiten. Am besten für Schruppen gekrümmter Oberflächen."], + cr_ease_s: "Sanft eintauchen", + cr_ease_l: ["Tauchschnitte werden","spiralförmig eintauchen oder sanft","entlang linearem Pfad"], + cr_clst_s: "Rohteil räumen", + cr_clst_l: ["Im indexierten Modus, gesamten Rohteil-Bereich räumen, nicht nur bis Teil-Perimeter"], + cr_clrt_s: "Oberseite räumen", + cr_clrt_l: ["Räumdurchgang über","Begrenzungsbereich des Teils","bei Z = 0 ausführen"], + cr_clrp_s: "Hohlräume räumen", + cr_clrp_l: ["Durch Taschen fräsen","statt nur Umriss"], + cr_clrf_s: "Flächen räumen", + cr_clrf_l: ["Zustellung interpolieren um","erkannte flache Bereiche zu räumen"], + cr_olin_s: "Nur innen", + cr_olin_l: ["Schneiden auf","Innenseite der Teil-Grenzen beschränken"], // CNC OUTLINE - co_menu: "outline", - co_dogb_s: "dogbones", - co_dogb_l: ["insert dogbone cuts","into inside corners"], - co_wide_s: "wide cutout", - co_wide_l: ["widen outside cutout paths","for deep cuts in hard material"], - co_olin_s: "inside only", - co_olin_l: ["limit cutting to","inside part boundaries"], - co_olot_s: "outside only", - co_olot_l: ["limit cutting to","exterior part boundaries","which can be thought of","as the shadow outline"], - co_omit_s: "omit through", - co_omit_l: "eliminate thru holes", - co_olen_s: "enable", - co_olen_l: "enabled outline cutting", + co_menu: "Umriss", + co_merg_s: "Überlappung zusammenführen", + co_merg_l: ["Überlappende Linien zusammenführen um Überschneiden in benachbarte Solids zu verhindern"], + co_dogb_s: "Dogbones", + co_dogb_l: ["Dogbone-Schnitte","in Innenecken einfügen"], + co_dogr_s: "Bones umkehren", + co_dogr_l: ["Dogbone-Richtung umkehren"], + co_clrt_s: "Oberseite räumen", + co_clrt_l: ["Schnitt ab Rohteil-Oberseite","wenn Rohteil aktiviert ist"], + co_wide_s: "Breiter Ausschnitt", + co_wide_l: ["Außen-Ausschnitt-Pfade verbreitern","für tiefe Schnitte in hartem Material"], + co_olin_s: "Nur innen", + co_olin_l: ["Schneiden auf","Innenseite der Teil-Grenzen beschränken"], + co_olot_s: "Nur außen", + co_olot_l: ["Schneiden auf","Außenseite der Teil-Grenzen beschränken","kann als","Schatten-Umriss betrachtet werden"], + co_omit_s: "Durchgangslöcher weglassen", + co_omit_l: "Durchgangslöcher eliminieren", + co_omvd_s: "Tasche weglassen", + co_omvd_l: "Innentaschen eliminieren", + co_olen_s: "Aktivieren", + co_olen_l: "Umriss-Schneiden aktiviert", // CNC CONTOUR - cn_menu: "contour", - cf_angl_s: "max angle", - cf_angl_l: ["angles greater than this","are considered vertical"], - cf_curv_s: "curves only", - cf_curv_l: ["limit linear cleanup","to curved surfaces"], - cf_olin_s: "inside only", - cf_olin_l: ["limit cutting to","inside part boundaries"], - cf_linx_s: "enable y pass", - cf_linx_l: "linear y-axis finishing", - cf_liny_s: "enable x pass", - cf_liny_l: "linear x-axis finishing", + cn_menu: "Kontur", + cf_angl_s: "Max. Winkel", + cf_angl_l: ["Änderungen in Z die zu Winkeln größer als dies führen werden als vertikal betrachtet und von Kurven weggelassen"], + cf_leav_s: "Aufmaß lassen", + cf_leav_l: ["Aufmaß über Teil-Oberfläche zu lassen"], + cf_botm_s: "Z unten", + cf_botm_l: ["Z-Untergrenze einhalten"], + cf_curv_s: "Nur Kurven", + cf_curv_l: ["Lineare Bereinigung","auf gekrümmte Oberflächen beschränken"], + cf_olin_s: "Nur innen", + cf_olin_l: ["Schneiden auf","Innenseite der Teil-Grenzen beschränken"], + cf_linx_s: "Y-Durchgang aktivieren", + cf_linx_l: "Lineares Y-Achsen-Schlichten", + cf_liny_s: "X-Durchgang aktivieren", + cf_liny_l: "Lineares X-Achsen-Schlichten", // CNC TRACE - cu_menu: "trace", + cu_menu: "Spur", cu_type_s: "Typ", - cu_type_l: ["follow = tool tip follows line","right or left = tool tip","follows line offset by tool radius"], + cu_type_l: ["Räumen = geschlossene Linie Tasche räumen","Folgen = Werkzeugspitze folgt Linie","mit Offset-Option wenn geschlossen"], + + // CNC POCKET + cp_xpnd_s: "Erweitern", + cp_xpnd_l: ["Ausgewählte Bereiche vergrößern (+) oder verkleinern (-)","Kontur verwendet gesamten ausgewählten Bereich","Nicht-Kontur verwendet standardmäßig Werkzeugradius","in Arbeitsbereich-Einheiten"], + cp_smoo_s: "Glätten", + cp_smoo_l: ["Gezackte Kanten durch abgewinkelte Wände bereinigen. Kann Beschleunigung und Verbesserung des Taschenfräsens für detaillierte Geometrien. Empfehlung mit Werten um 1 zu starten wenn Slicing zu lange dauert oder Konturen gezackt aussehen"], + cp_foll_s: "Auswahl", + cp_foll_l: ["Krümmungs-Auswahl-Grenze in Grad. Werte näher bei 0 beschränken Auswahlen auf flachere Oberflächen"], + cp_refi_s: "Verfeinern", + cp_refi_l: ["Anzahl der Verfeinerungs-Durchgänge auf konturierten Polylinien. Gedacht für Z-Delta-Sägezahn-Adressierung durch Flächen-Geometrien während Glätten XY behandelt. Werte > 10 funktionieren gut für sanft konturierte Geometrien mit signifikanter Z-Bewegung."], + cp_cont_s: "Kontur", + cp_cont_l: ["Innere Hohlräume und Features ignorieren"], + cp_engr_s: "Gravieren", + cp_engr_l: ["Richtet einzelnen Durchgang um Perimeter des ausgewählten Bereichs ein. Auch nützlich für 3D-Laser-Markierung"], + cp_outl_s: "Nur Umriss", + cp_outl_l: ["Innere Hohlräume und Features ignorieren"], // CNC DRILLING - cd_menu: "drill", - cd_axis: "axis", + cd_menu: "Bohren", + cd_axis: "Achse", cd_points: "Punkte", - cd_plpr_s: "plunge per", - cd_plpr_l: ["max plunge between","dwell periods","in workspace units","0 to disable"], + // cd_plpr_s: "plunge per", + // cd_plpr_l: ["max plunge between","dwell periods","in workspace units","0 to disable"], cd_dwll_s: "Verweilzeit", - cd_dwll_l: ["Verweilzeit","between plunges in","in milliseconds"], - cd_lift_s: "drill lift", - cd_lift_l: ["lift between plunges","after dwell period","in workspace units","0 to disable"], - cd_regi_s: "register", - cd_regi_l: ["drill registration holes","for double-sided parts","independent of enable","drilling but uses same","tool and settings"], + cd_dwll_l: ["Verweilzeit","zwischen Eintauchvorgängen","in Millisekunden"], + cd_lift_s: "Bohrer-Anhebung", + cd_lift_l: ["Anhebung zwischen Eintauchvorgängen","nach Verweilperiode","in Arbeitsbereich-Einheiten","0 zum Deaktivieren"], + cd_thru_s: "Z-Erweiterung", + cd_thru_l: ["Abwärts-Schnitt durch Rohteil erweitern","in Arbeitsbereich-Einheiten"], + cd_dtru_s: "Durchbohren", + cd_dtru_l: ["Zusätzliche Bohrtiefe unter Teil-Unterseite","überschreibt globales Z durch","0 zum Deaktivieren"], + cd_mark_s: "Markieren", + cd_mark_l: ["Nur Löcher markieren, nicht ausbohren","Zustellungs-Einstellung wird verwendet","um zu bestimmen wie tief zu markieren"], + cd_ftop_s: "Von Rohteil-Oberseite", + cd_ftop_l: ["Von Rohteil-Oberseite bohren","statt von Teil-Oberfläche"], + cd_prcn_s: "Präzision", + cd_prcn_l: ["Distanz zwischen Slices","um nach Löchern zu suchen","in Arbeitsbereich-Einheiten","niedriger ist langsamer und","verwendet mehr Speicher","0 = nur Ebenen"], + + cd_seli_l: ["Löcher individuell auswählen","zum Bohren"], + cd_sela_s: "Passenden Durchmesser auswählen", + cd_sela_l: ["Alle Löcher auswählen die", "zum ausgewählten Werkzeugdurchmesser passen"], + + //CNC Registration + cd_regi_s: "Registrieren", + cd_regi_l: ["Registrierungslöcher bohren","für doppelseitige Teile","unabhängig von Aktivierung","des Bohrens aber verwendet gleiche","Werkzeuge und Einstellungen"], + cd_rego_s: "Teil-Offset", + cd_rego_l: ["Offset der Lochmitte","von Teil-Begrenzungsbox","in Arbeitsbereich-Einheiten"], + + // CNC HELICAL toolpath + ch_menu: "Helikal", + ch_sdwn_s: "Zustellung (Steigung)", + ch_sdwn_l: ["Z-Distanz","pro Umdrehung","in Arbeitsbereich-Einheiten","(Kehrwert von Gewinde pro Einheit)", "0 zum Deaktivieren"], + ch_fsta_s: "Startwinkel erzwingen", + ch_fsta_l: ["Startwinkel überschreiben","standardmäßig nächster Punkt zum Werkzeug"], + ch_stra_s: "Startwinkel", + ch_stra_l: ["Startwinkel der Helix","in Grad gegen Uhrzeigersinn von +X-Achse"], + ch_selc_l: ["Zylinder-Fläche auswählen", "zu kleine Innenlöcher","werden ignoriert."], + ch_fini_s: "Unterer Schlichtdurchgang", + ch_fini_l: ["Kreis am Helix-Ende nachfahren","verwendet für Loch-Räumen"], + ch_entr_s: "Von Mitte eintreten", + ch_entr_l: ["Schnitt von Zylinder-Mitte starten","sanft horizontal einbogend", "statt Eintauchen"], + ch_ento_s: "Mitte Eintritts-Offset", + ch_ento_l: ["Offset vom Pfad für gekrümmten Eintritt","normalerweise Gewindetiefe beim Gewindefräsen","in Arbeitsbereich-Einheiten","0 für linearen Eintritt"], + ch_rvrs_s: "Umkehren", + ch_rvrs_l: ["Helikale Z-Achsen-Richtung umkehren","niedriges-Z zu hohes-Z wenn angehakt","nützlich für Gewindefräsen","nicht empfohlen für andere Operationen"], + ch_clkw_s: "Im Uhrzeigersinn", + ch_clkw_l: ["Helikale Rotation um Zylinder umkehren","im Uhrzeigersinn wenn angehakt"], + + // CNC FLIP + cf_menu: "Wenden", + cf_nvrt_s: "Z unten", + cf_nvrt_l: "Z-Untereinstellung umkehren um Rohteil zu folgen", + + // CNC INDEX AXIS + ci_degr_s: "Grad", + ci_degr_l: "Grad um die A (indexierte) Achse zu rotieren", + ci_abso_s: "Absolut", + ci_abso_l: "Grad-Rotation ist absolut", + ci_face_s: "Fläche", + ci_face_l: "Fläche auswählen um nach oben zu rotieren", + ci_line_s: "Linear", + ci_line_l: "Lineare Durchgänge entlang X dann Y rotieren", + ci_laso_s: "Offset Start", + ci_laso_l: ["X-Offset von links des Teils. Negative Werte sind außerhalb des Teils. In Arbeitsbereich-Einheiten"], + ci_laeo_s: "Offset Ende", + ci_laeo_l: ["X-Offset von rechts des Teils. Negative Werte sind außerhalb des Teils. In Arbeitsbereich-Einheiten"], + + // CNC LASER On/Off Operations (Carvera) + cl_powr_s: "Leistung", + cl_powr_l: "Laserleistung von 0 bis 1.0", + cl_adap_s: "Adaptiv", + cl_adap_l: "Adaptive Leistung basierend auf Z-Höhe verwenden", + cl_adrp_s: "Wiederholend", + cl_adrp_l: "Modulo der Z-Höhe mit gegebenem Band anwenden um wiederholende Muster zu erzeugen", + cl_flat_s: "Abflachen", + cl_flat_l: "Ausgabe auf gegebene Z-Höhe abflachen", + cl_flaz_s: "Flach-Höhe", + cl_flaz_l: ["Ausgabe auf diese Z-Höhe abflachen", "in Arbeitsbereich-Einheiten"], + cl_minp_s: "Z Min-Leistung", + cl_minp_l: ["Leistungs-Einstellung am niedrigsten Teil des Z-Bands. Kann höher oder niedriger als das andere Ende des Z-Bands sein."], + cl_maxp_s: "Z Max-Leistung", + cl_maxp_l: ["Leistungs-Einstellung am höchsten Teil des Z-Bands. Kann höher oder niedriger als das andere Ende des Z-Bands sein."], + cl_minz_s: "Min Z-Höhe", + cl_minz_l: ["Niedrigste Z-Band-Position"], + cl_maxz_s: "Max Z-Höhe", + cl_maxz_l: ["Höchste Z-Band-Position. Wenn auf 0 gesetzt, verwendet höchsten Z-Punkt des Arbeitsbereichs"], // CNC CUTOUT TABS - ct_menu: "Fräslasche", - ct_angl_s: "angle", - ct_angl_l: ["starting angle for tab spacing","in degrees (0-360)"], - ct_numb_s: "count", - ct_numb_l: ["number of tabs to use","will be spaced evenly","around the part"], + ct_menu: "Haltestege", + ct_angl_s: "Winkel", + ct_angl_l: ["Startwinkel für Haltesteg-Abstand","in Grad (0-360)"], + ct_numb_s: "Anzahl", + ct_numb_l: ["Anzahl zu verwendender Haltestege","werden gleichmäßig verteilt","um das Teil"], ct_wdth_s: "Breite", - ct_wdth_l: "width in workspace units", + ct_wdth_l: "Breite in Arbeitsbereich-Einheiten", ct_hght_s: "Höhe", - ct_hght_l: "height in workspace units", + ct_hght_l: "Höhe in Arbeitsbereich-Einheiten", ct_dpth_s: "Tiefe", - ct_dpth_l: ["distance in workspace units","that the tab projects from","the part surface"], + ct_dpth_l: ["Distanz in Arbeitsbereich-Einheiten","die der Haltesteg von","der Teil-Oberfläche absteht"], ct_midl_s: "Mittellinie", - ct_midl_l: ["use midline of tab","instead of z bottom","for double-sided work"], - ct_nabl_s: "auto", - ct_nabl_l: ["auto generate radial tabs","projected from part center","using count and angle offset"], + ct_midl_l: ["Mittellinie des Haltestegs verwenden","statt Z unten","für doppelseitige Arbeit"], + ct_nabl_s: "Auto", + ct_nabl_l: ["Radiale Haltestege automatisch generieren","projiziert von Teil-Mitte","mit Anzahl und Winkel-Offset"], // OUTPUT - ou_menu: "output", + ou_menu: "Ausgabe", + + // LASER SLICING + ls_offs_s: "Offset / Schnittbreite", + ls_offs_l: ["Distanz zwischen Mitte des Schnitt-","Pfads und Kante des verbleibenden Materials","in mm"], + ls_lahi_s: "Slice-Höhe", + ls_lahi_l: ["Schichthöhe","in mm","0 = auto/erkennen"], + ls_lahm_s: "Slice-Minimum", + ls_lahm_l: ["Schichthöhe Minimum","wird Auto-Slices","unter dieser Dicke zusammenführen","in mm"], + ls_sngl_s: "Einzelner Slice", + ls_sngl_l: ["Nur einen Slice ausführen","bei angegebener Schichthöhe"], // LASER KNIFE - dk_menu: "knife", - dk_dpth_s: "cut depth", - dk_dpth_l: ["final cut depth","in millimeters"], - dk_pass_s: "cut passes", - dk_pass_l: ["number of passes","down to cut depth"], - dk_offs_s: "Spitze Versatz", - dk_offs_l: ["distance from blade tip","to center of tool","in millimeters"], + dk_menu: "Zugmesser", + dk_dpth_s: "Schnitttiefe", + dk_dpth_l: ["Finale Schnitttiefe","in mm"], + dk_pass_s: "Schnitt-Durchgänge", + dk_pass_l: ["Anzahl der Durchgänge","bis zur Schnitttiefe"], + dk_offs_s: "Spitzen-Offset", + dk_offs_l: ["Distanz von Klingenspitze","zu Werkzeugmitte","in mm"], - // OUTPUT LASER - ou_spac_s: "spacing", - ou_spac_l: ["distance between layer output","in millimeters"], - ou_scal_s: "scaling", - ou_scal_l: "multiplier (0.1 to 100)", - ou_powr_s: "power", - ou_powr_l: ["0 - 100","represents %"], - ou_sped_s: "speed", - ou_sped_l: "millimeters / seconds", - ou_mrgd_s: "merged", - ou_mrgd_l: ["merge all layers using","color coding to denote","stacking depth"], - ou_grpd_s: "grouped", - ou_grpd_l: ["retain each layer as","a unified grouping","instead of separated","polygons"], - ou_layr_s: "layer order", - ou_layr_l: ["output layer order","from top right to","bottom left"], - ou_layo_s: "layer color", - ou_layo_l: ["output layer colors","for each z index","overridden by merged"], - ou_drkn_s: "drag knife", - ou_drkn_l: ["enable drag knife","output in gcode","cut radii are added","to corners with","cut down passes"], + // WIRE EDM + we_omit_s: "Inneres weglassen", + we_omit_l: "Innere Polygone weglassen", + + // LASER OUTPUT + ou_spac_s: "Abstand", + ou_spac_l: ["Distanz zwischen Schicht-Ausgabe","in mm"], + ou_scal_s: "Skalierung", + ou_scal_l: "Multiplikator (0.1 bis 100)", + ou_powr_s: "Leistung", + ou_powr_l: ["0 - 100","repräsentiert %"], + ou_sped_s: "Geschwindigkeit", + ou_sped_l: "mm / Sekunde", + ou_mrgd_s: "Zusammengeführt", + ou_mrgd_l: ["Alle Schichten zusammenführen mit","Farbcodierung um","Stapeltiefe anzuzeigen"], + ou_grpd_s: "Gruppiert", + ou_grpd_l: ["Jede Schicht als","einheitliche Gruppierung behalten","statt getrennte","Polygone"], + ou_layr_s: "Schicht-Reihenfolge", + ou_layr_l: ["Ausgabe-Schicht-Reihenfolge","von oben rechts zu","unten links"], + ou_layo_s: "Schicht-Farbe", + ou_layo_l: ["Ausgabe-Schicht-Farben","für jeden Z-Index","überschrieben durch zusammengeführt"], + ou_lays_s: "Schicht-Markierung", + ou_lays_l: ["Schichten für Stapelung markieren. Die obere Schicht wird in anderer Farbe ausgegeben die der Laser mit niedrigerer Leistung markieren kann. Schaltet Schicht-Gruppierung ein."], + ou_drkn_s: "Zugmesser", + ou_drkn_l: ["Zugmesser-Ausgabe","in GCode aktivieren","Schnitt-Radien werden hinzugefügt","zu Ecken mit","Schnitt-Abwärts-Durchgängen"], + ou_stak_s: "3D-Stapel", + ou_stak_l: ["Ausgabe ist ein 3D-Stapel von 2D-Pfaden statt Packen von Schichten flach in 2D"], + ou_maxp_s: "Max. Leistung", + ou_maxp_l: ["Max. Leistungswert im GCode. Leistungs-% von Einstellungen wird von 0 bis zu diesem Wert skaliert"], + ou_inch_s: "Imperial", + ou_inch_l: ["Ausgabewerte in Zoll"], + ou_shap_s: "Shaper-Werkzeug", + ou_shap_l: ["SVG mit Shaper Tool benutzerdefinierten Attributen annotieren"], // OUTPUT FDM - ou_nozl_s: "Drucktemperatur", - ou_nozl_l: "In Grad Celsius", + ou_nozl_s: "Düsentemperatur", + ou_nozl_l: "Grad in Celsius", ou_bedd_s: "Betttemperatur", - ou_bedd_l: "In Grad Celsius", + ou_bedd_l: "Grad in Celsius", ou_feed_s: "Druckgeschwindigkeit", - ou_feed_l: ["Maximale Druckgeschwindigkeit","mm / s"], - ou_fini_s: "Außengeschwindigkeit", - ou_fini_l: ["Geschwindigkeit für Außenwände","mm / s"], + ou_feed_l: ["Max. Druckgeschwindigkeit","auf 0 setzen um Standard zu verwenden","mm / Sekunde"], + ou_fini_s: "Schlicht-Geschwindigkeit", + ou_fini_l: ["Äußerste Wand-Geschwindigkeit","Brücke/flache solide Schichten","auf 0 setzen um Standard zu verwenden","mm / Sekunde"], ou_move_s: "Bewegungsgeschwindigkeit", - ou_move_l: ["Geschwindigkeit, wenn nicht gedruckt wird ","mm / s","0 = aktiviere G0 Befehle"], + ou_move_l: ["Nicht-Druck-Bewegungsgeschwindigkeit","mm / Sekunde","0 = G0-Bewegungen aktivieren"], ou_shml_s: "Wand-Faktor", - ou_flml_s: "Voll-Füll-Faktor", - ou_spml_s: "Füll-Material-Faktor", + ou_flml_s: "Solid-Faktor", + ou_spml_s: "Füll-Faktor", ou_exml_l: ["Extrusions-Multiplikator","0.0 - 2.0"], - ou_fans_s: "Geschwindigkeit der Bauteilkühlung", + ou_fanl_s: "Lüfter bei Schicht", + ou_fanl_l: ["Schicht-# um Lüfter einzuschalten","Schichten starten bei 0"], + ou_fans_s: "Lüfter-Ein-Geschwindigkeit", ou_fans_l: "0 - 255", + ou_layt_s: "Min. Schichtzeit", + ou_layt_l: ["Minimal erlaubte Schicht-Druckzeit in Sekunden. Druck wird verlangsamt wenn die Schicht sonst in weniger Sekunden fertig wäre.","0 = deaktiviert"], // OUTPUT CAM - ou_toll_s: "tolerance", - ou_toll_l: ["surface precision","in workspace units","lower is slower and","uses more memory","0 = automatic based","on animate preference"], - ou_zanc_s: "z anchor", - ou_zanc_l: ["controls the position of the part","when stock Z exceeds part Z"], - ou_ztof_s: "z offset", - ou_ztof_l: ["offset z anchor","in workspace units","has no effect when","anchor is middle"], - ou_zbot_s: "z bottom", - ou_zbot_l: ["offset from part bottom","to limit cutting depth","in workspace units"], - ou_zclr_s: "z clearance", - ou_zclr_l: ["safe travel offset","from top of part","in workspace units"], - ou_ztru_s: "z thru", - ou_ztru_l: ["extend cutout pass down","in workspace units"], - ou_conv_s: "Gegenlauffräsen", - ou_conv_l: ["milling direction","uncheck for 'climb'"], - ou_depf_s: "depth first", - ou_depf_l: ["optimize pocket cuts","with depth priority"], + ou_toll_s: "Präzision", + ou_toll_l: ["Oberflächenpräzision","in Arbeitsbereich-Einheiten","niedriger ist langsamer und","verwendet mehr Speicher","0 = automatisch basierend","auf Animations-Präferenz"], + ou_flat_s: "Ebenheit", + ou_flat_l: ["Delta Z unter dem zwei benachbarte Punkte als kollinear betrachtet werden. 0 = berechnen mit Toleranz"], + ou_redu_s: "Reduktion", + ou_redu_l: ["Anzahl der Achsen-Schritte zu überspringen für jede Präzisions-Einheit. Höhere Präzision kann Reduktion erfordern um vernünftige Dateigrößen zu produzieren. Bei 0 starten und in 1er-Schritten testen."], + ou_brdg_s: "Überbrücken", + ou_brdg_l: ["Flache Distanz zwischen gekrümmten","Bereichen zu überbrücken mit einem Schnitt"], + ou_zanc_s: "Z-Anker", + ou_zanc_l: ["Kontrolliert Position des Teils","wenn Rohteil-Z Teil-Z übersteigt"], + ou_ztof_s: "Z-Offset", + ou_ztof_l: ["Z-Anker offsetieren","in Arbeitsbereich-Einheiten"], + ou_ztop_s: "Z oben", + ou_ztop_l: ["Offset von Rohteil-Unterseite","um Start der Schnitttiefe zu setzen","in Arbeitsbereich-Einheiten","* Bohren/Kontur ignorieren dies *"], + ou_zbot_s: "Z unten", + ou_zbot_l: ["Offset von Rohteil-Unterseite","um Schnitttiefe zu begrenzen","in Arbeitsbereich-Einheiten"], + ou_zclr_s: "Z-Freiraum", + ou_zclr_l: ["Sicherer Fahrt-Offset","von Teil-Oberseite","in Arbeitsbereich-Einheiten"], + ou_ztru_s: "Z durch", + ou_ztru_l: ["Ausschnitt-Durchgang nach unten erweitern","in Arbeitsbereich-Einheiten"], + ou_conv_s: "Konventionell", + ou_conv_l: ["Fräsrichtung","abwählen für 'Gleichlauf'"], + ou_depf_s: "Tiefe zuerst", + ou_depf_l: ["Taschen-Schnitte optimieren","mit Tiefen-Priorität"], + ou_inrf_s: "Innen zuerst", + ou_inrf_l: ["Immer von innen nach außen schneiden"], + ou_toin_s: "Werkzeug-Init", + ou_toin_l: "Werkzeugwechsel mit erster Operation hinzufügen. Wenn deaktiviert, nimmt der GCode an dass das erste Werkzeug geladen und Offset gemessen ist", + ou_forz_s: "Z Max erzwingen", + ou_forz_l: "Alle Bewegungen zwischen Taschen gehen zu Z Max (über Rohteil). Dies ist normalerweise erforderlich wenn keine Schrupp-Operation vor Taschen-Operationen ausgeführt wird.", + ou_z1st_s: "Erste Z Max", + ou_z1st_l: "Erste Bewegung im Job wird zu Z Max sein (Fahrdistanz über Rohteil)", + ou_feng_s: "Eingriffs-Faktor", + ou_feng_l: "Geschwindigkeits-Skalierung (0.1-1) wenn Schaftfräser voll in neuem Schnitt eingreift. Überfahrts-Schnitte wenn Schaftfräser weniger als voll eingreift laufen mit Faktor 1 relativ zur Ausgabe-Geschwindigkeit. Typischerweise bezieht sich dies auf Schruppen oder jede Operation mit Überfahrt.", + ou_eang_s: "Sanft-Winkel", + ou_eang_l: "Abstiegs-Winkel für sanftes Eintauchen in Grad", // CAM STOCK cs_menu: "Rohteil", - cs_wdth_s: "width", - cs_wdth_l: ["width (x) in workspace units","0 defaults to part size"], - cs_dpth_s: "depth", - cs_dpth_l: ["depth (y) in workspace units","0 defaults to part size"], - cs_hght_s: "height", - cs_hght_l: ["height (z) in workspace units","0 defaults to part size"], - cs_offs_s: "Versatz", - cs_offs_l: ["use width, depth, height","as offsets from max","part size on platform"], - cs_clip_s: "clip to", - cs_clip_l: ["rough and outline","clip cutting paths","to defined stock"], + cs_wdth_s: "Breite", + cs_wdth_l: ["Breite (X) in Arbeitsbereich-Einheiten","0 verwendet Teil-Größe als Standard"], + cs_dpth_s: "Tiefe", + cs_dpth_l: ["Tiefe (Y) in Arbeitsbereich-Einheiten","0 verwendet Teil-Größe als Standard"], + cs_hght_s: "Höhe", + cs_hght_l: ["Höhe (Z) in Arbeitsbereich-Einheiten","0 verwendet Teil-Größe als Standard"], + cs_offs_s: "Offset", + cs_offs_l: ["Breite, Tiefe, Höhe verwenden","als Offsets von max.","Teil-Größe auf Plattform"], + cs_clip_s: "Beschneiden auf", + cs_clip_l: ["Schruppen und Umriss","Schnitt-Pfade beschneiden","auf definiertes Rohteil"], + cs_ishg_s: "Gitter anzeigen", + cs_ishg_l: ["Plattform-Gitter im indexierten Modus anzeigen"], + cs_indx_s: "Indexiert", + cs_indx_l: ["Rohteil ist an Dreh-Indexer montiert"], cs_offe_s: "Aktivieren", - cs_offe_l: "enable milling stock", + cs_offe_l: "Fräs-Rohteil aktivieren", // ORIGIN (CAM & LASER) - or_bnds_s: "origin bounds", - or_bnds_l: ["origin is relative to","boundary of all objects"], - or_cntr_s: "origin center", - or_cntr_l: "origin is referenced from the center", - or_topp_s: "origin top", - or_topp_l: "origin is references from the top of objects", + or_bnds_s: "Nullpunkt-Grenzen", + or_bnds_l: ["Nullpunkt ist relativ zu","Grenze aller Objekte"], + or_cntr_s: "Nullpunkt Mitte", + or_cntr_l: "Nullpunkt wird von der Mitte referenziert", + or_topp_s: "Nullpunkt Oben", + or_topp_l: "Nullpunkt wird von der Oberseite der Objekte referenziert", + or_offx_s: "Nullpunkt Offset X", + or_offx_l: "Nullpunkt Offset X", + or_offy_s: "Nullpunkt Offset Y", + or_offy_l: "Nullpunkt Offset Y", + + // CAM ORIGIN + co_menu: "Nullpunkt", + co_offx_s: "Offset X", + co_offx_l: ["Nullpunkt entlang X-Achse offsetieren","in Arbeitsbereich-Einheiten"], + co_offy_s: "Offset Y", + co_offt_l: ["Nullpunkt entlang Y-Achse offsetieren","in Arbeitsbereich-Einheiten"], + co_offz_s: "Offset Z", + co_offz_l: ["Nullpunkt entlang Z-Achse offsetieren","in Arbeitsbereich-Einheiten"], // FDM ADVANCED - ad_menu: "Fortgeschritten", - ad_rdst_s: "Einzugslänge", - ad_rdst_l: ["Wie weit das Filament eingezogen werden soll","bei langen Bewegungen (in mm)"], - ad_rrat_s: "Einzugsgeschwindigkeit", - ad_rrat_l: ["Geschwindigkeit des Filamenteinzugs","in mm/s"], - ad_rdwl_s: "Vorschub-Pause", - ad_wpln_s: "Einzugs-Bewegung", - ad_wpln_l: ["Bewegung ohne Druck","nach Einzug","in millimeters"], - ad_rdwl_l: ["Zeitabstand zwischen","Bewegung und Vorschub nach Einzug ","in msec"], - ad_scst_s: "Außenwand-Coasting", - ad_scst_l: ["Welche Strecke am Ende einer","Außenwand nicht extrudiert wird","in mm"], - ad_msol_s: "Mindestfläche für vollständige Füllung", - ad_msol_l: ["Mindestfläche in mm^2 ","für vollständige Füllung","muß > 0.1 sein"], - ad_mins_s: "Mindestgeschwindigkeit", - ad_mins_l: ["Mindestgeschwindigkeit","für kurze Segmente"], - ad_spol_s: "Kurze Segmente", - ad_spol_l: ["Segmente die kürzer sind","werden mit","Mindestgeschwindigkeit gedruckt","in mm"], - ad_arct_s: "arc tolerance", - ad_arct_l: ["convert faceted lines to arcs","center point drift tolerance","when matching arc points","consider values around 0.15","in millimeters","0 to disable"], - ad_zhop_s: "Z Hop", - ad_zhop_l: ["Hebe Düse bei Einzug an","in mm","0 zum deaaktivieren"], - ad_abkl_s: "anti-backlash", - ad_abkl_l: ["Für schöneres Aussehen Flacher Oberflächen","verwende Micro-Bewegungen","um Backlash auszugleichen","in mm","0 zum deaktivieren","Wenn Deine Firmware M425 unterstützt","verwende das im Start-GCode und setze hier auf 0"], - ad_lret_s: "Einzug bei Ebenenwechsel", - ad_lret_l: ["Erzwinge Einzug","bei Ebenen wechseln"], - ad_play_s: "Ebenen glätten", - ad_play_l: ["glätte bis zu","dieser Anzahl Ebenen"], - ad_pspd_s: "Glätt-Geschwindigkeit", - ad_pspd_l: ["Glätt-Geschwindigkeit","in mm / s"], + ad_menu: "Experte", + ad_rdst_s: "Einzugsdistanz", + ad_rdst_l: ["Betrag um Filament einzuziehen","für lange Bewegungen. In mm"], + ad_rrat_s: "Einzugsrate", + ad_rrat_l: ["Geschwindigkeit des Filament-","Einzugs in mm/s"], + ad_rdwl_s: "Eingriffs-Verweilzeit", + ad_wpln_s: "Einzugs-Abwischen", + ad_wpln_l: ["Nicht-Druck-Bewegung","nach Einzug","in mm"], + ad_rdwl_l: ["Zeit zwischen Wieder-Eingriff","Filament und Bewegung","in Millisekunden"], + ad_scst_s: "Wand-Coasting", + ad_scst_l: ["Nicht-Druck-Ende","von Perimeter-Wänden","in mm"], + ad_msol_s: "Bereichs-Filter", + ad_msol_l: ["Minimal-Bereich (mm^2)","Brücken und Ebenen kleiner als dies werden aussortiert"], + ad_mins_s: "Min. Geschwindigkeit", + ad_mins_l: ["Minimal-Geschwindigkeit","für kurze Segmente"], + ad_maxf_s: "Max. Durchflussrate", + ad_maxf_l: ["Maximale volumetrische Durchflussrate unterstützt von diesem Druckkopf und Filament","in mm^3 / Sekunde"], + ad_scar_s: "Scarf-Länge", + ad_scar_l: ["Auslauf-Länge für Scarf-Verbindung. Deaktiviert Bogen-Erkennung","0 = deaktiviert"], + ad_spol_s: "Kurzer Pfad", + ad_spol_l: ["Polygone kürzer als dies","haben ihre Druckgeschwindigkeit","zu Min-Geschwindigkeit skaliert","in mm"], + ad_arct_s: "Bogen-Toleranz", + ad_arct_l: ["Facettierte Linien zu Bögen konvertieren","Mittelpunkt-Drift-Toleranz","beim Abgleich von Bogen-Punkten","Werte um 0.15 erwägen","Wert in mm","0 oder Scarf deaktiviert dies"], + ad_zhop_s: "Z-Hop-Distanz", + ad_zhop_l: ["Betrag um Z anzuheben","bei Einzugs-Bewegungen","in mm","0 zum Deaktivieren"], + ad_abkl_s: "Anti-Backlash", + ad_abkl_l: ["Für besseres flaches Oberflächen-Finish","Mikro-Bewegungen verwenden um","Backlash in solider Schicht-Ausgabe zu stornieren","in mm","0 zum Deaktivieren","wenn Ihre Firmware M425 hat","das in den GCode-Header einfügen","und dies auf 0 lassen"], + ad_lbir_s: "Riemen zuerst", + ad_lbir_l: ["Immer Wände die den Riemen berühren vor allen anderen Wänden drucken. Dies ist basierend auf umfassenden Tests keine empfohlene Einstellung mehr."], + ad_altr_s: "Alternierend", + ad_altr_l: ["Wand-Wicklungs-Reihenfolge alternieren","im / gegen Uhrzeigersinn","kann Verziehen in dünnen Bereichen reduzieren","und bei Riemen-Kanten-Haftung helfen"], + ad_zint_s: "Z verschachteln", + ad_zint_l: ["Z-Höhen mit ungerader Anzahl Wänden verschachteln"], + ad_lret_s: "Einzug erzwingen", + ad_lret_l: ["Filament-Einzug zwischen Schichten erzwingen"], + ad_agap_s: "Lücken vermeiden", + ad_agap_l: ["Um Lücken herumrouten statt","einen Einzug durchführen","wenn möglich"], + ad_play_s: "Schichten polieren", + ad_play_l: ["Bis zu angegebene","# von Schichten gleichzeitig polieren"], + ad_pspd_s: "Polier-Geschwindigkeit", + ad_pspd_l: ["Polier-Geschwindigkeit","in mm / Sekunde"], + ad_purg_s: "Purge-Tower", + ad_purg_l: ["Purge-Tower-Bereich in mm^2","für Multi-Extruder-Setups","0 = deaktiviert"], // CAM EXPERT - cx_fast_s: "skip shadow", - cx_fast_l: ["disable overhang detection","can be faster and use less","memory with complex models","but fails with overhangs","try enabling if slicing","hangs during shadowing"], + cx_fast_s: "Schatten überspringen", + cx_fast_l: ["Überhang-Erkennung deaktivieren","kann schneller sein und weniger","Speicher bei komplexen Modellen verwenden","versagt aber bei Überhängen","versuchen zu aktivieren wenn Slicing","während Schattierung hängt"], + cx_true_s: "Echter Schatten", + cx_true_l: ["Rechnerisch korrekter Schatten","wird langsamer sein aber","bessere Schnitte für komplexe Teile produzieren"], + cx_arce_s: "Bogen-Ausgabe", + cx_arce_l: ["EXPERIMENTELL: Pfad-zu-Bogen-Konvertierung aktivieren"], + cx_arct_s: "Bogen-Toleranz", + cx_arct_l: ["Kreisförmige Pfade zu Bögen konvertieren;","Mittelpunkt-Drift-Toleranz","beim Abgleich von Bogen-Punkten","Werte um 0.15 erwägen","in mm, oder 0.006 Zoll;","Hohe Werte können","unerwartetes Verhalten verursachen","0 zum Deaktivieren"], + cx_arcr_s: "Bogen-Auflösung", + cx_arcr_l: ["Änderung in Linien-Richtung","akzeptabel in einem Bogen","Werte um 5 erwägen","Hohe Werte können","unerwartetes Verhalten verursachen",], // FDM GCODE ag_menu: "GCode", ag_nozl_s: "Düse", - ag_nozl_l: "Wählt Düse oder Druckkopf aus", - ag_paws_s: "Pause bei Ebenen", - ag_paws_l: ["Liste von Ebenen (kommasepariert","vor denen pausiert werden soll"], - ag_loop_s: "Schichten wiederholen", - ag_loop_l: ["Schichten die wiederholt werden sollen, im Format ","erste-letzte-anzahl,erste-letzte-anzahl,...","omitted count = 1"], + ag_nozl_l: "Ausgabe-Düse oder -Kopf auswählen", + ag_peel_s: "Peel-Guard", + ag_peel_l: ["Ab dieser Riemen-Z-Position","periodisch Druck ab- und","zurück auf Riemen rollen um abzulösen","und Rollen-Ablenkung zu verhindern"], + // ag_paws_s: "Pause-Schichten", + // ag_paws_l: ["Komma-getrennte Liste von Schichten","um Pausen-Befehle davor einzufügen"], + // ag_loop_s: "Schichten wiederholen", + // ag_loop_l: ["Schicht-Bereiche zu wiederholen im Format","erste-letzte-anzahl,erste-letzte-anzahl,...","weggelassene Anzahl = 1"], + ag_loop_s: "Wiederholungs-Anzahl", + ag_loop_l: ["Anzahl der Wiederholungen","des ausgewählten Bereichs oder des","gesamten Drucks wenn kein Bereich"], // SLA MENU - sa_menu: "Slicen", + sa_menu: "Slicing", sa_lahe_s: "Schichthöhe", sa_lahe_l: ["Schichthöhe","in mm"], - sa_shel_s: "Aushöhlen", - sa_shel_l: ["Wanddick mm","verwene Mehrfaches der Schichthöhe","setze 0 zum deaktivieren"], - sa_otop_s: "oben offen", - sa_otop_l: ["Wenn Aushöhlen aktiviert ist","bleibt das Objekt oben offen"], - sa_obas_s: "unten offen", - sa_obas_l: ["Wenn Aushöhlen aktiviert ist","bleibt das Objekt unten offen","deaktiviert, wenn Stützstrukturen verwendet werden"], + sa_shel_s: "Hohlwand", + sa_shel_l: ["Wand-Dicke in mm","Vielfaches der Schichthöhe verwenden","0 für solid (deaktiviert)"], + sa_otop_s: "Oben offen", + sa_otop_l: ["Wenn Wand aktiviert ist","resultiert in offener Oberseite"], + sa_obas_s: "Basis offen", + sa_obas_l: ["Wenn Wand aktiviert ist","resultiert in offener Basis","deaktiviert mit Stützen"], - sa_layr_m: "layers", - sa_lton_s: "light on time", - sa_lton_l: ["layer light on","time in seconds"], - sa_ltof_s: "light off time", - sa_ltof_l: ["layer light off","time in seconds"], - sa_pldi_s: "peel distance", - sa_pldi_l: ["peel distance","in millimeters"], - sa_pllr_s: "peel lift rate", - sa_pllr_l: ["peel lift speed","in mm/sec"], - sa_pldr_s: "peel drop rate", - sa_pldr_l: ["peel drop speed","in mm/sec"], + sa_layr_m: "Schichten", + sa_lton_s: "Licht-An-Zeit", + sa_lton_l: ["Schicht-Licht-An","Zeit in Sekunden"], + sa_ltof_s: "Licht-Aus-Zeit", + sa_ltof_l: ["Schicht-Licht-Aus","Zeit in Sekunden"], + sa_pldi_s: "Peel-Distanz", + sa_pldi_l: ["Peel-Distanz","in mm"], + sa_pllr_s: "Peel-Hebe-Rate", + sa_pllr_l: ["Peel-Hebe-Geschwindigkeit","in mm/Sek"], + sa_pldr_s: "Peel-Senk-Rate", + sa_pldr_l: ["Peel-Senk-Geschwindigkeit","in mm/Sek"], - sa_base_m: "base", - sa_balc_s: "layer count", - sa_balc_l: ["number of","base layers"], - sa_bltn_l: ["base layer light on","time in seconds"], - sa_bltf_l: ["base layer light off","time in seconds"], + sa_base_m: "Basis", + sa_balc_s: "Schicht-Anzahl", + sa_balc_l: ["Anzahl von","Basis-Schichten"], + sa_bltn_l: ["Basis-Schicht-Licht-An","Zeit in Sekunden"], + sa_bltf_l: ["Basis-Schicht-Licht-Aus","Zeit in Sekunden"], - sa_infl_m: "Füllstrukturen", + sa_infl_m: "Füllung", sa_ifdn_s: "Dichte", - sa_ifdn_l: ["percent infill","requires shell","0 = disabled","valid 0.0 - 1.0"], - sa_iflw_s: "line width", - sa_iflw_l: ["hatch line width","in millimeters"], + sa_ifdn_l: ["Prozent-Füllung","erfordert Wand","0 = deaktiviert","gültig 0.0 - 1.0"], + sa_iflw_s: "Linienbreite", + sa_iflw_l: ["Schraffur-Linienbreite","in mm"], - sa_supp_m: "support", - sa_slyr_s: "base layers", - sa_slyr_l: ["base support layers","value range 0-10"], - sa_slgp_s: "gap layers", - sa_slgp_l: ["number of layers between","raft and bottom of object"], - sa_sldn_s: "density", - sa_sldn_l: ["used to compute the","number of support pillars","0.0-1.0 (0 = disable)"], - sa_slsz_s: "size", - sa_slsz_l: ["max size of a","support pillar","in millimeters"], + sa_supp_m: "Stütze", + sa_slyr_s: "Basis-Schichten", + sa_slyr_l: ["Basis-Stütz-Schichten","Werte-Bereich 0-10"], + sa_slgp_s: "Lücken-Schichten", + sa_slgp_l: ["Anzahl Schichten zwischen","Raft und Objekt-Unterseite"], + sa_sldn_s: "Dichte", + sa_sldn_l: ["Verwendet um","Anzahl Stütz-Säulen zu berechnen","0.0-1.0 (0 = deaktivieren)"], + sa_slsz_s: "Größe", + sa_slsz_l: ["Max. Größe einer","Stütz-Säule","in mm"], sa_slpt_s: "Punkte", - sa_slpt_l: ["number of points in","each support pillar","in millimeters"], - sl_slen_l: "enable supports", + sa_slpt_l: ["Anzahl Punkte in","jeder Stütz-Säule","in mm"], + sl_slen_l: "Stützen aktivieren", - sa_outp_m: "output", - sa_opzo_s: "z offset", - sa_opzo_l: ["z layer offset","almost always 0.0","0.0-1.0 in millimeters"], - sa_opaa_s: "anti alias", - sa_opaa_l: ["enable anti-aliasing","produces larger files","can blur details"] + sa_outp_m: "Ausgabe", + sa_opzo_s: "Z-Offset", + sa_opzo_l: ["Z-Schicht-Offset","fast immer 0.0","0.0-1.0 in mm"], + sa_opaa_s: "Anti-Alias", + sa_opaa_l: ["Anti-Aliasing aktivieren","produziert größere Dateien","kann Details verwischen"] }; diff --git a/web/kiri/lang/es-es.js b/web/kiri/lang/es-es.js index f83941d5..86eedcd3 100644 --- a/web/kiri/lang/es-es.js +++ b/web/kiri/lang/es-es.js @@ -6,44 +6,64 @@ self.lang['es-es'] = { animate: "animar", // CAM animate button arrange: "organizar", // layout workspace objects axis: "eje", // left object scale pop menu + back: "atrás", clear: "limpiar", // clear workspace (remove all objects) copy: "copiar", + clone: "clonar", // create duplicate delete: "eliminar", detail: "detalle", done: "hecho", + edit: "editar", enable: "habilitar", + disable: "deshabilitar", + donate: "donar", export: "exportar", files: "archivos", + filter: "filtrar", + front: "delante", + fullscreen: "pantalla completa", help: "ayuda", - ghost: "fantasma", // left render pop menu (wireframe) - hide: "ocultar", // left render pop menu (invisible) + ghost: "fantasma", // left render pop menu (wireframe) + hide: "ocultar", // left render pop menu (invisible) home: "inicio", import: "importar", + install: "instalar", language: "idioma", - machine: "máquina", // device or machine + left: "izquierda", + machines: "máquinas", // device or machine + mesh: "malla", // mesh editing metric: "métrica", name: "nombre", - prefs: "preferencias", // left menu "preferences" + new: "nuevo", // file new + off: "apagado", // turn something off (like a lightbulb) + on: "encendido", // turn something on (like a lightbulb) + profs: "perfiles", // right menu "profiles" + prefs: "preferencias", // right menu "preferences" preview: "vista previa", recent: "reciente", - render: "renderizar", // left render pop menu + rename: "renombrar", + render: "renderizar", // left render pop menu reset: "restablecer", - rotate: "rotar", // left rotate pop menu + right: "derecha", + rotate: "rotar", // left rotate pop menu save: "guardar", - scale: "escala", // left object scale pop menu + scale: "escala", // left object scale pop menu + select: "seleccionar", setup: "configurar", settings: "configuración", size: "tamaño", - slice: "corte", - solid: "sólido", // view type pop menu + slice: "cortar", + solid: "sólido", // view type pop menu start: "inicio", tool: "herramienta", - tools: "herramientas", // CAM tool menu button + tools: "herramientas", // CAM tool menu button top: "arriba", - type: "tipo", // CAM tool type + type: "tipo", // CAM tool type + uninstall: "desinstalar", version: "versión", - view: "vista", // left view pop menu - wire: "alambre", // left render pop menu + view: "vista", // left view pop menu + wire: "alambre", // left render pop menu + volume: "volumen", // device build area acct_xpo: ["hace una copia de seguridad de su dispositivo","y perfiles de dispositivo con la ","opción de incluir espacio de trabajo","objetos y posiciones"], @@ -53,7 +73,14 @@ self.lang['es-es'] = { rc_lafl: "apoyar sobre plano", rc_mirr: "espejar", rc_dupl: "duplicar", - rc_xstl: "exportar como STL", + rc_focs: "establecer foco", + rc_heal: "reparar mallas", + rc_swap: "reemplazar vértices", + rc_xobj: "exportar OBJ", + rc_xstl: "exportar STL", + sb_info: ["velocidad de impresión","en mm/s"], + rc_merg: "fusionar mallas de objeto", + rc_splt: "aislar cuerpos", // DEVICE MENU and related dialogs dm_sldt: "seleccionar un tipo de dispositivo", @@ -61,21 +88,22 @@ self.lang['es-es'] = { dm_mydd: "mis dispositivos", dm_seld: "dispositivo seleccionado", dm_rcnt: "archivos recientes", - dm_savs: "ajustes guardados", + dm_savs: "configuración", dm_appp: "Preferencias de la aplicación", // CAM Tool Dialog - td_tyem: "extremo", // end mill - td_tybm: "bola", // ball mill - td_tytm: "cono", // taper mill + td_tyem: "extremo", // end mill + td_tybm: "bola", // ball mill + td_tytm: "cónico", // taper mill + td_tydr: "taladro", // drill td_tonm: "herramienta #", - td_shft: "asta", // endmill shaft specs - td_flut: "flauta", // endmill flute specs - td_tapr: "estrechar", // endmill taper specs + td_shft: "vástago", // endmill shaft specs + td_flut: "flauta", // endmill flute specs + td_tapr: "cónico", // endmill taper specs // DEVICE dialog groups dv_gr_dev: "dispositivo", - dv_gr_ext: "extrusora", + dv_gr_ext: "extrusor", dv_gr_out: "salida", dv_gr_gco: "macros de gcode", @@ -92,22 +120,34 @@ self.lang['es-es'] = { dv_bedd_l: "unidades de espacio de trabajo", dv_bedh_s: "altura", dv_bedh_l: ["altura máxima de construcción","en unidades de espacio de trabajo"], + dv_rezx_s: "resolución X", + dv_rezx_l: ["resolución x"], + dv_rezy_s: "resolución Y", + dv_rezy_l: ["resolución y"], + dv_zmax_s: "límite de velocidad del eje Z", + dv_zmax_l: ["velocidad máxima del eje Z","en milímetros / segundo","0 para deshabilitar"], + dv_time_s: "factor de tiempo de salida", + dv_time_l: ["modificador de estimaciones de tiempo de impresión","en el diálogo de exportación gcode.","aumentar o disminuir el valor basándose en","tiempos de impresión predichos vs observados"], dv_spmx_s: "husillo máximo", dv_spmx_l: ["velocidad máxima en rpm del husillo","0 para deshabilitar"], dv_xtab_s: "posicionamiento absoluto", - dv_xtab_l: "extrusión se mueve en absoluto", + dv_xtab_l: "movimientos de extrusión absolutos", dv_orgc_s: "centro de origen", - dv_orgc_l: "centro de origen de la cama", - // dv_orgt_s: "parte superior del origen", - // dv_orgt_l: "parte superior z del origen de la parte", + dv_orgc_l: "origen de cama al centro", + // dv_orgt_s: "origen arriba", + // dv_orgt_l: "origen z de pieza arriba", dv_bedc_s: "cama circular", dv_bedc_l: "la cama del dispositivo es circular", dv_belt_s: "cama de cinta", dv_belt_l: "cama de impresión continua", + dv_fsrc_s: "fuente de filamento", + dv_fsrc_l: ["cómo se alimenta el filamento\nal extrusor"], dv_retr_s: "retracción de firmware", - dv_retr_l: ["el firmware del dispositivo es compatible con G10/G11"], - dv_fanp_s: "potencia del ventilador", + dv_retr_l: ["el firmware del dispositivo soporta G10/G11"], + dv_fanp_s: "refrigeración", dv_fanp_l: "establecer la potencia del ventilador de refrigeración", + dv_feat_s: "característica", + dv_feat_l: "inyectar código para características específicas", dv_prog_s: "progreso", dv_prog_l: "salida en cada % de progreso", dv_layr_s: "capa", @@ -118,39 +158,74 @@ self.lang['es-es'] = { dv_strc_l: ["eliminar comentarios de gcode","los comentarios comienzan con ;"], dv_fext_s: "extensión de archivo", dv_fext_l: "extensión de nombre de archivo", + dv_lazr_s: "habilitar láser", + dv_lazr_l: ["habilitar operaciones láser"], + dv_dwll_s: "permanencia", - dv_dwll_l: "secuencia de comandos gcode de permanencia", - dv_tool_s: "cambio de herramienta", - dv_tool_l: "secuencia de comandos de cambio de herramienta", - dv_sspd_s: "velocidad del husillo", - dv_sspd_l: "establecer la velocidad del husillo", + dv_dwll_l: "script gcode de permanencia", + dv_tool_s: "herramienta", + dv_tool_l: "script de cambio de herramienta", + dv_sspd_s: "husillo", + dv_sspd_l: "establecer velocidad del husillo", dv_paus_s: "pausa", - dv_paus_l: "secuencia de comandos gcode de pausa ", + dv_paus_l: "script gcode de pausa", dv_head_s: "encabezado", - dv_head_l: "secuencia de comandos gcode de encabezado", - dv_foot_s: "pie", - dv_foot_l: "secuencia de comandos gcode de pie", - dv_lzon_s: "laser activado", - dv_lzon_l: "secuencia de comandos gcode para activar laser", - dv_lzof_s: "laser desactivado", - dv_lzof_l: "secuencia de comandos gcode para desactivar laser", - dv_exts_s: "", - dv_exts_l: "secuencia de comandos gcode para seleccionar este extrusor", + dv_head_l: "script gcode de encabezado", + dv_foot_s: "pie de página", + dv_foot_l: "script gcode de pie de página", + dv_pext_s: "exterior", + dv_pext_l: ["script gcode ejecutado antes de","imprimir líneas exteriores"], + dv_pint_s: "interior", + dv_pint_l: ["script gcode ejecutado antes de","imprimir líneas interiores"], + dv_lzon_s: "láser activado", + dv_lzon_l: "script gcode para activar láser", + dv_lzof_s: "láser desactivado", + dv_lzof_l: "script gcode para desactivar láser", + + dv_waon_s: "agua activada", + dv_waon_l: "script gcode para activar bomba de agua", + dv_waof_s: "agua desactivada", + dv_waof_l: "script gcode para desactivar bomba de agua", + + dv_dkon_s: "cuchilla abajo", + dv_dkon_l: "script gcode para bajar cuchilla", + dv_dkof_s: "cuchilla arriba", + dv_dkof_l: "script gcode para subir cuchilla", + + dv_exts_s: "seleccionar", + dv_exts_l: "gcode ejecutado para habilitar este extrusor", dv_dext_s: "deseleccionar", dv_dext_l: "gcode ejecutado antes de habilitar otro extrusor", dv_extd_s: "deseleccionar", - dv_extd_l: "secuencia de comandos gcode para deseleccionar este extrusor", - dv_exox_s: "compensación x x", - dv_exox_l: "compensación de boquilla x", - dv_exoy_s: "compensación x y", - dv_exoy_l: "compensación de boquilla y", + dv_extd_l: "gcode para deseleccionar este extrusor", + dv_exox_s: "desplazamiento x", + dv_exox_l: "desplazamiento de boquilla x", + dv_exoy_s: "desplazamiento y", + dv_exoy_l: "desplazamiento de boquilla y", + + dv_paid_s: "ID de impresora", + dv_paid_l: ["identificador único de impresora","puede ser inventado"], + dv_paps_s: "espaciado de ping", + dv_paps_l: ["consumo mínimo de filamento","entre pings en milímetros","recomendado 500 - 1000","0 = deshabilitar pings"], + dv_pafe_s: "longitud de alimentación", + dv_pafe_l: ["longitud del tubo alimentador en milímetros","corto=570, medio=800, largo=1100"], + dv_papl_s: "longitud de empuje", + dv_papl_l: ["distancia entre engranaje del extrusor","y punta de boquilla en milímetros"], + dv_paof_s: "longitud de desplazamiento", + dv_paof_l: ["longitud para agregar o quitar del","primer segmento en milímetros","usualmente 0"], + dv_pahe_s: "tiempo de calentamiento", + dv_pahe_l: ["desplazamiento desde el predeterminado"], + dv_paco_s: "tiempo de enfriamiento", + dv_paco_l: ["desplazamiento desde el predeterminado"], + dv_pacm_s: "tiempo de compresión", + dv_pacm_l: ["desplazamiento desde el predeterminado"], // MODE mo_menu: "modo", mo_fdmp: "Impresión FDM", mo_slap: "Impresión SLA", mo_lazr: "Corte láser", - mo_cncm: "Fresadora CNC", + mo_cncm: "Fresado CNC", // SETUP su_menu: "configuración", @@ -173,33 +248,35 @@ self.lang['es-es'] = { fn_expo: "Exportar", // VIEW - vu_menu: "ver", + vu_menu: "vista", vu_home: "Inicio", vu_rset: "Restablecer", vu_sptp: "Arriba", - vu_spfr: "Delantero", + vu_spfr: "Frente", vu_splt: "Izquierda", vu_sprt: "Derecha", // WORKSPACE - ws_menu: "ver", + ws_menu: "vista", ws_save: "Guardar", - ws_cler: "Borrar", + ws_cler: "Limpiar", // OPTIONS op_menu: "interfaz", op_disp: "pantalla", op_xprt_s: "experto", op_xprt_l: "mostrar más opciones de configuración", - op_decl_s: "pegatinas", - op_decl_l: "mostrar pegatinas y logotipos del dispositivo", - op_dang_s: "experimental", - op_dang_l: "mostrar parámetros experimentales", + op_decl_s: "mostrar calcomanías", + op_decl_l: "mostrar calcomanías y logotipos del dispositivo", + op_shny_s: "renderizado detallado", + op_shny_l: "elegir un método de renderizado de corte que es más lento y usa resaltado especular. esto facilita ver detalles en algunos modelos a costa de la velocidad de renderizado", + op_devl_s: "desarrollador", + op_devl_l: ["mostrar opciones de desarrollador","habilitar depuración de desarrollador"], op_hopo_s: "menú flotante", - op_hopo_l: ["habilitar el menú flotante","activar"], + op_hopo_l: ["habilitar menú flotante","al pasar el cursor para activar"], op_dark_s: "modo oscuro", op_dark_l: "interfaz de modo oscuro", - op_comp_s: "interfaz de usuario compacta", + op_comp_s: "interfaz compacta", op_comp_l: ["interfaz de usuario compacta","mejor para pantallas pequeñas","y tabletas"], op_shor_s: "mostrar origen", op_shor_l: "mostrar origen del dispositivo o proceso", @@ -207,34 +284,49 @@ self.lang['es-es'] = { op_shru_l: ["mostrar reglas de ejes","en líneas de cuadrícula principales"], op_sped_s: "mostrar velocidades", op_sped_l: ["mostrar velocidad en la barra de colores","en modo de vista previa"], - op_auto_s: "distribución automática", - op_auto_l: ["plataforma de distribución automática","cuando se agregan nuevos elementos"], - op_free_s: "distribución libre", - op_free_l: ["permitir distribución arrastrable","sin efecto en modo láser"], + op_auto_s: "diseño automático", + op_auto_l: ["organizar automáticamente la plataforma","cuando se agreguen nuevos elementos"], + op_free_s: "diseño libre", + op_free_l: ["permitir diseño arrastrable","sin efecto en modo láser"], op_spcr_s: "espaciado", - op_spcr_l: ["espaciado entre objetos","durante la distribución automática","en unidades del espacio de trabajo"], - op_orth_s: "ortográfica", + op_spcr_l: ["espaciado entre objetos","durante el diseño automático","en unidades del espacio de trabajo","en modo cinta, usar 0","para espaciar automáticamente por altura"], + op_spoa_s: "ángulo de borde", + op_spoa_l: ["diferencia de ángulo de superficie que activa un trazado de borde"], + op_spcx_s: "X aleatorio", + op_spcx_l: ["en modo cinta, colocar","aleatoriamente la pieza en X","para un desgaste uniforme de la cinta"], + op_orth_s: "ortográfico", op_orth_l: ["visualización ortográfica","requiere actualización de página"], + op_anta_s: "antialiasing", + op_anta_l: ["pantalla suave. mejor pero más lento","requiere recarga o actualización de página"], op_invr_s: "invertir zoom", - op_invr_l: ["invertir rueda del mouse","zoom de desplazamiento"], + op_invr_l: ["invertir rueda del ratón","zoom de desplazamiento"], op_save_s: "guardado automático", - op_save_l: ["preservar objetos en el espacio de trabajo","entre recargas de aplicaciones"], + op_save_l: ["preservar objetos en el espacio de trabajo","entre recargas de aplicación"], op_line_s: "tipo de línea", - op_line_l: ["tipo de línea para renderizado de caminos","impacta el desempeño 3D","camino: mejor para 3D","plano: bueno para 2D","línea = rápido para 1D"], + op_line_l: ["estilo de línea para renderizado de trayectoria","impacta el rendimiento 3D","trayectoria: mejor 3D","plano: bueno 2D","línea = rápido 1D"], op_unit_s: "unidades", op_unit_l: ["las unidades del espacio de trabajo afectan","velocidades y distancias"], op_anim_s: "animar", - op_anim_l: ["densidad de malla de animación","mayor valor es más denso","ocupa más memoria","y es más lento"], + op_anim_l: ["densidad de malla de animación","mayor es más denso","requiere más memoria","y es más lento"], + op_exgl_l: ["mostrar dispositivos Grid:Local en diálogo de exportación","incluye Grid:Bots y plugins de OctoPrint"], + op_exgh_l: ["soporte heredado de red local Grid:Host"], + op_exop_l: ["soporte heredado de red local OctoPrint","se recomienda el plugin Grid:Space OctoPrint"], - lo_menu: "distribución", + lo_menu: "diseño", - pt_menu: "partes", + pt_menu: "cortador", pt_deci_s: "diezmar", - pt_deci_l: ["habilitar o deshabilitar el diezmado de puntos","durante la importación del puerto para un corte más rápido","y un menor uso de memoria"], - pt_qual_s: "calidad", - pt_qual_l: ["nivel de detalle a retener","durante las operaciones de corte","más bajo es más rápido"], - pt_heal_s: "curar malla", - pt_heal_l: ["intentar curar","mallas no topológicas","extiende el tiempo de corte"], + pt_deci_l: ["habilitar o deshabilitar decimación de puntos","durante la importación del puerto. para un corte más rápido","y menor uso de memoria"], + pt_qual_s: "detalle", + pt_qual_l: ["nivel de detalle a retener durante operaciones de corte. más bajo es más rápido y usa menos memoria. modelos a gran escala a menudo no se benefician de mayor detalle. en su lugar, solo puede resultar en problemas de memoria y procesamiento. reducir este valor si se obtienen errores de memoria insuficiente."], + pt_heal_s: "reparar malla", + pt_heal_l: ["intentar reparar mallas no múltiples durante el corte. puede aumentar el tiempo de corte. habilita una advertencia cuando se detectan geometrías no múltiples."], + pt_thrd_s: "multiproceso", + pt_thrd_l: ["usar procesamiento paralelo cuando el navegador soporte workers anidados. puede aumentar la presión de memoria en modelos más grandes. deshabilitar si se obtienen errores de memoria insuficiente"], + pt_assy_s: "web asm", + pt_assy_l: ["usar web assembly cuando sea compatible con el navegador. si experimenta artefactos o errores de memoria, intente deshabilitar esto."], + pt_wgpu_s: "web gpu", + pt_wgpu_l: ["usar web gpu cuando sea compatible con el navegador. si experimenta artefactos o errores de memoria, intente deshabilitar esto."], xp_menu: "exportaciones", @@ -243,389 +335,629 @@ self.lang['es-es'] = { se_load: "cargar", se_save: "guardar", - // FDM SLICING + // FDM LAYERS sl_menu: "capas", - sl_lahi_s: "altura", - sl_lahi_l: ["altura de cada sección","capa en milímetros"], - ad_minl_s: "altura mínima", - ad_minl_l: ["altura mínima adaptativa de la capa","en milímetros","debe ser distinta de cero"], + sl_angl_s: "ángulo de corte", + sl_angl_l: ["sesgo de ángulo de corte en grados"], + sl_lahi_s: "altura de capa", + sl_lahi_l: ["altura de cada corte","capa en milímetros"], + ad_minl_s: "capa mínima", + ad_minl_l: ["altura mínima de capa adaptativa","en milímetros","debe ser distinta de cero"], + ad_adap_s: "altura adaptativa", + ad_adap_l: ["usar alturas de capa adaptativas","con 'altura de capa' como máximo","y 'capa mínima' como mínimo"], sl_ltop_s: "capas superiores", - sl_ltop_l: ["cantidad de capas sólidas","para hacer cumplir en la","parte superior de la impresión"], + sl_ltop_l: ["número de capas sólidas en la parte superior de la impresión o en áreas planas mirando hacia arriba"], sl_lsld_s: "capas sólidas", - sl_lsld_l: ["áreas de relleno sólido calculadas","de los deltas de capa. Ver","menú flotante de capa"], + sl_lsld_l: ["áreas de relleno sólido calculadas","desde puentes y áreas planas","detectadas entre capas cortadas"], sl_lbot_s: "capas base", - sl_lbot_l: ["cantidad de capas sólidas","para hacer cumplir en la","parte inferior de la impresión"], - ad_adap_s: "adaptable", - ad_adap_l: ["usar alturas de capa adaptables","con 'altura de capa' como máximo","y 'min capa' como mínimo"], + sl_lbot_l: ["número de capas sólidas en la parte inferior de la impresión o bajo tramos de puente"], + + // FDM WALLS + sw_menu: "paredes", + sl_shel_s: "cantidad de paredes", + sl_shel_l: ["número de paredes","perimetrales a generar"], + ad_thin_s: "paredes delgadas", + ad_thin_l: ["detectar y rellenar huecos","entre paredes de carcasa"], // FDM SHELLS - sl_shel_s: "cantidad de cáscaras", - sl_shel_l: ["cantidad de muros","perimetrales a generar"], - sl_ordr_s: "orden de cáscaras", - sl_ordr_l: ["orden de cáscaras de salida","de adentro hacia afuera","o de afuera hacia adentro","afecta la calidad de la superficie"], - sl_strt_s: "inicio de la capa", - sl_strt_l: ["punto de inicio de la capa","última = último final de capa","centro = centro de la parte","origen = origen del dispositivo"], - ad_thin_s: "paredes delgadas", - ad_thin_l: ["detectar y rellenar huecos","entre las paredes de la carcasa"], + sl_line_s: "ancho de línea", + sl_line_l: ["ancho de extrusión en milímetros","0 = diámetro de boquilla"], + sl_ordr_s: "orden de paredes", + sl_ordr_l: ["orden de salida de paredes","de adentro hacia afuera","o de afuera hacia adentro","afecta la calidad de la superficie"], + sl_strt_s: "punto de inicio", + sl_strt_l: ["punto de inicio de capa","último = donde terminó la última capa","centro = centro de la pieza","origen = origen del dispositivo","aleatorio = yolo"], + sl_ofin_s: "desplazamiento de pared interior", + sl_ofin_l: ["desplazamiento de perímetro de agujero interior","en milímetros"], + sl_ofot_s: "desplazamiento de pared exterior", + sl_ofot_l: ["desplazamiento de perímetro de pared exterior","en milímetros"], + + // FDM SOLID + fs_menu: "relleno sólido", + fi_over_s: "superposición de relleno", + fi_over_l: ["superposición entre paredes y relleno sólido o disperso. puede mejorar la unión a las paredes","como fracción del ancho de línea","0.0 - 1.0"], + fi_angl_s: "ángulo inicial", + fi_angl_l: ["ángulo inicial en grados","90 grados agregados a","cada capa siguiente","se aplica solo a capas sólidas"], + fi_grow_s: "expansión de área", + fi_grow_l: ["expandir sólidos proyectados","puede ayudar con áreas sólidas","sobre áreas de relleno disperso","unidades en milímetros"], // FDM FILL - fi_menu: "relleno", + fi_menu: "relleno disperso", fi_type: "tipo de relleno", - fi_pcnt_s: "fracción de relleno", + fi_pcnt_s: "cantidad de relleno", fi_pcnt_l: ["valores de densidad de relleno","0.0 - 1.0"], - fi_angl_s: "inicio sólido", - fi_angl_l: ["ángulo de inicio en grados","90 grados añadidos a ","cada capa siguiente ","se aplica solo a capas sólidas"], - fi_wdth_s: "ancho sólido", - fi_wdth_l: ["ancho de línea para relleno sólido","como una fracción del ancho de la boquilla","los valores < 1 son más densos","y buenos para acabados superficiales","0.0 - 1.0"], - fi_over_s: "superposición de cáscara", - fi_over_l: ["superposición con la cáscara y otro relleno","como fracción del diámetro de la boquilla","0.0 - 2.0"], + fi_rept_s: "repetición de relleno", + fi_rept_l: ["número de veces para repetir","capas de relleno sin cambios"], // fi_rate_s: "velocidad de impresión", - fi_rate_l: ["velocidad de extrusión del relleno","establecido en 0 para utilizar las velocidades","de salida de impresión predeterminadas"], + fi_rate_l: ["velocidad de extrusión para relleno","establecer en 0 para usar","velocidades de impresión de salida predeterminadas"], + + // FDM HEATING + fh_menu: "calentamiento", + + // FDM COOLING + fc_menu: "enfriamiento", // FDM FIRST LAYER fl_menu: "base", fl_lahi_s: "altura de capa", - fl_lahi_l: ["altura de cada rebanada","en milímetros","debe ser >= altura de rebanada"], - fl_rate_s: "velocidad de la cáscara", - fl_rate_l: ["velocidad máxima de impresión de la cáscara","en milímetros/segundo"], - fl_frat_s: "velocidad de llenado", - fl_frat_l: ["velocidad máxima de impresión de llenado","en milímetros / segundo"], + fl_lahi_l: ["altura de cada corte","en milímetros","debe ser >= altura de corte"], + fl_rate_s: "velocidad de pared", + fl_rate_l: ["velocidad máxima de impresión de pared","en milímetros / segundo"], + fl_frat_s: "velocidad de relleno", + fl_frat_l: ["velocidad máxima de impresión de relleno","en milímetros / segundo"], fl_mult_s: "factor de flujo", fl_mult_l: ["multiplicador de extrusión","0.0 - 2.0"], fl_sfac_s: "factor de ancho", - fl_sfac_l: ["multiplicador del tamaño de la boquilla","cambia el espaciado de línea"], + fl_sfac_l: ["multiplicador del tamaño de boquilla","cambia el espaciado de línea"], fl_skrt_s: "cantidad de faldones", - fl_skrt_l: ["número de desfase de la primera capa","bordes a generar"], - fl_skro_s: "desfase de faldón", - fl_skro_l: ["desfase de faldón de la pieza","en milímetros"], - fl_nozl_s: "temperatura de la boquilla", - fl_nozl_l: ["en grados centígrados","configuración de salida utilizada","cuando es cero"], - fl_bedd_s: "temperatura de la cama", - fl_bedd_l: ["en grados centígrados","configuración de salida utilizada","cuando es cero"], - fr_spac_s: "espacio de la balsa", - fr_spac_l: ["espaciado de capa adicional","entre la 1ra capa y la balsa","en milímetros"], - fr_nabl_s: "habilitar de balsa", - fr_nabl_l: ["crear una balsa debajo del","modelo para una mejor adherencia","utiliza desplazamiento de faldón y","inhabilita salida de falda"], + fl_skrt_l: ["número de bordes desplazados","de primera capa a generar"], + fl_skro_s: "desplazamiento de faldón", + fl_skro_l: ["desplazamiento del faldón desde la pieza","en milímetros","cuando se usan balsas","este es el desplazamiento de la balsa"], + fl_nozl_s: "temperatura de boquilla", + fl_nozl_l: ["grados en celsius","configuración de salida usada","cuando es cero"], + fl_bedd_s: "temperatura de cama", + fl_bedd_l: ["grados en celsius","configuración de salida usada","cuando es cero"], + fr_spac_s: "espacio de balsa", + fr_spac_l: ["espaciado de capa adicional","entre la primera capa y la balsa","en milímetros"], + fr_nabl_s: "habilitar balsa", + fr_nabl_l: ["crear una balsa debajo del","modelo para mejor adherencia","usa desplazamiento de faldón y","deshabilita salida de faldón"], + fr_draf_s: "escudo de corriente", + fr_draf_l: ["extender faldón hasta la altura de la pieza","que actúa como escudo contra","corrientes y atrapa aire caliente"], // FDM BELT ONLY - fl_zoff_s: "compensación de la banda", - fl_zoff_l: ["compensación de la altura de la banda","de la extrusión más baja","en milímetros"], - fl_brim_s: "tamaño del borde", - fl_brim_l: ["agregar borde a la parte inferior","el tamaño es el ancho en milímetros","0 para deshabilitar"], - fl_brmn_s: "gatillo de borde", - fl_brmn_l: ["agregar bordes solo cuando el segmento","que da a la cinta sea más corto que este","valor en milímetros","0 = Infinito"], - fl_bled_s: "anclaje parcial", - fl_bled_l: ["anclaje parcial del cinturón","al inicio de la impresión","en milímetros"], + fl_zoff_s: "desplazamiento de cinta", + fl_zoff_l: ["desplazamiento de altura desde la cinta","de la extrusión más baja","en milímetros"], + fl_flat_s: "aplanar", + fl_flat_l: ["aplanar a la cinta cualquier punto","de altura menor que este valor","en milímetros"], + fl_brim_s: "lados de borde", + fl_brim_l: ["agregar borde al perímetro de la pieza","tamaño es ancho en milímetros","0 para deshabilitar"], + fl_brin_s: "interior de borde", + fl_brin_l: ["agregar borde al interior de la pieza","cuando existen vacíos interiores","tamaño es ancho en milímetros","0 para deshabilitar"], + fl_brmn_s: "activador de borde", + fl_brmn_l: ["agregar bordes solo cuando el segmento","mirando a la cinta sea más corto que esto","valor en milímetros","0 = Infinito"], + fl_brco_s: "peine de borde", + fl_brco_l: ["agregar espacios de borde","cada n líneas","0 para deshabilitar"], + fl_brgp_s: "espacio de borde", + fl_brgp_l: ["espaciado entre borde y pieza","en milímetros"], + fl_bled_s: "anclaje de pieza", + fl_bled_l: ["anclaje de pieza de cinta","al inicio de la impresión","en milímetros"], + fl_blmp_s: "protuberancia de anclaje", + fl_blmp_l: ["agregar una protuberancia al inicio de","un anclaje para ayudarlo a despegar","al final de la cinta","en milímetros"], // FDM SUPPORT sp_menu: "soporte", sp_detect: "detectar", sp_dens_s: "densidad", sp_dens_l: ["fracción 0.0 - 1.0","recomendado 0.15","0 para deshabilitar"], - sp_size_s: "tamaño del pilar", - sp_size_l: ["ancho del pilar","en milímetros"], - sp_offs_s: "desplazamiento de la pieza", + sp_size_s: "tamaño de pilar", + sp_size_l: ["ancho de pilar en milímetros","valores más pequeños aumentan exponencialmente","los tiempos de detección"], + sp_offs_s: "desplazamiento de pieza", sp_offs_l: ["desplazamiento desde la pieza","en milímetros"], sp_gaps_s: "capas de separación", - sp_gaps_l: ["cantidad de capas","desplazamiento desde la parte"], - sp_span_s: "intervalo máximo", - sp_span_l: ["intervalo no admitido que provoca","la generación de un nuevo soporte","en milímetros"], + sp_gaps_l: ["número de capas","desplazamiento desde la pieza"], + sp_span_s: "tramo máximo", + sp_span_l: ["tramo sin soporte que causa","que se genere un nuevo soporte","en milímetros"], sp_angl_s: "ángulo máximo", - sp_angl_l: ["ángulo máximo de voladizo antes","de generar un pilar de soporte"], + sp_angl_l: ["ángulo máximo de voladizo antes de","que se genere un pilar de soporte","valores normales 45-60","valores de cinta 0-10"], sp_area_s: "área mínima", - sp_area_l: ["área mínima para","una columna de soporte","en milímetros"], + sp_area_l: ["área mínima para","una columna de soporte","en milímetros","valores más pequeños","ralentizarán la detección"], sp_xpnd_s: "expandir", - sp_xpnd_l: ["expandir el área de soporte","más allá del límite de la pieza","en milímetros"], - sp_nozl_s: "extrusora", - sp_nozl_l: ["en sistemas de múltiples extrusoras","la extrusora que se utilizará para","material de soporte"], + sp_xpnd_l: ["expandir área de soporte","más allá del límite de la pieza","en milímetros"], + sp_grow_s: "crecer", + sp_grow_l: ["hacer crecer columna de soporte para llenar pequeños espacios","en milímetros"], + sp_nozl_s: "extrusor", + sp_nozl_l: ["en sistemas multi-extrusor","el extrusor a usar para","material de soporte"], + sp_outl_s: "encerrado", + sp_outl_l: ["encerrar patrón de soporte","dentro de una pared perimetral"], sp_auto_s: "automático", - sp_auto_l: ["habilitar soportes generados","usando geometría en tiempo de corte","los soportes solo aparecerán","después de que se complete el corte"], - - // LASER SLICING - ls_offs_s: "desplazamiento", - ls_offs_l: ["ajustar para ancho de viga","en milímetros"], - ls_lahi_s: "altura", - ls_lahi_l: ["altura de capa","en milímetros","0 = auto/detectar"], - ls_lahm_s: "mínimo", - ls_lahm_l: ["altura de capa mínima","fusionará cortes automáticos","de menos de este grosor","en milímetros"], - ls_sngl_s: "único", - ls_sngl_l: ["realizará solo un corte","a la altura de capa especificada"], + sp_auto_l: ["habilitar soportes generados","usando geometría en tiempo de corte","los soportes solo aparecerán","después de que el corte se complete"], // CNC COMMON terms cc_tool: "herramienta", cc_offs_s: "desplazamiento", - cc_offs_l: ["desplazamiento del centro de la herramienta","desde la ruta elegida"], + cc_offs_l: ["desplazar centro de herramienta","desde la trayectoria elegida"], cc_spnd_s: "rpm del husillo", - cc_spnd_l: ["velocidad del husillo en","revoluciones/minuto"], - cc_sovr_s: "paso por encima", - cc_sovr_l: ["como una fracción del","diámetro de la herramienta"], - cc_sdwn_s: "reducir paso", - cc_sdwn_l: ["reducir la profundidad de paso","para cada pasada","en unidades de espacio de trabajo","0 para deshabilitar"], + cc_spnd_l: ["velocidad del husillo en","revoluciones / minuto"], + cc_sovr_s: "paso lateral", + cc_sovr_l: ["una fracción del diámetro de la herramienta entre 0 y 1. valores mayores que 0.49 pueden resultar en áreas no cortadas o artefactos indeseables."], + cc_sovc_s: "pasos anchos", + cc_sovc_l: ["número de pasos de corte anchos"], + cc_sang_s: "ángulo de paso", + cc_sang_l: ["rotación en grados entre puntos axiales de torno"], + cc_sdwn_s: "profundidad de paso", + cc_sdwn_l: ["profundidad de paso","para cada pasada","en unidades de espacio de trabajo","0 para deshabilitar"], + cc_thru_s: "corte completo", + cc_thru_l: ["profundidad de corte adicional debajo del fondo de trazo"], + cc_offd_s: "desplazamiento", + cc_offd_l: ["anula la distancia de desplazamiento predeterminada (que es el radio de la herramienta) cuando se establece en cualquier valor distinto de cero"], cc_feed_s: "velocidad de avance", cc_feed_l: ["velocidad máxima de corte en","unidades de espacio de trabajo / minuto"], - cc_plng_s: "tasa de inmersión", + cc_plng_s: "velocidad de inmersión", cc_plng_l: ["velocidad máxima del eje z en","unidades de espacio de trabajo / minuto"], cc_sngl_s: "seleccionar solo líneas", cc_sngl_l: ["seleccionar solo bordes individuales","en lugar de polilíneas conectadas"], + cc_sele_s: "seleccionar", + cc_sele_l: ["seleccionar líneas para seguir","seleccionar bucles para limpiar","seleccionar superficie para cavidad"], // CNC COMMON cc_menu: "límites", - cc_flip: "voltear", cc_rapd_s: "avance xy", cc_rapd_l: ["velocidad máxima de movimientos xy","en unidades de espacio de trabajo / minuto"], cc_rzpd_s: "avance z", cc_rzpd_l: ["velocidad máxima de movimientos z","en unidades de espacio de trabajo / minuto"], - cc_loff_s: "desplazamiento", - cc_loff_l: ["distancia desde la superficie del material","para pasada de nivelación","en unidades de espacio de trabajo"], + // CNC LEVELING + cc_loff_s: "desplazamiento z", + cc_loff_l: ["distancia desde la cara del material","en unidades de espacio de trabajo"], + cc_lxyo_s: "desplazamiento xy", + cc_lxyo_l: ["desplazamiento xy desde el límite de la pieza como fracción del diámetro de la herramienta (0 - 1.0)"], + cc_lsto_s: "material", + cc_lsto_l: ["usar área de material en lugar de área de pieza"], // CNC ROUGHING cr_menu: "desbaste", cr_lsto_s: "dejar material", - cr_lsto_l: ["desplazamiento horizontal de las caras verticale","material para dejar para la pasada de acabado","en unidades de espacio de trabajo"], - cr_ease_s: "ease down", - cr_ease_l: ["cortes de inmersión","bajarán en espiral o suavizarán","siguiendo una ruta lineal"], - cr_clrt_s: "despejar la parte superior", - cr_clrt_l: ["ejecutar una pasada de despeje","por el área delimitante de la pieza","en z = 0"], - cr_clrp_s: "despejar huecos", - cr_clrp_l: ["fresar a través de cavidades","en lugar de solo el contorno"], + cr_lsto_l: ["desplazamiento horizontal desde caras verticales","material a dejar para pasada de acabado","en unidades de espacio de trabajo"], + cr_lstz_s: "dejar material z", + cr_lstz_l: ["desplazamiento vertical para pasadas de desbaste en unidades de espacio de trabajo. mejor para desbastar superficies curvas."], + cr_ease_s: "descenso suave", + cr_ease_l: ["cortes de inmersión","descenderán en espiral o suavizarán","a lo largo de una trayectoria lineal"], + cr_clst_s: "limpiar material", + cr_clst_l: ["en modo indexado, limpiar toda el área de material, no solo hasta el perímetro de la pieza"], + cr_clrt_s: "limpiar superior", + cr_clrt_l: ["ejecutar una pasada de limpieza sobre","el área delimitadora de la pieza","en z = 0"], + cr_clrp_s: "limpiar vacíos", + cr_clrp_l: ["fresar cavidades atravesándolas","en lugar de solo el contorno"], cr_clrf_s: "limpiar caras", - cr_clrf_l: ["interpolar el paso hacia abajo para","limpiar las áreas planas detectadas"], - cr_olin_s: "solo en el interior", - cr_olin_l: ["limitar el corte a","los límites internos de la pieza"], + cr_clrf_l: ["interpolar profundidad de paso para","limpiar cualquier área plana detectada"], + cr_olin_s: "solo interior", + cr_olin_l: ["limitar el corte a","dentro de los límites de la pieza"], // CNC OUTLINE co_menu: "contorno", - co_dogb_s: "dogbones", - co_dogb_l: ["insertar cortes de hueso de perro","en las esquinas interiores"], - co_wide_s: "recorte ancho", - co_wide_l: ["ensanchar las rutas de corte exteriores","para cortes profundos en material duro"], - co_olin_s: "solo en el interior", - co_olin_l: ["limitar el corte a","límites de la parte interior"], - co_olot_s: "sólo exterior", - co_olot_l: ["limitar el corte a","límites de la parte exterior","que se pueden considerar","como el contorno de la sombra"], - co_omit_s: "omitir a través", + co_merg_s: "fusionar superposición", + co_merg_l: ["fusionar líneas superpuestas para evitar sobre-cortar en sólidos adyacentes"], + co_dogb_s: "huesos de perro", + co_dogb_l: ["insertar cortes de hueso de perro","en esquinas interiores"], + co_dogr_s: "invertir huesos", + co_dogr_l: ["invertir dirección de hueso de perro"], + co_clrt_s: "limpiar superior", + co_clrt_l: ["cortar comenzando en la parte superior del material","cuando el material está habilitado"], + co_wide_s: "corte ancho", + co_wide_l: ["ensanchar trayectorias de corte exterior","para cortes profundos en material duro"], + co_olin_s: "solo interior", + co_olin_l: ["limitar el corte a","dentro de los límites de la pieza"], + co_olot_s: "solo exterior", + co_olot_l: ["limitar el corte a","límites exteriores de la pieza","que puede pensarse como","el contorno de la sombra"], + co_omit_s: "omitir completo", co_omit_l: "eliminar agujeros pasantes", + co_omvd_s: "omitir cavidad", + co_omvd_l: "eliminar cavidades interiores", co_olen_s: "habilitar", co_olen_l: "corte de contorno habilitado", // CNC CONTOUR cn_menu: "contorno", cf_angl_s: "ángulo máximo", - cf_angl_l: ["ángulos mayores que este","se consideran verticales"], + cf_angl_l: ["cambios en z que resultan en ángulos mayores que esto se consideran verticales y se omiten de curvas"], + cf_leav_s: "dejar material", + cf_leav_l: ["cantidad de material a dejar sobre la superficie de la pieza"], + cf_botm_s: "z inferior", + cf_botm_l: ["obedecer límite z inferior"], cf_curv_s: "solo curvas", - cf_curv_l: ["limitar la limpieza lineal","a superficies curvas"], + cf_curv_l: ["limitar limpieza lineal","a superficies curvas"], cf_olin_s: "solo interior", - cf_olin_l: ["limitar el corte a","límites de la parte interior"], - cf_linx_s: "habilitar paso y", + cf_olin_l: ["limitar el corte a","dentro de los límites de la pieza"], + cf_linx_s: "habilitar pasada y", cf_linx_l: "acabado lineal del eje y", - cf_liny_s: "habilitar paso x", + cf_liny_s: "habilitar pasada x", cf_liny_l: "acabado lineal del eje x", // CNC TRACE - cu_menu: "traza", + cu_menu: "trazo", cu_type_s: "tipo", - cu_type_l: ["seguir = la punta de la herramienta sigue la línea","derecha o izquierda = punta de la herramienta","sigue el desplazamiento de la línea por el radio de la herramienta"], + cu_type_l: ["limpiar = limpiar una cavidad de línea cerrada","seguir = la punta de la herramienta sigue la línea","con opción de desplazamiento cuando está cerrada"], + + // CNC POCKET + cp_xpnd_s: "expandir", + cp_xpnd_l: ["crecer (+) o encoger (-) áreas seleccionadas","contorno usa toda el área seleccionada","no contorno predeterminado al radio de la herramienta","en unidades de espacio de trabajo"], + cp_smoo_s: "suavizar", + cp_smoo_l: ["limpiar bordes dentados causados por paredes anguladas. puede acelerar y mejorar el cavado para geometrías detalladas. recomendado comenzar con valores alrededor de 1 si el corte toma demasiado tiempo o los contornos se ven dentados"], + cp_foll_s: "selección", + cp_foll_l: ["límite de selección de curvatura en grados. valores más cercanos a 0 restringirán selecciones a superficies más planas"], + cp_refi_s: "refinar", + cp_refi_l: ["número de pasadas de refinamiento a realizar en polilíneas contorneadas. destinado a abordar el serrado de delta Z causado por geometrías facetadas mientras que el suavizado maneja XY. valores > 10 funcionan bien para geometrías suavemente contorneadas con movimiento Z significativo."], + cp_cont_s: "contorno", + cp_cont_l: ["ignorar vacíos y características interiores"], + cp_engr_s: "grabar", + cp_engr_l: ["configura una sola pasada alrededor del perímetro del área seleccionada. también útil para marcado láser 3D"], + cp_outl_s: "solo contorno", + cp_outl_l: ["ignorar vacíos y características interiores"], // CNC DRILLING cd_menu: "taladrar", cd_axis: "eje", cd_points: "puntos", - cd_plpr_s: "inmersión por", - cd_plpr_l: ["inmersión máxima entre","períodos de permanencia","en unidades de espacio de trabajo","0 para deshabilitar"], + // cd_plpr_s: "inmersión por", + // cd_plpr_l: ["inmersión máxima entre","períodos de permanencia","en unidades de espacio de trabajo","0 para deshabilitar"], cd_dwll_s: "tiempo de permanencia", - cd_dwll_l: ["tiempo de permanencia","entre inmersiones en","en milisegundos"], - cd_lift_s: "elevación de perforación", + cd_dwll_l: ["tiempo de permanencia","entre inmersiones en","milisegundos"], + cd_lift_s: "elevación de taladro", cd_lift_l: ["elevación entre inmersiones","después del período de permanencia","en unidades de espacio de trabajo","0 para deshabilitar"], + cd_thru_s: "extensión z", + cd_thru_l: ["extender corte hacia abajo a través del material","en unidades de espacio de trabajo"], + cd_dtru_s: "taladrar completo", + cd_dtru_l: ["profundidad de taladro adicional debajo del fondo de la pieza","anula el z completo global","0 para deshabilitar"], + cd_mark_s: "marcado", + cd_mark_l: ["solo marcar agujeros, no taladrar","la configuración de profundidad de paso se usa","para determinar qué tan profundo marcar"], + cd_ftop_s: "desde la parte superior del material", + cd_ftop_l: ["taladrar desde la parte superior del material","en lugar de la superficie de la pieza"], + cd_prcn_s: "precisión", + cd_prcn_l: ["distancia entre cortes","para buscar agujeros","en unidades de espacio de trabajo","más bajo es más lento y","usa más memoria","0 = solo planos"], + + cd_seli_l: ["seleccionar agujeros individualmente","para taladrar"], + cd_sela_s: "Seleccionar diámetro coincidente", + cd_sela_l: ["seleccionar todos los agujeros que", "coincidan con el diámetro de herramienta seleccionado"], + + //CNC Registration cd_regi_s: "registro", - cd_regi_l: ["agujeros de registro de perforación","para piezas de doble cara","independiente de la habilitación","del taladrado pero utiliza la misma","herramienta y ajustes"], + cd_regi_l: ["taladrar agujeros de registro","para piezas de doble cara","independiente de habilitar","taladrado pero usa la misma","herramienta y configuración"], + cd_rego_s: "desplazamiento de pieza", + cd_rego_l: ["desplazamiento del centro del agujero","desde el cuadro delimitador de la pieza","en unidades de espacio de trabajo"], + + // CNC HELICAL toolpath + ch_menu: "helicoidal", + ch_sdwn_s: "profundidad de paso (paso)", + ch_sdwn_l: ["distancia z","por revolución","en unidades de espacio de trabajo","(inverso de roscas por unidad)", "0 para deshabilitar"], + ch_fsta_s: "forzar ángulo de inicio", + ch_fsta_l: ["anular ángulo de inicio","predeterminado al punto más cercano a la herramienta"], + ch_stra_s: "ángulo de inicio", + ch_stra_l: ["ángulo de inicio de la hélice","en grados ccw del eje +x"], + ch_selc_l: ["seleccionar una cara de cilindro", "agujeros internos que son demasiado pequeños","serán ignorados."], + ch_fini_s: "pasada de acabado inferior", + ch_fini_l: ["trazar un círculo en el fondo de la hélice","usado para limpieza de agujeros"], + ch_entr_s: "entrar desde el centro", + ch_entr_l: ["comenzar corte desde el centro del cilindro","curvándose suavemente horizontalmente", "en lugar de inmersión"], + ch_ento_s: "desplazamiento de entrada central", + ch_ento_l: ["desplazamiento de la trayectoria para entrada curva","usualmente profundidad de rosca si se hace rosca","en unidades de espacio de trabajo","0 para una entrada lineal"], + ch_rvrs_s: "invertir", + ch_rvrs_l: ["invertir dirección del eje z helicoidal","z bajo a z alto cuando está marcado","útil para fresado de roscas","no recomendado para otras operaciones"], + ch_clkw_s: "horario", + ch_clkw_l: ["invertir rotación helicoidal alrededor del cilindro","horario cuando está marcado"], + + // CNC FLIP + cf_menu: "voltear", + cf_nvrt_s: "z inferior", + cf_nvrt_l: "invertir configuración de z inferior para seguir el material", + + // CNC INDEX AXIS + ci_degr_s: "grados", + ci_degr_l: "grados para rotar el eje A (indexado)", + ci_abso_s: "absoluto", + ci_abso_l: "rotación en grados es absoluta", + ci_face_s: "cara", + ci_face_l: "seleccionar cara para rotar mirando hacia arriba", + ci_line_s: "lineal", + ci_line_l: "hacer pasadas lineales a lo largo de X luego rotar Y", + ci_laso_s: "desplazamiento de inicio", + ci_laso_l: ["desplazamiento x desde la izquierda de la pieza. valores negativos están fuera de la pieza. en unidades de espacio de trabajo"], + ci_laeo_s: "desplazamiento de fin", + ci_laeo_l: ["desplazamiento x desde la derecha de la pieza. valores negativos están fuera de la pieza. en unidades de espacio de trabajo"], + + // CNC LASER On/Off Operations (Carvera) + cl_powr_s: "potencia", + cl_powr_l: "potencia láser de 0 a 1.0", + cl_adap_s: "adaptativo", + cl_adap_l: "usar potencia adaptativa basada en altura Z", + cl_adrp_s: "repetitivo", + cl_adrp_l: "aplicar un módulo de altura Z usando la banda dada para hacer patrones repetitivos", + cl_flat_s: "aplanar", + cl_flat_l: "aplanar salida a una altura Z dada", + cl_flaz_s: "altura plana", + cl_flaz_l: ["aplanar salida a esta altura Z", "en unidades de espacio de trabajo"], + cl_minp_s: "potencia mínima z", + cl_minp_l: ["configuración de potencia en la parte más baja de la banda Z. puede ser mayor o menor que el otro extremo de la banda Z."], + cl_maxp_s: "potencia máxima z", + cl_maxp_l: ["configuración de potencia en la parte más alta de la banda Z. puede ser mayor o menor que el otro extremo de la banda Z."], + cl_minz_s: "altura z mínima", + cl_minz_l: ["posición de banda Z más baja"], + cl_maxz_s: "altura z máxima", + cl_maxz_l: ["posición de banda Z más alta. cuando se establece en 0, usa el punto Z más alto del espacio de trabajo"], // CNC CUTOUT TABS ct_menu: "pestañas", ct_angl_s: "ángulo", - ct_angl_l: ["ángulo inicial para el espaciado de pestañas","en grados (0-360)"], + ct_angl_l: ["ángulo inicial para espaciado de pestañas","en grados (0-360)"], ct_numb_s: "cantidad", - ct_numb_l: ["cantidad de pestañas a utilizar","se espaciarán uniformemente","alrededor de la pieza"], + ct_numb_l: ["número de pestañas a usar","se espaciarán uniformemente","alrededor de la pieza"], ct_wdth_s: "ancho", ct_wdth_l: "ancho en unidades de espacio de trabajo", ct_hght_s: "altura", ct_hght_l: "altura en unidades de espacio de trabajo", ct_dpth_s: "profundidad", - ct_dpth_l: ["distancia en unidades de espacio de trabajo","desde la que se proyecta la pestaña","en la superficie de la pieza"], + ct_dpth_l: ["distancia en unidades de espacio de trabajo","que la pestaña proyecta desde","la superficie de la pieza"], ct_midl_s: "línea media", - ct_midl_l: ["usar línea media de la pestaña","en lugar de fondo z","para trabajo a doble cara"], - ct_nabl_s: "auto", - ct_nabl_l: ["autogenerar pestañas radiales","proyectadas desde el centro de la pieza","usando recuento y desplazamiento de ángulo"], + ct_midl_l: ["usar línea media de la pestaña","en lugar de z inferior","para trabajo de doble cara"], + ct_nabl_s: "automático", + ct_nabl_l: ["generar automáticamente pestañas radiales","proyectadas desde el centro de la pieza","usando cantidad y desplazamiento de ángulo"], // OUTPUT ou_menu: "salida", + // LASER SLICING + ls_offs_s: "desplazamiento / anchura de corte", + ls_offs_l: ["distancia entre el centro de la","trayectoria de corte y el borde del material restante","en milímetros"], + ls_lahi_s: "altura de corte", + ls_lahi_l: ["altura de capa","en milímetros","0 = auto/detectar"], + ls_lahm_s: "corte mínimo", + ls_lahm_l: ["altura de capa mínima","fusionará cortes automáticos","bajo este espesor","en milímetros"], + ls_sngl_s: "corte único", + ls_sngl_l: ["realizar solo un corte","a la altura de capa especificada"], + // LASER KNIFE - dk_menu: "cuchillo", + dk_menu: "cuchilla de arrastre", dk_dpth_s: "profundidad de corte", dk_dpth_l: ["profundidad de corte final","en milímetros"], dk_pass_s: "pasadas de corte", - dk_pass_l: ["cantidad de pasadas","hasta la profundidad de corte"], - dk_offs_s: "desplazamiento de la punta", + dk_pass_l: ["número de pasadas","hasta la profundidad de corte"], + dk_offs_s: "desplazamiento de punta", dk_offs_l: ["distancia desde la punta de la hoja","al centro de la herramienta","en milímetros"], - // OUTPUT LASER + // WIRE EDM + we_omit_s: "omitir interior", + we_omit_l: "omitir polígonos interiores", + + // LASER OUTPUT ou_spac_s: "espaciado", - ou_spac_l: ["distancia entre la salida de la capa","en milímetros"], - ou_scal_s: "escala", - ou_scal_l: "multiplicador (0,1 a 100)", + ou_spac_l: ["distancia entre salida de capa","en milímetros"], + ou_scal_s: "escalado", + ou_scal_l: "multiplicador (0.1 a 100)", ou_powr_s: "potencia", ou_powr_l: ["0 - 100","representa %"], ou_sped_s: "velocidad", ou_sped_l: "milímetros / segundo", - ou_mrgd_s: "fusionadas", - ou_mrgd_l: ["fusionar todas las capas usando","codificación de colores para indicar","la profundidad de apilamiento"], - ou_grpd_s: "agrupadas", - ou_grpd_l: ["conservar cada capa como","una agrupación unificada","en lugar de polígonos","separados"], - ou_layr_s: "orden de las capas", - ou_layr_l: ["oorden de las capas de salida","de arriba a la derecha a","abajo a la izquierda"], - ou_layo_s: "color de la capa", - ou_layo_l: ["colores de las capas de salida","para cada índice z","anulado por fusionado"], - ou_drkn_s: "cuchillo de arrastre", - ou_drkn_l: ["habilitar cuchillo de arrastre","salida en gcode","se agregan radios de corte","a las esquinas con","pasadas de corte"], + ou_mrgd_s: "fusionado", + ou_mrgd_l: ["fusionar todas las capas usando","codificación de color para denotar","profundidad de apilamiento"], + ou_grpd_s: "agrupado", + ou_grpd_l: ["retener cada capa como","una agrupación unificada","en lugar de separar","polígonos"], + ou_layr_s: "orden de capas", + ou_layr_l: ["orden de salida de capas","desde arriba a la derecha hasta","abajo a la izquierda"], + ou_layo_s: "color de capa", + ou_layo_l: ["colores de capa de salida","para cada índice z","anulado por fusionado"], + ou_lays_s: "marcado de capa", + ou_lays_l: ["marcar capas para apilamiento. la capa superior se emitirá en un color diferente que el láser puede marcar con menor potencia. activa la agrupación de capas."], + ou_drkn_s: "cuchilla de arrastre", + ou_drkn_l: ["habilitar salida de cuchilla de arrastre","en gcode","radios de corte se agregan","a esquinas con","pasadas de corte hacia abajo"], + ou_stak_s: "apilamiento 3d", + ou_stak_l: ["la salida es un apilamiento 3D de trayectorias 2D en lugar de empaquetar capas planas en 2D"], + ou_maxp_s: "potencia máxima", + ou_maxp_l: ["valor de potencia máxima en gcode. la potencia % de la configuración escalará de 0 a este valor"], + ou_inch_s: "imperial", + ou_inch_l: ["valores de salida en pulgadas"], + ou_shap_s: "herramienta shaper", + ou_shap_l: ["anotar SVG con atributos personalizados de Shaper Tool"], // OUTPUT FDM - ou_nozl_s: "temperatura de la boquilla", - ou_nozl_l: "en grados centígrados", - ou_bedd_s: "temperatura de la cama", - ou_bedd_l: "en grados centígrados", + ou_nozl_s: "temperatura de boquilla", + ou_nozl_l: "grados en celsius", + ou_bedd_s: "temperatura de cama", + ou_bedd_l: "grados en celsius", ou_feed_s: "velocidad de impresión", - ou_feed_l: ["velocidad máxima de impresión","milímetros / segundo"], - ou_fini_s: "velocidad de impresión", - ou_fini_l: ["velocidad de la capa más externad","milímetros / segundo"], + ou_feed_l: ["velocidad máxima de impresión","establecer en 0 para usar predeterminado","milímetros / segundo"], + ou_fini_s: "velocidad de acabado", + ou_fini_l: ["velocidad de pared más externa","capas sólidas de puente/planas","establecer en 0 para usar predeterminado","milímetros / segundo"], ou_move_s: "velocidad de movimiento", ou_move_l: ["velocidad de movimiento sin impresión","milímetros / segundo","0 = habilitar movimientos G0"], - ou_shml_s: "factor de cáscara", + ou_shml_s: "factor de pared", ou_flml_s: "factor sólido", ou_spml_s: "factor de relleno", ou_exml_l: ["multiplicador de extrusión","0.0 - 2.0"], - ou_fans_s: "velocidad del ventilador", + ou_fanl_s: "ventilador en capa", + ou_fanl_l: ["capa # para encender ventilador","las capas comienzan en 0"], + ou_fans_s: "velocidad de ventilador encendido", ou_fans_l: "0 - 255", + ou_layt_s: "tiempo mínimo de capa", + ou_layt_l: ["tiempo mínimo de impresión de capa permitido en segundos. la impresión se ralentizará si la capa se completaría de otra manera en menos segundos.","0 = deshabilitado"], // OUTPUT CAM - ou_toll_s: "tolerancia", - ou_toll_l: ["precisión de superficie","en unidades de espacio de trabajo","menor es más lento y","usa más memoria","0 = basado en automático","en preferencia animada"], - ou_zanc_s: "ancla z", - ou_zanc_l: ["controla el posición de la pieza","cuando el material Z excede la parte Z"], + ou_toll_s: "precisión", + ou_toll_l: ["precisión de superficie","en unidades de espacio de trabajo","más bajo es más lento y","usa más memoria","0 = automático basado","en preferencia de animación"], + ou_flat_s: "planitud", + ou_flat_l: ["delta z por debajo del cual dos puntos adyacentes se consideran colineales. 0 = calcular usando tolerancia"], + ou_redu_s: "reducción", + ou_redu_l: ["número de pasos de eje a omitir por cada unidad de precisión. mayor precisión puede requerir reducción para producir tamaños de archivo razonables. comenzar en 0 y probar en incrementos de 1."], + ou_brdg_s: "puenteo", + ou_brdg_l: ["distancia plana entre áreas curvas","para puentear con un corte"], + ou_zanc_s: "anclaje z", + ou_zanc_l: ["controla la posición de la pieza","cuando z del material excede z de la pieza"], ou_ztof_s: "desplazamiento z", - ou_ztof_l: ["desplazar el ancla z","en unidades de espacio de trabajo","no tiene ningún efecto cuando","el ancla está en el medio"], + ou_ztof_l: ["desplazar anclaje z","en unidades de espacio de trabajo"], + ou_ztop_s: "z superior", + ou_ztop_l: ["desplazamiento desde el fondo del material","para establecer inicio de profundidad de corte","en unidades de espacio de trabajo","* taladro/contorno ignoran esto *"], ou_zbot_s: "z inferior", - ou_zbot_l: ["desplazamiento desde la parte inferior","para limitar la profundidad de corte","en unidades de espacio de trabajo"], - ou_zclr_s: "espacio libre z", - ou_zclr_l: ["desplazamiento seguro del recorrido","desde la parte superior de la pieza","en unidades de espacio de trabajo"], - ou_ztru_s: "a través de z", - ou_ztru_l: ["extender pasada de corte hacia abajo","en unidades de espacio de trabajo"], + ou_zbot_l: ["desplazamiento desde el fondo del material","para limitar la profundidad de corte","en unidades de espacio de trabajo"], + ou_zclr_s: "z despeje", + ou_zclr_l: ["desplazamiento de viaje seguro","desde la parte superior de la pieza","en unidades de espacio de trabajo"], + ou_ztru_s: "z completo", + ou_ztru_l: ["extender pasada de recorte hacia abajo","en unidades de espacio de trabajo"], ou_conv_s: "convencional", - ou_conv_l: ["dirección de fresado","desmarcar para 'subir'"], + ou_conv_l: ["dirección de fresado","desmarcar para 'escalar'"], ou_depf_s: "profundidad primero", - ou_depf_l: ["optimizar cortes empotrados","con prioridad de profundidad"], + ou_depf_l: ["optimizar cortes de cavidad","con prioridad de profundidad"], + ou_inrf_s: "interior primero", + ou_inrf_l: ["siempre cortar de interior a exterior"], + ou_toin_s: "inicialización de herramienta", + ou_toin_l: "agregar cambio de herramienta con la primera operación. cuando está deshabilitado, el gcode asume que la primera herramienta está cargada y el desplazamiento probado", + ou_forz_s: "forzar z máximo", + ou_forz_l: "todos los movimientos entre cavidades irán a z máximo (sobre el material). esto es usualmente requerido si no se está realizando una operación de desbaste antes de operaciones de cavidad.", + ou_z1st_s: "primer z máximo", + ou_z1st_l: "el primer movimiento en el trabajo será a z máximo (distancia de viaje sobre el material)", + ou_feng_s: "factor de enganche", + ou_feng_l: "escala de velocidad (0.1-1) cuando la fresa está completamente enganchada en un nuevo corte. cortes con paso lateral cuando la fresa está menos que completamente enganchada se ejecutan a un factor de 1 relativo a la velocidad de salida. típicamente esto se relaciona con el desbaste o cualquier operación con paso lateral.", + ou_eang_s: "ángulo de suavizado", + ou_eang_l: "ángulo de descenso para descenso suave en grados", // CAM STOCK cs_menu: "material", cs_wdth_s: "ancho", - cs_wdth_l: ["ancho (x) en unidades del espacio de trabajo","0 usa el tamaño de la pieza"], + cs_wdth_l: ["ancho (x) en unidades de espacio de trabajo","0 usa por defecto el tamaño de la pieza"], cs_dpth_s: "profundidad", - cs_dpth_l: ["profundidad (y) en unidades de espacio de trabajo","0 usa el tamaño de la pieza"], + cs_dpth_l: ["profundidad (y) en unidades de espacio de trabajo","0 usa por defecto el tamaño de la pieza"], cs_hght_s: "altura", - cs_hght_l: ["altura (z) en unidades de espacio de trabajo","0 usa el tamaño de la pieza"], + cs_hght_l: ["altura (z) en unidades de espacio de trabajo","0 usa por defecto el tamaño de la pieza"], cs_offs_s: "desplazamiento", - cs_offs_l: ["usar ancho, profundidad, altura","como desplazamientos del tamaño","máximo de pieza en la plataforma"], + cs_offs_l: ["usar ancho, profundidad, altura","como desplazamientos desde el tamaño máximo","de pieza en la plataforma"], cs_clip_s: "recortar a", - cs_clip_l: ["desbaste y delinear","recortar rutas de corte","al material definido"], + cs_clip_l: ["desbaste y contorno","recortar trayectorias de corte","al material definido"], + cs_ishg_s: "mostrar cuadrícula", + cs_ishg_l: ["mostrar cuadrícula de plataforma en modo indexado"], + cs_indx_s: "indexado", + cs_indx_l: ["el material está montado en un indexador rotatorio"], cs_offe_s: "habilitar", cs_offe_l: "habilitar material de fresado", // ORIGIN (CAM & LASER) or_bnds_s: "límites de origen", - or_bnds_l: ["origen relativo al","límite de todos los objetos"], + or_bnds_l: ["el origen es relativo al","límite de todos los objetos"], or_cntr_s: "centro de origen", - or_cntr_l: "origen referenciado desde el centro", + or_cntr_l: "el origen se referencia desde el centro", or_topp_s: "origen superior", - or_topp_l: "origen es referenciado desde la parte superior de los objetos", + or_topp_l: "el origen se referencia desde la parte superior de los objetos", + or_offx_s: "desplazamiento de origen X", + or_offx_l: "desplazamiento de origen X", + or_offy_s: "desplazamiento de origen Y", + or_offy_l: "desplazamiento de origen Y", + + // CAM ORIGIN + co_menu: "origen", + co_offx_s: "desplazamiento x", + co_offx_l: ["desplazar origen a lo largo del eje x","en unidades de espacio de trabajo"], + co_offy_s: "desplazamiento y", + co_offt_l: ["desplazar origen a lo largo del eje y","en unidades de espacio de trabajo"], + co_offz_s: "desplazamiento z", + co_offz_l: ["desplazar origen a lo largo del eje z","en unidades de espacio de trabajo"], // FDM ADVANCED ad_menu: "experto", ad_rdst_s: "distancia de retracción", - ad_rdst_l: ["cantidad de filamento a retraer","para movimientos largos. en milímetros"], + ad_rdst_l: ["cantidad para retraer filamento","para movimientos largos. en milímetros"], ad_rrat_s: "velocidad de retracción", - ad_rrat_l: ["velocidad del filamento","retracción en mm/s"], - ad_rdwl_s: "activar el reposo", - ad_wpln_s: "retracción de barrido", - ad_wpln_l: ["movimiento sin impresión","después de la retracció","en milímetros"], - ad_rdwl_l: ["tiempo hasta volver a activar","filamento y movimiento","en milisegundos"], - ad_scst_s: "costa de la cáscara", - ad_scst_l: ["extremo no imprimible","de las cáscaras perimetrales","en milímetros"], - ad_msol_s: "mínimo sólido", - ad_msol_l: ["área mínima (en mm^2)","requerida para mantenerse sólido","debe ser > 0.1"], + ad_rrat_l: ["velocidad de retracción","de filamento en mm/s"], + ad_rdwl_s: "permanencia de enganche", + ad_wpln_s: "limpieza de retracción", + ad_wpln_l: ["movimiento sin impresión","después de retracción","en milímetros"], + ad_rdwl_l: ["tiempo entre re-enganchar","filamento y movimiento","en milisegundos"], + ad_scst_s: "costa de pared", + ad_scst_l: ["final sin impresión","de paredes perimetrales","en milímetros"], + ad_msol_s: "filtro de área", + ad_msol_l: ["área mínima (mm^2)","puentes y planos menores que esto se eliminan"], ad_mins_s: "velocidad mínima", ad_mins_l: ["velocidad mínima","para segmentos cortos"], - ad_spol_s: "ruta corta", - ad_spol_l: ["los polígonos más cortos que este","tendrán su velocidad de impresión","reducida a velocidad mínima","en milímetros"], + ad_maxf_s: "flujo máximo", + ad_maxf_l: ["tasa de flujo volumétrico máximo soportado por este cabezal de impresión y filamento","en milímetros^3 / segundo"], + ad_scar_s: "longitud de bisel", + ad_scar_l: ["longitud de subida para junta de bisel. deshabilita detección de arco","0 = deshabilitado"], + ad_spol_s: "trayectoria corta", + ad_spol_l: ["polígonos más cortos que esto","tendrán su velocidad de impresión","reducida a velocidad mínima","en milímetros"], ad_arct_s: "tolerancia de arco", - ad_arct_l: ["convertir líneas facetadas en arcos","tolerancia de deriva del punto central","al hacer coincidir puntos de arco","considerar valores alrededor de 0.15","en milímetros","0 para deshabilitar"], - ad_zhop_s: "distancia z de salto", - ad_zhop_l: ["cantidad de elevación z","en movimientos de retracción","en milímetros","0 para deshabilitar"], - ad_abkl_s: "anti-retroceso", - ad_abkl_l: ["para un mejor acabado de superficies planas","usa micro-movimientos para cancelar","el retroceso en salida de capas planas","en milímetros","0 para deshabilitar","si su firmware tiene M425","poner eso en el encabezado de gcode","y dejar este valor 0"], - ad_lret_s: "retraer la capa", - ad_lret_l: ["forzar la retracción del filamento","entre capas"], + ad_arct_l: ["convertir líneas facetadas a arcos","tolerancia de deriva de punto central","al coincidir puntos de arco","considerar valores alrededor de 0.15","valor en milímetros","0 o bisel deshabilita esto"], + ad_zhop_s: "distancia de salto z", + ad_zhop_l: ["cantidad para elevar z","en movimientos de retracción","en milímetros","0 para deshabilitar"], + ad_abkl_s: "anti-contragolpe", + ad_abkl_l: ["para mejor acabado de superficie plana","usar micro-movimientos para cancelar","contragolpe en salida de capa sólida","en milímetros","0 para deshabilitar","si su firmware tiene M425","poner eso en el encabezado gcode","y dejar esto como 0"], + ad_lbir_s: "cinta primero", + ad_lbir_l: ["siempre imprimir paredes que tocan la cinta antes que cualquier otra pared. esta ya no es una configuración recomendada basándose en pruebas exhaustivas."], + ad_altr_s: "alternante", + ad_altr_l: ["alternar orden de enrollado de pared","horario / antihorario","puede reducir deformación en áreas delgadas","y ayudar con adherencia del borde de la cinta"], + ad_zint_s: "intercalar z", + ad_zint_l: ["intercalar alturas Z con paredes de número impar"], + ad_lret_s: "forzar retracción", + ad_lret_l: ["forzar retracción de filamento entre capas"], + ad_agap_s: "evitar espacios", + ad_agap_l: ["rodear espacios en lugar","de realizar una retracción","cuando sea posible"], ad_play_s: "pulir capas", - ad_play_l: ["pulir hasta el nivel especificado","número de capas a la vez"], + ad_play_l: ["pulir hasta el número especificado","de capas a la vez"], ad_pspd_s: "velocidad de pulido", - ad_pspd_l: ["velocidad de pulido","en milímetros / minuto"], + ad_pspd_l: ["velocidad de pulido","en milímetros / segundo"], + ad_purg_s: "torre de purga", + ad_purg_l: ["área de torre de purga en mm^2","para configuraciones multi-extrusor","0 = deshabilitado"], // CAM EXPERT cx_fast_s: "omitir sombra", - cx_fast_l: ["deshabilitar la detección de voladizos","puede ser más rápido y usar menos","memoria en modelos complejos","pero falla con voladizos","intente habilitar si al hacer cortes","se cuelga durante el sombreado"], + cx_fast_l: ["deshabilitar detección de voladizo","puede ser más rápido y usar menos","memoria con modelos complejos","pero falla con voladizos","intente habilitar si el corte","se cuelga durante el sombreado"], + cx_true_s: "sombra verdadera", + cx_true_l: ["sombra computacionalmente correcta","será más lento pero producirá","mejores cortes para piezas complejas"], + cx_arce_s: "salida de arco", + cx_arce_l: ["EXPERIMENTAL: habilitar conversión de trayectoria a arco"], + cx_arct_s: "tolerancia de arco", + cx_arct_l: ["convertir trayectorias circulares a arcos;","tolerancia de deriva de punto central","al coincidir puntos de arco","considerar valores alrededor de 0.15","en mm, o 0.006 pulgadas;","Valores altos pueden causar","comportamiento inesperado","0 para deshabilitar"], + cx_arcr_s: "resolución de arco", + cx_arcr_l: ["cambio en dirección de línea","aceptable en un arco","considerar valores alrededor de 5","Valores altos pueden causar","comportamiento inesperado",], // FDM GCODE ag_menu: "gcode", ag_nozl_s: "boquilla", ag_nozl_l: "seleccionar boquilla o cabezal de salida", - ag_peel_s: "protector de desprendimiento", - ag_peel_l: ["comenzando en esta posición z de la cinta","enrollar periódicamente la impresión, y","retroceder la cinta para despegarla","y evitar la desviación rodante"], - ag_paws_s: "capas de pausa", - ag_paws_l: ["lista de capas separadas por comas","antes de las cuales inyectar comandos de pausa"], - ag_loop_s: "capas de bucle", - ag_loop_l: ["rangos de capas para repetir en el formato","primera-última-cuenta, primera-última-cuenta,...","conteo omitido = 1"], + ag_peel_s: "protector de despegue", + ag_peel_l: ["comenzando en esta posición z de cinta","periódicamente rodar la impresión fuera y","de vuelta a la cinta para despegarla","y prevenir deflexión por rodadura"], + // ag_paws_s: "capas de pausa", + // ag_paws_l: ["lista separada por comas de capas","para inyectar comandos de pausa antes"], + // ag_loop_s: "capas de bucle", + // ag_loop_l: ["rangos de capas para repetir en el formato","primera-última-cuenta,primera-última-cuenta,...","cuenta omitida = 1"], + ag_loop_s: "cuenta de bucle", + ag_loop_l: ["número de veces para repetir","el rango seleccionado o toda","la impresión si no hay rango"], // SLA MENU sa_menu: "corte", sa_lahe_s: "altura de capa", sa_lahe_l: ["altura de capa","en milímetros"], - sa_shel_s: "cáscara hueca", - sa_shel_l: ["espesor de capa en mm","usar múltiplos de altura de capa","usar 0 para sólido (deshabilitado)"], + sa_shel_s: "carcasa hueca", + sa_shel_l: ["espesor de carcasa en mm","usar múltiplo de altura de capa","usar 0 para sólido (deshabilitado)"], sa_otop_s: "parte superior abierta", - sa_otop_l: ["si la cáscara está habilitada","da como resultado una parte superior abierta"], + sa_otop_l: ["si la carcasa está habilitada","resulta en una parte superior abierta"], sa_obas_s: "base abierta", - sa_obas_l: ["si la cáscara está habilitada","da como resultado una base abierta","deshabilitado si se usan soportes"], + sa_obas_l: ["si la carcasa está habilitada","resulta en una base abierta","deshabilitado con soportes"], sa_layr_m: "capas", - sa_lton_s: "luz de tiempo", - sa_lton_l: ["luz de capa activada","tiempo en segundos"], - sa_ltof_s: "luz de tiempo desactivada", - sa_ltof_l: ["luz de capa desactivada","tiempo en segundos"], - sa_pldi_s: "distancia de pelado", - sa_pldi_l: ["distancia de pelado","en milímetros"], - sa_pllr_s: "tasa de elevación de pelado", - sa_pllr_l: ["velocidad de elevación de pelado","en mm/sec"], - sa_pldr_s: "tasa de caída de pelado", - sa_pldr_l: ["velocidad de caída de pelado","en mm/sec"], + sa_lton_s: "tiempo de luz encendida", + sa_lton_l: ["luz de capa encendida","tiempo en segundos"], + sa_ltof_s: "tiempo de luz apagada", + sa_ltof_l: ["luz de capa apagada","tiempo en segundos"], + sa_pldi_s: "distancia de despegue", + sa_pldi_l: ["distancia de despegue","en milímetros"], + sa_pllr_s: "tasa de elevación de despegue", + sa_pllr_l: ["velocidad de elevación de despegue","en mm/seg"], + sa_pldr_s: "tasa de caída de despegue", + sa_pldr_l: ["velocidad de caída de despegue","en mm/seg"], sa_base_m: "base", - sa_balc_s: "recuento de capas", - sa_balc_l: ["cantidad de","capas base"], - sa_bltn_l: ["luz de la capa base activada","tiempo en segundos"], - sa_bltf_l: ["luz de la capa base desactivada","tiempo en segundos"], + sa_balc_s: "cantidad de capas", + sa_balc_l: ["número de","capas base"], + sa_bltn_l: ["luz de capa base encendida","tiempo en segundos"], + sa_bltf_l: ["luz de capa base apagada","tiempo en segundos"], sa_infl_m: "relleno", sa_ifdn_s: "densidad", - sa_ifdn_l: ["porcentaje de relleno","requiere cáscara","0 = deshabilitado","válido 0.0 - 1.0"], + sa_ifdn_l: ["porcentaje de relleno","requiere carcasa","0 = deshabilitado","válido 0.0 - 1.0"], sa_iflw_s: "ancho de línea", sa_iflw_l: ["ancho de línea de trama","en milímetros"], @@ -633,18 +965,18 @@ self.lang['es-es'] = { sa_slyr_s: "capas base", sa_slyr_l: ["capas base de soporte","rango de valores 0-10"], sa_slgp_s: "capas de separación", - sa_slgp_l: ["cantidad de capas entre","la balsa y fondo del objeto"], + sa_slgp_l: ["número de capas entre","balsa y parte inferior del objeto"], sa_sldn_s: "densidad", - sa_sldn_l: ["utilizada para calcular la","cantidad de pilares de soporte","0.0-1.0 (0 = deshabilitar)"], + sa_sldn_l: ["usado para calcular el","número de pilares de soporte","0.0-1.0 (0 = deshabilitar)"], sa_slsz_s: "tamaño", sa_slsz_l: ["tamaño máximo de un","pilar de soporte","en milímetros"], sa_slpt_s: "puntos", - sa_slpt_l: ["cantidad de puntos en","cada pilar de soporte","en milímetros"], + sa_slpt_l: ["número de puntos en","cada pilar de soporte","en milímetros"], sl_slen_l: "habilitar soportes", sa_outp_m: "salida", sa_opzo_s: "desplazamiento z", - sa_opzo_l: ["desplazamiento de capa z","casi siempre es 0.0","0.0-1.0 en milímetros"], - sa_opaa_s: "suavizado", - sa_opaa_l: ["acctivar suavizado","produce archivos más grandes","puede eliminar detalles"] + sa_opzo_l: ["desplazamiento de capa z","casi siempre 0.0","0.0-1.0 en milímetros"], + sa_opaa_s: "antialiasing", + sa_opaa_l: ["habilitar antialiasing","produce archivos más grandes","puede difuminar detalles"] }; diff --git a/web/kiri/lang/fr.js b/web/kiri/lang/fr.js index 27536843..fc0ead11 100644 --- a/web/kiri/lang/fr.js +++ b/web/kiri/lang/fr.js @@ -6,80 +6,110 @@ self.lang['fr-fr'] = { animate: "animer", // CAM animate button arrange: "organiser", // layout workspace objects axis: "axe", // left object scale pop menu + back: "retour", clear: "effacer", // clear workspace (remove all objects) copy: "copier", + clone: "cloner", // create duplicate delete: "supprimer", detail: "détail", done: "terminé", - enable: "permettre", + edit: "éditer", + enable: "activer", + disable: "désactiver", + donate: "donner", export: "exporter", files: "fichiers", + filter: "filtrer", + front: "avant", + fullscreen: "plein écran", help: "aide", ghost: "translucide", // left render pop menu (wireframe) hide: "cacher", // left render pop menu (invisible) - home: "position d'origine", + home: "origine", import: "importer", + install: "installer", language: "langue", - machine: "machine", // device or machine + left: "gauche", + machines: "machines", // device or machine + mesh: "maillage", // mesh editing metric: "métrique", name: "nom", - prefs: "préfs", // left menu "preferences" + new: "nouveau", // file new + off: "désactivé", // turn something off (like a lightbulb) + on: "activé", // turn something on (like a lightbulb) + profs: "profils", // right menu "profiles" + prefs: "préférences", // right menu "preferences" preview: "prévisualiser", recent: "récent", + rename: "renommer", render: "rendu", // left render pop menu - reset: "remettre", - rotate: "tourner", // left rotate pop menu + reset: "réinitialiser", + right: "droite", + rotate: "rotation", // left rotate pop menu save: "sauvegarder", scale: "échelle", // left object scale pop menu - setup: "setup", + select: "sélectionner", + setup: "configuration", settings: "paramètres", size: "taille", + slice: "trancher", solid: "solide", // view type pop menu + start: "démarrer", tool: "outil", tools: "outils", // CAM tool menu button top: "haut", - type: "genre", // CAM tool type + type: "type", // CAM tool type + uninstall: "désinstaller", version: "version", view: "vue", // left view pop menu wire: "filaire", // left render pop menu + volume: "volume", // device build area - acct_xpo: ["faites une sauvegarde de votre machine","et des profils des machines avec","l'option d'inclure les","objets et positions d'environnement"], + acct_xpo: ["faites une sauvegarde de votre appareil","et des profils d'appareil avec","l'option d'inclure les objets","de l'espace de travail et les positions"], // RIGHT-CLICK CONTEXT MENU - rc_clws: "effacer l'environnement", - rc_xpws: "exporter l'environnement", + rc_clws: "effacer l'espace de travail", + rc_xpws: "exporter l'espace de travail", rc_lafl: "poser à plat", - rc_mirr: "refléter", + rc_mirr: "miroir", rc_dupl: "dupliquer", - rc_xstl: "exporter en STL", + rc_focs: "définir le focus", + rc_heal: "réparer les maillages", + rc_swap: "remplacer les sommets", + rc_xobj: "exporter OBJ", + rc_xstl: "exporter STL", + sb_info: ["vitesse d'impression","en mm/s"], + rc_merg: "fusionner les maillages d'objets", + rc_splt: "isoler les corps", // DEVICE MENU and related dialogs - dm_sldt: "sélectionner un genre de machine", - dm_stdd: "machines standards", - dm_mydd: "mes machines", - dm_seld: "machine sélectionnée", + dm_sldt: "sélectionner un type d'appareil", + dm_stdd: "appareils standards", + dm_mydd: "mes appareils", + dm_seld: "appareil sélectionné", dm_rcnt: "fichiers récents", - dm_savs: "paramètres sauvegardés", + dm_savs: "paramètres", dm_appp: "Préférences d'Application", // CAM Tool Dialog - td_tyem: "plat", // end mill - td_tybm: "boule", // ball mill - td_tytm: "v forme", // taper mill + td_tyem: "plat", // end mill + td_tybm: "boule", // ball mill + td_tytm: "conique", // taper mill + td_tydr: "foret", // drill td_tonm: "outil #", - td_shft: "tige", // endmill shaft specs - td_flut: "flûte", // endmill flute specs - td_tapr: "cône", // endmill taper specs + td_shft: "tige", // endmill shaft specs + td_flut: "cannelure", // endmill flute specs + td_tapr: "cône", // endmill taper specs // DEVICE dialog groups - dv_gr_dev: "périphérique", + dv_gr_dev: "appareil", dv_gr_ext: "extrudeur", dv_gr_out: "sortie", dv_gr_gco: "macros gcode", // DEVICE dialog (_s = label, _l = hover help) dv_name_s: "nom", - dv_name_l: "nom du matériel", + dv_name_l: "nom de l'appareil", dv_fila_s: "filament", dv_fila_l: "diamètre en millimètres", dv_nozl_s: "buse", @@ -90,72 +120,119 @@ self.lang['fr-fr'] = { dv_bedd_l: "unités de l'espace de travail", dv_bedh_s: "hauteur", dv_bedh_l: ["hauteur de construction maximale","en unités de l'espace de travail"], - dv_spmx_s: "max spindle", - dv_spmx_l: ["max spindle rpm speed","0 to disable"], + dv_rezx_s: "résolution X", + dv_rezx_l: ["résolution x"], + dv_rezy_s: "résolution Y", + dv_rezy_l: ["résolution y"], + dv_zmax_s: "limite de vitesse axe Z", + dv_zmax_l: ["vitesse maximale de l'axe Z","en millimètres / seconde","0 pour désactiver"], + dv_time_s: "facteur de temps de sortie", + dv_time_l: ["modificateur pour les estimations de temps d'impression","dans le dialogue d'export gcode","augmenter ou diminuer la valeur selon vos","temps d'impression prévus vs observés"], + dv_spmx_s: "vitesse broche max", + dv_spmx_l: ["vitesse max de la broche en tr/min","0 pour désactiver"], dv_xtab_s: "positionnement absolu", - dv_xtab_l: "déplacements extrusion absolu", + dv_xtab_l: "mouvements d'extrusion absolus", dv_orgc_s: "origine au centre", - dv_orgc_l: "origin du plateau au centre", + dv_orgc_l: "origine du plateau au centre", // dv_orgt_s: "origin top", // dv_orgt_l: "part z origin top", dv_bedc_s: "plateau circulaire", - dv_bedc_l: "le plateau du matériel est circulaire", - dv_belt_s: "plateau tapis-roulant", - dv_belt_l: "plateau à impression continue", + dv_bedc_l: "le plateau de l'appareil est circulaire", + dv_belt_s: "plateau à bande", + dv_belt_l: "plateau d'impression continu", + dv_fsrc_s: "source de filament", + dv_fsrc_l: ["comment le filament est alimenté\ndans l'extrudeur"], dv_retr_s: "rétraction firmware", - dv_retr_l: ["le firmware supporte G10/G11"], + dv_retr_l: ["le firmware de l'appareil supporte G10/G11"], dv_fanp_s: "refroidissement", - dv_fanp_l: "régler la puissance du ventilateur de refroidissement", + dv_fanp_l: "définir la puissance du ventilateur de refroidissement", + dv_feat_s: "fonctionnalité", + dv_feat_l: "injecter du code pour les fonctionnalités spécifiées", dv_prog_s: "progression", - dv_prog_l: "résultats de chaque % de progression", + dv_prog_l: "sortie à chaque % de progression", dv_layr_s: "couche", - dv_layr_l: ["résultats de chaque","changement de couche"], - dv_tksp_s: "délimiteur d'instruction", - dv_tksp_l: ["ajouter un espace","entre les paramètres des axes","G0X0Y0X0","vs","G0 X0 Y0 Z0"], - dv_strc_s: "éliminer les commentaires", - dv_strc_l: ["éliminer les commentaires du gcode","les commentaires débutent par ;"], - dv_fext_s: "extension du fichier", - dv_fext_l: "extension du nom de fichier", - dv_dwll_s: "dwell", - dv_dwll_l: "script gcode dwell", - dv_tool_s: "changement d'outil", + dv_layr_l: ["sortie à chaque","changement de couche"], + dv_tksp_s: "espaceur de jeton", + dv_tksp_l: ["ajouter un espace entre","les paramètres d'axe gcode","G0X0Y0Z0","vs","G0 X0 Y0 Z0"], + dv_strc_s: "supprimer les commentaires", + dv_strc_l: ["supprimer les commentaires gcode","les commentaires commencent par ;"], + dv_fext_s: "extension de fichier", + dv_fext_l: "extension de nom de fichier", + dv_lazr_s: "activer le laser", + dv_lazr_l: ["activer les opérations laser"], + + dv_dwll_s: "pause", + dv_dwll_l: "script gcode de pause", + dv_tool_s: "outil", dv_tool_l: "script de changement d'outil", - dv_sspd_s: "spindle speed", - dv_sspd_l: "set spindle speed", + dv_sspd_s: "broche", + dv_sspd_l: "définir la vitesse de broche", dv_paus_s: "pause", dv_paus_l: "script gcode de pause", - dv_head_s: "header", - dv_head_l: "script gcode de démarrage", - dv_foot_s: "footer", - dv_foot_l: "script gcode de fin", - dv_lzon_s: "laser on", - dv_lzon_l: "gcode laser on script", - dv_lzof_s: "laser off", - dv_lzof_l: "gcode laser off script", + dv_head_s: "en-tête", + dv_head_l: "script gcode d'en-tête", + dv_foot_s: "pied de page", + dv_foot_l: "script gcode de pied de page", + dv_pext_s: "extérieur", + dv_pext_l: ["script gcode exécuté avant","l'impression des lignes extérieures"], + dv_pint_s: "intérieur", + dv_pint_l: ["script gcode exécuté avant","l'impression des lignes intérieures"], + dv_lzon_s: "laser activé", + dv_lzon_l: "script gcode laser activé", + dv_lzof_s: "laser désactivé", + dv_lzof_l: "script gcode laser désactivé", + + dv_waon_s: "eau activée", + dv_waon_l: "script gcode pompe à eau activée", + dv_waof_s: "eau désactivée", + dv_waof_l: "script gcode pompe à eau désactivée", + + dv_dkon_s: "couteau bas", + dv_dkon_l: "script gcode couteau bas", + dv_dkof_s: "couteau haut", + dv_dkof_l: "script gcode couteau haut", + dv_exts_s: "sélectionner", - dv_exts_l: "gcode pour activer cet extrudeur", + dv_exts_l: "gcode exécuté pour activer cet extrudeur", dv_dext_s: "désélectionner", - dv_dext_l: "gcode à lancer avant d'activer un autre extrudeur", + dv_dext_l: "gcode exécuté avant d'activer un autre extrudeur", dv_extd_s: "désélectionner", - dv_extd_l: "gcode pour désactiver cet extrudeur", + dv_extd_l: "gcode pour désélectionner cet extrudeur", dv_exox_s: "décalage x", dv_exox_l: "décalage de buse en x", dv_exoy_s: "décalage y", dv_exoy_l: "décalage de buse en y", + dv_paid_s: "identifiant d'imprimante", + dv_paid_l: ["identifiant d'imprimante unique","peut être inventé"], + dv_paps_s: "espacement de ping", + dv_paps_l: ["consommation minimale de filament","entre les pings en millimètres","recommandé 500 - 1000","0 = désactiver les pings"], + dv_pafe_s: "longueur d'alimentation", + dv_pafe_l: ["longueur du tube d'alimentation en millimètres","court=570, moyen=800, long=1100"], + dv_papl_s: "longueur de poussée", + dv_papl_l: ["distance entre l'engrenage de l'extrudeur","et la pointe de la buse en millimètres"], + dv_paof_s: "longueur de décalage", + dv_paof_l: ["longueur à ajouter ou retirer du","premier segment en millimètres","généralement 0"], + dv_pahe_s: "temps de chauffage", + dv_pahe_l: ["décalage par rapport à la valeur par défaut"], + dv_paco_s: "temps de refroidissement", + dv_paco_l: ["décalage par rapport à la valeur par défaut"], + dv_pacm_s: "temps de compression", + dv_pacm_l: ["décalage par rapport à la valeur par défaut"], + // MODE mo_menu: "mode", mo_fdmp: "Impression FDM", mo_slap: "Impression SLA", - mo_lazr: "Découpe / gravure Laser", - mo_cncm: "Routeur CNC", + mo_lazr: "Découpe Laser", + mo_cncm: "Fraisage CNC", // SETUP - su_menu: "installation", - su_devi: "Matériels", + su_menu: "configuration", + su_devi: "Appareils", su_tool: "Outils", su_locl: "Local", - su_xprt: "Exporter", + su_xprt: "Export", su_help: "Aide", // LOAD @@ -166,14 +243,14 @@ self.lang['fr-fr'] = { // FUNCTION fn_menu: "action", fn_arra: "Organiser", - fn_slic: "Découper", + fn_slic: "Trancher", fn_prev: "Prévisualiser", fn_expo: "Exporter", // VIEW vu_menu: "vue", vu_home: "Origine", - vu_rset: "RAZ", + vu_rset: "Réinitialiser", vu_sptp: "Haut", vu_spfr: "Avant", vu_splt: "Gauche", @@ -188,49 +265,68 @@ self.lang['fr-fr'] = { op_menu: "interface", op_disp: "affichage", op_xprt_s: "expert", - op_xprt_l: "afficher plus d'options de paramétrage", - op_decl_s: "logos", - op_decl_l: "montrer les logos des appareils", - op_dang_s: "expérimental", - op_dang_l: "montrer les paramètres expérimentaux", - op_hopo_s: "survol du menu", - op_hopo_l: ["activer le survol du menu", "pour activer"], + op_xprt_l: "afficher plus d'options de paramètres", + op_decl_s: "afficher les décalcomanies", + op_decl_l: "afficher les décalcomanies et logos d'appareils", + op_shny_s: "rendu détaillé", + op_shny_l: "choisir une méthode de rendu de tranche plus lente qui utilise l'éclairage spéculaire. cela facilite la visualisation des détails dans certains modèles au détriment de la vitesse de rendu", + op_devl_s: "développeur", + op_devl_l: ["afficher les options de développeur","activer le débogage développeur"], + op_hopo_s: "popup au survol", + op_hopo_l: ["activer le survol du menu","pour l'activation"], op_dark_s: "mode sombre", op_dark_l: "interface en mode sombre", - op_comp_s: "ui compacte", - op_comp_l: ["interface utilisateur compacte", "plus adapté aux petits écrans", "et tablettes"], - op_shor_s: "montrer l'origine", - op_shor_l: "indiquer l'origine du dispositif ou du processus", + op_comp_s: "interface compacte", + op_comp_l: ["interface utilisateur compacte","mieux adapté aux petits écrans","et tablettes"], + op_shor_s: "afficher l'origine", + op_shor_l: "afficher l'origine de l'appareil ou du processus", op_shru_s: "afficher les règles", - op_shru_l: ["montrer les règles des axes", "sur le quadrillage"], + op_shru_l: ["afficher les règles des axes","sur les lignes de grille principales"], op_sped_s: "afficher les vitesses", - op_sped_l: ["afficher la vitesse en barre de couleur","en mode prévisualisation"], + op_sped_l: ["afficher la barre vitesse-couleur","en mode prévisualisation"], op_auto_s: "disposition automatique", - op_auto_l: ["disposition automatique sur le plateau", "lorsque de nouveaux éléments sont ajoutés"], + op_auto_l: ["disposer automatiquement la plateforme","lors de l'ajout de nouveaux éléments"], op_free_s: "disposition libre", - op_free_l: ["autoriser la disposition déplaçable","sans effet en mode laser"], + op_free_l: ["permettre la disposition déplaçable","sans effet en mode laser"], op_spcr_s: "espacement", - op_spcr_l: ["espacement entre les objets", "avec la disposition automatique", "en unités d'espace de travail"], - op_invr_s: "inverser zoom", - op_invr_l: ["inverser la molette de la souris", "faire défiler le zoom"], - op_save_s: "auto enregt", - op_save_l: ["préserve les objets dans l'espace de travail","entre rechargement de l'application"], + op_spcr_l: ["espacement entre les objets","lors de la disposition automatique","en unités d'espace de travail","en mode bande, utiliser 0","pour espacer automatiquement par hauteur"], + op_spoa_s: "angle de bord", + op_spoa_l: ["différence d'angle de surface déclenchant une trace de bord"], + op_spcx_s: "X aléatoire", + op_spcx_l: ["en mode bande, disposer","aléatoirement la pièce sur X","pour une usure uniforme de la bande"], + op_orth_s: "orthographique", + op_orth_l: ["affichage orthographique","nécessite un rafraîchissement de la page"], + op_anta_s: "anti-crénelage", + op_anta_l: ["affichage lissé. meilleur mais plus lent","nécessite un rafraîchissement de page"], + op_invr_s: "inverser le zoom", + op_invr_l: ["inverser le défilement","du zoom à la molette"], + op_save_s: "sauvegarde auto", + op_save_l: ["préserver les objets dans l'espace de travail","entre les rechargements d'application"], op_line_s: "type de ligne", - op_line_l: ["style de ligne pour le rendu","impacte les performances 3d","chemin: 3d meilleur","plat: 2d bon","ligne = 1d rapide"], + op_line_l: ["style de ligne pour le rendu de chemin","impacte les performances 3D","chemin: 3d meilleur","plat: 2d bon","ligne = 1d rapide"], op_unit_s: "unités", - op_unit_l: ["les unités d'espace de travail affectent","vitesses et distances"], + op_unit_l: ["les unités de l'espace de travail affectent","les vitesses et distances"], op_anim_s: "animer", - op_anim_l: ["densité du maillage de l'animation","plus haut = plus dense","nécessite plus de mémoire","et est plus lent"], + op_anim_l: ["densité du maillage d'animation","plus élevé est plus dense","nécessite plus de mémoire","et est plus lent"], + op_exgl_l: ["afficher les appareils Grid:Local dans le dialogue d'export","inclut les plugins Grid:Bots et OctoPrint"], + op_exgh_l: ["support réseau local Grid:Host legacy"], + op_exop_l: ["support réseau local OctoPrint legacy","plugin Grid:Space OctoPrint recommandé"], lo_menu: "disposition", - pt_menu: "pièces", - pt_deci_s: "compression", - pt_deci_l: ["activer / désactiver la compression","durant l'importation. Tranchage plus rapide","et usage réduit de la mémoire"], - pt_qual_s: "qualité", - pt_qual_l: ["niveau de détail à garder", "lors des opérations de tranchage", "plus bas = plus rapide"], - pt_heal_s: "correction de maillage", - pt_heal_l: ["tentative de correction", "des mailles non-fermées", "accroit le temps de tranchage"], + pt_menu: "trancheuse", + pt_deci_s: "décimer", + pt_deci_l: ["activer ou désactiver la décimation de points","pendant l'importation. pour un tranchage plus rapide","et une utilisation mémoire plus faible"], + pt_qual_s: "détail", + pt_qual_l: ["niveau de détail à conserver pendant les opérations de tranchage. plus bas est plus rapide et utilise moins de mémoire. les modèles à grande échelle ne bénéficient souvent pas d'un détail plus élevé. au lieu de cela, cela peut seulement entraîner des problèmes de mémoire et de traitement. réduire cette valeur en cas d'erreurs de mémoire insuffisante."], + pt_heal_s: "réparer le maillage", + pt_heal_l: ["tenter de réparer les maillages non-manifold pendant le tranchage. peut augmenter le temps de tranchage. active un avertissement lors de la détection de géométries non-manifold."], + pt_thrd_s: "multithread", + pt_thrd_l: ["utiliser le traitement parallèle lorsque le navigateur supporte les workers imbriqués. peut augmenter la pression mémoire sur les modèles plus grands. désactiver en cas d'erreurs de mémoire insuffisante"], + pt_assy_s: "web asm", + pt_assy_l: ["utiliser le web assembly lorsque supporté par le navigateur. en cas d'artefacts ou d'erreurs mémoire, essayer de désactiver ceci."], + pt_wgpu_s: "web gpu", + pt_wgpu_l: ["utiliser le web gpu lorsque supporté par le navigateur. en cas d'artefacts ou d'erreurs mémoire, essayer de désactiver ceci."], xp_menu: "exports", @@ -239,404 +335,648 @@ self.lang['fr-fr'] = { se_load: "charger", se_save: "sauvegarder", - // FDM SLICING + // FDM LAYERS sl_menu: "couches", - sl_lahi_s: "hauteur", - sl_lahi_l: ["hauteur de chaque couche", "couche en millimètres"], - ad_minl_s: "hauteur min", - ad_minl_l: ["hauteur de couche minimale adaptative", "en millimètres", "doit être non nulle"], - sl_ltop_s: "couches du haut", - sl_ltop_l: ["nombre de couches solides", "à appliquer en", "haut de l'impression"], + sl_angl_s: "angle de tranche", + sl_angl_l: ["biais d'angle de tranche en degrés"], + sl_lahi_s: "hauteur de couche", + sl_lahi_l: ["hauteur de chaque tranche","couche en millimètres"], + ad_minl_s: "couche minimum", + ad_minl_l: ["hauteur de couche minimale adaptative","en millimètres","doit être non nulle"], + ad_adap_s: "hauteur adaptative", + ad_adap_l: ["utiliser des hauteurs de couche adaptatives","avec 'hauteur de couche' comme maximum","et 'couche minimum' comme minimum"], + sl_ltop_s: "couches supérieures", + sl_ltop_l: ["nombre de couches solides en haut de l'impression ou sur les zones plates orientées vers le haut"], sl_lsld_s: "couches solides", - sl_lsld_l: ["zones de remplissage solide calculées", "à partir des deltas de couches. voir", "menu surgissant des couches"], + sl_lsld_l: ["zones de remplissage solide calculées","à partir des ponts et zones plates","détectées entre les couches tranchées"], sl_lbot_s: "couches de base", - sl_lbot_l: ["nombre de couches solides", "à appliquer en", "bas de l'impression"], - ad_adap_s: "adaptive", - ad_adap_l: ["utiliser des hauteurs de couche adaptatives", "avec 'hauteur de couche' en maximum", "et 'hauteur min' en minimum"], + sl_lbot_l: ["nombre de couches solides en bas de l'impression ou sous les portées de pont"], + + // FDM WALLS + sw_menu: "coques", + sl_shel_s: "nombre de coques", + sl_shel_l: ["nombre de murs","de périmètre à générer"], + ad_thin_s: "parois fines", + ad_thin_l: ["détecter et remplir les espaces","entre les murs de coque"], // FDM SHELLS - sl_shel_s: "parois", - sl_shel_l: ["nombre de périmètre", "murs à générer"], - sl_ordr_s: "ordre des parois", - sl_ordr_l: ["ordre d'impression des parois","de l'intérieur vers l'extérieur", "ou de l'extérieur vers l'intérieur","affecte la qualité de surface"], - sl_strt_s: "début de couche", - sl_strt_l: ["point de départ de la couche", "dernier = fin de la couche", "centre = centre de la pièce", "origine = origine du dispositif"], - ad_thin_s: "parois fines", - ad_thin_l: ["détecte et comble les vides", "entre les parois de la coque"], + sl_line_s: "largeur de ligne", + sl_line_l: ["largeur d'extrusion en millimètres","0 = diamètre de buse"], + sl_ordr_s: "ordre de coque", + sl_ordr_l: ["ordre de sortie de coque","de l'intérieur vers l'extérieur","ou de l'extérieur vers l'intérieur","affecte la qualité de surface"], + sl_strt_s: "point de départ", + sl_strt_l: ["point de départ de la couche","dernier = où la dernière couche s'est terminée","centre = centre de la pièce","origine = origine de l'appareil","aléatoire = yolo"], + sl_ofin_s: "décalage de coque intérieure", + sl_ofin_l: ["décalage de périmètre de trou intérieur","en millimètres"], + sl_ofot_s: "décalage de coque extérieure", + sl_ofot_l: ["décalage de périmètre de paroi extérieure","en millimètres"], + + // FDM SOLID + fs_menu: "remplissage solide", + fi_over_s: "chevauchement de remplissage", + fi_over_l: ["chevauchement entre les coques et le remplissage solide ou clairsemé. peut améliorer la liaison aux coques","en fraction de largeur de ligne","0.0 - 1.0"], + fi_angl_s: "angle de départ", + fi_angl_l: ["angle de départ en degrés","90 degrés ajoutés à","chaque couche suivante","s'applique uniquement aux couches solides"], + fi_grow_s: "expansion de zone", + fi_grow_l: ["élargir les solides projetés","peut aider avec les zones solides","sur les zones de remplissage clairsemé","unités en millimètres"], // FDM FILL - fi_menu: "remplissage", - fi_type: "type", - fi_pcnt_s: "fraction de remplissage", + fi_menu: "remplissage clairsemé", + fi_type: "type de remplissage", + fi_pcnt_s: "quantité de remplissage", fi_pcnt_l: ["valeurs de densité de remplissage","0.0 - 1.0"], - fi_angl_s: "départ solide", - fi_angl_l: ["angle de départ en degrés", "90 degrés ajoutés à ", "chaque couche suivante", "s'applique uniquement aux couches solides"], - fi_over_s: "chevauchement", - fi_over_l: ["chevauchement de l'enveloppe et du remplissage", "en tant que fraction du diamètre de la buse", "0,0 - 1,0"], + fi_rept_s: "répétition de remplissage", + fi_rept_l: ["nombre de fois pour répéter","les couches de remplissage inchangées"], // fi_rate_s: "vitesse d'impression", - fi_rate_l: ["vitesse d'extrusion du remplissage", "régler à 0 pour utiliser par défaut", "la vitesse d'impression"], + fi_rate_l: ["vitesse d'extrusion pour le remplissage","mettre à 0 pour utiliser les vitesses","d'impression de sortie par défaut"], + + // FDM HEATING + fh_menu: "chauffage", + + // FDM COOLING + fc_menu: "refroidissement", // FDM FIRST LAYER fl_menu: "base", fl_lahi_s: "hauteur de couche", - fl_lahi_l: ["hauteur de chaque couche", "en millimètres", "devrait être >= hauteur de la couche"], - fl_rate_s: "vitesse périmètres", - fl_rate_l: ["vitesse maximale d'impression des coques", "en millimètres / seconde"], - fl_frat_s: "vitesse remplissage", - fl_frat_l: ["vitesse maximale d'impression du remplissage", "en millimètres / seconde"], - fl_mult_s: "débit", + fl_lahi_l: ["hauteur de chaque couche","en millimètres","devrait être >= hauteur de tranche"], + fl_rate_s: "vitesse de coque", + fl_rate_l: ["vitesse maximale d'impression de coque","en millimètres / seconde"], + fl_frat_s: "vitesse de remplissage", + fl_frat_l: ["vitesse maximale d'impression de remplissage","en millimètres / seconde"], + fl_mult_s: "facteur de débit", fl_mult_l: ["multiplicateur d'extrusion","0.0 - 2.0"], - fl_sfac_s: "largeur", - fl_sfac_l: ["multiplicateur de la taille de la buse", "modifie l'espacement des lignes"], - fl_skrt_s: "jupe nb", - fl_skrt_l: ["nombre de lignes de la jupe", "à générer pour la première couche"], - fl_skro_s: "décalage bordure", - fl_skro_l: ["jupe décalée de la partie", "en millimètres"], - fl_nozl_s: "buse", - fl_nozl_l: ["degrés en Celsius", "réglage de sortie utilisé", "lorsque celui-ci est égal à zéro"], - fl_bedd_s: "température plateau", - fl_bedd_l: ["degrés en Celsius", "réglage de sortie utilisé", "lorsque celui-ci est égal à zéro"], - fr_spac_s: "écart radeau", - fr_spac_l: ["espacement des couches supplémentaires", "entre la 1ère couche et le radeau", "en millimètres"], - fr_nabl_s: "activer un radeau", - fr_nabl_l: ["créer un radeau sous le ", "modèle pour une meilleure adhérence", "utilise le décalage des jupes et", "désactive la sortie des jupes"], + fl_sfac_s: "facteur de largeur", + fl_sfac_l: ["multiplicateur de taille de buse","modifie l'espacement des lignes"], + fl_skrt_s: "nombre de jupes", + fl_skrt_l: ["nombre de jupes décalées","de première couche à générer"], + fl_skro_s: "décalage de jupe", + fl_skro_l: ["décalage de jupe par rapport à la pièce","en millimètres","lorsque des radeaux sont utilisés","c'est le décalage de radeau"], + fl_nozl_s: "température de buse", + fl_nozl_l: ["degrés en celsius","paramètre de sortie utilisé","lorsque celui-ci est zéro"], + fl_bedd_s: "température de plateau", + fl_bedd_l: ["degrés en celsius","paramètre de sortie utilisé","lorsque celui-ci est zéro"], + fr_spac_s: "espacement de radeau", + fr_spac_l: ["espacement de couche supplémentaire","entre la 1ère couche et le radeau","en millimètres"], + fr_nabl_s: "activer le radeau", + fr_nabl_l: ["créer un radeau sous le","modèle pour une meilleure adhérence","utilise le décalage de jupe et","désactive la sortie de jupe"], + fr_draf_s: "bouclier anti-courant d'air", + fr_draf_l: ["étendre la jupe à la hauteur de la pièce","qui agit comme un bouclier contre","les courants d'air et piège l'air chaud"], // FDM BELT ONLY - fl_zoff_s: "décalage bande", - fl_zoff_l: ["décalage de hauteur par rapport à la bande", "de l'extrusion la plus basse", "en millimètres"], - fl_brim_s: "taille de bordure", - fl_brim_l: ["ajoute une bordure à la partie inférieure","la taille est la largeur en millimètres","0 désactive"], - fl_brmn_s: "seuil de bordure", - fl_brmn_l: ["ajout de bordures uniquement quand le segment", "face à la bande est plus court que cela", "valeur en millimètres", "0 = infini"], + fl_zoff_s: "décalage de bande", + fl_zoff_l: ["décalage de hauteur depuis la bande","de l'extrusion la plus basse","en millimètres"], + fl_flat_s: "aplatir", + fl_flat_l: ["aplatir sur la bande tout point","de hauteur inférieure à cette valeur","en millimètres"], + fl_brim_s: "côtés de bordure", + fl_brim_l: ["ajouter une bordure au périmètre de la pièce","la taille est la largeur en millimètres","0 pour désactiver"], + fl_brin_s: "intérieur de bordure", + fl_brin_l: ["ajouter une bordure à l'intérieur de la pièce","lorsque des vides intérieurs existent","la taille est la largeur en millimètres","0 pour désactiver"], + fl_brmn_s: "déclencheur de bordure", + fl_brmn_l: ["ajouter des bordures uniquement lorsque le segment","face à la bande est plus court que ceci","valeur en millimètres","0 = Infini"], + fl_brco_s: "peigne de bordure", + fl_brco_l: ["ajouter des espacements de bordure","tous les n lignes","0 pour désactiver"], + fl_brgp_s: "espacement de bordure", + fl_brgp_l: ["espacement entre la bordure et la pièce","en millimètres"], fl_bled_s: "ancrage de pièce", - fl_bled_l: ["ancrage de la pièce sur la bande", "au début de l'impression", "en millimètres"], + fl_bled_l: ["ancrage de pièce sur bande","au début de l'impression","en millimètres"], + fl_blmp_s: "bosse d'ancrage", + fl_blmp_l: ["ajouter une bosse au début d'un","ancrage pour l'aider à se décoller","à la fin de la bande","en millimètres"], // FDM SUPPORT sp_menu: "support", sp_detect: "détecter", sp_dens_s: "densité", - sp_dens_l: ["fraction 0.0 - 1.0","recommendé 0.15","0 désactive"], - sp_size_s: "taille pilier", - sp_size_l: ["largeur du pilier","en millimètres"], - sp_offs_s: "décalage du pilier", + sp_dens_l: ["fraction 0.0 - 1.0","recommandé 0.15","0 pour désactiver"], + sp_size_s: "taille de pilier", + sp_size_l: ["largeur de pilier en millimètres","des valeurs plus petites augmentent","exponentiellement les temps de détection"], + sp_offs_s: "décalage de pièce", sp_offs_l: ["décalage par rapport à la pièce","en millimètres"], - sp_gaps_s: "écart des couches", - sp_gaps_l: ["nombre de couches","de décalage de la pièce"], + sp_gaps_s: "couches d'espacement", + sp_gaps_l: ["nombre de couches","décalées par rapport à la pièce"], sp_span_s: "portée maximale", - sp_span_l: ["portée non soutenue nécessitant", "un nouveau soutien à générer","en millimètres"], - sp_angl_s: "angle max", - sp_angl_l: ["angle de surplomb maximum avant", "de générer un pilier de soutien"], - sp_area_s: "surface min", - sp_area_l: ["surface minimale de","la colonne support","en millimètres"], + sp_span_l: ["portée non supportée qui provoque","la génération d'un nouveau support","en millimètres"], + sp_angl_s: "angle maximal", + sp_angl_l: ["angle de surplomb maximal avant","génération d'un pilier de support","valeurs normales 45-60","valeurs bande 0-10"], + sp_area_s: "surface minimale", + sp_area_l: ["surface minimale pour","une colonne de support","en millimètres","des valeurs plus petites","ralentiront la détection"], sp_xpnd_s: "étendre", - sp_xpnd_l: ["étendre la zone de soutien", "au-delà des limites d'une pièce","en millimètres"], + sp_xpnd_l: ["étendre la zone de support","au-delà de la limite de la pièce","en millimètres"], + sp_grow_s: "croissance", + sp_grow_l: ["faire croître la colonne de support pour remplir les petits espaces","en millimètres"], sp_nozl_s: "extrudeur", - sp_nozl_l: ["dans les systèmes multi-extrudeurs", "l'extrudeur à utiliser pour", "le matériau de support"], + sp_nozl_l: ["dans les systèmes multi-extrudeurs","l'extrudeur à utiliser pour","le matériau de support"], + sp_outl_s: "enfermé", + sp_outl_l: ["enfermer le motif de support","dans une coque de périmètre"], sp_auto_s: "automatique", - sp_auto_l: ["activer les supports générés", "utiliser la géométrie at-slice-time", "les supports n'apparaîtront", "qu'une fois le tranchage terminé"], - - // LASER SLICING - ls_offs_s: "offset", - ls_offs_l: ["adjust for beam width","en millimètres"], - ls_lahi_s: "height", - ls_lahi_l: ["layer height","in millimeters","0 = auto/detect"], - ls_lahm_s: "min", - ls_lahm_l: ["layer height minimum","will merge auto slices","under this thickness","in millimeters"], - ls_sngl_s: "single", - ls_sngl_l: ["perform only one slice","at specified layer height"], + sp_auto_l: ["activer les supports générés","utilisant la géométrie au moment du tranchage","les supports n'apparaîtront","qu'après la fin du tranchage"], // CNC COMMON terms - cc_tool: "tool", - cc_offs_s: "offset", - cc_offs_l: ["offset tool center","from chosen path"], - cc_spnd_s: "spindle rpm", - cc_spnd_l: ["spindle speed in","revolutions / minute"], - cc_sovr_s: "step over", - cc_sovr_l: ["as a fraction of","tool diameter"], - cc_sdwn_s: "step down", - cc_sdwn_l: ["step down depth","for each pass","in workspace units","0 to disable"], - cc_feed_s: "feed rate", - cc_feed_l: ["max cutting speed in","workspace units / minute"], - cc_plng_s: "plunge rate", - cc_plng_l: ["max z axis speed in","workspace units / minute"], - cc_sngl_s: "select lines only", - cc_sngl_l: ["select only single edges","instead of connected polylines"], + cc_tool: "outil", + cc_offs_s: "décalage", + cc_offs_l: ["décaler le centre de l'outil","du chemin choisi"], + cc_spnd_s: "vitesse de broche", + cc_spnd_l: ["vitesse de broche en","tours / minute"], + cc_sovr_s: "pas latéral", + cc_sovr_l: ["une fraction du diamètre de l'outil entre 0 et 1. des valeurs supérieures à 0.49 peuvent entraîner des zones non coupées ou des artefacts indésirables."], + cc_sovc_s: "pas larges", + cc_sovc_l: ["nombre de pas de découpe larges"], + cc_sang_s: "angle de pas", + cc_sang_l: ["rotation en degrés entre les points axiaux du tour"], + cc_sdwn_s: "pas de descente", + cc_sdwn_l: ["profondeur de pas de descente","pour chaque passage","en unités d'espace de travail","0 pour désactiver"], + cc_thru_s: "coupe traversante", + cc_thru_l: ["profondeur de coupe supplémentaire sous le fond de la trace"], + cc_offd_s: "décalage", + cc_offd_l: ["remplace la distance de décalage par défaut (qui est le rayon de l'outil) lorsqu'elle est définie sur une valeur autre que zéro"], + cc_feed_s: "vitesse d'avance", + cc_feed_l: ["vitesse de coupe maximale en","unités d'espace de travail / minute"], + cc_plng_s: "vitesse de plongée", + cc_plng_l: ["vitesse maximale de l'axe z en","unités d'espace de travail / minute"], + cc_sngl_s: "sélectionner uniquement les lignes", + cc_sngl_l: ["sélectionner uniquement les bords simples","au lieu des polylignes connectées"], + cc_sele_s: "sélectionner", + cc_sele_l: ["sélectionner les lignes pour suivre","sélectionner les boucles pour dégager","sélectionner la surface pour la poche"], // CNC COMMON - cc_menu: "limits", - cc_flip: "flip", - cc_rapd_s: "xy feed", - cc_rapd_l: ["max xy moves feedrate","in workspace units / minute"], - cc_rzpd_s: "z feed", - cc_rzpd_l: ["max z moves feedrate","in workspace units / minute"], + cc_menu: "limites", + cc_rapd_s: "avance xy", + cc_rapd_l: ["vitesse d'avance maximale des mouvements xy","en unités d'espace de travail / minute"], + cc_rzpd_s: "avance z", + cc_rzpd_l: ["vitesse d'avance maximale des mouvements z","en unités d'espace de travail / minute"], - cc_loff_s: "offset", - cc_loff_l: ["distance from stock face","for leveling pass","in workspace units"], + // CNC LEVELING + cc_loff_s: "décalage z", + cc_loff_l: ["distance de la face du brut","en unités d'espace de travail"], + cc_lxyo_s: "décalage xy", + cc_lxyo_l: ["décalage xy de la limite de la pièce en fraction du diamètre de l'outil (0 - 1.0)"], + cc_lsto_s: "brut", + cc_lsto_l: ["utiliser la zone de brut au lieu de la zone de pièce"], // CNC ROUGHING - cr_menu: "rough", - cr_lsto_s: "leave stock", - cr_lsto_l: ["horizontal offset from vertical faces","stock to leave for finishing pass","in workspace units"], - cr_ease_s: "ease down", - cr_ease_l: ["plunge cuts will","spiral down or ease","along a linear path"], - cr_clrt_s: "clear top", - cr_clrt_l: ["run a clearing pass over","the bounding area of the part","at z = 0"], - cr_clrp_s: "clear voids", - cr_clrp_l: ["mill out through pockets","instead of just the outline"], - cr_clrf_s: "clear faces", - cr_clrf_l: ["interpolate step down to","clear any detected flat areas"], - cr_olin_s: "inside only", - cr_olin_l: ["limit cutting to","inside part boundaries"], + cr_menu: "ébauche", + cr_lsto_s: "laisser du brut", + cr_lsto_l: ["décalage horizontal des faces verticales","brut à laisser pour la passe de finition","en unités d'espace de travail"], + cr_lstz_s: "laisser brut z", + cr_lstz_l: ["décalage vertical pour les passes d'ébauche en unités d'espace de travail. idéal pour l'ébauche de surfaces courbes."], + cr_ease_s: "descente progressive", + cr_ease_l: ["les coupes en plongée","descendront en spirale ou progressivement","le long d'un chemin linéaire"], + cr_clst_s: "dégager le brut", + cr_clst_l: ["en mode indexé, dégager toute la zone de brut, pas seulement jusqu'au périmètre de la pièce"], + cr_clrt_s: "dégager le dessus", + cr_clrt_l: ["effectuer une passe de dégagement sur","la zone de délimitation de la pièce","à z = 0"], + cr_clrp_s: "dégager les vides", + cr_clrp_l: ["fraiser à travers les poches","au lieu du simple contour"], + cr_clrf_s: "dégager les faces", + cr_clrf_l: ["interpoler le pas de descente pour","dégager toutes les zones plates détectées"], + cr_olin_s: "intérieur seulement", + cr_olin_l: ["limiter la coupe à","l'intérieur des limites de la pièce"], // CNC OUTLINE - co_menu: "outline", + co_menu: "contour", + co_merg_s: "fusionner le chevauchement", + co_merg_l: ["fusionner les lignes qui se chevauchent pour éviter la sur-coupe dans les solides adjacents"], co_dogb_s: "dogbones", - co_dogb_l: ["insert dogbone cuts","into inside corners"], - co_wide_s: "wide cutout", - co_wide_l: ["widen outside cutout paths","for deep cuts in hard material"], - co_olin_s: "inside only", - co_olin_l: ["limit cutting to","inside part boundaries"], - co_olot_s: "outside only", - co_olot_l: ["limit cutting to","exterior part boundaries","which can be thought of","as the shadow outline"], - co_omit_s: "omit through", - co_omit_l: "eliminate thru holes", - co_olen_s: "enable", - co_olen_l: "enabled outline cutting", + co_dogb_l: ["insérer des coupes dogbone","dans les coins intérieurs"], + co_dogr_s: "inverser les bones", + co_dogr_l: ["inverser la direction du dogbone"], + co_clrt_s: "dégager le dessus", + co_clrt_l: ["couper en partant du dessus du brut","lorsque le brut est activé"], + co_wide_s: "découpe large", + co_wide_l: ["élargir les chemins de découpe extérieurs","pour les coupes profondes dans un matériau dur"], + co_olin_s: "intérieur seulement", + co_olin_l: ["limiter la coupe à","l'intérieur des limites de la pièce"], + co_olot_s: "extérieur seulement", + co_olot_l: ["limiter la coupe aux","limites extérieures de la pièce","qui peut être considéré","comme le contour d'ombre"], + co_omit_s: "omettre les traversants", + co_omit_l: "éliminer les trous traversants", + co_omvd_s: "omettre la poche", + co_omvd_l: "éliminer les poches intérieures", + co_olen_s: "activer", + co_olen_l: "activer la coupe de contour", // CNC CONTOUR - cn_menu: "contour", - cf_angl_s: "max angle", - cf_angl_l: ["angles greater than this","are considered vertical"], - cf_curv_s: "curves only", - cf_curv_l: ["limit linear cleanup","to curved surfaces"], - cf_olin_s: "inside only", - cf_olin_l: ["limit cutting to","inside part boundaries"], - cf_linx_s: "enable y pass", - cf_linx_l: "linear y-axis finishing", - cf_liny_s: "enable x pass", - cf_liny_l: "linear x-axis finishing", + cn_menu: "contournage", + cf_angl_s: "angle maximal", + cf_angl_l: ["les changements en z qui résultent en des angles supérieurs à ceci sont considérés verticaux et omis des courbes"], + cf_leav_s: "laisser du brut", + cf_leav_l: ["quantité de brut à laisser au-dessus de la surface de la pièce"], + cf_botm_s: "z bas", + cf_botm_l: ["respecter la limite z basse"], + cf_curv_s: "courbes seulement", + cf_curv_l: ["limiter le nettoyage linéaire","aux surfaces courbes"], + cf_olin_s: "intérieur seulement", + cf_olin_l: ["limiter la coupe à","l'intérieur des limites de la pièce"], + cf_linx_s: "activer passe y", + cf_linx_l: "finition linéaire axe y", + cf_liny_s: "activer passe x", + cf_liny_l: "finition linéaire axe x", // CNC TRACE - cu_menu: "trace", + cu_menu: "traçage", cu_type_s: "type", - cu_type_l: ["follow = tool tip follows line","right or left = tool tip","follows line offset by tool radius"], + cu_type_l: ["dégager = dégager une poche de ligne fermée","suivre = la pointe de l'outil suit la ligne","avec option de décalage lorsque fermée"], + + // CNC POCKET + cp_xpnd_s: "expansion", + cp_xpnd_l: ["agrandir (+) ou rétrécir (-) les zones sélectionnées","le contournage utilise toute la zone sélectionnée","le non-contournage utilise par défaut le rayon de l'outil","en unités d'espace de travail"], + cp_smoo_s: "lissage", + cp_smoo_l: ["nettoyer les bords irréguliers causés par les parois inclinées. peut accélérer et améliorer le pocketage pour les géométries détaillées. recommander de commencer avec des valeurs autour de 1 si le tranchage prend trop de temps ou si les contours semblent irréguliers"], + cp_foll_s: "sélection", + cp_foll_l: ["limite de sélection de courbure en degrés. les valeurs plus proches de 0 restreindront les sélections aux surfaces plus plates"], + cp_refi_s: "affiner", + cp_refi_l: ["nombre de passes d'affinage à effectuer sur les polylignes contournées. destiné à traiter le sciage en dents de scie du delta Z causé par les géométries à faces alors que le lissage gère XY. les valeurs > 10 fonctionnent bien pour les géométries doucement contournées avec un mouvement Z significatif."], + cp_cont_s: "contour", + cp_cont_l: ["ignorer les vides et caractéristiques intérieurs"], + cp_engr_s: "graver", + cp_engr_l: ["configure une passe unique autour du périmètre de la zone sélectionnée. également utile pour le marquage laser 3D"], + cp_outl_s: "contour seulement", + cp_outl_l: ["ignorer les vides et caractéristiques intérieurs"], // CNC DRILLING - cd_menu: "drill", - cd_axis: "axis", + cd_menu: "perçage", + cd_axis: "axe", cd_points: "points", - cd_plpr_s: "plunge per", - cd_plpr_l: ["max plunge between","dwell periods","in workspace units","0 to disable"], - cd_dwll_s: "dwell time", - cd_dwll_l: ["dwell time","between plunges in","in milliseconds"], - cd_lift_s: "drill lift", - cd_lift_l: ["lift between plunges","after dwell period","in workspace units","0 to disable"], - cd_regi_s: "register", - cd_regi_l: ["drill registration holes","for double-sided parts","independent of enable","drilling but uses same","tool and settings"], + // cd_plpr_s: "plunge per", + // cd_plpr_l: ["max plunge between","dwell periods","in workspace units","0 to disable"], + cd_dwll_s: "temps de pause", + cd_dwll_l: ["temps de pause","entre les plongées en","en millisecondes"], + cd_lift_s: "levée de foret", + cd_lift_l: ["levée entre les plongées","après la période de pause","en unités d'espace de travail","0 pour désactiver"], + cd_thru_s: "extension z", + cd_thru_l: ["étendre la coupe vers le bas à travers le brut","en unités d'espace de travail"], + cd_dtru_s: "percer à travers", + cd_dtru_l: ["profondeur de perçage supplémentaire sous le bas de la pièce","remplace le z thru global","0 pour désactiver"], + cd_mark_s: "marquage", + cd_mark_l: ["uniquement marquer les trous, ne pas percer","le réglage de pas de descente est utilisé","pour déterminer la profondeur de marquage"], + cd_ftop_s: "depuis le dessus du brut", + cd_ftop_l: ["percer depuis le dessus du brut","au lieu de la surface de la pièce"], + cd_prcn_s: "précision", + cd_prcn_l: ["distance entre les tranches","pour rechercher les trous","en unités d'espace de travail","plus bas est plus lent et","utilise plus de mémoire","0 = uniquement les plats"], + + cd_seli_l: ["sélectionner individuellement les trous","à percer"], + cd_sela_s: "Sélectionner Diamètre Correspondant", + cd_sela_l: ["sélectionner tous les trous qui", "correspondent au diamètre de l'outil sélectionné"], + + //CNC Registration + cd_regi_s: "enregistrer", + cd_regi_l: ["percer des trous d'enregistrement","pour les pièces double face","indépendant de l'activation","du perçage mais utilise le même","outil et paramètres"], + cd_rego_s: "décalage de pièce", + cd_rego_l: ["décalage du centre du trou","de la boîte englobante de la pièce","en unités d'espace de travail"], + + // CNC HELICAL toolpath + ch_menu: "hélicoïdal", + ch_sdwn_s: "pas de descente (pas)", + ch_sdwn_l: ["distance z","par révolution","en unités d'espace de travail","(inverse des filets par unité)", "0 pour désactiver"], + ch_fsta_s: "forcer l'angle de départ", + ch_fsta_l: ["remplacer l'angle de départ","par défaut au point le plus proche de l'outil"], + ch_stra_s: "angle de départ", + ch_stra_l: ["angle de départ de l'hélice","en degrés dans le sens antihoraire de l'axe +x"], + ch_selc_l: ["sélectionner une face de cylindre", "les trous intérieurs trop petits","seront ignorés."], + ch_fini_s: "passe de finition en bas", + ch_fini_l: ["tracer un cercle en bas de l'hélice","utilisé pour le dégagement de trou"], + ch_entr_s: "entrer depuis le centre", + ch_entr_l: ["commencer la coupe depuis le centre du cylindre","en arc doux horizontalement", "au lieu de plonger"], + ch_ento_s: "décalage d'entrée centrale", + ch_ento_l: ["décalage du chemin pour l'entrée courbe","généralement la profondeur du filet si filetage","en unités d'espace de travail","0 pour une entrée linéaire"], + ch_rvrs_s: "inverser", + ch_rvrs_l: ["inverser la direction de l'axe z hélicoïdal","z bas vers z haut lorsque coché","utile pour le filetage","non recommandé pour d'autres opérations"], + ch_clkw_s: "sens horaire", + ch_clkw_l: ["inverser la rotation hélicoïdale autour du cylindre","sens horaire lorsque coché"], + + // CNC FLIP + cf_menu: "retourner", + cf_nvrt_s: "z bas", + cf_nvrt_l: "inverser le paramètre z bas pour suivre le brut", + + // CNC INDEX AXIS + ci_degr_s: "degrés", + ci_degr_l: "degrés pour faire tourner l'axe A (indexé)", + ci_abso_s: "absolu", + ci_abso_l: "la rotation en degrés est absolue", + ci_face_s: "face", + ci_face_l: "sélectionner la face à faire pivoter vers le haut", + ci_line_s: "linéaire", + ci_line_l: "faire des passes linéaires le long de X puis pivoter Y", + ci_laso_s: "décalage de départ", + ci_laso_l: ["décalage x depuis la gauche de la pièce. les valeurs négatives sont à l'extérieur de la pièce. en unités d'espace de travail"], + ci_laeo_s: "décalage de fin", + ci_laeo_l: ["décalage x depuis la droite de la pièce. les valeurs négatives sont à l'extérieur de la pièce. en unités d'espace de travail"], + + // CNC LASER On/Off Operations (Carvera) + cl_powr_s: "puissance", + cl_powr_l: "puissance laser de 0 à 1.0", + cl_adap_s: "adaptatif", + cl_adap_l: "utiliser la puissance adaptative basée sur la hauteur Z", + cl_adrp_s: "répétition", + cl_adrp_l: "appliquer un modulo de la hauteur Z en utilisant la bande donnée pour créer des motifs répétitifs", + cl_flat_s: "aplatir", + cl_flat_l: "aplatir la sortie à une hauteur Z donnée", + cl_flaz_s: "hauteur plate", + cl_flaz_l: ["aplatir la sortie à cette hauteur Z", "en unités d'espace de travail"], + cl_minp_s: "puissance min z", + cl_minp_l: ["réglage de puissance à la partie la plus basse de la bande Z. peut être supérieur ou inférieur à l'autre extrémité de la bande Z."], + cl_maxp_s: "puissance max z", + cl_maxp_l: ["réglage de puissance à la partie la plus haute de la bande Z. peut être supérieur ou inférieur à l'autre extrémité de la bande Z."], + cl_minz_s: "hauteur z min", + cl_minz_l: ["position de bande Z la plus basse"], + cl_maxz_s: "hauteur z max", + cl_maxz_l: ["position de bande Z la plus haute. lorsqu'elle est réglée sur 0, utilise le point Z le plus haut de l'espace de travail"], // CNC CUTOUT TABS - ct_menu: "tabs", + ct_menu: "pattes", ct_angl_s: "angle", - ct_angl_l: ["starting angle for tab spacing","in degrees (0-360)"], - ct_numb_s: "count", - ct_numb_l: ["number of tabs to use","will be spaced evenly","around the part"], - ct_wdth_s: "width", - ct_wdth_l: "width in workspace units", - ct_hght_s: "height", - ct_hght_l: "height in workspace units", - ct_dpth_s: "depth", - ct_dpth_l: ["distance in workspace units","that the tab projects from","the part surface"], - ct_midl_s: "midline", - ct_midl_l: ["use midline of tab","instead of z bottom","for double-sided work"], + ct_angl_l: ["angle de départ pour l'espacement des pattes","en degrés (0-360)"], + ct_numb_s: "nombre", + ct_numb_l: ["nombre de pattes à utiliser","seront espacées uniformément","autour de la pièce"], + ct_wdth_s: "largeur", + ct_wdth_l: "largeur en unités d'espace de travail", + ct_hght_s: "hauteur", + ct_hght_l: "hauteur en unités d'espace de travail", + ct_dpth_s: "profondeur", + ct_dpth_l: ["distance en unités d'espace de travail","que la patte dépasse de","la surface de la pièce"], + ct_midl_s: "ligne médiane", + ct_midl_l: ["utiliser la ligne médiane de la patte","au lieu de z bas","pour le travail double face"], ct_nabl_s: "auto", - ct_nabl_l: ["auto generate radial tabs","projected from part center","using count and angle offset"], + ct_nabl_l: ["générer automatiquement des pattes radiales","projetées depuis le centre de la pièce","en utilisant le nombre et le décalage d'angle"], // OUTPUT ou_menu: "sortie", - // LASER KNIFE - dk_menu: "knife", - dk_dpth_s: "cut depth", - dk_dpth_l: ["final cut depth","in millimeters"], - dk_pass_s: "cut passes", - dk_pass_l: ["number of passes","down to cut depth"], - dk_offs_s: "tip offset", - dk_offs_l: ["distance from blade tip","to center of tool","in millimeters"], + // LASER SLICING + ls_offs_s: "décalage / trait de coupe", + ls_offs_l: ["distance entre le centre du chemin","de coupe et le bord du matériau restant","en millimètres"], + ls_lahi_s: "hauteur de tranche", + ls_lahi_l: ["hauteur de couche","en millimètres","0 = auto/détecter"], + ls_lahm_s: "tranche minimum", + ls_lahm_l: ["hauteur de couche minimum","fusionnera les tranches auto","sous cette épaisseur","en millimètres"], + ls_sngl_s: "tranche unique", + ls_sngl_l: ["effectuer une seule tranche","à la hauteur de couche spécifiée"], - // OUTPUT LASER - ou_spac_s: "spacing", - ou_spac_l: ["distance between layer output","in millimeters"], - ou_scal_s: "scaling", - ou_scal_l: "multiplier (0.1 to 100)", - ou_powr_s: "power", - ou_powr_l: ["0 - 100","represents %"], - ou_sped_s: "speed", - ou_sped_l: "millimeters / second", - ou_mrgd_s: "merged", - ou_mrgd_l: ["merge all layers using","color coding to denote","stacking depth"], - ou_grpd_s: "grouped", - ou_grpd_l: ["retain each layer as","a unified grouping","instead of separated","polygons"], - ou_layr_s: "layer order", - ou_layr_l: ["output layer order","from top right to","bottom left"], - ou_layo_s: "layer color", - ou_layo_l: ["output layer colors","for each z index","overridden by merged"], - ou_drkn_s: "drag knife", - ou_drkn_l: ["enable drag knife","output in gcode","cut radii are added","to corners with","cut down passes"], + // LASER KNIFE + dk_menu: "couteau de traînée", + dk_dpth_s: "profondeur de coupe", + dk_dpth_l: ["profondeur de coupe finale","en millimètres"], + dk_pass_s: "passes de coupe", + dk_pass_l: ["nombre de passes","jusqu'à la profondeur de coupe"], + dk_offs_s: "décalage de pointe", + dk_offs_l: ["distance de la pointe de la lame","au centre de l'outil","en millimètres"], + + // WIRE EDM + we_omit_s: "omettre l'intérieur", + we_omit_l: "omettre les polygones intérieurs", + + // LASER OUTPUT + ou_spac_s: "espacement", + ou_spac_l: ["distance entre la sortie de couche","en millimètres"], + ou_scal_s: "mise à l'échelle", + ou_scal_l: "multiplicateur (0.1 à 100)", + ou_powr_s: "puissance", + ou_powr_l: ["0 - 100","représente %"], + ou_sped_s: "vitesse", + ou_sped_l: "millimètres / seconde", + ou_mrgd_s: "fusionné", + ou_mrgd_l: ["fusionner toutes les couches en utilisant","un codage couleur pour indiquer","la profondeur d'empilement"], + ou_grpd_s: "groupé", + ou_grpd_l: ["conserver chaque couche comme","un groupement unifié","au lieu de polygones","séparés"], + ou_layr_s: "ordre de couche", + ou_layr_l: ["ordre de sortie de couche","du haut droit au","bas gauche"], + ou_layo_s: "couleur de couche", + ou_layo_l: ["couleurs de sortie de couche","pour chaque index z","remplacé par fusionné"], + ou_lays_s: "marquage de couche", + ou_lays_l: ["marquer les couches pour l'empilement. la couche au-dessus sera sortie dans une couleur différente que le laser peut marquer avec une puissance inférieure. active le regroupement de couches."], + ou_drkn_s: "couteau de traînée", + ou_drkn_l: ["activer la sortie de couteau de traînée","en gcode","les rayons de coupe sont ajoutés","aux coins avec","des passes de descente de coupe"], + ou_stak_s: "empilement 3d", + ou_stak_l: ["la sortie est un empilement 3D de chemins 2D plutôt que d'empiler les couches à plat en 2D"], + ou_maxp_s: "puissance max", + ou_maxp_l: ["valeur de puissance maximale en gcode. la puissance % des paramètres sera mise à l'échelle de 0 à cette valeur"], + ou_inch_s: "impérial", + ou_inch_l: ["valeurs de sortie en pouces"], + ou_shap_s: "outil Shaper", + ou_shap_l: ["annoter le SVG avec des attributs personnalisés de l'outil Shaper"], // OUTPUT FDM - ou_nozl_s: "température buse", + ou_nozl_s: "température de buse", ou_nozl_l: "degrés en celsius", - ou_bedd_s: "température plateau", + ou_bedd_s: "température de plateau", ou_bedd_l: "degrés en celsius", - ou_feed_s: "vitesse impression", - ou_feed_l: ["vitesse d'impression maximale","millimètres / seconde"], - ou_fini_s: "vitesse coque", - ou_fini_l: ["vitesse de la coque extérieure","millimètres / seconde"], - ou_move_s: "vitesse déplacement", - ou_move_l: ["vitesse de déplacement sans impression","millimètres / seconde","0 = active déplacements G0"], - ou_shml_s: "débit de coque", - ou_flml_s: "débit de solidité", - ou_spml_s: "débit de remplissage", + ou_feed_s: "vitesse d'impression", + ou_feed_l: ["vitesse d'impression maximale","mettre à 0 pour utiliser la valeur par défaut","millimètres / seconde"], + ou_fini_s: "vitesse de finition", + ou_fini_l: ["vitesse de coque la plus externe","couches solides de pont/plates","mettre à 0 pour utiliser la valeur par défaut","millimètres / seconde"], + ou_move_s: "vitesse de déplacement", + ou_move_l: ["vitesse de déplacement sans impression","millimètres / seconde","0 = activer les mouvements G0"], + ou_shml_s: "facteur de coque", + ou_flml_s: "facteur de solide", + ou_spml_s: "facteur de remplissage", ou_exml_l: ["multiplicateur d'extrusion","0.0 - 2.0"], - ou_fans_s: "vitesse ventilateur", + ou_fanl_s: "ventilateur à la couche", + ou_fanl_l: ["couche # pour activer le ventilateur","les couches commencent à 0"], + ou_fans_s: "vitesse du ventilateur activé", ou_fans_l: "0 - 255", + ou_layt_s: "temps de couche min", + ou_layt_l: ["temps d'impression de couche minimum autorisé en secondes. l'impression sera ralentie si la couche se terminerait sinon en moins de secondes.","0 = désactivé"], // OUTPUT CAM - ou_toll_s: "tolerance", - ou_toll_l: ["surface precision","in workspace units","lower is slower and","uses more memory","0 = automatic based","on animate preference"], - ou_zanc_s: "z anchor", - ou_zanc_l: ["controls the position of the part","when stock Z exceeds part Z"], - ou_ztof_s: "z offset", - ou_ztof_l: ["offset z anchor","in workspace units","has no effect when","anchor is middle"], - ou_zbot_s: "z bottom", - ou_zbot_l: ["offset from part bottom","to limit cutting depth","in workspace units"], - ou_zclr_s: "z clearance", - ou_zclr_l: ["safe travel offset","from top of part","in workspace units"], - ou_ztru_s: "z thru", - ou_ztru_l: ["extend cutout pass down","in workspace units"], - ou_conv_s: "conventional", - ou_conv_l: ["milling direction","uncheck for 'climb'"], - ou_depf_s: "depth first", - ou_depf_l: ["optimize pocket cuts","with depth priority"], + ou_toll_s: "précision", + ou_toll_l: ["précision de surface","en unités d'espace de travail","plus bas est plus lent et","utilise plus de mémoire","0 = automatique basé","sur la préférence d'animation"], + ou_flat_s: "planéité", + ou_flat_l: ["delta z en dessous duquel deux points adjacents sont considérés comme colinéaires. 0 = calculer en utilisant la tolérance"], + ou_redu_s: "réduction", + ou_redu_l: ["nombre de pas d'axe à sauter pour chaque unité de précision. une précision plus élevée peut nécessiter une réduction pour produire des tailles de fichiers raisonnables. commencer à 0 et tester par incréments de 1."], + ou_brdg_s: "pontage", + ou_brdg_l: ["distance plate entre les zones courbes","à ponter avec une coupe"], + ou_zanc_s: "ancrage z", + ou_zanc_l: ["contrôle la position de la pièce","lorsque le Z du brut dépasse le Z de la pièce"], + ou_ztof_s: "décalage z", + ou_ztof_l: ["décaler l'ancrage z","en unités d'espace de travail"], + ou_ztop_s: "z haut", + ou_ztop_l: ["décalage depuis le bas du brut","pour définir le début de la profondeur de coupe","en unités d'espace de travail","* le perçage/contournage ignore ceci *"], + ou_zbot_s: "z bas", + ou_zbot_l: ["décalage depuis le bas du brut","pour limiter la profondeur de coupe","en unités d'espace de travail"], + ou_zclr_s: "dégagement z", + ou_zclr_l: ["décalage de déplacement sûr","depuis le haut de la pièce","en unités d'espace de travail"], + ou_ztru_s: "z traversant", + ou_ztru_l: ["étendre la passe de découpe vers le bas","en unités d'espace de travail"], + ou_conv_s: "conventionnel", + ou_conv_l: ["direction de fraisage","décocher pour 'en avalant'"], + ou_depf_s: "profondeur d'abord", + ou_depf_l: ["optimiser les coupes de poche","avec priorité de profondeur"], + ou_inrf_s: "intérieur d'abord", + ou_inrf_l: ["toujours couper de l'intérieur vers l'extérieur"], + ou_toin_s: "initialisation outil", + ou_toin_l: "ajouter un changement d'outil avec la première opération. lorsque désactivé, le gcode suppose que le premier outil est chargé et le décalage sondé", + ou_forz_s: "forcer z max", + ou_forz_l: "tous les mouvements entre les poches iront à z max (au-dessus du brut). ceci est généralement requis si vous n'effectuez pas d'opération d'ébauche avant les opérations de poche.", + ou_z1st_s: "premier z max", + ou_z1st_l: "le premier mouvement du travail sera vers Z max (distance de déplacement au-dessus du brut)", + ou_feng_s: "facteur d'engagement", + ou_feng_l: "échelle de vitesse (0.1-1) lorsque la fraise est entièrement engagée dans une nouvelle coupe. les coupes en pas latéral lorsque la fraise est moins qu'entièrement engagée fonctionnent à un facteur de 1 par rapport à la vitesse de sortie. typiquement cela se rapporte à l'ébauche ou à toute opération avec pas latéral.", + ou_eang_s: "angle de progression", + ou_eang_l: "angle de descente pour la descente progressive en degrés", // CAM STOCK - cs_menu: "stock", - cs_wdth_s: "width", - cs_wdth_l: ["width (x) in workspace units","0 defaults to part size"], - cs_dpth_s: "depth", - cs_dpth_l: ["depth (y) in workspace units","0 defaults to part size"], - cs_hght_s: "height", - cs_hght_l: ["height (z) in workspace units","0 defaults to part size"], - cs_offs_s: "offset", - cs_offs_l: ["use width, depth, height","as offsets from max","part size on platform"], - cs_clip_s: "clip to", - cs_clip_l: ["rough and outline","clip cutting paths","to defined stock"], - cs_offe_s: "enable", - cs_offe_l: "enable milling stock", + cs_menu: "brut", + cs_wdth_s: "largeur", + cs_wdth_l: ["largeur (x) en unités d'espace de travail","0 par défaut à la taille de la pièce"], + cs_dpth_s: "profondeur", + cs_dpth_l: ["profondeur (y) en unités d'espace de travail","0 par défaut à la taille de la pièce"], + cs_hght_s: "hauteur", + cs_hght_l: ["hauteur (z) en unités d'espace de travail","0 par défaut à la taille de la pièce"], + cs_offs_s: "décalage", + cs_offs_l: ["utiliser largeur, profondeur, hauteur","comme décalages par rapport à la taille max","de la pièce sur la plateforme"], + cs_clip_s: "rogner à", + cs_clip_l: ["ébauche et contour","rogner les chemins de coupe","au brut défini"], + cs_ishg_s: "afficher la grille", + cs_ishg_l: ["afficher la grille de la plateforme en mode indexé"], + cs_indx_s: "indexé", + cs_indx_l: ["le brut est monté sur un indexeur rotatif"], + cs_offe_s: "activer", + cs_offe_l: "activer le brut de fraisage", // ORIGIN (CAM & LASER) - or_bnds_s: "origin bounds", - or_bnds_l: ["origin is relative to","boundary of all objects"], - or_cntr_s: "origin center", - or_cntr_l: "origin is referenced from the center", - or_topp_s: "origin top", - or_topp_l: "origin is references from the top of objects", + or_bnds_s: "limites d'origine", + or_bnds_l: ["l'origine est relative à","la limite de tous les objets"], + or_cntr_s: "origine au centre", + or_cntr_l: "l'origine est référencée depuis le centre", + or_topp_s: "origine en haut", + or_topp_l: "l'origine est référencée depuis le haut des objets", + or_offx_s: "décalage d'origine X", + or_offx_l: "décalage d'origine X", + or_offy_s: "décalage d'origine Y", + or_offy_l: "décalage d'origine Y", + + // CAM ORIGIN + co_menu: "origine", + co_offx_s: "décalage x", + co_offx_l: ["décaler l'origine le long de l'axe x","en unités d'espace de travail"], + co_offy_s: "décalage y", + co_offt_l: ["décaler l'origine le long de l'axe y","en unités d'espace de travail"], + co_offz_s: "décalage z", + co_offz_l: ["décaler l'origine le long de l'axe z","en unités d'espace de travail"], // FDM ADVANCED ad_menu: "expert", ad_rdst_s: "distance de rétraction", - ad_rdst_l: ["longueur de filament à rétracter", "pour les longs mouvements. en millimètres"], + ad_rdst_l: ["quantité pour rétracter le filament","pour les longs mouvements. en millimètres"], ad_rrat_s: "vitesse de rétraction", ad_rrat_l: ["vitesse de rétraction","du filament en mm/s"], - ad_rdwl_s: "réenclencher", - ad_wpln_s: "essuyage rétractation", - ad_wpln_l: ["mouvement sans impression", "après rétraction", "en millimètres"], - ad_rdwl_l: ["durée de réenclenchement", "filament et mouvement", "en millisecondes"], - ad_scst_s: "cabotage", - ad_scst_l: ["extrémité non imprimée", "des coques du périmètre", "en millimètres"], - ad_msol_s: "min solide", - ad_msol_l: ["aire minimale (mm^2)","requise pour rester solide","doit être > 0.1"], - ad_mins_s: "vitesse minimale", - ad_mins_l: ["vitesse minimale","des segments courts"], + ad_rdwl_s: "pause d'engagement", + ad_wpln_s: "essuyage de rétraction", + ad_wpln_l: ["mouvement sans impression","après rétraction","en millimètres"], + ad_rdwl_l: ["temps entre le réengagement","du filament et le mouvement","en millisecondes"], + ad_scst_s: "roue libre de coque", + ad_scst_l: ["fin sans impression","des coques de périmètre","en millimètres"], + ad_msol_s: "filtre de zone", + ad_msol_l: ["zone minimale (mm^2)","les ponts et plats inférieurs à ceci sont éliminés"], + ad_mins_s: "vitesse min", + ad_mins_l: ["vitesse minimale","pour les segments courts"], + ad_maxf_s: "débit volumique max", + ad_maxf_l: ["débit volumique maximum supporté par cette tête d'impression et ce filament","en millimètres^3 / seconde"], + ad_scar_s: "longueur de scarfage", + ad_scar_l: ["longueur de montée pour le joint scarfé. désactive la détection d'arc","0 = désactivé"], ad_spol_s: "chemin court", - ad_spol_l: ["les polygones plus courts", "auront la vitesse réduite et", "seront ramenés à la vitesse minimale", "en millimètres"], - ad_arct_s: "tolérance arc", - ad_arct_l: ["convertir les lignes des facettes en arcs", "tolérance de dérive du point central", "lors de la correspondance des points d'arc", "considérer les valeurs autour de 0,15", "en millimètres", "0 désactive"], - ad_zhop_s: "décalage en Z", - ad_zhop_l: ["levée du z","sur les mouvements de rétraction", "en millimètres", "0 désactive"], - ad_abkl_s: "anti-backlash", - ad_abkl_l: ["pour une meilleure finition de la surface plane", "utiliser des micro-mouvements pour annuler", "le jeu dans la sortie de la couche solide", "en millimètres", "0 désactive", "si le firmware reconnait le M425", "l'utiliser dans l'en-tête du gcode", "et mettre à 0"], - ad_lret_s: "rétraction au changement de couche", - ad_lret_l: ["forcer la rétraction du filament", "entre les couches"], - ad_play_s: "couches de polissage", - ad_play_l: ["polir jusqu'au nombre spécifié", "# de couches à la fois"], + ad_spol_l: ["les polygones plus courts que ceci","auront leur vitesse d'impression","réduite à la vitesse min","en millimètres"], + ad_arct_s: "tolérance d'arc", + ad_arct_l: ["convertir les lignes facettées en arcs","tolérance de dérive du point central","lors de la correspondance des points d'arc","considérer des valeurs autour de 0.15","valeur en millimètres","0 ou scarfage désactive ceci"], + ad_zhop_s: "distance de saut z", + ad_zhop_l: ["quantité pour élever z","lors des mouvements de rétraction","en millimètres","0 pour désactiver"], + ad_abkl_s: "anti-jeu", + ad_abkl_l: ["pour une meilleure finition de surface plate","utiliser des micro-mouvements pour annuler","le jeu dans la sortie de couche solide","en millimètres","0 pour désactiver","si votre firmware a M425","mettez cela dans l'en-tête gcode","et laissez ceci à 0"], + ad_lbir_s: "bande d'abord", + ad_lbir_l: ["toujours imprimer les coques touchant la bande avant toute autre coque. ce n'est plus un paramètre recommandé basé sur des tests approfondis."], + ad_altr_s: "alternance", + ad_altr_l: ["alterner l'ordre d'enroulement de coque","sens horaire / antihoraire","peut réduire la déformation dans les zones fines","et aider avec l'adhérence au bord de la bande"], + ad_zint_s: "entrelacer z", + ad_zint_l: ["entrelacer les hauteurs Z avec un nombre impair de coques"], + ad_lret_s: "forcer la rétraction", + ad_lret_l: ["forcer la rétraction du filament entre les couches"], + ad_agap_s: "éviter les espaces", + ad_agap_l: ["contourner les espaces plutôt","que d'effectuer une rétraction","lorsque possible"], + ad_play_s: "polir les couches", + ad_play_l: ["polir jusqu'au nombre spécifié","de couches à la fois"], ad_pspd_s: "vitesse de polissage", - ad_pspd_l: ["vitesse de polissage", "en millimètres / seconde"], + ad_pspd_l: ["vitesse de polissage","en millimètres / seconde"], + ad_purg_s: "tour de purge", + ad_purg_l: ["zone de tour de purge en mm^2","pour les configurations multi-extrudeurs","0 = désactivé"], // CAM EXPERT - cx_fast_s: "skip shadow", - cx_fast_l: ["disable overhang detection","can be faster and use less","memory with complex models","but fails with overhangs","try enabling if slicing","hangs during shadowing"], + cx_fast_s: "ignorer l'ombre", + cx_fast_l: ["désactiver la détection de surplomb","peut être plus rapide et utiliser moins","de mémoire avec des modèles complexes","mais échoue avec les surplombs","essayer d'activer si le tranchage","se bloque pendant l'ombrage"], + cx_true_s: "ombre vraie", + cx_true_l: ["ombre correcte du point de vue informatique","sera plus lent mais produira","de meilleures coupes pour les pièces complexes"], + cx_arce_s: "sortie d'arc", + cx_arce_l: ["EXPÉRIMENTAL : activer la conversion chemin vers arc"], + cx_arct_s: "tolérance d'arc", + cx_arct_l: ["convertir les chemins circulaires en arcs;","tolérance de dérive du point central","lors de la correspondance des points d'arc","considérer des valeurs autour de 0.15","en mm, ou 0.006 pouces;","Des valeurs élevées peuvent causer","un comportement inattendu","0 pour désactiver"], + cx_arcr_s: "résolution d'arc", + cx_arcr_l: ["changement de direction de ligne","acceptable dans un arc","considérer des valeurs autour de 5","Des valeurs élevées peuvent causer","un comportement inattendu",], // FDM GCODE ag_menu: "gcode", ag_nozl_s: "buse", - ag_nozl_l: "sélectionner la buse ou la tête d'impression", - ag_paws_s: "couches de pause", - ag_paws_l: ["liste de couches séparées par des virgules", "pour injecter des commandes de pause avant"], - ag_loop_s: "couches de répétitions", - ag_loop_l: ["des plages de couches à répéter dans le format ", "premier-compte dernier,premier-compte dernier,...", "compte omis = 1"], + ag_nozl_l: "sélectionner la buse ou la tête de sortie", + ag_peel_s: "protection anti-décollage", + ag_peel_l: ["à partir de cette position z de bande","rouler périodiquement l'impression","et la remettre sur la bande pour la décoller","et éviter la déflexion de roulement"], + // ag_paws_s: "couches de pause", + // ag_paws_l: ["liste séparée par des virgules de couches","pour injecter des commandes de pause avant"], + // ag_loop_s: "couches en boucle", + // ag_loop_l: ["plages de couches à répéter au format","premier-dernier-nombre,premier-dernier-nombre,...","nombre omis = 1"], + ag_loop_s: "nombre de boucles", + ag_loop_l: ["nombre de fois pour répéter","la plage sélectionnée ou","toute l'impression si pas de plage"], // SLA MENU sa_menu: "tranchage", sa_lahe_s: "hauteur de couche", sa_lahe_l: ["hauteur de couche","en millimètres"], - sa_shel_s: "hollow shell", - sa_shel_l: ["shell thickness in mm","use multiple of layer height","use 0 for solid (disabled)"], - sa_otop_s: "open top", - sa_otop_l: ["if shell is enabled","results in an open top"], - sa_obas_s: "open base", - sa_obas_l: ["if shell is enabled","results in an open base","disabled with supports"], + sa_shel_s: "coque creuse", + sa_shel_l: ["épaisseur de coque en mm","utiliser un multiple de la hauteur de couche","utiliser 0 pour solide (désactivé)"], + sa_otop_s: "haut ouvert", + sa_otop_l: ["si la coque est activée","résulte en un haut ouvert"], + sa_obas_s: "base ouverte", + sa_obas_l: ["si la coque est activée","résulte en une base ouverte","désactivé avec les supports"], - sa_layr_m: "layers", - sa_lton_s: "light on time", - sa_lton_l: ["layer light on","time in seconds"], - sa_ltof_s: "light off time", - sa_ltof_l: ["layer light off","time in seconds"], - sa_pldi_s: "peel distance", - sa_pldi_l: ["peel distance","in millimeters"], - sa_pllr_s: "peel lift rate", - sa_pllr_l: ["peel lift speed","in mm/sec"], - sa_pldr_s: "peel drop rate", - sa_pldr_l: ["peel drop speed","in mm/sec"], + sa_layr_m: "couches", + sa_lton_s: "temps d'allumage de lumière", + sa_lton_l: ["temps d'allumage de lumière de couche","temps en secondes"], + sa_ltof_s: "temps d'extinction de lumière", + sa_ltof_l: ["temps d'extinction de lumière de couche","temps en secondes"], + sa_pldi_s: "distance de décollage", + sa_pldi_l: ["distance de décollage","en millimètres"], + sa_pllr_s: "vitesse de levée de décollage", + sa_pllr_l: ["vitesse de levée de décollage","en mm/sec"], + sa_pldr_s: "vitesse de descente de décollage", + sa_pldr_l: ["vitesse de descente de décollage","en mm/sec"], sa_base_m: "base", - sa_balc_s: "layer count", - sa_balc_l: ["number of","base layers"], - sa_bltn_l: ["base layer light on","time in seconds"], - sa_bltf_l: ["base layer light off","time in seconds"], + sa_balc_s: "nombre de couches", + sa_balc_l: ["nombre de","couches de base"], + sa_bltn_l: ["temps d'allumage de lumière de couche de base","temps en secondes"], + sa_bltf_l: ["temps d'extinction de lumière de couche de base","temps en secondes"], - sa_infl_m: "infill", - sa_ifdn_s: "density", - sa_ifdn_l: ["percent infill","requires shell","0 = disabled","valid 0.0 - 1.0"], - sa_iflw_s: "line width", - sa_iflw_l: ["hatch line width","in millimeters"], + sa_infl_m: "remplissage", + sa_ifdn_s: "densité", + sa_ifdn_l: ["pourcentage de remplissage","nécessite une coque","0 = désactivé","valide 0.0 - 1.0"], + sa_iflw_s: "largeur de ligne", + sa_iflw_l: ["largeur de ligne de hachure","en millimètres"], sa_supp_m: "support", - sa_slyr_s: "base layers", - sa_slyr_l: ["base support layers","value range 0-10"], - sa_slgp_s: "gap layers", - sa_slgp_l: ["number of layers between","raft and bottom of object"], - sa_sldn_s: "density", - sa_sldn_l: ["used to compute the","number of support pillars","0.0-1.0 (0 = disable)"], - sa_slsz_s: "size", - sa_slsz_l: ["max size of a","support pillar","in millimeters"], + sa_slyr_s: "couches de base", + sa_slyr_l: ["couches de support de base","plage de valeurs 0-10"], + sa_slgp_s: "couches d'espacement", + sa_slgp_l: ["nombre de couches entre","le radeau et le bas de l'objet"], + sa_sldn_s: "densité", + sa_sldn_l: ["utilisé pour calculer le","nombre de piliers de support","0.0-1.0 (0 = désactiver)"], + sa_slsz_s: "taille", + sa_slsz_l: ["taille maximale d'un","pilier de support","en millimètres"], sa_slpt_s: "points", - sa_slpt_l: ["number of points in","each support pillar","in millimeters"], - sl_slen_l: "enable supports", + sa_slpt_l: ["nombre de points dans","chaque pilier de support","en millimètres"], + sl_slen_l: "activer les supports", - sa_outp_m: "output", - sa_opzo_s: "z offset", - sa_opzo_l: ["z layer offset","almost always 0.0","0.0-1.0 in millimeters"], - sa_opaa_s: "anti alias", - sa_opaa_l: ["enable anti-aliasing","produces larger files","can blur details"] + sa_outp_m: "sortie", + sa_opzo_s: "décalage z", + sa_opzo_l: ["décalage de couche z","presque toujours 0.0","0.0-1.0 en millimètres"], + sa_opaa_s: "anti-crénelage", + sa_opaa_l: ["activer l'anti-crénelage","produit des fichiers plus volumineux","peut flouter les détails"] }; diff --git a/web/kiri/lang/pl-pl.js b/web/kiri/lang/pl-pl.js index 6dd105a3..84dbf478 100644 --- a/web/kiri/lang/pl-pl.js +++ b/web/kiri/lang/pl-pl.js @@ -1,82 +1,110 @@ // Polish. Język polski tłumaczony na zasadach własności publicznej self.lang['pl'] = self.lang['pl-pl'] = { - // hasło i tłumaczenie + // common keys and menus animate: "animacja", // CAM animate button arrange: "rozmieść", // layout workspace objects axis: "osie", // left object scale pop menu - clear: "wyczyść", //"czyszczenie z obiektów", // clear workspace (remove all objects) - copy: "kopiowanie", - delete: "kasowanie", + back: "wstecz", + clear: "wyczyść", // clear workspace (remove all objects) + copy: "kopiuj", + clone: "klonuj", // create duplicate + delete: "usuń", detail: "szczegóły", - done: "wykonaj", + done: "gotowe", + edit: "edytuj", enable: "włącz", + disable: "wyłącz", + donate: "wspomóż", export: "eksport", files: "pliki", + filter: "filtruj", + front: "przód", + fullscreen: "pełny ekran", help: "pomoc", - ghost: "druciak", // left render pop menu (wireframe) - hide: "ukryj", // left render pop menu (invisible) + ghost: "szkielet", // left render pop menu (wireframe) + hide: "ukryj", // left render pop menu (invisible) home: "początek", import: "import", + install: "instaluj", language: "język", - machine: "maszyna", // device or machine + left: "lewo", + machines: "maszyny", // device or machine + mesh: "siatka", // mesh editing metric: "metryka", name: "nazwa", - prefs: "ustawienia", // left menu "preferences" + new: "nowy", // file new + off: "wył", // turn something off (like a lightbulb) + on: "wł", // turn something on (like a lightbulb) + profs: "profile", // right menu "profiles" + prefs: "preferencje", // right menu "preferences" preview: "podgląd", - recent: "recent", - render: "render", // left render pop menu + recent: "ostatnie", + rename: "zmień nazwę", + render: "renderuj", // left render pop menu reset: "reset", - rotate: "obróć", // left rotate pop menu + right: "prawo", + rotate: "obróć", // left rotate pop menu save: "zapisz", scale: "skala", // left object scale pop menu - setup: "ustaw", + select: "wybierz", + setup: "konfiguracja", settings: "ustawienia", size: "wielkość", - slice: "plaserki", - solid: "wypełniony", // view type pop menu + slice: "plastruj", + solid: "pełny", // view type pop menu start: "start", tool: "narzędzie", - tools: "narzędzia", // CAM tool menu button + tools: "narzędzia", // CAM tool menu button top: "góra", - type: "typ", // CAM tool type + type: "typ", // CAM tool type + uninstall: "odinstaluj", version: "wersja", - view: "widok", // left view pop menu - wire: "druciak", // left render pop menu "wire" + view: "widok", // left view pop menu + wire: "szkielet", // left render pop menu + volume: "objętość", // device build area - acct_xpo: ["zrób backup swojego urządzenia","i profil urządzenia z","opcja by zapisać przestrzeń roboczą","obiekty i pozycje"], + acct_xpo: ["zrób kopię zapasową urządzenia","i profilów urządzenia z","opcją dołączenia obiektów","w przestrzeni roboczej i ich pozycji"], // RIGHT-CLICK CONTEXT MENU rc_clws: "wyczyść przestrzeń roboczą", - rc_xpws: "wyeksportuj przestrzeń roboczą", + rc_xpws: "eksportuj przestrzeń roboczą", rc_lafl: "ułóż płasko", - rc_mirr: "odbicie", // lustro - rc_dupl: "skopiuj", - rc_xstl: "zapisz w formacie STL", + rc_mirr: "odbij lustrzanie", + rc_dupl: "powiel", + rc_focs: "ustaw ostrość", + rc_heal: "napraw siatki", + rc_swap: "zamień wierzchołki", + rc_xobj: "eksportuj OBJ", + rc_xstl: "eksportuj STL", + sb_info: ["prędkość druku","w mm/s"], + rc_merg: "połącz siatki obiektu", + rc_splt: "wyizoluj bryły", // DEVICE MENU and related dialogs - dm_sldt: "wybierz rodzaj swojego urządzenia", - dm_stdd: "zwykłe urządzenia", + dm_sldt: "wybierz typ urządzenia", + dm_stdd: "standardowe urządzenia", dm_mydd: "moje urządzenia", - dm_seld: "wybierz urządzenie", - dm_rcnt: "ostatnio uzywane pliki", - dm_savs: "zachowane ustawienia", - dm_appp: "Ustawienia programu", + dm_seld: "wybrane urządzenie", + dm_rcnt: "ostatnie pliki", + dm_savs: "ustawienia", + dm_appp: "Preferencje aplikacji", // CAM Tool Dialog - td_tyem: "tępo zakończone", // end mill - td_tybm: "kula na końcu", // ball mill - td_tytm: "zwężający się", // taper mill + td_tyem: "frez walcowy", // end mill + td_tybm: "frez kulisty", // ball mill + td_tytm: "frez stożkowy", // taper mill + td_tydr: "wiertło", // drill td_tonm: "narzędzie #", - td_shft: "wał (pionowy)", // endmill shaft specs - td_flut: "czołowy", // endmill flute specs - td_tapr: "zwężający się", // endmill taper specs + td_shft: "trzpień", // endmill shaft specs + td_flut: "rowek", // endmill flute specs + td_tapr: "stożek", // endmill taper specs // DEVICE dialog groups dv_gr_dev: "urządzenie", dv_gr_ext: "ekstruder", - dv_gr_out: "wynik", - dv_gr_gco: "makra gkodu", + dv_gr_out: "wyjście", + dv_gr_gco: "makra gcode", // DEVICE dialog (_s = label, _l = hover help) dv_name_s: "nazwa", @@ -86,73 +114,120 @@ self.lang['pl-pl'] = { dv_nozl_s: "dysza", dv_nozl_l: "średnica w milimetrach", dv_bedw_s: "szerokość", - dv_bedw_l: "pole robocze w jednostkach", + dv_bedw_l: "jednostki przestrzeni roboczej", dv_bedd_s: "głębokość", - dv_bedd_l: "pole robocze w jednostkach", + dv_bedd_l: "jednostki przestrzeni roboczej", dv_bedh_s: "wysokość", - dv_bedh_l: ["maksymalna wysokość budowania","w jednostkach pola roboczego"], - dv_spmx_s: "maksymalna prędkość wrzeciona", - dv_spmx_l: ["maksymalna prędkość wrzeciona w obrotach na minutę","0 wyłączone"], - dv_xtab_s: "ustawienie pozycji absolutnie", - dv_xtab_l: "absolutna wartość wypchnięcia", + dv_bedh_l: ["maksymalna wysokość budowania","w jednostkach przestrzeni roboczej"], + dv_rezx_s: "rozdzielczość X", + dv_rezx_l: ["rozdzielczość x"], + dv_rezy_s: "rozdzielczość Y", + dv_rezy_l: ["rozdzielczość y"], + dv_zmax_s: "limit prędkości osi Z", + dv_zmax_l: ["maksymalna prędkość osi Z","w milimetrach / sekundę","0 aby wyłączyć"], + dv_time_s: "współczynnik czasu wyjścia", + dv_time_l: ["modyfikator szacowania czasu druku","w oknie dialogowym eksportu gcode.","podnieś lub obniż wartość na podstawie","przewidywanego vs obserwowanego czasu druku"], + dv_spmx_s: "maks. wrzeciono", + dv_spmx_l: ["maksymalna prędkość wrzeciona w obr/min","0 aby wyłączyć"], + dv_xtab_s: "pozycjonowanie absolutne", + dv_xtab_l: "ruchy ekstruzji absolutne", dv_orgc_s: "środek odniesienia", - dv_orgc_l: "środek odniesienia na platformie", - // dv_orgt_s: "odniesienie u góry", - // dv_orgt_l: "oś z odniesienie u góry", - dv_bedc_s: "okrądła platforma drukowania", - dv_bedc_l: "platforma druku jest okrągła", - dv_belt_s: "pas na platformie", - dv_belt_l: "kontynuacja drukowania platformy", - dv_retr_s: "domyślne cofnięcie (retrakcja)", - dv_retr_l: ["firmware urządzenia wspiera kody G10/G11"], - dv_fanp_s: "zasilanie wiatraczków", - dv_fanp_l: "ustawienia zasilania wiatraczków", + dv_orgc_l: "środek odniesienia stołu", + // dv_orgt_s: "origin top", + // dv_orgt_l: "part z origin top", + dv_bedc_s: "okrągły stół", + dv_bedc_l: "stół urządzenia jest okrągły", + dv_belt_s: "stół taśmowy", + dv_belt_l: "ciągły stół drukujący", + dv_fsrc_s: "źródło filamentu", + dv_fsrc_l: ["jak filament jest podawany\ndo ekstrudera"], + dv_retr_s: "retrakcja firmware", + dv_retr_l: ["firmware urządzenia obsługuje G10/G11"], + dv_fanp_s: "chłodzenie", + dv_fanp_l: "ustaw moc wentylatora chłodzącego", + dv_feat_s: "funkcja", + dv_feat_l: "wstrzyknij kod dla określonych funkcji", dv_prog_s: "postęp", - dv_prog_l: "wynik w czasie każdego % postępu", + dv_prog_l: "wyjście przy każdym % postępu", dv_layr_s: "warstwa", - dv_layr_l: ["output at each","layer change"], - dv_tksp_s: "token spacer", - dv_tksp_l: ["add a space between","gcode axis parameters","G0X0Y0X0","vs","G0 X0 Y0 Z0"], - dv_strc_s: "strip comments", - dv_strc_l: ["strip gcode comments","comments begin with ;"], + dv_layr_l: ["wyjście przy każdej","zmianie warstwy"], + dv_tksp_s: "separator tokenów", + dv_tksp_l: ["dodaj spację między","parametrami osi gcode","G0X0Y0X0","vs","G0 X0 Y0 Z0"], + dv_strc_s: "usuń komentarze", + dv_strc_l: ["usuń komentarze gcode","komentarze zaczynają się od ;"], dv_fext_s: "rozszerzenie pliku", - dv_fext_l: "rozszerzenie pliku", - dv_dwll_s: "dwell", - dv_dwll_l: "gcode dwell script", - dv_tool_s: "zmiana narzędzia", + dv_fext_l: "rozszerzenie nazwy pliku", + dv_lazr_s: "włącz laser", + dv_lazr_l: ["włącz operacje laserowe"], + + dv_dwll_s: "przerwa", + dv_dwll_l: "skrypt przerwy gcode", + dv_tool_s: "narzędzie", dv_tool_l: "skrypt zmiany narzędzia", - dv_sspd_s: "prędkość wrzeciona", + dv_sspd_s: "wrzeciono", dv_sspd_l: "ustaw prędkość wrzeciona", dv_paus_s: "pauza", - dv_paus_l: "gkod skryptu pauzy", - dv_head_s: "nagłówek (początek)", - dv_head_l: "skrypt gkod nagłówka", - dv_foot_s: "stopka (zakończenie)", - dv_foot_l: "skrypt gkod stopki", + dv_paus_l: "skrypt pauzy gcode", + dv_head_s: "nagłówek", + dv_head_l: "skrypt nagłówka gcode", + dv_foot_s: "stopka", + dv_foot_l: "skrypt stopki gcode", + dv_pext_s: "zewnętrzny", + dv_pext_l: ["skrypt gcode wykonywany przed","drukowaniem linii zewnętrznych"], + dv_pint_s: "wewnętrzny", + dv_pint_l: ["skrypt gcode wykonywany przed","drukowaniem linii wewnętrznych"], dv_lzon_s: "laser włączony", - dv_lzon_l: "gcode laser on script", + dv_lzon_l: "skrypt włączania lasera gcode", dv_lzof_s: "laser wyłączony", - dv_lzof_l: "gcode laser off script", - dv_exts_s: "zaznacz", - dv_exts_l: "gcode run to enable this extruder", + dv_lzof_l: "skrypt wyłączania lasera gcode", + + dv_waon_s: "woda włączona", + dv_waon_l: "skrypt włączania pompy wodnej gcode", + dv_waof_s: "woda wyłączona", + dv_waof_l: "skrypt wyłączania pompy wodnej gcode", + + dv_dkon_s: "nóż w dół", + dv_dkon_l: "skrypt opuszczania noża gcode", + dv_dkof_s: "nóż w górę", + dv_dkof_l: "skrypt podnoszenia noża gcode", + + dv_exts_s: "wybierz", + dv_exts_l: "gcode do włączenia tego ekstrudera", dv_dext_s: "odznacz", - dv_dext_l: "gcode run before enabling another extruder", - dv_extd_s: "deselect", - dv_extd_l: "gcode to deselect this extruder", - dv_exox_s: "offset x", - dv_exox_l: "nozzle offset x", - dv_exoy_s: "offset y", - dv_exoy_l: "nozzle offset y", + dv_dext_l: "gcode przed włączeniem innego ekstrudera", + dv_extd_s: "odznacz", + dv_extd_l: "gcode do odznaczenia tego ekstrudera", + dv_exox_s: "przesunięcie x", + dv_exox_l: "przesunięcie dyszy x", + dv_exoy_s: "przesunięcie y", + dv_exoy_l: "przesunięcie dyszy y", + + dv_paid_s: "id drukarki", + dv_paid_l: ["unikalny identyfikator drukarki","może być wymyślony"], + dv_paps_s: "odstęp ping", + dv_paps_l: ["minimalne zużycie filamentu","między pingami w milimetrach","zalecane 500 - 1000","0 = wyłącz pingi"], + dv_pafe_s: "długość podawania", + dv_pafe_l: ["długość rurki podającej w milimetrach","krótka=570, średnia=800, długa=1100"], + dv_papl_s: "długość pchnięcia", + dv_papl_l: ["odległość między kołem ekstrudera","a końcówką dyszy w milimetrach"], + dv_paof_s: "długość przesunięcia", + dv_paof_l: ["długość do dodania lub usunięcia z","pierwszego segmentu w milimetrach","zwykle 0"], + dv_pahe_s: "czas nagrzewania", + dv_pahe_l: ["przesunięcie od domyślnego"], + dv_paco_s: "czas chłodzenia", + dv_paco_l: ["przesunięcie od domyślnego"], + dv_pacm_s: "czas kompresji", + dv_pacm_l: ["przesunięcie od domyślnego"], // MODE mo_menu: "tryb", - mo_fdmp: "FDM Druk przyrostowy", - mo_slap: "SLA Druk przyrostowy", - mo_lazr: "Ciecie laserem", + mo_fdmp: "Druk FDM", + mo_slap: "Druk SLA", + mo_lazr: "Cięcie laserowe", mo_cncm: "Frezowanie CNC", // SETUP - su_menu: "ustawienia", + su_menu: "konfiguracja", su_devi: "Urządzenia", su_tool: "Narzędzia", su_locl: "Lokalnie", @@ -161,485 +236,746 @@ self.lang['pl-pl'] = { // LOAD fe_menu: "plik", - fn_recn: "ostatnie pliki", - fn_impo: "Importowanie", + fn_recn: "Ostatnie", + fn_impo: "Import", // FUNCTION - fn_menu: "action", - fn_arra: "Arrange", - fn_slic: "Slice", - fn_prev: "Preview", - fn_expo: "Export", + fn_menu: "akcja", + fn_arra: "Rozmieść", + fn_slic: "Plastruj", + fn_prev: "Podgląd", + fn_expo: "Eksport", // VIEW - vu_menu: "view", - vu_home: "Home", + vu_menu: "widok", + vu_home: "Początek", vu_rset: "Reset", - vu_sptp: "Top", - vu_spfr: "Front", - vu_splt: "Left", - vu_sprt: "Right", + vu_sptp: "Góra", + vu_spfr: "Przód", + vu_splt: "Lewo", + vu_sprt: "Prawo", // WORKSPACE - ws_menu: "view", - ws_save: "Save", - ws_cler: "Clear", + ws_menu: "widok", + ws_save: "Zapisz", + ws_cler: "Wyczyść", // OPTIONS - op_menu: "interface", - op_disp: "display", - op_xprt_s: "expert", - op_xprt_l: "show more settings options", - op_decl_s: "decals", - op_decl_l: "show device decals and logos", - op_dang_s: "experimental", - op_dang_l: "show experimental parameters", - op_hopo_s: "hover pop", - op_hopo_l: ["enable menu hover","to activate"], - op_dark_s: "dark mode", - op_dark_l: "dark mode interface", - op_comp_s: "compact ui", - op_comp_l: ["compact user interface","better for small screens","and tablets"], - op_shor_s: "show origin", - op_shor_l: "show device or process origin", - op_shru_s: "show rulers", - op_shru_l: ["show axes rulers","on major gridlines"], - op_sped_s: "show speeds", - op_sped_l: ["show speed to color bar","in preview mode"], - op_auto_s: "auto layout", - op_auto_l: ["automatically layout platform","when new items added"], - op_free_s: "free layout", - op_free_l: ["permit dragable layout","no effect in laser mode"], - op_spcr_s: "spacing", - op_spcr_l: ["spacing between objects","during auto layout","in workspace units"], - op_orth_s: "orthographic", - op_orth_l: ["orthographic display","requires page refresh"], - op_invr_s: "invert zoom", - op_invr_l: ["invert mouse wheel","scroll zoom"], - op_save_s: "auto save", - op_save_l: ["preserve objects in workspace","between application reloads"], - op_line_s: "line type", - op_line_l: ["line style for path rendering","impacts 3d performance","path: 3d best","flat: 2d good","line = 1d fast"], - op_unit_s: "units", - op_unit_l: ["workspace units affects","speeds and distances"], - op_anim_s: "animate", - op_anim_l: ["animation mesh density","higher is more dense","takes more memory","and is slower"], + op_menu: "interfejs", + op_disp: "wyświetlanie", + op_xprt_s: "ekspert", + op_xprt_l: "pokaż więcej opcji ustawień", + op_decl_s: "pokaż naklejki", + op_decl_l: "pokaż naklejki i loga urządzenia", + op_shny_s: "szczegółowe renderowanie", + op_shny_l: "wybierz metodę renderowania plastru, która jest wolniejsza i używa podświetlenia lustrzanego. to ułatwia zobaczenie szczegółów w niektórych modelach kosztem prędkości renderowania", + op_devl_s: "deweloper", + op_devl_l: ["pokaż opcje dewelopera","włącz debugowanie dewelopera"], + op_hopo_s: "wyskakujące menu", + op_hopo_l: ["włącz wyskakujące menu","do aktywacji"], + op_dark_s: "tryb ciemny", + op_dark_l: "interfejs trybu ciemnego", + op_comp_s: "kompaktowy ui", + op_comp_l: ["kompaktowy interfejs użytkownika","lepszy dla małych ekranów","i tabletów"], + op_shor_s: "pokaż odniesienie", + op_shor_l: "pokaż odniesienie urządzenia lub procesu", + op_shru_s: "pokaż linijki", + op_shru_l: ["pokaż linijki osi","na głównych liniach siatki"], + op_sped_s: "pokaż prędkości", + op_sped_l: ["pokaż pasek prędkość-kolor","w trybie podglądu"], + op_auto_s: "automatyczny układ", + op_auto_l: ["automatycznie rozmieść platformę","gdy dodano nowe elementy"], + op_free_s: "swobodny układ", + op_free_l: ["pozwól na przeciągalny układ","brak efektu w trybie laserowym"], + op_spcr_s: "odstępy", + op_spcr_l: ["odstępy między obiektami","podczas automatycznego układu","w jednostkach przestrzeni roboczej","w trybie taśmowym użyj 0","aby automatycznie odstępować według wysokości"], + op_spoa_s: "kąt krawędzi", + op_spoa_l: ["różnica kąta powierzchni wywołująca śledzenie krawędzi"], + op_spcx_s: "losowe X", + op_spcx_l: ["w trybie taśmowym, losowo","rozmieść część na X","aby równomiernie zużywać taśmę"], + op_orth_s: "ortograficzny", + op_orth_l: ["wyświetlanie ortograficzne","wymaga odświeżenia strony"], + op_anta_s: "antyaliasing", + op_anta_l: ["gładkie wyświetlanie. lepsze ale wolniejsze","wymaga odświeżenia strony lub przeładowania"], + op_invr_s: "odwróć zoom", + op_invr_l: ["odwróć kółko myszy","zoom przewijania"], + op_save_s: "automatyczny zapis", + op_save_l: ["zachowaj obiekty w przestrzeni roboczej","między przeładowaniami aplikacji"], + op_line_s: "typ linii", + op_line_l: ["styl linii do renderowania ścieżki","wpływa na wydajność 3d","ścieżka: 3d najlepszy","płaski: 2d dobry","linia = 1d szybki"], + op_unit_s: "jednostki", + op_unit_l: ["jednostki przestrzeni roboczej wpływają","na prędkości i odległości"], + op_anim_s: "animuj", + op_anim_l: ["gęstość siatki animacji","wyższa jest bardziej gęsta","zajmuje więcej pamięci","i jest wolniejsza"], + op_exgl_l: ["pokaż urządzenia Grid:Local w oknie dialogowym eksportu","zawiera Grid:Bots i wtyczki OctoPrint"], + op_exgh_l: ["starsze wsparcie sieci lokalnej Grid:Host"], + op_exop_l: ["starsze wsparcie sieci lokalnej OctoPrint","zalecana wtyczka Grid:Space OctoPrint"], - lo_menu: "layout", + lo_menu: "układ", - pt_menu: "parts", - pt_deci_s: "decimate", - pt_deci_l: ["enable or disable point decimation","during port import. for faster slicing","and lower memory usage"], - pt_qual_s: "quality", - pt_qual_l: ["level of detail to retain","during slicing operations","lower is faster"], - pt_heal_s: "heal mesh", - pt_heal_l: ["attempt to heal","non-manifold meshes","adds to slicing time"], + pt_menu: "slicer", + pt_deci_s: "decymacja", + pt_deci_l: ["włącz lub wyłącz decymację punktów","podczas importu portu. dla szybszego plastrowania","i mniejszego użycia pamięci"], + pt_qual_s: "szczegółowość", + pt_qual_l: ["poziom szczegółowości do zachowania podczas operacji plastrowania. niższy jest szybszy i zużywa mniej pamięci. modele na dużą skalę często nie korzystają z wyższej szczegółowości. zamiast tego może to tylko powodować problemy z pamięcią i przetwarzaniem. zmniejsz tę wartość, jeśli pojawiają się błędy braku pamięci."], + pt_heal_s: "napraw siatkę", + pt_heal_l: ["spróbuj naprawić niewłaściwe siatki podczas plastrowania. może zwiększyć czas plastrowania. włącza ostrzeżenie, gdy wykryto niewłaściwe geometrie."], + pt_thrd_s: "wątkowy", + pt_thrd_l: ["użyj przetwarzania równoległego, gdy przeglądarka obsługuje zagnieżdżone wątki robocze. może zwiększyć presję pamięci na większych modelach. wyłącz, jeśli pojawiają się błędy braku pamięci"], + pt_assy_s: "web asm", + pt_assy_l: ["użyj web assembly, gdy jest obsługiwane przez przeglądarkę. jeśli doświadczasz artefaktów lub błędów pamięci, spróbuj to wyłączyć."], + pt_wgpu_s: "web gpu", + pt_wgpu_l: ["użyj web gpu, gdy jest obsługiwane przez przeglądarkę. jeśli doświadczasz artefaktów lub błędów pamięci, spróbuj to wyłączyć."], - xp_menu: "exports", + xp_menu: "eksporty", // SETTINGS - se_menu: "profile", - se_load: "load", - se_save: "save", + se_menu: "profil", + se_load: "wczytaj", + se_save: "zapisz", - // FDM SLICING - sl_menu: "layers", - sl_lahi_s: "height", - sl_lahi_l: ["height of each slice","layer in millimeters"], - ad_minl_s: "height min", - ad_minl_l: ["adaptive min layer height","in millimeters","must be non-zero"], - sl_ltop_s: "top layers", - sl_ltop_l: ["number of solid layers","to enforce at the","top of the print"], - sl_lsld_s: "solid layers", - sl_lsld_l: ["solid fill areas computed","from layer deltas. see","layer pop menu"], - sl_lbot_s: "base layers", - sl_lbot_l: ["number of solid layers","to enforce at the","bottom of the print"], - ad_adap_s: "adaptive", - ad_adap_l: ["use adaptive layer heights","with 'layer height' as max","and 'layer min' as the min"], + // FDM LAYERS + sl_menu: "warstwy", + sl_angl_s: "kąt plastra", + sl_angl_l: ["odchylenie kąta plastra w stopniach"], + sl_lahi_s: "wysokość warstwy", + sl_lahi_l: ["wysokość każdego plastra","warstwy w milimetrach"], + ad_minl_s: "minimum warstwy", + ad_minl_l: ["adaptacyjna minimalna wysokość warstwy","w milimetrach","musi być niezerowa"], + ad_adap_s: "wysokość adaptacyjna", + ad_adap_l: ["użyj adaptacyjnych wysokości warstw","z 'wysokością warstwy' jako maksimum","i 'minimum warstwy' jako minimum"], + sl_ltop_s: "warstwy górne", + sl_ltop_l: ["liczba litych warstw na górze wydruku lub na płaskich obszarach skierowanych w górę"], + sl_lsld_s: "warstwy lite", + sl_lsld_l: ["obszary litego wypełnienia obliczone","z mostów i płaskich obszarów","wykrytych między warstwami plastrów"], + sl_lbot_s: "warstwy bazowe", + sl_lbot_l: ["liczba litych warstw na dole wydruku lub pod rozpiętościami mostów"], + + // FDM WALLS + sw_menu: "powłoki", + sl_shel_s: "liczba powłok", + sl_shel_l: ["liczba obwodowych","ścian do wygenerowania"], + ad_thin_s: "cienkie ściany", + ad_thin_l: ["wykryj i wypełnij szczeliny","między ścianami powłok"], // FDM SHELLS - sl_shel_s: "shell count", - sl_shel_l: ["number of perimeter","walls to generate"], - sl_ordr_s: "shell order", - sl_ordr_l: ["output shell order","inside to outside","or outside to inside","affects surface quality"], - sl_strt_s: "layer start", - sl_strt_l: ["layer starting point","last = last layer end","center = part center","origin = device origin"], - ad_thin_s: "thin walls", - ad_thin_l: ["detect and fill gaps","between shell walls"], + sl_line_s: "szerokość linii", + sl_line_l: ["szerokość ekstruzji w milimetrach","0 = średnica dyszy"], + sl_ordr_s: "kolejność powłok", + sl_ordr_l: ["kolejność wyjściowa powłok","od wewnątrz na zewnątrz","lub od zewnątrz do wewnątrz","wpływa na jakość powierzchni"], + sl_strt_s: "punkt startowy", + sl_strt_l: ["punkt startowy warstwy","ostatni = gdzie zakończyła się ostatnia warstwa","środek = środek części","odniesienie = odniesienie urządzenia","losowy = yolo"], + sl_ofin_s: "przesunięcie powłoki wewnętrznej", + sl_ofin_l: ["przesunięcie obwodu wewnętrznego otworu","w milimetrach"], + sl_ofot_s: "przesunięcie powłoki zewnętrznej", + sl_ofot_l: ["przesunięcie obwodu ściany zewnętrznej","w milimetrach"], + + // FDM SOLID + fs_menu: "wypełnienie lite", + fi_over_s: "nakładanie wypełnienia", + fi_over_l: ["nakładanie między powłokami a litym lub rzadkim wypełnieniem. może poprawić połączenie z powłokami","jako ułamek szerokości linii","0.0 - 1.0"], + fi_angl_s: "kąt startowy", + fi_angl_l: ["kąt startowy w stopniach","90 stopni dodane do ","każdej następnej warstwy","dotyczy tylko warstw litych"], + fi_grow_s: "rozszerzenie obszaru", + fi_grow_l: ["rozszerz rzutowane obszary lite","może pomóc z obszarami litymi","nad obszarami rzadkiego wypełnienia","jednostki w milimetrach"], // FDM FILL - fi_menu: "infill", - fi_type: "type", - fi_pcnt_s: "fill fraction", - fi_pcnt_l: ["fill density values","0.0 - 1.0"], - fi_angl_s: "solid start", - fi_angl_l: ["starting angle in degrees","90 degrees added to ","each following layer","applies only to solid layers"], - fi_over_s: "overlap", - fi_over_l: ["overlap with shell and other fill","as fraction of nozzle diameter","0.0 - 1.0"], - // fi_rate_s: "print speed", - fi_rate_l: ["extrusion speed for infill","set to 0 to use default","output print speeds"], + fi_menu: "wypełnienie rzadkie", + fi_type: "typ wypełnienia", + fi_pcnt_s: "ilość wypełnienia", + fi_pcnt_l: ["wartości gęstości wypełnienia","0.0 - 1.0"], + fi_rept_s: "powtórzenie wypełnienia", + fi_rept_l: ["liczba powtórzeń","niezmiennych warstw wypełnienia"], + // fi_rate_s: "prędkość druku", + fi_rate_l: ["prędkość ekstruzji dla wypełnienia","ustaw na 0, aby użyć domyślnej","prędkości druku wyjściowego"], + + // FDM HEATING + fh_menu: "grzanie", + + // FDM COOLING + fc_menu: "chłodzenie", // FDM FIRST LAYER - fl_menu: "base", - fl_lahi_s: "layer height", - fl_lahi_l: ["height of each slice","in millimeters","should be >= slice height"], - fl_rate_s: "shell speed", - fl_rate_l: ["shell printing max speed","in millimeters / second"], - fl_frat_s: "fill speed", - fl_frat_l: ["fill printing max speed","in millimeters / second"], - fl_mult_s: "flow factor", - fl_mult_l: ["extrusion multiplier","0.0 - 2.0"], - fl_sfac_s: "width factor", - fl_sfac_l: ["multiplier on nozzle size","changes line spacing"], - fl_skrt_s: "skirt count", - fl_skrt_l: ["number of first-layer offset","brims to generate"], - fl_skro_s: "skirt offset", - fl_skro_l: ["skirt offset from part","in millimeters"], - fl_nozl_s: "nozzle temp", - fl_nozl_l: ["degrees in celsius","output setting used","when this is zero"], - fl_bedd_s: "bed temp", - fl_bedd_l: ["degrees in celsius","output setting used","when this is zero"], - fr_spac_s: "raft gap", - fr_spac_l: ["additional layer spacing","between 1st layer and raft","in millimeters"], - fr_nabl_s: "raft enable", - fr_nabl_l: ["create a raft under the","model for better adhesion","uses skirt offset and","disables skirt output"], + fl_menu: "baza", + fl_lahi_s: "wysokość warstwy", + fl_lahi_l: ["wysokość każdego plastra","w milimetrach","powinna być >= wysokość plastra"], + fl_rate_s: "prędkość powłoki", + fl_rate_l: ["maksymalna prędkość drukowania powłoki","w milimetrach / sekundę"], + fl_frat_s: "prędkość wypełnienia", + fl_frat_l: ["maksymalna prędkość drukowania wypełnienia","w milimetrach / sekundę"], + fl_mult_s: "współczynnik przepływu", + fl_mult_l: ["mnożnik ekstruzji","0.0 - 2.0"], + fl_sfac_s: "współczynnik szerokości", + fl_sfac_l: ["mnożnik na rozmiar dyszy","zmienia odstępy linii"], + fl_skrt_s: "liczba spódniczek", + fl_skrt_l: ["liczba przesuniętych","obrzeży pierwszej warstwy do wygenerowania"], + fl_skro_s: "przesunięcie spódniczki", + fl_skro_l: ["przesunięcie spódniczki od części","w milimetrach","gdy używane są tratwy","to jest przesunięcie tratwy"], + fl_nozl_s: "temp dyszy", + fl_nozl_l: ["stopnie w Celsjuszu","używane ustawienie wyjściowe","gdy to jest zero"], + fl_bedd_s: "temp stołu", + fl_bedd_l: ["stopnie w Celsjuszu","używane ustawienie wyjściowe","gdy to jest zero"], + fr_spac_s: "szczelina tratwy", + fr_spac_l: ["dodatkowe odstępy warstw","między 1. warstwą a tratwą","w milimetrach"], + fr_nabl_s: "włącz tratwę", + fr_nabl_l: ["utwórz tratwę pod","modelem dla lepszej przyczepności","używa przesunięcia spódniczki i","wyłącza wyjście spódniczki"], + fr_draf_s: "osłona przed przeciągiem", + fr_draf_l: ["rozszerz spódniczkę do wysokości części","która działa jak osłona przed","przeciągiem i zatrzymuje gorące powietrze"], // FDM BELT ONLY - fl_zoff_s: "belt offset", - fl_zoff_l: ["height offset from belt","of lowest extrusion","in millimeters"], - fl_brim_s: "brim size", - fl_brim_l: ["add brim to part bottom","size is width in millimeters","0 to disable"], - fl_brmn_s: "brim trigger", - fl_brmn_l: ["add brims only when segment","facing belt is shorter than this","value in millimeters","0 = Infinity"], - fl_bled_s: "part anchor", - fl_bled_l: ["belt part anchor","at start of print","in millimeters"], + fl_zoff_s: "przesunięcie taśmy", + fl_zoff_l: ["przesunięcie wysokości od taśmy","najniższej ekstruzji","w milimetrach"], + fl_flat_s: "spłaszczenie", + fl_flat_l: ["spłaszcz do taśmy każdy punkt","wysokości mniejszej niż ta wartość","w milimetrach"], + fl_brim_s: "boki obrzeża", + fl_brim_l: ["dodaj obrzeże do obwodu części","rozmiar to szerokość w milimetrach","0 aby wyłączyć"], + fl_brin_s: "wnętrze obrzeża", + fl_brin_l: ["dodaj obrzeże do wnętrza części","gdy istnieją wewnętrzne puste przestrzenie","rozmiar to szerokość w milimetrach","0 aby wyłączyć"], + fl_brmn_s: "wyzwalacz obrzeża", + fl_brmn_l: ["dodaj obrzeża tylko gdy segment","zwrócony do taśmy jest krótszy niż to","wartość w milimetrach","0 = Nieskończoność"], + fl_brco_s: "grzebień obrzeża", + fl_brco_l: ["dodaj szczeliny obrzeża","co n linii","0 aby wyłączyć"], + fl_brgp_s: "szczelina obrzeża", + fl_brgp_l: ["odstęp między obrzeżem a częścią","w milimetrach"], + fl_bled_s: "kotwiczenie części", + fl_bled_l: ["kotwiczenie części taśmy","na początku druku","w milimetrach"], + fl_blmp_s: "wypustka kotwicy", + fl_blmp_l: ["dodaj wypustkę na początku","kotwicy, aby pomóc jej oderwać","się na końcu taśmy","w milimetrach"], // FDM SUPPORT - sp_menu: "support", - sp_detect: "detect", - sp_dens_s: "density", - sp_dens_l: ["fraction 0.0 - 1.0","recommended 0.15","0 to disable"], - sp_size_s: "pillar size", - sp_size_l: ["pillar width","in millimeters"], - sp_offs_s: "part offset", - sp_offs_l: ["offset from part","in millimeters"], - sp_gaps_s: "gap layers", - sp_gaps_l: ["number of layers","offset from part"], - sp_span_s: "max span", - sp_span_l: ["unsupported span that causes","a new support to be generated","in millimeters"], - sp_angl_s: "max angle", - sp_angl_l: ["max overhang angle before","supporting pillar is generated"], - sp_area_s: "min area", - sp_area_l: ["minimum area for","a support column","in millimeters"], - sp_xpnd_s: "expand", - sp_xpnd_l: ["expand support area","beyond part boundary","in millimeters"], - sp_nozl_s: "extruder", - sp_nozl_l: ["in multi-extruder systems","the extruder to use for","support material"], - sp_auto_s: "automatic", - sp_auto_l: ["enable generated supports","using at-slice-time geometry","supports will only appear","after slicing completes"], - - // LASER SLICING - ls_offs_s: "offset", - ls_offs_l: ["adjust for beam width","in millimeters"], - ls_lahi_s: "height", - ls_lahi_l: ["layer height","in millimeters","0 = auto/detect"], - ls_lahm_s: "min", - ls_lahm_l: ["layer height minimum","will merge auto slices","under this thickness","in millimeters"], - ls_sngl_s: "single", - ls_sngl_l: ["perform only one slice","at specified layer height"], + sp_menu: "podpory", + sp_detect: "wykryj", + sp_dens_s: "gęstość", + sp_dens_l: ["ułamek 0.0 - 1.0","zalecane 0.15","0 aby wyłączyć"], + sp_size_s: "rozmiar słupka", + sp_size_l: ["szerokość słupka w milimetrach","mniejsze wartości wykładniczo","zwiększają czasy wykrywania"], + sp_offs_s: "przesunięcie części", + sp_offs_l: ["przesunięcie od części","w milimetrach"], + sp_gaps_s: "warstwy szczeliny", + sp_gaps_l: ["liczba warstw","przesunięcia od części"], + sp_span_s: "maks. rozpiętość", + sp_span_l: ["niewspierana rozpiętość, która powoduje","wygenerowanie nowej podpory","w milimetrach"], + sp_angl_s: "maks. kąt", + sp_angl_l: ["maksymalny kąt przewieszenia przed","wygenerowaniem słupka podpory","normalne wartości 45-60","wartości taśmowe 0-10"], + sp_area_s: "min. obszar", + sp_area_l: ["minimalny obszar dla","kolumny podpory","w milimetrach","mniejsze wartości będą","spowalniać wykrywanie"], + sp_xpnd_s: "rozszerz", + sp_xpnd_l: ["rozszerz obszar podpory","poza granicę części","w milimetrach"], + sp_grow_s: "wzrost", + sp_grow_l: ["wzrost kolumny podpory, aby wypełnić małe szczeliny","w milimetrach"], + sp_nozl_s: "ekstruder", + sp_nozl_l: ["w systemach wieloekstruderowych","ekstruder do użycia dla","materiału podpory"], + sp_outl_s: "zamknięty", + sp_outl_l: ["zamknij wzór podpory","wewnątrz powłoki obwodowej"], + sp_auto_s: "automatyczny", + sp_auto_l: ["włącz wygenerowane podpory","używając geometrii w czasie plastrowania","podpory pojawią się tylko","po zakończeniu plastrowania"], // CNC COMMON terms - cc_tool: "tool", - cc_offs_s: "offset", - cc_offs_l: ["offset tool center","from chosen path"], - cc_spnd_s: "spindle rpm", - cc_spnd_l: ["spindle speed in","revolutions / minute"], - cc_sovr_s: "step over", - cc_sovr_l: ["as a fraction of","tool diameter"], - cc_sdwn_s: "step down", - cc_sdwn_l: ["step down depth","for each pass","in workspace units","0 to disable"], - cc_feed_s: "feed rate", - cc_feed_l: ["max cutting speed in","workspace units / minute"], - cc_plng_s: "plunge rate", - cc_plng_l: ["max z axis speed in","workspace units / minute"], - cc_sngl_s: "select lines only", - cc_sngl_l: ["select only single edges","instead of connected polylines"], + cc_tool: "narzędzie", + cc_offs_s: "przesunięcie", + cc_offs_l: ["przesuń środek narzędzia","od wybranej ścieżki"], + cc_spnd_s: "obroty wrzeciona", + cc_spnd_l: ["prędkość wrzeciona w","obrotach / minutę"], + cc_sovr_s: "krok w bok", + cc_sovr_l: ["ułamek średnicy narzędzia między 0 a 1. wartości większe niż 0.49 mogą skutkować nieobrobionymi obszarami lub niepożądanymi artefaktami."], + cc_sovc_s: "szerokie kroki", + cc_sovc_l: ["liczba szerokich kroków wycięcia"], + cc_sang_s: "kąt kroku", + cc_sang_l: ["obrót w stopniach między osiowymi punktami tokarki"], + cc_sdwn_s: "krok w dół", + cc_sdwn_l: ["głębokość kroku w dół","dla każdego przejścia","w jednostkach przestrzeni roboczej","0 aby wyłączyć"], + cc_thru_s: "przecięcie", + cc_thru_l: ["dodatkowa głębokość cięcia poniżej dna śladu"], + cc_offd_s: "przesunięcie", + cc_offd_l: ["zastępuje domyślną odległość przesunięcia (która jest promieniem narzędzia), gdy ustawiona na dowolną wartość oprócz zera"], + cc_feed_s: "prędkość posuwu", + cc_feed_l: ["maksymalna prędkość cięcia w","jednostkach przestrzeni roboczej / minutę"], + cc_plng_s: "prędkość zagłębienia", + cc_plng_l: ["maksymalna prędkość osi z w","jednostkach przestrzeni roboczej / minutę"], + cc_sngl_s: "wybierz tylko linie", + cc_sngl_l: ["wybierz tylko pojedyncze krawędzie","zamiast połączonych polilinii"], + cc_sele_s: "wybierz", + cc_sele_l: ["wybierz linie do śledzenia","wybierz pętle do czyszczenia","wybierz powierzchnię do kieszeni"], // CNC COMMON - cc_menu: "limits", - cc_flip: "flip", - cc_rapd_s: "xy feed", - cc_rapd_l: ["max xy moves feedrate","in workspace units / minute"], - cc_rzpd_s: "z feed", - cc_rzpd_l: ["max z moves feedrate","in workspace units / minute"], + cc_menu: "limity", + cc_rapd_s: "posuw xy", + cc_rapd_l: ["maksymalna prędkość posuwu ruchów xy","w jednostkach przestrzeni roboczej / minutę"], + cc_rzpd_s: "posuw z", + cc_rzpd_l: ["maksymalna prędkość posuwu ruchów z","w jednostkach przestrzeni roboczej / minutę"], - cc_loff_s: "offset", - cc_loff_l: ["distance from stock face","for leveling pass","in workspace units"], + // CNC LEVELING + cc_loff_s: "przesunięcie z", + cc_loff_l: ["odległość od powierzchni materiału","w jednostkach przestrzeni roboczej"], + cc_lxyo_s: "przesunięcie xy", + cc_lxyo_l: ["przesunięcie xy od granicy części jako ułamek średnicy narzędzia (0 - 1.0)"], + cc_lsto_s: "materiał", + cc_lsto_l: ["użyj obszaru materiału zamiast obszaru części"], // CNC ROUGHING - cr_menu: "rough", - cr_lsto_s: "leave stock", - cr_lsto_l: ["horizontal offset from vertical faces","stock to leave for finishing pass","in workspace units"], - cr_ease_s: "ease down", - cr_ease_l: ["plunge cuts will","spiral down or ease","along a linear path"], - cr_clrt_s: "clear top", - cr_clrt_l: ["run a clearing pass over","the bounding area of the part","at z = 0"], - cr_clrp_s: "clear voids", - cr_clrp_l: ["mill out through pockets","instead of just the outline"], - cr_clrf_s: "clear faces", - cr_clrf_l: ["interpolate step down to","clear any detected flat areas"], - cr_olin_s: "inside only", - cr_olin_l: ["limit cutting to","inside part boundaries"], + cr_menu: "zgrubne", + cr_lsto_s: "zostaw materiał", + cr_lsto_l: ["poziome przesunięcie od ścian pionowych","materiał do pozostawienia na przejście wykończeniowe","w jednostkach przestrzeni roboczej"], + cr_lstz_s: "zostaw materiał z", + cr_lstz_l: ["pionowe przesunięcie dla przejść zgrubnych w jednostkach przestrzeni roboczej. najlepsze do zgrubnego obróbki zakrzywionych powierzchni."], + cr_ease_s: "łagodne opuszczanie", + cr_ease_l: ["cięcia zagłębienia będą","spiralne w dół lub łagodne","wzdłuż ścieżki liniowej"], + cr_clst_s: "wyczyść materiał", + cr_clst_l: ["w trybie indeksowanym, wyczyść cały obszar materiału, nie tylko do obwodu części"], + cr_clrt_s: "wyczyść górę", + cr_clrt_l: ["uruchom przejście czyszczące nad","obszarem ograniczającym części","przy z = 0"], + cr_clrp_s: "wyczyść puste przestrzenie", + cr_clrp_l: ["wyfreza kieszenie","zamiast tylko konturu"], + cr_clrf_s: "wyczyść powierzchnie", + cr_clrf_l: ["interpoluj krok w dół, aby","wyczyścić wykryte płaskie obszary"], + cr_olin_s: "tylko wewnątrz", + cr_olin_l: ["ogranicz cięcie do","wewnątrz granic części"], // CNC OUTLINE - co_menu: "outline", - co_dogb_s: "dogbones", - co_dogb_l: ["insert dogbone cuts","into inside corners"], - co_wide_s: "wide cutout", - co_wide_l: ["widen outside cutout paths","for deep cuts in hard material"], - co_olin_s: "inside only", - co_olin_l: ["limit cutting to","inside part boundaries"], - co_olot_s: "outside only", - co_olot_l: ["limit cutting to","exterior part boundaries","which can be thought of","as the shadow outline"], - co_omit_s: "omit through", - co_omit_l: "eliminate thru holes", - co_olen_s: "enable", - co_olen_l: "enabled outline cutting", + co_menu: "kontur", + co_merg_s: "scalenie nakładania", + co_merg_l: ["scal nakładające się linie, aby zapobiec nadciąciu w sąsiednie bryły"], + co_dogb_s: "otwory dogbone", + co_dogb_l: ["wstaw cięcia dogbone","w wewnętrzne narożniki"], + co_dogr_s: "odwróć kości", + co_dogr_l: ["odwróć kierunek dogbone"], + co_clrt_s: "wyczyść górę", + co_clrt_l: ["ciąć zaczynając od góry materiału","gdy materiał jest włączony"], + co_wide_s: "szerokie wycięcie", + co_wide_l: ["poszerz zewnętrzne ścieżki wycięcia","dla głębokich cięć w twardym materiale"], + co_olin_s: "tylko wewnątrz", + co_olin_l: ["ogranicz cięcie do","wewnątrz granic części"], + co_olot_s: "tylko zewnątrz", + co_olot_l: ["ogranicz cięcie do","zewnętrznych granic części","co można uznać","za kontur cienia"], + co_omit_s: "pomiń przelotowe", + co_omit_l: "eliminuj otwory przelotowe", + co_omvd_s: "pomiń kieszeń", + co_omvd_l: "eliminuj kieszenie wewnętrzne", + co_olen_s: "włącz", + co_olen_l: "włączone cięcie konturu", // CNC CONTOUR - cn_menu: "contour", - cf_angl_s: "max angle", - cf_angl_l: ["angles greater than this","are considered vertical"], - cf_curv_s: "curves only", - cf_curv_l: ["limit linear cleanup","to curved surfaces"], - cf_olin_s: "inside only", - cf_olin_l: ["limit cutting to","inside part boundaries"], - cf_linx_s: "enable y pass", - cf_linx_l: "linear y-axis finishing", - cf_liny_s: "enable x pass", - cf_liny_l: "linear x-axis finishing", + cn_menu: "kontur", + cf_angl_s: "maks. kąt", + cf_angl_l: ["zmiany w z, które skutkują kątami większymi niż to, są uważane za pionowe i pominięte z krzywych"], + cf_leav_s: "zostaw materiał", + cf_leav_l: ["ilość materiału do pozostawienia nad powierzchnią części"], + cf_botm_s: "z dół", + cf_botm_l: ["przestrzegaj limitu z dół"], + cf_curv_s: "tylko krzywe", + cf_curv_l: ["ogranicz czyszczenie liniowe","do zakrzywionych powierzchni"], + cf_olin_s: "tylko wewnątrz", + cf_olin_l: ["ogranicz cięcie do","wewnątrz granic części"], + cf_linx_s: "włącz przejście y", + cf_linx_l: "liniowe wykończenie osi y", + cf_liny_s: "włącz przejście x", + cf_liny_l: "liniowe wykończenie osi x", // CNC TRACE - cu_menu: "trace", - cu_type_s: "type", - cu_type_l: ["follow = tool tip follows line","right or left = tool tip","follows line offset by tool radius"], + cu_menu: "ślad", + cu_type_s: "typ", + cu_type_l: ["czyść = wyczyść kieszeń zamkniętej linii","śledź = końcówka narzędzia śledzi linię","z opcją przesunięcia gdy zamknięta"], + + // CNC POCKET + cp_xpnd_s: "rozszerz", + cp_xpnd_l: ["zwiększ (+) lub zmniejsz (-) wybrane obszary","kontur używa całego wybranego obszaru","nie-kontur domyślnie używa promienia narzędzia","w jednostkach przestrzeni roboczej"], + cp_smoo_s: "wygładź", + cp_smoo_l: ["oczyść postrzępione krawędzie spowodowane skośnymi ścianami. może przyspieszyć i poprawić kieszonkowanie dla szczegółowych geometrii. zaleca się rozpoczęcie od wartości około 1, jeśli plastrowanie trwa zbyt długo lub kontury wyglądają postrzępione"], + cp_foll_s: "wybór", + cp_foll_l: ["limit wyboru krzywizny w stopniach. wartości bliższe 0 ograniczą wybory do płaskich powierzchni"], + cp_refi_s: "udoskonal", + cp_refi_l: ["liczba przejść udoskonalających do wykonania na okonturowanych poliliniach. przeznaczone do rozwiązania piłowania zęby delta Z spowodowanego geometriami powierzchniowymi, podczas gdy wygładzanie obsługuje XY. wartości > 10 działają dobrze dla delikatnie okonturowanych geometrii ze znacznym ruchem Z."], + cp_cont_s: "kontur", + cp_cont_l: ["ignoruj wewnętrzne puste przestrzenie i cechy"], + cp_engr_s: "graweruj", + cp_engr_l: ["ustawia pojedyncze przejście wokół obwodu wybranego obszaru. również przydatne do znakowania laserowego 3D"], + cp_outl_s: "tylko kontur", + cp_outl_l: ["ignoruj wewnętrzne puste przestrzenie i cechy"], // CNC DRILLING - cd_menu: "drill", - cd_axis: "axis", - cd_points: "points", - cd_plpr_s: "plunge per", - cd_plpr_l: ["max plunge between","dwell periods","in workspace units","0 to disable"], - cd_dwll_s: "dwell time", - cd_dwll_l: ["dwell time","between plunges in","in milliseconds"], - cd_lift_s: "drill lift", - cd_lift_l: ["lift between plunges","after dwell period","in workspace units","0 to disable"], - cd_regi_s: "register", - cd_regi_l: ["drill registration holes","for double-sided parts","independent of enable","drilling but uses same","tool and settings"], + cd_menu: "wiercenie", + cd_axis: "oś", + cd_points: "punkty", + // cd_plpr_s: "zagłębianie na", + // cd_plpr_l: ["maks. zagłębienie między","okresami przerwy","w jednostkach przestrzeni roboczej","0 aby wyłączyć"], + cd_dwll_s: "czas przerwy", + cd_dwll_l: ["czas przerwy","między zagłębieniami w","w milisekundach"], + cd_lift_s: "podniesienie wiertła", + cd_lift_l: ["podniesienie między zagłębieniami","po okresie przerwy","w jednostkach przestrzeni roboczej","0 aby wyłączyć"], + cd_thru_s: "rozszerzenie z", + cd_thru_l: ["rozszerz cięcie w dół przez materiał","w jednostkach przestrzeni roboczej"], + cd_dtru_s: "wiercenie przelotowe", + cd_dtru_l: ["dodatkowa głębokość wiercenia poniżej dna części","zastępuje globalne z przelotowe","0 aby wyłączyć"], + cd_mark_s: "znakowanie", + cd_mark_l: ["tylko oznacz otwory, nie wierć","ustawienie kroku w dół jest używane","do określenia głębokości znakowania"], + cd_ftop_s: "od góry materiału", + cd_ftop_l: ["wierć od góry materiału","zamiast powierzchni części"], + cd_prcn_s: "precyzja", + cd_prcn_l: ["odległość między plastrami","do wyszukiwania otworów","w jednostkach przestrzeni roboczej","niższa jest wolniejsza i","używa więcej pamięci","0 = tylko płaskie"], + + cd_seli_l: ["indywidualnie wybierz otwory","do wiercenia"], + cd_sela_s: "Wybierz pasującą średnicę", + cd_sela_l: ["wybierz wszystkie otwory, które", "pasują do wybranej średnicy narzędzia"], + + //CNC Registration + cd_regi_s: "rejestracja", + cd_regi_l: ["wierć otwory rejestracyjne","dla części dwustronnych","niezależnie od włączenia","wiercenia, ale używa tego samego","narzędzia i ustawień"], + cd_rego_s: "przesunięcie części", + cd_rego_l: ["przesunięcie środka otworu","od ramki ograniczającej części","w jednostkach przestrzeni roboczej"], + + // CNC HELICAL toolpath + ch_menu: "śrubowy", + ch_sdwn_s: "krok w dół (skok)", + ch_sdwn_l: ["odległość z","na obrót","w jednostkach przestrzeni roboczej","(odwrotność gwintów na jednostkę)", "0 aby wyłączyć"], + ch_fsta_s: "wymuś kąt startowy", + ch_fsta_l: ["zastąp kąt startowy","domyślnie najbliższy punkt do narzędzia"], + ch_stra_s: "kąt startowy", + ch_stra_l: ["kąt startowy helisy","w stopniach ccw osi +x"], + ch_selc_l: ["wybierz powierzchnię cylindra", "wewnętrzne otwory, które są zbyt małe","będą ignorowane."], + ch_fini_s: "przejście wykończeniowe dołem", + ch_fini_l: ["śledź okrąg na dole helisy","używane do czyszczenia otworów"], + ch_entr_s: "wejście ze środka", + ch_entr_l: ["rozpocznij cięcie od środka cylindra","łagodnie wyginając poziomo", "zamiast zagłębiania"], + ch_ento_s: "przesunięcie wejścia środkowego", + ch_ento_l: ["przesunięcie od ścieżki dla zakrzywionego wejścia","zwykle głębokość gwintu, jeśli frezowanie gwintów","w jednostkach przestrzeni roboczej","0 dla wejścia liniowego"], + ch_rvrs_s: "odwróć", + ch_rvrs_l: ["odwróć kierunek osi z helisy","niskie-Z do wysokiego-Z gdy zaznaczone","przydatne do frezowania gwintów","nie zalecane dla innych operacji"], + ch_clkw_s: "zgodnie z ruchem wskazówek zegara", + ch_clkw_l: ["odwróć obrót helisy wokół cylindra","zgodnie z ruchem wskazówek zegara gdy zaznaczone"], + + // CNC FLIP + cf_menu: "odwróć", + cf_nvrt_s: "z dół", + cf_nvrt_l: "odwróć ustawienie z dół, aby śledzić materiał", + + // CNC INDEX AXIS + ci_degr_s: "stopnie", + ci_degr_l: "stopnie do obrócenia osi A (indeksowanej)", + ci_abso_s: "absolutny", + ci_abso_l: "obrót stopnia jest absolutny", + ci_face_s: "powierzchnia", + ci_face_l: "wybierz powierzchnię do obrócenia skierowaną w górę", + ci_line_s: "liniowy", + ci_line_l: "wykonaj przejścia liniowe wzdłuż X, następnie obróć Y", + ci_laso_s: "przesunięcie startowe", + ci_laso_l: ["przesunięcie x od lewej części. wartości ujemne są poza częścią. w jednostkach przestrzeni roboczej"], + ci_laeo_s: "przesunięcie końcowe", + ci_laeo_l: ["przesunięcie x od prawej części. wartości ujemne są poza częścią. w jednostkach przestrzeni roboczej"], + + // CNC LASER On/Off Operations (Carvera) + cl_powr_s: "moc", + cl_powr_l: "moc lasera od 0 do 1.0", + cl_adap_s: "adaptacyjny", + cl_adap_l: "użyj adaptacyjnej mocy na podstawie wysokości Z", + cl_adrp_s: "powtarzający", + cl_adrp_l: "zastosuj modulo wysokości Z używając danego pasma, aby stworzyć powtarzające się wzory", + cl_flat_s: "spłaszcz", + cl_flat_l: "spłaszcz wyjście do danej wysokości Z", + cl_flaz_s: "wysokość płaska", + cl_flaz_l: ["spłaszcz wyjście do tej wysokości Z", "w jednostkach przestrzeni roboczej"], + cl_minp_s: "z min moc", + cl_minp_l: ["ustawienie mocy w najniższej części pasma Z. może być wyższe lub niższe niż drugi koniec pasma Z."], + cl_maxp_s: "z maks moc", + cl_maxp_l: ["ustawienie mocy w najwyższej części pasma Z. może być wyższe lub niższe niż drugi koniec pasma Z."], + cl_minz_s: "min wysokość z", + cl_minz_l: ["najniższa pozycja pasma Z"], + cl_maxz_s: "maks wysokość z", + cl_maxz_l: ["najwyższa pozycja pasma Z. gdy ustawione na 0, używa najwyższego punktu Z przestrzeni roboczej"], // CNC CUTOUT TABS - ct_menu: "tabs", - ct_angl_s: "angle", - ct_angl_l: ["starting angle for tab spacing","in degrees (0-360)"], - ct_numb_s: "count", - ct_numb_l: ["number of tabs to use","will be spaced evenly","around the part"], - ct_wdth_s: "width", - ct_wdth_l: "width in workspace units", - ct_hght_s: "height", - ct_hght_l: "height in workspace units", - ct_dpth_s: "depth", - ct_dpth_l: ["distance in workspace units","that the tab projects from","the part surface"], - ct_midl_s: "midline", - ct_midl_l: ["use midline of tab","instead of z bottom","for double-sided work"], + ct_menu: "wypustki", + ct_angl_s: "kąt", + ct_angl_l: ["kąt startowy dla odstępu wypustek","w stopniach (0-360)"], + ct_numb_s: "liczba", + ct_numb_l: ["liczba wypustek do użycia","będą rozmieszczone równomiernie","wokół części"], + ct_wdth_s: "szerokość", + ct_wdth_l: "szerokość w jednostkach przestrzeni roboczej", + ct_hght_s: "wysokość", + ct_hght_l: "wysokość w jednostkach przestrzeni roboczej", + ct_dpth_s: "głębokość", + ct_dpth_l: ["odległość w jednostkach przestrzeni roboczej","że wypustka wystaje od","powierzchni części"], + ct_midl_s: "linia środkowa", + ct_midl_l: ["użyj linii środkowej wypustki","zamiast z dół","dla pracy dwustronnej"], ct_nabl_s: "auto", - ct_nabl_l: ["auto generate radial tabs","projected from part center","using count and angle offset"], + ct_nabl_l: ["automatycznie generuj wypustki promieniowe","rzutowane od środka części","używając liczby i przesunięcia kąta"], // OUTPUT - ou_menu: "output", + ou_menu: "wyjście", + + // LASER SLICING + ls_offs_s: "przesunięcie / szczelina", + ls_offs_l: ["odległość między środkiem cięcia","ścieżki a krawędzią pozostałego materiału","w milimetrach"], + ls_lahi_s: "wysokość plastra", + ls_lahi_l: ["wysokość warstwy","w milimetrach","0 = auto/wykryj"], + ls_lahm_s: "minimum plastra", + ls_lahm_l: ["minimalna wysokość warstwy","scali automatyczne plastry","poniżej tej grubości","w milimetrach"], + ls_sngl_s: "pojedynczy plaster", + ls_sngl_l: ["wykonaj tylko jeden plaster","na określonej wysokości warstwy"], // LASER KNIFE - dk_menu: "knife", - dk_dpth_s: "cut depth", - dk_dpth_l: ["final cut depth","in millimeters"], - dk_pass_s: "cut passes", - dk_pass_l: ["number of passes","down to cut depth"], - dk_offs_s: "tip offset", - dk_offs_l: ["distance from blade tip","to center of tool","in millimeters"], + dk_menu: "nóż ciągnący", + dk_dpth_s: "głębokość cięcia", + dk_dpth_l: ["końcowa głębokość cięcia","w milimetrach"], + dk_pass_s: "przejścia cięcia", + dk_pass_l: ["liczba przejść","w dół do głębokości cięcia"], + dk_offs_s: "przesunięcie końcówki", + dk_offs_l: ["odległość od końcówki ostrza","do środka narzędzia","w milimetrach"], - // OUTPUT LASER - ou_spac_s: "spacing", - ou_spac_l: ["distance between layer output","in millimeters"], - ou_scal_s: "scaling", - ou_scal_l: "multiplier (0.1 to 100)", - ou_powr_s: "power", - ou_powr_l: ["0 - 100","represents %"], - ou_sped_s: "speed", - ou_sped_l: "millimeters / second", - ou_mrgd_s: "merged", - ou_mrgd_l: ["merge all layers using","color coding to denote","stacking depth"], - ou_grpd_s: "grouped", - ou_grpd_l: ["retain each layer as","a unified grouping","instead of separated","polygons"], - ou_layr_s: "layer order", - ou_layr_l: ["output layer order","from top right to","bottom left"], - ou_layo_s: "layer color", - ou_layo_l: ["output layer colors","for each z index","overridden by merged"], - ou_drkn_s: "drag knife", - ou_drkn_l: ["enable drag knife","output in gcode","cut radii are added","to corners with","cut down passes"], + // WIRE EDM + we_omit_s: "pomiń wewnętrzne", + we_omit_l: "pomiń wewnętrzne wielokąty", + + // LASER OUTPUT + ou_spac_s: "odstępy", + ou_spac_l: ["odległość między wyjściem warstw","w milimetrach"], + ou_scal_s: "skalowanie", + ou_scal_l: "mnożnik (0.1 do 100)", + ou_powr_s: "moc", + ou_powr_l: ["0 - 100","reprezentuje %"], + ou_sped_s: "prędkość", + ou_sped_l: "milimetry / sekundę", + ou_mrgd_s: "scalony", + ou_mrgd_l: ["scal wszystkie warstwy używając","kodowania kolorami do oznaczenia","głębokości układania"], + ou_grpd_s: "pogrupowany", + ou_grpd_l: ["zachowaj każdą warstwę jako","ujednoliconą grupę","zamiast oddzielonych","wielokątów"], + ou_layr_s: "kolejność warstw", + ou_layr_l: ["kolejność wyjściowa warstw","od góry po prawej do","dołu po lewej"], + ou_layo_s: "kolor warstwy", + ou_layo_l: ["kolory wyjściowe warstw","dla każdego indeksu z","zastąpione przez scalony"], + ou_lays_s: "oznaczanie warstw", + ou_lays_l: ["oznacz warstwy do układania. warstwa powyżej zostanie wyprowadzona w innym kolorze, który laser może oznaczyć niższą mocą. włącza grupowanie warstw."], + ou_drkn_s: "nóż ciągnący", + ou_drkn_l: ["włącz nóż ciągnący","wyjście w gcode","promienie cięcia są dodawane","do narożników z","przejściami cięcia w dół"], + ou_stak_s: "stos 3d", + ou_stak_l: ["wyjście jest stosem 3D ścieżek 2D, a nie pakowaniem warstw płasko w 2D"], + ou_maxp_s: "maks moc", + ou_maxp_l: ["wartość maksymalnej mocy w gcode. % mocy z ustawień będzie skalowany od 0 do tej wartości"], + ou_inch_s: "imperialne", + ou_inch_l: ["wartości wyjściowe w calach"], + ou_shap_s: "narzędzie shaper", + ou_shap_l: ["adnotuj SVG z niestandardowymi atrybutami narzędzia Shaper"], // OUTPUT FDM - ou_nozl_s: "nozzle temp", - ou_nozl_l: "degrees in celsius", - ou_bedd_s: "bed temp", - ou_bedd_l: "degrees in celsius", - ou_feed_s: "print speed", - ou_feed_l: ["max print speed","millimeters / second"], - ou_fini_s: "finish speed", - ou_fini_l: ["outermost shell speed","millimeters / second"], - ou_move_s: "move speed", - ou_move_l: ["non-print move speed","millimeters / second","0 = enable G0 moves"], - ou_shml_s: "shell factor", - ou_flml_s: "solid factor", - ou_spml_s: "infill factor", - ou_exml_l: ["extrusion multiplier","0.0 - 2.0"], - ou_fans_s: "fan speed", + ou_nozl_s: "temp dyszy", + ou_nozl_l: "stopnie w Celsjuszu", + ou_bedd_s: "temp stołu", + ou_bedd_l: "stopnie w Celsjuszu", + ou_feed_s: "prędkość druku", + ou_feed_l: ["maksymalna prędkość drukowania","ustaw na 0, aby użyć domyślnej","milimetry / sekundę"], + ou_fini_s: "prędkość wykończenia", + ou_fini_l: ["prędkość najbardziej zewnętrznej powłoki","mostowe/płaskie lite warstwy","ustaw na 0, aby użyć domyślnej","milimetry / sekundę"], + ou_move_s: "prędkość ruchu", + ou_move_l: ["prędkość ruchu bez drukowania","milimetry / sekundę","0 = włącz ruchy G0"], + ou_shml_s: "współczynnik powłoki", + ou_flml_s: "współczynnik lity", + ou_spml_s: "współczynnik wypełnienia", + ou_exml_l: ["mnożnik ekstruzji","0.0 - 2.0"], + ou_fanl_s: "wentylator na warstwie", + ou_fanl_l: ["# warstwy do włączenia wentylatora","warstwy zaczynają się od 0"], + ou_fans_s: "prędkość włączenia wentylatora", ou_fans_l: "0 - 255", + ou_layt_s: "minimalny czas warstwy", + ou_layt_l: ["minimalny dopuszczalny czas druku warstwy w sekundach. drukowanie zostanie spowolnione, jeśli warstwa zakończyłaby się w mniejszej liczbie sekund.","0 = wyłączone"], // OUTPUT CAM - ou_toll_s: "tolerance", - ou_toll_l: ["surface precision","in workspace units","lower is slower and","uses more memory","0 = automatic based","on animate preference"], - ou_zanc_s: "z anchor", - ou_zanc_l: ["controls the position of the part","when stock Z exceeds part Z"], - ou_ztof_s: "z offset", - ou_ztof_l: ["offset z anchor","in workspace units","has no effect when","anchor is middle"], - ou_zbot_s: "z bottom", - ou_zbot_l: ["offset from part bottom","to limit cutting depth","in workspace units"], - ou_zclr_s: "z clearance", - ou_zclr_l: ["safe travel offset","from top of part","in workspace units"], - ou_ztru_s: "z thru", - ou_ztru_l: ["extend cutout pass down","in workspace units"], - ou_conv_s: "conventional", - ou_conv_l: ["milling direction","uncheck for 'climb'"], - ou_depf_s: "depth first", - ou_depf_l: ["optimize pocket cuts","with depth priority"], + ou_toll_s: "precyzja", + ou_toll_l: ["precyzja powierzchni","w jednostkach przestrzeni roboczej","niższa jest wolniejsza i","używa więcej pamięci","0 = automatyczna na podstawie","preferencji animacji"], + ou_flat_s: "płaskość", + ou_flat_l: ["delta z poniżej którego dwa sąsiednie punkty są uważane za współliniowe. 0 = oblicz używając tolerancji"], + ou_redu_s: "redukcja", + ou_redu_l: ["liczba kroków osi do pominięcia dla każdej jednostki precyzji. wyższa precyzja może wymagać redukcji, aby uzyskać rozsądne rozmiary plików. zacznij od 0 i testuj w przyrostach 1."], + ou_brdg_s: "mostkowanie", + ou_brdg_l: ["płaska odległość między zakrzywionymi","obszarami do pomostowania cięciem"], + ou_zanc_s: "kotwica z", + ou_zanc_l: ["kontroluje pozycję części","gdy Z materiału przekracza Z części"], + ou_ztof_s: "przesunięcie z", + ou_ztof_l: ["przesuń kotwicę z","w jednostkach przestrzeni roboczej"], + ou_ztop_s: "z góra", + ou_ztop_l: ["przesunięcie od dna materiału","aby ustawić początek głębokości cięcia","w jednostkach przestrzeni roboczej","* wiercenie/kontur to ignoruje *"], + ou_zbot_s: "z dół", + ou_zbot_l: ["przesunięcie od dna materiału","aby ograniczyć głębokość cięcia","w jednostkach przestrzeni roboczej"], + ou_zclr_s: "prześwit z", + ou_zclr_l: ["bezpieczne przesunięcie podróży","od góry części","w jednostkach przestrzeni roboczej"], + ou_ztru_s: "z przelotowe", + ou_ztru_l: ["rozszerz przejście wycięcia w dół","w jednostkach przestrzeni roboczej"], + ou_conv_s: "konwencjonalne", + ou_conv_l: ["kierunek frezowania","odznacz dla 'wspinaczkowego'"], + ou_depf_s: "głębokość pierwsza", + ou_depf_l: ["optymalizuj cięcia kieszeni","z priorytetem głębokości"], + ou_inrf_s: "wewnątrz pierwszy", + ou_inrf_l: ["zawsze ciąć od wewnątrz na zewnątrz"], + ou_toin_s: "inicjalizacja narzędzia", + ou_toin_l: "dodaj zmianę narzędzia z pierwszą operacją. gdy wyłączone, gcode zakłada, że pierwsze narzędzie jest załadowane i przesunięcie zmierzone", + ou_forz_s: "wymuś z maks", + ou_forz_l: "wszystkie ruchy między kieszeniami pójdą do z maks (nad materiałem). jest to zwykle wymagane, jeśli nie wykonujesz operacji zgrubnej przed operacjami kieszonkowymi.", + ou_z1st_s: "pierwszy z maks", + ou_z1st_l: "pierwszy ruch w pracy będzie do Z maks (odległość podróży nad materiałem)", + ou_feng_s: "współczynnik zaangażowania", + ou_feng_l: "skala prędkości (0.1-1) gdy frez jest w pełni zaangażowany w nowe cięcie. cięcia krokowe, gdy frez jest mniej niż w pełni zaangażowany, działają z współczynnikiem 1 względem prędkości wyjściowej. zazwyczaj odnosi się to do zgrubnego lub dowolnej operacji z krokiem w bok.", + ou_eang_s: "kąt łagodzenia", + ou_eang_l: "kąt zejścia dla łagodnego opuszczania w stopniach", // CAM STOCK - cs_menu: "stock", - cs_wdth_s: "width", - cs_wdth_l: ["width (x) in workspace units","0 defaults to part size"], - cs_dpth_s: "depth", - cs_dpth_l: ["depth (y) in workspace units","0 defaults to part size"], - cs_hght_s: "height", - cs_hght_l: ["height (z) in workspace units","0 defaults to part size"], - cs_offs_s: "offset", - cs_offs_l: ["use width, depth, height","as offsets from max","part size on platform"], - cs_clip_s: "clip to", - cs_clip_l: ["rough and outline","clip cutting paths","to defined stock"], - cs_offe_s: "enable", - cs_offe_l: "enable milling stock", + cs_menu: "materiał", + cs_wdth_s: "szerokość", + cs_wdth_l: ["szerokość (x) w jednostkach przestrzeni roboczej","0 domyślnie rozmiar części"], + cs_dpth_s: "głębokość", + cs_dpth_l: ["głębokość (y) w jednostkach przestrzeni roboczej","0 domyślnie rozmiar części"], + cs_hght_s: "wysokość", + cs_hght_l: ["wysokość (z) w jednostkach przestrzeni roboczej","0 domyślnie rozmiar części"], + cs_offs_s: "przesunięcie", + cs_offs_l: ["użyj szerokości, głębokości, wysokości","jako przesunięć od maksymalnego","rozmiaru części na platformie"], + cs_clip_s: "przytnij do", + cs_clip_l: ["zgrubne i kontur","przytnij ścieżki cięcia","do zdefiniowanego materiału"], + cs_ishg_s: "pokaż siatkę", + cs_ishg_l: ["pokaż siatkę platformy w trybie indeksowanym"], + cs_indx_s: "indeksowany", + cs_indx_l: ["materiał jest zamontowany na indekserze obrotowym"], + cs_offe_s: "włącz", + cs_offe_l: "włącz materiał frezarski", // ORIGIN (CAM & LASER) - or_bnds_s: "origin bounds", - or_bnds_l: ["origin is relative to","boundary of all objects"], - or_cntr_s: "origin center", - or_cntr_l: "origin is referenced from the center", - or_topp_s: "origin top", - or_topp_l: "origin is references from the top of objects", + or_bnds_s: "granice odniesienia", + or_bnds_l: ["odniesienie jest względne do","granicy wszystkich obiektów"], + or_cntr_s: "środek odniesienia", + or_cntr_l: "odniesienie jest odniesione od środka", + or_topp_s: "góra odniesienia", + or_topp_l: "odniesienie jest odniesione od góry obiektów", + or_offx_s: "przesunięcie odniesienia X", + or_offx_l: "przesunięcie odniesienia X", + or_offy_s: "przesunięcie odniesienia Y", + or_offy_l: "przesunięcie odniesienia Y", + + // CAM ORIGIN + co_menu: "odniesienie", + co_offx_s: "przesunięcie x", + co_offx_l: ["przesuń odniesienie wzdłuż osi x","w jednostkach przestrzeni roboczej"], + co_offy_s: "przesunięcie y", + co_offt_l: ["przesuń odniesienie wzdłuż osi y","w jednostkach przestrzeni roboczej"], + co_offz_s: "przesunięcie z", + co_offz_l: ["przesuń odniesienie wzdłuż osi z","w jednostkach przestrzeni roboczej"], // FDM ADVANCED - ad_menu: "expert", - ad_rdst_s: "retract dist", - ad_rdst_l: ["amount to retract filament","for long moves. in millimeters"], - ad_rrat_s: "retract rate", - ad_rrat_l: ["speed of filament","retraction in mm/s"], - ad_rdwl_s: "engage dwell", - ad_wpln_s: "retract wipe", - ad_wpln_l: ["non-printing move","after retraction","in millimeters"], - ad_rdwl_l: ["time between re-engaging","filament and movement","in milliseconds"], - ad_scst_s: "shell coast", - ad_scst_l: ["non-printing end","of perimeter shells","in millimeters"], - ad_msol_s: "min solid", - ad_msol_l: ["minimum area (mm^2)","required to keep solid","must be > 0.1"], - ad_mins_s: "min speed", - ad_mins_l: ["minimum speed","for short segments"], - ad_spol_s: "short path", - ad_spol_l: ["polygons shorter than this","will have their print speed","scaled down to min speed","in millimeters"], - ad_arct_s: "arc tolerance", - ad_arct_l: ["convert faceted lines to arcs","center point drift tolerance","when matching arc points","consider values around 0.15","in millimeters","0 to disable"], - ad_zhop_s: "z hop dist", - ad_zhop_l: ["amount to raise z","on retraction moves","in millimeters","0 to disable"], - ad_abkl_s: "anti-backlash", - ad_abkl_l: ["for better flat surface finish","use micro-movements to cancel","backlash in solid layer output","in millimeters","0 to disable","if your firmware has M425","put that in the gcode header","and leave this as 0"], - ad_lret_s: "layer retract", - ad_lret_l: ["force filament retraction","between layers"], - ad_play_s: "polish layers", - ad_play_l: ["polish up to specified","# of layers at a time"], - ad_pspd_s: "polish speed", - ad_pspd_l: ["polishing speed","in millimeters / second"], + ad_menu: "ekspert", + ad_rdst_s: "odległość retrakcji", + ad_rdst_l: ["ilość do cofnięcia filamentu","dla długich ruchów. w milimetrach"], + ad_rrat_s: "prędkość retrakcji", + ad_rrat_l: ["prędkość filamentu","retrakcji w mm/s"], + ad_rdwl_s: "przerwa zaangażowania", + ad_wpln_s: "wytarcie retrakcji", + ad_wpln_l: ["ruch bez drukowania","po retrakcji","w milimetrach"], + ad_rdwl_l: ["czas między ponownym zaangażowaniem","filamentu a ruchem","w milisekundach"], + ad_scst_s: "wybieg powłoki", + ad_scst_l: ["koniec bez drukowania","powłok obwodowych","w milimetrach"], + ad_msol_s: "filtr obszaru", + ad_msol_l: ["minimalny obszar (mm^2)","mosty i płaskie mniejsze niż to są usuwane"], + ad_mins_s: "min prędkość", + ad_mins_l: ["minimalna prędkość","dla krótkich segmentów"], + ad_maxf_s: "maks przepływ", + ad_maxf_l: ["maksymalna objętościowa prędkość przepływu obsługiwana przez tę głowicę drukującą i filament","w milimetrach^3 / sekundę"], + ad_scar_s: "długość skarfy", + ad_scar_l: ["długość wybiegu dla połączenia skarfy. wyłącza wykrywanie łuku","0 = wyłączone"], + ad_spol_s: "krótka ścieżka", + ad_spol_l: ["wielokąty krótsze niż to","będą miały swoją prędkość druku","skalowaną w dół do min prędkości","w milimetrach"], + ad_arct_s: "tolerancja łuku", + ad_arct_l: ["konwertuj fazowane linie na łuki","tolerancja dryfu punktu środkowego","przy dopasowywaniu punktów łuku","rozważ wartości około 0.15","wartość w milimetrach","0 lub skarfa wyłącza to"], + ad_zhop_s: "odległość skoku z", + ad_zhop_l: ["ilość do podniesienia z","podczas ruchów retrakcji","w milimetrach","0 aby wyłączyć"], + ad_abkl_s: "anty-luz", + ad_abkl_l: ["dla lepszego wykończenia płaskich powierzchni","użyj mikro-ruchów, aby anulować","luz w wyjściu warstwy litej","w milimetrach","0 aby wyłączyć","jeśli twój firmware ma M425","umieść to w nagłówku gcode","i zostaw to jako 0"], + ad_lbir_s: "taśma pierwsza", + ad_lbir_l: ["zawsze drukuj powłoki dotykające taśmy przed wszelkimi innymi powłokami. to już nie jest zalecane ustawienie oparte na szeroko zakrojonych testach."], + ad_altr_s: "na przemian", + ad_altr_l: ["na przemian kolejność owijania powłoki","zgodnie z ruchem wskazówek zegara / przeciwnie do ruchu wskazówek zegara","może zmniejszyć wypaczenie w cienkich obszarach","i pomóc w przyczepności krawędzi taśmy"], + ad_zint_s: "przeplata z", + ad_zint_l: ["przeplata wysokości Z z nieparzystą liczbą powłok"], + ad_lret_s: "wymuś retrakcję", + ad_lret_l: ["wymuś retrakcję filamentu między warstwami"], + ad_agap_s: "unikaj szczelin", + ad_agap_l: ["objedź wokół szczelin, a nie","wykonuj retrakcję","gdy to możliwe"], + ad_play_s: "poleruj warstwy", + ad_play_l: ["poleruj do określonej","# warstw naraz"], + ad_pspd_s: "prędkość polerowania", + ad_pspd_l: ["prędkość polerowania","w milimetrach / sekundę"], + ad_purg_s: "wieża czyszcząca", + ad_purg_l: ["obszar wieży czyszczącej w mm^2","dla konfiguracji wieloekstruderowych","0 = wyłączone"], // CAM EXPERT - cx_fast_s: "skip shadow", - cx_fast_l: ["disable overhang detection","can be faster and use less","memory with complex models","but fails with overhangs","try enabling if slicing","hangs during shadowing"], + cx_fast_s: "pomiń cień", + cx_fast_l: ["wyłącz wykrywanie przewieszenia","może być szybsze i używać mniej","pamięci z złożonymi modelami","ale zawodzi z przewieszeniami","spróbuj włączyć, jeśli plastrowanie","zawiesza się podczas cieniowania"], + cx_true_s: "prawdziwy cień", + cx_true_l: ["obliczeniowo poprawny cień","będzie wolniejszy, ale wytworzy","lepsze cięcia dla złożonych części"], + cx_arce_s: "wyjście łuku", + cx_arce_l: ["EKSPERYMENTALNE: włącz konwersję ścieżki na łuk"], + cx_arct_s: "tolerancja łuku", + cx_arct_l: ["konwertuj okrągłe ścieżki na łuki;","tolerancja dryfu punktu środkowego","przy dopasowywaniu punktów łuku","rozważ wartości około 0.15","w mm lub 0.006 cala;","Wysokie wartości mogą powodować","nieoczekiwane zachowanie","0 aby wyłączyć"], + cx_arcr_s: "rozdzielczość łuku", + cx_arcr_l: ["zmiana w kierunku linii","akceptowalna w łuku","rozważ wartości około 5","Wysokie wartości mogą powodować","nieoczekiwane zachowanie",], // FDM GCODE ag_menu: "gcode", - ag_nozl_s: "nozzle", - ag_nozl_l: "select output nozzle or head", - ag_paws_s: "pause layers", - ag_paws_l: ["comma-separated list of layers","to inject pause commands before"], - ag_loop_s: "loop layers", - ag_loop_l: ["layer ranges to repeat in the format","first-last-count,first-last-count,...","omitted count = 1"], + ag_nozl_s: "dysza", + ag_nozl_l: "wybierz dyszę wyjściową lub głowicę", + ag_peel_s: "osłona odrywania", + ag_peel_l: ["zaczynając od tej pozycji z taśmy","okresowo zwijaj wydruk i","z powrotem na taśmę, aby odkleić go","i zapobiec ugięciu rolowania"], + // ag_paws_s: "warstwy pauzy", + // ag_paws_l: ["lista warstw oddzielona przecinkami","aby wstrzyknąć polecenia pauzy przed"], + // ag_loop_s: "warstwy pętli", + // ag_loop_l: ["zakresy warstw do powtórzenia w formacie","pierwsza-ostatnia-liczba,pierwsza-ostatnia-liczba,...","pominięta liczba = 1"], + ag_loop_s: "liczba pętli", + ag_loop_l: ["liczba powtórzeń","wybranego zakresu lub","całego druku, jeśli brak zakresu"], // SLA MENU - sa_menu: "slicing", - sa_lahe_s: "layer height", - sa_lahe_l: ["layer height","in millimeters"], - sa_shel_s: "hollow shell", - sa_shel_l: ["shell thickness in mm","use multiple of layer height","use 0 for solid (disabled)"], - sa_otop_s: "open top", - sa_otop_l: ["if shell is enabled","results in an open top"], - sa_obas_s: "open base", - sa_obas_l: ["if shell is enabled","results in an open base","disabled with supports"], + sa_menu: "plastrowanie", + sa_lahe_s: "wysokość warstwy", + sa_lahe_l: ["wysokość warstwy","w milimetrach"], + sa_shel_s: "pusta powłoka", + sa_shel_l: ["grubość powłoki w mm","użyj wielokrotności wysokości warstwy","użyj 0 dla litego (wyłączone)"], + sa_otop_s: "otwarta góra", + sa_otop_l: ["jeśli powłoka jest włączona","skutkuje otwartą górą"], + sa_obas_s: "otwarta podstawa", + sa_obas_l: ["jeśli powłoka jest włączona","skutkuje otwartą podstawą","wyłączone z podporami"], - sa_layr_m: "layers", - sa_lton_s: "light on time", - sa_lton_l: ["layer light on","time in seconds"], - sa_ltof_s: "light off time", - sa_ltof_l: ["layer light off","time in seconds"], - sa_pldi_s: "peel distance", - sa_pldi_l: ["peel distance","in millimeters"], - sa_pllr_s: "peel lift rate", - sa_pllr_l: ["peel lift speed","in mm/sec"], - sa_pldr_s: "peel drop rate", - sa_pldr_l: ["peel drop speed","in mm/sec"], + sa_layr_m: "warstwy", + sa_lton_s: "czas włączenia światła", + sa_lton_l: ["warstwa włączenia światła","czas w sekundach"], + sa_ltof_s: "czas wyłączenia światła", + sa_ltof_l: ["warstwa wyłączenia światła","czas w sekundach"], + sa_pldi_s: "odległość odrywania", + sa_pldi_l: ["odległość odrywania","w milimetrach"], + sa_pllr_s: "prędkość podnoszenia odrywania", + sa_pllr_l: ["prędkość podnoszenia odrywania","w mm/sek"], + sa_pldr_s: "prędkość opuszczania odrywania", + sa_pldr_l: ["prędkość opuszczania odrywania","w mm/sek"], - sa_base_m: "base", - sa_balc_s: "layer count", - sa_balc_l: ["number of","base layers"], - sa_bltn_l: ["base layer light on","time in seconds"], - sa_bltf_l: ["base layer light off","time in seconds"], + sa_base_m: "podstawa", + sa_balc_s: "liczba warstw", + sa_balc_l: ["liczba","warstw podstawowych"], + sa_bltn_l: ["warstwa podstawowa włączenia światła","czas w sekundach"], + sa_bltf_l: ["warstwa podstawowa wyłączenia światła","czas w sekundach"], - sa_infl_m: "infill", - sa_ifdn_s: "density", - sa_ifdn_l: ["percent infill","requires shell","0 = disabled","valid 0.0 - 1.0"], - sa_iflw_s: "line width", - sa_iflw_l: ["hatch line width","in millimeters"], + sa_infl_m: "wypełnienie", + sa_ifdn_s: "gęstość", + sa_ifdn_l: ["procent wypełnienia","wymaga powłoki","0 = wyłączone","ważne 0.0 - 1.0"], + sa_iflw_s: "szerokość linii", + sa_iflw_l: ["szerokość linii kreskowania","w milimetrach"], - sa_supp_m: "support", - sa_slyr_s: "base layers", - sa_slyr_l: ["base support layers","value range 0-10"], - sa_slgp_s: "gap layers", - sa_slgp_l: ["number of layers between","raft and bottom of object"], - sa_sldn_s: "density", - sa_sldn_l: ["used to compute the","number of support pillars","0.0-1.0 (0 = disable)"], - sa_slsz_s: "size", - sa_slsz_l: ["max size of a","support pillar","in millimeters"], - sa_slpt_s: "points", - sa_slpt_l: ["number of points in","each support pillar","in millimeters"], - sl_slen_l: "enable supports", + sa_supp_m: "podpora", + sa_slyr_s: "warstwy podstawowe", + sa_slyr_l: ["warstwy podstawowe podpory","zakres wartości 0-10"], + sa_slgp_s: "warstwy szczeliny", + sa_slgp_l: ["liczba warstw między","tratwą a dnem obiektu"], + sa_sldn_s: "gęstość", + sa_sldn_l: ["używane do obliczenia","liczby słupków podpory","0.0-1.0 (0 = wyłącz)"], + sa_slsz_s: "rozmiar", + sa_slsz_l: ["maks. rozmiar","słupka podpory","w milimetrach"], + sa_slpt_s: "punkty", + sa_slpt_l: ["liczba punktów w","każdym słupku podpory","w milimetrach"], + sl_slen_l: "włącz podpory", - sa_outp_m: "output", - sa_opzo_s: "przesunięcie osi Z", - sa_opzo_l: ["z layer offset","almost always 0.0","0.0-1.0 in millimeters"], + sa_outp_m: "wyjście", + sa_opzo_s: "przesunięcie z", + sa_opzo_l: ["przesunięcie warstwy z","prawie zawsze 0.0","0.0-1.0 w milimetrach"], sa_opaa_s: "antyaliasing", - sa_opaa_l: ["włączenie tej opcji","tworzy większe pliki","ale pokazuje przejścia tonalne"] + sa_opaa_l: ["włącz antyaliasing","tworzy większe pliki","może rozmyć szczegóły"] }; diff --git a/web/kiri/lang/pt.js b/web/kiri/lang/pt.js index e5524a12..dee8ec8c 100644 --- a/web/kiri/lang/pt.js +++ b/web/kiri/lang/pt.js @@ -6,33 +6,51 @@ self.lang['pt-pt'] = { animate: "animar", // CAM animate button arrange: "organizar", // layout workspace objects axis: "eixo", // left object scale pop menu + back: "voltar", clear: "limpar", // clear workspace (remove all objects) copy: "copiar", + clone: "clonar", // create duplicate delete: "excluir", detail: "detalhe", done: "pronto", - enable: "permitir", + edit: "editar", + enable: "activar", + disable: "desactivar", + donate: "doar", export: "exportar", - files: "arquivos", + files: "ficheiros", + filter: "filtro", + front: "frente", + fullscreen: "ecrã completo", help: "ajuda", ghost: "fantasma", // left render pop menu (wireframe) hide: "ocultar", // left render pop menu (invisible) home: "início", import: "importar", + install: "instalar", language: "idioma", - machine: "máquinha", // device or machine - metric: "métrica", + left: "esquerda", + machines: "máquinas", // device or machine + mesh: "malha", // mesh editing + metric: "métrico", name: "nome", - prefs: "preferências", // left menu "preferences" + new: "novo", // file new + off: "desligado", // turn something off (like a lightbulb) + on: "ligado", // turn something on (like a lightbulb) + profs: "perfis", // right menu "profiles" + prefs: "preferências", // right menu "preferences" preview: "pré-visualizar", recent: "recente", + rename: "renomear", render: "renderizar", // left render pop menu reset: "redefinir", - rotate: "girar", // left rotate pop menu - save: "salvar", + right: "direita", + rotate: "rodar", // left rotate pop menu + save: "guardar", scale: "escalar", // left object scale pop menu + select: "seleccionar", setup: "configurar", - settings: "configurações", + settings: "definições", size: "tamanho", slice: "fatiar", solid: "sólido", // view type pop menu @@ -41,11 +59,13 @@ self.lang['pt-pt'] = { tools: "ferramentas", // CAM tool menu button top: "topo", type: "tipo", // CAM tool type + uninstall: "desinstalar", version: "versão", view: "visualizar", // left view pop menu - wire: "fio", // left render pop menu + wire: "aramado", // left render pop menu + volume: "volume", // device build area - acct_xpo: ["faça um backup de seu aparelho","e perfis de dispositivos com a","opção para incluir objetos e posições","de espaço de trabalho"], + acct_xpo: ["faça uma cópia de segurança do seu dispositivo","e perfis de dispositivo com a opção","de incluir objectos e posições","do espaço de trabalho"], // RIGHT-CLICK CONTEXT MENU rc_clws: "limpar espaço de trabalho", @@ -53,25 +73,33 @@ self.lang['pt-pt'] = { rc_lafl: "apoiar sobre plano", rc_mirr: "espelhar", rc_dupl: "duplicar", - rc_xstl: "exportar como STL", + rc_focs: "definir foco", + rc_heal: "reparar malhas", + rc_swap: "substituir vértices", + rc_xobj: "exportar OBJ", + rc_xstl: "exportar STL", + sb_info: ["velocidade de impressão","em mm/s"], + rc_merg: "fundir malhas de objecto", + rc_splt: "isolar corpos", // DEVICE MENU and related dialogs - dm_sldt: "selecione um tipo de dispositivo", + dm_sldt: "seleccione um tipo de dispositivo", dm_stdd: "dispositivos padrão", - dm_mydd: "meus dispositivos", - dm_seld: "dispositivo selecionado", - dm_rcnt: "arquivos recentes", - dm_savs: "configurações salvas", + dm_mydd: "os meus dispositivos", + dm_seld: "dispositivo seleccionado", + dm_rcnt: "ficheiros recentes", + dm_savs: "definições", dm_appp: "Preferências da Aplicação", // CAM Tool Dialog - td_tyem: "extremo", // end mill - td_tybm: "bola", // ball mill - td_tytm: "cone", // taper mill + td_tyem: "topo", // end mill + td_tybm: "esférico", // ball mill + td_tytm: "cónico", // taper mill + td_tydr: "broca", // drill td_tonm: "ferramenta #", td_shft: "haste", // endmill shaft specs - td_flut: "flauta", // endmill flute specs - td_tapr: "estreitar", // endmill taper specs + td_flut: "canelura", // endmill flute specs + td_tapr: "conicidade", // endmill taper specs // DEVICE dialog groups dv_gr_dev: "dispositivo", @@ -84,7 +112,7 @@ self.lang['pt-pt'] = { dv_name_l: "nome do dispositivo", dv_fila_s: "filamento", dv_fila_l: "diâmetro em milímetros", - dv_nozl_s: "nozzle", + dv_nozl_s: "bico", dv_nozl_l: "diâmetro em milímetros", dv_bedw_s: "largura", dv_bedw_l: "unidades de espaço de trabalho", @@ -92,64 +120,111 @@ self.lang['pt-pt'] = { dv_bedd_l: "unidades de espaço de trabalho", dv_bedh_s: "altura", dv_bedh_l: ["altura máxima de construção","em unidades de espaço de trabalho"], + dv_rezx_s: "resolução X", + dv_rezx_l: ["resolução x"], + dv_rezy_s: "resolução Y", + dv_rezy_l: ["resolução y"], + dv_zmax_s: "limite de velocidade do eixo Z", + dv_zmax_l: ["velocidade máxima do eixo Z","em milímetros / segundo","0 para desactivar"], + dv_time_s: "factor de tempo de saída", + dv_time_l: ["modificador para estimativas de tempo de impressão","no diálogo de exportação de gcode.","aumentar ou diminuir o valor com base nos seus","tempos de impressão previstos vs observados"], dv_spmx_s: "fuso máximo", - dv_spmx_l: ["velocidade máxima de rotação do fuso","0 para desativar"], + dv_spmx_l: ["velocidade máxima de rotação do fuso em rpm","0 para desactivar"], dv_xtab_s: "posicionamento absoluto", dv_xtab_l: "movimentos de extrusão absolutos", - dv_orgc_s: "centro de origem", - dv_orgc_l: "centro de origem da cama", - // dv_orgt_s: "origem topo", - // dv_orgt_l: "peça z origem topo", - dv_bedc_s: "cama circular", - dv_bedc_l: "a cama do dispositivo é circular", - dv_belt_s: "cama de cinto", - dv_belt_l: "cama de impressão contínua", - dv_retr_s: "retração do firmware", - dv_retr_l: ["fimware de dispositivo suporta G10/G11"], - dv_fanp_s: "potência do ventilador", - dv_fanp_l: "definir a potência do ventilador de resfriamento", + dv_orgc_s: "origem ao centro", + dv_orgc_l: "origem da base ao centro", + // dv_orgt_s: "origin top", + // dv_orgt_l: "part z origin top", + dv_bedc_s: "base circular", + dv_bedc_l: "a base do dispositivo é circular", + dv_belt_s: "base de correia", + dv_belt_l: "base de impressão contínua", + dv_fsrc_s: "fonte de filamento", + dv_fsrc_l: ["como o filamento é alimentado","para a extrusora"], + dv_retr_s: "retracção de firmware", + dv_retr_l: ["firmware do dispositivo suporta G10/G11"], + dv_fanp_s: "arrefecimento", + dv_fanp_l: "definir potência da ventoinha de arrefecimento", + dv_feat_s: "característica", + dv_feat_l: "injectar código para características especificadas", dv_prog_s: "progresso", dv_prog_l: "saída em cada % de progresso", dv_layr_s: "camada", dv_layr_l: ["saída em cada","mudança de camada"], dv_tksp_s: "espaçador de token", - dv_tksp_l: ["adicionar um espaço entre","parâmetros do eixo do gcode","G0X0Y0X0","vs","G0 X0 Y0 Z0"], - dv_strc_s: "eliminar comentários", - dv_strc_l: ["eliminar comentários de gcode","comentários começam com ;"], - dv_fext_s: "extensão do arquivo", - dv_fext_l: "extensão do nome do arquivo", - dv_dwll_s: "permanência", - dv_dwll_l: "script de permanência de gcode", - dv_tool_s: "mudança de ferramenta", + dv_tksp_l: ["adicionar um espaço entre","parâmetros de eixo de gcode","G0X0Y0X0","vs","G0 X0 Y0 Z0"], + dv_strc_s: "remover comentários", + dv_strc_l: ["remover comentários de gcode","comentários começam com ;"], + dv_fext_s: "extensão de ficheiro", + dv_fext_l: "extensão do nome do ficheiro", + dv_lazr_s: "activar laser", + dv_lazr_l: ["activar operações de laser"], + + dv_dwll_s: "espera", + dv_dwll_l: "script de espera de gcode", + dv_tool_s: "ferramenta", dv_tool_l: "script de mudança de ferramenta", - dv_sspd_s: "velocidade do fuso", + dv_sspd_s: "fuso", dv_sspd_l: "definir velocidade do fuso", - dv_paus_s: "pause", - dv_paus_l: "script gcode de pause", + dv_paus_s: "pausa", + dv_paus_l: "script de pausa de gcode", dv_head_s: "cabeçalho", - dv_head_l: "script gcode de cabeçalho", + dv_head_l: "script de cabeçalho de gcode", dv_foot_s: "rodapé", - dv_foot_l: "script gcode de rodapé", + dv_foot_l: "script de rodapé de gcode", + dv_pext_s: "exterior", + dv_pext_l: ["script de gcode executado antes","de imprimir linhas exteriores"], + dv_pint_s: "interior", + dv_pint_l: ["script de gcode executado antes","de imprimir linhas interiores"], dv_lzon_s: "laser ligado", - dv_lzon_l: "script gcode de laser ligado", + dv_lzon_l: "script de gcode para ligar laser", dv_lzof_s: "laser desligado", - dv_lzof_l: "script gcode de laser desligado", - dv_exts_s: "selecionar", - dv_exts_l: "gcode run para habilitar esta extrusora", - dv_dext_s: "desmarcar", - dv_dext_l: "gcode run antes de habilitar outra extrusora", - dv_extd_s: "desmarcar", - dv_extd_l: "gcode para desmarcar esta extrusora", - dv_exox_s: "compensação x", - dv_exox_l: "nozzle offset x", - dv_exoy_s: "compensação y", - dv_exoy_l: "nozzle offset y", + dv_lzof_l: "script de gcode para desligar laser", + + dv_waon_s: "água ligada", + dv_waon_l: "script de gcode para ligar bomba de água", + dv_waof_s: "água desligada", + dv_waof_l: "script de gcode para desligar bomba de água", + + dv_dkon_s: "faca para baixo", + dv_dkon_l: "script de gcode para baixar faca", + dv_dkof_s: "faca para cima", + dv_dkof_l: "script de gcode para levantar faca", + + dv_exts_s: "seleccionar", + dv_exts_l: "gcode executado para activar esta extrusora", + dv_dext_s: "desseleccionar", + dv_dext_l: "gcode executado antes de activar outra extrusora", + dv_extd_s: "desseleccionar", + dv_extd_l: "gcode para desseleccionar esta extrusora", + dv_exox_s: "desvio x", + dv_exox_l: "desvio x do bico", + dv_exoy_s: "desvio y", + dv_exoy_l: "desvio y do bico", + + dv_paid_s: "id da impressora", + dv_paid_l: ["identificador único da impressora","pode ser inventado"], + dv_paps_s: "espaçamento de ping", + dv_paps_l: ["consumo mínimo de filamento","entre pings em milímetros","recomendado 500 - 1000","0 = desactivar pings"], + dv_pafe_s: "comprimento de alimentação", + dv_pafe_l: ["comprimento do tubo de alimentação em milímetros","curto=570, médio=800, longo=1100"], + dv_papl_s: "comprimento de empurrar", + dv_papl_l: ["distância entre engrenagem da extrusora","e ponta do bico em milímetros"], + dv_paof_s: "comprimento de desvio", + dv_paof_l: ["comprimento a adicionar ou remover do","primeiro segmento em milímetros","geralmente 0"], + dv_pahe_s: "tempo de aquecimento", + dv_pahe_l: ["desvio do padrão"], + dv_paco_s: "tempo de arrefecimento", + dv_paco_l: ["desvio do padrão"], + dv_pacm_s: "tempo de compressão", + dv_pacm_l: ["desvio do padrão"], // MODE mo_menu: "modo", mo_fdmp: "Impressão FDM", mo_slap: "Impressão SLA", - mo_lazr: "Corte a Laser", + mo_lazr: "Corte Laser", mo_cncm: "Fresadora CNC", // SETUP @@ -161,12 +236,12 @@ self.lang['pt-pt'] = { su_help: "Ajuda", // LOAD - fe_menu: "arquivo", + fe_menu: "ficheiro", fn_recn: "Recente", fn_impo: "Importar", // FUNCTION - fn_menu: "ação", + fn_menu: "acção", fn_arra: "Organizar", fn_slic: "Fatiar", fn_prev: "Pré-visualizar", @@ -183,468 +258,725 @@ self.lang['pt-pt'] = { // WORKSPACE ws_menu: "visualizar", - ws_save: "Salvar", + ws_save: "Guardar", ws_cler: "Limpar", // OPTIONS op_menu: "interface", op_disp: "exibir", op_xprt_s: "especialista", - op_xprt_l: "mostrar mais opções de configuração", - op_decl_s: "decalques", - op_decl_l: "exibir decalques e logotipos de dispositivos", - op_dang_s: "experimental", - op_dang_l: "mostrar parâmetros experimentais", + op_xprt_l: "mostrar mais opções de definições", + op_decl_s: "mostrar decalques", + op_decl_l: "mostrar decalques e logotipos do dispositivo", + op_shny_s: "renderização detalhada", + op_shny_l: "escolher um método de renderização de fatia mais lento que usa realce especular. isto facilita ver detalhes em alguns modelos à custa da velocidade de renderização", + op_devl_s: "programador", + op_devl_l: ["mostrar opções de programador","activar depuração de programador"], op_hopo_s: "pairar", - op_hopo_l: ["habilitar pairar o menu","para ativar"], + op_hopo_l: ["activar pairar sobre menu","para activar"], op_dark_s: "modo escuro", - op_dark_l: "interface modo escuro", + op_dark_l: "interface em modo escuro", op_comp_s: "interface compacta", - op_comp_l: ["interface de usuário compacta","melhor para telas pequenas","e tablets"], + op_comp_l: ["interface de utilizador compacta","melhor para ecrãs pequenos","e tablets"], op_shor_s: "mostrar origem", - op_shor_l: "mostrar a origem do dispositivo ou processo", + op_shor_l: "mostrar origem do dispositivo ou processo", op_shru_s: "mostrar réguas", - op_shru_l: ["mostrar réguas de eixos","nas principais linhas de grade"], + op_shru_l: ["mostrar réguas de eixos","nas principais linhas de grelha"], op_sped_s: "mostrar velocidades", - op_sped_l: ["mostrar velocidade para a barra de cores","em modo de visualização"], - op_auto_s: "layout automático", - op_auto_l: ["faz o layout automático da plataforma","quando novos itens são adicionados"], - op_free_s: "layout livre", - op_free_l: ["permite um layout arrastável","sem efeito no modo laser"], + op_sped_l: ["mostrar barra de velocidade para cor","no modo de pré-visualização"], + op_auto_s: "disposição automática", + op_auto_l: ["dispor automaticamente a plataforma","quando novos itens são adicionados"], + op_free_s: "disposição livre", + op_free_l: ["permitir disposição arrastável","sem efeito no modo laser"], op_spcr_s: "espaçamento", - op_spcr_l: ["espaçamento entre objetos","durante layout automático","em unidades de espaço de trabalho"], + op_spcr_l: ["espaçamento entre objectos","durante disposição automática","em unidades de espaço de trabalho","no modo correia, usar 0","para espaçamento automático por altura"], + op_spoa_s: "ângulo de aresta", + op_spoa_l: ["diferença de ângulo de superfície que desencadeia um traçado de aresta"], + op_spcx_s: "X aleatório", + op_spcx_l: ["no modo correia, dispor","aleatoriamente a peça em X","para desgaste uniforme da correia"], op_orth_s: "ortográfico", - op_orth_l: ["exibição ortográfica","requer atualização de página"], - op_invr_s: "zoom invertido", - op_invr_l: ["zoom invertido","com roda do mouse"], - op_save_s: "salvar automaticamente", - op_save_l: ["preserva objetos no espaço de trabalho","entre as recargas de aplicação"], + op_orth_l: ["visualização ortográfica","requer actualização de página"], + op_anta_s: "anti-aliasing", + op_anta_l: ["visualização suave. melhor mas mais lento","requer actualização ou recarregamento de página"], + op_invr_s: "inverter zoom", + op_invr_l: ["inverter zoom de rolagem","da roda do rato"], + op_save_s: "guardar automaticamente", + op_save_l: ["preservar objectos no espaço de trabalho","entre recarregamentos da aplicação"], op_line_s: "tipo de linha", - op_line_l: ["estilo de linha para renderização do caminho","impacta o desempenho 3d","caminho: 3d melhor","plano: 2d bom","linha = 1d rápido"], + op_line_l: ["estilo de linha para renderização de caminho","impacta desempenho 3d","caminho: 3d melhor","plano: 2d bom","linha = 1d rápido"], op_unit_s: "unidades", - op_unit_l: ["unidades de espaço de trabalho afeta","velocidades e distâncias"], + op_unit_l: ["unidades de espaço de trabalho afecta","velocidades e distâncias"], op_anim_s: "animar", op_anim_l: ["densidade da malha de animação","mais alto é mais denso","usa mais memória","e é mais lento"], + op_exgl_l: ["mostrar dispositivos Grid:Local no diálogo de exportação","inclui Grid:Bots e plugins OctoPrint"], + op_exgh_l: ["suporte de rede local Grid:Host legado"], + op_exop_l: ["suporte de rede local OctoPrint legado","plugin Grid:Space OctoPrint recomendado"], - lo_menu: "layout", + lo_menu: "disposição", - pt_menu: "peças", + pt_menu: "fatiador", pt_deci_s: "decimar", - pt_deci_l: ["ativar ou desativar a decimação do ponto","durante a importação do port. para fatiamento mais rápido","e menor uso de memória"], - pt_qual_s: "qualidade", - pt_qual_l: ["nível de detalhe a ser retido","durante as operações de fatiamento","mais baixo é mais rápido"], - pt_heal_s: "cura malha", - pt_heal_l: ["tentar curar","malhas não múltiplas","extende o tempo de corte"], + pt_deci_l: ["activar ou desactivar decimação de pontos","durante importação. para fatiamento mais rápido","e menor uso de memória"], + pt_qual_s: "detalhe", + pt_qual_l: ["nível de detalhe a reter durante operações de fatiamento. mais baixo é mais rápido e usa menos memória. modelos de grande escala geralmente não beneficiam de maior detalhe. em vez disso pode apenas resultar em problemas de memória e processamento. reduzir este valor se estiver a obter erros de falta de memória."], + pt_heal_s: "reparar malha", + pt_heal_l: ["tentar reparar malhas não-manifold durante o fatiamento. pode aumentar o tempo de fatiamento. activa um aviso quando geometrias não-manifold são detectadas."], + pt_thrd_s: "multi-tarefa", + pt_thrd_l: ["usar processamento paralelo quando o navegador suporta workers aninhados. pode aumentar a pressão de memória em modelos maiores. desactivar se estiver a obter erros de falta de memória"], + pt_assy_s: "web asm", + pt_assy_l: ["usar web assembly quando suportado pelo navegador. se experienciar artefactos ou erros de memória, tente desactivar isto."], + pt_wgpu_s: "web gpu", + pt_wgpu_l: ["usar web gpu quando suportado pelo navegador. se experienciar artefactos ou erros de memória, tente desactivar isto."], xp_menu: "exportações", // SETTINGS se_menu: "perfil", se_load: "carregar", - se_save: "salvar", + se_save: "guardar", - // FDM SLICING - sl_menu: "layers", - sl_lahi_s: "altura", - sl_lahi_l: ["altura de cada fatia","camada em milímetros"], - ad_minl_s: "altura min", - ad_minl_l: ["altura adaptativa da camada min.","em milímetros","deve ser diferente de zero"], + // FDM LAYERS + sl_menu: "camadas", + sl_angl_s: "ângulo de fatia", + sl_angl_l: ["viés do ângulo de fatia em graus"], + sl_lahi_s: "altura de camada", + sl_lahi_l: ["altura de cada camada","de fatia em milímetros"], + ad_minl_s: "camada mínima", + ad_minl_l: ["altura mínima de camada adaptativa","em milímetros","deve ser diferente de zero"], + ad_adap_s: "altura adaptativa", + ad_adap_l: ["usar alturas de camadas adaptativas","com 'altura de camada' como máximo","e 'camada mínima' como o mínimo"], sl_ltop_s: "camadas de topo", - sl_ltop_l: ["número de camadas sólidas","para fazer cumprir na","parte superior da impressão"], + sl_ltop_l: ["número de camadas sólidas no topo da impressão ou em áreas planas viradas para cima"], sl_lsld_s: "camadas sólidas", - sl_lsld_l: ["áreas de preenchimento sólido computadas","de camadas de deltas. ver","menu pop camada"], + sl_lsld_l: ["áreas de preenchimento sólido computadas","de pontes e áreas planas","detectadas entre camadas fatiadas"], sl_lbot_s: "camadas de base", - sl_lbot_l: ["número de camadas sólidas","para fazer cumprir na","parte inferior da impressão"], - ad_adap_s: "adaptativo", - ad_adap_l: ["usar alturas de camadas adaptativas","com 'altura de camada' como máximo","e 'camada min' como o min"], + sl_lbot_l: ["número de camadas sólidas na parte inferior da impressão ou sob vãos de ponte"], + + // FDM WALLS + sw_menu: "paredes", + sl_shel_s: "número de paredes", + sl_shel_l: ["número de paredes","de perímetro a gerar"], + ad_thin_s: "paredes finas", + ad_thin_l: ["detectar e preencher lacunas","entre paredes"], // FDM SHELLS - sl_shel_s: "quantidade de cartuchos", - sl_shel_l: ["número de paredes","de perímetro para gerar"], - sl_ordr_s: "ordem de cartuchos", - sl_ordr_l: ["ordem de saída de cartuchos","dentro para fora","ou de fora para dentro","afeta a qualidade da superfície"], - sl_strt_s: "início da camada", - sl_strt_l: ["ponto inicial da camada","último = última camada final","centro = centro da peça","origem = origem do dispositivo"], - ad_thin_s: "paredes finas", - ad_thin_l: ["detecta e preenche lacunas","entre paredes de cartuchos"], + sl_line_s: "largura de linha", + sl_line_l: ["largura de extrusão em milímetros","0 = diâmetro do bico"], + sl_ordr_s: "ordem de paredes", + sl_ordr_l: ["ordem de saída de paredes","de dentro para fora","ou de fora para dentro","afecta qualidade da superfície"], + sl_strt_s: "ponto de início", + sl_strt_l: ["ponto de início da camada","último = onde a última camada terminou","centro = centro da peça","origem = origem do dispositivo","aleatório = yolo"], + sl_ofin_s: "desvio de parede interior", + sl_ofin_l: ["desvio do perímetro de furo interior","em milímetros"], + sl_ofot_s: "desvio de parede exterior", + sl_ofot_l: ["desvio do perímetro de parede exterior","em milímetros"], + + // FDM SOLID + fs_menu: "preenchimento sólido", + fi_over_s: "sobreposição de preenchimento", + fi_over_l: ["sobreposição entre paredes e preenchimento sólido ou esparso. pode melhorar a ligação às paredes","como fracção da largura da linha","0.0 - 1.0"], + fi_angl_s: "ângulo inicial", + fi_angl_l: ["ângulo inicial em graus","90 graus adicionados a","cada camada seguinte","aplica-se apenas a camadas sólidas"], + fi_grow_s: "expansão de área", + fi_grow_l: ["expandir sólidos projectados","pode ajudar com áreas sólidas","sobre áreas de preenchimento esparso","unidades em milímetros"], // FDM FILL - fi_menu: "preenchimento", + fi_menu: "preenchimento esparso", fi_type: "tipo de preenchimento", - fi_pcnt_s: "fração de preenchimento", - fi_pcnt_l: ["fill density values","0.0 - 1.0"], - fi_angl_s: "início sólido", - fi_angl_l: ["ângulo inicial em graus","90 graus adicionados a ","cada camada seguinte","se aplica somente a camadas sólidas"], - fi_wdth_s: "largura sólida", - fi_wdth_l: ["line width for solid fill","as a fraction of nozzle width","values < 1 are more dense","good for surface finishes","0.0 - 1.0"], - fi_over_s: "sobreposição de cartucho", - fi_over_l: ["overlap with shell and other fill","as fraction of nozzle diameter","0.0 - 2.0"], + fi_pcnt_s: "quantidade de preenchimento", + fi_pcnt_l: ["valores de densidade de preenchimento","0.0 - 1.0"], + fi_rept_s: "repetição de preenchimento", + fi_rept_l: ["número de vezes para repetir","camadas de preenchimento inalteradas"], // fi_rate_s: "velocidade de impressão", - fi_rate_l: ["velocidade de extrusão para preenchimento","defina como 0 para usar padrão","velocidades de impressão de saída"], + fi_rate_l: ["velocidade de extrusão para preenchimento","definir para 0 para usar padrão","velocidades de impressão de saída"], + + // FDM HEATING + fh_menu: "aquecimento", + + // FDM COOLING + fc_menu: "arrefecimento", // FDM FIRST LAYER fl_menu: "base", - fl_lahi_s: "altura da camada", - fl_lahi_l: ["altura de cada fatia","em milímetros","deve ser >= altura da fatia"], - fl_rate_s: "velocidade do cartucho", - fl_rate_l: ["velocidade máxima de impressão do cartucho","em milímetros / segundo"], + fl_lahi_s: "altura de camada", + fl_lahi_l: ["altura de cada fatia","em milímetros","deve ser >= altura de fatia"], + fl_rate_s: "velocidade de parede", + fl_rate_l: ["velocidade máxima de impressão de parede","em milímetros / segundo"], fl_frat_s: "velocidade de preenchimento", fl_frat_l: ["velocidade máxima de impressão de preenchimento","em milímetros / segundo"], - fl_mult_s: "fator de fluxo", + fl_mult_s: "factor de fluxo", fl_mult_l: ["multiplicador de extrusão","0.0 - 2.0"], - fl_sfac_s: "fator de largura", - fl_sfac_l: ["multiplier on nozzle size","changes line spacing"], - fl_skrt_s: "skirt count", - fl_skrt_l: ["number of first-layer offset","brims to generate"], - fl_skro_s: "skirt offset", - fl_skro_l: ["skirt offset from part","in millimeters"], - fl_nozl_s: "nozzle temp", - fl_nozl_l: ["graus em celsius","configuração de saída utilizada","quando este é zero"], - fl_bedd_s: "temperatura da cama", - fl_bedd_l: ["graus em celsius","configuração de saída utilizada","quando este é zero"], - fr_spac_s: "raft gap", - fr_spac_l: ["espaçamento adicional de camadas","entre a 1ª camada e raft","em milímetros"], - fr_nabl_s: "raft enable", - fr_nabl_l: ["create a raft under the","model for better adhesion","uses skirt offset and","disables skirt output"], + fl_sfac_s: "factor de largura", + fl_sfac_l: ["multiplicador no tamanho do bico","altera espaçamento de linha"], + fl_skrt_s: "número de contornos", + fl_skrt_l: ["número de contornos de desvio","da primeira camada a gerar"], + fl_skro_s: "desvio de contorno", + fl_skro_l: ["desvio de contorno da peça","em milímetros","quando jangadas são usadas","este é o desvio da jangada"], + fl_nozl_s: "temperatura do bico", + fl_nozl_l: ["graus em celsius","definição de saída usada","quando este é zero"], + fl_bedd_s: "temperatura da base", + fl_bedd_l: ["graus em celsius","definição de saída usada","quando este é zero"], + fr_spac_s: "espaço de jangada", + fr_spac_l: ["espaçamento adicional de camada","entre 1ª camada e jangada","em milímetros"], + fr_nabl_s: "activar jangada", + fr_nabl_l: ["criar uma jangada sob o","modelo para melhor aderência","usa desvio de contorno e","desactiva saída de contorno"], + fr_draf_s: "escudo de corrente de ar", + fr_draf_l: ["estender contorno até altura da peça","que actua como escudo contra","correntes de ar e retém ar quente"], // FDM BELT ONLY - fl_zoff_s: "compensação do cinto", - fl_zoff_l: ["deslocamento de altura do cinto","de menor extrusão","em milímetros"], - fl_brim_s: "tamanho da borda", - fl_brim_l: ["adiciona borda na parte inferior","o tamanho é a largura em milímetros","0 para desativar"], - fl_brmn_s: "gatilho de borda", - fl_brmn_l: ["adicione borda apenas quando o segmento","cinto de frente é mais curto do que este","valor em milímetros","0 = Infinito"], - fl_bled_s: "âncora parcial", - fl_bled_l: ["âncora da parte do cinto","no início da impressão","em milímetros"], + fl_zoff_s: "desvio de correia", + fl_zoff_l: ["desvio de altura da correia","da extrusão mais baixa","em milímetros"], + fl_flat_s: "aplanar", + fl_flat_l: ["aplanar à correia qualquer ponto","com altura menor que este valor","em milímetros"], + fl_brim_s: "lados de rebordo", + fl_brim_l: ["adicionar rebordo ao perímetro da peça","tamanho é largura em milímetros","0 para desactivar"], + fl_brin_s: "rebordo interior", + fl_brin_l: ["adicionar rebordo ao interior da peça","quando existem vazios interiores","tamanho é largura em milímetros","0 para desactivar"], + fl_brmn_s: "gatilho de rebordo", + fl_brmn_l: ["adicionar rebordos apenas quando segmento","virado para a correia for mais curto que isto","valor em milímetros","0 = Infinito"], + fl_brco_s: "pente de rebordo", + fl_brco_l: ["adicionar intervalos de rebordo","a cada n linhas","0 para desactivar"], + fl_brgp_s: "espaço de rebordo", + fl_brgp_l: ["espaçamento entre rebordo e peça","em milímetros"], + fl_bled_s: "âncora de peça", + fl_bled_l: ["âncora de peça da correia","no início da impressão","em milímetros"], + fl_blmp_s: "ressalto de âncora", + fl_blmp_l: ["adicionar um ressalto ao início de","uma âncora para ajudar a descolar","no final da correia","em milímetros"], // FDM SUPPORT sp_menu: "suporte", sp_detect: "detectar", sp_dens_s: "densidade", - sp_dens_l: ["fração 0.0 - 1.0","recomendada 0.15","0 para desativar"], - sp_size_s: "tamanho do pilar", - sp_size_l: ["largura do pilar","em milímetros"], - sp_offs_s: "compensação da peça", - sp_offs_l: ["deslocamento da peça","em milímetros"], - sp_gaps_s: "camadas de lacuna", - sp_gaps_l: ["número de camadas","deslocamento da peça"], - sp_span_s: "intervalo máximo", - sp_span_l: ["extensão não suportada que causa","um novo suporte a ser gerado","em milímetros"], + sp_dens_l: ["fracção 0.0 - 1.0","recomendado 0.15","0 para desactivar"], + sp_size_s: "tamanho de pilar", + sp_size_l: ["largura do pilar em milímetros","valores menores aumentam","exponencialmente tempos de detecção"], + sp_offs_s: "desvio de peça", + sp_offs_l: ["desvio da peça","em milímetros"], + sp_gaps_s: "camadas de espaço", + sp_gaps_l: ["número de camadas","de desvio da peça"], + sp_span_s: "vão máximo", + sp_span_l: ["vão não suportado que causa","um novo suporte a ser gerado","em milímetros"], sp_angl_s: "ângulo máximo", - sp_angl_l: ["ângulo máximo de projeção antes","de gerar o pilar de suporte"], + sp_angl_l: ["ângulo máximo de saliência antes","de gerar pilar de suporte","valores normais 45-60","valores correia 0-10"], sp_area_s: "área mínima", - sp_area_l: ["área mínima para","uma coluna de suporte","em milímetros"], + sp_area_l: ["área mínima para","uma coluna de suporte","em milímetros","valores menores irão","atrasar detecção"], sp_xpnd_s: "expandir", - sp_xpnd_l: ["expandir a área de suporte","além do limite parcial","em milímetros"], + sp_xpnd_l: ["expandir área de suporte","além do limite da peça","em milímetros"], + sp_grow_s: "crescer", + sp_grow_l: ["aumentar coluna de suporte para preencher pequenos espaços","em milímetros"], sp_nozl_s: "extrusora", - sp_nozl_l: ["em sistemas multi-extrusora","a extrusora a ser usada como","material de suporte"], + sp_nozl_l: ["em sistemas multi-extrusora","a extrusora a usar para","material de suporte"], + sp_outl_s: "fechado", + sp_outl_l: ["fechar padrão de suporte","dentro de uma parede de perímetro"], sp_auto_s: "automático", - sp_auto_l: ["habilita suportes gerados","usando geometria em tempo de corte","os suportes só aparecerão","após a conclusão do corte"], - - // LASER SLICING - ls_offs_s: "compensação", - ls_offs_l: ["ajustar a largura do feixe","em milímetros"], - ls_lahi_s: "altura", - ls_lahi_l: ["altura da camada","em milímetros","0 = auto/detectar"], - ls_lahm_s: "mínimo", - ls_lahm_l: ["altura mínima da camada","irá mesclar fatias automáticas","sob esta espessura","em milímetros"], - ls_sngl_s: "único", - ls_sngl_l: ["executa apenas uma fatia","na altura da camada especificada"], + sp_auto_l: ["activar suportes gerados","usando geometria no momento do fatiamento","suportes só aparecerão","após conclusão do fatiamento"], // CNC COMMON terms cc_tool: "ferramenta", - cc_offs_s: "compensação", - cc_offs_l: ["compensação do centro da ferramenta","do caminho escolhido"], + cc_offs_s: "desvio", + cc_offs_l: ["desviar centro da ferramenta","do caminho escolhido"], cc_spnd_s: "rpm do fuso", - cc_spnd_l: ["velocidade do fuso em","revoluções/minuto"], - cc_sovr_s: "aumentar", - cc_sovr_l: ["como uma fração de","diâmetro da ferramenta"], - cc_sdwn_s: "diminuir", - cc_sdwn_l: ["diminuir a profundidade","para cada passagem","em unidades de espaço de trabalho","0 para desativar"], - cc_feed_s: "velocidade de avanço", - cc_feed_l: ["velocidade máxima de corte em","unidades de espaço de trabalho/minuto"], - cc_plng_s: "taxa de imersão", - cc_plng_l: ["velocidade máxima do eixo z em","unidades de espaço de trabalho/minuto"], - cc_sngl_s: "selecione apenas linhas", - cc_sngl_l: ["selecionar apenas bordas individuais","em vez de polilinhas conectadas"], + cc_spnd_l: ["velocidade do fuso em","rotações / minuto"], + cc_sovr_s: "sobreposição", + cc_sovr_l: ["uma fracção do diâmetro da ferramenta entre 0 e 1. valores maiores que 0.49 podem resultar em áreas não cortadas ou artefactos indesejáveis."], + cc_sovc_s: "passos largos", + cc_sovc_l: ["número de passos de recorte largo"], + cc_sang_s: "ângulo de passo", + cc_sang_l: ["rotação em graus entre pontos axiais de torno"], + cc_sdwn_s: "profundidade de passo", + cc_sdwn_l: ["profundidade de passo","para cada passagem","em unidades de espaço de trabalho","0 para desactivar"], + cc_thru_s: "cortar através", + cc_thru_l: ["profundidade de corte adicional abaixo do fundo do traçado"], + cc_offd_s: "desvio", + cc_offd_l: ["substitui distância de desvio padrão (que é o raio da ferramenta) quando definido para qualquer valor excepto zero"], + cc_feed_s: "taxa de avanço", + cc_feed_l: ["velocidade máxima de corte em","unidades de espaço de trabalho / minuto"], + cc_plng_s: "taxa de mergulho", + cc_plng_l: ["velocidade máxima do eixo z em","unidades de espaço de trabalho / minuto"], + cc_sngl_s: "seleccionar apenas linhas", + cc_sngl_l: ["seleccionar apenas arestas individuais","em vez de polilinhas conectadas"], + cc_sele_s: "seleccionar", + cc_sele_l: ["seleccionar linhas para seguir","seleccionar ciclos para limpar","seleccionar superfície para bolsa"], // CNC COMMON cc_menu: "limites", - cc_flip: "virar", - cc_rapd_s: "avançar xy", - cc_rapd_l: ["velocidade máxima de movimentos xy","em unidades de espaço de trabalho/minuto"], - cc_rzpd_s: "avançar z", - cc_rzpd_l: ["velocidade máxima de movimentos z","em unidades de espaço de trabalho/minuto"], + cc_rapd_s: "avanço xy", + cc_rapd_l: ["taxa de avanço máxima de movimentos xy","em unidades de espaço de trabalho / minuto"], + cc_rzpd_s: "avanço z", + cc_rzpd_l: ["taxa de avanço máxima de movimentos z","em unidades de espaço de trabalho / minuto"], - cc_loff_s: "compensação", - cc_loff_l: ["distância da superfície do material","para passar de nivelamento","em unidades de espaço de trabalho"], + // CNC LEVELING + cc_loff_s: "desvio z", + cc_loff_l: ["distância da face do material","em unidades de espaço de trabalho"], + cc_lxyo_s: "desvio xy", + cc_lxyo_l: ["desvio xy do limite da peça como fracção do diâmetro da ferramenta (0 - 1.0)"], + cc_lsto_s: "material", + cc_lsto_l: ["usar área do material em vez de área da peça"], // CNC ROUGHING - cr_menu: "retificar", + cr_menu: "desbaste", cr_lsto_s: "deixar material", - cr_lsto_l: ["compensação horizontal das faces verticais","material para deixar para a passagem de acabamento","em unidades de espaço de trabalho"], - cr_ease_s: "suavizar", - cr_ease_l: ["cortes de imersão vão","baixar em espiral ou suavizar","seguindo um caminho linear"], - cr_clrt_s: "limpar o topo", - cr_clrt_l: ["faz uma passagem de limpeza","na área delimitadora da peça","em z = 0"], + cr_lsto_l: ["desvio horizontal de faces verticais","material a deixar para passagem de acabamento","em unidades de espaço de trabalho"], + cr_lstz_s: "deixar material z", + cr_lstz_l: ["desvio vertical para passagens de desbaste em unidades de espaço de trabalho. melhor para desbastar superfícies curvas."], + cr_ease_s: "suavizar descida", + cr_ease_l: ["cortes de mergulho irão","descer em espiral ou suavizar","ao longo de um caminho linear"], + cr_clst_s: "limpar material", + cr_clst_l: ["no modo indexado, limpar toda a área de material, não apenas até ao perímetro da peça"], + cr_clrt_s: "limpar topo", + cr_clrt_l: ["executar uma passagem de limpeza sobre","a área delimitadora da peça","em z = 0"], cr_clrp_s: "limpar vazios", - cr_clrp_l: ["fresar através de cavidades","em vez de apenas o contorno"], + cr_clrp_l: ["fresar bolsas de passagem","em vez de apenas o contorno"], cr_clrf_s: "limpar faces", - cr_clrf_l: ["interpolar descer para","limpar todas as áreas planas detectadas"], + cr_clrf_l: ["interpolar profundidade de passo para","limpar quaisquer áreas planas detectadas"], cr_olin_s: "apenas interior", - cr_olin_l: ["limitar corte para","dentro dos limites da peça"], + cr_olin_l: ["limitar corte a","dentro dos limites da peça"], // CNC OUTLINE co_menu: "contorno", + co_merg_s: "fundir sobreposição", + co_merg_l: ["fundir linhas sobrepostas para evitar corte excessivo em sólidos adjacentes"], co_dogb_s: "dogbones", - co_dogb_l: ["inserir cortes dogbones","dentro dos cantos"], + co_dogb_l: ["inserir cortes dogbone","em cantos interiores"], + co_dogr_s: "inverter bones", + co_dogr_l: ["inverter direcção dogbone"], + co_clrt_s: "limpar topo", + co_clrt_l: ["cortar começando no topo do material","quando material está activado"], co_wide_s: "recorte largo", - co_wide_l: ["alargar caminhos recortados externos","para cortes profundos em material duro"], + co_wide_l: ["alargar caminhos de recorte exterior","para cortes profundos em material duro"], co_olin_s: "apenas interior", - co_olin_l: ["limitar corte para","dentro dos limites da peça"], + co_olin_l: ["limitar corte a","dentro dos limites da peça"], co_olot_s: "apenas exterior", - co_olot_l: ["limitar corte para","exterior dos limites da peça","que pode ser pensado","como o contorno da sombra"], - co_omit_s: "omitir através", - co_omit_l: "elimine buracos passantes", - co_olen_s: "habilitar", - co_olen_l: "corte de contorno habilitado", + co_olot_l: ["limitar corte a","limites exteriores da peça","que pode ser pensado","como o contorno de sombra"], + co_omit_s: "omitir passantes", + co_omit_l: "eliminar furos passantes", + co_omvd_s: "omitir bolsa", + co_omvd_l: "eliminar bolsas interiores", + co_olen_s: "activar", + co_olen_l: "corte de contorno activado", // CNC CONTOUR cn_menu: "contorno", cf_angl_s: "ângulo máximo", - cf_angl_l: ["ângulos maiores que este","são considerados verticais"], + cf_angl_l: ["mudanças em z que resultam em ângulos maiores que isto são consideradas verticais e omitidas de curvas"], + cf_leav_s: "deixar material", + cf_leav_l: ["quantidade de material a deixar acima da superfície da peça"], + cf_botm_s: "z inferior", + cf_botm_l: ["obedecer limite z inferior"], cf_curv_s: "apenas curvas", - cf_curv_l: ["limitar limpeza linear","para superfícies curvas"], + cf_curv_l: ["limitar limpeza linear","a superfícies curvas"], cf_olin_s: "apenas interior", - cf_olin_l: ["limitar corte para","dentro dos limites da peça"], - cf_linx_s: "habilitar passagem y", + cf_olin_l: ["limitar corte a","dentro dos limites da peça"], + cf_linx_s: "activar passagem y", cf_linx_l: "acabamento linear do eixo y", - cf_liny_s: "habilitar passagem x", + cf_liny_s: "activar passagem x", cf_liny_l: "acabamento linear do eixo x", // CNC TRACE cu_menu: "traçar", cu_type_s: "tipo", - cu_type_l: ["seguir = ponta da ferramenta segue a linha","direita ou esquerda = ponta da ferramenta","segue o deslocamento da linha pelo raio da ferramenta"], + cu_type_l: ["limpar = limpar uma bolsa de linha fechada","seguir = ponta da ferramenta segue linha","com opção de desvio quando fechada"], + + // CNC POCKET + cp_xpnd_s: "expandir", + cp_xpnd_l: ["aumentar (+) ou diminuir (-) áreas seleccionadas","contorno usa toda a área seleccionada","não-contorno usa por padrão o raio da ferramenta","em unidades de espaço de trabalho"], + cp_smoo_s: "suavizar", + cp_smoo_l: ["limpar arestas irregulares causadas por paredes inclinadas. pode acelerar e melhorar o trabalho de bolsas para geometrias detalhadas. recomenda-se começar com valores em torno de 1 se o fatiamento demorar muito ou os contornos parecerem irregulares"], + cp_foll_s: "selecção", + cp_foll_l: ["limite de selecção de curvatura em graus. valores mais próximos de 0 irão restringir selecções a superfícies mais planas"], + cp_refi_s: "refinar", + cp_refi_l: ["número de passagens de refinamento a executar em polilinhas contornadas. destinado a abordar dentes de serra de delta Z causados por geometrias facetadas enquanto suavização trata XY. valores > 10 funcionam bem para geometrias suavemente contornadas com movimento Z significativo."], + cp_cont_s: "contorno", + cp_cont_l: ["ignorar vazios e características interiores"], + cp_engr_s: "gravar", + cp_engr_l: ["configura uma única passagem em torno do perímetro da área seleccionada. também útil para marcação a laser 3D"], + cp_outl_s: "apenas contorno", + cp_outl_l: ["ignorar vazios e características interiores"], // CNC DRILLING cd_menu: "furar", cd_axis: "eixo", cd_points: "pontos", - cd_plpr_s: "imersão por", - cd_plpr_l: ["imersão máxima entre","períodos de permanência","em unidades de espaço de trabalho","0 para desativar"], - cd_dwll_s: "tempo de permanência", - cd_dwll_l: ["tempo de permanência","entre imersões","em milissegundos"], - cd_lift_s: "elevação de perfuração", - cd_lift_l: ["elevação entre as imersões","após o período de permanência","em unidades de espaço de trabalho","0 para desativar"], - cd_regi_s: "registro", - cd_regi_l: ["buracos de registro de perfuração","for double-sided parts","independent of enable","drilling but uses same","tool and settings"], + // cd_plpr_s: "mergulho por", + // cd_plpr_l: ["mergulho máximo entre","períodos de espera","em unidades de espaço de trabalho","0 para desactivar"], + cd_dwll_s: "tempo de espera", + cd_dwll_l: ["tempo de espera","entre mergulhos","em milissegundos"], + cd_lift_s: "elevação de furação", + cd_lift_l: ["elevação entre mergulhos","após período de espera","em unidades de espaço de trabalho","0 para desactivar"], + cd_thru_s: "extensão z", + cd_thru_l: ["estender corte para baixo através do material","em unidades de espaço de trabalho"], + cd_dtru_s: "furar através", + cd_dtru_l: ["profundidade adicional de furação abaixo do fundo da peça","substitui z através global","0 para desactivar"], + cd_mark_s: "marcação", + cd_mark_l: ["apenas marcar furos, não furar","a definição de profundidade de passo é usada","para determinar quão fundo marcar"], + cd_ftop_s: "do topo do material", + cd_ftop_l: ["furar do topo do material","em vez da superfície da peça"], + cd_prcn_s: "precisão", + cd_prcn_l: ["distância entre fatias","para procurar furos","em unidades de espaço de trabalho","mais baixo é mais lento e","usa mais memória","0 = apenas planos"], + + cd_seli_l: ["seleccionar furos individualmente","para furar"], + cd_sela_s: "Seleccionar Diâmetro Correspondente", + cd_sela_l: ["seleccionar todos os furos que", "correspondem ao diâmetro da ferramenta seleccionada"], + + //CNC Registration + cd_regi_s: "registo", + cd_regi_l: ["furar furos de registo","para peças de dupla face","independente de activar","furação mas usa mesma","ferramenta e definições"], + cd_rego_s: "desvio de peça", + cd_rego_l: ["desvio do centro do furo","da caixa delimitadora da peça","em unidades de espaço de trabalho"], + + // CNC HELICAL toolpath + ch_menu: "helicoidal", + ch_sdwn_s: "profundidade de passo (passo)", + ch_sdwn_l: ["distância z","por revolução","em unidades de espaço de trabalho","(inverso de roscas por unidade)", "0 para desactivar"], + ch_fsta_s: "forçar ângulo inicial", + ch_fsta_l: ["substituir ângulo inicial","por padrão ponto mais próximo da ferramenta"], + ch_stra_s: "ângulo inicial", + ch_stra_l: ["ângulo inicial da hélice","em graus no sentido anti-horário do eixo +x"], + ch_selc_l: ["seleccionar uma face de cilindro", "furos interiores muito pequenos","serão ignorados."], + ch_fini_s: "passagem de acabamento inferior", + ch_fini_l: ["traçar um círculo no fundo da hélice","usado para limpeza de furos"], + ch_entr_s: "entrar do centro", + ch_entr_l: ["iniciar corte do centro do cilindro","arqueando suavemente horizontalmente", "em vez de mergulhar"], + ch_ento_s: "desvio de entrada central", + ch_ento_l: ["desvio do caminho para entrada curva","geralmente profundidade de rosca se roscar","em unidades de espaço de trabalho","0 para entrada linear"], + ch_rvrs_s: "inverter", + ch_rvrs_l: ["inverter direcção do eixo z helicoidal","baixo-Z para alto-Z quando marcado","útil para roscar","não recomendado para outras operações"], + ch_clkw_s: "sentido horário", + ch_clkw_l: ["inverter rotação helicoidal em torno do cilindro","sentido horário quando marcado"], + + // CNC FLIP + cf_menu: "virar", + cf_nvrt_s: "z inferior", + cf_nvrt_l: "inverter definição z inferior para seguir material", + + // CNC INDEX AXIS + ci_degr_s: "graus", + ci_degr_l: "graus para rodar o eixo A (indexado)", + ci_abso_s: "absoluto", + ci_abso_l: "rotação em graus é absoluta", + ci_face_s: "face", + ci_face_l: "seleccionar face para rodar virada para cima", + ci_line_s: "linear", + ci_line_l: "fazer passagens lineares ao longo de X depois rodar Y", + ci_laso_s: "desvio de início", + ci_laso_l: ["desvio x da esquerda da peça. valores negativos estão fora da peça. em unidades de espaço de trabalho"], + ci_laeo_s: "desvio de fim", + ci_laeo_l: ["desvio x da direita da peça. valores negativos estão fora da peça. em unidades de espaço de trabalho"], + + // CNC LASER On/Off Operations (Carvera) + cl_powr_s: "potência", + cl_powr_l: "potência do laser de 0 a 1.0", + cl_adap_s: "adaptativo", + cl_adap_l: "usar potência adaptativa baseada na altura Z", + cl_adrp_s: "repetitivo", + cl_adrp_l: "aplicar um módulo de altura Z usando a banda dada para fazer padrões repetitivos", + cl_flat_s: "aplanar", + cl_flat_l: "aplanar saída para uma altura Z dada", + cl_flaz_s: "altura plana", + cl_flaz_l: ["aplanar saída para esta altura Z", "em unidades de espaço de trabalho"], + cl_minp_s: "potência z mínima", + cl_minp_l: ["definição de potência na parte mais baixa da banda Z. pode ser maior ou menor que a outra extremidade da banda Z."], + cl_maxp_s: "potência z máxima", + cl_maxp_l: ["definição de potência na parte mais alta da banda Z. pode ser maior ou menor que a outra extremidade da banda Z."], + cl_minz_s: "altura z mínima", + cl_minz_l: ["posição mais baixa da banda Z"], + cl_maxz_s: "altura z máxima", + cl_maxz_l: ["posição mais alta da banda Z. quando definido para 0, usa o ponto Z mais alto do espaço de trabalho"], // CNC CUTOUT TABS - ct_menu: "tabs", + ct_menu: "abas", ct_angl_s: "ângulo", - ct_angl_l: ["ângulo inicial para espaçamento da guia","em graus (0-360)"], - ct_numb_s: "contagem", - ct_numb_l: ["número de guias para usar","será espaçado uniformemente","ao redor da peça"], + ct_angl_l: ["ângulo inicial para espaçamento de abas","em graus (0-360)"], + ct_numb_s: "número", + ct_numb_l: ["número de abas a usar","serão espaçadas uniformemente","em torno da peça"], ct_wdth_s: "largura", ct_wdth_l: "largura em unidades de espaço de trabalho", ct_hght_s: "altura", ct_hght_l: "altura em unidades de espaço de trabalho", ct_dpth_s: "profundidade", - ct_dpth_l: ["distância em unidades de espaço de trabalho","que a guia projeta da","superfície da peça"], + ct_dpth_l: ["distância em unidades de espaço de trabalho","que a aba projecta da","superfície da peça"], ct_midl_s: "linha média", - ct_midl_l: ["use a linha média da guia","em vez de z inferior","para trabalho frente e verso"], - ct_nabl_s: "auto", - ct_nabl_l: ["geração automática de guias radiais","projetado do centro da peça","usando contagem e deslocamento de ângulo"], + ct_midl_l: ["usar linha média da aba","em vez de z inferior","para trabalho de dupla face"], + ct_nabl_s: "automático", + ct_nabl_l: ["gerar automaticamente abas radiais","projectadas do centro da peça","usando número e desvio de ângulo"], // OUTPUT ou_menu: "saída", + // LASER SLICING + ls_offs_s: "desvio / sangria", + ls_offs_l: ["distância entre o centro do caminho","de corte e a aresta do material remanescente","em milímetros"], + ls_lahi_s: "altura de fatia", + ls_lahi_l: ["altura de camada","em milímetros","0 = auto/detectar"], + ls_lahm_s: "mínimo de fatia", + ls_lahm_l: ["altura mínima de camada","irá fundir fatias automáticas","sob esta espessura","em milímetros"], + ls_sngl_s: "fatia única", + ls_sngl_l: ["executar apenas uma fatia","na altura de camada especificada"], + // LASER KNIFE - dk_menu: "faca", + dk_menu: "faca de arrasto", dk_dpth_s: "profundidade de corte", dk_dpth_l: ["profundidade de corte final","em milímetros"], dk_pass_s: "passagens de corte", - dk_pass_l: ["número de passagens","até a profundidade do corte"], - dk_offs_s: "deslocamento da ponta", - dk_offs_l: ["distância da ponta da lâmina","para o centro da ferramenta","em milímetros"], + dk_pass_l: ["número de passagens","até profundidade de corte"], + dk_offs_s: "desvio de ponta", + dk_offs_l: ["distância da ponta da lâmina","ao centro da ferramenta","em milímetros"], - // OUTPUT LASER + // WIRE EDM + we_omit_s: "omitir interior", + we_omit_l: "omitir polígonos interiores", + + // LASER OUTPUT ou_spac_s: "espaçamento", - ou_spac_l: ["distância entre a saída da camada","em milímetros"], + ou_spac_l: ["distância entre saída de camada","em milímetros"], ou_scal_s: "escala", ou_scal_l: "multiplicador (0.1 a 100)", - ou_powr_s: "poder", + ou_powr_s: "potência", ou_powr_l: ["0 - 100","representa %"], ou_sped_s: "velocidade", - ou_sped_l: "milímetros/segundo", - ou_mrgd_s: "mesclado", - ou_mrgd_l: ["mesclar todas as camadas usando","codificação de cores para denotar","profundidade de empilhamento"], + ou_sped_l: "milímetros / segundo", + ou_mrgd_s: "fundido", + ou_mrgd_l: ["fundir todas as camadas usando","codificação de cores para denotar","profundidade de empilhamento"], ou_grpd_s: "agrupado", ou_grpd_l: ["reter cada camada como","um agrupamento unificado","em vez de polígonos","separados"], ou_layr_s: "ordem de camadas", - ou_layr_l: ["ordem da camada de saída","do canto superior direito para","inferior esquerdo"], - ou_layo_s: "cor da camada", - ou_layo_l: ["cores da camada de saída","para cada índice z","substituído por mesclado"], + ou_layr_l: ["ordem de saída de camadas","do topo direito para","inferior esquerdo"], + ou_layo_s: "cor de camada", + ou_layo_l: ["cores de saída de camadas","para cada índice z","substituído por fundido"], + ou_lays_s: "marcação de camadas", + ou_lays_l: ["marcar camadas para empilhamento. a camada acima será emitida numa cor diferente que o laser pode marcar com potência inferior. activa agrupamento de camadas."], ou_drkn_s: "faca de arrasto", - ou_drkn_l: ["habilitar faca de arrasto","saída em gcode","raios de corte são adicionados","para os cantos com","passadas de corte"], + ou_drkn_l: ["activar faca de arrasto","saída em gcode","raios de corte são adicionados","aos cantos com","passagens de corte para baixo"], + ou_stak_s: "pilha 3d", + ou_stak_l: ["saída é uma pilha 3D de caminhos 2D em vez de empacotar camadas planas em 2D"], + ou_maxp_s: "potência máxima", + ou_maxp_l: ["valor de potência máxima em gcode. % de potência das definições irá escalar de 0 para este valor"], + ou_inch_s: "imperial", + ou_inch_l: ["valores de saída em polegadas"], + ou_shap_s: "ferramenta shaper", + ou_shap_l: ["anotar SVG com atributos personalizados da Ferramenta Shaper"], // OUTPUT FDM - ou_nozl_s: "nozzle temp", + ou_nozl_s: "temperatura do bico", ou_nozl_l: "graus em celsius", - ou_bedd_s: "temperatura da cama", + ou_bedd_s: "temperatura da base", ou_bedd_l: "graus em celsius", ou_feed_s: "velocidade de impressão", - ou_feed_l: ["velocidade máxima de impressão","milímetros/segundo"], + ou_feed_l: ["velocidade máxima de impressão","definir para 0 para usar padrão","milímetros / segundo"], ou_fini_s: "velocidade de acabamento", - ou_fini_l: ["velocidade do cartucho mais externo","milímetros/segundo"], + ou_fini_l: ["velocidade da parede mais externa","camadas sólidas de ponte/planas","definir para 0 para usar padrão","milímetros / segundo"], ou_move_s: "velocidade de movimento", - ou_move_l: ["velocidade de movimento sem impressão","milímetros/segundo","0 = habilitar movimentos G0"], - ou_shml_s: "fator de cartucho", - ou_flml_s: "fator sólido", - ou_spml_s: "fator de preenchimento", + ou_move_l: ["velocidade de movimento sem impressão","milímetros / segundo","0 = activar movimentos G0"], + ou_shml_s: "factor de parede", + ou_flml_s: "factor sólido", + ou_spml_s: "factor de preenchimento", ou_exml_l: ["multiplicador de extrusão","0.0 - 2.0"], - ou_fans_s: "velocidade do ventilador", + ou_fanl_s: "ligar ventoinha na camada", + ou_fanl_l: ["# de camada para ligar ventoinha","camadas começam em 0"], + ou_fans_s: "velocidade de ligar ventoinha", ou_fans_l: "0 - 255", + ou_layt_s: "tempo mínimo de camada", + ou_layt_l: ["tempo mínimo permitido de impressão de camada em segundos. a impressão será desacelerada se a camada de outra forma completar em menos segundos.","0 = desactivado"], // OUTPUT CAM - ou_toll_s: "tolerância", - ou_toll_l: ["precisão de superfície","em unidades de espaço de trabalho","mais baixo é mais lento e","usa mais memória","0 = baseado automaticamente","na preferência animada"], + ou_toll_s: "precisão", + ou_toll_l: ["precisão de superfície","em unidades de espaço de trabalho","mais baixo é mais lento e","usa mais memória","0 = automático baseado","em preferência de animação"], + ou_flat_s: "planicidade", + ou_flat_l: ["delta z abaixo do qual dois pontos adjacentes são considerados colineares. 0 = calcular usando tolerância"], + ou_redu_s: "redução", + ou_redu_l: ["número de passos de eixo a saltar para cada unidade de precisão. maior precisão pode exigir redução para produzir tamanhos de ficheiro razoáveis. começar em 0 e testar em incrementos de 1."], + ou_brdg_s: "ponte", + ou_brdg_l: ["distância plana entre áreas","curvas para fazer ponte com um corte"], ou_zanc_s: "âncora z", - ou_zanc_l: ["controla a posição da peça","quando o material Z excede a parte Z"], - ou_ztof_s: "compensação z", - ou_ztof_l: ["compensa âncora z","em unidades de espaço de trabalho","não tem efeito quando","a âncora está no meio"], + ou_zanc_l: ["controla a posição da peça","quando Z do material excede Z da peça"], + ou_ztof_s: "desvio z", + ou_ztof_l: ["desviar âncora z","em unidades de espaço de trabalho"], + ou_ztop_s: "z superior", + ou_ztop_l: ["desvio do fundo do material","para definir início de profundidade de corte","em unidades de espaço de trabalho","* furação/contorno ignoram isto *"], ou_zbot_s: "z inferior", - ou_zbot_l: ["deslocamento da parte inferior","para limitar a profundidade de corte","em unidades de espaço de trabalho"], - ou_zclr_s: "espaço livre z", - ou_zclr_l: ["deslocamento de viagem seguro","de cima da peça","em unidades de espaço de trabalho"], - ou_ztru_s: "através z", - ou_ztru_l: ["estender a passagem de recorte para baixo","em unidades de espaço de trabalho"], + ou_zbot_l: ["desvio do fundo do material","para limitar profundidade de corte","em unidades de espaço de trabalho"], + ou_zclr_s: "folga z", + ou_zclr_l: ["desvio de viagem seguro","do topo da peça","em unidades de espaço de trabalho"], + ou_ztru_s: "z através", + ou_ztru_l: ["estender passagem de recorte para baixo","em unidades de espaço de trabalho"], ou_conv_s: "convencional", - ou_conv_l: ["direção de fresagem","desmarque para 'subir'"], + ou_conv_l: ["direcção de fresagem","desmarcar para 'concordante'"], ou_depf_s: "profundidade primeiro", - ou_depf_l: ["otimizar cortes de bolso","com prioridade de profundidade"], + ou_depf_l: ["optimizar cortes de bolsa","com prioridade de profundidade"], + ou_inrf_s: "interior primeiro", + ou_inrf_l: ["sempre cortar de interior para exterior"], + ou_toin_s: "inicialização de ferramenta", + ou_toin_l: "adicionar mudança de ferramenta com primeira operação. quando desactivado, o gcode assume que a primeira ferramenta está carregada e o desvio sondado", + ou_forz_s: "forçar z máximo", + ou_forz_l: "todos os movimentos entre bolsas irão para z máximo (acima do material). isto é geralmente necessário se não estiver a executar uma operação de desbaste antes de operações de bolsa.", + ou_z1st_s: "primeiro z máximo", + ou_z1st_l: "primeiro movimento no trabalho será para Z máximo (distância de viagem acima do material)", + ou_feng_s: "factor de contacto", + ou_feng_l: "escala de velocidade (0.1-1) quando fresa de topo está totalmente engajada num novo corte. cortes sobrepostos quando a fresa está menos que totalmente engajada executam a um factor de 1 relativo à velocidade de saída. tipicamente isto relaciona-se com desbaste ou qualquer operação com sobreposição.", + ou_eang_s: "ângulo de suavização", + ou_eang_l: "ângulo de descida para suavizar descida em graus", // CAM STOCK cs_menu: "material", cs_wdth_s: "largura", - cs_wdth_l: ["largura (x) em unidades de espaço de trabalho","0 padrão para o tamanho da peça"], + cs_wdth_l: ["largura (x) em unidades de espaço de trabalho","0 usa por padrão tamanho da peça"], cs_dpth_s: "profundidade", - cs_dpth_l: ["profundidade (y) em unidades de espaço de trabalho","0 padrão para o tamanho da peça"], + cs_dpth_l: ["profundidade (y) em unidades de espaço de trabalho","0 usa por padrão tamanho da peça"], cs_hght_s: "altura", - cs_hght_l: ["altura (z) em unidades de espaço de trabalho","0 padrão para o tamanho da peça"], - cs_offs_s: "compensação", - cs_offs_l: ["use largura, profundidade e altura","como compensação do máximo","padrão para o tamanho da peça"], + cs_hght_l: ["altura (z) em unidades de espaço de trabalho","0 usa por padrão tamanho da peça"], + cs_offs_s: "desvio", + cs_offs_l: ["usar largura, profundidade, altura","como desvios do tamanho máximo","da peça na plataforma"], cs_clip_s: "recortar para", - cs_clip_l: ["áspero e esboço","recortar caminhos de corte","ao material definido"], - cs_offe_s: "habilitar", - cs_offe_l: "habilitar material de fresagem", + cs_clip_l: ["desbaste e contorno","recortar caminhos de corte","para material definido"], + cs_ishg_s: "mostrar grelha", + cs_ishg_l: ["mostrar grelha de plataforma no modo indexado"], + cs_indx_s: "indexado", + cs_indx_l: ["material está montado num indexador rotativo"], + cs_offe_s: "activar", + cs_offe_l: "activar material de fresagem", // ORIGIN (CAM & LASER) or_bnds_s: "limites de origem", - or_bnds_l: ["origem é relativa ao","limite de todos os objetos"], - or_cntr_s: "oragem central", + or_bnds_l: ["origem é relativa ao","limite de todos os objectos"], + or_cntr_s: "origem ao centro", or_cntr_l: "origem é referenciada do centro", - or_topp_s: "origem superior", - or_topp_l: "origem são referências do topo dos objetos", + or_topp_s: "origem no topo", + or_topp_l: "origem é referenciada do topo dos objectos", + or_offx_s: "desvio de origem X", + or_offx_l: "desvio de origem X", + or_offy_s: "desvio de origem Y", + or_offy_l: "desvio de origem Y", + + // CAM ORIGIN + co_menu: "origem", + co_offx_s: "desvio x", + co_offx_l: ["desviar origem ao longo do eixo x","em unidades de espaço de trabalho"], + co_offy_s: "desvio y", + co_offt_l: ["desviar origem ao longo do eixo y","em unidades de espaço de trabalho"], + co_offz_s: "desvio z", + co_offz_l: ["desviar origem ao longo do eixo z","em unidades de espaço de trabalho"], // FDM ADVANCED ad_menu: "especialista", - ad_rdst_s: "retrair distância", - ad_rdst_l: ["quantidade para retrair o filamento","para movimentos longos. em milímetros"], - ad_rrat_s: "taxa de retração", - ad_rrat_l: ["velocidade do filamento","retração em mm/s"], - ad_rdwl_s: "ativar o descanso", - ad_wpln_s: "retrair varredura", - ad_wpln_l: ["movimento não imprimível","após retração","em milímetros"], - ad_rdwl_l: ["tempo entre reengajamento","do filamento e movimento","em milissegundos"], - ad_scst_s: "costa do cartucho", - ad_scst_l: ["fim não imprimível","dos cartuchos de perímetro","em milímetros"], - ad_msol_s: "sólido mínimo", - ad_msol_l: ["área mínima (mm^2)","necessária para se manter sólida","deve ser > 0.1"], + ad_rdst_s: "distância de retracção", + ad_rdst_l: ["quantidade para retrair filamento","para movimentos longos. em milímetros"], + ad_rrat_s: "taxa de retracção", + ad_rrat_l: ["velocidade de retracção","de filamento em mm/s"], + ad_rdwl_s: "espera de contacto", + ad_wpln_s: "limpeza de retracção", + ad_wpln_l: ["movimento sem impressão","após retracção","em milímetros"], + ad_rdwl_l: ["tempo entre reengatar","filamento e movimento","em milissegundos"], + ad_scst_s: "deslize de parede", + ad_scst_l: ["fim sem impressão","de paredes de perímetro","em milímetros"], + ad_msol_s: "filtro de área", + ad_msol_l: ["área mínima (mm^2)","pontes e planos menores que isto são eliminados"], ad_mins_s: "velocidade mínima", ad_mins_l: ["velocidade mínima","para segmentos curtos"], + ad_maxf_s: "taxa de fluxo máxima", + ad_maxf_l: ["taxa de fluxo volumétrico máximo suportado por esta cabeça de impressão e filamento","em milímetros^3 / segundo"], + ad_scar_s: "comprimento de junta", + ad_scar_l: ["comprimento de subida suave para junta. desactiva detecção de arco","0 = desactivado"], ad_spol_s: "caminho curto", - ad_spol_l: ["polígonos mais curtos que este","terão sua velocidade de impressão","reduzida para velocidade mínima","em milímetros"], + ad_spol_l: ["polígonos mais curtos que isto","terão sua velocidade de impressão","reduzida para velocidade mínima","em milímetros"], ad_arct_s: "tolerância de arco", - ad_arct_l: ["converter linhas facetadas em arcos","tolerância de desvio do ponto central","ao combinar pontos de arco","considere valores em torno de 0,15","em milímetros","0 para desativar"], - ad_zhop_s: "z hop dist", - ad_zhop_l: ["quantidade para aumentar z","em movimentos de retração","em milímetros","0 para desativar"], - ad_abkl_s: "antiretrocesso", - ad_abkl_l: ["para melhor acabamento de superfície plana","use micromovimentos para cancelar","o retrocesso na saída da camada sólida","em milímetros","0 para desativar","se o seu firmware tiver M425","coloque isso no cabeçalho do gcode","e deixe como 0"], - ad_lret_s: "retrair camada", - ad_lret_l: ["forçar a retração do filamento","entre camadas"], + ad_arct_l: ["converter linhas facetadas em arcos","tolerância de deriva de ponto central","ao corresponder pontos de arco","considerar valores em torno de 0.15","valor em milímetros","0 ou junta desactiva isto"], + ad_zhop_s: "distância de salto z", + ad_zhop_l: ["quantidade para elevar z","em movimentos de retracção","em milímetros","0 para desactivar"], + ad_abkl_s: "anti-folga", + ad_abkl_l: ["para melhor acabamento de superfície plana","usar micro-movimentos para cancelar","folga na saída de camada sólida","em milímetros","0 para desactivar","se o seu firmware tiver M425","colocar isso no cabeçalho gcode","e deixar isto como 0"], + ad_lbir_s: "correia primeiro", + ad_lbir_l: ["sempre imprimir paredes tocando a correia antes de quaisquer outras paredes. isto já não é uma definição recomendada baseada em testes extensivos."], + ad_altr_s: "alternado", + ad_altr_l: ["alternar ordem de enrolamento de parede","sentido horário / anti-horário","pode reduzir empenamento em áreas finas","e ajudar com aderência de aresta de correia"], + ad_zint_s: "intercalar z", + ad_zint_l: ["intercalar alturas Z com número ímpar de paredes"], + ad_lret_s: "forçar retracção", + ad_lret_l: ["forçar retracção de filamento entre camadas"], + ad_agap_s: "evitar espaços", + ad_agap_l: ["encaminhar em torno de espaços em vez","de executar uma retracção","quando possível"], ad_play_s: "polir camadas", - ad_play_l: ["polir até o especificado","# de camadas de cada vez"], + ad_play_l: ["polir até especificado","# de camadas de cada vez"], ad_pspd_s: "velocidade de polimento", - ad_pspd_l: ["velocidade de polimento","em milímetros/segundo"], + ad_pspd_l: ["velocidade de polimento","em milímetros / segundo"], + ad_purg_s: "torre de purga", + ad_purg_l: ["área de torre de purga em mm^2","para configurações multi-extrusora","0 = desactivado"], // CAM EXPERT - cx_fast_s: "pular sombra", - cx_fast_l: ["desabilitar detecção de saliências","pode ser mais rápido e usar menos","memória com modelos complexos","mas falha com saliências","tente habilitar se fatiar","travar durante o sombreamento"], + cx_fast_s: "saltar sombra", + cx_fast_l: ["desactivar detecção de saliência","pode ser mais rápido e usar menos","memória com modelos complexos","mas falha com saliências","tentar activar se fatiamento","travar durante sombreamento"], + cx_true_s: "sombra verdadeira", + cx_true_l: ["sombra computacionalmente correcta","será mais lento mas produzir","melhores cortes para peças complexas"], + cx_arce_s: "saída de arco", + cx_arce_l: ["EXPERIMENTAL: activar conversão de caminho para arco"], + cx_arct_s: "tolerância de arco", + cx_arct_l: ["converter caminhos circulares em arcos;","tolerância de deriva de ponto central","ao corresponder pontos de arco","considerar valores em torno de 0.15","em mm, ou 0.006 polegadas;","Valores altos podem causar","comportamento inesperado","0 para desactivar"], + cx_arcr_s: "resolução de arco", + cx_arcr_l: ["mudança na direcção de linha","aceitável num arco","considerar valores em torno de 5","Valores altos podem causar","comportamento inesperado",], // FDM GCODE ag_menu: "gcode", - ag_nozl_s: "nozzle", - ag_nozl_l: "select output nozzle or head", - ag_peel_s: "protetor de desprendimento", - ag_peel_l: ["começando nesta posição z do cinto","periodicamente rolar a impressão e","voltar ao cinto para soltá-lo","e evitar deflexão de rolamento"], - ag_paws_s: "pausar camadas", - ag_paws_l: ["lista de camadas separadas por vírgulas","para injetar comandos de pausa antes"], - ag_loop_s: "repetir camadas", - ag_loop_l: ["intervalos de camadas para repetir no formato","primeira-última-contagem, primeira-última-contagem,...","contagem omitida = 1"], + ag_nozl_s: "bico", + ag_nozl_l: "seleccionar bico ou cabeça de saída", + ag_peel_s: "protector de descolar", + ag_peel_l: ["começando nesta posição z da correia","periodicamente rolar a impressão para fora e","de volta à correia para descolá-la","e prevenir deflexão de rolamento"], + // ag_paws_s: "camadas de pausa", + // ag_paws_l: ["lista separada por vírgulas de camadas","para injectar comandos de pausa antes"], + // ag_loop_s: "repetir camadas", + // ag_loop_l: ["intervalos de camadas para repetir no formato","primeira-última-número,primeira-última-número,...","número omitido = 1"], + ag_loop_s: "número de repetições", + ag_loop_l: ["número de vezes para repetir","o intervalo seleccionado ou a","impressão inteira se sem intervalo"], // SLA MENU - sa_menu: "corte", - sa_lahe_s: "altura da camada", - sa_lahe_l: ["altura da camada","em milímetros"], - sa_shel_s: "cartucho vazio", - sa_shel_l: ["espessura do cartucho em mm","usar múltiplas camadas de altura","use 0 para sólido (desabilitado)"], + sa_menu: "fatiamento", + sa_lahe_s: "altura de camada", + sa_lahe_l: ["altura de camada","em milímetros"], + sa_shel_s: "parede oca", + sa_shel_l: ["espessura da parede em mm","usar múltiplo de altura de camada","usar 0 para sólido (desactivado)"], sa_otop_s: "topo aberto", - sa_otop_l: ["se cartucho está habilitado","resulta em um topo aberto"], + sa_otop_l: ["se parede está activada","resulta num topo aberto"], sa_obas_s: "base aberta", - sa_obas_l: ["se cartucho está habilitado","resulta em uma base aberta","desabilitado com suportes"], + sa_obas_l: ["se parede está activada","resulta numa base aberta","desactivado com suportes"], sa_layr_m: "camadas", - sa_lton_s: "luz de tempo", - sa_lton_l: ["luz de camada ligada","tempo em segundos"], - sa_ltof_s: "light off time", - sa_ltof_l: ["luz de camada desligada","tempo em segundos"], - sa_pldi_s: "distância de casca", - sa_pldi_l: ["distância de casca","em milímetros"], - sa_pllr_s: "taxa de elevação de casca", - sa_pllr_l: ["velocidade de elevação da casca","em mm/seg"], - sa_pldr_s: "taxa de descasque", - sa_pldr_l: ["velocidade de descasque","em mm/seg"], + sa_lton_s: "tempo de luz ligada", + sa_lton_l: ["tempo de luz ligada","da camada em segundos"], + sa_ltof_s: "tempo de luz desligada", + sa_ltof_l: ["tempo de luz desligada","da camada em segundos"], + sa_pldi_s: "distância de descolar", + sa_pldi_l: ["distância de descolar","em milímetros"], + sa_pllr_s: "taxa de elevação de descolar", + sa_pllr_l: ["velocidade de elevação de descolar","em mm/seg"], + sa_pldr_s: "taxa de descida de descolar", + sa_pldr_l: ["velocidade de descida de descolar","em mm/seg"], sa_base_m: "base", - sa_balc_s: "contagem de camadas", - sa_balc_l: ["número de","camadas base"], - sa_bltn_l: ["luz da camada de base ligada","tempo em segundos"], - sa_bltf_l: ["luz da camada de base desligada","tempo em segundos"], + sa_balc_s: "número de camadas", + sa_balc_l: ["número de","camadas de base"], + sa_bltn_l: ["tempo de luz ligada","da camada de base em segundos"], + sa_bltf_l: ["tempo de luz desligada","da camada de base em segundos"], sa_infl_m: "preenchimento", sa_ifdn_s: "densidade", - sa_ifdn_l: ["porcentagem de preenchimento","requer cartucho","0 = desativado","válido 0.0 - 1.0"], - sa_iflw_s: "espessura da linha", - sa_iflw_l: ["largura da linha hachurada","em milímetros"], + sa_ifdn_l: ["percentagem de preenchimento","requer parede","0 = desactivado","válido 0.0 - 1.0"], + sa_iflw_s: "largura de linha", + sa_iflw_l: ["largura de linha de tracejado","em milímetros"], sa_supp_m: "suporte", - sa_slyr_s: "camadas base", - sa_slyr_l: ["camadas de suporte de base","faixa de valor 0-10"], - sa_slgp_s: "camadas de lacuna", - sa_slgp_l: ["number of layers between","raft and bottom of object"], + sa_slyr_s: "camadas de base", + sa_slyr_l: ["camadas de suporte de base","intervalo de valor 0-10"], + sa_slgp_s: "camadas de espaço", + sa_slgp_l: ["número de camadas entre","jangada e fundo do objecto"], sa_sldn_s: "densidade", - sa_sldn_l: ["usado para calcular o","número de pilares de suporte","0.0-1.0 (0 = desativar)"], + sa_sldn_l: ["usado para calcular o","número de pilares de suporte","0.0-1.0 (0 = desactivar)"], sa_slsz_s: "tamanho", sa_slsz_l: ["tamanho máximo de um","pilar de suporte","em milímetros"], sa_slpt_s: "pontos", sa_slpt_l: ["número de pontos em","cada pilar de suporte","em milímetros"], - sl_slen_l: "habilitar suporte", + sl_slen_l: "activar suportes", sa_outp_m: "saída", - sa_opzo_s: "compensação z", - sa_opzo_l: ["compensação da camada z","quase sempre 0.0","0.0-1.0 em milímetros"], - sa_opaa_s: "suavidade", - sa_opaa_l: ["habilita o anti-aliasing (suavidade)","produz arquivos maiores","pode desfocar detalhes"] + sa_opzo_s: "desvio z", + sa_opzo_l: ["desvio de camada z","quase sempre 0.0","0.0-1.0 em milímetros"], + sa_opaa_s: "anti-aliasing", + sa_opaa_l: ["activar anti-aliasing","produz ficheiros maiores","pode desfocar detalhes"] }; diff --git a/web/kiri/lang/zh.js b/web/kiri/lang/zh.js index 34e71397..2046488e 100644 --- a/web/kiri/lang/zh.js +++ b/web/kiri/lang/zh.js @@ -1,155 +1,230 @@ -// 英文。其他语言地图将遵循英语内容 -// 映射缺少的键/值对 +// 简体中文语言映射。对于任何缺失的键/值对将 +// 回退到英文映射 self.lang['zh'] = { // 通用键及菜单 animate: "动画", // CAM动画按钮 arrange: "排布", // 对工作区对象排版 axis: "轴", // 左侧对象比例弹出菜单 + back: "返回", clear: "清除", // 清空工作区(移除所有对象) copy: "复制", + clone: "克隆", // 创建副本 delete: "删除", detail: "详情", done: "完成", - enable: "开启", + edit: "编辑", + enable: "启用", + disable: "禁用", + donate: "捐赠", export: "导出", files: "文件", + filter: "筛选", + front: "前面", + fullscreen: "全屏", help: "帮助", ghost: "透明", // 左侧渲染弹出菜单(线框) - hide: "隐藏", // 左侧渲染弹出菜单(不可见) - home: "主界面", + hide: "隐藏", // 左侧渲染弹出菜单(不可见) + home: "主页", import: "导入", + install: "安装", language: "语言", - machine: "设备", // 设备或机器 - metric: "单位", + left: "左侧", + machines: "设备", // 设备或机器 + mesh: "网格", // 网格编辑 + metric: "公制", name: "名称", - prefs: "偏好", // 左侧菜单“偏好设置” + new: "新建", // 文件新建 + off: "关", // 关闭某物 + on: "开", // 开启某物 + profs: "配置", // 右侧菜单"配置" + prefs: "偏好", // 右侧菜单"偏好设置" preview: "预览", recent: "最近", + rename: "重命名", render: "渲染", // 左侧渲染弹出菜单 reset: "重置", + right: "右侧", rotate: "旋转", // 左侧旋转弹出菜单 save: "保存", - scale: "比例", // 左侧对象比例弹出菜单 - setup: "设定", + scale: "缩放", // 左侧对象缩放弹出菜单 + select: "选择", + setup: "设置", settings: "设置", - size: "大小", + size: "尺寸", slice: "切片", - solid: "实心", // 浏览类型弹出菜单 + solid: "实体", // 视图类型弹出菜单 start: "开始", tool: "工具", - tools: "工具栏", // CAM 工具菜单按钮 - top: "顶面", + tools: "工具", // CAM 工具菜单按钮 + top: "顶部", type: "类型", // CAM 工具类型 + uninstall: "卸载", version: "版本", - view: "视图", // 左侧浏览弹出菜单 + view: "视图", // 左侧视图弹出菜单 wire: "线框", // 左侧渲染弹出菜单 + volume: "体积", // 设备构建区域 - acct_xpo: ["备份您的设备及","设备配置文件,","可选择包括工作区、","对象及位置。"], + acct_xpo: ["备份您的设备及","设备配置文件,","可选择包括工作区、","对象及位置"], - //右键内容菜单 - rc_clws: "清楚工作区", + // 右键上下文菜单 + rc_clws: "清空工作区", rc_xpws: "导出工作区", rc_lafl: "平铺", rc_mirr: "镜像", - rc_dupl: "拷贝", - rc_xstl: "导出为STL", + rc_dupl: "复制", + rc_focs: "设置焦点", + rc_heal: "修复网格", + rc_swap: "替换顶点", + rc_xobj: "导出OBJ", + rc_xstl: "导出STL", + sb_info: ["打印速度","单位:毫米/秒"], + rc_merg: "合并对象网格", + rc_splt: "分离实体", - //设备菜单及相关对话框 + // 设备菜单及相关对话框 dm_sldt: "选择设备类型", dm_stdd: "标准设备", dm_mydd: "我的设备", dm_seld: "所选设备", dm_rcnt: "最近使用文件", - dm_savs: "预存设置", + dm_savs: "设置", dm_appp: "应用偏好设置", // CAM工具对话框 - td_tyem: "立", // 立铣刀 - td_tybm: "球", // 球刀 - td_tytm: "锥", // 锥度铣刀 - td_tonm: "工具#", - td_shft: "轴", // 立铣刀轴规格 - td_flut: "槽", // 立铣刀槽规格 - td_tapr: "锥", // 立铣刀锥规格 + td_tyem: "立铣刀", // 立铣刀 + td_tybm: "球刀", // 球刀 + td_tytm: "锥刀", // 锥度铣刀 + td_tydr: "钻头", // 钻头 + td_tonm: "工具编号", + td_shft: "刀柄", // 立铣刀刀柄规格 + td_flut: "刃槽", // 立铣刀刃槽规格 + td_tapr: "锥度", // 立铣刀锥度规格 // 设备对话组 dv_gr_dev: "设备", - dv_gr_ext: "喷头", + dv_gr_ext: "挤出机", dv_gr_out: "输出", dv_gr_gco: "gcode宏", - // 设备对话 (_s = label, _l = hover help) + // 设备对话 (_s = 标签, _l = 悬停帮助) dv_name_s: "名称", dv_name_l: "设备名称", - dv_fila_s: "线料", - dv_fila_l: "直径毫米数", + dv_fila_s: "耗材", + dv_fila_l: "直径(毫米)", dv_nozl_s: "喷嘴", - dv_nozl_l: "直径毫米数", + dv_nozl_l: "直径(毫米)", dv_bedw_s: "宽度", dv_bedw_l: "工作区单位", dv_bedd_s: "深度", dv_bedd_l: "工作区单位", dv_bedh_s: "高度", - dv_bedh_l: ["最大建模高度","工作区单位数"], - dv_spmx_s: "最大转轴", - dv_spmx_l: ["最大转轴转速","0为禁用"], - dv_xtab_s: "绝对位置", - dv_xtab_l: "喷头以绝对位置运动", - dv_orgc_s: "原点", - dv_orgc_l: "机床原点", + dv_bedh_l: ["最大构建高度","单位:工作区单位"], + dv_rezx_s: "X分辨率", + dv_rezx_l: ["X分辨率"], + dv_rezy_s: "Y分辨率", + dv_rezy_l: ["Y分辨率"], + dv_zmax_s: "Z轴速度限制", + dv_zmax_l: ["Z轴最大速度","单位:毫米/秒","0表示禁用"], + dv_time_s: "输出时间系数", + dv_time_l: ["gcode导出对话框中","打印时间估算的修正系数","根据预测与实际打印时间","提高或降低数值"], + dv_spmx_s: "最大主轴转速", + dv_spmx_l: ["最大主轴转速(rpm)","0表示禁用"], + dv_xtab_s: "绝对定位", + dv_xtab_l: "挤出移动使用绝对定位", + dv_orgc_s: "中心原点", + dv_orgc_l: "平台原点在中心", // dv_orgt_s: "顶部原点", - // dv_orgt_l: "z部分顶部原点", - dv_bedc_s: "圆形机床", - dv_bedc_l: "设备机床为圆形", - dv_belt_s: "履带机床", - dv_belt_l: "持续打印机床", + // dv_orgt_l: "零件z原点在顶部", + dv_bedc_s: "圆形平台", + dv_bedc_l: "设备平台为圆形", + dv_belt_s: "传送带平台", + dv_belt_l: "连续打印平台", + dv_fsrc_s: "耗材来源", + dv_fsrc_l: ["耗材如何送入","挤出机"], dv_retr_s: "固件回抽", dv_retr_l: ["设备固件支持G10/G11"], - dv_fanp_s: "风扇强度", - dv_fanp_l: "设定冷却风扇强度", - dv_prog_s: "进程", - dv_prog_l: "各进程输出 %", + dv_fanp_s: "冷却", + dv_fanp_l: "设置冷却风扇功率", + dv_feat_s: "特性", + dv_feat_l: "为指定特性注入代码", + dv_prog_s: "进度", + dv_prog_l: "每个百分比进度输出", dv_layr_s: "层", - dv_layr_l: ["在各层变换时","进行输出"], - dv_tksp_s: "符号间隔", - dv_tksp_l: ["在gcode轴参数间","添加空隙","G0X0Y0X0","vs","G0 X0 Y0 Z0"], + dv_layr_l: ["在每次层","变化时输出"], + dv_tksp_s: "分词间隔符", + dv_tksp_l: ["在gcode轴参数间","添加空格","G0X0Y0Z0","与","G0 X0 Y0 Z0"], dv_strc_s: "删除注释", dv_strc_l: ["删除gcode注释","注释以;开头"], dv_fext_s: "文件扩展名", - dv_fext_l: "文件扩展名", + dv_fext_l: "文件名扩展名", + dv_lazr_s: "启用激光", + dv_lazr_l: ["启用激光操作"], + dv_dwll_s: "驻留", dv_dwll_l: "gcode驻留脚本", - dv_tool_s: "更换工具", - dv_tool_l: "工具更换脚本", - dv_sspd_s: "转轴转速", - dv_sspd_l: "设定转轴转速", + dv_tool_s: "工具", + dv_tool_l: "换刀脚本", + dv_sspd_s: "主轴", + dv_sspd_l: "设置主轴转速", dv_paus_s: "暂停", - dv_paus_l: "gcode 暂停脚本", - dv_head_s: "header", - dv_head_l: "gcode header脚本", - dv_foot_s: "footer", - dv_foot_l: "gcode footer脚本", - dv_lzon_s: "激光 启用", - dv_lzon_l: "gcode 激光启用脚本", - dv_lzof_s: "激光 禁用", - dv_lzof_l: "gcode 激光禁用脚本", - dv_exts_s: "选中", - dv_exts_l: "gcode 运行以启用改喷头", - dv_dext_s: "取消勾选", - dv_dext_l: "启用另一喷头前运行gcode", - dv_extd_s: "取消勾选", - dv_extd_l: "取消选中该喷头的gcode", - dv_exox_s: "偏置 x", - dv_exox_l: "喷嘴偏置 x", - dv_exoy_s: "偏置 y", - dv_exoy_l: "喷嘴偏置 y", + dv_paus_l: "gcode暂停脚本", + dv_head_s: "头部", + dv_head_l: "gcode头部脚本", + dv_foot_s: "尾部", + dv_foot_l: "gcode尾部脚本", + dv_pext_s: "外侧", + dv_pext_l: ["打印外侧线条前","运行的gcode脚本"], + dv_pint_s: "内侧", + dv_pint_l: ["打印内侧线条前","运行的gcode脚本"], + dv_lzon_s: "激光开启", + dv_lzon_l: "gcode激光开启脚本", + dv_lzof_s: "激光关闭", + dv_lzof_l: "gcode激光关闭脚本", + + dv_waon_s: "水泵开启", + dv_waon_l: "gcode水泵开启脚本", + dv_waof_s: "水泵关闭", + dv_waof_l: "gcode水泵关闭脚本", + + dv_dkon_s: "刀下", + dv_dkon_l: "gcode刀下脚本", + dv_dkof_s: "刀上", + dv_dkof_l: "gcode刀上脚本", + + dv_exts_s: "选择", + dv_exts_l: "运行gcode以启用此挤出机", + dv_dext_s: "取消选择", + dv_dext_l: "启用另一挤出机前运行的gcode", + dv_extd_s: "取消选择", + dv_extd_l: "取消选择此挤出机的gcode", + dv_exox_s: "X偏移", + dv_exox_l: "喷嘴X偏移", + dv_exoy_s: "Y偏移", + dv_exoy_l: "喷嘴Y偏移", + + dv_paid_s: "打印机ID", + dv_paid_l: ["唯一的打印机标识符","可以自定义"], + dv_paps_s: "Ping间距", + dv_paps_l: ["ping之间的最小","耗材消耗(毫米)","建议500-1000","0 = 禁用ping"], + dv_pafe_s: "进料长度", + dv_pafe_l: ["进料管长度(毫米)","短=570,中=800,长=1100"], + dv_papl_s: "推送长度", + dv_papl_l: ["挤出机齿轮与","喷嘴尖端之间的距离(毫米)"], + dv_paof_s: "偏移长度", + dv_paof_l: ["从第一段添加或删除的长度","单位:毫米","通常为0"], + dv_pahe_s: "加热时间", + dv_pahe_l: ["相对于默认值的偏移"], + dv_paco_s: "冷却时间", + dv_paco_l: ["相对于默认值的偏移"], + dv_pacm_s: "压缩时间", + dv_pacm_l: ["相对于默认值的偏移"], // 模式 mo_menu: "模式", mo_fdmp: "FDM打印", - mo_slap: "SLA模式", + mo_slap: "SLA打印", mo_lazr: "激光切割", - mo_cncm: "CNC铣刀", + mo_cncm: "CNC铣削", // 设置 su_menu: "设置", @@ -159,13 +234,13 @@ self.lang['zh'] = { su_xprt: "导出", su_help: "帮助", - //载入 + // 加载 fe_menu: "文件", - fn_recn: "最近文件", + fn_recn: "最近", fn_impo: "导入", // 功能 - fn_menu: "动作", + fn_menu: "操作", fn_arra: "排布", fn_slic: "切片", fn_prev: "预览", @@ -173,477 +248,735 @@ self.lang['zh'] = { // 视图 vu_menu: "视图", - vu_home: "首页", + vu_home: "主页", vu_rset: "重置", - vu_sptp: "顶面", + vu_sptp: "顶部", vu_spfr: "正面", vu_splt: "左侧", vu_sprt: "右侧", // 工作区 - ws_menu: "预览", + ws_menu: "视图", ws_save: "保存", ws_cler: "清除", - // 设定 + // 选项 op_menu: "界面", op_disp: "显示", op_xprt_s: "专家模式", - op_xprt_l: "显示更多设定选项", - op_decl_s: "贴花", - op_decl_l: "显示设备贴花及logo", - op_dang_s: "实验", - op_dang_l: "显示实验参数", + op_xprt_l: "显示更多设置选项", + op_decl_s: "显示贴花", + op_decl_l: "显示设备贴花和标识", + op_shny_s: "细节渲染", + op_shny_l: "选择较慢且使用高光的切片渲染方法。这使某些模型更容易看到细节,但会降低渲染速度", + op_devl_s: "开发者", + op_devl_l: ["显示开发者选项","启用开发者调试"], op_hopo_s: "悬停弹出", - op_hopo_l: ["启用菜单悬停","激活"], + op_hopo_l: ["启用菜单悬停","以激活"], op_dark_s: "暗色模式", op_dark_l: "暗色界面", - op_comp_s: "紧凑UI", - op_comp_l: ["紧凑的用户界面","适用于小屏幕","及平板"], + op_comp_s: "紧凑界面", + op_comp_l: ["紧凑的用户界面","更适合小屏幕","和平板电脑"], op_shor_s: "显示原点", op_shor_l: "显示设备或进程原点", op_shru_s: "显示标尺", - op_shru_l: ["在主要参考线上","显示轴标尺"], + op_shru_l: ["在主要网格线上","显示轴标尺"], op_sped_s: "显示速度", - op_sped_l: ["在预览模式下","以色码显示速度"], - op_auto_s: "自动排版", - op_auto_l: ["添加新项目时","自动进行排版"], - op_free_s: "自定义布局", - op_free_l: ["允许拖放布局","激光模式下不产生影响"], + op_sped_l: ["在预览模式下","显示速度到颜色条"], + op_auto_s: "自动布局", + op_auto_l: ["添加新项目时","自动布局平台"], + op_free_s: "自由布局", + op_free_l: ["允许拖动布局","激光模式下无效"], op_spcr_s: "间距", - op_spcr_l: ["自动排版时","以工作区单位表示的","对象间距"], + op_spcr_l: ["自动布局时","对象之间的间距","单位:工作区单位","传送带模式下使用0","按高度自动间距"], + op_spoa_s: "边缘角度", + op_spoa_l: ["触发边缘追踪的表面角度差异"], + op_spcx_s: "随机X", + op_spcx_l: ["传送带模式下,","随机在X轴上布局零件","以均匀传送带磨损"], op_orth_s: "正交", op_orth_l: ["正交显示","需要刷新页面"], - op_invr_s: "反向缩放", + op_anta_s: "抗锯齿", + op_anta_l: ["平滑显示。更好但更慢","需要刷新页面"], + op_invr_s: "反转缩放", op_invr_l: ["反转鼠标滚轮","滚动缩放"], op_save_s: "自动保存", - op_save_l: ["在应用重新加载之间","保存工作区内的对象"], + op_save_l: ["在应用重新加载之间","保留工作区中的对象"], op_line_s: "线条类型", - op_line_l: ["路径渲染用的线条类型","影响3D性能","路径:3D最佳","平面:2D适用","线条 = 1D 最速"], + op_line_l: ["路径渲染的线条样式","影响3D性能","path:3D最佳","flat:2D良好","line = 1D快速"], op_unit_s: "单位", - op_unit_l: ["工作区单位影响","速度与距离"], + op_unit_l: ["工作区单位影响","速度和距离"], op_anim_s: "动画", - op_anim_l: ["动画网格密度","高数值为高密度","占用更多内存","且更慢"], + op_anim_l: ["动画网格密度","更高则更密集","占用更多内存","速度更慢"], + op_exgl_l: ["在导出对话框中显示Grid:Local设备","包括Grid:Bots和OctoPrint插件"], + op_exgh_l: ["传统Grid:Host本地网络支持"], + op_exop_l: ["传统OctoPrint本地网络支持","推荐使用Grid:Space OctoPrint插件"], lo_menu: "布局", - pt_menu: "部件", + pt_menu: "切片器", pt_deci_s: "抽取", - pt_deci_l: ["在导入时启用或禁用点抽取","以加快切片速度","并减少耗用内存"], - pt_qual_s: "质量", - pt_qual_l: ["切片过程中","维持的细节程度","越低速度越快"], + pt_deci_l: ["在导入时启用或禁用点抽取。用于加快切片速度和减少内存使用"], + pt_qual_s: "细节", + pt_qual_l: ["切片操作期间保留的细节程度。较低则更快并使用更少内存。大型模型通常不会从更高细节中受益。相反,可能只会导致内存和处理问题。如果出现内存不足错误,请降低此值。"], pt_heal_s: "修复网格", - pt_heal_l: ["尝试修复","非流形网格","延长切片耗时"], + pt_heal_l: ["尝试在切片期间修复非流形网格。可能会增加切片时间。检测到非流形几何时启用警告。"], + pt_thrd_s: "线程", + pt_thrd_l: ["当浏览器支持嵌套工作者时使用并行处理。可能会增加大型模型的内存压力。如果出现内存不足错误,请禁用"], + pt_assy_s: "Web ASM", + pt_assy_l: ["浏览器支持时使用Web Assembly。如果遇到伪影或内存错误,请尝试禁用此功能。"], + pt_wgpu_s: "Web GPU", + pt_wgpu_l: ["浏览器支持时使用Web GPU。如果遇到伪影或内存错误,请尝试禁用此功能。"], - xp_menu: "输出", + xp_menu: "导出", - //设定 - se_menu: "设定", - se_load: "载入", - se_save: "存储", + // 设置 + se_menu: "配置", + se_load: "加载", + se_save: "保存", - // FDM 切片 + // FDM 层 sl_menu: "层", - sl_lahi_s: "高度", - sl_lahi_l: ["各切片层高度","毫米数"], - ad_minl_s: "最小高度", - ad_minl_l: ["适应性最小层高","毫米数","不能为零"], + sl_angl_s: "切片角度", + sl_angl_l: ["切片角度偏差(度)"], + sl_lahi_s: "层高", + sl_lahi_l: ["每个切片层的高度","单位:毫米"], + ad_minl_s: "最小层高", + ad_minl_l: ["自适应最小层高","单位:毫米","必须非零"], + ad_adap_s: "自适应高度", + ad_adap_l: ["使用自适应层高","以'层高'作为最大值","以'最小层高'作为最小值"], sl_ltop_s: "顶层", - sl_ltop_l: ["在打印顶部","执行的","固体层数"], - sl_lsld_s: "固体层", - sl_lsld_l: ["根据图层增量计算的","实心填充区域。见","层弹出菜单"], + sl_ltop_l: ["打印顶部或朝上平面区域的实体层数"], + sl_lsld_s: "实体层", + sl_lsld_l: ["从桥接和平面区域计算的","实体填充区域","在切片层之间检测"], sl_lbot_s: "底层", - sl_lbot_l: ["在打印底部","执行的","固体层数"], - ad_adap_s: "适应性", - ad_adap_l: ["使用适应性层高","其中‘层高’代表最大值","‘最小层’代表最小值"], + sl_lbot_l: ["打印底部或桥接跨度下方的实体层数"], + + // FDM 壁 + sw_menu: "外壳", + sl_shel_s: "外壳数量", + sl_shel_l: ["要生成的周边","壁数量"], + ad_thin_s: "薄壁", + ad_thin_l: ["检测并填充","外壳壁之间的间隙"], // FDM 外壳 - sl_shel_s: "外壳数", - sl_shel_l: ["需生成的","围墙数"], + sl_line_s: "线宽", + sl_line_l: ["挤出宽度(毫米)","0 = 喷嘴直径"], sl_ordr_s: "外壳顺序", - sl_ordr_l: ["输出外壳顺序","由内至外","或由外至内","影响表面质量"], - sl_strt_s: "层始点", - sl_strt_l: ["层的始发点","最终 = 最终层截止处","中心 = 部件中心","原点 = 设备原点"], - ad_thin_s: "薄壁", - ad_thin_l: ["检测并填补","外壳间隙"], + sl_ordr_l: ["输出外壳顺序","从内到外","或从外到内","影响表面质量"], + sl_strt_s: "起始点", + sl_strt_l: ["层起始点","last = 上一层结束位置","center = 零件中心","origin = 设备原点","random = 随机"], + sl_ofin_s: "内壳偏移", + sl_ofin_l: ["内孔周边偏移","单位:毫米"], + sl_ofot_s: "外壳偏移", + sl_ofot_l: ["外壁周边偏移","单位:毫米"], + + // FDM 实体 + fs_menu: "实体填充", + fi_over_s: "填充重叠", + fi_over_l: ["外壳与实体或稀疏填充之间的重叠。可改善与外壳的结合","占线宽的比例","0.0 - 1.0"], + fi_angl_s: "起始角度", + fi_angl_l: ["起始角度(度)","每一后续层","增加90度","仅适用于实体层"], + fi_grow_s: "区域扩展", + fi_grow_l: ["扩展投影实体","有助于稀疏填充区域上的","实体区域","单位:毫米"], // FDM 填充 - fi_menu: "填充", + fi_menu: "稀疏填充", fi_type: "填充类型", - fi_pcnt_s: "填充分数", - fi_pcnt_l: ["填充密度","0.0 - 1.0"], - fi_angl_s: "固体开始", - fi_angl_l: ["起始角度","给以下每一层","增加90度","仅适用于固体层"], - fi_wdth_s: "固体宽度", - fi_wdth_l: ["固体填充线宽","数值为喷头宽度的一部分","< 1时密度更高","适用于表面处理","0.0 - 1.0"], - fi_over_s: "外壳重叠", - fi_over_l: ["与外壳及其他填充重叠","数值为喷头直径的一部分","0.0 - 2.0"], + fi_pcnt_s: "填充量", + fi_pcnt_l: ["填充密度值","0.0 - 1.0"], + fi_rept_s: "填充重复", + fi_rept_l: ["重复不变","填充层的次数"], // fi_rate_s: "打印速度", - fi_rate_l: ["线料喷出速度","设为0以使用默认","输出打印速度"], + fi_rate_l: ["填充的挤出速度","设置为0以使用默认","输出打印速度"], + + // FDM 加热 + fh_menu: "加热", + + // FDM 冷却 + fc_menu: "冷却", // FDM 第一层 - fl_menu: "基座", + fl_menu: "基础", fl_lahi_s: "层高", - fl_lahi_l: ["每一切片厚度的","毫米数","应该≥切片厚度"], + fl_lahi_l: ["每个切片的高度","单位:毫米","应该 >= 切片高度"], fl_rate_s: "外壳速度", - fl_rate_l: ["外壳打印最大速度","以毫米/分钟表示"], + fl_rate_s: "外壳速度", + fl_rate_l: ["外壳打印最大速度","单位:毫米/秒"], fl_frat_s: "填充速度", - fl_frat_l: ["填充打印最大速度","以毫米/分钟表示"], + fl_frat_l: ["填充打印最大速度","单位:毫米/秒"], fl_mult_s: "流量系数", - fl_mult_l: ["喷出倍数","0.0 - 2.0"], + fl_mult_l: ["挤出乘数","0.0 - 2.0"], fl_sfac_s: "宽度系数", - fl_sfac_l: ["喷头大小倍数","改变线的间隔"], - fl_skrt_s: "裙边数", - fl_skrt_l: ["需生成的首层偏置","边缘数"], - fl_skro_s: "裙边偏置", - fl_skro_l: ["距离部件的裙边偏置","毫米数"], - fl_nozl_s: "喷嘴加热温度", - fl_nozl_l: ["以摄氏度表示","该数值为0时","使用的输出设定"], - fl_bedd_s: "热床温度", - fl_bedd_l: ["以摄氏度表示","该数值为0时","使用的输出设定"], - fr_spac_s: "底座空隙", - fr_spac_l: ["第一层和底座之间的","额外空隙","毫米数"], - fr_nabl_s: "启用底座", - fr_nabl_l: ["在模型下方创建底座","以增强粘附性","使用裙边偏置并","禁用裙边输出"], + fl_sfac_l: ["喷嘴尺寸乘数","改变线间距"], + fl_skrt_s: "裙边数量", + fl_skrt_l: ["要生成的第一层偏移","边缘数量"], + fl_skro_s: "裙边偏移", + fl_skro_l: ["距零件的裙边偏移","单位:毫米","使用筏时","这是筏偏移"], + fl_nozl_s: "喷嘴温度", + fl_nozl_l: ["摄氏度","当此值为零时","使用输出设置"], + fl_bedd_s: "平台温度", + fl_bedd_l: ["摄氏度","当此值为零时","使用输出设置"], + fr_spac_s: "筏间隙", + fr_spac_l: ["第一层与筏之间的","额外层间距","单位:毫米"], + fr_nabl_s: "启用筏", + fr_nabl_l: ["在模型下创建筏","以提高附着力","使用裙边偏移并","禁用裙边输出"], + fr_draf_s: "气流挡板", + fr_draf_l: ["将裙边延伸至零件高度","作为抵御气流的挡板","并困住热空气"], - // FDM 打印带专用 - fl_zoff_s: "打印带偏置", - fl_zoff_l: ["最低挤出","打印带偏置高度","毫米数"], - fl_brim_s: "边缘尺寸", - fl_brim_l: ["在部件底部增加裙边","尺寸为宽度毫米数","设为0以禁用"], - fl_brmn_s: "裙边触发", - fl_brmn_l: ["仅在面向打印带的区域比","该数值短时增加裙边","数值以毫米表示","0 = 无穷"], - fl_bled_s: "部件锚点", - fl_bled_l: ["开始打印时","打印带上的部件锚点","毫米数"], + // FDM 传送带专用 + fl_zoff_s: "传送带偏移", + fl_zoff_l: ["最低挤出层","距传送带的高度偏移","单位:毫米"], + fl_flat_s: "平整", + fl_flat_l: ["将高度小于此值的点","平整到传送带上","单位:毫米"], + fl_brim_s: "边缘侧面", + fl_brim_l: ["向零件周边添加边缘","尺寸为宽度(毫米)","0表示禁用"], + fl_brin_s: "边缘内部", + fl_brin_l: ["当存在内部空隙时","向零件内部添加边缘","尺寸为宽度(毫米)","0表示禁用"], + fl_brmn_s: "边缘触发", + fl_brmn_l: ["仅当面向传送带的段","短于此值时添加边缘","单位:毫米","0 = 无穷大"], + fl_brco_s: "边缘梳理", + fl_brco_l: ["每n条线","添加边缘间隙","0表示禁用"], + fl_brgp_s: "边缘间隙", + fl_brgp_l: ["边缘与零件之间的间距","单位:毫米"], + fl_bled_s: "零件锚定", + fl_bled_l: ["传送带零件锚定","在打印开始时","单位:毫米"], + fl_blmp_s: "锚点凸起", + fl_blmp_l: ["在锚点开始处添加凸起","以帮助其在传送带末端","剥离","单位:毫米"], // FDM 支撑 sp_menu: "支撑", sp_detect: "检测", sp_dens_s: "密度", - sp_dens_l: ["分数 0.0 - 1.0","建议值 0.15","0为禁用"], - sp_size_s: "柱子尺寸", - sp_size_l: ["柱宽","毫米数"], - sp_offs_s: "部件偏置", - sp_offs_l: ["部件偏置","毫米数"], - sp_gaps_s: "空隙层", - sp_gaps_l: ["从部件偏置的","层数"], - sp_span_s: "最大范围", - sp_span_l: ["触发生成新支撑柱的","不受支撑的范围距离","毫米数"], + sp_dens_l: ["分数 0.0 - 1.0","建议 0.15","0表示禁用"], + sp_size_s: "支柱尺寸", + sp_size_l: ["支柱宽度(毫米)","较小的值会指数级","增加检测时间"], + sp_offs_s: "零件偏移", + sp_offs_l: ["距零件的偏移","单位:毫米"], + sp_gaps_s: "间隙层", + sp_gaps_l: ["距零件的","层数偏移"], + sp_span_s: "最大跨度", + sp_span_l: ["导致生成新支撑的","无支撑跨度","单位:毫米"], sp_angl_s: "最大角度", - sp_angl_l: ["需要生成支撑柱前的","最大悬空角度"], - sp_area_s: "最小区域", - sp_area_l: ["支撑柱所需的","最小区域","毫米数"], - sp_xpnd_s: "扩张", - sp_xpnd_l: ["支撑区域从","部件边缘扩张的","毫米数"], - sp_nozl_s: "喷头", - sp_nozl_l: ["在多喷头系统中","喷出支撑材料的","喷头"], + sp_angl_l: ["生成支撑柱前的","最大悬垂角度","正常值45-60","传送带值0-10"], + sp_area_s: "最小面积", + sp_area_l: ["支撑柱的","最小面积","单位:毫米","较小的值会","减慢检测"], + sp_xpnd_s: "扩展", + sp_xpnd_l: ["支撑区域扩展","超出零件边界","单位:毫米"], + sp_grow_s: "生长", + sp_grow_l: ["生长支撑柱以填充小间隙","单位:毫米"], + sp_nozl_s: "挤出机", + sp_nozl_l: ["在多挤出机系统中","用于支撑材料的","挤出机"], + sp_outl_s: "封闭", + sp_outl_l: ["将支撑图案封闭","在周边外壳内"], sp_auto_s: "自动", - sp_auto_l: ["启用生成支撑","使用切片当时几何","支撑只会在","切片完成后生成"], - - // LASER 切片 - ls_offs_s: "偏置", - ls_offs_l: ["调整激光宽度","毫米数"], - ls_lahi_s: "高度", - ls_lahi_l: ["层高","毫米数","0 = 自动/测量"], - ls_lahm_s: "最小值", - ls_lahm_l: ["最小层高","将以该厚度","并入自动切片","(以毫米计算)"], - ls_sngl_s: "单层", - ls_sngl_l: ["仅以特定层高","切割一层"], + sp_auto_l: ["启用生成的支撑","使用切片时的几何","支撑仅在","切片完成后出现"], // CNC 通用术语 cc_tool: "工具", - cc_offs_s: "偏置", - cc_offs_l: ["将工具中心从","所选路径偏置"], - cc_spnd_s: "转轴转速", - cc_spnd_l: ["转轴速","以 转/分钟 表示"], - cc_sovr_s: "步过", - cc_sovr_l: ["工具直径的","一部分"], - cc_sdwn_s: "降压", - cc_sdwn_l: ["每次通过后","降低的深度","以工作区单位表示","设为0以禁用"], - cc_feed_s: "输入率", - cc_feed_l: ["最大切割速率","以 工作区单位/分钟 表示"], - cc_plng_s: "切入率", - cc_plng_l: ["最大z轴速度","以 工作区单位/分钟 表示"], - cc_sngl_s: "仅选取线条", - cc_sngl_l: ["仅选中单侧边","不选中相邻多边形"], + cc_offs_s: "偏移", + cc_offs_l: ["将工具中心","从选定路径偏移"], + cc_spnd_s: "主轴转速", + cc_spnd_l: ["主轴速度(转/分钟)"], + cc_sovr_s: "步进", + cc_sovr_l: ["工具直径的分数(0到1)。大于0.49的值可能导致未切割区域或不良伪影。"], + cc_sovc_s: "宽步进", + cc_sovc_l: ["宽切除步进数"], + cc_sang_s: "步进角度", + cc_sang_l: ["车床轴向点之间的旋转(度)"], + cc_sdwn_s: "下刀", + cc_sdwn_l: ["每次通过的","下刀深度","单位:工作区单位","0表示禁用"], + cc_thru_s: "切透", + cc_thru_l: ["追踪底部下方的额外切割深度"], + cc_offd_s: "偏移", + cc_offd_l: ["当设置为任何非零值时覆盖默认偏移距离(即工具半径)"], + cc_feed_s: "进给速度", + cc_feed_l: ["最大切削速度","单位:工作区单位/分钟"], + cc_plng_s: "下刀速度", + cc_plng_l: ["最大Z轴速度","单位:工作区单位/分钟"], + cc_sngl_s: "仅选择线条", + cc_sngl_l: ["仅选择单边","而不是连接的多段线"], + cc_sele_s: "选择", + cc_sele_l: ["选择线条进行跟随","选择循环进行清除","选择表面进行挖槽"], // CNC 通用 - cc_menu: "限值", - cc_flip: "翻转", - cc_rapd_s: "xy输入", - cc_rapd_l: ["最大 xy 移动输入","以 工作区单位/分钟 表示"], - cc_rzpd_s: "z 输入", - cc_rzpd_l: ["最大 z 移动输入","以 工作区单位/分钟 表示"], + cc_menu: "限制", + cc_rapd_s: "XY进给", + cc_rapd_l: ["最大XY移动进给速度","单位:工作区单位/分钟"], + cc_rzpd_s: "Z进给", + cc_rzpd_l: ["最大Z移动进给速度","单位:工作区单位/分钟"], - cc_loff_s: "偏置", - cc_loff_l: ["实行水平通过所需","与库存面间的距离","以工作区单位表示"], + // CNC 调平 + cc_loff_s: "Z偏移", + cc_loff_l: ["距坯料表面的距离","单位:工作区单位"], + cc_lxyo_s: "XY偏移", + cc_lxyo_l: ["距零件边界的XY偏移,作为工具直径的分数(0 - 1.0)"], + cc_lsto_s: "坯料", + cc_lsto_l: ["使用坯料区域而不是零件区域"], // CNC 粗加工 cr_menu: "粗加工", - cr_lsto_s: "库存面距离", - cr_lsto_l: ["为最终通过留下的","距离垂直库存面的水平偏置","以工作区单位表示"], - cr_ease_s: "渐缓", - cr_ease_l: ["切入切割将","螺旋下降或","沿线性路径渐缓"], - cr_clrt_s: "清理顶面", - cr_clrt_l: ["在部件的边界区域","进行一次清理","清理位置为 z = 0"], - cr_clrp_s: "清理缺口", - cr_clrp_l: ["将口袋内侧磨平","而不是仅清理轮廓"], - cr_clrf_s: "清理表面", - cr_clrf_l: ["内插降压以","清除所有检测到的平坦区域"], + cr_lsto_s: "留余量", + cr_lsto_l: ["垂直面的水平偏移","精加工通过留下的坯料","单位:工作区单位"], + cr_lstz_s: "Z留余量", + cr_lstz_l: ["粗加工通过的垂直偏移(工作区单位)。最适合粗加工曲面。"], + cr_ease_s: "缓降", + cr_ease_l: ["下刀切削将","螺旋下降或沿","线性路径缓降"], + cr_clst_s: "清除坯料", + cr_clst_l: ["在索引模式下,清除整个坯料区域,而不仅仅是到零件周边"], + cr_clrt_s: "清除顶部", + cr_clrt_l: ["在零件的边界区域","进行清除通过","位于z = 0"], + cr_clrp_s: "清除空隙", + cr_clrp_l: ["铣出通过凹槽","而不仅仅是轮廓"], + cr_clrf_s: "清除面", + cr_clrf_l: ["插值下刀以","清除任何检测到的平面区域"], cr_olin_s: "仅内部", - cr_olin_l: ["限制对内部边界","的切割"], - - // CNC OUTLINE - co_menu: "轮廓", - co_dogb_s: "狗骨头", - co_dogb_l: ["在内角插入","狗骨头切割"], - co_wide_s: "宽切除", - co_wide_l: ["加宽外部切割路径","以对硬材料进行深切割"], - co_olin_s: "仅内部", - co_olin_l: ["限制对内部边界","的切割"], - co_olot_s: "仅外部", - co_olot_l: ["限制对外部边界","的切割","此处可以视作","投影轮廓"], - co_omit_s: "略过", - co_omit_l: "消除孔洞", - co_olen_s: "启用", - co_olen_l: "启用轮廓切割", + cr_olin_l: ["将切削限制在","零件边界内"], // CNC 轮廓 - cn_menu: "边界", + co_menu: "轮廓", + co_merg_s: "合并重叠", + co_merg_l: ["合并重叠线以防止过度切割到相邻实体"], + co_dogb_s: "骨切", + co_dogb_l: ["在内角插入","骨切"], + co_dogr_s: "反向骨切", + co_dogr_l: ["反转骨切方向"], + co_clrt_s: "清除顶部", + co_clrt_l: ["启用坯料时从坯料顶部开始切削"], + co_wide_s: "宽切除", + co_wide_l: ["加宽外部切除路径","用于硬质材料的深切"], + co_olin_s: "仅内部", + co_olin_l: ["将切削限制在","零件边界内"], + co_olot_s: "仅外部", + co_olot_l: ["将切削限制在","外部零件边界","可以视为","阴影轮廓"], + co_omit_s: "省略通孔", + co_omit_l: "消除通孔", + co_omvd_s: "省略凹槽", + co_omvd_l: "消除内部凹槽", + co_olen_s: "启用", + co_olen_l: "启用轮廓切削", + + // CNC 等高线 + cn_menu: "等高线", cf_angl_s: "最大角度", - cf_angl_l: ["比该数值更大的角度","将视为垂直"], - cf_curv_s: "仅弧面", - cf_curv_l: ["限制对弧面的","线性清理"], + cf_angl_l: ["导致角度大于此值的Z变化被视为垂直并从曲线中省略"], + cf_leav_s: "留余量", + cf_leav_l: ["零件表面上方留下的坯料量"], + cf_botm_s: "Z底部", + cf_botm_l: ["遵守Z底部限制"], + cf_curv_s: "仅曲线", + cf_curv_l: ["将线性清理","限制在曲面"], cf_olin_s: "仅内部", - cf_olin_l: ["限制对内部边界","的切割"], - cf_linx_s: "启用 y 通过", - cf_linx_l: "线性y轴修整", - cf_liny_s: "启用 x 通过", - cf_liny_l: "线性x轴修整", + cf_olin_l: ["将切削限制在","零件边界内"], + cf_linx_s: "启用Y通过", + cf_linx_l: "线性Y轴精加工", + cf_liny_s: "启用X通过", + cf_liny_l: "线性X轴精加工", // CNC 追踪 cu_menu: "追踪", cu_type_s: "类型", - cu_type_l: ["跟踪 = 工具头追踪线条","向右或向左 = 工具头","根据工具范围跟踪线条"], + cu_type_l: ["clear = 清除封闭线凹槽","follow = 工具尖端跟随线","封闭时有偏移选项"], + + // CNC 挖槽 + cp_xpnd_s: "扩展", + cp_xpnd_l: ["增大(+)或缩小(-)选定区域","等高线使用整个选定区域","非等高线默认为工具半径","单位:工作区单位"], + cp_smoo_s: "平滑", + cp_smoo_l: ["清理由倾斜壁引起的锯齿边缘。可以加速并改善详细几何的挖槽。如果切片时间过长或等高线看起来锯齿状,建议从1左右的值开始"], + cp_foll_s: "选择", + cp_foll_l: ["曲率选择限制(度)。接近0的值将限制选择到更平坦的表面"], + cp_refi_s: "细化", + cp_refi_l: ["对等高多段线执行的细化通过次数。旨在解决由面几何引起的Z增量锯齿,而平滑处理XY。对于具有显著Z移动的轻柔等高几何,大于10的值效果良好。"], + cp_cont_s: "等高线", + cp_cont_l: ["忽略内部空隙和特征"], + cp_engr_s: "雕刻", + cp_engr_l: ["设置围绕选定区域周边的单次通过。也适用于3D激光标记"], + cp_outl_s: "仅轮廓", + cp_outl_l: ["忽略内部空隙和特征"], // CNC 钻孔 cd_menu: "钻孔", cd_axis: "轴", cd_points: "点", - cd_plpr_s: "切入 每", - cd_plpr_l: ["两次驻留间的","最深切入","以工作区单位表示","设为0以禁用"], + // cd_plpr_s: "每次下刀", + // cd_plpr_l: ["驻留期之间的最大下刀","单位:工作区单位","0表示禁用"], cd_dwll_s: "驻留时间", - cd_dwll_l: ["两次切入铣削间","的驻留时间","以微秒表示"], + cd_dwll_l: ["下刀之间的","驻留时间","单位:毫秒"], cd_lift_s: "钻头提升", - cd_lift_l: ["驻留时间后","两次切入间的提升距离","以工作区单位表示","设为0以禁用"], - cd_regi_s: "定位", - cd_regi_l: ["为双面部件","钻定位孔","独立于钻孔启用","但使用同样的","工具和设置"], + cd_lift_l: ["驻留期后","下刀之间的提升","单位:工作区单位","0表示禁用"], + cd_thru_s: "Z延伸", + cd_thru_l: ["向下延伸切削通过坯料","单位:工作区单位"], + cd_dtru_s: "钻透", + cd_dtru_l: ["零件底部下方的额外钻孔深度","覆盖全局Z穿透","0表示禁用"], + cd_mark_s: "标记", + cd_mark_l: ["仅标记孔,不钻出","下刀设置用于","确定标记深度"], + cd_ftop_s: "从坯料顶部", + cd_ftop_l: ["从坯料顶部钻孔","而不是零件表面"], + cd_prcn_s: "精度", + cd_prcn_l: ["搜索孔的","切片之间的距离","单位:工作区单位","较低则较慢并","使用更多内存","0 = 仅平面"], - // CNC CUTOUT TABS - ct_menu: "标签", + cd_seli_l: ["单独选择孔","进行钻孔"], + cd_sela_s: "选择匹配直径", + cd_sela_l: ["选择所有匹配", "所选工具直径的孔"], + + //CNC 配准 + cd_regi_s: "配准", + cd_regi_l: ["为双面零件","钻配准孔","独立于启用","钻孔但使用相同","工具和设置"], + cd_rego_s: "零件偏移", + cd_rego_l: ["孔中心距零件","边界框的偏移","单位:工作区单位"], + + // CNC 螺旋刀路 + ch_menu: "螺旋", + ch_sdwn_s: "下刀(螺距)", + ch_sdwn_l: ["Z距离","每转","单位:工作区单位","(每单位螺纹数的倒数)", "0表示禁用"], + ch_fsta_s: "强制起始角", + ch_fsta_l: ["覆盖起始角","默认为最接近工具的点"], + ch_stra_s: "起始角", + ch_stra_l: ["螺旋起始角","相对于+x轴逆时针方向的度数"], + ch_selc_l: ["选择圆柱面", "太小的内孔","将被忽略。"], + ch_fini_s: "底部精加工通过", + ch_fini_l: ["在螺旋底部追踪圆","用于孔清理"], + ch_entr_s: "从中心进入", + ch_entr_l: ["从圆柱中心开始切削","水平轻柔弧形进入", "而不是下刀"], + ch_ento_s: "中心进入偏移", + ch_ento_l: ["曲线进入的路径偏移","螺纹铣削时通常为螺纹深度","单位:工作区单位","0表示线性进入"], + ch_rvrs_s: "反向", + ch_rvrs_l: ["反转螺旋Z轴方向","勾选时从低Z到高Z","用于螺纹铣削","不推荐用于其他操作"], + ch_clkw_s: "顺时针", + ch_clkw_l: ["反转围绕圆柱的螺旋旋转","勾选时为顺时针"], + + // CNC 翻转 + cf_menu: "翻转", + cf_nvrt_s: "Z底部", + cf_nvrt_l: "反转Z底部设置以跟随坯料", + + // CNC 索引轴 + ci_degr_s: "度数", + ci_degr_l: "旋转A(索引)轴的度数", + ci_abso_s: "绝对", + ci_abso_l: "度数旋转是绝对的", + ci_face_s: "面", + ci_face_l: "选择要朝上旋转的面", + ci_line_s: "线性", + ci_line_l: "沿X进行线性通过,然后旋转Y", + ci_laso_s: "起始偏移", + ci_laso_l: ["距零件左侧的X偏移。负值在零件外部。单位:工作区单位"], + ci_laeo_s: "结束偏移", + ci_laeo_l: ["距零件右侧的X偏移。负值在零件外部。单位:工作区单位"], + + // CNC 激光开/关操作(Carvera) + cl_powr_s: "功率", + cl_powr_l: "激光功率从0到1.0", + cl_adap_s: "自适应", + cl_adap_l: "根据Z高度使用自适应功率", + cl_adrp_s: "重复", + cl_adrp_l: "使用给定波段应用Z高度的模数以制作重复图案", + cl_flat_s: "平整", + cl_flat_l: "将输出平整到给定的Z高度", + cl_flaz_s: "平整高度", + cl_flaz_l: ["将输出平整到此Z高度", "单位:工作区单位"], + cl_minp_s: "Z最小功率", + cl_minp_l: ["Z波段最低部分的功率设置。可能高于或低于Z波段的另一端。"], + cl_maxp_s: "Z最大功率", + cl_maxp_l: ["Z波段最高部分的功率设置。可能高于或低于Z波段的另一端。"], + cl_minz_s: "最小Z高度", + cl_minz_l: ["最低Z波段位置"], + cl_maxz_s: "最大Z高度", + cl_maxz_l: ["最高Z波段位置。设置为0时,使用工作区的最高Z点"], + + // CNC 切除片 + ct_menu: "连接片", ct_angl_s: "角度", - ct_angl_l: ["标签间隔的起始角度","度数 (0-360)"], + ct_angl_l: ["连接片间距的起始角度","单位:度(0-360)"], ct_numb_s: "数量", - ct_numb_l: ["使用的标签数","将在部件周围","均匀分布"], + ct_numb_l: ["要使用的连接片数量","将在零件周围","均匀分布"], ct_wdth_s: "宽度", - ct_wdth_l: "以工作区单位表示的宽度", + ct_wdth_l: "工作区单位的宽度", ct_hght_s: "高度", - ct_hght_l: "以工作区单位表示的宽度", + ct_hght_l: "工作区单位的高度", ct_dpth_s: "深度", - ct_dpth_l: ["以工作区单位表示的","标签从部件表面","投射的深度"], - ct_midl_s: "中位线", - ct_midl_l: ["处理双面部件时","使用标签的中位线","而非z底部"], + ct_dpth_l: ["连接片从零件表面","突出的工作区单位距离"], + ct_midl_s: "中线", + ct_midl_l: ["使用连接片的中线","而不是Z底部","用于双面工作"], ct_nabl_s: "自动", - ct_nabl_l: ["使用数量和角度偏置","自动生成从部件中心","投影的径向标签"], + ct_nabl_l: ["自动生成径向连接片","从零件中心投影","使用数量和角度偏移"], // 输出 ou_menu: "输出", - // 激光刀 - dk_menu: "刀", - dk_dpth_s: "切割深度", - dk_dpth_l: ["最终切割深度","毫米数"], - dk_pass_s: "切割次数", - dk_pass_l: ["实现切割深度的","切割次数"], - dk_offs_s: "刀尖偏置", - dk_offs_l: ["刀尖至工具中心","的距离","毫米数"], + // 激光切片 + ls_offs_s: "偏移/切缝", + ls_offs_l: ["切割路径中心与","剩余材料边缘之间的距离","单位:毫米"], + ls_lahi_s: "切片高度", + ls_lahi_l: ["层高","单位:毫米","0 = 自动/检测"], + ls_lahm_s: "切片最小值", + ls_lahm_l: ["层高最小值","将合并低于","此厚度的自动切片","单位:毫米"], + ls_sngl_s: "单层切片", + ls_sngl_l: ["仅在指定层高","执行一次切片"], - // 输出 激光 + // 激光刀 + dk_menu: "拖刀", + dk_dpth_s: "切割深度", + dk_dpth_l: ["最终切割深度","单位:毫米"], + dk_pass_s: "切割通过", + dk_pass_l: ["到达切割深度的","通过次数"], + dk_offs_s: "刀尖偏移", + dk_offs_l: ["刀片尖端到","工具中心的距离","单位:毫米"], + + // 线切割 + we_omit_s: "省略内部", + we_omit_l: "省略内部多边形", + + // 激光输出 ou_spac_s: "间距", - ou_spac_l: ["层输出间距","毫米数"], - ou_scal_s: "倍增", - ou_scal_l: "乘数 (0.1至100)", + ou_spac_l: ["层输出之间的距离","单位:毫米"], + ou_scal_s: "缩放", + ou_scal_l: "乘数(0.1到100)", ou_powr_s: "功率", - ou_powr_l: ["0 - 100","代表%"], + ou_powr_l: ["0 - 100","表示%"], ou_sped_s: "速度", - ou_sped_l: "毫米/分钟", + ou_sped_l: "毫米/秒", ou_mrgd_s: "合并", - ou_mrgd_l: ["合并所有层","并用色码表示","层叠深度"], - ou_grpd_s: "组合", - ou_grpd_l: ["将各层保留为","统一分组","而不是独立的","多边形"], + ou_mrgd_l: ["使用颜色编码合并所有层","以表示堆叠深度"], + ou_grpd_s: "分组", + ou_grpd_l: ["将每一层保留为","统一分组","而不是分离的","多边形"], ou_layr_s: "层顺序", ou_layr_l: ["输出层顺序","从右上到","左下"], - ou_layo_s: "层色", - ou_layo_l: ["被合并覆盖后的","各Z系数","输出层的颜色"], - ou_drkn_s: "拖动激光刀", - ou_drkn_l: ["在gcode中启用","拖动输出","切割半径","藉由切入","加到边角上"], + ou_layo_s: "层颜色", + ou_layo_l: ["每个Z索引的","输出层颜色","被合并覆盖"], + ou_lays_s: "层标记", + ou_lays_l: ["标记层以进行堆叠。上层将以不同颜色输出,激光可以用较低功率标记。启用层分组。"], + ou_drkn_s: "拖刀", + ou_drkn_l: ["在gcode中启用","拖刀输出","切割半径添加到","带有切割下通过的角"], + ou_stak_s: "3D堆叠", + ou_stak_l: ["输出是2D路径的3D堆叠,而不是在2D中平铺层"], + ou_maxp_s: "最大功率", + ou_maxp_l: ["gcode中的最大功率值。设置中的功率%将从0缩放到此值"], + ou_inch_s: "英制", + ou_inch_l: ["以英寸为单位输出值"], + ou_shap_s: "Shaper工具", + ou_shap_l: ["使用Shaper Tool自定义属性注释SVG"], // 输出 FDM - ou_nozl_s: "喷嘴加热温度", + ou_nozl_s: "喷嘴温度", ou_nozl_l: "摄氏度", - ou_bedd_s: "热床温度", + ou_bedd_s: "平台温度", ou_bedd_l: "摄氏度", ou_feed_s: "打印速度", - ou_feed_l: ["最大打印速度","毫米/分钟"], - ou_fini_s: "完成速度", - ou_fini_l: ["最外壳速度","毫米/分钟"], + ou_feed_l: ["最大打印速度","设置为0使用默认值","单位:毫米/秒"], + ou_fini_s: "精加工速度", + ou_fini_l: ["最外层外壳速度","桥接/平面实体层","设置为0使用默认值","单位:毫米/秒"], ou_move_s: "移动速度", - ou_move_l: ["不打印时的移动速度","毫米/分钟","0 = 启用G0动作"], - ou_shml_s: "外壳参数", - ou_flml_s: "实体参数", - ou_spml_s: "填充参数", - ou_exml_l: ["喷嘴乘数","0.0 - 2.0"], - ou_fans_s: "风扇速度", + ou_move_l: ["非打印移动速度","单位:毫米/秒","0 = 启用G0移动"], + ou_shml_s: "外壳系数", + ou_flml_s: "实体系数", + ou_spml_s: "填充系数", + ou_exml_l: ["挤出乘数","0.0 - 2.0"], + ou_fanl_s: "风扇启动层", + ou_fanl_l: ["启动风扇的层编号","层从0开始"], + ou_fans_s: "风扇启动速度", ou_fans_l: "0 - 255", + ou_layt_s: "最小层时间", + ou_layt_l: ["最小允许层打印时间(秒)。如果层会在更少秒内完成,打印将减速。","0 = 禁用"], // 输出 CAM - ou_toll_s: "容错", - ou_toll_l: ["表面精确度","以工作区单位表示","数值越小速度越慢","且占用更多内存","0 = 基于动画偏好","自动计算"], - ou_zanc_s: "z 锚点", - ou_zanc_l: ["控制当库存Z超过部件Z时","的部件位置"], - ou_ztof_s: "z 偏置", - ou_ztof_l: ["以工作区单位表示的","Z锚点偏置","在锚点位于中央时","不产生影响"], - ou_zbot_s: "z 底部", - ou_zbot_l: ["用于限制切割深度的","距离部件底部的偏置","以工作区单位表示"], - ou_zclr_s: "z 安全区", - ou_zclr_l: ["从部件顶部的","安全移动区偏置","以工作区单位表示"], - ou_ztru_s: "z 穿透", - ou_ztru_l: ["向下延伸切口","以工作区单位表示"], + ou_toll_s: "精度", + ou_toll_l: ["表面精度","单位:工作区单位","较低则较慢并","使用更多内存","0 = 基于动画偏好","自动"], + ou_flat_s: "平整度", + ou_flat_l: ["两个相邻点被视为共线的增量Z。0 = 使用公差计算"], + ou_redu_s: "简化", + ou_redu_l: ["每个精度单位要跳过的轴步数。更高的精度可能需要简化以产生合理的文件大小。从0开始并以1的增量测试。"], + ou_brdg_s: "桥接", + ou_brdg_l: ["曲线区域之间","用切削桥接的平面距离"], + ou_zanc_s: "Z锚点", + ou_zanc_l: ["当坯料Z超过零件Z时","控制零件的位置"], + ou_ztof_s: "Z偏移", + ou_ztof_l: ["偏移Z锚点","单位:工作区单位"], + ou_ztop_s: "Z顶部", + ou_ztop_l: ["距坯料底部的偏移","以设置切削深度的起点","单位:工作区单位","* 钻孔/等高线忽略此项 *"], + ou_zbot_s: "Z底部", + ou_zbot_l: ["距坯料底部的偏移","以限制切削深度","单位:工作区单位"], + ou_zclr_s: "Z间隙", + ou_zclr_l: ["距零件顶部的","安全移动偏移","单位:工作区单位"], + ou_ztru_s: "Z穿透", + ou_ztru_l: ["向下延伸切除通过","单位:工作区单位"], ou_conv_s: "传统", - ou_conv_l: ["铣削方向","取消勾选以设为‘爬升’"], + ou_conv_l: ["铣削方向","取消勾选为'爬升'"], ou_depf_s: "深度优先", - ou_depf_l: ["用深度优先","优化腔铣"], + ou_depf_l: ["以深度优先","优化挖槽切削"], + ou_inrf_s: "内部优先", + ou_inrf_l: ["始终从内到外切削"], + ou_toin_s: "工具初始化", + ou_toin_l: "在第一个操作时添加换刀。禁用时,gcode假定第一个工具已加载并探测偏移", + ou_forz_s: "强制Z最大值", + ou_forz_l: "凹槽之间的所有移动将到达Z最大值(坯料上方)。如果在挖槽操作之前未执行粗加工操作,通常需要这样做。", + ou_z1st_s: "首次Z最大值", + ou_z1st_l: "作业中的第一次移动将是到Z最大值(坯料上方的移动距离)", + ou_feng_s: "啮合系数", + ou_feng_l: "当立铣刀在新切削中完全啮合时的速度缩放(0.1-1)。当立铣刀啮合不足时,步进切削相对于输出速度以系数1运行。通常这与粗加工或任何带步进的操作有关。", + ou_eang_s: "缓降角度", + ou_eang_l: "缓降的下降角度(度)", - // CAM STOCK - cs_menu: "库存", + // CAM 坯料 + cs_menu: "坯料", cs_wdth_s: "宽度", - cs_wdth_l: ["以工作区单位表示的宽度 (x)","0 默认为部件尺寸"], + cs_wdth_l: ["宽度(x)(工作区单位)","0默认为零件尺寸"], cs_dpth_s: "深度", - cs_dpth_l: ["以工作区单位表示的深度 (y)","0 默认为部件尺寸"], + cs_dpth_l: ["深度(y)(工作区单位)","0默认为零件尺寸"], cs_hght_s: "高度", - cs_hght_l: ["以工作区单位表示的高度 (z) ","0 默认为部件尺寸"], - cs_offs_s: "偏置", - cs_offs_l: ["用宽度、深度、高度","作为从平台最大部件","尺寸的偏置值"], - cs_clip_s: "夹到", - cs_clip_l: ["粗加工和轮廓","将切割路径夹到","定义的库存"], + cs_hght_l: ["高度(z)(工作区单位)","0默认为零件尺寸"], + cs_offs_s: "偏移", + cs_offs_l: ["将宽度、深度、高度","用作距平台上","最大零件尺寸的偏移"], + cs_clip_s: "裁剪到", + cs_clip_l: ["粗加工和轮廓","将切削路径裁剪","到定义的坯料"], + cs_ishg_s: "显示网格", + cs_ishg_l: ["在索引模式下显示平台网格"], + cs_indx_s: "索引", + cs_indx_l: ["坯料安装到旋转分度器"], cs_offe_s: "启用", - cs_offe_l: "启用铣削库存", + cs_offe_l: "启用铣削坯料", - // 零点 (CAM & 激光) - or_bnds_s: "零点边界", - or_bnds_l: ["零点相对于","所有对象的边界"], - or_cntr_s: "原始零点", - or_cntr_l: "以中心为零点", - or_topp_s: "原始顶部", - or_topp_l: "以对象顶部为原始顶部", + // 原点(CAM和激光) + or_bnds_s: "原点边界", + or_bnds_l: ["原点相对于","所有对象的边界"], + or_cntr_s: "原点中心", + or_cntr_l: "原点从中心引用", + or_topp_s: "原点顶部", + or_topp_l: "原点从对象顶部引用", + or_offx_s: "原点X偏移", + or_offx_l: "原点X偏移", + or_offy_s: "原点Y偏移", + or_offy_l: "原点Y偏移", + + // CAM 原点 + co_menu: "原点", + co_offx_s: "X偏移", + co_offx_l: ["沿X轴偏移原点","单位:工作区单位"], + co_offy_s: "Y偏移", + co_offt_l: ["沿Y轴偏移原点","单位:工作区单位"], + co_offz_s: "Z偏移", + co_offz_l: ["沿Z轴偏移原点","单位:工作区单位"], // FDM 高级 ad_menu: "专家", ad_rdst_s: "回抽距离", - ad_rdst_l: ["长动作线料回抽量","以毫米表示"], - ad_rrat_s: "回抽速率", - ad_rrat_l: ["线料回抽速率","以 毫米/秒 表示"], - ad_rdwl_s: "启用驻留", - ad_wpln_s: "回抽扫动", - ad_wpln_l: ["回抽后的","非打印移动","毫米数"], - ad_rdwl_l: ["重新激活线料和动作","的间隔","毫秒数"], - ad_scst_s: "外壳滑过", - ad_scst_l: ["外围外壳","非打印端","毫米数"], - ad_msol_s: "最小固体", - ad_msol_l: ["维持固体所需的","最小区域(平方毫米)","必须>0.1"], + ad_rdst_l: ["长移动时回抽","耗材的量。单位:毫米"], + ad_rrat_s: "回抽速度", + ad_rrat_l: ["耗材回抽速度","单位:毫米/秒"], + ad_rdwl_s: "啮合驻留", + ad_wpln_s: "回抽擦拭", + ad_wpln_l: ["回抽后的","非打印移动","单位:毫米"], + ad_rdwl_l: ["重新啮合耗材","与移动之间的时间","单位:毫秒"], + ad_scst_s: "外壳滑行", + ad_scst_l: ["周边外壳的","非打印结束","单位:毫米"], + ad_msol_s: "区域过滤器", + ad_msol_l: ["最小面积(平方毫米)","小于此值的桥接和平面将被剔除"], ad_mins_s: "最小速度", - ad_mins_l: ["短距离的","最小速度"], + ad_mins_l: ["短段的","最小速度"], + ad_maxf_s: "最大流速", + ad_maxf_l: ["此打印头和耗材支持的最大体积流速","单位:立方毫米/秒"], + ad_scar_s: "斜接长度", + ad_scar_l: ["斜接的缓升长度。禁用弧检测","0 = 禁用"], ad_spol_s: "短路径", - ad_spol_l: ["比这更短的多边形","的打印速度将","降低到最小速度","以毫米表示"], - ad_arct_s: "拱形容忍", - ad_arct_l: ["将多面线转换为拱形","配对拱形点时的","中心漂移容忍度","采用约0.15的数值","数值以毫米表示","设为0以禁用"], - ad_zhop_s: "z 跳跃距离", - ad_zhop_l: ["回抽过程中","z的提升高度","毫米数","设为0以禁用"], + ad_spol_l: ["短于此值的多边形","将其打印速度","缩放到最小速度","单位:毫米"], + ad_arct_s: "弧公差", + ad_arct_l: ["将刻面线转换为弧","匹配弧点时的","中心点漂移公差","考虑0.15左右的值","单位:毫米","0或斜接禁用此功能"], + ad_zhop_s: "Z跳跃距离", + ad_zhop_l: ["回抽移动时","抬高Z的量","单位:毫米","0表示禁用"], ad_abkl_s: "防反冲", - ad_abkl_l: ["为取得更好的平面效果","使用微动作以抵消","固体层输出中的反冲","以毫米表示","设为0以禁用","若您的固件包含M425","请将脚本置入gcode header","并将数值保留为0"], - ad_lret_s: "层回抽", - ad_lret_l: ["在层与层之间","强制回收线料"], - ad_play_s: "层抛光", - ad_play_l: ["一次性给指定的","#层抛光"], + ad_abkl_l: ["为了更好的平面表面效果","使用微移动来抵消","实体层输出中的反冲","单位:毫米","0表示禁用","如果您的固件有M425","将其放入gcode头部","并将此值保留为0"], + ad_lbir_s: "传送带优先", + ad_lbir_l: ["始终在任何其他外壳之前打印接触传送带的外壳。基于广泛测试,这不再是推荐设置。"], + ad_altr_s: "交替", + ad_altr_l: ["交替外壳绕组顺序","顺时针/逆时针","可能减少薄区域的翘曲","并有助于传送带边缘附着"], + ad_zint_s: "交错Z", + ad_zint_l: ["用奇数层外壳交错Z高度"], + ad_lret_s: "强制回抽", + ad_lret_l: ["强制层之间回抽耗材"], + ad_agap_s: "避开间隙", + ad_agap_l: ["尽可能绕过间隙","而不是执行回抽"], + ad_play_s: "抛光层", + ad_play_l: ["一次抛光最多","指定数量的层"], ad_pspd_s: "抛光速度", - ad_pspd_l: ["抛光速度","以毫米/分钟表示"], + ad_pspd_l: ["抛光速度","单位:毫米/秒"], + ad_purg_s: "清洗塔", + ad_purg_l: ["多挤出机设置的","清洗塔面积(平方毫米)","0 = 禁用"], // CAM 专家 cx_fast_s: "跳过阴影", - cx_fast_l: ["禁用悬挂检测","可提升速度并减少","复杂模型的内存占用","但不与悬挂兼容","如果上阴影时切片悬浮","请尝试启用"], + cx_fast_l: ["禁用悬垂检测","对于复杂模型可能更快","并使用更少内存","但对悬垂会失败","如果切片在阴影期间","挂起,请尝试启用"], + cx_true_s: "真实阴影", + cx_true_l: ["计算正确的阴影","会更慢但为","复杂零件产生更好的切削"], + cx_arce_s: "弧输出", + cx_arce_l: ["实验性:启用路径到弧转换"], + cx_arct_s: "弧公差", + cx_arct_l: ["将圆形路径转换为弧;","匹配弧点时的","中心点漂移公差","考虑0.15左右的值","单位:毫米,或0.006英寸;","高值可能导致","意外行为","0表示禁用"], + cx_arcr_s: "弧分辨率", + cx_arcr_l: ["弧中可接受的","线方向变化","考虑5左右的值","高值可能导致","意外行为",], // FDM GCODE ag_menu: "gcode", - ag_nozl_s: "喷头", - ag_nozl_l: "选择输出喷口或喷头", - ag_peel_s: "防翘边", - ag_peel_l: ["从打印带Z位置开始","阶段性将打印物从打印带上取下","然后放回以去除黏连","并防止滚动瑕疵"], - ag_paws_s: "暂停层", - ag_paws_l: ["用逗号隔开的层","在各层前添加暂停指令"], - ag_loop_s: "循环层", - ag_loop_l: ["使用以下格式的层重复范围","首层-末层-次数,首层-末层-次数,……","忽略次数 = 1"], + ag_nozl_s: "喷嘴", + ag_nozl_l: "选择输出喷嘴或打印头", + ag_peel_s: "剥离保护", + ag_peel_l: ["从此传送带Z位置开始","定期将打印件滚离","并滚回传送带以松开","并防止滚动偏移"], + // ag_paws_s: "暂停层", + // ag_paws_l: ["逗号分隔的层列表","在这些层之前注入暂停命令"], + // ag_loop_s: "循环层", + // ag_loop_l: ["要重复的层范围,格式为","首层-末层-次数,首层-末层-次数,...","省略次数 = 1"], + ag_loop_s: "循环次数", + ag_loop_l: ["重复选定范围的次数","或如果没有范围则为","整个打印"], // SLA 菜单 sa_menu: "切片", sa_lahe_s: "层高", - sa_lahe_l: ["层高","毫米数"], - sa_shel_s: "空壳", - sa_shel_l: ["壳厚毫米数","为层高倍数","0为实心(禁用)"], - sa_otop_s: "打开顶部", - sa_otop_l: ["如果外壳已启用","则形成开放顶部"], - sa_obas_s: "打开基座", - sa_obas_l: ["若外壳已启用","则形成开放基座","支撑将禁用该功能"], + sa_lahe_l: ["层高","单位:毫米"], + sa_shel_s: "空心外壳", + sa_shel_l: ["外壳厚度(毫米)","使用层高的倍数","0表示实心(禁用)"], + sa_otop_s: "顶部开口", + sa_otop_l: ["如果启用外壳","结果是顶部开口"], + sa_obas_s: "底部开口", + sa_obas_l: ["如果启用外壳","结果是底部开口","支撑时禁用"], sa_layr_m: "层", - sa_lton_s: "曝光时间", - sa_lton_l: ["层曝光","秒数"], - sa_ltof_s: "灯灭时间", - sa_ltof_l: ["层灯灭","秒数"], + sa_lton_s: "光照时间", + sa_lton_l: ["层光照","时间(秒)"], + sa_ltof_s: "光熄时间", + sa_ltof_l: ["层光熄","时间(秒)"], sa_pldi_s: "剥离距离", - sa_pldi_l: ["剥离距离","毫米数"], - sa_pllr_s: "剥离提升速率", - sa_pllr_l: ["剥离提升速率","以 毫米/秒 表示"], - sa_pldr_s: "剥离跌落速度", - sa_pldr_l: ["剥离跌落速度","以 毫米/秒 表示"], + sa_pldi_l: ["剥离距离","单位:毫米"], + sa_pllr_s: "剥离提升速度", + sa_pllr_l: ["剥离提升速度","单位:毫米/秒"], + sa_pldr_s: "剥离下降速度", + sa_pldr_l: ["剥离下降速度","单位:毫米/秒"], - sa_base_m: "基座", + sa_base_m: "基础", sa_balc_s: "层数", - sa_balc_l: ["底层","层数"], - sa_bltn_l: ["底层曝光","秒数"], - sa_bltf_l: ["底层灯灭","秒数"], + sa_balc_l: ["基础层数"], + sa_bltn_l: ["基础层光照","时间(秒)"], + sa_bltf_l: ["基础层光熄","时间(秒)"], sa_infl_m: "填充", sa_ifdn_s: "密度", - sa_ifdn_l: ["要求外壳的","填充百分比","0 = 禁用","有效范围 0.0 - 1.0"], + sa_ifdn_l: ["填充百分比","需要外壳","0 = 禁用","有效范围0.0 - 1.0"], sa_iflw_s: "线宽", - sa_iflw_l: ["剖面线宽度","毫米数"], + sa_iflw_l: ["阴影线宽","单位:毫米"], sa_supp_m: "支撑", - sa_slyr_s: "基座层", - sa_slyr_l: ["基座支撑层","数值范围0-10"], - sa_slgp_s: "空隙层", - sa_slgp_l: ["支架和物品底部","间的层数"], + sa_slyr_s: "基础层", + sa_slyr_l: ["基础支撑层","值范围0-10"], + sa_slgp_s: "间隙层", + sa_slgp_l: ["底座与对象底部","之间的层数"], sa_sldn_s: "密度", - sa_sldn_l: ["用于计算","支撑柱的数量","0.0-1.0 (0 = 禁用)"], + sa_sldn_l: ["用于计算","支撑柱数量","0.0-1.0(0 = 禁用)"], sa_slsz_s: "尺寸", - sa_slsz_l: ["支撑柱的","最大尺寸","毫米数"], + sa_slsz_l: ["支撑柱的","最大尺寸","单位:毫米"], sa_slpt_s: "点", - sa_slpt_l: ["各支撑柱","内的点数","以毫米表示"], + sa_slpt_l: ["每个支撑柱中的","点数","单位:毫米"], sl_slen_l: "启用支撑", sa_outp_m: "输出", - sa_opzo_s: "z 偏置", - sa_opzo_l: ["z 层偏置","一般始终保持在0.0","0.0-1.0 毫米"], + sa_opzo_s: "Z偏移", + sa_opzo_l: ["Z层偏移","几乎总是0.0","0.0-1.0(毫米)"], sa_opaa_s: "抗锯齿", - sa_opaa_l: ["启动抗锯齿","文件体积增加","可能模糊细节"] + sa_opaa_l: ["启用抗锯齿","产生更大的文件","可能模糊细节"] }; From 68f7a5495c9a363d222dee190bb3c9d7a8f0e9b9 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 14:08:13 -0500 Subject: [PATCH 106/151] add missing quit key to lang map --- web/kiri/index.css | 4 ++++ web/kiri/index.html | 2 +- web/kiri/lang/da.js | 1 + web/kiri/lang/de-de.js | 1 + web/kiri/lang/en.js | 1 + web/kiri/lang/es-es.js | 1 + web/kiri/lang/fr.js | 1 + web/kiri/lang/pl-pl.js | 1 + web/kiri/lang/pt.js | 1 + web/kiri/lang/zh.js | 1 + 10 files changed, 13 insertions(+), 1 deletion(-) diff --git a/web/kiri/index.css b/web/kiri/index.css index c7aa6b49..2f40e2d4 100644 --- a/web/kiri/index.css +++ b/web/kiri/index.css @@ -223,6 +223,10 @@ details[open] summary::after { border-radius: 3px; } +.nocap { + text-transform: none !important; +} + /* container for entire page / app */ #app { position: fixed; diff --git a/web/kiri/index.html b/web/kiri/index.html index c9dd5b55..fccf01b7 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -221,7 +221,7 @@
english
español
français
-
polskie
+
polski
português
diff --git a/web/kiri/lang/da.js b/web/kiri/lang/da.js index 2c597c01..80733a28 100644 --- a/web/kiri/lang/da.js +++ b/web/kiri/lang/da.js @@ -40,6 +40,7 @@ self.lang['da-dk'] = { profs: "profiler", // right menu "profiles" prefs: "præferencer", // left menu "preferences" preview: "forhåndsvisning", + quit: "afslut", // quit/exit the application (electron) recent: "nylig", rename: "omdøb", render: "render", // left render pop menu diff --git a/web/kiri/lang/de-de.js b/web/kiri/lang/de-de.js index 25a1aca0..82e4f40a 100644 --- a/web/kiri/lang/de-de.js +++ b/web/kiri/lang/de-de.js @@ -40,6 +40,7 @@ self.lang['de-de'] = { profs: "Profile", // right menu "profiles" prefs: "Einstellungen", // right menu "preferences" preview: "Vorschau", + quit: "Beenden", // quit/exit the application (electron) recent: "Letzte Objekte", rename: "Umbenennen", render: "Rendern", // left render pop menu diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index cfba031e..22c2f64e 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -40,6 +40,7 @@ self.lang['en-us'] = { profs: "profiles", // right menu "profiles" prefs: "preferences", // right menu "preferences" preview: "preview", + quit: "quit", // quit/exit the application (electron) recent: "recent", rename: "rename", render: "render", // left render pop menu diff --git a/web/kiri/lang/es-es.js b/web/kiri/lang/es-es.js index 86eedcd3..ec71ee71 100644 --- a/web/kiri/lang/es-es.js +++ b/web/kiri/lang/es-es.js @@ -40,6 +40,7 @@ self.lang['es-es'] = { profs: "perfiles", // right menu "profiles" prefs: "preferencias", // right menu "preferences" preview: "vista previa", + quit: "salir", // quit/exit the application (electron) recent: "reciente", rename: "renombrar", render: "renderizar", // left render pop menu diff --git a/web/kiri/lang/fr.js b/web/kiri/lang/fr.js index fc0ead11..007dc5d1 100644 --- a/web/kiri/lang/fr.js +++ b/web/kiri/lang/fr.js @@ -40,6 +40,7 @@ self.lang['fr-fr'] = { profs: "profils", // right menu "profiles" prefs: "préférences", // right menu "preferences" preview: "prévisualiser", + quit: "quitter", // quit/exit the application (electron) recent: "récent", rename: "renommer", render: "rendu", // left render pop menu diff --git a/web/kiri/lang/pl-pl.js b/web/kiri/lang/pl-pl.js index 84dbf478..7699a4e5 100644 --- a/web/kiri/lang/pl-pl.js +++ b/web/kiri/lang/pl-pl.js @@ -39,6 +39,7 @@ self.lang['pl-pl'] = { profs: "profile", // right menu "profiles" prefs: "preferencje", // right menu "preferences" preview: "podgląd", + quit: "zakończ", // quit/exit the application (electron) recent: "ostatnie", rename: "zmień nazwę", render: "renderuj", // left render pop menu diff --git a/web/kiri/lang/pt.js b/web/kiri/lang/pt.js index dee8ec8c..a30870d1 100644 --- a/web/kiri/lang/pt.js +++ b/web/kiri/lang/pt.js @@ -40,6 +40,7 @@ self.lang['pt-pt'] = { profs: "perfis", // right menu "profiles" prefs: "preferências", // right menu "preferences" preview: "pré-visualizar", + quit: "sair", // quit/exit the application (electron) recent: "recente", rename: "renomear", render: "renderizar", // left render pop menu diff --git a/web/kiri/lang/zh.js b/web/kiri/lang/zh.js index 2046488e..1c4d4529 100644 --- a/web/kiri/lang/zh.js +++ b/web/kiri/lang/zh.js @@ -39,6 +39,7 @@ self.lang['zh'] = { profs: "配置", // 右侧菜单"配置" prefs: "偏好", // 右侧菜单"偏好设置" preview: "预览", + quit: "退出", // quit/exit the application (electron) recent: "最近", rename: "重命名", render: "渲染", // 左侧渲染弹出菜单 From 52d62137d4473752921b7a9721e1e0e3d35d1f98 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 15:21:14 -0500 Subject: [PATCH 107/151] add more missing lang keys, fix bambu mod load order, workflow dep --- .github/workflows/prod-test.yml | 2 +- mods/bambu/bambu.js | 2 +- package.json | 3 +- src/kiri/mode/cam/init-menu.js | 2 +- web/kiri/index.html | 52 ++++++++++++++++----------------- web/kiri/lang/da.js | 33 +++++++++++++++++++-- web/kiri/lang/de-de.js | 33 +++++++++++++++++++-- web/kiri/lang/en.js | 33 +++++++++++++++++++-- web/kiri/lang/es-es.js | 33 +++++++++++++++++++-- web/kiri/lang/fr.js | 33 +++++++++++++++++++-- web/kiri/lang/pl-pl.js | 33 +++++++++++++++++++-- web/kiri/lang/pt.js | 33 +++++++++++++++++++-- web/kiri/lang/zh.js | 34 +++++++++++++++++++-- 13 files changed, 279 insertions(+), 47 deletions(-) diff --git a/.github/workflows/prod-test.yml b/.github/workflows/prod-test.yml index a94ec631..aba0391f 100644 --- a/.github/workflows/prod-test.yml +++ b/.github/workflows/prod-test.yml @@ -24,4 +24,4 @@ jobs: run: npm run setup - name: dry run production build - run: npm run prod-dryrun + run: npm run dryrun-prod diff --git a/mods/bambu/bambu.js b/mods/bambu/bambu.js index 76b43dfa..d272f05f 100644 --- a/mods/bambu/bambu.js +++ b/mods/bambu/bambu.js @@ -661,7 +661,7 @@ self.kiri.load(api => { } }); - api.event.on("load-done", function() { + api.event.on("init-done", function() { if (init) { return; } diff --git a/package.json b/package.json index a673f931..48659509 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,8 @@ "docs-check": "prettier --config ./conf/prettier.config.js ./docs --check", "docs-dev": "docusaurus start --config conf/docusaurus.config.js", "docs-serve": "docusaurus serve --config conf/docusaurus.config.js", - "dryrun": "gs-app-server --debug --single --alt --dryrun", + "dryrun": "gs-app-server --debug --single --dryrun", + "dryrun-prod": "gs-app-server --single --dryrun", "mac-verify": "spctl --assess -vv --type install dist/*/*.app", "mk-links": "find src web -type l | xargs -I{} sh -c 'echo \"{},$(readlink {})\"' > conf/links.csv", "pack-dev": "npm run webpack-src && npm run dryrun && npm run bundle:dev", diff --git a/src/kiri/mode/cam/init-menu.js b/src/kiri/mode/cam/init-menu.js index 9cc96073..ce654c00 100644 --- a/src/kiri/mode/cam/init-menu.js +++ b/src/kiri/mode/cam/init-menu.js @@ -105,7 +105,7 @@ export function menu() { separator: newBlank({ class:"set-sep", driven }), camEaseAngle: newInput(LANG.ou_eang_s, {title:LANG.ou_eang_l, convert:toFloat, bound:bound(0.1,85), show:() => ui.camEaseDown.checked}), camFullEngage: newInput(LANG.ou_feng_s, {title:LANG.ou_feng_l, convert:toFloat, bound:bound(0.1,1.0)}), - _____: newGroup(LANG.co_menu, $('cam-origin'), { modes:CAM, driven, separator }), + _____: newGroup(LANG.or_menu, $('cam-origin'), { modes:CAM, driven, separator }), camOriginTop: newBoolean(LANG.or_topp_s, onBooleanClick, {title:LANG.or_topp_l}), camOriginCenter: newBoolean(LANG.or_cntr_s, onBooleanClick, {title:LANG.or_cntr_l}), separator: newBlank({ class:"set-sep", driven }), diff --git a/web/kiri/index.html b/web/kiri/index.html index fccf01b7..b537ed7c 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -92,7 +92,7 @@
- +
@@ -120,7 +120,7 @@ - +
@@ -158,7 +158,7 @@ - +
@@ -195,7 +195,7 @@ - +
@@ -421,8 +421,8 @@
-
-
+
+
@@ -633,27 +633,27 @@
-
+
-
+
-
+
@@ -661,7 +661,7 @@
-
+
@@ -675,8 +675,8 @@
-
-
+
+
@@ -684,25 +684,25 @@
-
+
-
+
- +
-
+
-
+
diff --git a/web/kiri/lang/da.js b/web/kiri/lang/da.js index 80733a28..572f31c1 100644 --- a/web/kiri/lang/da.js +++ b/web/kiri/lang/da.js @@ -228,6 +228,10 @@ self.lang['da-dk'] = { mo_lazr: "laser skæring", mo_cncm: "CNC fræsning", + // MODE INFO (right panel) + mi_devi: "Enhed", + mi_prof: "Profil", + // SETUP su_menu: "setup", su_devi: "enheder", @@ -262,6 +266,11 @@ self.lang['da-dk'] = { ws_save: "gem", ws_cler: "ryd", + // RIGHT PANEL + rp_objs: "objekter", + rp_rngs: "områder", + rp_opls: "operationsliste", + // OPTIONS op_menu: "brugerflade", op_disp: "skærm", @@ -849,7 +858,7 @@ self.lang['da-dk'] = { or_offy_l: "udgangspunkt forskydning Y", // CAM ORIGIN - co_menu: "udgangspunkt", + or_menu: "udgangspunkt", co_offx_s: "forskydning x", co_offx_l: ["forskyd udgangspunkt langs x akse","i arbejdsområde enheder"], co_offy_s: "forskydning y", @@ -979,5 +988,25 @@ self.lang['da-dk'] = { sa_opzo_s: "z forskydning", sa_opzo_l: ["z lag forskydning","næsten altid 0.0","0.0-1.0 i millimeter"], sa_opaa_s: "anti alias", - sa_opaa_l: ["aktiver anti-aliasing","producerer større filer","kan sløre detaljer"] + sa_opaa_l: ["aktiver anti-aliasing","producerer større filer","kan sløre detaljer"], + + // EXPORT DIALOG + ex_job: "job", + ex_fnam: "filnavn", + ex_fsiz: "filstørrelse (bytes)", + ex_time: "tidsestimat (h:m:s)", + ex_matl: "materiale", + ex_dens: "filamenttæthed (g/cm^3)", + ex_fuse: "filament brugt (mm)", + ex_wght: "printet vægt (g)", + ex_gcpv: "gcode forhåndsvisning", + ex_dwnl: "download", + ex_bamb: "send til bambu", + ex_octo: "octoprint", + ex_host: "vært", + ex_akey: "nøgle", + ex_rsnm: "harpiks brugt ML", + ex_layr: "lag", + ex_ptim: "printtid", + ex_segs: "segmenter" }; diff --git a/web/kiri/lang/de-de.js b/web/kiri/lang/de-de.js index 82e4f40a..d6a9902c 100644 --- a/web/kiri/lang/de-de.js +++ b/web/kiri/lang/de-de.js @@ -228,6 +228,10 @@ self.lang['de-de'] = { mo_lazr: "Laser-Schnitt", mo_cncm: "CNC-Fräsen", + // MODE INFO (right panel) + mi_devi: "Gerät", + mi_prof: "Profil", + // SETUP su_menu: "Setup", su_devi: "Geräte", @@ -262,6 +266,11 @@ self.lang['de-de'] = { ws_save: "Speichern", ws_cler: "Leeren", + // RIGHT PANEL + rp_objs: "Objekte", + rp_rngs: "Bereiche", + rp_opls: "Operationsliste", + // OPTIONS op_menu: "Interface", op_disp: "Anzeige", @@ -849,7 +858,7 @@ self.lang['de-de'] = { or_offy_l: "Nullpunkt Offset Y", // CAM ORIGIN - co_menu: "Nullpunkt", + or_menu: "Nullpunkt", co_offx_s: "Offset X", co_offx_l: ["Nullpunkt entlang X-Achse offsetieren","in Arbeitsbereich-Einheiten"], co_offy_s: "Offset Y", @@ -979,5 +988,25 @@ self.lang['de-de'] = { sa_opzo_s: "Z-Offset", sa_opzo_l: ["Z-Schicht-Offset","fast immer 0.0","0.0-1.0 in mm"], sa_opaa_s: "Anti-Alias", - sa_opaa_l: ["Anti-Aliasing aktivieren","produziert größere Dateien","kann Details verwischen"] + sa_opaa_l: ["Anti-Aliasing aktivieren","produziert größere Dateien","kann Details verwischen"], + + // EXPORT DIALOG + ex_job: "Auftrag", + ex_fnam: "Dateiname", + ex_fsiz: "Dateigröße (Bytes)", + ex_time: "Zeitschätzung (h:m:s)", + ex_matl: "Material", + ex_dens: "Filamentdichte (g/cm^3)", + ex_fuse: "Filamentverbrauch (mm)", + ex_wght: "Druckgewicht (g)", + ex_gcpv: "GCode-Vorschau", + ex_dwnl: "Herunterladen", + ex_bamb: "An Bambu senden", + ex_octo: "OctoPrint", + ex_host: "Host", + ex_akey: "Schlüssel", + ex_rsnm: "Harzverbrauch ML", + ex_layr: "Schichten", + ex_ptim: "Druckzeit", + ex_segs: "Segmente" }; diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index 22c2f64e..fe19359e 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -228,6 +228,10 @@ self.lang['en-us'] = { mo_lazr: "Laser Cut", mo_cncm: "CNC Mill", + // MODE INFO (right panel) + mi_devi: "Device", + mi_prof: "Profile", + // SETUP su_menu: "setup", su_devi: "Devices", @@ -262,6 +266,11 @@ self.lang['en-us'] = { ws_save: "Save", ws_cler: "Clear", + // RIGHT PANEL + rp_objs: "objects", + rp_rngs: "ranges", + rp_opls: "operation list", + // OPTIONS op_menu: "interface", op_disp: "display", @@ -849,7 +858,7 @@ self.lang['en-us'] = { or_offy_l: "origin offset Y", // CAM ORIGIN - co_menu: "origin", + or_menu: "origin", co_offx_s: "offset x", co_offx_l: ["offset origin along x axis","in workspace units"], co_offy_s: "offset y", @@ -979,5 +988,25 @@ self.lang['en-us'] = { sa_opzo_s: "z offset", sa_opzo_l: ["z layer offset","almost always 0.0","0.0-1.0 in millimeters"], sa_opaa_s: "anti alias", - sa_opaa_l: ["enable anti-aliasing","produces larger files","can blur details"] + sa_opaa_l: ["enable anti-aliasing","produces larger files","can blur details"], + + // EXPORT DIALOG + ex_job: "job", + ex_fnam: "file name", + ex_fsiz: "file size (bytes)", + ex_time: "time estimate (h:m:s)", + ex_matl: "material", + ex_dens: "filament density (g/cm^3)", + ex_fuse: "filament used (mm)", + ex_wght: "printed weight (g)", + ex_gcpv: "gcode preview", + ex_dwnl: "download", + ex_bamb: "send to bambu", + ex_octo: "octoprint", + ex_host: "host", + ex_akey: "key", + ex_rsnm: "resin used ML", + ex_layr: "layers", + ex_ptim: "print time", + ex_segs: "segments" }; diff --git a/web/kiri/lang/es-es.js b/web/kiri/lang/es-es.js index ec71ee71..47e4663f 100644 --- a/web/kiri/lang/es-es.js +++ b/web/kiri/lang/es-es.js @@ -228,6 +228,10 @@ self.lang['es-es'] = { mo_lazr: "Corte láser", mo_cncm: "Fresado CNC", + // MODE INFO (right panel) + mi_devi: "Dispositivo", + mi_prof: "Perfil", + // SETUP su_menu: "configuración", su_devi: "Dispositivos", @@ -262,6 +266,11 @@ self.lang['es-es'] = { ws_save: "Guardar", ws_cler: "Limpiar", + // RIGHT PANEL + rp_objs: "objetos", + rp_rngs: "rangos", + rp_opls: "lista de operaciones", + // OPTIONS op_menu: "interfaz", op_disp: "pantalla", @@ -849,7 +858,7 @@ self.lang['es-es'] = { or_offy_l: "desplazamiento de origen Y", // CAM ORIGIN - co_menu: "origen", + or_menu: "origen", co_offx_s: "desplazamiento x", co_offx_l: ["desplazar origen a lo largo del eje x","en unidades de espacio de trabajo"], co_offy_s: "desplazamiento y", @@ -979,5 +988,25 @@ self.lang['es-es'] = { sa_opzo_s: "desplazamiento z", sa_opzo_l: ["desplazamiento de capa z","casi siempre 0.0","0.0-1.0 en milímetros"], sa_opaa_s: "antialiasing", - sa_opaa_l: ["habilitar antialiasing","produce archivos más grandes","puede difuminar detalles"] + sa_opaa_l: ["habilitar antialiasing","produce archivos más grandes","puede difuminar detalles"], + + // EXPORT DIALOG + ex_job: "trabajo", + ex_fnam: "nombre de archivo", + ex_fsiz: "tamaño de archivo (bytes)", + ex_time: "estimación de tiempo (h:m:s)", + ex_matl: "material", + ex_dens: "densidad de filamento (g/cm^3)", + ex_fuse: "filamento usado (mm)", + ex_wght: "peso impreso (g)", + ex_gcpv: "vista previa gcode", + ex_dwnl: "descargar", + ex_bamb: "enviar a bambu", + ex_octo: "octoprint", + ex_host: "host", + ex_akey: "clave", + ex_rsnm: "resina usada ML", + ex_layr: "capas", + ex_ptim: "tiempo de impresión", + ex_segs: "segmentos" }; diff --git a/web/kiri/lang/fr.js b/web/kiri/lang/fr.js index 007dc5d1..ca266268 100644 --- a/web/kiri/lang/fr.js +++ b/web/kiri/lang/fr.js @@ -228,6 +228,10 @@ self.lang['fr-fr'] = { mo_lazr: "Découpe Laser", mo_cncm: "Fraisage CNC", + // MODE INFO (right panel) + mi_devi: "Périphérique", + mi_prof: "Profil", + // SETUP su_menu: "configuration", su_devi: "Appareils", @@ -262,6 +266,11 @@ self.lang['fr-fr'] = { ws_save: "Sauvegarder", ws_cler: "Effacer", + // RIGHT PANEL + rp_objs: "objets", + rp_rngs: "plages", + rp_opls: "liste des opérations", + // OPTIONS op_menu: "interface", op_disp: "affichage", @@ -849,7 +858,7 @@ self.lang['fr-fr'] = { or_offy_l: "décalage d'origine Y", // CAM ORIGIN - co_menu: "origine", + or_menu: "origine", co_offx_s: "décalage x", co_offx_l: ["décaler l'origine le long de l'axe x","en unités d'espace de travail"], co_offy_s: "décalage y", @@ -979,5 +988,25 @@ self.lang['fr-fr'] = { sa_opzo_s: "décalage z", sa_opzo_l: ["décalage de couche z","presque toujours 0.0","0.0-1.0 en millimètres"], sa_opaa_s: "anti-crénelage", - sa_opaa_l: ["activer l'anti-crénelage","produit des fichiers plus volumineux","peut flouter les détails"] + sa_opaa_l: ["activer l'anti-crénelage","produit des fichiers plus volumineux","peut flouter les détails"], + + // EXPORT DIALOG + ex_job: "travail", + ex_fnam: "nom de fichier", + ex_fsiz: "taille du fichier (octets)", + ex_time: "estimation du temps (h:m:s)", + ex_matl: "matériau", + ex_dens: "densité du filament (g/cm^3)", + ex_fuse: "filament utilisé (mm)", + ex_wght: "poids imprimé (g)", + ex_gcpv: "aperçu gcode", + ex_dwnl: "télécharger", + ex_bamb: "envoyer à bambu", + ex_octo: "octoprint", + ex_host: "hôte", + ex_akey: "clé", + ex_rsnm: "résine utilisée ML", + ex_layr: "couches", + ex_ptim: "temps d'impression", + ex_segs: "segments" }; diff --git a/web/kiri/lang/pl-pl.js b/web/kiri/lang/pl-pl.js index 7699a4e5..845ae624 100644 --- a/web/kiri/lang/pl-pl.js +++ b/web/kiri/lang/pl-pl.js @@ -227,6 +227,10 @@ self.lang['pl-pl'] = { mo_lazr: "Cięcie laserowe", mo_cncm: "Frezowanie CNC", + // MODE INFO (right panel) + mi_devi: "Urządzenie", + mi_prof: "Profil", + // SETUP su_menu: "konfiguracja", su_devi: "Urządzenia", @@ -261,6 +265,11 @@ self.lang['pl-pl'] = { ws_save: "Zapisz", ws_cler: "Wyczyść", + // RIGHT PANEL + rp_objs: "obiekty", + rp_rngs: "zakresy", + rp_opls: "lista operacji", + // OPTIONS op_menu: "interfejs", op_disp: "wyświetlanie", @@ -848,7 +857,7 @@ self.lang['pl-pl'] = { or_offy_l: "przesunięcie odniesienia Y", // CAM ORIGIN - co_menu: "odniesienie", + or_menu: "odniesienie", co_offx_s: "przesunięcie x", co_offx_l: ["przesuń odniesienie wzdłuż osi x","w jednostkach przestrzeni roboczej"], co_offy_s: "przesunięcie y", @@ -978,5 +987,25 @@ self.lang['pl-pl'] = { sa_opzo_s: "przesunięcie z", sa_opzo_l: ["przesunięcie warstwy z","prawie zawsze 0.0","0.0-1.0 w milimetrach"], sa_opaa_s: "antyaliasing", - sa_opaa_l: ["włącz antyaliasing","tworzy większe pliki","może rozmyć szczegóły"] + sa_opaa_l: ["włącz antyaliasing","tworzy większe pliki","może rozmyć szczegóły"], + + // EXPORT DIALOG + ex_job: "zadanie", + ex_fnam: "nazwa pliku", + ex_fsiz: "rozmiar pliku (bajty)", + ex_time: "szacowany czas (h:m:s)", + ex_matl: "materiał", + ex_dens: "gęstość filamentu (g/cm^3)", + ex_fuse: "użyty filament (mm)", + ex_wght: "waga wydruku (g)", + ex_gcpv: "podgląd gcode", + ex_dwnl: "pobierz", + ex_bamb: "wyślij do bambu", + ex_octo: "octoprint", + ex_host: "host", + ex_akey: "klucz", + ex_rsnm: "użyta żywica ML", + ex_layr: "warstwy", + ex_ptim: "czas druku", + ex_segs: "segmenty" }; diff --git a/web/kiri/lang/pt.js b/web/kiri/lang/pt.js index a30870d1..be495ff2 100644 --- a/web/kiri/lang/pt.js +++ b/web/kiri/lang/pt.js @@ -228,6 +228,10 @@ self.lang['pt-pt'] = { mo_lazr: "Corte Laser", mo_cncm: "Fresadora CNC", + // MODE INFO (right panel) + mi_devi: "Dispositivo", + mi_prof: "Perfil", + // SETUP su_menu: "configurar", su_devi: "Dispositivos", @@ -262,6 +266,11 @@ self.lang['pt-pt'] = { ws_save: "Guardar", ws_cler: "Limpar", + // RIGHT PANEL + rp_objs: "objectos", + rp_rngs: "intervalos", + rp_opls: "lista de operações", + // OPTIONS op_menu: "interface", op_disp: "exibir", @@ -849,7 +858,7 @@ self.lang['pt-pt'] = { or_offy_l: "desvio de origem Y", // CAM ORIGIN - co_menu: "origem", + or_menu: "origem", co_offx_s: "desvio x", co_offx_l: ["desviar origem ao longo do eixo x","em unidades de espaço de trabalho"], co_offy_s: "desvio y", @@ -979,5 +988,25 @@ self.lang['pt-pt'] = { sa_opzo_s: "desvio z", sa_opzo_l: ["desvio de camada z","quase sempre 0.0","0.0-1.0 em milímetros"], sa_opaa_s: "anti-aliasing", - sa_opaa_l: ["activar anti-aliasing","produz ficheiros maiores","pode desfocar detalhes"] + sa_opaa_l: ["activar anti-aliasing","produz ficheiros maiores","pode desfocar detalhes"], + + // EXPORT DIALOG + ex_job: "trabalho", + ex_fnam: "nome do ficheiro", + ex_fsiz: "tamanho do ficheiro (bytes)", + ex_time: "estimativa de tempo (h:m:s)", + ex_matl: "material", + ex_dens: "densidade do filamento (g/cm^3)", + ex_fuse: "filamento usado (mm)", + ex_wght: "peso impresso (g)", + ex_gcpv: "pré-visualização gcode", + ex_dwnl: "transferir", + ex_bamb: "enviar para bambu", + ex_octo: "octoprint", + ex_host: "anfitrião", + ex_akey: "chave", + ex_rsnm: "resina usada ML", + ex_layr: "camadas", + ex_ptim: "tempo de impressão", + ex_segs: "segmentos" }; diff --git a/web/kiri/lang/zh.js b/web/kiri/lang/zh.js index 1c4d4529..e9486793 100644 --- a/web/kiri/lang/zh.js +++ b/web/kiri/lang/zh.js @@ -227,6 +227,10 @@ self.lang['zh'] = { mo_lazr: "激光切割", mo_cncm: "CNC铣削", + // MODE INFO (right panel) + mi_devi: "设备", + mi_prof: "配置", + // 设置 su_menu: "设置", su_devi: "设备", @@ -261,6 +265,11 @@ self.lang['zh'] = { ws_save: "保存", ws_cler: "清除", + // RIGHT PANEL + rp_objs: "对象", + rp_rngs: "范围", + rp_opls: "操作列表", + // 选项 op_menu: "界面", op_disp: "显示", @@ -401,7 +410,6 @@ self.lang['zh'] = { fl_lahi_s: "层高", fl_lahi_l: ["每个切片的高度","单位:毫米","应该 >= 切片高度"], fl_rate_s: "外壳速度", - fl_rate_s: "外壳速度", fl_rate_l: ["外壳打印最大速度","单位:毫米/秒"], fl_frat_s: "填充速度", fl_frat_l: ["填充打印最大速度","单位:毫米/秒"], @@ -849,7 +857,7 @@ self.lang['zh'] = { or_offy_l: "原点Y偏移", // CAM 原点 - co_menu: "原点", + or_menu: "原点", co_offx_s: "X偏移", co_offx_l: ["沿X轴偏移原点","单位:工作区单位"], co_offy_s: "Y偏移", @@ -979,5 +987,25 @@ self.lang['zh'] = { sa_opzo_s: "Z偏移", sa_opzo_l: ["Z层偏移","几乎总是0.0","0.0-1.0(毫米)"], sa_opaa_s: "抗锯齿", - sa_opaa_l: ["启用抗锯齿","产生更大的文件","可能模糊细节"] + sa_opaa_l: ["启用抗锯齿","产生更大的文件","可能模糊细节"], + + // EXPORT DIALOG + ex_job: "任务", + ex_fnam: "文件名", + ex_fsiz: "文件大小 (字节)", + ex_time: "时间估计 (h:m:s)", + ex_matl: "材料", + ex_dens: "材料密度 (g/cm^3)", + ex_fuse: "已用材料 (mm)", + ex_wght: "打印重量 (g)", + ex_gcpv: "G代码预览", + ex_dwnl: "下载", + ex_bamb: "发送到拓竹", + ex_octo: "OctoPrint", + ex_host: "主机", + ex_akey: "密钥", + ex_rsnm: "树脂用量 ML", + ex_layr: "层数", + ex_ptim: "打印时间", + ex_segs: "段数" }; From ae65cd2b07527e3a6f21f54cf02828579e8a006d Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 15:48:44 -0500 Subject: [PATCH 108/151] re-add base flow rate multiplier for belt mode fixes #444 --- src/kiri/core/conf.js | 1 + src/kiri/mode/fdm/init-menu.js | 1 + src/kiri/mode/fdm/prepare.js | 3 +++ 3 files changed, 5 insertions(+) diff --git a/src/kiri/core/conf.js b/src/kiri/core/conf.js index b8f5ffb4..5ac17300 100644 --- a/src/kiri/core/conf.js +++ b/src/kiri/core/conf.js @@ -263,6 +263,7 @@ export const conf = { firstLayerBedTemp: 0, firstLayerBeltBump: 0, firstLayerBeltLead: 3, + firstLayerBeltFact: 1, firstLayerBrim: 0, firstLayerBrimGap: 0, firstLayerBrimIn: 0, diff --git a/src/kiri/mode/fdm/init-menu.js b/src/kiri/mode/fdm/init-menu.js index 453d83da..715ce191 100644 --- a/src/kiri/mode/fdm/init-menu.js +++ b/src/kiri/mode/fdm/init-menu.js @@ -134,6 +134,7 @@ export function menu() { firstLayerFanSpeed: newInput(LANG.ou_fans_s, {title:LANG.ou_fans_l, convert:toInt, bound:bound(0,255), show:isBelt}), firstLayerYOffset: newInput(LANG.fl_zoff_s, {title:LANG.fl_zoff_l, convert:toFloat, show:isBelt}), firstLayerFlatten: newInput(LANG.fl_flat_s, {title:LANG.fl_flat_l, convert:toFloat, show:isBelt}), + firstLayerBeltFact: newInput(LANG.fl_mult_s, {title:LANG.fl_mult_l, convert:toFloat, bound:bound(0, 2), show:isBelt}), firstLayerRate: newInput(LANG.fl_rate_s, {title:LANG.fl_rate_l, convert:toFloat}), firstLayerFillRate: newInput(LANG.fl_frat_s, {title:LANG.fl_frat_l, convert:toFloat, show:isNotBelt}), separator: newBlank({ class:"set-sep", driven, show:isBelt }), diff --git a/src/kiri/mode/fdm/prepare.js b/src/kiri/mode/fdm/prepare.js index 680cc075..8fd835b3 100644 --- a/src/kiri/mode/fdm/prepare.js +++ b/src/kiri/mode/fdm/prepare.js @@ -682,6 +682,7 @@ export async function fdm_prepare(widgets, settings, update) { for (let rec of layer) { overate = rec.overate >= 0 ? rec.overate : overate; + let bmult = params.firstLayerBeltFact ?? 1; let brate = params.firstLayerRate || firstLayerRate; let point = rec.point; let belty = rec.belty = -point.y + (point.z * belt.slope); @@ -695,6 +696,8 @@ export async function fdm_prepare(widgets, settings, update) { // apply base speed to segments touching belt rec.speed = params.firstLayerRate || Math.min(rec.speed, lowrate); rec.fan = params.firstLayerFanSpeed; + // apply base flowrate multiplier to segments touching belt + rec.emit *= bmult; minx = Math.min(minx, point.x, lastout.point.x); maxx = Math.max(maxx, point.x, lastout.point.x); maxy = Math.max(maxy, point.y); From c9251f078aee06133379f7c6bae0cd122a99a1fb Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 17:01:57 -0500 Subject: [PATCH 109/151] add help menu visual callout --- web/kiri/index.css | 7 +++++++ web/kiri/index.html | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/web/kiri/index.css b/web/kiri/index.css index 2f40e2d4..264f32dc 100644 --- a/web/kiri/index.css +++ b/web/kiri/index.css @@ -242,6 +242,13 @@ details[open] summary::after { font-size: larger; } +#app-help-me { + position: absolute; + top: 3px; + right: -2px; + font-size: 10px; +} + /** dark conversion */ .dark button[disabled] { color: #888; diff --git a/web/kiri/index.html b/web/kiri/index.html index b537ed7c..184f2fd9 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -63,7 +63,7 @@
- Kiri:Moto + Kiri:Moto
From cfecafa90f3c393008a4a20a10e8fa3d92e23a41 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 17:47:53 -0500 Subject: [PATCH 110/151] add version numbering utility --- bin/update-version.sh | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100755 bin/update-version.sh diff --git a/bin/update-version.sh b/bin/update-version.sh new file mode 100755 index 00000000..0c2af579 --- /dev/null +++ b/bin/update-version.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +if [ -z "$1" ]; then + echo "Usage: $0 " + echo "Example: $0 4.5.0" + exit 1 +fi + +VERSION=$1 + + # Update package.json (line 3, no indentation) + awk -v ver="$VERSION" '/"version":/ {print " \"version\": \"" ver "\","; next} 1' package.json > package.json.tmp && mv package.json.tmp package.json + + # Update src/moto/license.js (line 6, VERSION field) + awk -v ver="$VERSION" '/VERSION:/ {print " VERSION: \"" ver "\""; next} 1' src/moto/license.js > src/moto/license.js.tmp && mv src/moto/license.js.tmp src/moto/license.js + + # Update web/kiri/manifest.json (line 2, preserves "Kiri:Moto" prefix) + awk -v ver="$VERSION" '/"name":/ {print " \"name\": \"Kiri:Moto " ver "\","; next} 1' web/kiri/manifest.json > web/kiri/manifest.json.tmp && mv web/kiri/manifest.json.tmp web/kiri/manifest.json + +echo "Updated version to $VERSION in:" +echo " - package.json" +echo " - src/moto/license.js" +echo " - web/kiri/manifest.json" From 5036f6e179d94ab281dfe05598618f5e09b2d573 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 18:19:57 -0500 Subject: [PATCH 111/151] split out help/info menu and language menus --- web/kiri/index.css | 44 ------------------------------ web/kiri/index.html | 61 +++++++++++++++++++++++------------------- web/kiri/lang/da.js | 46 +++++++++++++++---------------- web/kiri/lang/de-de.js | 3 ++- web/kiri/lang/en.js | 3 ++- web/kiri/lang/es-es.js | 3 ++- web/kiri/lang/fr.js | 3 ++- web/kiri/lang/pl-pl.js | 3 ++- web/kiri/lang/pt.js | 53 ++++++++++++++++++------------------ web/kiri/lang/zh.js | 5 ++-- 10 files changed, 97 insertions(+), 127 deletions(-) diff --git a/web/kiri/index.css b/web/kiri/index.css index 264f32dc..bf495bae 100644 --- a/web/kiri/index.css +++ b/web/kiri/index.css @@ -242,13 +242,6 @@ details[open] summary::after { font-size: larger; } -#app-help-me { - position: absolute; - top: 3px; - right: -2px; - font-size: 10px; -} - /** dark conversion */ .dark button[disabled] { color: #888; @@ -320,7 +313,6 @@ details[open] summary::after { } .dark #render-tools .pop, .dark #render-tools svg, -.dark #lang-pop, .dark .pop-tics > div, .dark #top, .dark #top .content, @@ -387,7 +379,6 @@ details[open] summary::after { background-color: #333; border: 1px solid #888; } -.dark #lang-pop > div:hover, .dark #oplist > div:hover, .dark #op-add:hover { background-color: var(--blue-1); @@ -603,12 +594,6 @@ details[open] summary::after { #app-name-pop .content { text-align: center; } -#app-lang { - justify-content: flex-end; -} -#app-lang:hover #lang-pop { - display: flex; -} #app,div { display: flex; @@ -951,35 +936,6 @@ details[open] summary::after { background-color: rgba(0,0,0,0.2); } -#lang-hold { - background-color: transparent; - position: absolute; - top: -35px; - left: -35px; - right: -35px; - bottom: -35px; -} -#lang-pop { - display: none; - position: absolute; - right: calc(100% + 2px); - top: 0; - padding: 1px; - text-align: right; - align-items: stretch; - white-space: nowrap; - background-color: #fff; - border: 1px solid var(--blue-2); - border-radius: 4px; - flex-direction: column; -} -#lang-pop > div { - padding: 2px 7px 2px 7px; -} -#lang-pop > div:hover { - background-color: var(--blue-4); -} - #mid { position: fixed; top: 45px; diff --git a/web/kiri/index.html b/web/kiri/index.html index 184f2fd9..2d845591 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -63,23 +63,16 @@
- Kiri:Moto
+ Kiri:Moto
-
- -
-
-
- -
-
- -
-
+
+
+ +
@@ -210,21 +203,6 @@
-
- - -
- -
简体中文
-
dansk
-
deutsch
-
english
-
español
-
français
-
polski
-
português
-
-
@@ -245,6 +223,35 @@
+ + + +
+
+
+ +
+
+ +
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/kiri/lang/da.js b/web/kiri/lang/da.js index 572f31c1..6cee3a2a 100644 --- a/web/kiri/lang/da.js +++ b/web/kiri/lang/da.js @@ -3,13 +3,13 @@ self.lang['da'] = self.lang['da-dk'] = { // common keys and menus - animate: "animer", // CAM animate button - arrange: "arranger", // layout workspace objects + animate: "animer", // CAM animate button + arrange: "arranger", // layout workspace objects axis: "akse", // left object scale pop menu back: "tilbage", - clear: "ryd", // clear workspace (remove all objects) + clear: "ryd", // clear workspace (remove all objects) copy: "kopier", - clone: "klon", // create duplicate + clone: "klon", // create duplicate delete: "slet", detail: "detaljer", done: "færdig", @@ -23,30 +23,30 @@ self.lang['da-dk'] = { front: "front", fullscreen: "fuld skærm", help: "hjælp", - ghost: "spøgelse", // left render pop menu (wireframe) - hide: "skjul", // left render pop menu (invisible) + ghost: "spøgelse", // left render pop menu (wireframe) + hide: "skjul", // left render pop menu (invisible) home: "hjem", import: "importer", install: "installer", language: "sprog", left: "venstre", machines: "maskiner", // device or machine - mesh: "mesh", // mesh editing + mesh: "mesh", // mesh editing metric: "måleenhed", name: "navn", - new: "ny", // file new - off: "fra", // turn something off (like a lightbulb) - on: "til", // turn something on (like a lightbulb) - profs: "profiler", // right menu "profiles" - prefs: "præferencer", // left menu "preferences" + new: "ny", // file new + off: "fra", // turn something off (like a lightbulb) + on: "til", // turn something on (like a lightbulb) + profs: "profiler", // right menu "profiles" + prefs: "præferencer", // left menu "preferences" preview: "forhåndsvisning", - quit: "afslut", // quit/exit the application (electron) + quit: "afslut", // quit/exit the application (electron) recent: "nylig", rename: "omdøb", render: "render", // left render pop menu reset: "nulstil", right: "højre", - rotate: "roter", // left rotate pop menu + rotate: "roter", // left rotate pop menu save: "gem", scale: "skala", // left object scale pop menu select: "vælg", @@ -57,14 +57,14 @@ self.lang['da-dk'] = { solid: "solid", // view type pop menu start: "start", tool: "værktøj", - tools: "værktøjer", // CAM tool menu button + tools: "værktøjer", // CAM tool menu button top: "top", type: "type", // CAM tool type uninstall: "afinstaller", version: "version", - view: "vis", // left view pop menu + view: "vis", // left view pop menu wire: "tråd", // left render pop menu - volume: "volumen", // device build area + volume: "volumen", // device build area acct_xpo: ["lav en sikkerhedskopi af din enhed","og enhedsprofiler med mulighed for at","medtage arbejdsområdeobjekter og positioner"], @@ -93,14 +93,14 @@ self.lang['da-dk'] = { dm_appp: "programindstillinger", // CAM Tool Dialog - td_tyem: "ende", // end mill - td_tybm: "kugle", // ball mill - td_tytm: "konisk", // taper mill - td_tydr: "bor", // drill + td_tyem: "ende", // end mill + td_tybm: "kugle", // ball mill + td_tytm: "konisk", // taper mill + td_tydr: "bor", // drill td_tonm: "værktøj #", td_shft: "skaft", // endmill shaft specs - td_flut: "spånrille", // endmill flute specs - td_tapr: "konisk", // endmill taper specs + td_flut: "spånrille", // endmill flute specs + td_tapr: "konisk", // endmill taper specs // DEVICE dialog groups dv_gr_dev: "enhed", diff --git a/web/kiri/lang/de-de.js b/web/kiri/lang/de-de.js index d6a9902c..109a9cee 100644 --- a/web/kiri/lang/de-de.js +++ b/web/kiri/lang/de-de.js @@ -22,10 +22,11 @@ self.lang['de-de'] = { filter: "Filter", front: "Vorne", fullscreen: "Vollbild", - help: "Hilfe", ghost: "Geist", // left render pop menu (wireframe) + help: "Hilfe", hide: "Verbergen", // left render pop menu (invisible) home: "Home", + info: "Info", // info menu import: "Import", install: "Installieren", language: "Sprache", diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index fe19359e..b0a02f3c 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -22,10 +22,11 @@ self.lang['en-us'] = { filter: "filter", front: "front", fullscreen: "fullscreen", - help: "help", ghost: "ghost", // left render pop menu (wireframe) + help: "help", hide: "hide", // left render pop menu (invisible) home: "home", + info: "info", // info menu import: "import", install: "install", language: "language", diff --git a/web/kiri/lang/es-es.js b/web/kiri/lang/es-es.js index 47e4663f..294bdfa1 100644 --- a/web/kiri/lang/es-es.js +++ b/web/kiri/lang/es-es.js @@ -22,10 +22,11 @@ self.lang['es-es'] = { filter: "filtrar", front: "delante", fullscreen: "pantalla completa", - help: "ayuda", ghost: "fantasma", // left render pop menu (wireframe) + help: "ayuda", hide: "ocultar", // left render pop menu (invisible) home: "inicio", + info: "info", // info menu import: "importar", install: "instalar", language: "idioma", diff --git a/web/kiri/lang/fr.js b/web/kiri/lang/fr.js index ca266268..1428246d 100644 --- a/web/kiri/lang/fr.js +++ b/web/kiri/lang/fr.js @@ -26,6 +26,7 @@ self.lang['fr-fr'] = { ghost: "translucide", // left render pop menu (wireframe) hide: "cacher", // left render pop menu (invisible) home: "origine", + info: "info", // info menu import: "importer", install: "installer", language: "langue", @@ -40,7 +41,7 @@ self.lang['fr-fr'] = { profs: "profils", // right menu "profiles" prefs: "préférences", // right menu "preferences" preview: "prévisualiser", - quit: "quitter", // quit/exit the application (electron) + quit: "quitter", // quit/exit the application (electron) recent: "récent", rename: "renommer", render: "rendu", // left render pop menu diff --git a/web/kiri/lang/pl-pl.js b/web/kiri/lang/pl-pl.js index 845ae624..a98c16c0 100644 --- a/web/kiri/lang/pl-pl.js +++ b/web/kiri/lang/pl-pl.js @@ -25,6 +25,7 @@ self.lang['pl-pl'] = { ghost: "szkielet", // left render pop menu (wireframe) hide: "ukryj", // left render pop menu (invisible) home: "początek", + info: "info", // info menu import: "import", install: "instaluj", language: "język", @@ -39,7 +40,7 @@ self.lang['pl-pl'] = { profs: "profile", // right menu "profiles" prefs: "preferencje", // right menu "preferences" preview: "podgląd", - quit: "zakończ", // quit/exit the application (electron) + quit: "zakończ", // quit/exit the application (electron) recent: "ostatnie", rename: "zmień nazwę", render: "renderuj", // left render pop menu diff --git a/web/kiri/lang/pt.js b/web/kiri/lang/pt.js index be495ff2..7676c61c 100644 --- a/web/kiri/lang/pt.js +++ b/web/kiri/lang/pt.js @@ -3,13 +3,13 @@ self.lang['pt'] = self.lang['pt-pt'] = { // common keys and menus - animate: "animar", // CAM animate button - arrange: "organizar", // layout workspace objects + animate: "animar", // CAM animate button + arrange: "organizar", // layout workspace objects axis: "eixo", // left object scale pop menu back: "voltar", - clear: "limpar", // clear workspace (remove all objects) + clear: "limpar", // clear workspace (remove all objects) copy: "copiar", - clone: "clonar", // create duplicate + clone: "clonar", // create duplicate delete: "excluir", detail: "detalhe", done: "pronto", @@ -23,47 +23,48 @@ self.lang['pt-pt'] = { front: "frente", fullscreen: "ecrã completo", help: "ajuda", - ghost: "fantasma", // left render pop menu (wireframe) - hide: "ocultar", // left render pop menu (invisible) + ghost: "fantasma", // left render pop menu (wireframe) + hide: "ocultar", // left render pop menu (invisible) home: "início", + info: "info", // info menu import: "importar", install: "instalar", language: "idioma", left: "esquerda", machines: "máquinas", // device or machine - mesh: "malha", // mesh editing + mesh: "malha", // mesh editing metric: "métrico", name: "nome", - new: "novo", // file new - off: "desligado", // turn something off (like a lightbulb) - on: "ligado", // turn something on (like a lightbulb) - profs: "perfis", // right menu "profiles" - prefs: "preferências", // right menu "preferences" + new: "novo", // file new + off: "desligado", // turn something off (like a lightbulb) + on: "ligado", // turn something on (like a lightbulb) + profs: "perfis", // right menu "profiles" + prefs: "preferências", // right menu "preferences" preview: "pré-visualizar", - quit: "sair", // quit/exit the application (electron) + quit: "sair", // quit/exit the application (electron) recent: "recente", rename: "renomear", - render: "renderizar", // left render pop menu + render: "renderizar", // left render pop menu reset: "redefinir", right: "direita", - rotate: "rodar", // left rotate pop menu + rotate: "rodar", // left rotate pop menu save: "guardar", - scale: "escalar", // left object scale pop menu + scale: "escalar", // left object scale pop menu select: "seleccionar", setup: "configurar", settings: "definições", size: "tamanho", slice: "fatiar", - solid: "sólido", // view type pop menu + solid: "sólido", // view type pop menu start: "iniciar", tool: "ferramenta", - tools: "ferramentas", // CAM tool menu button + tools: "ferramentas", // CAM tool menu button top: "topo", type: "tipo", // CAM tool type uninstall: "desinstalar", version: "versão", - view: "visualizar", // left view pop menu - wire: "aramado", // left render pop menu + view: "visualizar", // left view pop menu + wire: "aramado", // left render pop menu volume: "volume", // device build area acct_xpo: ["faça uma cópia de segurança do seu dispositivo","e perfis de dispositivo com a opção","de incluir objectos e posições","do espaço de trabalho"], @@ -93,14 +94,14 @@ self.lang['pt-pt'] = { dm_appp: "Preferências da Aplicação", // CAM Tool Dialog - td_tyem: "topo", // end mill - td_tybm: "esférico", // ball mill - td_tytm: "cónico", // taper mill - td_tydr: "broca", // drill + td_tyem: "topo", // end mill + td_tybm: "esférico", // ball mill + td_tytm: "cónico", // taper mill + td_tydr: "broca", // drill td_tonm: "ferramenta #", td_shft: "haste", // endmill shaft specs - td_flut: "canelura", // endmill flute specs - td_tapr: "conicidade", // endmill taper specs + td_flut: "canelura", // endmill flute specs + td_tapr: "conicidade", // endmill taper specs // DEVICE dialog groups dv_gr_dev: "dispositivo", diff --git a/web/kiri/lang/zh.js b/web/kiri/lang/zh.js index e9486793..fa92b937 100644 --- a/web/kiri/lang/zh.js +++ b/web/kiri/lang/zh.js @@ -21,10 +21,11 @@ self.lang['zh'] = { filter: "筛选", front: "前面", fullscreen: "全屏", - help: "帮助", ghost: "透明", // 左侧渲染弹出菜单(线框) + help: "帮助", hide: "隐藏", // 左侧渲染弹出菜单(不可见) home: "主页", + info: "信息", // info menu import: "导入", install: "安装", language: "语言", @@ -39,7 +40,7 @@ self.lang['zh'] = { profs: "配置", // 右侧菜单"配置" prefs: "偏好", // 右侧菜单"偏好设置" preview: "预览", - quit: "退出", // quit/exit the application (electron) + quit: "退出", // quit/exit the application (electron) recent: "最近", rename: "重命名", render: "渲染", // 左侧渲染弹出菜单 From 4a4d1f7c63bb5c3c632c1a9fe80e61ca9f6fbcb5 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 20:09:05 -0500 Subject: [PATCH 112/151] update release notes --- release.md | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/release.md b/release.md index 29246779..b728f473 100644 --- a/release.md +++ b/release.md @@ -2,6 +2,91 @@ Full docs @ https://docs.grid.space/projects/kiri-moto +# Release 4.3 + +## General + +* add lathe mode for CAM operations +* add volumetric flow calculations for FDM +* improve bundler with better dependency tracking +* migrate to ESM module format across codebase +* improve arc support in gcode generation + +## FDM + +* add scarf seams for better surface finish +* add hole compensation feature +* add spiral layer start option +* overhaul thin wall detection and handling +* improve volumetric flow rate controls +* add retraction tuning for better print quality + +## CAM + +* add lathe operation support with threading +* improve arc support for smoother toolpaths +* add drill from stock top option +* improve tab positioning and generation +* enhance surface selection and filtering +* add 4th axis lathe debug and testing mode +* improve tool path optimization + +## Devices + +* add new machine profiles +* improve device profile management + + +# Release 4.2 + +## CAM + +* add arc support to gcode output for smoother paths +* add drill from stock top feature +* improve contour operations +* fix animation issues with shared tool numbers +* enhance trace operations with arc support +* improve pocket smoothing algorithms + +## FDM + +* improve support generation +* add new retraction options +* enhance layer time controls + +## General + +* improve gcode arc import and export +* fix file loading edge cases +* update device profiles + + +# Release 4.1 + +## CAM + +* improve drill operations and positioning +* fix multi-part drilling bugs +* enhance trace line selection +* add dogbone support to trace ops +* improve pocket operation reliability +* fix trace selection with flip operations + +## FDM + +* add RatRig machine profiles +* improve Bambu Lab device control integration +* enhance support placement algorithms +* fix belt mode support generation + +## General + +* improve file import handling +* fix workspace restore for complex projects +* enhance mobile touch interactions +* update machine profiles for popular devices + + # Release 4.0 (2024-01-21) * major UI refactor From 4022922c2585acfc46f34f6cf8e0053ff7094f14 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 21:22:38 -0500 Subject: [PATCH 113/151] move install / uninstall / quit menu to center app menu --- web/kiri/index.html | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/web/kiri/index.html b/web/kiri/index.html index 2d845591..7ba7dfc2 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -73,6 +73,16 @@
+
+
+ +
+
+ +
+
+ +
@@ -207,19 +217,6 @@
-
-
- - -
-
- - -
-
- - -
From 03f3211abe0e6444a364ec134a8cfeaf83eba499 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 21:23:59 -0500 Subject: [PATCH 114/151] add devel device export --- mods/devel/init.js | 25 +++++++++++++++++++++++++ mods/devel/kiri.js | 23 +++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 mods/devel/init.js create mode 100644 mods/devel/kiri.js diff --git a/mods/devel/init.js b/mods/devel/init.js new file mode 100644 index 00000000..3a0ab317 --- /dev/null +++ b/mods/devel/init.js @@ -0,0 +1,25 @@ +// back end for device export in dev mode +module.exports = function(server) { + server.inject("kiri", "kiri.js"); + if (!server.env.debug) { + return; + } + const fs = require('fs'); + server.api.postDevice = (req, res, next) => { + server.handler.decodePost(req, res, () => { + // console.log({decodePost: req.app.post}); + const { device, process, profiles } = JSON.parse(req.app.post); + if (profiles) { + device.profiles = Object.entries(profiles).filter(v => v[0] !== 'default').map(v => v[1]); + } else { + device.profiles = [ process ]; + } + const { mode } = device; + const { deviceName } = device; + const path = `${server.const.rootdir}/src/kiri-dev/${mode.toLowerCase()}/${deviceName.replace(/\ /g,'.')}`; + // console.log({ mode, device, process, path }); + fs.writeFileSync(path, JSON.stringify(device, undefined, 4)); + res.end('profile saved'); + }); + }; +}; diff --git a/mods/devel/kiri.js b/mods/devel/kiri.js new file mode 100644 index 00000000..6ec2c57e --- /dev/null +++ b/mods/devel/kiri.js @@ -0,0 +1,23 @@ +// provides a device export to local disk option +self.kiri.load(api => { + api.event.on('load-done', () => { + let deviceExport = api.device.export; + api.device.export = (exp, name, opt = {}) => { + const { event, record } = opt; + if (event && event.shiftKey & api.const.LOCAL) { + const { code, process, profiles } = record; + fetch("/api/postDevice", { + method: "POST", + body: JSON.stringify({ device: code, process, profiles }) + }) + .then(r => r.text()) + .then(t => { + // console.log({server_said: t}); + api.show.alert('profile saved to server'); + }); + } else { + deviceExport(exp, name); + } + }; + }); +}); From 04da5abccbf37023f25ad49801e1584f0bcc6748 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 22:25:06 -0500 Subject: [PATCH 115/151] add slice layer naming using op notes. fixes #447 --- src/kiri/mode/cam/op-drill.js | 2 +- src/kiri/mode/cam/op-outline.js | 2 +- src/kiri/mode/cam/op-pocket.js | 2 +- src/kiri/mode/cam/op-rough.js | 4 ++-- src/kiri/mode/cam/op-trace.js | 4 ++-- src/kiri/mode/cam/slice.js | 5 ++++- 6 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/kiri/mode/cam/op-drill.js b/src/kiri/mode/cam/op-drill.js index b97428be..ca495175 100644 --- a/src/kiri/mode/cam/op-drill.js +++ b/src/kiri/mode/cam/op-drill.js @@ -47,7 +47,7 @@ class OpDrill extends CamOp { slice.camLines = [poly]; slice.output() - .setLayer("drill", { face: color, line: color }) + .setLayer(state.layername, { face: color, line: color }) .addPolys(slice.camLines); addSlices(slice); sliceOut.push(slice); diff --git a/src/kiri/mode/cam/op-outline.js b/src/kiri/mode/cam/op-outline.js index c9b7e275..99e6a034 100644 --- a/src/kiri/mode/cam/op-outline.js +++ b/src/kiri/mode/cam/op-outline.js @@ -212,7 +212,7 @@ class OpOutline extends CamOp { .setLayer("slice", {line: 0xaaaa00}, false) .addPolys(slice.topPolys()) slice.output() - .setLayer("outline", {face: color, line: color}) + .setLayer(state.layername, {face: color, line: color}) .addPolys(slice.camLines); } diff --git a/src/kiri/mode/cam/op-pocket.js b/src/kiri/mode/cam/op-pocket.js index b3b19b2b..68000d37 100644 --- a/src/kiri/mode/cam/op-pocket.js +++ b/src/kiri/mode/cam/op-pocket.js @@ -135,7 +135,7 @@ class OpPocket extends CamOp { }); } slice.output() - .setLayer("pocket", {line: color}, false) + .setLayer(state.layername, {line: color}, false) .addPolys(slice.camLines) if (debug && shadow) slice.output() .setLayer("pocket shadow", {line: 0xff8811}, false) diff --git a/src/kiri/mode/cam/op-rough.js b/src/kiri/mode/cam/op-rough.js index beb24827..6f247b10 100644 --- a/src/kiri/mode/cam/op-rough.js +++ b/src/kiri/mode/cam/op-rough.js @@ -65,7 +65,7 @@ class OpRough extends CamOp { } slice.camLines = polys; slice.output() - .setLayer("roughing", {face: color, line: color}) + .setLayer(state.layername, {face: color, line: color}) .addPolys(slice.camLines); addSlices(slice); camFaces.push(slice); @@ -279,7 +279,7 @@ class OpRough extends CamOp { slices.forEach(slice => { slice.output() - .setLayer("roughing", {face: color, line: color}) + .setLayer(state.layername, {face: color, line: color}) .addPolys(slice.camLines); }); this.sliceOut = slices.filter(slice => slice.camLines); diff --git a/src/kiri/mode/cam/op-trace.js b/src/kiri/mode/cam/op-trace.js index 52481169..c38b646b 100644 --- a/src/kiri/mode/cam/op-trace.js +++ b/src/kiri/mode/cam/op-trace.js @@ -92,7 +92,7 @@ class OpTrace extends CamOp { } POLY.setWinding(slice.camLines, offset === "outside" ? !cutdir : cutdir, false); slice.output() - .setLayer("trace follow", {line: color}, false) + .setLayer(state.layername, {line: color}, false) .addPolys(slice.camLines) } function clearZnew(polys, z, down) { @@ -154,7 +154,7 @@ class OpTrace extends CamOp { .setLayer("trace poly", {line: 0x1188ff}, false) .addPolys([ poly ]) slice.output() - .setLayer("trace", {line: color}, false) + .setLayer(state.layername, {line: color}, false) .addPolys(slice.camLines) progress(zpro, "trace"); zpro += zinc; diff --git a/src/kiri/mode/cam/slice.js b/src/kiri/mode/cam/slice.js index eec8f94d..1f39e461 100644 --- a/src/kiri/mode/cam/slice.js +++ b/src/kiri/mode/cam/slice.js @@ -310,8 +310,11 @@ export async function cam_slice(settings, widget, onupdate, ondone) { workover.bottom_z = isIndexed ? valz.ov_botz : bottom_stock + valz.ov_botz; workover.bottom_cut = Math.max(workover.bottom_z, -zThru); } - // state.workarea = workover; + let { note, type } = op.op; + let named = note ? note.split(' ').filter(v => v.charAt(0) === '#') : []; + let layername = named.length ? named : (note ? `${type} (${note})` : type); Object.assign(state, { + layername, zBottom, zThru, ztOff, From ea1c13b5c0c3bacaf50f96bd07f2c2a5476362ea Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 13 Nov 2025 22:38:52 -0500 Subject: [PATCH 116/151] fixes #446 level step down units --- src/kiri/mode/cam/cl-ops.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/kiri/mode/cam/cl-ops.js b/src/kiri/mode/cam/cl-ops.js index 5d05ed31..cba92ee3 100644 --- a/src/kiri/mode/cam/cl-ops.js +++ b/src/kiri/mode/cam/cl-ops.js @@ -207,7 +207,7 @@ export function createPopOps() { sep: UC.newBlank({ class: "pop-sep" }), spindle: UC.newInput(LANG.cc_spnd_s, { title: LANG.cc_spnd_l, convert: UC.toInt, show: hasSpindle }), step: UC.newInput(LANG.cc_sovr_s, { title: LANG.cc_sovr_l, convert: UC.toFloat, bound: UC.bound(0.01, 1.0) }), - stepz: UC.newInput(LANG.cc_sdwn_s, { title: LANG.cc_sdwn_l, convert: UC.toFloat, bound: UC.bound(0, 100.0) }), + stepz: UC.newInput(LANG.cc_sdwn_s, { title: LANG.cc_sdwn_l, convert: UC.toFloat, units: true, bound: UC.bound(0, 100.0) }), rate: UC.newInput(LANG.cc_feed_s, { title: LANG.cc_feed_l, convert: UC.toInt, units: true }), down: UC.newInput(LANG.cc_loff_s, { title: LANG.cc_loff_l, convert: UC.toFloat, units: true }), inset: UC.newInput(LANG.cc_lxyo_s, { title: LANG.cc_lxyo_l, convert: UC.toFloat, units: true, show: () => !env.popOp.level.rec.stock }), From e22a012641c297a8e95afadc7d48d3ac97d9fa4b Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 14 Nov 2025 00:04:01 -0500 Subject: [PATCH 117/151] documenting fdm remain_time macro var refs #339 --- contributing.md | 9 +-------- docs/kiri-moto/gcode-macros.md | 1 + 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/contributing.md b/contributing.md index fd3ca445..5ce218d0 100644 --- a/contributing.md +++ b/contributing.md @@ -11,13 +11,6 @@ This is a community driven project, and we welcome any contributions you'd like - Run `npm run setup` - Run `npm run dev` -## Running Docs Locally - -- Ensure you have [node](https://nodejs.org/en/download/), or an equivalent installed -- Clone the [repository](https://github.com/GridSpace/grid-apps) -- Run `npm run setup` -- Run `npm run docs-dev` - ## How to add a new machine @@ -28,4 +21,4 @@ This is a community driven project, and we welcome any contributions you'd like - Make a new file in the `src/kiri/dev/` directory, with the name of your machine, no spaces or special characters, and a `.json` extension. - Paste the copied object into the new file, and save it. - Publish your changes to a git repo -- Submit a [pull request](https://github.com/GridSpace/grid-apps/compare) \ No newline at end of file +- Submit a [pull request](https://github.com/GridSpace/grid-apps/compare) diff --git a/docs/kiri-moto/gcode-macros.md b/docs/kiri-moto/gcode-macros.md index 263e98ee..656523a1 100644 --- a/docs/kiri-moto/gcode-macros.md +++ b/docs/kiri-moto/gcode-macros.md @@ -35,6 +35,7 @@ description: Variable Substitutions and Expressions in GCode Macros - \{pos_y\} = last output Y position - \{pos_z\} = last output Z position - \{progress\} = 0-100% state of print output +- \{remain_time\} = print time remaining in minutes - \{tool\} | \{nozzle\} = current tool in use - \{tool_count\} = number of tools used in print - \{tool_used\__n_\} = whether tool # _n_ is used in print From 4b80e81b375ec70ba8a201cc7def2dbff599160f Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 14 Nov 2025 00:42:25 -0500 Subject: [PATCH 118/151] reorder build deps --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 48659509..5f33b694 100644 --- a/package.json +++ b/package.json @@ -104,10 +104,10 @@ "dryrun-prod": "gs-app-server --single --dryrun", "mac-verify": "spctl --assess -vv --type install dist/*/*.app", "mk-links": "find src web -type l | xargs -I{} sh -c 'echo \"{},$(readlink {})\"' > conf/links.csv", - "pack-dev": "npm run webpack-src && npm run dryrun && npm run bundle:dev", - "pack-prod": "npm run webpack-src prod && npm run dryrun && npm run bundle", + "pack-dev": "npm run dryrun && npm run webpack-src && npm run bundle:dev", + "pack-prod": "npm run dryrun && npm run webpack-src prod && npm run bundle", "postbuild": "node bin/electron-post.js", - "prebuild": "npm run setup && npm run pack-dev prod && node bin/electron-pre.js", + "prebuild": "npm run setup && npm run pack-dev && node bin/electron-pre.js", "preinstall": "node bin/install-pre.js", "prod": "npm run pack-prod && gs-app-server", "setup-mods": "cd mods && npm i", From 524387351560b70a51ff7ef25debe701ddf6f5c2 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 14 Nov 2025 16:35:37 -0500 Subject: [PATCH 119/151] fixes #448 by reusing fillArea() centering feature --- src/kiri/mode/cam/op-level.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/kiri/mode/cam/op-level.js b/src/kiri/mode/cam/op-level.js index 50d3ddcb..56ab44b1 100644 --- a/src/kiri/mode/cam/op-level.js +++ b/src/kiri/mode/cam/op-level.js @@ -28,10 +28,10 @@ class OpLevel extends CamOp { let points = []; let clear = op.stock ? - [ newPolygon().centerRectangle({x:0,y:0,z:0}, stock.x, stock.y) ] : + [ newPolygon().centerRectangle({x:0,y:0,z:0}, stock.x + toolDiam/2, stock.y) ] : POLY.outer(POLY.offset(tshadow, toolDiam * (op.inset || 0))); - POLY.fillArea(clear, 90, stepOver, points); + POLY.fillArea(clear, 1090, stepOver, points); let layers = this.layers = []; for (let z of zList) { From eee5dd85a058a3d81912d708a01a2fbea2f1ef69 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 14 Nov 2025 18:26:50 -0500 Subject: [PATCH 120/151] implement tab hopping. toolpath goes up and over tab instead of interrupting cut. fixes #207 --- notes.md | 2 -- src/kiri/mode/cam/slice.js | 62 +++++++++++++++++++++++++++++--------- 2 files changed, 48 insertions(+), 16 deletions(-) diff --git a/notes.md b/notes.md index e39f50d8..3da60892 100644 --- a/notes.md +++ b/notes.md @@ -59,9 +59,7 @@ * `B` rapid moves should be max of terrain zmax and last cut layer height (roughing) * `B` feed rate for next tool set before tool change (push/pop feed rates?) -* `B` tab cuts cause loss of direction, parenting, depth, and it's hard to fix * `B` tabs do not properly track widget mirror events -* `B` tabs are not cut to exact height * `B` contour does not honor clip to stock * `F` add lathe step down to eliminate the need for roughing diff --git a/src/kiri/mode/cam/slice.js b/src/kiri/mode/cam/slice.js index 1f39e461..80737bbb 100644 --- a/src/kiri/mode/cam/slice.js +++ b/src/kiri/mode/cam/slice.js @@ -775,14 +775,33 @@ export async function holes(settings, widget, individual, rec, onProgress) { return drills; } -function cutTabs(tabs, offset, z, inter) { - tabs = tabs.filter(tab => z < tab.pos.z + tab.dim.z / 2).map(tab => tab.off).flat(); - return cutPolys(tabs, offset, z, false); +function cutTabs(tabs, offset) { + let out = []; + for (let tab of tabs) { + tab.top = tab.pos.z + tab.dim.z / 2; + } + for (let poly of offset) { + let polyZ = poly.getZ(); + let cut = tabs.filter(tab => tab.top >= polyZ); + let lo = poly.cut(cut.map(tab => tab.off).flat(), false); + let hi = []; + for (let tab of cut) { + hi.appendAll(POLY.setZ(poly.cut(tab.off, true), tab.top)); + } + if (hi.length) { + let heal = healPolys([ ...lo, ...hi ], false); + POLY.setWinding(heal, poly.isClockwise()); + out.push(...heal); + } else { + out.push(poly); + } + } + return out; } -function cutPolys(polys, offset, z, inter) { +function cutPolys(polys, offset) { let noff = []; - offset.forEach(op => noff.appendAll(op.cut(POLY.union(polys, 0, true), inter))); + offset.forEach(op => noff.appendAll(op.cut(POLY.union(polys, 0, true)))); return healPolys(noff); } @@ -799,7 +818,17 @@ function contourPolys(widget, polys) { } } -function healPolys(noff) { +function dedup(arr, same) { + const out = []; + let prev; + for (const x of arr) { + if (!prev || !same(prev, x)) out.push(x); + prev = x; + } + return out; +} + +function healPolys(noff, sameZ = true) { for (let p of noff) { if (p.appearsClosed()) { p.points.pop(); @@ -818,29 +847,29 @@ function healPolys(noff) { let s2 = ntmp[j]; if (!s2) continue; // require polys at same Z to heal - if (Math.abs(s1.getZ() - s2.getZ()) > 0.01) { + if (sameZ && Math.abs(s1.getZ() - s2.getZ()) > 0.01) { continue; } if (!(s1.open && s2.open)) continue; if (s1.last().isMergable2D(s2.first())) { - s1.addPoints(s2.points.slice(1)); + s1.addPoints(s2.points); ntmp[j] = null; continue outer; } if (s2.last().isMergable2D(s1.first())) { - s2.addPoints(s1.points.slice(1)); + s2.addPoints(s1.points); ntmp[i] = null; continue outer; } if (s1.first().isMergable2D(s2.first())) { s1.reverse(); - s1.addPoints(s2.points.slice(1)); + s1.addPoints(s2.points); ntmp[j] = null; continue outer; } if (s1.last().isMergable2D(s2.last())) { s2.reverse(); - s1.addPoints(s2.points.slice(1)); + s1.addPoints(s2.points); ntmp[j] = null; continue outer; } @@ -854,9 +883,14 @@ function healPolys(noff) { } // close poly if head meets tail for (let poly of noff) { - if (poly.open && poly.first().isMergable2D(poly.last())) { - poly.points.pop(); - poly.open = false; + poly.points = dedup(poly.points, (a,b) => a.isMergable3D(b)); + if (poly.open) { + if (poly.first().isMergable3D(poly.last())) { + poly.points.pop(); + poly.open = false; + } else if (poly.first().isMergable2D(poly.last())) { + poly.open = false; + } } } } From 0a6534e2a11bbbccf8db6255a8a783d13f11f3b4 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 14 Nov 2025 23:57:06 -0500 Subject: [PATCH 121/151] updated readme / release notes --- readme.md | 16 ++++++------ release.md | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 9 deletions(-) diff --git a/readme.md b/readme.md index 9c7d2497..1d76e329 100644 --- a/readme.md +++ b/readme.md @@ -9,27 +9,27 @@ ![GitHub last commit](https://img.shields.io/github/last-commit/GridSpace/grid-apps) ![GitHub](https://img.shields.io/github/license/GridSpace/grid-apps) - # Community -[Discord](https://discord.com/invite/suyCCgr) -- Live Chat -[Forums](https://forum.grid.space/) -- Long Form and Archival Discussion -[BlueSky](https://bsky.app/profile/grid.space) -- Like the Good 'Ol Days -[YouTube](https://www.youtube.com/c/gridspace) -- Content when I have time +[Discord](https://discord.com/invite/suyCCgr) -- Live Chat +[Forums](https://forum.grid.space/) -- Long Form and Archival Discussion +[YouTube](https://www.youtube.com/c/gridspace) -- Content when I have time # Free and Open Source -Kiri:Moto and Mesh:Tool are completely open source and free for use without restriction. Over 12 years in development, this passion project has grown well beyond its original scope. It has consumed most of my free time for many years. Please consider donating to support continued development GitHub sponsorship or PayPal. +Kiri:Moto and Mesh:Tool are completely open source and free for use without restriction. Over 13 years in development, this passion project has grown well beyond its original scope. It has consumed most of my free time for many years. Please consider donating to support continued development GitHub sponsorship or PayPal. [![GitHub Sponsors](https://img.shields.io/github/sponsors/GridSpace)](https://github.com/sponsors/GridSpace) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://paypal.me/gridspace3d?locale.x=en_US) # Documentation -[Documentation](https://docs.grid.space/) -- Could really use help with this + +[Documentation](https://docs.grid.space/) -- Could really use help with this Docs are build with [Docusaurus](https://docusaurus.io/) and served using [GitHub Pages](https://pages.github.com/). You can build and view the docs locally with: + ``` git clone git@github.com:GridSpace/grid-apps.git cd grid-apps @@ -45,7 +45,6 @@ npm run docs-dev [`Mesh:Tool`](https://grid.space/mesh) is a browser-based mesh repair and editing tool - # Electron Builds (Desktop Binaries) https://github.com/GridSpace/grid-apps/releases/ @@ -62,7 +61,6 @@ chmod 755 KiriMoto-linux-x86_64.AppImage The Windows and Mac binaries are not signed, so you will need to jump through a few safety hoops to get them to open the first time. - # Linux / Mac Developers ## Testing Locally (with Docker) diff --git a/release.md b/release.md index b728f473..d758c39d 100644 --- a/release.md +++ b/release.md @@ -2,6 +2,77 @@ Full docs @ https://docs.grid.space/projects/kiri-moto +# Release 4.4.0 + +## General + +* add version numbering utility script +* split out help/info menu and language menus +* move install/uninstall/quit menu to center app menu +* add help menu visual callout +* improve language translation coverage +* improve build and serve workflow for alternate builds +* update service worker configuration +* add install/uninstall options in setup menu + +## CAM + +* implement tab hopping - toolpath goes up and over tab instead of interrupting cut (fixes #207) +* add GPU accelerated contouring for faster operations +* add radial GPU raster support (experimental) +* add new register mode that marks bottom cutout tabs +* add curves-only support to GPU contour +* add zsafe and move to safe z at start of new operations +* fix 'safe' moves during operation changes to be moves, not cuts +* fix tolerance/resolution for GPU raster mesh calculations +* fix NullPointerException with tabs in contour +* improve merge/co-planar point handling +* add slice layer naming using operation notes (fixes #447) +* fix level step down units (fixes #446) + +## FDM + +* document remain_time macro variable (refs #339) +* re-add base flow rate multiplier for belt mode (fixes #444) +* fix belt fan control ordering (fixes #438) +* exclude belt from bridge fan layer +* add centering feature for fill areas (fixes #448) + +## Mesh:Tool + +* add STEP export capability +* add STEP import with face generation +* improve face generation with inner holes +* add mesh scripting tool and persistence +* add plane and plane.loft operations +* add global edge map and edge reuse for better topology +* add devel device export option + +## Electron + +* clean up electron build process +* merge electron mod into core +* add service routes when available +* set proper content-type for appended code bodies + +## Dependencies + +* update @gridspace/raster-path to latest version with GPU acceleration +* update @gridspace/app-server for proper fallthrough handling +* switch from npmjs.org to git repos for @gridspace packages +* update WebGPU implementation + +## Bug Fixes + +* fix Bambu Lab local URL and module load order +* fix progress reporting for raster operations +* fix GPU lathe progress and contour API usage +* fix tool offsets when using GPU acceleration +* fix indexed rotations epsilon value for accurate zflat calculation +* fix traceload debug option +* sanitize topo3 resolution to avoid GPU floating-point errors + + # Release 4.3 ## General From df3bb7e9562bcbb2877a61c43308907cb411205e Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 15 Nov 2025 09:39:06 -0500 Subject: [PATCH 122/151] remove beta tag --- src/moto/license.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/moto/license.js b/src/moto/license.js index 84e126ee..fa997e8f 100644 --- a/src/moto/license.js +++ b/src/moto/license.js @@ -6,6 +6,6 @@ const terms = { VERSION: "4.4.0" }; -export const beta = 4401; +export const beta = 0; export const license = terms; export const version = terms.VERSION; From 1beb8d7cc05337e146556a11c3b94700671c11d6 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 15 Nov 2025 10:47:51 -0500 Subject: [PATCH 123/151] fix asset append missing module root --- app.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/app.js b/app.js index 5e998b90..cbd8ee77 100644 --- a/app.js +++ b/app.js @@ -91,6 +91,7 @@ function init(mod) { req.url = req.url.substring(pre.length); req.app.path = req.app.path.substring(pre.length); req.app.ispre = true; + // console.log('MATCH1', dir, cookie, req.url); return true; } let cookie = cookieValue(req.headers.cookie, "version") || ''; @@ -99,9 +100,12 @@ function init(mod) { vmatch = [ vmatch ]; } if (vmatch.indexOf("*") >= 0) { + // console.log('MATCH2', dir, cookie, req.url); return true; } - return vmatch.indexOf(cookie) >= 0; + let match = vmatch.indexOf(cookie) >= 0; + // console.log('MATCH3', dir, cookie, req.url); + return match; }); mod.on.testv((version) => { @@ -194,23 +198,23 @@ function init(mod) { // create alt artifacts with module extensions logger.log('creating artifacts', Object.keys(append)); for (let [ key, val ] of Object.entries(append)) { - let src = `src/main/${key}.js`; + let src = `${dir}/src/main/${key}.js`; if (!fs.existsSync(src)) { logger.log('missing', src); continue; } - fs.mkdirSync(`alt/main`, { recursive: true }); + fs.mkdirSync(`${dir}/alt/main`, { recursive: true }); let body = fs.readFileSync(src); - fs.writeFileSync(`alt/main/${key}.js`, body + val); + fs.writeFileSync(`${dir}/alt/main/${key}.js`, body + val); - src= `src/pack/${key}-main.js`; + src= `${dir}/src/pack/${key}-main.js`; if (!fs.existsSync(src)) { logger.log('missing', src); continue; } - fs.mkdirSync(`alt/pack`, { recursive: true }); + fs.mkdirSync(`${dir}/alt/pack`, { recursive: true }); body = fs.readFileSync(src); - fs.writeFileSync(`alt/pack/${key}-main.js`, body + val); + fs.writeFileSync(`${dir}/alt/pack/${key}-main.js`, body + val); } }; From 97fd508e46caa812a7562dbb975eda162f7ec350 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 15 Nov 2025 12:08:05 -0500 Subject: [PATCH 124/151] fix contour y bounds swap --- bin/build-upload-all | 2 +- bin/electron-notarize.js | 2 +- contributing.md | 7 ++++--- src/kiri/mode/cam/topo3.js | 7 +++++++ 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/bin/build-upload-all b/bin/build-upload-all index 7e3bc86b..217036f9 100755 --- a/bin/build-upload-all +++ b/bin/build-upload-all @@ -1,6 +1,6 @@ #!/bin/bash tag=${1:-latest} -npm run clear-cache +npm run clean ./bin/build-upload win ${tag} && \ ./bin/build-upload linux ${tag} && \ ./bin/build-upload mac ${tag} diff --git a/bin/electron-notarize.js b/bin/electron-notarize.js index 63af71a2..162a7fff 100644 --- a/bin/electron-notarize.js +++ b/bin/electron-notarize.js @@ -5,7 +5,7 @@ exports.default = async function notarizing(context) { const { electronPlatformName, appOutDir } = context; if (process.env.SKIPNOT || electronPlatformName !== 'darwin') { - console.log('SKIP NOTARIZING'); + console.log(' ** skip notarizing:', electronPlatformName); return; } diff --git a/contributing.md b/contributing.md index 5ce218d0..90f450fa 100644 --- a/contributing.md +++ b/contributing.md @@ -7,9 +7,10 @@ This is a community driven project, and we welcome any contributions you'd like ## Running Locally - Ensure you have [node](https://nodejs.org/en/download/), or an equivalent installed -- Clone the [repository](https://github.com/GridSpace/grid-apps) -- Run `npm run setup` -- Run `npm run dev` +- Clone the [repository](https://github.com/GridSpace/grid-apps) from https://github.com/GridSpace/grid-apps +- `npm run setup` +- `npm run dev` +- Open browser [http://localhost:8080/kiri](http://localhost:8080/kiri) ## How to add a new machine diff --git a/src/kiri/mode/cam/topo3.js b/src/kiri/mode/cam/topo3.js index 91a4d59d..b70152c7 100644 --- a/src/kiri/mode/cam/topo3.js +++ b/src/kiri/mode/cam/topo3.js @@ -129,6 +129,13 @@ export class Topo { vertices[i+1] = vertices[i+0]; vertices[i+0] = tmp; } + ['min','max'].forEach(ext => { + ext = wbounds[ext]; + let tmp = ext.x; + ext.x = ext.y; + ext.y = tmp; + }); + console.log({ wbounds }); console.timeEnd('swap XY vertices'); } From 99503f507293ddca62296bbf9ea199b24eb8100e Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 15 Nov 2025 17:33:32 -0500 Subject: [PATCH 125/151] change electron build context detection, move mods package deps to main package --- app-el.js | 2 +- app.js | 60 ++++++++++++++++++++++++-------------- bin/electron-pre.js | 5 +++- mods/package.json | 16 ---------- package.json | 13 +++++---- src/kiri/mode/cam/topo3.js | 6 ++-- src/kiri/run/worker.js | 4 +-- 7 files changed, 55 insertions(+), 51 deletions(-) delete mode 100644 mods/package.json diff --git a/app-el.js b/app-el.js index e62ad888..d1d349b0 100644 --- a/app-el.js +++ b/app-el.js @@ -32,7 +32,7 @@ function createWindow() { height: 900, webPreferences: { // contextIsolation: true, - // nodeIntegration: false, + // nodeIntegration: true, // sandbox: true, // preload: undefined // nodeIntegration: true, diff --git a/app.js b/app.js index cbd8ee77..0eb91d3c 100644 --- a/app.js +++ b/app.js @@ -15,6 +15,10 @@ const license = require_fresh('./src/moto/license.js'); const version = license.version || "rogue"; const netdb = require('@gridspace/net-level-client'); const PATH = require('path'); +const isElectron = !!process.versions.electron || + process.env.ELECTRON_RUN_AS_NODE === '1' || + process.env.ELECTRON_NO_ATTACH === '1' || + process.env.ELECTRON_BUILD === '1'; const append = { mesh:'', kiri:'' }; const code = {}; @@ -32,6 +36,7 @@ let dversion; let lastmod; let logger; let single; +let dryrun; let debug; let http; let util; @@ -61,12 +66,14 @@ netdb.create = async function(map = {}) { function init(mod) { const ENV = mod.env; + const inElectron = isElectron || ENV.electron; startTime = time(); lastmod = mod.util.lastmod; logger = mod.log; pre = ENV.pre || mod.meta.pre; debug = ENV.debug || mod.meta.debug; + dryrun = ENV.dryrun; single = ENV.single; oversion = ENV.over || mod.meta.over; crossOrigin = ENV.xorigin || mod.meta.xorigin || false; @@ -163,8 +170,14 @@ function init(mod) { if (util.isfile(PATH.join(mod.dir,modpath,".disable"))) return; const isDebugMod = util.isfile(PATH.join(mod.dir,modpath,".debug")); const isElectronMod = util.isfile(PATH.join(mod.dir,modpath,".electron")); - if (force || (ENV.electron && !isElectronMod)) return; - if (force || (!ENV.electron && isElectronMod && !isDebugMod)) return; + if (inElectron && !isElectronMod) { + logger.log({ skip_non_electron_mod: modpath }); + return; + } + if (!inElectron && isElectronMod && !isDebugMod) { + logger.log({ skip_electron_mod: modpath }); + return; + } try { loadModule(mod, modpath); } catch (error) { @@ -196,25 +209,30 @@ function init(mod) { } // create alt artifacts with module extensions - logger.log('creating artifacts', Object.keys(append)); - for (let [ key, val ] of Object.entries(append)) { - let src = `${dir}/src/main/${key}.js`; - if (!fs.existsSync(src)) { - logger.log('missing', src); - continue; + if (dryrun || !isElectron) { + logger.log('creating artifacts', Object.keys(append)); + for (let [ key, val ] of Object.entries(append)) { + // append mains + let src = `${dir}/src/main/${key}.js`; + if (!fs.existsSync(src)) { + logger.log('missing', src); + continue; + } + fs.mkdirSync(`${dir}/alt/main`, { recursive: true }); + let body = fs.readFileSync(src); + fs.writeFileSync(`${dir}/alt/main/${key}.js`, body + val); + // append packed mains + src= `${dir}/src/pack/${key}-main.js`; + if (!fs.existsSync(src)) { + logger.log('missing', src); + continue; + } + fs.mkdirSync(`${dir}/alt/pack`, { recursive: true }); + body = fs.readFileSync(src); + fs.writeFileSync(`${dir}/alt/pack/${key}-main.js`, body + val); } - fs.mkdirSync(`${dir}/alt/main`, { recursive: true }); - let body = fs.readFileSync(src); - fs.writeFileSync(`${dir}/alt/main/${key}.js`, body + val); - - src= `${dir}/src/pack/${key}-main.js`; - if (!fs.existsSync(src)) { - logger.log('missing', src); - continue; - } - fs.mkdirSync(`${dir}/alt/pack`, { recursive: true }); - body = fs.readFileSync(src); - fs.writeFileSync(`${dir}/alt/pack/${key}-main.js`, body + val); + } else { + logger.log('skipping artifacts'); } }; @@ -280,11 +298,9 @@ function initModule(mod, file, dir) { const [ path, file ] = [ ...arguments ]; if (lastmod(file)) { code[path] = fs.readFileSync(file); - // console.log({ CODE: path, file }); } else if (lastmod(mod.dir + '/' + file)) { const alt = mod.dir + '/' + file; code[path] = fs.readFileSync(alt); - // console.log({ CODE: path, alt }); } else { console.log({ MISSING_CODE: path, file }); } diff --git a/bin/electron-pre.js b/bin/electron-pre.js index f4ff8e0b..7666b57b 100644 --- a/bin/electron-pre.js +++ b/bin/electron-pre.js @@ -2,10 +2,13 @@ const fs = require('fs-extra'); const path = require('path'); const server = require('@gridspace/app-server'); +const altTmp = path.join('tmp','alt'); +fs.copySync("alt", altTmp, { dereference: true }); + // deref src, web, mod for windows const srcTmp = path.join('tmp','src'); fs.copySync("src", srcTmp, { dereference: true, filter:(src) => { - return src.indexOf('web/pack') < 0; + return true || src.indexOf('src/main') < 0; } }); const webTmp = path.join('tmp','web'); diff --git a/mods/package.json b/mods/package.json deleted file mode 100644 index 3b045dc1..00000000 --- a/mods/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "grid-apps-mods", - "version": "4.1.0", - "description": "grid.space app modules", - "author": "Stewart Allen ", - "repository": { - "type": "git", - "url": "https://github.com/gridspace/apps.git" - }, - "dependencies": { - "@gridspace/basic-ftp": "^5.0.5", - "aedes": "^0.51.3", - "hexer": "^1.5.0", - "mqtt": "^5.10.3" - } -} diff --git a/package.json b/package.json index 5f33b694..3dbff9c5 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "@gridspace/raster-path": "^1.0.6", "@tracespace/parser": "^5.0.0-next.0", "@tweenjs/tween.js": "^16.6.0", + "aedes": "^0.51.3", "base64-js": "^1.5.1", "bootstrap-icons": "^1.11.3", "buffer-crc32": "^0.2.13", @@ -50,10 +51,12 @@ "earcut": "^3.0.1", "express-useragent": "^1.0.13", "fast-glob": "^3.3.3", + "hexer": "^1.5.0", "i": "^0.3.7", "jszip": "^3.7.1", "manifold-3d": "^3.2.1", "moment": "^2.29.4", + "mqtt": "^5.10.3", "npm": "^11.4.2", "prettier": "^3.5.3", "react-responsive-carousel": "^3.2.23", @@ -104,18 +107,18 @@ "dryrun-prod": "gs-app-server --single --dryrun", "mac-verify": "spctl --assess -vv --type install dist/*/*.app", "mk-links": "find src web -type l | xargs -I{} sh -c 'echo \"{},$(readlink {})\"' > conf/links.csv", - "pack-dev": "npm run dryrun && npm run webpack-src && npm run bundle:dev", - "pack-prod": "npm run dryrun && npm run webpack-src prod && npm run bundle", + "pack-dev": "npm run webpack-src && npm run dryrun && npm run bundle:dev", + "pack-prod": "npm run webpack-src prod && npm run dryrun && npm run bundle", "postbuild": "node bin/electron-post.js", - "prebuild": "npm run setup && npm run pack-dev && node bin/electron-pre.js", + "prebuild": "export ELECTRON_BUILD=1 && npm run setup && npm run pack-dev && node bin/electron-pre.js", "preinstall": "node bin/install-pre.js", "prod": "npm run pack-prod && gs-app-server", "setup-mods": "cd mods && npm i", - "setup": "npm run setup-mods && npm i && npm run clean && npm run webpack-ext", + "setup": "npm run clean && npm run setup-mods && npm i && npm run webpack-ext", "start-dbg": "npm run prebuild && electron . --debugg", "start-ddb": "npm run prebuild && electron . --devel --debugg", "start-dev": "npm run prebuild prod && electron . --devel", - "start": "npm run prebuild prod && electron .", + "start": "npm run prebuild && electron .", "webpack-ext": "npm run webpack-three && npm run webpack-zip", "webpack-src": "node bin/esbuild.config.mjs", "webpack-three": "npx webpack --config bin/webpack-three-esm.js", diff --git a/src/kiri/mode/cam/topo3.js b/src/kiri/mode/cam/topo3.js index b70152c7..110c86a9 100644 --- a/src/kiri/mode/cam/topo3.js +++ b/src/kiri/mode/cam/topo3.js @@ -7,7 +7,6 @@ import { newSlice } from '../../core/slice.js'; import { Slicer as topo_slicer } from './slicer_topo.js'; import { polygons as POLY } from '../../../geo/polygons.js'; import { Tool } from './tool.js'; -import { poly2polyEmit } from '../../../geo/paths.js'; const RAD2DEG = 180 / Math.PI; const DEG2RAD = Math.PI / 180; @@ -122,7 +121,7 @@ export class Topo { } if (contourY) { - console.time('swap XY vertices'); + // console.time('swap XY vertices'); // swap XY vertices for (let i=0; i Date: Sat, 15 Nov 2025 20:32:28 -0500 Subject: [PATCH 126/151] bump rev 4.5.0 --- package.json | 2 +- src/moto/license.js | 2 +- web/kiri/manifest.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 3dbff9c5..271b32a2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grid-apps", - "version": "4.4.0", + "version": "4.5.0", "description": "grid.space 3d slicing & modeling tools", "author": "Stewart Allen ", "license": "MIT", diff --git a/src/moto/license.js b/src/moto/license.js index fa997e8f..33e5ebca 100644 --- a/src/moto/license.js +++ b/src/moto/license.js @@ -3,7 +3,7 @@ const terms = { COPYRIGHT: "Copyright (C) Stewart Allen - All Rights Reserved", LICENSE: "See the license.md file included with the source distribution", - VERSION: "4.4.0" + VERSION: "4.5.0" }; export const beta = 0; diff --git a/web/kiri/manifest.json b/web/kiri/manifest.json index 01f7287f..e74aa39a 100644 --- a/web/kiri/manifest.json +++ b/web/kiri/manifest.json @@ -1,5 +1,5 @@ { - "name": "Kiri:Moto 4.4.0", + "name": "Kiri:Moto 4.5.0", "short_name": "Kiri:Moto", "description": "Slicer for 3D printers, CNC mills, laser cutters and more", "start_url": "/boot/", From 9fcf7927ceff401d864ae0f89067b6ef01990b51 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 15 Nov 2025 23:52:40 -0500 Subject: [PATCH 127/151] change env var location for windows build --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 271b32a2..275c2fbf 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "pack-dev": "npm run webpack-src && npm run dryrun && npm run bundle:dev", "pack-prod": "npm run webpack-src prod && npm run dryrun && npm run bundle", "postbuild": "node bin/electron-post.js", - "prebuild": "export ELECTRON_BUILD=1 && npm run setup && npm run pack-dev && node bin/electron-pre.js", + "prebuild": "npm run setup && ELECTRON_BUILD=1 npm run pack-dev && node bin/electron-pre.js", "preinstall": "node bin/install-pre.js", "prod": "npm run pack-prod && gs-app-server", "setup-mods": "cd mods && npm i", From 53ee6783f790ef9903c6323a134ea61e5f09f51a Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 16 Nov 2025 00:04:13 -0500 Subject: [PATCH 128/151] use cross-env for reliable cross-platform env --- package.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 275c2fbf..06e1f40f 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,7 @@ "@docusaurus/preset-classic": "^3.7.0", "@electron/notarize": "^3.0.0", "copy-webpack-plugin": "^12.0.2", + "cross-env": "^10.1.0", "docusaurus-lunr-search": "^3.6.0", "dotenv": "latest", "electron": "^35.0.1", @@ -85,7 +86,7 @@ "webpack-cli": "^5.1.4" }, "scripts": { - "build-debug": "npm run prebuild && DEBUG=electron-builder electron-builder", + "build-debug": "npm run prebuild && cross-env DEBUG=electron-builder electron-builder", "build-linux-arm": "npm run build -- --linux --arm64", "build-linux": "npm run build -- --linux --x64", "build-mac-intel": "npm run build -- --mac --x64", @@ -96,7 +97,7 @@ "build": "npm run prebuild && electron-builder", "bundle:dev": "node bin/bundler.mjs bin/bundle.config.json", "bundle:prod": "node bin/bundler.mjs bin/bundle-prod.config.json", - "bundle": "COMPRESS=1 npm run bundle:prod", + "bundle": "cross-env COMPRESS=1 npm run bundle:prod", "clean": "rm -rf alt build data dist src/pack src.old tmp web.old .bcache", "dev": "npm run pack-dev && gs-app-server --debug --single", "docs-build": "docusaurus build --config conf/docusaurus.config.js", @@ -110,7 +111,7 @@ "pack-dev": "npm run webpack-src && npm run dryrun && npm run bundle:dev", "pack-prod": "npm run webpack-src prod && npm run dryrun && npm run bundle", "postbuild": "node bin/electron-post.js", - "prebuild": "npm run setup && ELECTRON_BUILD=1 npm run pack-dev && node bin/electron-pre.js", + "prebuild": "npm run setup && cross-env ELECTRON_BUILD=1 npm run pack-dev && node bin/electron-pre.js", "preinstall": "node bin/install-pre.js", "prod": "npm run pack-prod && gs-app-server", "setup-mods": "cd mods && npm i", From ce444c2b3334a31468978a92ca100c1ab3e22b68 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 16 Nov 2025 13:11:39 -0500 Subject: [PATCH 129/151] fix tab cuts and stock clip to in roughing --- src/kiri/mode/cam/anim-3d-fe.js | 6 ++-- src/kiri/mode/cam/op-outline.js | 10 ++++-- src/kiri/mode/cam/op-rough.js | 62 ++++++++++++++++++--------------- src/kiri/mode/cam/slice.js | 2 +- 4 files changed, 45 insertions(+), 35 deletions(-) diff --git a/src/kiri/mode/cam/anim-3d-fe.js b/src/kiri/mode/cam/anim-3d-fe.js index 2300fdab..69ee3b7b 100644 --- a/src/kiri/mode/cam/anim-3d-fe.js +++ b/src/kiri/mode/cam/anim-3d-fe.js @@ -19,6 +19,7 @@ let meshes = {}, speed, origin, color = 0, + dark = false, A2R = Math.PI / 180; export function animate_clear2(api) { @@ -35,6 +36,7 @@ export function animate_clear2(api) { export function animate2(api, delay) { let alert = api.alerts.show("building animation"); let settings = api.conf.get(); + dark = settings.controller.dark; client.animate_setup2(settings, data => { handleUpdate(data); if (data) { @@ -89,7 +91,7 @@ Object.assign(client, { animate_setup2(settings, ondone) { initPathMesh(); - color = settings.controller.dark ? 0x888888 : 0; + color = dark ? 0x888888 : 0; material = material ?? new THREE.MeshPhongMaterial({ flatShading: true, transparent: false, @@ -113,7 +115,7 @@ function initPathMesh() { max = 10000, rot = new THREE.Euler(0,0,0), geo = new THREE.BufferGeometry(), - mat = new THREE.LineBasicMaterial({ color: 0xffff00 }), + mat = new THREE.LineBasicMaterial({ color: dark ? 0xffff00 : 0x771100 }), pos = new Float32Array(max * 6), lines = new THREE.LineSegments(geo, mat), vec = new THREE.Vector3(0,0,0), diff --git a/src/kiri/mode/cam/op-outline.js b/src/kiri/mode/cam/op-outline.js index 99e6a034..81c11a62 100644 --- a/src/kiri/mode/cam/op-outline.js +++ b/src/kiri/mode/cam/op-outline.js @@ -17,9 +17,10 @@ class OpOutline extends CamOp { async slice(progress) { let { op, state } = this; - let { settings, widget, slicer, addSlices, tshadow, thruHoles, unsafe, color } = state; + let { settings, slicer, addSlices, tshadow, thruHoles, unsafe, color } = state; let { updateToolDiams, tabs, cutTabs, cutPolys, workarea, zMax, shadowAt } = state; let { process, stock } = settings; + let { controller } = settings; if (op.down <= 0) { throw `invalid step down "${op.down}"`; @@ -191,7 +192,7 @@ class OpOutline extends CamOp { tabs.forEach(tab => { tab.off = POLY.expand([tab.poly], toolDiam / 2).flat(); }); - offset = cutTabs(tabs, offset, slice.z); + offset = cutTabs(tabs, offset); } if (process.camStockClipTo && stock.x && stock.y && stock.center) { @@ -208,9 +209,12 @@ class OpOutline extends CamOp { // project empty up and render for (let slice of slices) { - if (false) slice.output() + if (controller.devel) slice.output() .setLayer("slice", {line: 0xaaaa00}, false) .addPolys(slice.topPolys()) + if (controller.devel) slice.output() + .setLayer("shadow", {line: 0x557799}, false) + .addPolys(slice.shadow) slice.output() .setLayer(state.layername, {face: color, line: color}) .addPolys(slice.camLines); diff --git a/src/kiri/mode/cam/op-rough.js b/src/kiri/mode/cam/op-rough.js index 6f247b10..7ecda0e0 100644 --- a/src/kiri/mode/cam/op-rough.js +++ b/src/kiri/mode/cam/op-rough.js @@ -19,7 +19,7 @@ class OpRough extends CamOp { let { updateToolDiams, thruHoles, tabs, cutTabs, cutPolys } = state; let { ztOff, zMax, shadowAt, isIndexed} = state; let { workarea } = state; - let { process, stock } = settings; + let { controller, process, stock } = settings; if (op.down <= 0) { throw `invalid step down "${op.down}"`; @@ -206,20 +206,6 @@ class OpRough extends CamOp { } } - if (tabs) { - tabs.forEach(tab => { - tab.off = POLY.expand([tab.poly], toolDiam / 2).flat(); - }); - offset = cutTabs(tabs, offset, slice.z); - } - - if (!offset) return; - - if (process.camStockClipTo && stock.x && stock.y && stock.center) { - let rect = newPolygon().centerRectangle(stock.center, stock.x, stock.y); - offset = cutPolys([rect], offset, slice.z, true); - } - // elimate double inset on inners offset.forEach(op => { if (op.inner) { @@ -236,24 +222,42 @@ class OpRough extends CamOp { } }); + if (process.camStockClipTo && stock.x && stock.y && stock.center) { + let rect = newPolygon().centerRectangle(stock.center, stock.x + 0.001, stock.y + 0.001); + offset = cutPolys([rect], offset, slice.z, true); + } + + if (tabs) { + tabs.forEach(tab => { + tab.off = POLY.expand([tab.poly], toolDiam / 2).flat(); + }); + offset = cutTabs(tabs, offset); + } + + if (!offset) return; + slice.camLines = offset; if (roughLeaveZ) { - // offset roughing in Z as well to minimize - // tool marks on curved surfaces + // offset roughing in Z as well to minimize tool marks on curved surfaces // const roughLeaveZ = 1 * Math.min(roughDown, roughLeave / 2); - slice.camLines.forEach(p => { - p.setZ(p.getZ() + roughLeaveZ); - }); + for (let poly of slice.camLines) { + for (let point of poly.points) point.z += roughLeaveZ; + } + } + if (controller.devel) { + slice.output() + .setLayer("tabs clip", {line: 0xaa00aa}, true) + .addPolys(tabs.map(tab => tab.off).flat()); + slice.output() + .setLayer("slice", {line: 0xaaaa00}, true) + .addPolys(slice.topPolys()) + // .setLayer("top shadow", {line: 0x0000aa}) + // .addPolys(tshadow) + // .setLayer("rough shadow", {line: 0x00aa00}) + // .addPolys(shadow) + .setLayer("shadow clip", {line: 0xaa0000}) + .addPolys(shell); } - if (false) slice.output() - .setLayer("slice", {line: 0xaaaa00}, true) - .addPolys(slice.topPolys()) - // .setLayer("top shadow", {line: 0x0000aa}) - // .addPolys(tshadow) - // .setLayer("rough shadow", {line: 0x00aa00}) - // .addPolys(shadow) - .setLayer("rough shell", {line: 0xaa0000}) - .addPolys(shell); progress(0.5 + 0.5 * (index / slices.length)); }); diff --git a/src/kiri/mode/cam/slice.js b/src/kiri/mode/cam/slice.js index 80737bbb..fc797a70 100644 --- a/src/kiri/mode/cam/slice.js +++ b/src/kiri/mode/cam/slice.js @@ -801,7 +801,7 @@ function cutTabs(tabs, offset) { function cutPolys(polys, offset) { let noff = []; - offset.forEach(op => noff.appendAll(op.cut(POLY.union(polys, 0, true)))); + offset.forEach(op => noff.appendAll( op.cut(POLY.union(polys, 0, true), true) )); return healPolys(noff); } From 94f3f0d94396fe307bde7ff1a2f17bcf01018564 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 16 Nov 2025 13:31:31 -0500 Subject: [PATCH 130/151] fix outline stock clipto with offset origin, fix origin select with offset origin --- src/kiri/mode/cam/cl-origin.js | 4 ++-- src/kiri/mode/cam/op-outline.js | 15 ++++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/kiri/mode/cam/cl-origin.js b/src/kiri/mode/cam/cl-origin.js index c694f078..73fca4d9 100644 --- a/src/kiri/mode/cam/cl-origin.js +++ b/src/kiri/mode/cam/cl-origin.js @@ -140,8 +140,8 @@ function pointHoverUp(int, ev) { x += stock.x / 2; y += stock.y / 2; } - process.camOriginOffX = x; - process.camOriginOffY = y; + process.camOriginOffX = x - stock.center.x; + process.camOriginOffY = y - stock.center.y; process.camOriginOffZ = z; api.settings.update_fields(process); api.platform.update_origin(); diff --git a/src/kiri/mode/cam/op-outline.js b/src/kiri/mode/cam/op-outline.js index 81c11a62..9afac459 100644 --- a/src/kiri/mode/cam/op-outline.js +++ b/src/kiri/mode/cam/op-outline.js @@ -40,6 +40,8 @@ class OpOutline extends CamOp { let indices = slicer.interval(op.down, intopt); let trueShadow = process.camTrueShadow === true; let lastShadowZ; + let stockClip; + // shift out first (top-most) slice indices.shift(); // add flats to shadow @@ -188,6 +190,11 @@ class OpOutline extends CamOp { addDogbones(offset, toolDiam / 5); } + if (process.camStockClipTo && stock.x && stock.y && stock.center) { + stockClip = newPolygon().centerRectangle(stock.center, stock.x + 0.001, stock.y + 0.001); + offset = cutPolys([stockClip], offset, slice.z, true); + } + if (tabs) { tabs.forEach(tab => { tab.off = POLY.expand([tab.poly], toolDiam / 2).flat(); @@ -195,11 +202,6 @@ class OpOutline extends CamOp { offset = cutTabs(tabs, offset); } - if (process.camStockClipTo && stock.x && stock.y && stock.center) { - let rect = newPolygon().centerRectangle({x:0,y:0}, stock.x, stock.y); - offset = cutPolys([rect], offset, slice.z, true); - } - // offset.xout(`slice ${slice.z}`); slice.camLines = offset; }); @@ -215,6 +217,9 @@ class OpOutline extends CamOp { if (controller.devel) slice.output() .setLayer("shadow", {line: 0x557799}, false) .addPolys(slice.shadow) + if (controller.devel && stockClip) slice.output() + .setLayer("stock clip", {line: 0x557799}, false) + .addPolys([ stockClip ]) slice.output() .setLayer(state.layername, {face: color, line: color}) .addPolys(slice.camLines); From c01ee138e605dd1e6dece7d95c5ce26030fc33d9 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 16 Nov 2025 13:45:33 -0500 Subject: [PATCH 131/151] fix stock clipping for multiple models with offset centers --- src/kiri/mode/cam/op-outline.js | 8 ++++++-- src/kiri/mode/cam/op-rough.js | 10 +++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/kiri/mode/cam/op-outline.js b/src/kiri/mode/cam/op-outline.js index 9afac459..f1d3add7 100644 --- a/src/kiri/mode/cam/op-outline.js +++ b/src/kiri/mode/cam/op-outline.js @@ -17,10 +17,11 @@ class OpOutline extends CamOp { async slice(progress) { let { op, state } = this; - let { settings, slicer, addSlices, tshadow, thruHoles, unsafe, color } = state; + let { settings, slicer, addSlices, tshadow, thruHoles, unsafe, color, widget } = state; let { updateToolDiams, tabs, cutTabs, cutPolys, workarea, zMax, shadowAt } = state; let { process, stock } = settings; let { controller } = settings; + let center_off = widget.track.pos ?? { x: 0, y: 0, z: 0}; if (op.down <= 0) { throw `invalid step down "${op.down}"`; @@ -191,7 +192,10 @@ class OpOutline extends CamOp { } if (process.camStockClipTo && stock.x && stock.y && stock.center) { - stockClip = newPolygon().centerRectangle(stock.center, stock.x + 0.001, stock.y + 0.001); + let { center } = stock; + let x = center.x - center_off.x; + let y = center.y - center_off.y; + stockClip = newPolygon().centerRectangle({ x, y }, stock.x + 0.001, stock.y + 0.001); offset = cutPolys([stockClip], offset, slice.z, true); } diff --git a/src/kiri/mode/cam/op-rough.js b/src/kiri/mode/cam/op-rough.js index 7ecda0e0..3b2d74f4 100644 --- a/src/kiri/mode/cam/op-rough.js +++ b/src/kiri/mode/cam/op-rough.js @@ -15,11 +15,12 @@ class OpRough extends CamOp { async slice(progress) { let { op, state } = this; - let { settings, slicer, addSlices, unsafe, color } = state; + let { settings, slicer, addSlices, unsafe, color, widget } = state; let { updateToolDiams, thruHoles, tabs, cutTabs, cutPolys } = state; let { ztOff, zMax, shadowAt, isIndexed} = state; let { workarea } = state; let { controller, process, stock } = settings; + let center_off = widget.track.pos ?? { x: 0, y: 0, z: 0}; if (op.down <= 0) { throw `invalid step down "${op.down}"`; @@ -223,7 +224,10 @@ class OpRough extends CamOp { }); if (process.camStockClipTo && stock.x && stock.y && stock.center) { - let rect = newPolygon().centerRectangle(stock.center, stock.x + 0.001, stock.y + 0.001); + let { center } = stock; + let x = center.x - center_off.x; + let y = center.y - center_off.y; + let rect = newPolygon().centerRectangle({ x, y }, stock.x + 0.001, stock.y + 0.001); offset = cutPolys([rect], offset, slice.z, true); } @@ -245,7 +249,7 @@ class OpRough extends CamOp { } } if (controller.devel) { - slice.output() + if (tabs) slice.output() .setLayer("tabs clip", {line: 0xaa00aa}, true) .addPolys(tabs.map(tab => tab.off).flat()); slice.output() From 55ad723ad7c37e3a986c8c7dc6e6b3ba62bc841f Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 16 Nov 2025 14:02:48 -0500 Subject: [PATCH 132/151] fix multi-widget safe move between ops --- src/kiri/mode/cam/prepare.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index 9db0a70e..268ed230 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -337,7 +337,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { // 1. move to safe z of current point preserving angle // 2. move to safe z of new point preserving old angle // 3. move to safe z of new point with new angle - if (lop !== currentOp && lastPoint) { + if (lop && lop !== currentOp && lastPoint) { camOut(lastPoint.clone().setZ(zsafe).setA(lastPoint.a), 0); camOut(point.clone().setZ(zsafe).setA(lastPoint.a), 0); camOut(point.clone().setZ(zsafe), 0); From ca4df7c223fbb232d49c7adfaa6562f0595d9a44 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 16 Nov 2025 14:28:12 -0500 Subject: [PATCH 133/151] add manifold indexed animation option --- src/kiri/core/conf.js | 1 + src/kiri/core/init.js | 3 +++ src/kiri/mode/cam/anim-3d-be.js | 15 +++++++-------- web/kiri/lang/en.js | 2 ++ 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/kiri/core/conf.js b/src/kiri/core/conf.js index 5ac17300..af6e70f9 100644 --- a/src/kiri/core/conf.js +++ b/src/kiri/core/conf.js @@ -932,6 +932,7 @@ export const conf = { freeLayout: true, healMesh: false, lineType: "path", + manifold: false, ortho: false, reverseZoom: true, scrolls: true, diff --git a/src/kiri/core/init.js b/src/kiri/core/init.js index 29dd46a2..a8968d1a 100644 --- a/src/kiri/core/init.js +++ b/src/kiri/core/init.js @@ -155,6 +155,7 @@ function booleanSave() { control.freeLayout = ui.freeLayout.checked; control.healMesh = ui.healMesh.checked; control.ortho = ui.ortho.checked; + control.manifold = ui.manifold.checked; control.reverseZoom = ui.reverseZoom.checked; control.scrolls = ui.scrolls.checked; control.shiny = ui.shiny.checked; @@ -1046,6 +1047,7 @@ function init_one() { showSpeeds: newBoolean(LANG.op_sped_s, speedSave, {title:LANG.op_sped_l}), shiny: newBoolean(LANG.op_shny_s, booleanSave, {title:LANG.op_shny_l, modes:FDM}), lineType: newSelect(LANG.op_line_s, {title: LANG.op_line_l, action: lineTypeSave, modes:FDM}, "linetype"), + manifold: newBoolean(LANG.op_mani_s, booleanSave, {title: LANG.op_mani_l, modes:CAM}, "manifold"), animesh: newSelect(LANG.op_anim_s, {title: LANG.op_anim_l, action: aniMeshSave, modes:CAM}, "animesh"), units: newSelect(LANG.op_unit_s, {title: LANG.op_unit_l, action: unitsSave, modes:CAM}, "units"), edgeangle: newInput(LANG.op_spoa_s, {title:LANG.op_spoa_l, convert:toFloat, size:3}), @@ -1639,6 +1641,7 @@ function init_two() { ui.devel.checked = control.devel; ui.freeLayout.checked = control.freeLayout; ui.healMesh.checked = control.healMesh; + ui.manifold.checked = control.manifold; ui.ortho.checked = control.ortho; ui.reverseZoom.checked = control.reverseZoom; ui.showOrigin.checked = control.showOrigin; diff --git a/src/kiri/mode/cam/anim-3d-be.js b/src/kiri/mode/cam/anim-3d-be.js index 13df6084..1c6fa9f9 100644 --- a/src/kiri/mode/cam/anim-3d-be.js +++ b/src/kiri/mode/cam/anim-3d-be.js @@ -21,7 +21,6 @@ let nextMeshID = 1, toolMesh, toolRadius, toolUpdateMsg, - showStock = false, animateClear = false, animating = false, renderDone = false, @@ -36,11 +35,11 @@ export function init(worker) { dispatch.animate_setup2 = function (data, send) { const { settings } = data; - const { process } = settings; + const { controller, process } = settings; const print = worker.current.print; const density = parseInt(settings.controller.animesh) * 1000; const isIndexed = process.camStockIndexed; - +console.log({ controller }); pathIndex = 0; path = print.output.flat(); tools = settings.tools; @@ -61,14 +60,14 @@ export function init(worker) { const sliceCount = parseInt(settings.controller.animesh || 2000) / 100; const sliceWidth = stock.x / sliceCount; - if (showStock) + if (controller.manifold) for (let i = 0; i < sliceCount; i++) { let xmin = -(x / 2) + (i * sliceWidth) + sliceWidth / 2; let slice = new Stock(sliceWidth, y, z).translate(xmin, 0, 0); stockSlices.push(slice); slice.updateMesh([]); slice.send(send); - // send({ mesh_move: { id: slice.id, pos: { x:0, y:0, z: stock.z/2} } }); + // send.data({ mesh_move: { id: slice.id, pos: { x:0, y:0, z: stock.z/2} } }); } send.done(); @@ -175,7 +174,7 @@ function renderPath(send) { const sp = next.speed; const moves = []; for (let i = 0, x = lp.x, y = lp.y, z = lp.z, a = lp.a; i < st; i++) { - moves.push({ x, y, z, a, md: sd, dx, dy, dz, sp }); + moves.push({ x, y, z, a, md: sd, dx, dy, dz, da, sp }); x += mx; y += my; z += mz; @@ -202,11 +201,11 @@ function renderMoves(id, moves, send, seed = 0) { if (!pos) { throw `no pos @ ${index} of ${moves.length}`; } - const { dx, dy, dz, sp, md } = pos; + const { dx, dy, dz, da, sp, md } = pos; toolMove(pos); // console.log('renderMoves', {id, moves, seed}); let subs = 0; - if (dx || dy || dz < 0) + if (dx || dy || dz < 0 || da) for (let slice of stockSlices) { if (slice.bounds.intersectsBox(toolMesh.bounds)) { slice.subtractTool(toolMesh); diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index b0a02f3c..4ac9afa8 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -319,6 +319,8 @@ self.lang['en-us'] = { op_unit_l: ["workspace units affects","speeds and distances"], op_anim_s: "animate", op_anim_l: ["animation mesh density","higher is more dense","takes more memory","and is slower"], + op_mani_s: "manifold", + op_mani_l: ["in stock indexed mode","use boolean visualiation","this is very expensive","and likely very slow"], op_exgl_l: ["show Grid:Local devices in export dialog","includes Grid:Bots and OctoPrint plugins"], op_exgh_l: ["legacy Grid:Host local network support"], op_exop_l: ["legacy OctoPrint local network support","Grid:Space OctoPrint plugin recommended"], From 9be915071c125070da22cad08b7605dab52486ca Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 16 Nov 2025 14:37:18 -0500 Subject: [PATCH 134/151] add cnc index manifold animation language keys --- web/kiri/lang/da.js | 2 ++ web/kiri/lang/de-de.js | 2 ++ web/kiri/lang/es-es.js | 2 ++ web/kiri/lang/fr.js | 2 ++ web/kiri/lang/pl-pl.js | 2 ++ web/kiri/lang/pt.js | 2 ++ web/kiri/lang/zh.js | 2 ++ 7 files changed, 14 insertions(+) diff --git a/web/kiri/lang/da.js b/web/kiri/lang/da.js index 6cee3a2a..b98ac240 100644 --- a/web/kiri/lang/da.js +++ b/web/kiri/lang/da.js @@ -318,6 +318,8 @@ self.lang['da-dk'] = { op_unit_l: ["arbejdsområde enheder påvirker","hastigheder og distancer"], op_anim_s: "animer", op_anim_l: ["animation mesh tæthed","højere er mere tæt","tager mere hukommelse","og er langsommere"], + op_mani_s: "mangfoldig", + op_mani_l: ["i indekseret materiale tilstand","brug boolesk visualisering","dette er meget dyrt","og sandsynligvis meget langsom"], op_exgl_l: ["vis Grid:Local enheder i eksport dialog","inkluderer Grid:Bots og OctoPrint plugins"], op_exgh_l: ["legacy Grid:Host lokalt netværk support"], op_exop_l: ["legacy OctoPrint lokalt netværk support","Grid:Space OctoPrint plugin anbefalet"], diff --git a/web/kiri/lang/de-de.js b/web/kiri/lang/de-de.js index 109a9cee..96329723 100644 --- a/web/kiri/lang/de-de.js +++ b/web/kiri/lang/de-de.js @@ -319,6 +319,8 @@ self.lang['de-de'] = { op_unit_l: ["Arbeitsbereich-Einheiten beeinflussen","Geschwindigkeiten und Distanzen"], op_anim_s: "Animieren", op_anim_l: ["Animations-Mesh-Dichte","höher ist dichter","benötigt mehr Speicher","und ist langsamer"], + op_mani_s: "mannigfaltig", + op_mani_l: ["im indizierten Materialvorrat-Modus","boolesche Visualisierung verwenden","dies ist sehr rechenintensiv","und wahrscheinlich sehr langsam"], op_exgl_l: ["Grid:Local Geräte im Export-Dialog anzeigen","inkludiert Grid:Bots und OctoPrint Plugins"], op_exgh_l: ["Legacy Grid:Host lokale Netzwerkunterstützung"], op_exop_l: ["Legacy OctoPrint lokale Netzwerkunterstützung","Grid:Space OctoPrint Plugin empfohlen"], diff --git a/web/kiri/lang/es-es.js b/web/kiri/lang/es-es.js index 294bdfa1..62092d42 100644 --- a/web/kiri/lang/es-es.js +++ b/web/kiri/lang/es-es.js @@ -319,6 +319,8 @@ self.lang['es-es'] = { op_unit_l: ["las unidades del espacio de trabajo afectan","velocidades y distancias"], op_anim_s: "animar", op_anim_l: ["densidad de malla de animación","mayor es más denso","requiere más memoria","y es más lento"], + op_mani_s: "variedad", + op_mani_l: ["en modo de material indexado","usar visualización booleana","esto es muy costoso","y probablemente muy lento"], op_exgl_l: ["mostrar dispositivos Grid:Local en diálogo de exportación","incluye Grid:Bots y plugins de OctoPrint"], op_exgh_l: ["soporte heredado de red local Grid:Host"], op_exop_l: ["soporte heredado de red local OctoPrint","se recomienda el plugin Grid:Space OctoPrint"], diff --git a/web/kiri/lang/fr.js b/web/kiri/lang/fr.js index 1428246d..17f60a5a 100644 --- a/web/kiri/lang/fr.js +++ b/web/kiri/lang/fr.js @@ -319,6 +319,8 @@ self.lang['fr-fr'] = { op_unit_l: ["les unités de l'espace de travail affectent","les vitesses et distances"], op_anim_s: "animer", op_anim_l: ["densité du maillage d'animation","plus élevé est plus dense","nécessite plus de mémoire","et est plus lent"], + op_mani_s: "variété", + op_mani_l: ["en mode matériau indexé","utiliser la visualisation booléenne","ceci est très coûteux","et probablement très lent"], op_exgl_l: ["afficher les appareils Grid:Local dans le dialogue d'export","inclut les plugins Grid:Bots et OctoPrint"], op_exgh_l: ["support réseau local Grid:Host legacy"], op_exop_l: ["support réseau local OctoPrint legacy","plugin Grid:Space OctoPrint recommandé"], diff --git a/web/kiri/lang/pl-pl.js b/web/kiri/lang/pl-pl.js index a98c16c0..4134e581 100644 --- a/web/kiri/lang/pl-pl.js +++ b/web/kiri/lang/pl-pl.js @@ -318,6 +318,8 @@ self.lang['pl-pl'] = { op_unit_l: ["jednostki przestrzeni roboczej wpływają","na prędkości i odległości"], op_anim_s: "animuj", op_anim_l: ["gęstość siatki animacji","wyższa jest bardziej gęsta","zajmuje więcej pamięci","i jest wolniejsza"], + op_mani_s: "rozmaitość", + op_mani_l: ["w trybie indeksowanego materiału","użyj wizualizacji boolowskiej","to jest bardzo kosztowne","i prawdopodobnie bardzo wolne"], op_exgl_l: ["pokaż urządzenia Grid:Local w oknie dialogowym eksportu","zawiera Grid:Bots i wtyczki OctoPrint"], op_exgh_l: ["starsze wsparcie sieci lokalnej Grid:Host"], op_exop_l: ["starsze wsparcie sieci lokalnej OctoPrint","zalecana wtyczka Grid:Space OctoPrint"], diff --git a/web/kiri/lang/pt.js b/web/kiri/lang/pt.js index 7676c61c..447c5da8 100644 --- a/web/kiri/lang/pt.js +++ b/web/kiri/lang/pt.js @@ -319,6 +319,8 @@ self.lang['pt-pt'] = { op_unit_l: ["unidades de espaço de trabalho afecta","velocidades e distâncias"], op_anim_s: "animar", op_anim_l: ["densidade da malha de animação","mais alto é mais denso","usa mais memória","e é mais lento"], + op_mani_s: "variedade", + op_mani_l: ["no modo de material indexado","usar visualização booleana","isso é muito caro","e provavelmente muito lento"], op_exgl_l: ["mostrar dispositivos Grid:Local no diálogo de exportação","inclui Grid:Bots e plugins OctoPrint"], op_exgh_l: ["suporte de rede local Grid:Host legado"], op_exop_l: ["suporte de rede local OctoPrint legado","plugin Grid:Space OctoPrint recomendado"], diff --git a/web/kiri/lang/zh.js b/web/kiri/lang/zh.js index fa92b937..c34b6d9e 100644 --- a/web/kiri/lang/zh.js +++ b/web/kiri/lang/zh.js @@ -318,6 +318,8 @@ self.lang['zh'] = { op_unit_l: ["工作区单位影响","速度和距离"], op_anim_s: "动画", op_anim_l: ["动画网格密度","更高则更密集","占用更多内存","速度更慢"], + op_mani_s: "流形", + op_mani_l: ["在索引材料模式下","使用布尔可视化","这非常昂贵","而且可能非常慢"], op_exgl_l: ["在导出对话框中显示Grid:Local设备","包括Grid:Bots和OctoPrint插件"], op_exgh_l: ["传统Grid:Host本地网络支持"], op_exop_l: ["传统OctoPrint本地网络支持","推荐使用Grid:Space OctoPrint插件"], From 0d10fb7dfc849856b0d1f4830a2c58652668d9fc Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 16 Nov 2025 15:10:42 -0500 Subject: [PATCH 135/151] fix cam index stock toggle, add path toggle --- src/kiri/mode/cam/anim-3d-be.js | 2 +- src/kiri/mode/cam/anim-3d-fe.js | 36 ++++++++++++++++++++++++++++----- src/kiri/mode/cam/init-menu.js | 1 + 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/kiri/mode/cam/anim-3d-be.js b/src/kiri/mode/cam/anim-3d-be.js index 1c6fa9f9..1288c65d 100644 --- a/src/kiri/mode/cam/anim-3d-be.js +++ b/src/kiri/mode/cam/anim-3d-be.js @@ -39,7 +39,7 @@ export function init(worker) { const print = worker.current.print; const density = parseInt(settings.controller.animesh) * 1000; const isIndexed = process.camStockIndexed; -console.log({ controller }); + pathIndex = 0; path = print.output.flat(); tools = settings.tools; diff --git a/src/kiri/mode/cam/anim-3d-fe.js b/src/kiri/mode/cam/anim-3d-fe.js index 69ee3b7b..2329bc59 100644 --- a/src/kiri/mode/cam/anim-3d-fe.js +++ b/src/kiri/mode/cam/anim-3d-fe.js @@ -20,6 +20,7 @@ let meshes = {}, origin, color = 0, dark = false, + manifold = false, A2R = Math.PI / 180; export function animate_clear2(api) { @@ -37,6 +38,7 @@ export function animate2(api, delay) { let alert = api.alerts.show("building animation"); let settings = api.conf.get(); dark = settings.controller.dark; + manifold = settings.controller.manifold; client.animate_setup2(settings, data => { handleUpdate(data); if (data) { @@ -52,7 +54,8 @@ export function animate2(api, delay) { speed: anim.speed, trans: anim.trans, model: anim.model, - shade: anim.shade + shade: anim.shade, + path: anim.path }); Object.assign(label, { progress: anim.progress, @@ -63,6 +66,14 @@ export function animate2(api, delay) { a: anim.vala }); + if (manifold) { + anim.trans.classList.remove('hide'); + // anim.shade.classList.remove('hide'); + } else { + anim.trans.classList.add('hide'); + // anim.shade.classList.add('hide'); + } + updateSpeed(0); setTimeout(step, delay || 0); toggleTrans(undefined, false); @@ -76,6 +87,7 @@ export function animate2(api, delay) { button.trans.onclick = toggleTrans; button.model.onclick = toggleModel; button.shade.onclick = toggleStock; + button.path.onclick = togglePath; button.play.style.display = ''; button.pause.style.display = 'none'; @@ -119,7 +131,8 @@ function initPathMesh() { pos = new Float32Array(max * 6), lines = new THREE.LineSegments(geo, mat), vec = new THREE.Vector3(0,0,0), - ang = new THREE.Vector3(1,0,0); + ang = new THREE.Vector3(1,0,0), + show = api.local.get('cam.anim.path') ?? true; geo.setAttribute('position', new THREE.BufferAttribute(pos, 3)); let track = lineTracker = { xro(p) { @@ -159,9 +172,15 @@ function initPathMesh() { lines.setRotationFromEuler(rot); }, visible(bool) { - if (bool !== lines.visible) { + if (show && bool !== lines.visible) { lines.visible = bool; + } else if (!show) { + lines.visible = false; } + }, + show(bool) { + show = bool; + lines.visible = bool; } } space.world.add(lines); @@ -207,8 +226,15 @@ function toggleModel(ev, bool) { } function toggleStock(ev, bool, set) { - set !== false && api.local.toggle('cam.anim.stock', bool); - return api.event.emit('cam.stock.toggle', bool ?? undefined); + bool = api.local.toggle('cam.anim.stock', bool); + for (let [ id, mesh ] of Object.entries(meshes)) { + if (id >= 0) mesh.visible = bool; + } +} + +function togglePath(ev, bool, set) { + bool = api.local.toggle('cam.anim.path', bool); + lineTracker?.show(bool); } function toggleTrans(ev, bool) { diff --git a/src/kiri/mode/cam/init-menu.js b/src/kiri/mode/cam/init-menu.js index ce654c00..c1ae578b 100644 --- a/src/kiri/mode/cam/init-menu.js +++ b/src/kiri/mode/cam/init-menu.js @@ -58,6 +58,7 @@ export function menu() { anim.trans = newButton(null,null,{icon:'',title:"transparency",class:"padleft"}), anim.model = newButton(null,null,{icon:'',title:"show model"}), anim.shade = newButton(null,null,{icon:'',title:"stock box"}), + anim.path = newButton(null,null,{icon:'',title:"path"}), ]) }, From 5fd8e3bed911ce6da91169cbfabfd2dc8633508c Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 16 Nov 2025 17:08:14 -0500 Subject: [PATCH 136/151] improve smoothing, pocket devmode visuals --- package.json | 3 +-- src/kiri/mode/cam/op-pocket.js | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 06e1f40f..82e5c825 100644 --- a/package.json +++ b/package.json @@ -114,8 +114,7 @@ "prebuild": "npm run setup && cross-env ELECTRON_BUILD=1 npm run pack-dev && node bin/electron-pre.js", "preinstall": "node bin/install-pre.js", "prod": "npm run pack-prod && gs-app-server", - "setup-mods": "cd mods && npm i", - "setup": "npm run clean && npm run setup-mods && npm i && npm run webpack-ext", + "setup": "npm run clean && npm i && npm run webpack-ext", "start-dbg": "npm run prebuild && electron . --debugg", "start-ddb": "npm run prebuild && electron . --devel --debugg", "start-dev": "npm run prebuild prod && electron . --devel", diff --git a/src/kiri/mode/cam/op-pocket.js b/src/kiri/mode/cam/op-pocket.js index 68000d37..2e63becd 100644 --- a/src/kiri/mode/cam/op-pocket.js +++ b/src/kiri/mode/cam/op-pocket.js @@ -19,13 +19,11 @@ class OpPocket extends CamOp { async slice(progress) { const pocket = this; - const debug = false; let { op, state } = this; let { tool, rate, down, plunge, expand, contour, smooth, tolerance } = op; let { ov_botz, ov_conv } = op; let { settings, widget, addSlices, zBottom, zThru, tabs, color } = state; let { updateToolDiams, cutTabs, healPolys, shadowAt, workarea } = state; - let { process } = settings; zBottom = ov_botz ? workarea.bottom_stock + ov_botz : zBottom; // generate tracing offsets from chosen features let sliceOut; @@ -36,6 +34,8 @@ class OpPocket extends CamOp { let cutdir = ov_conv; let engrave = contour && op.engrave; let zTop = workarea.top_z; + let devel = settings.controller.devel; + let smoothVal = (smooth ?? 0) / 10; if (contour) { down = 0; this.topo = await Topo({ @@ -48,6 +48,7 @@ class OpPocket extends CamOp { }, contour: { tool, + step: toolOver, tolerance, inside: true, axis: "-" @@ -92,14 +93,14 @@ class OpPocket extends CamOp { let clip = [], shadow; if (contour) { if (smooth) { - clip = POLY.offset(POLY.offset([ poly ], smooth), -smooth); + clip = POLY.offset(POLY.offset([ poly ], smoothVal), -smoothVal); } else { clip = [ poly ]; } } else { shadow = shadowAt(z); if (smooth) { - shadow = POLY.setZ(POLY.offset(POLY.offset(shadow, smooth), -smooth), z); + shadow = POLY.setZ(POLY.offset(POLY.offset(shadow, smoothVal), -smoothVal), z); } POLY.subtract([ poly ], shadow, clip, undefined, undefined, 0); if (op.outline) { @@ -137,9 +138,9 @@ class OpPocket extends CamOp { slice.output() .setLayer(state.layername, {line: color}, false) .addPolys(slice.camLines) - if (debug && shadow) slice.output() + if (devel && shadow) slice.output() .setLayer("pocket shadow", {line: 0xff8811}, false) - .addPolys(shadow) + .addPolys(shadow); if (!contour) { progress(zpro, "pocket"); } @@ -168,17 +169,17 @@ class OpPocket extends CamOp { outline = POLY.setWinding(outline, cutdir, false); outline = healPolys(outline); if (smooth) { - outline = POLY.offset(POLY.offset(outline, smooth), -smooth); + outline = POLY.offset(POLY.offset(outline, smoothVal), -smoothVal); } if (outline.length) { // option to skip interior features (holes, pillars) if (op.outline) { POLY.clearInner(outline); } - if (debug) newSliceOut(zmin).output() + clearZ(outline, zmin + 0.0001, down); + if (devel && sliceOut?.length) sliceOut[0].output() .setLayer("pocket area", {line: 0x1188ff}, false) .addPolys(outline) - clearZ(outline, zmin + 0.0001, down); progress(1, "pocket"); } } From 21eda9d9c35a09c5fbcd1c08dfd8ceba7101d6d7 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 16 Nov 2025 17:29:27 -0500 Subject: [PATCH 137/151] hide install menu in onshape --- src/main/kiri.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/kiri.js b/src/main/kiri.js index 918898a5..12dcd558 100644 --- a/src/main/kiri.js +++ b/src/main/kiri.js @@ -58,6 +58,10 @@ function checkReady() { bootctrl.postMessage({ clear: true, disable: true }); location.reload(); } + } else if (api.onshape) { + $('install').classList.add('hide'); + $('uninstall').classList.add('hide'); + $('app-quit').classList.add('hide'); } else { $('install').onclick = () => { location.replace('/boot'); From 7f38f5e2d6aadef1ad9943ce970431b9d665bd6f Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 16 Nov 2025 17:56:06 -0500 Subject: [PATCH 138/151] move bambu init to load-done --- mods/bambu/bambu.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/bambu/bambu.js b/mods/bambu/bambu.js index d272f05f..76b43dfa 100644 --- a/mods/bambu/bambu.js +++ b/mods/bambu/bambu.js @@ -661,7 +661,7 @@ self.kiri.load(api => { } }); - api.event.on("init-done", function() { + api.event.on("load-done", function() { if (init) { return; } From 8926a09de9e324a3a1a7b9da53a596674f8803a1 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 16 Nov 2025 18:26:14 -0500 Subject: [PATCH 139/151] fix safe moves betwen ops to account for widget platform offset --- src/kiri/mode/cam/prepare.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index 268ed230..99e5857b 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -338,7 +338,9 @@ export function prepEach(widget, settings, print, firstPoint, update) { // 2. move to safe z of new point preserving old angle // 3. move to safe z of new point with new angle if (lop && lop !== currentOp && lastPoint) { - camOut(lastPoint.clone().setZ(zsafe).setA(lastPoint.a), 0); + // compensate for applyWidgetMovement() applied to lastPoint + let lpo = lastPoint.clone().move({ x: -wmx, y: -wmy, z: -zadd }); + camOut(lpo.clone().setZ(zsafe).setA(lastPoint.a), 0); camOut(point.clone().setZ(zsafe).setA(lastPoint.a), 0); camOut(point.clone().setZ(zsafe), 0); } From 256e9fcf7332ecbd01e1cc1d1a08739c6c101780 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 16 Nov 2025 19:05:42 -0500 Subject: [PATCH 140/151] disable gpu for pocket contour, update defaults --- src/kiri/core/conf.js | 2 +- src/kiri/mode/cam/op-pocket.js | 47 +++++++++++++++++++--------------- src/kiri/mode/cam/topo3.js | 5 ++-- src/main/kiri.js | 4 --- 4 files changed, 30 insertions(+), 28 deletions(-) diff --git a/src/kiri/core/conf.js b/src/kiri/core/conf.js index af6e70f9..04a0f130 100644 --- a/src/kiri/core/conf.js +++ b/src/kiri/core/conf.js @@ -537,7 +537,7 @@ export const conf = { camPocketOver: 0.25, camPocketPlunge: 200, camPocketRefine: 20, - camPocketSmooth: 0, + camPocketSmooth: 1, camPocketSpeed: 250, camPocketSpindle: 1000, camPocketTool: 1000, diff --git a/src/kiri/mode/cam/op-pocket.js b/src/kiri/mode/cam/op-pocket.js index 2e63becd..45f84599 100644 --- a/src/kiri/mode/cam/op-pocket.js +++ b/src/kiri/mode/cam/op-pocket.js @@ -38,23 +38,14 @@ class OpPocket extends CamOp { let smoothVal = (smooth ?? 0) / 10; if (contour) { down = 0; - this.topo = await Topo({ - // onupdate: (update, msg) => { - onupdate: (index, total, msg) => { - progress((index / total) * 0.9, msg); - }, - ondone: (slices) => { - // console.log({ contour: slices }); - }, - contour: { - tool, - step: toolOver, - tolerance, - inside: true, - axis: "-" - }, - state: state - }); + this.contour = { + axis: "-", + inside: true, + nogpu: true, + step: toolOver, + tolerance, + tool, + }; } updateToolDiams(toolDiam); if (tabs) { @@ -70,7 +61,7 @@ class OpPocket extends CamOp { sliceOut.push(slice); return slice; } - function clearZ(polys, z, down) { + async function clearZ(polys, z, down) { if (down) { // adjust step down to a value <= down that // ends on the lowest z specified @@ -131,7 +122,7 @@ class OpPocket extends CamOp { } POLY.setWinding(slice.camLines, cutdir, false); if (contour) { - slice.camLines = pocket.conform(slice.camLines, op.refine, engrave, pct => { + slice.camLines = await pocket.conform(slice.camLines, op.refine, engrave, pct => { progress(0.9 + (zpro + zinc * pct) * 0.1, "conform"); }); } @@ -176,7 +167,7 @@ class OpPocket extends CamOp { if (op.outline) { POLY.clearInner(outline); } - clearZ(outline, zmin + 0.0001, down); + await clearZ(outline, zmin + 0.0001, down); if (devel && sliceOut?.length) sliceOut[0].output() .setLayer("pocket area", {line: 0x1188ff}, false) .addPolys(outline) @@ -185,7 +176,21 @@ class OpPocket extends CamOp { } // mold cam output lines to the surface of the topo offset by tool geometry - conform(camLines, refine, engrave, progress) { + async conform(camLines, refine, engrave, progress) { + if (!this.topo) { + console.log('deferred topo'); + this.topo = await Topo({ + // onupdate: (update, msg) => { + onupdate: (index, total, msg) => { + progress((index / total) * 0.9, msg); + }, + ondone: (slices) => { + // console.log({ contour: slices }); + }, + contour: this.contour, + state: this.state + }); + } const topo = this.topo; // re-segment polygon to a higher resolution const hirez = camLines.map(p => p.segment(topo.tolerance * 2)); diff --git a/src/kiri/mode/cam/topo3.js b/src/kiri/mode/cam/topo3.js index 110c86a9..e42f31ef 100644 --- a/src/kiri/mode/cam/topo3.js +++ b/src/kiri/mode/cam/topo3.js @@ -102,7 +102,7 @@ export class Topo { newslices.push(debug); } - if (webGPU) { + if (webGPU && !contour.nogpu) { // invert tool Z offset for gpu code let toolBounds = new THREE.Box3() .expandByPoint({ x: -toolDiameter/2, y: -toolDiameter/2, z: 0 }) @@ -137,8 +137,9 @@ export class Topo { // console.timeEnd('swap XY vertices'); } + let trace = contour.trace; let gpu = await self.get_raster_gpu({ - mode: "planar", + mode: trace ? "tracing" : "planar", resolution }); let xStep = density; diff --git a/src/main/kiri.js b/src/main/kiri.js index 12dcd558..918898a5 100644 --- a/src/main/kiri.js +++ b/src/main/kiri.js @@ -58,10 +58,6 @@ function checkReady() { bootctrl.postMessage({ clear: true, disable: true }); location.reload(); } - } else if (api.onshape) { - $('install').classList.add('hide'); - $('uninstall').classList.add('hide'); - $('app-quit').classList.add('hide'); } else { $('install').onclick = () => { location.replace('/boot'); From cb758bf4afb6f38580bca508a1ae167ef5561bdb Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 17 Nov 2025 13:38:49 -0500 Subject: [PATCH 141/151] update raster-path pkg dep. rm unused vars --- package.json | 2 +- src/kiri/mode/cam/op-outline.js | 6 +++--- src/kiri/mode/cam/op-pocket.js | 2 +- src/kiri/mode/cam/op-rough.js | 4 +--- src/kiri/mode/cam/op-trace.js | 1 - src/kiri/mode/cam/prepare.js | 13 ------------- 6 files changed, 6 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 82e5c825..1e56a302 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@gridspace/app-server": "^0.0.20", "@gridspace/basic-ftp": "github:gridspace/basic-ftp#v5.0.5-gridspace", "@gridspace/net-level-client": "^0.2.3", - "@gridspace/raster-path": "^1.0.6", + "@gridspace/raster-path": "^1.0.7", "@tracespace/parser": "^5.0.0-next.0", "@tweenjs/tween.js": "^16.6.0", "aedes": "^0.51.3", diff --git a/src/kiri/mode/cam/op-outline.js b/src/kiri/mode/cam/op-outline.js index f1d3add7..7978eb3f 100644 --- a/src/kiri/mode/cam/op-outline.js +++ b/src/kiri/mode/cam/op-outline.js @@ -237,9 +237,9 @@ class OpOutline extends CamOp { let { op, state, sliceOut } = this; let { setTool, setSpindle, setPrintPoint } = ops; let { polyEmit, depthOutlinePath } = ops; - let { camOut, newLayer, printPoint } = ops; - let { settings, widget } = state; - let { process, controller } = settings; + let { newLayer, printPoint } = ops; + let { settings } = state; + let { process } = settings; let easeDown = process.camEaseDown; let toolDiam = this.toolDiam; diff --git a/src/kiri/mode/cam/op-pocket.js b/src/kiri/mode/cam/op-pocket.js index 45f84599..6af05b09 100644 --- a/src/kiri/mode/cam/op-pocket.js +++ b/src/kiri/mode/cam/op-pocket.js @@ -22,7 +22,7 @@ class OpPocket extends CamOp { let { op, state } = this; let { tool, rate, down, plunge, expand, contour, smooth, tolerance } = op; let { ov_botz, ov_conv } = op; - let { settings, widget, addSlices, zBottom, zThru, tabs, color } = state; + let { settings, widget, addSlices, zBottom, tabs, color } = state; let { updateToolDiams, cutTabs, healPolys, shadowAt, workarea } = state; zBottom = ov_botz ? workarea.bottom_stock + ov_botz : zBottom; // generate tracing offsets from chosen features diff --git a/src/kiri/mode/cam/op-rough.js b/src/kiri/mode/cam/op-rough.js index 3b2d74f4..21251a11 100644 --- a/src/kiri/mode/cam/op-rough.js +++ b/src/kiri/mode/cam/op-rough.js @@ -297,15 +297,13 @@ class OpRough extends CamOp { prepare(ops, progress) { let { op, state, sliceOut, camFaces } = this; - let { setTool, setSpindle, setPrintPoint, sliceOutput, polyEmit } = ops; - let { camOut, newLayer, printPoint } = ops; + let { setTool, setSpindle, setPrintPoint, sliceOutput, polyEmit, newLayer, printPoint } = ops; let { settings } = state; let { process } = settings; let easeDown = process.camEaseDown; let cutdir = op.ov_conv; let depthFirst = process.camDepthFirst && !state.isIndexed; - let depthData = []; setTool(op.tool, op.rate, op.plunge); setSpindle(op.spindle); diff --git a/src/kiri/mode/cam/op-trace.js b/src/kiri/mode/cam/op-trace.js index c38b646b..1ce69b33 100644 --- a/src/kiri/mode/cam/op-trace.js +++ b/src/kiri/mode/cam/op-trace.js @@ -295,7 +295,6 @@ class OpTrace extends CamOp { prepare(ops, progress) { let { op, state } = this; - let { settings } = state; let { setTool, setSpindle } = ops; setTool(op.tool, op.rate); diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index 99e5857b..5fd17e2c 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -684,19 +684,6 @@ export function prepEach(widget, settings, print, firstPoint, update) { // make top start offset configurable printPoint = firstPoint || origin; - // accumulated data for depth-first optimizations - // let depthData = { - // rough: [], - // outline: [], - // roughDiam: 0, - // outlineDiam: 0, - // contourx: [], - // contoury: [], - // trace: [], - // drill: [], - // layer: 0, - // }; - let ops = { stock, setTool, From 17d293a810d2a9d965a0b53dc33ff38bf31508c9 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 18 Nov 2025 00:41:10 -0500 Subject: [PATCH 142/151] sort slice/prep function bundles --- src/kiri/mode/cam/prepare.js | 34 +++++++++++++++++----------------- src/kiri/mode/cam/slice.js | 32 ++++++++++++++++---------------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index 5fd17e2c..60c70321 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -685,31 +685,31 @@ export function prepEach(widget, settings, print, firstPoint, update) { printPoint = firstPoint || origin; let ops = { - stock, - setTool, - setDrill, - setSpindle, - setTolerance, - setPrintPoint, - setLasering, - getPrintPoint() { return printPoint }, - printPoint, - newLayer, addGCode, + bounds, camOut, - polyEmit, - poly2polyEmit, - tip2tipEmit, - depthRoughPath, depthOutlinePath, - sliceOutput, + depthRoughPath, emitDrills, emitTrace, - bounds, + getPrintPoint() { return printPoint }, + lastPoint: () => { return lastPoint }, + newLayer, + poly2polyEmit, + polyEmit, + printPoint, + setDrill, + setLasering, + setPrintPoint, + setSpindle, + setTolerance, + setTool, + sliceOutput, + stock, + tip2tipEmit, zclear, zmax, zsafe, - lastPoint: () => { return lastPoint } }; let opSum = 0; diff --git a/src/kiri/mode/cam/slice.js b/src/kiri/mode/cam/slice.js index fc797a70..a549505f 100644 --- a/src/kiri/mode/cam/slice.js +++ b/src/kiri/mode/cam/slice.js @@ -158,31 +158,31 @@ export async function cam_slice(settings, widget, onupdate, ondone) { let shadows = {}; let slicer; let state = { - settings, - widget, + addSlices, bounds, - tabs, - cutTabs, - cutPolys, + color, + computeShadows, contourPolys, + cutPolys, + cutTabs, + dark, healPolys, + isIndexed, + ops: opList, + setAxisIndex, + settings, shadowAt, slicer, - addSlices, - isIndexed, - setAxisIndex, - updateToolDiams, + tabs, + unsafe, updateSlicer, - computeShadows, + updateToolDiams, + widget, zBottom, + zMax, zThru, ztOff, - zMax, - zTop, - unsafe, - color, - dark, - ops: opList + zTop }; let tracker = setSliceTracker({ rotation: 0 }); From 73ad4b86407d68631824645fa429607472acf388 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Wed, 19 Nov 2025 20:47:41 -0500 Subject: [PATCH 143/151] fixes #451 bad reference to worker --- src/kiri/mode/fdm/export.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/kiri/mode/fdm/export.js b/src/kiri/mode/fdm/export.js index 4b17bd32..5c5c305b 100644 --- a/src/kiri/mode/fdm/export.js +++ b/src/kiri/mode/fdm/export.js @@ -291,8 +291,9 @@ export function fdm_export(print, online, ondone, ondebug) { append(`; Bed type: ${bedType}`); append(`; Target: ${filter[mode]}`); // inject thumbnail preview - if (exportThumb && worker.snap) { - let { width, height, url } = worker.snap; + let { current } = self.kiri_worker ?? {}; + if (exportThumb && current?.snap) { + let { width, height, url } = current.snap; let data = url.substring(url.indexOf(',') + 1); append(`; thumbnail begin ${width} ${height} ${data.length}`); for (let i=0; i Date: Thu, 20 Nov 2025 19:59:05 -0500 Subject: [PATCH 144/151] raise wide steps limit to 500 --- src/kiri/mode/cam/cl-ops.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/kiri/mode/cam/cl-ops.js b/src/kiri/mode/cam/cl-ops.js index cba92ee3..4cefd5d0 100644 --- a/src/kiri/mode/cam/cl-ops.js +++ b/src/kiri/mode/cam/cl-ops.js @@ -283,7 +283,7 @@ export function createPopOps() { plunge: UC.newInput(LANG.cc_plng_s, { title: LANG.cc_plng_l, convert: UC.toInt, units: true }), down: UC.newInput(LANG.cc_sdwn_s, { title: LANG.cc_sdwn_l, convert: UC.toFloat, units: true }), step: UC.newInput(LANG.cc_sovr_s, { title: LANG.cc_sovr_l, convert: UC.toFloat, bound: UC.bound(0.01, 1.0), show: () => env.popOp.outline.rec.wide }), - steps: UC.newInput(LANG.cc_sovc_s, { title: LANG.cc_sovc_l, convert: UC.toInt, bound: UC.bound(1, 5), show: () => env.popOp.outline.rec.wide }), + steps: UC.newInput(LANG.cc_sovc_s, { title: LANG.cc_sovc_l, convert: UC.toInt, bound: UC.bound(1, 500), show: () => env.popOp.outline.rec.wide }), sep: UC.newBlank({ class: "pop-sep" }), top: UC.newBoolean(LANG.co_clrt_s, undefined, { title: LANG.co_clrt_l }), inside: UC.newBoolean(LANG.co_olin_s, undefined, { title: LANG.co_olin_l, show: (op) => { return !op.inputs.outside.checked } }), From 1f6314512cc7ec6dc293321b50567c2b5967fc17 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 21 Nov 2025 20:12:55 -0500 Subject: [PATCH 145/151] fix trace npe. fix /boot redirect after install --- src/kiri/mode/cam/cl-trace.js | 2 +- web/boot/service.js | 2 +- web/kiri/manifest.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/kiri/mode/cam/cl-trace.js b/src/kiri/mode/cam/cl-trace.js index 25755670..34ba3f0c 100644 --- a/src/kiri/mode/cam/cl-trace.js +++ b/src/kiri/mode/cam/cl-trace.js @@ -144,7 +144,7 @@ export function traceHoverUp(int, ev) { export function traceToggle(obj, skip) { let material = obj.material[0] || obj.material; - if (!material) return; + if (!(material && obj.trace)) return; let { color, colorSave } = material; let { widget, poly } = obj.trace; let areas = env.poppedRec.areas; diff --git a/web/boot/service.js b/web/boot/service.js index e623cf10..c9e7a55c 100644 --- a/web/boot/service.js +++ b/web/boot/service.js @@ -143,7 +143,7 @@ async function _fetch(e) { if (url.pathname.endsWith("/")) { return e.respondWith(redirectOr404(appendURL(url, 'index.html').pathname)); - } else if (url.pathname.indexOf(".") < 0) { + } else if (url.pathname.indexOf(".") < 0 || url.pathname.endsWith("/boot")) { return e.respondWith(redirectOr404(appendURL(url, '/index.html').pathname)); } else { e.respondWith(fromCacheOrNetwork(request)); diff --git a/web/kiri/manifest.json b/web/kiri/manifest.json index e74aa39a..09fe05cc 100644 --- a/web/kiri/manifest.json +++ b/web/kiri/manifest.json @@ -2,7 +2,7 @@ "name": "Kiri:Moto 4.5.0", "short_name": "Kiri:Moto", "description": "Slicer for 3D printers, CNC mills, laser cutters and more", - "start_url": "/boot/", + "start_url": "/boot/index.html", "id": "/kiri/", "display": "standalone", "theme_color": "#7e99b7", From 604af6ff1f2ae3ad82a6079a1fb5c7cb8f5cc392 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 22 Nov 2025 11:21:32 -0500 Subject: [PATCH 146/151] change slice bounds errors into alerts --- src/kiri/mode/cam/slice.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/kiri/mode/cam/slice.js b/src/kiri/mode/cam/slice.js index a549505f..ed3a541c 100644 --- a/src/kiri/mode/cam/slice.js +++ b/src/kiri/mode/cam/slice.js @@ -119,6 +119,10 @@ export async function cam_slice(settings, widget, onupdate, ondone) { ondone(msg); } + function alert(msg) { + onupdate(null,null,msg); + } + if (unsafe) { console.log("disabling overhang safeties"); } @@ -135,20 +139,20 @@ export async function cam_slice(settings, widget, onupdate, ondone) { let maxDelta = 1e-3; if (stock.x + maxDelta < (bounds.max.x - bounds.min.x)) { - return error('stock X too small for part. resize stock or use offset stock'); + alert('stock X too small for part'); } if (stock.y + maxDelta < (bounds.max.y - bounds.min.y)) { - return error('stock Y too small for part. resize stock or use offset stock'); + alert('stock Y too small for part'); } if (stock.z + maxDelta < (bounds.max.z - bounds.min.z)) { - return error('stock Z too small for part. resize stock or use offset stock'); + alert('stock Z too small for part'); } } if (zMin >= bounds.max.z) { - return error(`invalid z bottom ${(zMin / units).round(3)} >= bounds z max ${(zMax / units).round(3)}`); + alert(`invalid z bottom ${(zMin / units).round(3)} >= bounds z max ${(zMax / units).round(3)}`); } let mark = Date.now(); From e71d8157a43ec8fb20df48a1ab7ca662139b9fde Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 22 Nov 2025 11:47:47 -0500 Subject: [PATCH 147/151] restrict the use of tzoff to cam mode --- src/kiri/core/platform.js | 26 +++++++++++++------------- src/kiri/core/widget.js | 14 ++++++-------- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/kiri/core/platform.js b/src/kiri/core/platform.js index 194d1f2a..48c90282 100644 --- a/src/kiri/core/platform.js +++ b/src/kiri/core/platform.js @@ -163,19 +163,19 @@ function platformUpdateTopZ() { const wzmax = bounds.max.z; const zdelta = process.camZOffset || 0; switch (process.camZAnchor) { - case 'top': - widget.setTopZ(stock.z - zdelta); - break; - case 'middle': - if (widget.isIndexed) { - widget.setTopZ(zdelta); - } else { - widget.setTopZ(stock.z - (stock.z - wzmax) / 2 + zdelta); - } - break; - case 'bottom': - widget.setTopZ(wzmax + zdelta); - break; + case 'top': + widget.setTopZ(stock.z - zdelta, true); + break; + case 'middle': + if (widget.isIndexed) { + widget.setTopZ(zdelta, true); + } else { + widget.setTopZ(stock.z - (stock.z - wzmax) / 2 + zdelta, true); + } + break; + case 'bottom': + widget.setTopZ(wzmax + zdelta, true); + break; } } else { widget.setTopZ(0); diff --git a/src/kiri/core/widget.js b/src/kiri/core/widget.js index 47222eb7..85b16879 100644 --- a/src/kiri/core/widget.js +++ b/src/kiri/core/widget.js @@ -473,10 +473,12 @@ class Widget { /** * moves top of widget to given Z + * only non-zero in CAM mode * * @param {number} z position + * @param {boolean} cam mode */ - setTopZ(z) { + setTopZ(z, cam) { let mesh = this.mesh, track = this.track, mbb = mesh.getBoundingBox(), @@ -488,7 +490,7 @@ class Widget { track.top = mbz; } // difference between top of stock/bounds and top of widget (cam mode) - track.tzoff = mbz - z; + track.tzoff = cam ? mbz - z : 0; this._updateMeshPosition(); } @@ -503,8 +505,7 @@ class Widget { } _move(x, y, z, abs) { - let mesh = this.mesh, - mat = this.getMaterial(), + let mat = this.getMaterial(), pos = this.track.pos; // do not allow moves in pure slice view if (!mat.visible) return; @@ -528,13 +529,10 @@ class Widget { track = this.track, tzoff = track.tzoff, top = track.top, - tz = tzoff !== top ? -tzoff : 0, + tz = -tzoff, { x, y, z } = track.pos; if (track.indexed) { let rad = track.indexRad; - let ln = track.box.d / 2; - let dx = Math.sin(rad) * ln; - let dy = ln - Math.cos(rad) * ln; this.mesh.rotation.x = -rad; z = top; } else { From 2e046bd69825f9773a7755caaf895e0a96a8d637 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 22 Nov 2025 18:28:53 -0500 Subject: [PATCH 148/151] rename sliceOutput to pocket --- src/kiri/mode/cam/op-pocket.js | 7 ++++--- src/kiri/mode/cam/op-rough.js | 7 ++++--- src/kiri/mode/cam/prepare.js | 15 +++++++-------- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/kiri/mode/cam/op-pocket.js b/src/kiri/mode/cam/op-pocket.js index 6af05b09..cd90e684 100644 --- a/src/kiri/mode/cam/op-pocket.js +++ b/src/kiri/mode/cam/op-pocket.js @@ -242,7 +242,7 @@ class OpPocket extends CamOp { prepare(ops, progress) { let { op, state, pockets } = this; - let { setTool, setSpindle, setTolerance, sliceOutput, getPrintPoint } = ops; + let { getPrintPoint , pocket, setTool, setSpindle, setTolerance } = ops; let { process } = state.settings; setTool(op.tool, op.rate); @@ -275,11 +275,12 @@ class OpPocket extends CamOp { } if (min.pocket) { min.pocket.used = true; - sliceOutput(min.pocket, { + pocket({ cutdir: op.ov_conv, depthFirst: process.camDepthFirst && !state.isIndexed, easeDown: op.down && process.easeDown ? op.down : 0, - progress: (n,m) => progress(n/m, "pocket") + progress: (n,m) => progress(n/m, "pocket"), + slices: min.pocket }); } else { break; diff --git a/src/kiri/mode/cam/op-rough.js b/src/kiri/mode/cam/op-rough.js index 21251a11..6771c966 100644 --- a/src/kiri/mode/cam/op-rough.js +++ b/src/kiri/mode/cam/op-rough.js @@ -297,7 +297,7 @@ class OpRough extends CamOp { prepare(ops, progress) { let { op, state, sliceOut, camFaces } = this; - let { setTool, setSpindle, setPrintPoint, sliceOutput, polyEmit, newLayer, printPoint } = ops; + let { setTool, setSpindle, setPrintPoint, pocket, polyEmit, newLayer, printPoint } = ops; let { settings } = state; let { process } = settings; @@ -331,11 +331,12 @@ class OpRough extends CamOp { // output the roughing passes setPrintPoint(printPoint); - sliceOutput(sliceOut, { + pocket({ cutdir, depthFirst, easeDown: op.down && easeDown ? 0.001 : 0, - progress: (n,m) => progress(n/m, "routing") + progress: (n,m) => progress(n/m, "routing"), + slices: sliceOut }); } } diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index 60c70321..1bc4c4b7 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -554,16 +554,15 @@ export function prepEach(widget, settings, print, firstPoint, update) { * output an array of slices that form a pocket * used by rough and pocket ops, does not support arcs * - * @param {Slice[]} top-down Z stack of slices - * @param {*} opts + * @param {Slice[]} slices top-down Z stack of slices + * @param {boolean} cutdir true=CW false=CCW + * @param {boolean} depthFirst prioritize cut depth in pockets by nesting */ - function sliceOutput(sliceOut, opts = {}) { - const { cutdir, depthFirst, easeDown, progress } = opts; - + function pocket({ slices, cutdir, depthFirst, easeDown, progress }) { let total = 0; let depthData = []; - for (let slice of sliceOut) { + for (let slice of slices) { let polys = [], t = [], c = []; POLY.flatten(slice.camLines).forEach(function (poly) { let child = poly.parent; @@ -590,7 +589,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { }, { swapdir: false }); newLayer(); } - progress(++total, sliceOut.length); + progress(++total, slices.length); } // crucially returns true for -0 as well as other negative #s @@ -695,6 +694,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { getPrintPoint() { return printPoint }, lastPoint: () => { return lastPoint }, newLayer, + pocket, poly2polyEmit, polyEmit, printPoint, @@ -704,7 +704,6 @@ export function prepEach(widget, settings, print, firstPoint, update) { setSpindle, setTolerance, setTool, - sliceOutput, stock, tip2tipEmit, zclear, From 07adead715cd1ed4be6e3adc31128ab116eadf1a Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 23 Nov 2025 10:46:48 -0500 Subject: [PATCH 149/151] fix thru cuts with new up/over tabs paths --- src/kiri/mode/cam/op-rough.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/kiri/mode/cam/op-rough.js b/src/kiri/mode/cam/op-rough.js index 6771c966..acbeaa69 100644 --- a/src/kiri/mode/cam/op-rough.js +++ b/src/kiri/mode/cam/op-rough.js @@ -235,7 +235,6 @@ class OpRough extends CamOp { tabs.forEach(tab => { tab.off = POLY.expand([tab.poly], toolDiam / 2).flat(); }); - offset = cutTabs(tabs, offset); } if (!offset) return; @@ -286,6 +285,9 @@ class OpRough extends CamOp { } slices.forEach(slice => { + if (slice.camLines && tabs) { + slice.camLines = cutTabs(tabs, slice.camLines); + } slice.output() .setLayer(state.layername, {face: color, line: color}) .addPolys(slice.camLines); From f07f5dff63773aa426a8e80b2b6fc5bc407ac7ea Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 23 Nov 2025 11:30:25 -0500 Subject: [PATCH 150/151] move tab offset calc up to so it happens once --- src/kiri/mode/cam/op-rough.js | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/kiri/mode/cam/op-rough.js b/src/kiri/mode/cam/op-rough.js index acbeaa69..f5c2177c 100644 --- a/src/kiri/mode/cam/op-rough.js +++ b/src/kiri/mode/cam/op-rough.js @@ -37,6 +37,12 @@ class OpRough extends CamOp { updateToolDiams(toolDiam); + if (tabs) { + tabs.forEach(tab => { + tab.off = POLY.expand([tab.poly], toolDiam / 2).flat(); + }); + } + // clear the stock above the area to be roughed out if (workarea.top_z > workarea.top_part && !cutThruBypass) { let shadow = state.shadow.base.clone(); @@ -59,9 +65,6 @@ class OpRough extends CamOp { slice.z = z; let polys = POLY.setZ(facing.clone(true), slice.z + roughLeaveZ); if (tabs) { - tabs.forEach(tab => { - tab.off = POLY.expand([tab.poly], toolDiam / 2).flat(); - }); polys = cutTabs(tabs, polys, slice.z); } slice.camLines = polys; @@ -231,12 +234,6 @@ class OpRough extends CamOp { offset = cutPolys([rect], offset, slice.z, true); } - if (tabs) { - tabs.forEach(tab => { - tab.off = POLY.expand([tab.poly], toolDiam / 2).flat(); - }); - } - if (!offset) return; slice.camLines = offset; From aadbb3e7ee73a25e8bcbd299b2c1b44c714bd0b6 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 24 Nov 2025 01:13:55 -0500 Subject: [PATCH 151/151] fixes #453 where wide cutout areas intersect --- src/kiri/mode/cam/op-outline.js | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/kiri/mode/cam/op-outline.js b/src/kiri/mode/cam/op-outline.js index 7978eb3f..81d89491 100644 --- a/src/kiri/mode/cam/op-outline.js +++ b/src/kiri/mode/cam/op-outline.js @@ -172,16 +172,12 @@ class OpOutline extends CamOp { let stepover = toolDiam * op.step; let wideCuts = [] //accumulator for wide cuts for (let c = (op.steps || 1); c > 0; c--){ - offset.slice().forEach(op => { - // clone removes inners but the real solution is - // to limit expanded shells to through holes - let wideCut = POLY.expand([op.clone(true)], stepover*c, slice.z, [], 1); - wideCut.forEach(cut =>{ //set order of cuts when wide - cut.order = c - if(cut.inner) cut.inner.forEach(inn =>{ inn.order = c }) - }); - wideCuts.push(...wideCut) + let wideCut = POLY.expand(offset.clone(true), stepover * c, slice.z, [], 1); + wideCut.forEach(cut =>{ //set order of cuts when wide + cut.order = c + if(cut.inner) cut.inner.forEach(inn =>{ inn.order = c }) }); + wideCuts.push(...wideCut) } offset.appendAll(wideCuts); }

ndSN`Hqc_JfqeM`xO6?-&l%Zw^ zIdDBbWUXzGvhrr3%$KT@a_WoS*M4caA2?IFM=#5dcSTx!*|ABeA=Ex$S{Y z9vm6$eoCDdfW3%N=>R4o{FC3U54}GkHbA1wbSXNd5}BDh3JVI>(~k-YPo^(+BBY-X z@|fHzK2+&U&(9Aca@V|c$NplRDpoX!vQByJgif5AcgU%>+MlmfTh))ioAgY&F@i*4Y*Xrqwq-sX3nX!%+I_4-rbMJZQ`-Hm|mI zN~ne`&b?N|^M{DOBio|wk%AG6E-livytvF8S;=4hF>OOw;iY@_YYpSE@>}xf^F~M; zf;MFX`Kdt9z>s|jcgp6{DWYO)#wZ?36=c58`p-d^oyfSdU*)_XrP(bq)HTMG@){?L zZ^(ysnJ4e6W*l|iLetYr=e^nInyhMv6hvT$5D#H>2HG16X5b-z_cCLqk9Zy-9ZmEAP3=LQ&LSLhKfF;MiL%m+B$N`}U< zk&s?wrVSBMwC((+^ZZAa14$lz15TitPwlHG5vnIz|PJ5~vi;PfSl9+CdwKOShwQ?{XScCNIkjO*$ z1S6}W%nN$i(R{&i8X2UbkzTb7oja%9*z;@t@UFKxHS0Xv3zcya=6e z_Xd~4`SfdNjHUf3td=5x&nzr7!_oMNz0N4x+&WF zkACGlDI2Q5j^oo6TdFerdCiK@M_5JXw@8Z&PYw(mD3}qi48oJ$Y@#=k7D7Lgdzs7Y X*!3T0grr)_R^iKvZevzt;u7&M2=rak literal 0 HcmV?d00001 diff --git a/docs/static/img/interface/main.png b/docs/static/img/interface/main.png new file mode 100644 index 0000000000000000000000000000000000000000..4577acccb8584f127ecced34b3de718cb4569d9d GIT binary patch literal 155786 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