From 5652072884c8e1f91d4002efb06930b253fbb9e9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 1 Oct 2026 16:30:11 +0000 Subject: [PATCH] Update KCL docs --- ...rial_test_example_fn_std-gdt-distance0.png | Bin 73896 -> 37078 bytes ...rial_test_example_fn_std-gdt-distance1.png | Bin 72377 -> 36537 bytes ...rial_test_example_fn_std-gdt-distance2.png | Bin 46176 -> 48149 bytes .../pages/docs/kcl-lang/edge-references.md | 98 ++++++++ content/pages/docs/kcl-lang/index.md | 1 + .../docs/kcl-samples/angle-gauge/main.kcl | 30 +-- .../kcl-samples/bracket-with-slot/main.kcl | 12 +- .../docs/kcl-samples/ceiling-fan/main.kcl | 30 +-- .../docs/kcl-samples/cold-plate/main.kcl | 78 +++--- .../counterdrilled-weldment/main.kcl | 42 ++-- .../kcl-samples/countersunk-plate/main.kcl | 6 +- .../pages/docs/kcl-samples/crash-box/main.kcl | 12 +- .../curtain-wall-anchor-plate/main.kcl | 18 +- .../pages/docs/kcl-samples/enclosure/main.kcl | 60 ++--- .../pages/docs/kcl-samples/flange/main.kcl | 54 ++--- .../kcl-samples/flat-bladed-impeller/main.kcl | 18 +- .../docs/kcl-samples/gallows-bracket/main.kcl | 222 +++++++++--------- .../docs/kcl-samples/gas-impeller/main.kcl | 36 +-- .../docs/kcl-samples/gingerbread-man/main.kcl | 54 ++--- content/pages/docs/kcl-samples/lego/main.kcl | 24 +- .../main.kcl | 12 +- .../kcl-samples/pipe-elbow-90deg/main.kcl | 24 +- .../kcl-samples/surgical-drill-guide/main.kcl | 30 +-- .../kcl-samples/thermal-block-insert/main.kcl | 12 +- .../docs/kcl-samples/tube-manifold/main.kcl | 60 ++--- .../docs/kcl-samples/utility-sink/main.kcl | 48 ++-- .../pages/docs/kcl-samples/wheel-hub/main.kcl | 30 +-- .../kcl-std/functions/std-gdt-angularity.md | 12 +- .../pages/docs/kcl-std/functions/std-helix.md | 2 +- .../functions/std-sketch-getBoundedEdge.md | 2 +- .../kcl-std/functions/std-sketch-revolve.md | 2 +- .../docs/kcl-std/functions/std-solid-blend.md | 4 +- .../kcl-std/functions/std-solid-chamfer.md | 2 +- .../kcl-std/functions/std-solid-fillet.md | 14 +- 34 files changed, 574 insertions(+), 475 deletions(-) create mode 100644 content/pages/docs/kcl-lang/edge-references.md diff --git a/content/kcl-test-outputs/serial_test_example_fn_std-gdt-distance0.png b/content/kcl-test-outputs/serial_test_example_fn_std-gdt-distance0.png index 5957031282ad2d1b49f3bf1667e890bc5ce3b776..74546b9cf33f6bfb0a702322e7c5746577e802e9 100644 GIT binary patch literal 37078 zcmeHwdt8%s8}|^6N{y&=^`MZ5@fhiPLd9gT4jADf-n6s_b+asa6k#eN8;1=w1tX>K zK!~!+fXZ;14g`UrplBRcqM)3{L72#4jKRi^_j_Hx8xo#+-}j&Q{p+2dyj`%}yYJuc zI()D1^}V)(|Kq)YsZajnNd|*4HSk^kRSd=?csSwr#~*`#6md;!7>ut@1^U1Ffxxb} z#Qt0Ne;>cDp`!W@-KfmoxqQ>vu!h``|F(RYaeSFH<25h0KEv+3t^Ma8kJ zVPmPruZE4K8drAPn(O1rZX2W;2QY2HtN*y>nZoZ6v0a%I-PiAa2hZBU>s>4ASSxxMARY{mhdzH`A+;<{sZSP^&F1#p;aTqRsL!~apK%Q* zLeJ)ZCtK9CqkLwb^`69XPi@h-QW|w*bazhB&C2WIbBT%0;g?#EuZ_-J8=bROcxz+d`b8_--++I3QI=D*%&Xv}AT93K8!J8de$L%`C?OMp| z_>kKX32$~hA#y_7@a9A(vbuB)e6dkt?UGpg;NDy*U07a|?jmf;Bp)B2a%Fc>b9X7PTgL4^q|zGp zGEcF%g@RTGQHw*dp-$9WC(4r54l^q^UogyeHQZpv$kxWl>SEGTg=uU3B04LFa%5eH zeflm91zGP0iS)_TaI&~Nw;?8!|Ea}`zJH2QxN*NUz>Grm=gR9k+X0^phJuqKAuqUMYWd3_80!D+# zSR=9iAfXHr>T9x+ouTv5myjJI;Kb(uI5=0LYL<6&3G>J^l%;z#H3|f`ibV_MB z#WU#mlujzR`fNsjR9af$Bm zc=%}!QX72?oE6X1abtQ9xeo7f9e#puspVVFdIV*#OCz@A$UHcPn^ga5&d_QlHJdXq zTY3KS<(NIpHhNEC;~T`g&wsS7pWk06w$zD@POcg!b*!m3k8_IoM#|aCeFe^(2mAaU zJli}lPdTswPAfd2x)mH66n*Q6wbesB;2~ELhv>eQxtuvpI!F2bvpm^VMeE`yU-zz7 zNAd6`KYav8@61&Xan+#-6<1Y&1FH&J%R7{>@ z^SyhozZA&Go%&*6$}ZTp8kY7omiA?qA%$fa2!ge?_VwJmpzl}Tj@&@OhBmuu=1K;&FMPg z*R?#nP;-5qn;T=B^Er3BZSco$;Oper^YFU0aZNGmBK_HH-`*`j7sI%T_qHt(Q+hF# zZ2BR{_yeo3^?-Bu!9>Qnu#%LC=gyx$Z@3ZQH*k&ixxRc=hEIm>Vz%!=s?=rhTL)ir zMR89>v9?NSu2OErwSFTK3fm)Z}n6Zfe^eF;xFIywsMT&(>GoX!flxk7GQ*?fOxvk2bl zNXT!M6TkW)G0`iedcA3YMGZ(rrBl5d&1=O&YsEWv?b=l`J}AC1B5$M?x_3?Ewoc<( z(4^$%Ozy)>?wcustX0d3tj2Es{LI_6^=0yJ)uwys?4qmb#a-#eadnY1OBSrGc~&x9 zCO0LBhZE#W7B9Xl*Iakz3%gQ9U26+FPlSd)Fcpg-B4*Z^zh@c0=UZ+ES#CQT$G}9DrO4D9M5W6O>6{{Uv8nHM;lTZ_RKdYiL4E=(Rq`vD zw-bDOK2A0c22q33Uu3&EXnv(>X>8Y&ww21kl}alZ_ddTJF)=X?CAkvKmm%ySaAH2y zgI1NXB=TY9^5Xl;i_QC7%`FLa!QJ4F{pGQpA)?N;$5#EuvbM3Tm%_BM{{F&>yx58; z!?%vcZ&X6zO3qN|>TSI>akSgqDfSX;T_0x|h769pKKzDbR}nHp<2 zbm&kH{H^j9YrVzUtCm^NYm@IbG&GFU!dg|QM`W|qKj_rO8(hj8oaZR&-{(3jko|^# znGE7rX{;Y_hKoy|mL=%f>5(FTLn(i1tbH;UsyFN8BxsxIa8%uX+@!ef5nI9@Jym@0}{>wCD8Ob6U#| zKAUY996FNFL*=?qj(Tp8@VEA?Ehm=E9qLTyi~1W1s~QT+O@#_m?EUKMYE3r;!|Tbz ziOIu*keS+R(WA_7H?Z^Y7YAV19gUy2mnTamev`Gu2ux}ukUF7Zif) ztHJj?tiIG9H@CAzx_ak=v)vHNnlIOO4}C$sm3h?ol)C>Zwf1MJ@n`AmKnA?RD`Q|9 zPcuz|`=2h~zJ2>ShwVLg&p#_Q|0XpDyAHkYI`r>kVdW<7)%4R`(v z$SK}=U1VNNqXmm%?XtNN-4=;%8pJvlwKZkpb^r=Zxp{ecmoHq1n6Z)1SKlHxcDuE; z)sOYLdl6b(Lecfm!t2id{-18PmN=SA@?rr1c7$vw6li8_jIXWVrR%vDW9?B`d-MQv z+OF};*Lb8hP*plah;wQ*18(NBCRvw||~$+~xJ>oQ*CU#U zgVtv*Pn|z*9)P;wL{AkA$=?divEWWg981sTo(hVA5HJYv=BDfLWO@H&&ULSu9Fe)~ z{HF5v23U7tTSrmeq)Ynd7`5@dtLeNNE+c`>Z1BUxp+xZ2Ax2*bV909w&_a|Z#Nrv^ z%vH;T8m3s2+5jhd45K~AT*@(r>6@aIO>EbIfPe%@)tn)Fj^PN$5SJr+X)d>YA-8?1 ztLbie@d8C=Z7>g#_`_+_lde5RBEGBfJ6B__R;7@17#6eHjTE^a^D&;`nB-<9B!Qy3 zm?H0(yQMC=|727^9F~(Tq>JO&Ujk#xCqT5bsi|o)+tp+;r6Le$Nv92Mn~z)Dq2>pN znvEFV_ET@LOuw>BFJl$u645KGYwm~Ar&B!)@aRFSnHde4{9x*301B=XH#U&uJsZNk zoC?jYinv)BYi@U?>M)HDUh5u;p0vFwvaV_PF@FDJ{1=?AMEqM?SFz>9ON_vOLBKFO zd{yRIbj!1-6Vr|F8=+xFz{`912Jnn-jw~!=`Q}^>rR7lj$o^*Sm=O>deFL)W4U#3p z0>_Q6SVLxCqG^3G4ZM#BnJxyIzTz8>^9{ceW6C2Xm5hLZ&NPVhyD{)~8<_t7uS1O! z$*zGNiYw2_Yc_t$O^gA2c$i*!aMOwOosekk5oq>&_g0m+(!83Uou?5Ug|AJw2cj+y$lE|A^-w141FID`qm1u6@!zhub!X8xC0r>kq5K^Z?dh5sf#j@BEp1HoTxK%RxTi zDIW+W@hM~nGHOGV{m596wGPeJKP}PUkvDKl46%Y za49vdlh>auHfGCXG;P-+lCHHK2fURUcP};W7?k=F%Xc3?Ut5?M9GcTzkP(7mV`lk| z7GD1_RMvcw-#h9oiDgi&cI)nJm7P?ml3-ULIauGZPAYwM z%H_+KnZm4MbqFk9Zg9?F!K`W|OaK8ynxO32p5)%Nvtpj(DR>>(zHKJ7_+`(;yN5yj zr(t0f6hpOWEL$6UZEftzc+7Tk01mOZbP6bK1YjEqucexSH;l}{q zhjSPNa6x#z{>LAG%))113eH)>PT!hyOne2|gUj1nuiisSXmelzR#APXVpp&lPDx*1 zpD^R6?gCM0XlOe1R{P?ooSYZ{rc(BbuYkK?F*-kE3;Z$$%SY8~D{B@{DP_DE2(~mU z(Cmt!-#(Dmn+( zu*FZp0+5Z{lYewoFhquLfi2tJ5Ec|iAj5>aQ1YLL#Wf?PAe?pJ2}-uhW={wLzES-v($mw|VNS1>zv!h!dps3V-`wn%3#U1$+KIWa+6(s*N~JIf zl>c0AVr}qcfbQX{G(dsLVd3H75-8GM!R^_FuFbBgt*zBTc5{WoTl?0O(sRwQtqQL& zKHoLHYO@v!GJC82`hs0syuG~KzON02aGI>)J%G9@IppQc+d$;B@HRGJ@M5oqy5y7d zcU$sT)GU}<`YPkyTX5b0|1CKSt*7AjG%K9mUp9BY_|46o(M4R%3g7`Vk6y(XC9YrT z-88t7o0txJ^d_l^n&~4W3RXEMs#&P=LVtRYXB`HbEQ%cS@*i@l@P#b|GfDBqSLm0S zJ3Zqa3HSKtbZ%)^=^c~E%Q zfVaa&2dUC_@7{e_-P1EeuC4ZwT#;Wr1()TlSRhe&zjta$B%i<3ismeoSh1Z8o5|8@!fA8sFR*V(%6X?QD4v@lY@@qi8O9m4S4^BG3R zhYub+=&xPJj~gKAvJ>eX^Sx_HOofI8aBO+TPe)fRpL>i69&4}oVA5W*c{pz2hP>M0s^ZDLAk(b#3AtqSYohK5!t+#fnNXK$;CTPFt6Y%yvdrPJza@- z9nFqi19_T?fztTDl95l)gbA;B#_lJmuqv(mZ(XJdDPL-{vImXkRZp7C- z=ifVXLM;%znOo$Dhbav$Yj}cB* zT$JrM^ivR{`N@`HO}ht4>x4Lcix@|Jt~)r?wUM0$?5BN!UGvHLk52l<8H26Isxy3J z6kBD%)hg}My2z$9uaL7HOSdEH%--^k(3}l9G9L)bFJx4JU&nYTZtE>(Tj5^HD`Yv>E? z{49zm_jjiF;hEy;7)s?8UKIkL+@u%1=%x-g|CLrCw`8o-I(llaA*a=*8TRfath z^!q*t<5JmfWGauVcESdmfD+r9BZKqazj-8E=yVd2XLDs`Vj=)6WF^}2@h2`BKLO|xIaMm?sD zG`_$DpqCei_(?;`<>P5L#or?TS-B1K4g zXu*QB?Mq*sQhEZ?_)%!R5Z_jUYmY)vJprWNCFp0}j}F8~6}0EF%1GkQAZ@H;)Jp^~ z3A0G(=EjqRJO)E?Nmq_^=w!nz9SISogn_4AM?S^C$Ws#< z+>DC+2vwgfED%;5s=D(>3Li(LeLUo0K{#TuFU9*SE7$RhhUO}VHYkT=>{KwLI>Dhj z!M;bPj$L_0?0imxDnV zNf3|2hrdPS z#fL0`KWzAm<}uxA2j>0EqtGQRd>Y{|MA!ci%-;baB*gt@t}qLWQAyU8o`SPdSuL{W z_m`f7#^iiN(%l8&0OKZ7Zw80fKm%e<2KL6zKoJCYrQzYd9co{^YeQXt|2?R4+m@aK zLwW7Ou~p0b%P`v;7Q=;wmd7>5U}xLHySpg9w~)|lz$1UnS3+rS*~=Q< z%WsB1`MUa0zMvs5u0e0cevQ1c^13~&>omo4PMNj!8n@>m_j@h%|4Ftcqk`muS~>>M zS$5Buw4fykRna0Rm~3MP9XIIOmD)!P#z?lkQ+!EkeJHi|&{>^)Scx_6ar#3`j65jI z^=7z#7if_-Z-?$&fPep6Kt(hPRi_j!X^5;hgWo4%C0L5Vo~hUc2+RwBS2d>5CU{<+ zhCuf7`T6?cCKS{yaR^Qy#02nrtIV>zQAAY-lbfpBpN z=?Rn>L^?S^TqX)#2$ zn^=LuvJ~7P<&I%W26iOx0ts@S6g%9<8)#@gT3z<7zqGw|hGN0tb^$d1FVOD+l<7KH z*21R&ZlFTKiaF+-JF>%{Ldm%Ju)X5q`uUEjutpfN5)(1wewmn(c8J*qbtb=vD}_Yv z=Jp$2@Up9mD5q*DVvmQMfQXFIQGNrOMz2l@WdzpWy?giQbGgo}GVtZ(_Qmt3Pj-hy z0`4NXbtGfZ5!lm(Aow7xlZs~XLBYTP*QL35T_jH*shrY+sE!cFw~2h>ACADs0S5Lz zdbT?nQPUK7?4KhWST8cePQ?6)WUN8Mw9(7&JxZ8#s#J84kZ7UIFP%KOL2}}1H1M}Q&h$9G;zGAka zd}WE^BKSoFHrr_^CB6cerh%P=@N*YelpwhQDQOj5C-ebSuLDz9dq+wdBwpaT&pUpV zCd779wO21>PUPXCd2?$iH*w2}>!ffc6|w>XDG)$*q@{u61=`-!ls1IpreZY`WXw-w z!SfKFA(86l)&^JM;r9K-+J8`XKy96E09x_rD#lX(e%_}u%0GtPXSiPjX~X8Zb6&fk zf#7f{BWnxv^Fa*eQ_yPM-KS;Pf^il}U$WFcOYWzLG zf>H>nh5-g~69OK@S?y@>JG$y+MF#;nCUQ*2TqrIY$%W1|?j`SGZ^nQ0^!iPRMdD^3 z4Su@J-gINAGp!h%I)Ye;(2rc8ec>1ysfh4VT4f77>kKCW-|J_JGrGaztH8$H_UI?E zObC?3v)DaK{c~sGp0QUmleL#v(4SQ+)G}lxg<0Sqiz6T2et|oY5XtNspfw@hwJlI| zWWfIJ3&DO{Gq7c?z~YQN1sNffl91va$bm!1rkCTcpM;JkFK5kiZsJgM5muk1ymSx5 z3KtTyGI-s9YYSPahlH)Ro`<4)Ifbo5M--Jr4e&lak)=WF3<-ulS?19thud#V{@3C5 zOV9vgqyQZ~-RZm9e>m>K=z;AY>xc1PUP7myzCJEQ7MedqE*g2n=@}KI3d%eRmoRndDZK8*|ag4vsfFG(%Iq3-KpE~m!$+}`~*^WLY z94$tH$!S=(Ze0WWjnEua!1-b9jtK!T(CPIo&0801vqdB-1XnmlmJrBE%vp2g#yIYY51-*_Tx2l%C(JMbNRC?24ef#O6XMUa9FIUl8X z%jS06{%Lhx|9Wh`hopP}jYXjor1t(5PENAg!^G6Z`*HniNfZo^CqQ8aH?dB5s!phm ziY<>azY_Rs7&L*mnLtT31o*NDgf?9v@@A0Ug=iQlpEj`L0q{G%7?@jS|L!f6m=xp@A+?X)=NKQs8#eU9jK(n{-4bNx6&`B%IcfP6?#<(Sl?I zvt&Yj55SI?B3vdn5gDD!ump(Vp;e8pIgeTf9Y(nt;3$Q04%)d`x$a?JL68X$Z#VEc zAW#K>ZHIaU68R zjvE^s92{cI-Zv`Q06N{H_%e>I^{GZE6Mq`6Se-JOdE;t?AK;VjX zm`f3M<^wv+3|qcx?i^70on&5t7L3AuuG{xWtXd?Iq*f3okUb;^lBRl*=rQ(^PV7vs zzf`+Ks%<8$;RdrOtV!paP;|I<07_E~XYq|$*3tW=g8+FML`f*YW&^%~1?V8jCv#hPc;CBEHrz~l(BI$Rf}MC1ow?X3 z(AkzFOV8SJAIMt>jez()GjBtJx)}j7o|rytwj+%LsMSi^^XAF!Tfl*YP=}wY+6*-r zlF92r!+=po@UsN3C9gTU`-pHB>>B1u6rc5)id7V&p%{_fuVI1stc8H;>@Sr}{#Sa{ z^c>lBug^9wdorT}(|Rl}pGuCk;u&+b+FZ>NH`T>8saW)Valw@t$T_6~62|BYCwf1$ z7rBzD)Pz9vboPdYpsc%w>P(H< z3|bO~-UQ;1PpqeBa6~7GTmKHM+Ayjy)JBwkCiJ_}OcBlJ(L4iDNj}y8I>AVGT+)D{ zk0d1&8P?LYFMkX+)R`;*eID<P(zkgcR7J&R)PNXpZfDB_D;!#5qwi%S2U%D6JjaG26 zIwZ2Z_Wg?iW6RRg7*0-LT>o@)^EwhzfICz$RJ%@MzFY36%YV$X(5*2?0p^+WDnh=gcV5^{f2msad_fWW| z{m{Zwv@br~zW6D#Lrfd!5B2a6$Vft!0K@3OF_UD^Y#SxNH7hV;NYW0e1`-3E^wiyc~3Mns)1pPaSP_e+lt|Fm5u8jOR+Hl*Y7c2T$b?y_Z8U?FPltXBc?F4Sgqz`|GYK4^(>cX^1j;}>Md*D!GQ>%VJCS2w0CffIe|<;u*pI{_bwDlCt(%j4l)hW6Gv6))deftN!R#3QKYp) z`N9SSw@|GMSL^ohjF~*+PpIs4dY=mt%YhDWi0lk72-2PgIJ_O$&m_6lN3QiG9gih$ zZA6UOx{#+`sHE$h`b7!_G$C|EF#ED%7jzE9kTjLm5kjn!^u!jaC#C&QO1YsqeBEZg z?l4Gt^<+xh)aI6{%>yVDSMs51_}pD1{VEM< z&-x?99qWoaDl&|>v;Fo^Z-{jvVjU1CrWoMamUuxMjb1TYO;!$4Em$JB*-V}WZSnuLDi~XFvHk*5-nJ-hzF3!yvqC;`sqLa^H}cC?ImQdni-AQAsl%jEUcb z6d;fUd9HZ40`xa;IwmCw_OFHi#6*Q&?%TIRTs3(+l8@9@scx&Z+=~D)CFY@)F?Ouj zMOZKb5G@2OYRR!m{57Og&^K@4sv@}wsD5kP1Ksi9K2$qInFF9l+=1%-;k(I}k7#S> zVWUk(p$X>+XJNSz(yt`uH$=`!gHdO?MEqai(0EM21pJ<{QnN;cJJjdU>&H;-CCI{l zejd~e2Bw*iMP@Q6aBuhA%wiZK&@>b)KnNP3i&JW235oxwknb_*Ep5l3?I`}N!R%=v z!cUa4-&9Y40CbO5kv0_fHWY`<%^Zkj8~;ca9R!{!FHR90I%zS&6k=2SbcbMR-5C-L z4U4Uq-tq6Jm-%K?TwRo< zq*xsjj|-}!S>A?DI|Sll9I{{{No?nWd7!P-ucy?n1Jl4jEQ+b|jV%v|ikxxo6p=Qp z2AT$q$Eq+A&_%4EP6#^YUx;x2204yK>q#gda-Q1%S_9fOdr-b-!OB0VG<`5PrFL3+8RF z2&jx;+9iOkBclI7LezM=UCkvD-nB%@x-Q}4kF*TPtf=jK5Qb~nvs#IdbHYr>wnSrB z2a+#wI4(>}S%y$BfqD#DKF9}%-iUI3RJS%X178&lD)XCbhbtB4N@+Cd)}Y@H` zi7NbJlprBWAORjMo^)D=F@&%hQ8OZc%fIZj%g~QZ@oo6$8CmUbawKil);_g$fQEFe z?{Svow0HFBJnK0})48BH^4RW@Mb{vy4Gv|mhD3;fIU0H;hrI8iwguu9o#;S&e7!eM zX}t&l``2ESOwbB_7$8s>>QkeCN{yZr_;s2AWq+K0P=Ov%LPaB(59X`~SHRgddN;7; z{-?OV3i-2K2qhPLF>qiW5FDaU8Nf0A!I~AAmc|);n=_b0Hn1I1Z+w^%$RbV(bh8KaHz%gvvc49wfJOlPN;(6+ji9E#x>L8oN~1DV2LS#GhaH0|Xm=M3%B|T6_u-htV2B_dEKFhEn$bn9>HxI|0|c3*A%~GpEXjx?B2dbi?p@-n z!EghEw8x2Ry@qV(d}=S?XfnECg#m&>KDxg7@xZM)E1@G(*Gp(tCep{-Q8a-=G!Lgq zv8g-f3A%nd?f39>b1(LQL`kZF>3q#}wRsY+f0FVdbkQ1fVcX`%p_E!BMoD?y#oCuh z2R6O%W_n>$c3gdSoPqT6acY2!<`LCw1#9i(#nkfe*VY zFv#e@jfY0=Df2hUhHn%iGKKZ9;A~zmym*jgx*orcyH#SRude z3&qjUjcCYaftX%{h>p`sMi8$-2MWZ1{Gm1cp|eDSpNXfN`s(5K?cF(fejTJFhx%ro z6sV_kS`LYI2TYT>Qp4p`FWKvM80@&{p_u?Bb5X_R!U_iw%$(d}@|XOCq)Q&BbCX}EZy$7UF5_wuU8oL;Tlo-q{7%YiUO3*V zrgcSlxA#CgVI|8hMtP-w3Ii-@S1U$m&M-*9nc~J=+Grhhz%VRPTj&A+2Y`S&igkeY ze&@3s&9flEUw|*V29*JCQ#wvFbs{~<7zRP`%OWtaQ`9Rs#J7o~+k`S5uj0P$;=Upp zjnTS695=Pr2(v(2e`VA=w%|m{i|D%e8P=^I@`gU->G9pg_BeN>#t_8mSBb4E@#oAp zb7aN0mlxgk#F3p_%+cW^Ry+~vHA9PzH9Smk&DT%`L>N%h&yOW$dE7mti*&`6ong(L zAI^s!%W*PWf|<_S`gzds=PVdubv1l~R1neztNlowLCfTTKb?g=u7@zKTIAOT2|tdr z6`=WIRvEYrL=Y*}ql&Fo#SW4YB9_1ZQJClZI+>7~3PKuqCna8;ys-i4d}xsH^af}( zDyfw)_;Qn)kkW=tLa~wbPC#0eMLQu85W9Z=rgTfEb^++W~R6LrATy1-`PL7;Gn$4I$$DG%^0x(NzzzFf44$j{Pk= zwu_9C9B|i6xU0K&Aw&()(sC=vkR~ytxjtXM1F4LHhny>bqPh$9Xx-vESMwFue)Oex z$+V~dR)+^|KLeTu0|yZIL7hH59&u6!6!qI0>^(f+8o(IRXdDjUg{t-+Va|9Au2?Ya7ae`HYRdGeC4)0 z5ZA1xh>jBI17ru%K_HzAXT1cSoc-t?R6dNsC@c?%%z9HpCl8hAH2x;t$`I_T5*`#5 zN&#BKW)#p_iq)oKz8O_u3N}og7MUm0;$jP_5m37mg)(GsY(4DqpXhiF2q*MlO#o6H zx-In724rf3vXquH(MKmIb`6dW9Hmv~pc!|8I?xv+UU65+kD6osB!tNWLNni8!yudl zsj}^fGyRJ$I~vTB4}AQ5#^4VgmQwOME`&~4Rowv~Kw&&@_2y1OM38Cp3IYxW@CTmM zga#p!9u`^+kA*UhkQNpd#jQvY#9J&DP*$M0f-KuNBzo-!2PU!>aS9PqpCQ4j7nii{ zU{I`E3hW{9PV=zFVxW{f7Dh*2)Z@7GqKtHR_gPN_zWdfQDPMi=Ze0kbm=ApcWIPYs z6NXgH)hg1ztmApA>XQd#GfyqC)&RI^PcQdl%u~l`k zRVt!k9FT%o6QlOqu7vp{F}Vi^%-ex8!;0cCJugBE<}+Ya8@P$9p=3Awm~8w}K@U?k zfw+*FiuP)XzwRS-zM>( ztbzzQR@N+NMyzJVp*2@Je_}7GMf@E(DI%gusgNjA;SF{p31UUML^1#~GFr}7AE6z( z2+?7}_2W=0nQsTyWf4iZM3I9R)8+_*pIQ&-IuG#ALCbXrl$$;OA{5L+!t`L*^fLHa z9}Lca4#TF1@Con*<(GUF*dwXJ1eKuMTSfPCFb>+-2^dhDavpHFB=1;{ z#37FnRfLscj2N>X=AU?X1_1E@4ah_fB2k6{GaTxhqmKc}L4?)oZs#7X2es(8C|=CN zENHvvyxiECD9c zG=TICh~=O*-NL{!x3YU%!NJSjsZByNX~WOm7cQ6Wp4Tcb1!t)Oi2FKd;&Mil+^7hJUOdD` z)^aq_1Z6R(kC0P^ld?hlssa+?BuAV9Nox=OrRHC__a)r{99{Uoey0#M`=oD-?gh{} z2>W4tTnLrsHQ>AbGbAWyYRCE*#!|44_U1FWUzbgGJIH+J8Ao?=gmEpHD^n4Qfi(5u z(z5^hWk=NWqRyY$P473VHourI;xNu1+| zj|II$W*8prHaOw)7^QOHV=g!YuQL$dU(;$q`}t%%C>}LZ$mWl(XmomS+FsIb9dob- z7|5;@*uGijoCv04lPMoG`)H{y+jlbQ(9NJCx zNsm?t1I3v7jadN&_^@s}le2tTJpGPNJB=nEL1dY@QV3y?XC z(eu0*SomTJEI(KpWAlX<7{I<#{SBjjHuG-`>=gP2L2-Tz2<+;L$+Ji8-yc`aG!*Ap zg4a&V=GR(+0{&`U|DoT9K4J-lAEJUwzw{Z_m+suB@p|wG19A>6*ux#M1gdL9)c43L zV6qL{q(evn7AH7BdjHdFnB;<(pZZBI6ctS^A*#4Vqc$Hf?xPjZ%qR^GvvgnP0imuc zqA7DbBow|t%R1)H{Qwqy)To{u5nw#BPwU!YltU^|S8!?_eG`>0`L-2Pk=TksgW8n$oK z8@C#^;4#Ki2#&FRE9_VUu?3H@t6>Ws<5t5KJZ!vcZQYhXTMIVA^uPEpkjzN`Dw!GaHXFJh7j|qu jW=qij4_dX?I1_$!zTIi6+Wk5M{sb<4&;RUO8~6TCN;Ns# literal 73896 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

I00w4_NI`53mdpP+uLwk)Jk2dTZLWgRA^` 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 UlhmIX+s*(4p00i_>zopr05>X9hyVZp diff --git a/content/kcl-test-outputs/serial_test_example_fn_std-gdt-distance1.png b/content/kcl-test-outputs/serial_test_example_fn_std-gdt-distance1.png index 6217eef885098adf2b8e6faed35349431422fa37..351863a8fa1dcd6d2dd82c3458d5723a6f2aa146 100644 GIT binary patch literal 36537 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 literal 72377 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 diff --git a/content/kcl-test-outputs/serial_test_example_fn_std-gdt-distance2.png b/content/kcl-test-outputs/serial_test_example_fn_std-gdt-distance2.png index c8e62dfec66607f41c005dcd39c29376868eded6..cdab4c48acbabd3218acbfa415c4d9fad1fb43c5 100644 GIT binary patch literal 48149 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 literal 46176 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 diff --git a/content/pages/docs/kcl-lang/edge-references.md b/content/pages/docs/kcl-lang/edge-references.md new file mode 100644 index 00000000..a5255992 --- /dev/null +++ b/content/pages/docs/kcl-lang/edge-references.md @@ -0,0 +1,98 @@ +--- +title: "Face API Edge References" +excerpt: "Identifying edges by their surrounding faces in KCL." +layout: manual +--- + +The face API identifies an edge from the faces around it instead of relying on +the edge's position in a body's internal ordering. This makes references more +stable when earlier modeling operations change the body's topology. + +For most solid edges, the two adjacent faces uniquely identify the edge. Put +those faces in `sideFaces`: + +```kcl,norun +fillet( + body001, + radius = 2, + edges = [{ + sideFaces = [region001.tags.bottom, endCap] + }], +) +``` + +The faces in `sideFaces` run along the length of the edge. An operation can +split an edge into multiple edges that still have the same side faces. To select +one split, add an `endFaces` entry for a face touching the end of the intended +edge: + +```kcl,norun +{ + sideFaces = [region001.tags.bottom, region001.tags.right], + endFaces = [startCap] +} +``` + +Some solid-modeling topology can leave multiple edges with the same side and +end faces. In that case, `index` selects one of the remaining matches using a +zero-based index: + +```kcl,norun +{ + sideFaces = [region001.tags.bottom, endCap], + index = 1 +} +``` + +Prefer `sideFaces` alone when it is unambiguous. Add `endFaces` when an edge has +been split, and use `index` only when the face information still leaves more +than one match. When a Face API selection supplies an edge-reference object, +keep the fields it provides rather than converting the selection to legacy +edge helpers. + +An edge-reference object does not have to identify exactly one edge. A broader +reference can intentionally match multiple edges so that an operation applies +to all of them. Add `endFaces` or `index` only when the operation should target +a smaller subset of those matches. + +Surface bodies do not always provide two side faces or useful end faces. Their +edge references can therefore contain a single `sideFaces` entry and rely on +`index` more often to choose a boundary edge. + +The same edge-reference object can be used by operations such as `fillet`, +`chamfer`, `revolve`, `helix`, and `mirror3d` where their parameter accepts an +edge. + +Sketch segments remain direct references, such as `sketch001.line1`. Edge +reference objects are for edges on generated bodies, where adjacent face tags +provide a stable description of the intended geometry. + +## Edges involving generated faces + +Fillets and chamfers create new faces that can form part of edges used by later +operations. Add `tag` to the edge-treatment operation to name its generated +face, then use that tag in the later edge reference. The existing operation +produces the face and should remain in the model; selecting one of its generated +faces does not mean replacing the operation itself. + +For example, this fillet targets the edge shared by the existing chamfer face +and the extrusion's end cap: + +```kcl,norun +chamfer001 = chamfer( + body001, + edges = [{ + sideFaces = [region001.tags.right, region001.tags.bottom] + }], + length = 4, + tag = $chamferFace, +) + +fillet001 = fillet( + body001, + edges = [{ + sideFaces = [chamferFace, endCap] + }], + radius = 2, +) +``` diff --git a/content/pages/docs/kcl-lang/index.md b/content/pages/docs/kcl-lang/index.md index fa50e40c..2eec33ee 100644 --- a/content/pages/docs/kcl-lang/index.md +++ b/content/pages/docs/kcl-lang/index.md @@ -18,6 +18,7 @@ things in a more tutorial fashion. See also our documentation of the [standard l * [Arrays and ranges](/docs/kcl-lang/arrays) * [Enums](/docs/kcl-lang/enums) * [Sketch on Face](/docs/kcl-lang/sketch-on-face) +* [Edge references](/docs/kcl-lang/edge-references) * [Projects and modules](/docs/kcl-lang/modules) * [Attributes](/docs/kcl-lang/attributes) * [Python-to-KCL Cheat Sheet](/docs/kcl-lang/python-cheat-sheet) diff --git a/content/pages/docs/kcl-samples/angle-gauge/main.kcl b/content/pages/docs/kcl-samples/angle-gauge/main.kcl index 9c52acf7..31d14b95 100644 --- a/content/pages/docs/kcl-samples/angle-gauge/main.kcl +++ b/content/pages/docs/kcl-samples/angle-gauge/main.kcl @@ -46,13 +46,13 @@ gaugeProfileSketch = sketch(on = XY) { vertical(lowerRightOuterEdge) horizontalDistance([ - bottomOuterEdge.end, - bottomOuterEdge.start -]) == gaugeDepth + bottomOuterEdge.end, + bottomOuterEdge.start + ]) == gaugeDepth verticalDistance([ - lowerRightOuterEdge.end, - lowerRightOuterEdge.start -]) == lowerCutoutStartY + lowerRightOuterEdge.end, + lowerRightOuterEdge.start + ]) == lowerCutoutStartY // Angled cutout profile. cutoutAngledEdge = line(start = [var 1.5in, var 0.19in], end = [var 0.5in, var 0.37in]) @@ -89,18 +89,18 @@ gaugeProfileSketch = sketch(on = XY) { horizontal(cutoutAngleReferenceEdge) vertical(cutoutLeftVerticalEdge) angleDimension( - lines = [ - cutoutAngleReferenceEdge, - cutoutAngledEdge - ], - sector = 1, -) == cutoutAngle + lines = [ + cutoutAngleReferenceEdge, + cutoutAngledEdge + ], + sector = 1, + ) == cutoutAngle horizontalDistance([cutoutTopEdge.start, cutoutTopEdge.end]) == cutoutDepth verticalDistance([ - rightCutoutConstructionEdge.end, - rightCutoutConstructionEdge.start -]) == cutoutWidth + rightCutoutConstructionEdge.end, + rightCutoutConstructionEdge.start + ]) == cutoutWidth verticalDistance([leftOuterEdge.start, leftOuterEdge.end]) == gaugeWidth coincident([ rightCutoutConstructionEdge.end, diff --git a/content/pages/docs/kcl-samples/bracket-with-slot/main.kcl b/content/pages/docs/kcl-samples/bracket-with-slot/main.kcl index aad494ca..ff963067 100644 --- a/content/pages/docs/kcl-samples/bracket-with-slot/main.kcl +++ b/content/pages/docs/kcl-samples/bracket-with-slot/main.kcl @@ -133,9 +133,9 @@ tabHoleSketch = sketch(on = tabHolePlane) { ]) horizontal(countersinkGuide) horizontalDistance([ - countersinkGuide.start, - countersinkGuide.end -]) == countersinkOuterDiameter / 2 + countersinkGuide.start, + countersinkGuide.end + ]) == countersinkOuterDiameter / 2 coincident([ fastenerCircle.center, @@ -246,9 +246,9 @@ slotProfile = sketch(on = XY) { vertical(rightBottomGuide) horizontalDistance([ - slotCenterline.start, - slotCenterline.end -]) == slotOverallLength + slotCenterline.start, + slotCenterline.end + ]) == slotOverallLength radius(arc2) == slotWidth / 2 radius(arc4) == slotWidth / 2 coincident([ diff --git a/content/pages/docs/kcl-samples/ceiling-fan/main.kcl b/content/pages/docs/kcl-samples/ceiling-fan/main.kcl index 7458b78d..095fdd47 100644 --- a/content/pages/docs/kcl-samples/ceiling-fan/main.kcl +++ b/content/pages/docs/kcl-samples/ceiling-fan/main.kcl @@ -143,23 +143,23 @@ bladeProfile = sketch(on = bladePlane) { verticalDistance([bladeAxisSpan.start, bladeAxisSpan.end]) == bladeSpanLength - bladeTipRadius verticalDistance([bladeAxisTip.start, bladeAxisTip.end]) == bladeTipRadius horizontalDistance([ - rootGuideRight.start, - rootGuideRight.end -]) == bladeRootHalfWidth + rootGuideRight.start, + rootGuideRight.end + ]) == bladeRootHalfWidth horizontalDistance([rootGuideLeft.start, rootGuideLeft.end]) == bladeRootHalfWidth horizontalDistance([ - neckGuideRight.start, - neckGuideRight.end -]) == bladeNeckHalfWidth + neckGuideRight.start, + neckGuideRight.end + ]) == bladeNeckHalfWidth horizontalDistance([neckGuideLeft.start, neckGuideLeft.end]) == bladeNeckHalfWidth horizontalDistance([ - tipCenterGuideRight.start, - tipCenterGuideRight.end -]) == bladeTipFlatHalfWidth + tipCenterGuideRight.start, + tipCenterGuideRight.end + ]) == bladeTipFlatHalfWidth horizontalDistance([ - tipCenterGuideLeft.start, - tipCenterGuideLeft.end -]) == bladeTipFlatHalfWidth + tipCenterGuideLeft.start, + tipCenterGuideLeft.end + ]) == bladeTipFlatHalfWidth } // Step 2: extrude the solved blade blank. @@ -199,9 +199,9 @@ voidProfile = sketch(on = YZ) { vertical(outerEdge) tangent([bottomEdge, innerArc]) verticalDistance([ - baseOffsetGuide.start, - baseOffsetGuide.end -]) == voidCutoutBottomOffset + baseOffsetGuide.start, + baseOffsetGuide.end + ]) == voidCutoutBottomOffset verticalDistance([arcRiseGuide.start, arcRiseGuide.end]) == voidCutoutHeight horizontalDistance([topEdge.start, topEdge.end]) == voidCutoutLength diff --git a/content/pages/docs/kcl-samples/cold-plate/main.kcl b/content/pages/docs/kcl-samples/cold-plate/main.kcl index e5794ee5..20d74e79 100644 --- a/content/pages/docs/kcl-samples/cold-plate/main.kcl +++ b/content/pages/docs/kcl-samples/cold-plate/main.kcl @@ -314,42 +314,42 @@ copperTubePath = sketch(on = offsetPlane(XY, offset = tubeDiameter)) { horizontalDistance([inletGuide.start, inletGuide.end]) == tubeInletX verticalDistance([inletGuide.start, inletGuide.end]) == tubeLowerPassY horizontalDistance([ - rightLowerLoopGuide.start, - rightLowerLoopGuide.end -]) == tubeRightLoopX + rightLowerLoopGuide.start, + rightLowerLoopGuide.end + ]) == tubeRightLoopX verticalDistance([ - rightLowerLoopGuide.start, - rightLowerLoopGuide.end -]) == tubeLowerLoopCenterY + rightLowerLoopGuide.start, + rightLowerLoopGuide.end + ]) == tubeLowerLoopCenterY horizontalDistance([leftLoopGuide.start, leftLoopGuide.end]) == tubeLeftLoopX verticalDistance([leftLoopGuide.start, leftLoopGuide.end]) == 0in horizontalDistance([ - rightUpperLoopGuide.start, - rightUpperLoopGuide.end -]) == tubeRightLoopX + rightUpperLoopGuide.start, + rightUpperLoopGuide.end + ]) == tubeRightLoopX verticalDistance([ - rightUpperLoopGuide.start, - rightUpperLoopGuide.end -]) == tubeUpperLoopCenterY + rightUpperLoopGuide.start, + rightUpperLoopGuide.end + ]) == tubeUpperLoopCenterY horizontalDistance([outletGuide.start, outletGuide.end]) == tubeInletX verticalDistance([outletGuide.start, outletGuide.end]) == tubeUpperPassY distance([ - rightLowerArcStartGuide.start, - rightLowerArcStartGuide.end -]) == bendRadius + rightLowerArcStartGuide.start, + rightLowerArcStartGuide.end + ]) == bendRadius equalLength([ rightLowerArcStartGuide, rightLowerArcEndGuide ]) distance([ - leftArcStartGuide.start, - leftArcStartGuide.end -]) == bendRadius + leftArcStartGuide.start, + leftArcStartGuide.end + ]) == bendRadius equalLength([leftArcStartGuide, leftArcEndGuide]) distance([ - rightUpperArcStartGuide.start, - rightUpperArcStartGuide.end -]) == bendRadius + rightUpperArcStartGuide.start, + rightUpperArcStartGuide.end + ]) == bendRadius equalLength([ rightUpperArcStartGuide, rightUpperArcEndGuide @@ -389,21 +389,21 @@ brazedCapProfile = sketch(on = YZ) { tangent([arc3, line4]) vertical(line4) horizontalDistance([ - bottomCenterGuide.start, - bottomCenterGuide.end -]) == secondGrooveCenterY + bottomCenterGuide.start, + bottomCenterGuide.end + ]) == secondGrooveCenterY verticalDistance([ - bottomCenterGuide.start, - bottomCenterGuide.end -]) == grooveFloorZ + bottomCenterGuide.start, + bottomCenterGuide.end + ]) == grooveFloorZ horizontalDistance([ - topCenterGuide.start, - topCenterGuide.end -]) == secondGrooveCenterY + topCenterGuide.start, + topCenterGuide.end + ]) == secondGrooveCenterY verticalDistance([ - topCenterGuide.start, - topCenterGuide.end -]) == plateTopZ + tubeDiameter * 0.75 + topCenterGuide.start, + topCenterGuide.end + ]) == plateTopZ + tubeDiameter * 0.75 distance([line2.start, line2.end]) == grooveWallHeight equalLength([line2, line4]) radius(arc3) == tubeOuterRadius @@ -453,13 +453,13 @@ tubeSectionSketch = sketch(on = offsetPlane(YZ, offset = tubeInletX)) { horizontalDistance([centerGuide.start, centerGuide.end]) == tubeLowerPassY verticalDistance([centerGuide.start, centerGuide.end]) == grooveFloorZ horizontalDistance([ - outerRadiusGuide.start, - outerRadiusGuide.end -]) == tubeOuterRadius + outerRadiusGuide.start, + outerRadiusGuide.end + ]) == tubeOuterRadius horizontalDistance([ - innerRadiusGuide.start, - innerRadiusGuide.end -]) == tubeInnerRadius + innerRadiusGuide.start, + innerRadiusGuide.end + ]) == tubeInnerRadius } tubeSectionProfile = region(segments = [tubeSectionSketch.outerCircle]) diff --git a/content/pages/docs/kcl-samples/counterdrilled-weldment/main.kcl b/content/pages/docs/kcl-samples/counterdrilled-weldment/main.kcl index 3f1bf97d..1e873c06 100644 --- a/content/pages/docs/kcl-samples/counterdrilled-weldment/main.kcl +++ b/content/pages/docs/kcl-samples/counterdrilled-weldment/main.kcl @@ -63,9 +63,9 @@ plateSketch = sketch(on = XY) { ]) horizontal(innerHoleRadiusGuide) horizontalDistance([ - innerHoleRadiusGuide.start, - innerHoleRadiusGuide.end -]) == tubeInnerDiameter / 2 + innerHoleRadiusGuide.start, + innerHoleRadiusGuide.end + ]) == tubeInnerDiameter / 2 radius(innerHole) == tubeInnerDiameter / 2 } @@ -110,9 +110,9 @@ holeSeedSketch = sketch(on = holeSeedPlane) { horizontalDistance([holeOffsetX.start, holeOffsetX.end]) == -boltSpacingX / 2 verticalDistance([holeOffsetY.start, holeOffsetY.end]) == -boltSpacingY / 2 horizontalDistance([ - holeRadiusGuide.start, - holeRadiusGuide.end -]) == boltDiameter / 2 + holeRadiusGuide.start, + holeRadiusGuide.end + ]) == boltDiameter / 2 radius(holeCircle) == boltDiameter / 2 } @@ -161,9 +161,9 @@ counterdrillSeedSketch = sketch(on = holeSeedPlane) { horizontalDistance([holeOffsetX.start, holeOffsetX.end]) == -boltSpacingX / 2 verticalDistance([holeOffsetY.start, holeOffsetY.end]) == -boltSpacingY / 2 horizontalDistance([ - counterdrillRadiusGuide.start, - counterdrillRadiusGuide.end -]) == counterdrillDiameter / 2 + counterdrillRadiusGuide.start, + counterdrillRadiusGuide.end + ]) == counterdrillDiameter / 2 radius(counterdrillCircle) == counterdrillDiameter / 2 } @@ -217,13 +217,13 @@ pinholeSketch = sketch(on = YZ) { vertical(pinholeCenterGuide) horizontal(pinholeRadiusGuide) verticalDistance([ - pinholeCenterGuide.start, - pinholeCenterGuide.end -]) == pinholeHeight + pinholeCenterGuide.start, + pinholeCenterGuide.end + ]) == pinholeHeight horizontalDistance([ - pinholeRadiusGuide.start, - pinholeRadiusGuide.end -]) == boltDiameter / 2 + pinholeRadiusGuide.start, + pinholeRadiusGuide.end + ]) == boltDiameter / 2 radius(pinholeCircle) == boltDiameter / 2 } @@ -253,13 +253,13 @@ centralTubeSketch = sketch(on = offsetPlane(XY, offset = stockThickness)) { horizontal(outerRadiusGuide) horizontal(innerRadiusGuide) horizontalDistance([ - outerRadiusGuide.start, - outerRadiusGuide.end -]) == tubeOuterRadius + outerRadiusGuide.start, + outerRadiusGuide.end + ]) == tubeOuterRadius horizontalDistance([ - innerRadiusGuide.start, - innerRadiusGuide.end -]) == tubeInnerDiameter / 2 + innerRadiusGuide.start, + innerRadiusGuide.end + ]) == tubeInnerDiameter / 2 radius(outerCircle) == tubeOuterRadius radius(innerCircle) == tubeInnerDiameter / 2 } diff --git a/content/pages/docs/kcl-samples/countersunk-plate/main.kcl b/content/pages/docs/kcl-samples/countersunk-plate/main.kcl index e40324a8..da63c7d0 100644 --- a/content/pages/docs/kcl-samples/countersunk-plate/main.kcl +++ b/content/pages/docs/kcl-samples/countersunk-plate/main.kcl @@ -108,9 +108,9 @@ plateSketch = sketch(on = XY) { horizontal(rightSpacingGuide) equalLength([leftSpacingGuide, rightSpacingGuide]) horizontalDistance([ - leftSpacingGuide.start, - rightSpacingGuide.end -]) == boltSpacing + leftSpacingGuide.start, + rightSpacingGuide.end + ]) == boltSpacing radius(leftEndArc) == endLobeRadius radius(rightEndArc) == endLobeRadius diff --git a/content/pages/docs/kcl-samples/crash-box/main.kcl b/content/pages/docs/kcl-samples/crash-box/main.kcl index ef74e742..7d71322e 100644 --- a/content/pages/docs/kcl-samples/crash-box/main.kcl +++ b/content/pages/docs/kcl-samples/crash-box/main.kcl @@ -55,13 +55,13 @@ crashBoxProfile = sketch(on = XY) { horizontalDistance([bottomEdge.start, bottomEdge.end]) == crashBoxOuterWidth verticalDistance([leftEdge.end, leftEdge.start]) == crashBoxOuterWidth verticalDistance([ - verticalCenterGuide.end, - verticalCenterGuide.start -]) == crashBoxOuterWidth / 2 + verticalCenterGuide.end, + verticalCenterGuide.start + ]) == crashBoxOuterWidth / 2 horizontalDistance([ - horizontalCenterGuide.start, - horizontalCenterGuide.end -]) == crashBoxOuterWidth / 2 + horizontalCenterGuide.start, + horizontalCenterGuide.end + ]) == crashBoxOuterWidth / 2 } crashBoxRegion = region(segments = [ diff --git a/content/pages/docs/kcl-samples/curtain-wall-anchor-plate/main.kcl b/content/pages/docs/kcl-samples/curtain-wall-anchor-plate/main.kcl index 0a0473f3..915b239a 100644 --- a/content/pages/docs/kcl-samples/curtain-wall-anchor-plate/main.kcl +++ b/content/pages/docs/kcl-samples/curtain-wall-anchor-plate/main.kcl @@ -131,9 +131,9 @@ slotProfile = sketch(on = XY) { vertical(rightBottomGuide) horizontalDistance([ - slotCenterline.start, - slotCenterline.end -]) == wideHoleLength - wideHoleWidth + slotCenterline.start, + slotCenterline.end + ]) == wideHoleLength - wideHoleWidth radius(arc2) == wideHoleWidth / 2 radius(arc4) == wideHoleWidth / 2 coincident([ @@ -207,9 +207,9 @@ boltHeadProfile = sketch(on = XY) { ]) horizontal(boltHeadRadiusGuide) horizontalDistance([ - boltHeadRadiusGuide.start, - boltHeadRadiusGuide.end -]) == boltHeadRadius + boltHeadRadiusGuide.start, + boltHeadRadiusGuide.end + ]) == boltHeadRadius } boltHeadRegion = region( @@ -317,9 +317,9 @@ nutProfile = sketch(on = faceOf(clampPlateBody, face = START)) { coincident([nutCircle.start, nutRadiusGuide.end]) horizontal(nutRadiusGuide) horizontalDistance([ - nutRadiusGuide.start, - nutRadiusGuide.end -]) == nutRadius + nutRadiusGuide.start, + nutRadiusGuide.end + ]) == nutRadius } nutRegion = region(segments = [nutProfile.line1, nutProfile.line2], direction = CW) diff --git a/content/pages/docs/kcl-samples/enclosure/main.kcl b/content/pages/docs/kcl-samples/enclosure/main.kcl index c25865f0..9e4d4a14 100644 --- a/content/pages/docs/kcl-samples/enclosure/main.kcl +++ b/content/pages/docs/kcl-samples/enclosure/main.kcl @@ -156,9 +156,9 @@ lidSketch = sketch(on = lidPlane) { horizontalDistance([line1.start, holeRectBottom.start]) == innerOffset verticalDistance([line1.start, holeRectBottom.start]) == innerOffset distance([ - holeRectBottom.start, - holeRectBottom.end -]) == holeSpanX + holeRectBottom.start, + holeRectBottom.end + ]) == holeSpanX distance([holeRectRight.start, holeRectRight.end]) == holeSpanY holeGuideFrontLeft = line(start = [var 13mm, var 13mm], end = [var 17mm, var 13mm], construction = true) @@ -168,9 +168,9 @@ lidSketch = sketch(on = lidPlane) { ]) horizontal(holeGuideFrontLeft) distance([ - holeGuideFrontLeft.start, - holeGuideFrontLeft.end -]) == holeDia + holeGuideFrontLeft.start, + holeGuideFrontLeft.end + ]) == holeDia holeFrontLeft = circle(start = [var 17mm, var 13mm], center = [var 13mm, var 13mm]) coincident([ holeFrontLeft.center, @@ -188,9 +188,9 @@ lidSketch = sketch(on = lidPlane) { ]) horizontal(holeGuideFrontRight) distance([ - holeGuideFrontRight.start, - holeGuideFrontRight.end -]) == holeDia + holeGuideFrontRight.start, + holeGuideFrontRight.end + ]) == holeDia holeFrontRight = circle(start = [var 116mm, var 13mm], center = [var 112mm, var 13mm]) coincident([ holeFrontRight.center, @@ -208,9 +208,9 @@ lidSketch = sketch(on = lidPlane) { ]) horizontal(holeGuideBackRight) distance([ - holeGuideBackRight.start, - holeGuideBackRight.end -]) == holeDia + holeGuideBackRight.start, + holeGuideBackRight.end + ]) == holeDia holeBackRight = circle(start = [var 116mm, var 162mm], center = [var 112mm, var 162mm]) coincident([ holeBackRight.center, @@ -228,9 +228,9 @@ lidSketch = sketch(on = lidPlane) { ]) horizontal(holeGuideBackLeft) distance([ - holeGuideBackLeft.start, - holeGuideBackLeft.end -]) == holeDia + holeGuideBackLeft.start, + holeGuideBackLeft.end + ]) == holeDia holeBackLeft = circle(start = [var 17mm, var 162mm], center = [var 13mm, var 162mm]) coincident([ holeBackLeft.center, @@ -317,9 +317,9 @@ lidLipSketch = sketch(on = faceOf(lidPlate, face = END)) { horizontalDistance([line1.start, holeRectBottom.start]) == lidLipHoleOffset verticalDistance([line1.start, holeRectBottom.start]) == lidLipHoleOffset distance([ - holeRectBottom.start, - holeRectBottom.end -]) == holeSpanX + holeRectBottom.start, + holeRectBottom.end + ]) == holeSpanX distance([holeRectRight.start, holeRectRight.end]) == holeSpanY holeGuideFrontLeft = line(start = [var 163mm, var 13mm], end = [var 170mm, var 13mm], construction = true) @@ -329,9 +329,9 @@ lidLipSketch = sketch(on = faceOf(lidPlate, face = END)) { ]) horizontal(holeGuideFrontLeft) distance([ - holeGuideFrontLeft.start, - holeGuideFrontLeft.end -]) == lidLipClearanceRadius + holeGuideFrontLeft.start, + holeGuideFrontLeft.end + ]) == lidLipClearanceRadius holeFrontLeft = circle(start = [var 170mm, var 13mm], center = [var 163mm, var 13mm]) coincident([ holeFrontLeft.center, @@ -349,9 +349,9 @@ lidLipSketch = sketch(on = faceOf(lidPlate, face = END)) { ]) horizontal(holeGuideFrontRight) distance([ - holeGuideFrontRight.start, - holeGuideFrontRight.end -]) == lidLipClearanceRadius + holeGuideFrontRight.start, + holeGuideFrontRight.end + ]) == lidLipClearanceRadius holeFrontRight = circle(start = [var 269mm, var 13mm], center = [var 262mm, var 13mm]) coincident([ holeFrontRight.center, @@ -369,9 +369,9 @@ lidLipSketch = sketch(on = faceOf(lidPlate, face = END)) { ]) horizontal(holeGuideBackRight) distance([ - holeGuideBackRight.start, - holeGuideBackRight.end -]) == lidLipClearanceRadius + holeGuideBackRight.start, + holeGuideBackRight.end + ]) == lidLipClearanceRadius holeBackRight = circle(start = [var 269mm, var 162mm], center = [var 262mm, var 162mm]) coincident([ holeBackRight.center, @@ -389,9 +389,9 @@ lidLipSketch = sketch(on = faceOf(lidPlate, face = END)) { ]) horizontal(holeGuideBackLeft) distance([ - holeGuideBackLeft.start, - holeGuideBackLeft.end -]) == lidLipClearanceRadius + holeGuideBackLeft.start, + holeGuideBackLeft.end + ]) == lidLipClearanceRadius holeBackLeft = circle(start = [var 170mm, var 162mm], center = [var 163mm, var 162mm]) coincident([ holeBackLeft.center, diff --git a/content/pages/docs/kcl-samples/flange/main.kcl b/content/pages/docs/kcl-samples/flange/main.kcl index 728d180b..5b5d4b0c 100644 --- a/content/pages/docs/kcl-samples/flange/main.kcl +++ b/content/pages/docs/kcl-samples/flange/main.kcl @@ -98,41 +98,41 @@ baseProfile = sketch(on = XY) { vertical(bottomRadiusGuide) distance([ - outerRadiusGuide.start, - outerRadiusGuide.end -]) == baseRadius + outerRadiusGuide.start, + outerRadiusGuide.end + ]) == baseRadius horizontalDistance([ - rightCenterGuide.start, - rightCenterGuide.end -]) == mountingHolePlacementRadius + rightCenterGuide.start, + rightCenterGuide.end + ]) == mountingHolePlacementRadius verticalDistance([ - topCenterGuide.start, - topCenterGuide.end -]) == mountingHolePlacementRadius + topCenterGuide.start, + topCenterGuide.end + ]) == mountingHolePlacementRadius horizontalDistance([ - leftCenterGuide.start, - leftCenterGuide.end -]) == -mountingHolePlacementRadius + leftCenterGuide.start, + leftCenterGuide.end + ]) == -mountingHolePlacementRadius verticalDistance([ - bottomCenterGuide.start, - bottomCenterGuide.end -]) == -mountingHolePlacementRadius + bottomCenterGuide.start, + bottomCenterGuide.end + ]) == -mountingHolePlacementRadius distance([ - rightRadiusGuide.start, - rightRadiusGuide.end -]) == mountingHoleRadius + rightRadiusGuide.start, + rightRadiusGuide.end + ]) == mountingHoleRadius distance([ - topRadiusGuide.start, - topRadiusGuide.end -]) == mountingHoleRadius + topRadiusGuide.start, + topRadiusGuide.end + ]) == mountingHoleRadius distance([ - leftRadiusGuide.start, - leftRadiusGuide.end -]) == mountingHoleRadius + leftRadiusGuide.start, + leftRadiusGuide.end + ]) == mountingHoleRadius distance([ - bottomRadiusGuide.start, - bottomRadiusGuide.end -]) == mountingHoleRadius + bottomRadiusGuide.start, + bottomRadiusGuide.end + ]) == mountingHoleRadius } baseRegion = region(segments = [baseProfile.outerCircle]) diff --git a/content/pages/docs/kcl-samples/flat-bladed-impeller/main.kcl b/content/pages/docs/kcl-samples/flat-bladed-impeller/main.kcl index f7fcd24c..846e879e 100644 --- a/content/pages/docs/kcl-samples/flat-bladed-impeller/main.kcl +++ b/content/pages/docs/kcl-samples/flat-bladed-impeller/main.kcl @@ -72,9 +72,9 @@ disk = sketch(on = diskPlane) { horizontal(diskRadiusGuide) distance([ - diskRadiusGuide.start, - diskRadiusGuide.end -]) == outerRadius + diskRadiusGuide.start, + diskRadiusGuide.end + ]) == outerRadius } region002 = region(segments = [disk.circle1]) @@ -92,9 +92,9 @@ hubCircle = sketch(on = faceOf(backPlate, face = END)) { horizontal(hubRadiusGuide) distance([ - hubRadiusGuide.start, - hubRadiusGuide.end -]) == hubOutsideDiameter / 2 + hubRadiusGuide.start, + hubRadiusGuide.end + ]) == hubOutsideDiameter / 2 } region003 = region(segments = [hubCircle.circle1]) @@ -112,9 +112,9 @@ boreCircle = sketch(on = faceOf(backPlate, face = START)) { horizontal(boreRadiusGuide) distance([ - boreRadiusGuide.start, - boreRadiusGuide.end -]) == boreDiameter / 2 + boreRadiusGuide.start, + boreRadiusGuide.end + ]) == boreDiameter / 2 } region004 = region(segments = [boreCircle.circle1]) diff --git a/content/pages/docs/kcl-samples/gallows-bracket/main.kcl b/content/pages/docs/kcl-samples/gallows-bracket/main.kcl index 9d1ad607..374923c0 100644 --- a/content/pages/docs/kcl-samples/gallows-bracket/main.kcl +++ b/content/pages/docs/kcl-samples/gallows-bracket/main.kcl @@ -59,9 +59,9 @@ beamProfileSketch = sketch(on = -XZ) { coincident([beamBottomOuter.start, ORIGIN]) horizontalDistance([ - beamBottomOuter.start, - beamBottomOuter.end -]) == ironWidth + beamBottomOuter.start, + beamBottomOuter.end + ]) == ironWidth verticalDistance([beamOuterLip.start, beamOuterLip.end]) == -ironThickness horizontalDistance([beamCloseEdge.end, beamInnerTop.end]) == ironThickness verticalDistance([beamCloseEdge.end, beamOuterWeb.start]) == -ironWidth @@ -127,21 +127,21 @@ verticalProfileSketch = sketch(on = -XZ) { coincident([verticalBottomOuter.start, ORIGIN]) horizontalDistance([ - verticalBottomOuter.start, - verticalBottomOuter.end -]) == ironWidth + verticalBottomOuter.start, + verticalBottomOuter.end + ]) == ironWidth verticalDistance([ - verticalOuterLip.start, - verticalOuterLip.end -]) == -ironThickness + verticalOuterLip.start, + verticalOuterLip.end + ]) == -ironThickness horizontalDistance([ - verticalCloseEdge.end, - verticalInnerTop.end -]) == ironThickness + verticalCloseEdge.end, + verticalInnerTop.end + ]) == ironThickness verticalDistance([ - verticalCloseEdge.end, - verticalOuterWeb.start -]) == -ironWidth + verticalCloseEdge.end, + verticalOuterWeb.start + ]) == -ironWidth } verticalRegion = region(segments = [ @@ -186,25 +186,25 @@ verticalEndMiterSketch = sketch(on = XY) { horizontalDistance([ORIGIN, verticalEndMiterEdge.start]) == verticalEndMiterStartX verticalDistance([ORIGIN, verticalEndMiterEdge.start]) == verticalEndMiterStartY horizontalDistance([ - verticalEndMiterEdge.start, - verticalEndMiterEdge.end -]) == verticalEndMiterRun + verticalEndMiterEdge.start, + verticalEndMiterEdge.end + ]) == verticalEndMiterRun verticalDistance([ - verticalEndMiterEdge.start, - verticalEndMiterEdge.end -]) == -verticalEndMiterRise + verticalEndMiterEdge.start, + verticalEndMiterEdge.end + ]) == -verticalEndMiterRise verticalDistance([ - verticalEndRightEdge.start, - verticalEndRightEdge.end -]) == verticalEndMiterRise + csgFriendlyOffset + verticalEndRightEdge.start, + verticalEndRightEdge.end + ]) == verticalEndMiterRise + csgFriendlyOffset horizontalDistance([ - verticalEndTopEdge.start, - verticalEndTopEdge.end -]) == -verticalEndMiterRun + verticalEndTopEdge.start, + verticalEndTopEdge.end + ]) == -verticalEndMiterRun verticalDistance([ - verticalEndLeftEdge.start, - verticalEndLeftEdge.end -]) == -csgFriendlyOffset + verticalEndLeftEdge.start, + verticalEndLeftEdge.end + ]) == -csgFriendlyOffset } verticalEndMiterRegion = region(segments = [ @@ -252,17 +252,17 @@ verticalHoleSketch = sketch(on = verticalHolePlane) { horizontal(verticalHoleRadiusGuide) horizontalDistance([ - verticalHoleOffsetAcross.start, - verticalHoleOffsetAcross.end -]) == -ironWidth / 2 + verticalHoleOffsetAcross.start, + verticalHoleOffsetAcross.end + ]) == -ironWidth / 2 verticalDistance([ - verticalHoleOffsetUp.start, - verticalHoleOffsetUp.end -]) == bottomBoltOffset + verticalHoleOffsetUp.start, + verticalHoleOffsetUp.end + ]) == bottomBoltOffset horizontalDistance([ - verticalHoleRadiusGuide.start, - verticalHoleRadiusGuide.end -]) == clearanceBoltRadius + verticalHoleRadiusGuide.start, + verticalHoleRadiusGuide.end + ]) == clearanceBoltRadius radius(verticalHoleCircle) == clearanceBoltRadius } @@ -322,21 +322,21 @@ horizontalProfileSketch = sketch(on = -XZ) { coincident([horizontalBottomOuter.start, ORIGIN]) horizontalDistance([ - horizontalBottomOuter.start, - horizontalBottomOuter.end -]) == ironWidth + horizontalBottomOuter.start, + horizontalBottomOuter.end + ]) == ironWidth verticalDistance([ - horizontalOuterLip.start, - horizontalOuterLip.end -]) == -ironThickness + horizontalOuterLip.start, + horizontalOuterLip.end + ]) == -ironThickness horizontalDistance([ - horizontalCloseEdge.end, - horizontalInnerTop.end -]) == ironThickness + horizontalCloseEdge.end, + horizontalInnerTop.end + ]) == ironThickness verticalDistance([ - horizontalCloseEdge.end, - horizontalOuterWeb.start -]) == -ironWidth + horizontalCloseEdge.end, + horizontalOuterWeb.start + ]) == -ironWidth } horizontalRegion = region(segments = [ @@ -381,25 +381,25 @@ horizontalStartMiterSketch = sketch(on = XY) { horizontalDistance([ORIGIN, horizontalStartMiterEdge.start]) == horizontalStartMiterStartX verticalDistance([ORIGIN, horizontalStartMiterEdge.start]) == horizontalStartMiterStartY horizontalDistance([ - horizontalStartMiterEdge.start, - horizontalStartMiterEdge.end -]) == horizontalStartMiterRun + horizontalStartMiterEdge.start, + horizontalStartMiterEdge.end + ]) == horizontalStartMiterRun verticalDistance([ - horizontalStartMiterEdge.start, - horizontalStartMiterEdge.end -]) == horizontalStartMiterRise + horizontalStartMiterEdge.start, + horizontalStartMiterEdge.end + ]) == horizontalStartMiterRise verticalDistance([ - horizontalStartRightEdge.start, - horizontalStartRightEdge.end -]) == -(horizontalStartMiterRise + csgFriendlyOffset) + horizontalStartRightEdge.start, + horizontalStartRightEdge.end + ]) == -(horizontalStartMiterRise + csgFriendlyOffset) horizontalDistance([ - horizontalStartBottomEdge.start, - horizontalStartBottomEdge.end -]) == -horizontalStartMiterRun + horizontalStartBottomEdge.start, + horizontalStartBottomEdge.end + ]) == -horizontalStartMiterRun verticalDistance([ - horizontalStartLeftEdge.start, - horizontalStartLeftEdge.end -]) == csgFriendlyOffset + horizontalStartLeftEdge.start, + horizontalStartLeftEdge.end + ]) == csgFriendlyOffset } horizontalStartMiterRegion = region(segments = [ @@ -450,17 +450,17 @@ horizontalHoleSketch = sketch(on = horizontalHolePlane) { horizontal(horizontalHoleRadiusGuide) horizontalDistance([ - horizontalHoleOffsetForward.start, - horizontalHoleOffsetForward.end -]) == depth - (ironWidth / 2) + horizontalHoleOffsetForward.start, + horizontalHoleOffsetForward.end + ]) == depth - (ironWidth / 2) verticalDistance([ - horizontalHoleOffsetAcross.start, - horizontalHoleOffsetAcross.end -]) == -ironWidth / 2 + horizontalHoleOffsetAcross.start, + horizontalHoleOffsetAcross.end + ]) == -ironWidth / 2 horizontalDistance([ - horizontalHoleRadiusGuide.start, - horizontalHoleRadiusGuide.end -]) == clearanceBoltRadius + horizontalHoleRadiusGuide.start, + horizontalHoleRadiusGuide.end + ]) == clearanceBoltRadius radius(horizontalHoleCircle) == clearanceBoltRadius } @@ -507,15 +507,15 @@ strutProfileSketch = sketch(on = -XZ) { coincident([strutBottomOuter.start, ORIGIN]) horizontalDistance([ - strutBottomOuter.start, - strutBottomOuter.end -]) == strutSectionWidth + strutBottomOuter.start, + strutBottomOuter.end + ]) == strutSectionWidth verticalDistance([strutOuterLip.start, strutOuterLip.end]) == -ironThickness horizontalDistance([strutCloseEdge.end, strutInnerTop.end]) == ironThickness verticalDistance([ - strutCloseEdge.end, - strutOuterWeb.start -]) == -strutSectionWidth + strutCloseEdge.end, + strutOuterWeb.start + ]) == -strutSectionWidth } strutRegion = region(segments = [ @@ -560,25 +560,25 @@ strutStartMiterSketch = sketch(on = XY) { horizontalDistance([ORIGIN, strutStartMiterEdge.start]) == strutStartMiterStartX verticalDistance([ORIGIN, strutStartMiterEdge.start]) == strutStartMiterStartY horizontalDistance([ - strutStartMiterEdge.start, - strutStartMiterEdge.end -]) == strutStartMiterRun + strutStartMiterEdge.start, + strutStartMiterEdge.end + ]) == strutStartMiterRun verticalDistance([ - strutStartMiterEdge.start, - strutStartMiterEdge.end -]) == strutStartMiterRise + strutStartMiterEdge.start, + strutStartMiterEdge.end + ]) == strutStartMiterRise verticalDistance([ - strutStartRightEdge.start, - strutStartRightEdge.end -]) == -(strutStartMiterRise + csgFriendlyOffset) + strutStartRightEdge.start, + strutStartRightEdge.end + ]) == -(strutStartMiterRise + csgFriendlyOffset) horizontalDistance([ - strutStartBottomEdge.start, - strutStartBottomEdge.end -]) == -strutStartMiterRun + strutStartBottomEdge.start, + strutStartBottomEdge.end + ]) == -strutStartMiterRun verticalDistance([ - strutStartLeftEdge.start, - strutStartLeftEdge.end -]) == csgFriendlyOffset + strutStartLeftEdge.start, + strutStartLeftEdge.end + ]) == csgFriendlyOffset } strutStartMiterRegion = region(segments = [ @@ -631,25 +631,25 @@ strutEndMiterSketch = sketch(on = XY) { horizontalDistance([ORIGIN, strutEndMiterEdge.start]) == strutEndMiterStartX verticalDistance([ORIGIN, strutEndMiterEdge.start]) == strutEndMiterStartY horizontalDistance([ - strutEndMiterEdge.start, - strutEndMiterEdge.end -]) == strutEndMiterRun + strutEndMiterEdge.start, + strutEndMiterEdge.end + ]) == strutEndMiterRun verticalDistance([ - strutEndMiterEdge.start, - strutEndMiterEdge.end -]) == -strutEndMiterRise + strutEndMiterEdge.start, + strutEndMiterEdge.end + ]) == -strutEndMiterRise verticalDistance([ - strutEndRightEdge.start, - strutEndRightEdge.end -]) == strutEndMiterRise + csgFriendlyOffset + strutEndRightEdge.start, + strutEndRightEdge.end + ]) == strutEndMiterRise + csgFriendlyOffset horizontalDistance([ - strutEndTopEdge.start, - strutEndTopEdge.end -]) == -strutEndMiterRun + strutEndTopEdge.start, + strutEndTopEdge.end + ]) == -strutEndMiterRun verticalDistance([ - strutEndLeftEdge.start, - strutEndLeftEdge.end -]) == -csgFriendlyOffset + strutEndLeftEdge.start, + strutEndLeftEdge.end + ]) == -csgFriendlyOffset } strutEndMiterRegion = region(segments = [ diff --git a/content/pages/docs/kcl-samples/gas-impeller/main.kcl b/content/pages/docs/kcl-samples/gas-impeller/main.kcl index e1710fe0..088eab53 100644 --- a/content/pages/docs/kcl-samples/gas-impeller/main.kcl +++ b/content/pages/docs/kcl-samples/gas-impeller/main.kcl @@ -45,9 +45,9 @@ hubAndBladeEnvelopeSketch = sketch(on = YZ) { coincident([shaftRadiusGuide.end, baseFloor.end]) horizontal(shaftRadiusGuide) horizontalDistance([ - shaftRadiusGuide.start, - shaftRadiusGuide.end -]) == shaftBoreDiameter / 2 + shaftRadiusGuide.start, + shaftRadiusGuide.end + ]) == shaftBoreDiameter / 2 verticalDistance([shaftWall.start, shaftWall.end]) == impellerHeight horizontalDistance([hubTopLand.start, hubTopLand.end]) == shaftBoreDiameter / 3 @@ -157,9 +157,9 @@ hubAndBladeEnvelopeSketch = sketch(on = YZ) { vertical(bladeEnvelopeTipCenterlineGuide) horizontal(bladeEnvelopeTipRadiusGuide) horizontalDistance([ - shaftRadiusGuide.start, - baseFloor.start -]) == impellerDiameter / 2 + shaftRadiusGuide.start, + baseFloor.start + ]) == impellerDiameter / 2 hubShoulderRadiusGuide = line(start = [var 7.33mm, var 59mm], end = [var 7.33mm, var 60mm]) coincident([ @@ -171,9 +171,9 @@ hubAndBladeEnvelopeSketch = sketch(on = YZ) { hubShoulderBlendArc.end ]) verticalDistance([ - hubShoulderRadiusGuide.end, - hubShoulderRadiusGuide.start -]) == -1 + hubShoulderRadiusGuide.end, + hubShoulderRadiusGuide.start + ]) == -1 } // Revolved bodies from the shared sketch @@ -237,17 +237,17 @@ bladeCutterSketch = sketch(on = XY) { vertical(bladeCutterOuterEdge) vertical(bladeCutterInnerEdge) horizontalDistance([ - bladeCutterInnerRadiusGuide.start, - bladeCutterInnerRadiusGuide.end -]) == shaftBoreDiameter / 2 + bladeCutterInnerRadiusGuide.start, + bladeCutterInnerRadiusGuide.end + ]) == shaftBoreDiameter / 2 horizontalDistance([ - bladeCutterBottomEdge.start, - bladeCutterBottomEdge.end -]) == impellerDiameter / 2 + bladeCutterBottomEdge.start, + bladeCutterBottomEdge.end + ]) == impellerDiameter / 2 verticalDistance([ - bladeCutterOuterEdge.start, - bladeCutterOuterEdge.end -]) == bladeSectionThickness + bladeCutterOuterEdge.start, + bladeCutterOuterEdge.end + ]) == bladeSectionThickness } // Blade cutter solid diff --git a/content/pages/docs/kcl-samples/gingerbread-man/main.kcl b/content/pages/docs/kcl-samples/gingerbread-man/main.kcl index 47048676..03ef3553 100644 --- a/content/pages/docs/kcl-samples/gingerbread-man/main.kcl +++ b/content/pages/docs/kcl-samples/gingerbread-man/main.kcl @@ -97,13 +97,13 @@ bodySketch = sketch(on = XY) { equalLength([line9, line12]) distance([centerline.start, centerline.end]) == 549mm verticalDistance([ - torsoRiseGuide.start, - torsoRiseGuide.end -]) == 57mm + torsoRiseGuide.start, + torsoRiseGuide.end + ]) == 57mm horizontalDistance([ - torsoReachGuide.start, - torsoReachGuide.end -]) == 77mm + torsoReachGuide.start, + torsoReachGuide.end + ]) == 77mm } bodyRegion = region(segments = [ bodySketch.line1, @@ -152,13 +152,13 @@ innerMouthSketch = sketch(on = decorationPlane) { vertical(mouthRiseGuide) horizontal(mouthReachGuide) verticalDistance([ - mouthRiseGuide.start, - mouthRiseGuide.end -]) == 401mm + mouthRiseGuide.start, + mouthRiseGuide.end + ]) == 401mm horizontalDistance([ - mouthReachGuide.start, - mouthReachGuide.end -]) == 41mm + mouthReachGuide.start, + mouthReachGuide.end + ]) == 41mm coincident([arc1.start, arc4.start]) } innerMouthRegion = region(segments = [ @@ -191,13 +191,13 @@ mouthSketch = sketch(on = decorationPlane) { vertical(mouthRiseGuide) horizontal(mouthReachGuide) verticalDistance([ - mouthRiseGuide.start, - mouthRiseGuide.end -]) == 405.86mm + mouthRiseGuide.start, + mouthRiseGuide.end + ]) == 405.86mm horizontalDistance([ - mouthReachGuide.start, - mouthReachGuide.end -]) == 37.56mm + mouthReachGuide.start, + mouthReachGuide.end + ]) == 37.56mm coincident([arc4.start, arc1.start]) } mouthRegion = region(segments = [ @@ -264,13 +264,13 @@ eyebrowSketch = sketch(on = decorationPlane) { vertical(eyebrowRiseGuide) horizontal(eyebrowReachGuide) verticalDistance([ - eyebrowRiseGuide.start, - eyebrowRiseGuide.end -]) == 503.47mm + eyebrowRiseGuide.start, + eyebrowRiseGuide.end + ]) == 503.47mm horizontalDistance([ - eyebrowReachGuide.start, - eyebrowReachGuide.end -]) == 37.9mm + eyebrowReachGuide.start, + eyebrowReachGuide.end + ]) == 37.9mm arc5 = arc(start = [var -86.17mm, var 485mm], end = [var -73.02mm, var 483.5mm], center = [var -79.72mm, var 483.11mm]) coincident([arc5.start, arc3.end]) coincident([arc5.end, arc1.end]) @@ -368,9 +368,9 @@ cuffSketch = sketch(on = decorationPlane) { horizontal(cuffReachGuide) verticalDistance([cuffRiseGuide.start, cuffRiseGuide.end]) == 184.88mm horizontalDistance([ - cuffReachGuide.start, - cuffReachGuide.end -]) == 224.97mm + cuffReachGuide.start, + cuffReachGuide.end + ]) == 224.97mm coincident([arc6.start, arc1.start]) } cuffRegion = region(segments = [cuffSketch.arc1, cuffSketch.arc2], direction = CW) diff --git a/content/pages/docs/kcl-samples/lego/main.kcl b/content/pages/docs/kcl-samples/lego/main.kcl index c3c63015..c96d39a0 100644 --- a/content/pages/docs/kcl-samples/lego/main.kcl +++ b/content/pages/docs/kcl-samples/lego/main.kcl @@ -63,13 +63,13 @@ pegSeedSketch = sketch(on = pegSketchPlane) { coincident([pegCenterGuide.end, ORIGIN]) radius(pegCircle) == bumpDiam / 2 horizontalDistance([ - pegCenterGuide.start, - pegCenterGuide.end -]) == -pegCenterX + pegCenterGuide.start, + pegCenterGuide.end + ]) == -pegCenterX verticalDistance([ - pegCenterGuide.start, - pegCenterGuide.end -]) == -pegCenterY + pegCenterGuide.start, + pegCenterGuide.end + ]) == -pegCenterY } pegRegion = region(segments = [pegSeedSketch.pegCircle]) pegSeed = extrude(pegRegion, length = bumpHeight, method = NEW) @@ -94,13 +94,13 @@ tubeSeedSketch = sketch(on = tubeSketchPlane) { coincident([tubeCenterGuide.end, ORIGIN]) radius(tubeCircle) == bumpDiam / 2 horizontalDistance([ - tubeCenterGuide.start, - tubeCenterGuide.end -]) == -tubeCenterX + tubeCenterGuide.start, + tubeCenterGuide.end + ]) == -tubeCenterX verticalDistance([ - tubeCenterGuide.start, - tubeCenterGuide.end -]) == -tubeCenterY + tubeCenterGuide.start, + tubeCenterGuide.end + ]) == -tubeCenterY } tubeRegion = region(segments = [tubeSeedSketch.tubeCircle]) tubeSeed = extrude(tubeRegion, length = bumpHeight, method = NEW) diff --git a/content/pages/docs/kcl-samples/m4-hex-socket-countersunk-head-screw/main.kcl b/content/pages/docs/kcl-samples/m4-hex-socket-countersunk-head-screw/main.kcl index 2a8310c2..f9c96ffb 100644 --- a/content/pages/docs/kcl-samples/m4-hex-socket-countersunk-head-screw/main.kcl +++ b/content/pages/docs/kcl-samples/m4-hex-socket-countersunk-head-screw/main.kcl @@ -38,9 +38,9 @@ boltProfileSketch = sketch(on = XY) { horizontalDistance([shankTopEdge.end, shankTopEdge.start]) == boltShankDiameter / 2 horizontalDistance([headTopEdge.start, headTopEdge.end]) == boltHeadDiameter / 2 verticalDistance([ - headTransitionEdge.start, - headTransitionEdge.end -]) == boltHeadTransitionHeight + headTransitionEdge.start, + headTransitionEdge.end + ]) == boltHeadTransitionHeight } hexSocketSketch = sketch(on = XZ) { @@ -97,9 +97,9 @@ hexSocketSketch = sketch(on = XZ) { ]) horizontal(socketRadiusGuide) horizontalDistance([ - socketRadiusGuide.start, - socketRadiusGuide.end -]) == socketRadius + socketRadiusGuide.start, + socketRadiusGuide.end + ]) == socketRadius coincident([topFacet.end, upperLeftFacet.start]) coincident([ socketRadiusGuide.end, diff --git a/content/pages/docs/kcl-samples/pipe-elbow-90deg/main.kcl b/content/pages/docs/kcl-samples/pipe-elbow-90deg/main.kcl index c23b0cc7..cdf7e055 100644 --- a/content/pages/docs/kcl-samples/pipe-elbow-90deg/main.kcl +++ b/content/pages/docs/kcl-samples/pipe-elbow-90deg/main.kcl @@ -28,9 +28,9 @@ elbowSectionSketch = sketch(on = XY) { ]) horizontal(elbowCenterGuide) horizontalDistance([ - elbowCenterGuide.start, - elbowCenterGuide.end -]) == elbowCenterlineBendRadius + elbowCenterGuide.start, + elbowCenterGuide.end + ]) == elbowCenterlineBendRadius elbowInnerCircle = circle(start = [var 93.57mm, var 17.89mm], center = [var 62.79mm, var 0.22mm]) coincident([ @@ -54,9 +54,9 @@ flangeSketch = sketch(on = YZ) { ]) vertical(flangeCenterGuide) verticalDistance([ - flangeCenterGuide.start, - flangeCenterGuide.end -]) == elbowCenterlineBendRadius + flangeCenterGuide.start, + flangeCenterGuide.end + ]) == elbowCenterlineBendRadius flangeInnerCircle = circle(start = [var 37.73mm, var 77.31mm], center = [var 0mm, var 63mm]) coincident([ flangeInnerCircle.center, @@ -85,13 +85,13 @@ boltHoleSketch = sketch(on = YZ) { horizontal(boltHoleCenterGuide) vertical(boltHoleOffsetGuide) horizontalDistance([ - boltHoleCenterGuide.start, - boltHoleCenterGuide.end -]) == boltCircleDiameter / 2 + boltHoleCenterGuide.start, + boltHoleCenterGuide.end + ]) == boltCircleDiameter / 2 verticalDistance([ - boltHoleOffsetGuide.start, - boltHoleOffsetGuide.end -]) == elbowCenterlineBendRadius + boltHoleOffsetGuide.start, + boltHoleOffsetGuide.end + ]) == elbowCenterlineBendRadius radius(boltHoleCircle) == boltHoleDiameter / 2 } diff --git a/content/pages/docs/kcl-samples/surgical-drill-guide/main.kcl b/content/pages/docs/kcl-samples/surgical-drill-guide/main.kcl index e3503916..ce5c306a 100644 --- a/content/pages/docs/kcl-samples/surgical-drill-guide/main.kcl +++ b/content/pages/docs/kcl-samples/surgical-drill-guide/main.kcl @@ -52,9 +52,9 @@ handleProfile = sketch(on = YZ) { tangent([returnEdge, heelArc]) equalLength([base, topFace]) distance([ - arcCenterGuide.start, - arcCenterGuide.end -]) == stockThickness + bendRadius + arcCenterGuide.start, + arcCenterGuide.end + ]) == stockThickness + bendRadius radius(frontBend) == bendRadius horizontalDistance([base.start, base.end]) == handleLength verticalDistance([frontFace.start, frontFace.end]) == stockThickness @@ -206,13 +206,13 @@ grip01Sketch = sketch(on = offsetPlane(XZ, offset = firstBitAxisOffset + 16)) { horizontal(innerRadiusGuide) distance([centerGuide.start, centerGuide.end]) == firstBitAxisY horizontalDistance([ - outerRadiusGuide.start, - outerRadiusGuide.end -]) == gripOuterRadius + outerRadiusGuide.start, + outerRadiusGuide.end + ]) == gripOuterRadius horizontalDistance([ - innerRadiusGuide.start, - innerRadiusGuide.end -]) == bitSize01 + innerRadiusGuide.start, + innerRadiusGuide.end + ]) == bitSize01 } grip01Region = region(segments = [grip01Sketch.outerCircle]) hide(grip01Sketch) @@ -328,13 +328,13 @@ grip02Sketch = sketch(on = offsetPlane(XY, offset = -3)) { horizontal(innerRadiusGuide) distance([centerGuide.start, centerGuide.end]) == handleLength horizontalDistance([ - outerRadiusGuide.start, - outerRadiusGuide.end -]) == gripOuterRadius + outerRadiusGuide.start, + outerRadiusGuide.end + ]) == gripOuterRadius horizontalDistance([ - innerRadiusGuide.start, - innerRadiusGuide.end -]) == bitSize02 + innerRadiusGuide.start, + innerRadiusGuide.end + ]) == bitSize02 } grip02Region = region(segments = [grip02Sketch.outerCircle]) hide(grip02Sketch) diff --git a/content/pages/docs/kcl-samples/thermal-block-insert/main.kcl b/content/pages/docs/kcl-samples/thermal-block-insert/main.kcl index 274fc388..54ee8e78 100644 --- a/content/pages/docs/kcl-samples/thermal-block-insert/main.kcl +++ b/content/pages/docs/kcl-samples/thermal-block-insert/main.kcl @@ -126,9 +126,9 @@ tongueShape = sketch(on = XY) { equalLength([fall1, fall2, fall3, fall4, fall5]) horizontalDistance([ - leftCenterGuide.start, - leftCenterGuide.end -]) == insertLength / 2 + leftCenterGuide.start, + leftCenterGuide.end + ]) == insertLength / 2 verticalDistance([leftWall.start, leftWall.end]) == blockHalfThickness horizontalDistance([flat1.start, flat1.end]) == tongueLength horizontalDistance([rise1.end, rise1.start]) == tongueSetback @@ -241,9 +241,9 @@ grooveShape = sketch(on = XY) { equalLength([fall1, fall2, fall3, fall4, fall5]) horizontalDistance([ - leftCenterGuide.start, - leftCenterGuide.end -]) == insertLength / 2 + leftCenterGuide.start, + leftCenterGuide.end + ]) == insertLength / 2 verticalDistance([leftWall.start, leftWall.end]) == -grooveDepth horizontalDistance([flat1.start, flat1.end]) == tongueLength horizontalDistance([rise1.end, rise1.start]) == tongueSetback diff --git a/content/pages/docs/kcl-samples/tube-manifold/main.kcl b/content/pages/docs/kcl-samples/tube-manifold/main.kcl index 849c347d..1da6734f 100644 --- a/content/pages/docs/kcl-samples/tube-manifold/main.kcl +++ b/content/pages/docs/kcl-samples/tube-manifold/main.kcl @@ -26,9 +26,9 @@ portBoreSketch = sketch(on = XY) { horizontal(portRadiusGuide) distance([ - portRadiusGuide.start, - portRadiusGuide.end -]) == portDiameter / 2 - wallThickness + portRadiusGuide.start, + portRadiusGuide.end + ]) == portDiameter / 2 - wallThickness } portBoreRegion = region(segments = [portBoreSketch.portBore]) @@ -130,37 +130,37 @@ bodyProfile = sketch(on = XY) { horizontal(mainInnerRun) distance([ - frontAxisGuide.start, - frontAxisGuide.end -]) == portHeight + frontAxisGuide.start, + frontAxisGuide.end + ]) == portHeight distance([endCapGuide.start, endCapGuide.end]) == portCount * portSpacing distance([ - frontInnerRadiusGuide.start, - frontInnerRadiusGuide.end -]) == bodyDiameter / 2 - wallThickness + frontInnerRadiusGuide.start, + frontInnerRadiusGuide.end + ]) == bodyDiameter / 2 - wallThickness distance([frontWall.start, frontWall.end]) == wallThickness distance([frontOuterRun.start, frontOuterRun.end]) == beadDepth distance([beadSpanGuide.start, beadSpanGuide.end]) == beadRadius * 2 distance([ - beadRadiusGuide.start, - beadRadiusGuide.end -]) == beadRadius + beadRadiusGuide.start, + beadRadiusGuide.end + ]) == beadRadius distance([ - outerTopRadiusGuide.start, - outerTopRadiusGuide.end -]) == bodyDiameter / 2 + outerTopRadiusGuide.start, + outerTopRadiusGuide.end + ]) == bodyDiameter / 2 distance([ - outerSideRadiusGuide.start, - outerSideRadiusGuide.end -]) == bodyDiameter / 2 + outerSideRadiusGuide.start, + outerSideRadiusGuide.end + ]) == bodyDiameter / 2 distance([ - innerTopRadiusGuide.start, - innerTopRadiusGuide.end -]) == bodyDiameter / 2 - wallThickness + innerTopRadiusGuide.start, + innerTopRadiusGuide.end + ]) == bodyDiameter / 2 - wallThickness distance([ - innerSideRadiusGuide.start, - innerSideRadiusGuide.end -]) == bodyDiameter / 2 - wallThickness + innerSideRadiusGuide.start, + innerSideRadiusGuide.end + ]) == bodyDiameter / 2 - wallThickness } bodyRegion = region(segments = [ @@ -192,9 +192,9 @@ bodyCutSketch = sketch(on = YZ) { horizontal(bodyCutRadiusGuide) distance([ - bodyCutRadiusGuide.start, - bodyCutRadiusGuide.end -]) == bodyDiameter / 2 + bodyCutRadiusGuide.start, + bodyCutRadiusGuide.end + ]) == bodyDiameter / 2 } bodyCutRegion = region(segments = [bodyCutSketch.bodyCutCircle]) @@ -240,9 +240,9 @@ portProfile = sketch(on = YZ) { distance([upperWall.start, upperWall.end]) == beadDepth distance([beadSpanGuide.start, beadSpanGuide.end]) == beadRadius * 2 distance([ - beadRadiusGuide.start, - beadRadiusGuide.end -]) == beadRadius + beadRadiusGuide.start, + beadRadiusGuide.end + ]) == beadRadius } portRegion = region(point = [portDiameter / 4, portHeight / 2], sketch = portProfile) diff --git a/content/pages/docs/kcl-samples/utility-sink/main.kcl b/content/pages/docs/kcl-samples/utility-sink/main.kcl index 2bcd04a0..732eaec7 100644 --- a/content/pages/docs/kcl-samples/utility-sink/main.kcl +++ b/content/pages/docs/kcl-samples/utility-sink/main.kcl @@ -430,9 +430,9 @@ tapPlateSketch = sketch(on = offsetPlane(XY, offset = tableHeight)) { verticalDistance([centerYGuide.start, centerYGuide.end]) == tableDepth - 55 horizontalDistance([centerXGuide.start, centerXGuide.end]) == blockWidth / 2 distance([ - tapPlateCircle.center, - tapPlateCircle.start -]) == 40 + tapPlateCircle.center, + tapPlateCircle.start + ]) == 40 } tapPlateRegion = region(segments = [tapPlateSketch.tapPlateCircle]) @@ -471,9 +471,9 @@ tapPillarSketch = sketch(on = offsetPlane(XY, offset = tableHeight)) { verticalDistance([centerYGuide.start, centerYGuide.end]) == tableDepth - 55 horizontalDistance([centerXGuide.start, centerXGuide.end]) == blockWidth / 2 distance([ - tapPillarCircle.center, - tapPillarCircle.start -]) == 15 + tapPillarCircle.center, + tapPillarCircle.start + ]) == 15 } tapPillarRegion = region(segments = [tapPillarSketch.tapPillarCircle]) @@ -509,9 +509,9 @@ tapNoseSketch = sketch(on = offsetPlane(XZ, offset = 55 - tableDepth)) { verticalDistance([heightGuide.start, heightGuide.end]) == tableHeight + 100 horizontalDistance([centerXGuide.start, centerXGuide.end]) == blockWidth / 2 distance([ - tapNoseCircle.center, - tapNoseCircle.start -]) == 10 + tapNoseCircle.center, + tapNoseCircle.start + ]) == 10 } tapNoseRegion = region(segments = [tapNoseSketch.tapNoseCircle]) @@ -550,9 +550,9 @@ tapHandleSketch = sketch(on = offsetPlane(XZ, offset = 55 - tableDepth)) { verticalDistance([heightGuide.start, heightGuide.end]) == tableHeight + 150 horizontalDistance([centerXGuide.start, centerXGuide.end]) == blockWidth / 2 distance([ - tapHandleCircle.center, - tapHandleCircle.start -]) == 4 + tapHandleCircle.center, + tapHandleCircle.start + ]) == 4 } tapHandleRegion = region(segments = [tapHandleSketch.tapHandleCircle]) @@ -719,19 +719,19 @@ handleProfilePath = sketch(on = handlePlane) { horizontal(topSpanGuide) horizontalDistance([ - startOffsetGuide.start, - startOffsetGuide.end -]) == handleOffset + startOffsetGuide.start, + startOffsetGuide.end + ]) == handleOffset distance([leftLeg.start, leftLeg.end]) == handleLengthSegmentA equalLength([leftLeg, rightLeg]) distance([ - leftRadiusGuide.start, - leftRadiusGuide.end -]) == handleFillet + leftRadiusGuide.start, + leftRadiusGuide.end + ]) == handleFillet distance([ - rightRadiusGuide.start, - rightRadiusGuide.end -]) == handleFillet + rightRadiusGuide.start, + rightRadiusGuide.end + ]) == handleFillet distance([grip.start, grip.end]) == handleLengthSegmentB horizontalDistance([topSpanGuide.start, topSpanGuide.end]) == handleWidth radius(leftArc) == handleFillet @@ -764,9 +764,9 @@ handleSectionProfile = sketch(on = XZ) { verticalDistance([heightGuide.start, heightGuide.end]) == handleHeightAboveTheFloor horizontalDistance([centerXGuide.start, centerXGuide.end]) == handleOffset distance([ - sectionCircle.center, - sectionCircle.start -]) == 2 + sectionCircle.center, + sectionCircle.start + ]) == 2 } handleSection = region(segments = [handleSectionProfile.sectionCircle]) diff --git a/content/pages/docs/kcl-samples/wheel-hub/main.kcl b/content/pages/docs/kcl-samples/wheel-hub/main.kcl index e24e22c5..6333a6ab 100644 --- a/content/pages/docs/kcl-samples/wheel-hub/main.kcl +++ b/content/pages/docs/kcl-samples/wheel-hub/main.kcl @@ -155,13 +155,13 @@ trimProfile = sketch(on = XY) { vertical(line4) verticalDistance([ - startHeightGuide.start, - startHeightGuide.end -]) == -hubSpacing / 4 + startHeightGuide.start, + startHeightGuide.end + ]) == -hubSpacing / 4 horizontalDistance([ - startOffsetGuide.start, - startOffsetGuide.end -]) == rotorBore / 2 + startOffsetGuide.start, + startOffsetGuide.end + ]) == rotorBore / 2 distance([line1.start, line1.end]) == lugSpacing / 3 angleDimension(lines = [startOffsetGuide, line1], sector = 1, labelPosition = [2.17in, -0.69in]) == 10deg distance([line2.start, line2.end]) == hubSpacing * 1.5 @@ -206,13 +206,13 @@ mountingFlangeProfile = sketch(on = flangePlane) { horizontal(outerRadiusGuide) horizontal(centerBoreRadiusGuide) distance([ - outerRadiusGuide.start, - outerRadiusGuide.end -]) == flangeOuterRadius + outerRadiusGuide.start, + outerRadiusGuide.end + ]) == flangeOuterRadius distance([ - centerBoreRadiusGuide.start, - centerBoreRadiusGuide.end -]) == flangeBoreRadius + centerBoreRadiusGuide.start, + centerBoreRadiusGuide.end + ]) == flangeBoreRadius radius(outerCircle) == flangeOuterRadius radius(centerBoreCircle) == flangeBoreRadius } @@ -331,9 +331,9 @@ boltHeadProfile = sketch(on = faceOf(mountingFlange, face = START)) { horizontal(boltHeadRadiusGuide) horizontalDistance([centerGuide.start, centerGuide.end]) == -lugSpacing / 2 horizontalDistance([ - boltHeadRadiusGuide.start, - boltHeadRadiusGuide.end -]) == lugThreadDiameter / 1.25 + boltHeadRadiusGuide.start, + boltHeadRadiusGuide.end + ]) == lugThreadDiameter / 1.25 } boltHeadRegion = region(segments = [ diff --git a/content/pages/docs/kcl-std/functions/std-gdt-angularity.md b/content/pages/docs/kcl-std/functions/std-gdt-angularity.md index 19869102..51814199 100644 --- a/content/pages/docs/kcl-std/functions/std-gdt-angularity.md +++ b/content/pages/docs/kcl-std/functions/std-gdt-angularity.md @@ -92,9 +92,9 @@ stampedProfile = sketch(on = XY) { distance([flangeEnd.start, flangeEnd.end]) == thickness distance([innerFlange.start, innerFlange.end]) == flangeLength - bendStartX distance([ - controlledSurface.start, - controlledSurface.end -]) == legLength + controlledSurface.start, + controlledSurface.end + ]) == legLength distance([tabEnd.start, tabEnd.end]) == thickness distance([outerSurface.start, outerSurface.end]) == legLength parallel([controlledSurface, outerSurface]) @@ -173,9 +173,9 @@ stampedProfile = sketch(on = XY) { distance([flangeEnd.start, flangeEnd.end]) == thickness distance([innerFlange.start, innerFlange.end]) == flangeLength - bendStartX distance([ - controlledSurface.start, - controlledSurface.end -]) == legLength + controlledSurface.start, + controlledSurface.end + ]) == legLength distance([tabEnd.start, tabEnd.end]) == thickness distance([outerSurface.start, outerSurface.end]) == legLength parallel([controlledSurface, outerSurface]) diff --git a/content/pages/docs/kcl-std/functions/std-helix.md b/content/pages/docs/kcl-std/functions/std-helix.md index af94b8cd..a3ab7c32 100644 --- a/content/pages/docs/kcl-std/functions/std-helix.md +++ b/content/pages/docs/kcl-std/functions/std-helix.md @@ -29,7 +29,7 @@ helix( | `angleStart` | [`number(Angle)`](/docs/kcl-std/types/std-types-number) | Start angle. | Yes | | `ccw` | [`bool`](/docs/kcl-std/types/std-types-bool) | Is the helix rotation counter clockwise? The default is `false`. | No | | `radius` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | Radius of the helix. | No | -| `axis` | [`Axis3d`](/docs/kcl-std/types/std-types-Axis3d) or [`Edge`](/docs/kcl-std/types/std-types-Edge) or [`Segment`](/docs/kcl-std/types/std-types-Segment) or [`any`](/docs/kcl-std/types/std-types-any) | Axis to use for the helix. Can be an Axis3d, an Edge, or a Segment when not using a cylinder. Experimental face API: edge reference objects (e.g. `{ sideFaces = [faceTag1, faceTag2] }`) are not ready for generated or user-facing KCL yet; prefer Axis3d, Edge, or Segment until point-and-click and migration support ships. | No | +| `axis` | [`Axis3d`](/docs/kcl-std/types/std-types-Axis3d) or [`Edge`](/docs/kcl-std/types/std-types-Edge) or [`Segment`](/docs/kcl-std/types/std-types-Segment) or [`any`](/docs/kcl-std/types/std-types-any) | Axis to use for the helix. Can be an Axis3d, an Edge, a Segment, or an edge reference object when not using a cylinder. Edge reference objects use `sideFaces`, e.g. `{ sideFaces = [faceTag1, faceTag2] }`. | No | | `length` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | Length of the helix. This is not necessary if the helix is created around an edge. If not given the length of the edge is used. | No | | `cylinder` | [`Solid`](/docs/kcl-std/types/std-types-Solid) | Cylinder to create the helix on. | No | diff --git a/content/pages/docs/kcl-std/functions/std-sketch-getBoundedEdge.md b/content/pages/docs/kcl-std/functions/std-sketch-getBoundedEdge.md index 370333ae..472a701c 100644 --- a/content/pages/docs/kcl-std/functions/std-sketch-getBoundedEdge.md +++ b/content/pages/docs/kcl-std/functions/std-sketch-getBoundedEdge.md @@ -23,7 +23,7 @@ getBoundedEdge( | Name | Type | Description | Required | |----------|------|-------------|----------| | `solid` | [`Solid`](/docs/kcl-std/types/std-types-Solid) | The solid that the edge belongs to. | Yes | -| `edge` | [`Edge`](/docs/kcl-std/types/std-types-Edge) or [`any`](/docs/kcl-std/types/std-types-any) | The edge to bound. This can be a tagged edge or an edge ID from `edgeId(...)`. Experimental face API: edge reference objects (e.g. `{ sideFaces = [faceTag1, faceTag2], endFaces = [...], index = 0 }`) are not ready for generated or user-facing KCL yet; prefer tagged edges or `edgeId(...)` until point-and-click and migration support ships. | Yes | +| `edge` | [`Edge`](/docs/kcl-std/types/std-types-Edge) or [`any`](/docs/kcl-std/types/std-types-any) | The edge to bound. This can be a tagged edge, an edge ID from `edgeId(...)`, or an edge reference object. Edge reference objects use `sideFaces`, e.g. `{ sideFaces = [faceTag1, faceTag2], endFaces = [...], index = 0 }`. | Yes | | `lowerBound` | [`number(_)`](/docs/kcl-std/types/std-types-number) | A lower percentage bound of the edge, must be between 0 and 1 inclusive. Defaults to 0. | No | | `upperBound` | [`number(_)`](/docs/kcl-std/types/std-types-number) | A upper percentage bound of the edge, must be between 0 and 1 inclusive. Defaults to 1. | No | diff --git a/content/pages/docs/kcl-std/functions/std-sketch-revolve.md b/content/pages/docs/kcl-std/functions/std-sketch-revolve.md index 7dccea38..93d0a33f 100644 --- a/content/pages/docs/kcl-std/functions/std-sketch-revolve.md +++ b/content/pages/docs/kcl-std/functions/std-sketch-revolve.md @@ -40,7 +40,7 @@ way (i.e. scaled differently along each axis). | Name | Type | Description | Required | |----------|------|-------------|----------| | `sketches` | [[`Sketch`](/docs/kcl-std/types/std-types-Sketch) or [`Segment`](/docs/kcl-std/types/std-types-Segment); 1+] | The sketch or set of sketches that should be revolved, or solved sketch segments for a surface revolve. | Yes | -| `axis` | [`Axis2d`](/docs/kcl-std/types/std-types-Axis2d) or [`Edge`](/docs/kcl-std/types/std-types-Edge) or [`Segment`](/docs/kcl-std/types/std-types-Segment) or [`any`](/docs/kcl-std/types/std-types-any) | Axis of revolution. Can be an Axis2d, an Edge, or a solved Segment. Experimental face API: edge reference objects (e.g. `{ sideFaces = [faceTag1, faceTag2] }`) are not ready for generated or user-facing KCL yet; prefer Axis2d, Edge, or Segment until point-and-click and migration support ships. | Yes | +| `axis` | [`Axis2d`](/docs/kcl-std/types/std-types-Axis2d) or [`Edge`](/docs/kcl-std/types/std-types-Edge) or [`Segment`](/docs/kcl-std/types/std-types-Segment) or [`any`](/docs/kcl-std/types/std-types-any) | Axis of revolution. Can be an Axis2d, an Edge, a solved Segment, or an edge reference object. Edge reference objects use `sideFaces`, e.g. `{ sideFaces = [faceTag1, faceTag2] }`. | Yes | | `angle` | [`number(Angle)`](/docs/kcl-std/types/std-types-number) | Angle to revolve (in degrees). Default is 360. | No | | `tolerance` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | Defines the smallest distance below which two entities are considered coincident, intersecting, coplanar, or similar. For most use cases, it should not be changed from its default value of 10^-7 millimeters. | No | | `symmetric` | [`bool`](/docs/kcl-std/types/std-types-bool) | If true, the extrusion will happen symmetrically around the sketch. Otherwise, the extrusion will happen on only one side of the sketch. | No | diff --git a/content/pages/docs/kcl-std/functions/std-solid-blend.md b/content/pages/docs/kcl-std/functions/std-solid-blend.md index a5544dc2..af01f441 100644 --- a/content/pages/docs/kcl-std/functions/std-solid-blend.md +++ b/content/pages/docs/kcl-std/functions/std-solid-blend.md @@ -13,14 +13,14 @@ blend(@edges: [BoundedEdge | TaggedEdge | any; 2]): Solid Or blend the full edges directly with tagged edges (no `getBoundedEdge`): -Experimental face API: edge specifier objects are supported for testing, but are not ready for generated or user-facing KCL yet; prefer tagged edges or bounded edges until point-and-click and migration support ships. +Edge specifier objects are also supported. Sketch block tags work too: ### Arguments | Name | Type | Description | Required | |----------|------|-------------|----------| -| `edges` | [[`BoundedEdge`](/docs/kcl-std/types/std-types-BoundedEdge) or [`TaggedEdge`](/docs/kcl-std/types/std-types-TaggedEdge) or [`any`](/docs/kcl-std/types/std-types-any); 2] | The two edges that will be blended. Tagged edges blend the full edge length. Experimental face API: edge specifier objects (`{ sideFaces = [...], endFaces? = [...], index? = 0 }`) are not ready for generated or user-facing KCL yet; prefer tagged edges or bounded edges until point-and-click and migration support ships. | Yes | +| `edges` | [[`BoundedEdge`](/docs/kcl-std/types/std-types-BoundedEdge) or [`TaggedEdge`](/docs/kcl-std/types/std-types-TaggedEdge) or [`any`](/docs/kcl-std/types/std-types-any); 2] | The two edges that will be blended. Tagged edges blend the full edge length. Edge specifier objects can also be used, e.g. `{ sideFaces = [...], endFaces? = [...], index? = 0 }`. | Yes | ### Returns diff --git a/content/pages/docs/kcl-std/functions/std-solid-chamfer.md b/content/pages/docs/kcl-std/functions/std-solid-chamfer.md index 81ac122e..f2fba1b0 100644 --- a/content/pages/docs/kcl-std/functions/std-solid-chamfer.md +++ b/content/pages/docs/kcl-std/functions/std-solid-chamfer.md @@ -33,7 +33,7 @@ a sharp, straight transitional edge. | `solid` | [`Solid`](/docs/kcl-std/types/std-types-Solid) | The solid whose edges should be chamfered | Yes | | `length` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | Chamfering cuts away two faces to create a third face. This is the length to chamfer away from each face. The larger this length to chamfer away, the larger the new face will be. | Yes | | `tags` | [[`Edge`](/docs/kcl-std/types/std-types-Edge); 1+] | The paths you want to chamfer (legacy API) | No | -| `edges` | [[`any`](/docs/kcl-std/types/std-types-any)] | **Experimental.** Experimental face API. Do not use in generated or user-facing KCL yet; prefer `tags` until point-and-click and migration support ships. Array of edge references; each element is an object with: - `sideFaces`: [Face | Tag; 1+] - Adjacent faces that share the edge(s) to chamfer - `endFaces?`: [Face | Tag] - Optional faces to disambiguate when multiple edges share the same two faces - `index?`: number(Count) - Optional index when multiple edges share the same faces (0-based) | No | +| `edges` | [[`any`](/docs/kcl-std/types/std-types-any)] | Array of edge references; each element is an object with: - `sideFaces`: [Face | Tag; 1+] - Adjacent faces that share the edge(s) to chamfer - `endFaces?`: [Face | Tag] - Optional faces to disambiguate when multiple edges share the same two faces - `index?`: number(Count) - Optional index when multiple edges share the same faces (0-based) | No | | `secondLength` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | Chamfering cuts away two faces to create a third face. If this argument isn't given, the lengths chamfered away from both the first and second face are both given by `length`. If this argument _is_ given, it determines how much is cut away from the second face. Incompatible with `angle`. | No | | `angle` | [`number(Angle)`](/docs/kcl-std/types/std-types-number) | Chamfering cuts away two faces to create a third face. This argument determines the angle between the two cut edges. Requires `length`, incompatible with `secondLength`. The valid range is 0deg < angle < 90deg. | No | | `tag` | [`TagDecl`](/docs/kcl-std/types/std-types-TagDecl) | Create a new tag which refers to this chamfer | No | diff --git a/content/pages/docs/kcl-std/functions/std-solid-fillet.md b/content/pages/docs/kcl-std/functions/std-solid-fillet.md index 088d98d1..280f512e 100644 --- a/content/pages/docs/kcl-std/functions/std-solid-fillet.md +++ b/content/pages/docs/kcl-std/functions/std-solid-fillet.md @@ -32,7 +32,7 @@ will smoothly blend the transition. | `solid` | [`Solid`](/docs/kcl-std/types/std-types-Solid) | The solid whose edges should be filletted | Yes | | `radius` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | The radius of the fillet | Yes | | `tags` | [[`Edge`](/docs/kcl-std/types/std-types-Edge); 1+] | The paths you want to fillet (legacy API) | No | -| `edges` | [[`any`](/docs/kcl-std/types/std-types-any)] | **Experimental.** Experimental face API. Do not use in generated or user-facing KCL yet; prefer `tags` until point-and-click and migration support ships. Array of edge references; each element is an object with: - `sideFaces`: [Face | Tag; 1+] - Adjacent faces that share the edge(s) to fillet - `endFaces?`: [Face | Tag] - Optional faces to disambiguate when multiple edges share the same two faces - `index?`: number(Count) - Optional index when multiple edges share the same faces (0-based) | No | +| `edges` | [[`any`](/docs/kcl-std/types/std-types-any)] | Array of edge references; each element is an object with: - `sideFaces`: [Face | Tag; 1+] - Adjacent faces that share the edge(s) to fillet - `endFaces?`: [Face | Tag] - Optional faces to disambiguate when multiple edges share the same two faces - `index?`: number(Count) - Optional index when multiple edges share the same faces (0-based) | No | | `tolerance` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | Defines the smallest distance below which two entities are considered coincident, intersecting, coplanar, or similar. For most use cases, it should not be changed from its default value of 10^-7 millimeters. | No | | `tag` | [`TagDecl`](/docs/kcl-std/types/std-types-TagDecl) | Create a new tag which refers to this fillet | No | | `legacyMethod` | [`bool`](/docs/kcl-std/types/std-types-bool) | **Deprecated as of KCL 2.0.** **Removed in KCL 3.0.** You probably shouldn't set this or care about this, it's for opting back into an older version of an engine algorithm. If true, revert to older engine SSI algorithm. Defaults to false. | No | @@ -211,9 +211,9 @@ sketch001 = sketch(on = XY) { distance([seg01.start, seg01.end]) == 80 distance([topRightInset.start, topRightInset.end]) == 26.43mm distance([ - innerRightDrop.start, - innerRightDrop.end -]) == 50 + innerRightDrop.start, + innerRightDrop.end + ]) == 50 distance([lowerSpan.start, lowerSpan.end]) == 273.67mm distance([innerLeftRise.start, innerLeftRise.end]) == 50 distance([topLeftInset.start, topLeftInset.end]) == 26.98mm @@ -288,9 +288,9 @@ sketch001 = sketch(on = XY) { distance([seg01.start, seg01.end]) == 80 distance([topRightInset.start, topRightInset.end]) == 26.43mm distance([ - innerRightDrop.start, - innerRightDrop.end -]) == 50 + innerRightDrop.start, + innerRightDrop.end + ]) == 50 distance([lowerSpan.start, lowerSpan.end]) == 273.67mm distance([innerLeftRise.start, innerLeftRise.end]) == 50 distance([topLeftInset.start, topLeftInset.end]) == 26.98mm