From bd01059a92e92aa01cb62b689094768e14633692 Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Sun, 18 May 2025 16:50:51 -0700 Subject: [PATCH] more csg regression tests (#7032) * more csg regression tests Signed-off-by: Jess Frazelle * artifacts Signed-off-by: Jess Frazelle --------- Signed-off-by: Jess Frazelle --- rust/kcl-lib/src/simulation_tests.rs | 63 + .../subtract_regression04/rendered_model.png | Bin 99597 -> 99715 bytes .../subtract_regression05/rendered_model.png | Bin 100484 -> 101977 bytes .../artifact_commands.snap | 578 + .../artifact_graph_flowchart.snap | 6 + .../artifact_graph_flowchart.snap.md | 105 + .../tests/subtract_regression08/ast.snap | 1567 +++ .../tests/subtract_regression08/input.kcl | 53 + .../tests/subtract_regression08/ops.snap | 147 + .../subtract_regression08/program_memory.snap | 882 ++ .../subtract_regression08/rendered_model.png | Bin 0 -> 94115 bytes .../tests/subtract_regression08/unparsed.snap | 33 + .../artifact_commands.snap | 555 + .../artifact_graph_flowchart.snap | 6 + .../artifact_graph_flowchart.snap.md | 235 + .../tests/subtract_regression09/ast.snap | 1775 +++ .../tests/subtract_regression09/input.kcl | 56 + .../tests/subtract_regression09/ops.snap | 217 + .../subtract_regression09/program_memory.snap | 1032 ++ .../subtract_regression09/rendered_model.png | Bin 0 -> 67989 bytes .../tests/subtract_regression09/unparsed.snap | 38 + .../artifact_commands.snap | 2625 ++++ .../artifact_graph_flowchart.snap | 6 + .../artifact_graph_flowchart.snap.md | 672 + .../tests/subtract_regression10/ast.snap | 11565 ++++++++++++++++ .../tests/subtract_regression10/input.kcl | 205 + .../tests/subtract_regression10/ops.snap | 1277 ++ .../subtract_regression10/program_memory.snap | 5534 ++++++++ .../subtract_regression10/rendered_model.png | Bin 0 -> 79706 bytes .../tests/subtract_regression10/unparsed.snap | 209 + 30 files changed, 29441 insertions(+) create mode 100644 rust/kcl-lib/tests/subtract_regression08/artifact_commands.snap create mode 100644 rust/kcl-lib/tests/subtract_regression08/artifact_graph_flowchart.snap create mode 100644 rust/kcl-lib/tests/subtract_regression08/artifact_graph_flowchart.snap.md create mode 100644 rust/kcl-lib/tests/subtract_regression08/ast.snap create mode 100644 rust/kcl-lib/tests/subtract_regression08/input.kcl create mode 100644 rust/kcl-lib/tests/subtract_regression08/ops.snap create mode 100644 rust/kcl-lib/tests/subtract_regression08/program_memory.snap create mode 100644 rust/kcl-lib/tests/subtract_regression08/rendered_model.png create mode 100644 rust/kcl-lib/tests/subtract_regression08/unparsed.snap create mode 100644 rust/kcl-lib/tests/subtract_regression09/artifact_commands.snap create mode 100644 rust/kcl-lib/tests/subtract_regression09/artifact_graph_flowchart.snap create mode 100644 rust/kcl-lib/tests/subtract_regression09/artifact_graph_flowchart.snap.md create mode 100644 rust/kcl-lib/tests/subtract_regression09/ast.snap create mode 100644 rust/kcl-lib/tests/subtract_regression09/input.kcl create mode 100644 rust/kcl-lib/tests/subtract_regression09/ops.snap create mode 100644 rust/kcl-lib/tests/subtract_regression09/program_memory.snap create mode 100644 rust/kcl-lib/tests/subtract_regression09/rendered_model.png create mode 100644 rust/kcl-lib/tests/subtract_regression09/unparsed.snap create mode 100644 rust/kcl-lib/tests/subtract_regression10/artifact_commands.snap create mode 100644 rust/kcl-lib/tests/subtract_regression10/artifact_graph_flowchart.snap create mode 100644 rust/kcl-lib/tests/subtract_regression10/artifact_graph_flowchart.snap.md create mode 100644 rust/kcl-lib/tests/subtract_regression10/ast.snap create mode 100644 rust/kcl-lib/tests/subtract_regression10/input.kcl create mode 100644 rust/kcl-lib/tests/subtract_regression10/ops.snap create mode 100644 rust/kcl-lib/tests/subtract_regression10/program_memory.snap create mode 100644 rust/kcl-lib/tests/subtract_regression10/rendered_model.png create mode 100644 rust/kcl-lib/tests/subtract_regression10/unparsed.snap diff --git a/rust/kcl-lib/src/simulation_tests.rs b/rust/kcl-lib/src/simulation_tests.rs index 768005d61..517b077f5 100644 --- a/rust/kcl-lib/src/simulation_tests.rs +++ b/rust/kcl-lib/src/simulation_tests.rs @@ -3214,3 +3214,66 @@ mod subtract_regression07 { super::execute(TEST_NAME, true).await } } +mod subtract_regression08 { + const TEST_NAME: &str = "subtract_regression08"; + + /// Test parsing KCL. + #[test] + fn parse() { + super::parse(TEST_NAME) + } + + /// Test that parsing and unparsing KCL produces the original KCL input. + #[tokio::test(flavor = "multi_thread")] + async fn unparse() { + super::unparse(TEST_NAME).await + } + + /// Test that KCL is executed correctly. + #[tokio::test(flavor = "multi_thread")] + async fn kcl_test_execute() { + super::execute(TEST_NAME, true).await + } +} +mod subtract_regression09 { + const TEST_NAME: &str = "subtract_regression09"; + + /// Test parsing KCL. + #[test] + fn parse() { + super::parse(TEST_NAME) + } + + /// Test that parsing and unparsing KCL produces the original KCL input. + #[tokio::test(flavor = "multi_thread")] + async fn unparse() { + super::unparse(TEST_NAME).await + } + + /// Test that KCL is executed correctly. + #[tokio::test(flavor = "multi_thread")] + async fn kcl_test_execute() { + super::execute(TEST_NAME, true).await + } +} +mod subtract_regression10 { + const TEST_NAME: &str = "subtract_regression10"; + + /// Test parsing KCL. + #[test] + fn parse() { + super::parse(TEST_NAME) + } + + /// Test that parsing and unparsing KCL produces the original KCL input. + #[tokio::test(flavor = "multi_thread")] + async fn unparse() { + super::unparse(TEST_NAME).await + } + + /// Test that KCL is executed correctly. + #[tokio::test(flavor = "multi_thread")] + async fn kcl_test_execute() { + super::execute(TEST_NAME, true).await + } +} diff --git a/rust/kcl-lib/tests/subtract_regression04/rendered_model.png b/rust/kcl-lib/tests/subtract_regression04/rendered_model.png index 497f1291195112afadf324112c3d872726092e75..994770c38f063f7d543c47a434f7c708f524942d 100644 GIT binary patch literal 99715 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�{g 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 R{<-#=>#u(GfBo{l{||)#AGrVk literal 99597 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%0Dj3#P`AOPAE!;luF&RJe@83hF z-^RE#FlOHV7q`E>jt834bvyHa2Wslebn3~-=3nAp9+n6J6kmTlEGMmgSDNct#HWL# zR_G(=aC7^dM>#iCk3XD)BcBy;2x#|QfrDQgUQMr@VoAcsa9rios{>sMRe7Y&9XocQ zv;D^rbMQQEO{(c_mJRu(#huJRWmjUx@c1`}AALM|>U9vXuESGLr5}DZZ-T#w&RB@8 z1wQ9MoEYZp-yG;TU0Pbf3X9){gw+EP5ht))?@K#a6dhyXj~GNI$x^E;{-=GZJ5KIf zf!CUIG?_lCVR3XeEi31zGH#KvKFle0!3yO(s`~Jx>~?w@s^z-2A$cNq;K0m^PdhjnjA-&p!Z<}f+&Ue5iNyq6XsscE{Y8yTcV z4MpI_O99~!|Nvd1Be3}=akU4c{rzbepuw*heOX^ zT~zUaEAH^5mN1%U$MV68T}ZZhc&Q$|8GOPh4mWjT2zd1$nSa7bqd5C~$0VFqKk1cM z&NVuO^H8JHMqQ8IUON5kiCv|?elwrBf#6SA-h=^T0R|6<0XuXz`D*p*t*5f`Pfgl- zWe?X^Pv4zDm%)j&LAdpsu77`QV)dL<*c=KEPCUuOa?tsIuP9&Zu3P(bW#m3YmL?DA}PeYWMU zqv^ds7Nao1sc#QHtrP{>n+HH|Bqk=N9jR(4wpz5uH}Y2(X>WeJUOb=GqCF>IT2uGa zp6Z*02lMlb{+OI_1t6B;+JqzK$z9MTJxnq!hBj)6Ub}5tpW+j{7Cj9SB-x6@hRQF7 z{tVcC>5a3gZd6F(ja9w0f{sd*HA#V&P8?rW)O^fbYF6*lqr@v|s`{;w_03E$HMR-@ zn3AQ@L8f~BQD-%l=b4!4)|tksSK>V0kU*Qjy2M`)-#!XlwrVF0^_ln;0V4^%k z1DYme`Y#Wow$+q1NXk6a7V`2sbQ2U&e);hPGJ=WPxXatn@?xUVk>^K0{mm;#(O^F@ zjGTFE*_D7Af|944e*43SPcwJiHw3xXv17;5*Mw~e^iQt-JC7?4Fc=<^a|&r`O^NUo zD(6-NRo)gQr#pgD-WB_tK7G2ZHp5qYIR5xN*VA9W^qQw`y=U~gr?DU0*rsoE1d*_6 zOCt$Bz8E_F4tSgUJCr_$H{`sKQd~>}30t!WT9BU~8ke8Y1!qdPSNr%+!#2duk7Cj2 zsXK2VuZQ@`Lh8Q{YiO;p(Q!5jltN3vj4nq554jd8{D}0P4?Z|`>4;NS33tjR!H0oQ zd8X0Wvqt^xH|rHp1rYnAr1UU?_)^j)(c;cTD0vGw3w@>*_=A)J)qu*mG|1 z>eZ{8u>ddna%n+LJ4#sZr-KUr>5jyC=g(}2Uyv8;SxV2ticZOWCL653dr3DWs5j>! zB)yDM0D~4BtfHQ$ykn!{p7|Ym9Db=;kAi94!p}b!zT=71v)92}OzX`y6>Kyn0R=G( zOH90LdHq!ZNih5`i~|ASjPG9e%l7BWf5?0iwPLA;iNXrDffL%mI@@rDb*#52cJJuW ziW^-#C)rz_?E4V>C^z$jciCgdCR?JzXukVk#5e3-iAkmS7ynOb=AQTki;ud2A0HxJt^N#OCZDw7= z`Mh?e7`FU0E8hUWcizw{ z>euB_Z`U1RX1F=5p5=|Fr(C}YTLSb52}bzZMS;mfvLV);W|2yujB)7;^q}k^*TS-|yz)xS82eQ4uEAm2 zS1=-`bUM`OwA}ICKRxg$GQMS?Qx(OITozI!M~E?c;t=!LvKFzMhV(eneA9%rM|MQ} zDx>*CYrm}+&;5lc<-VEH>KZ?%vaJwoK~OlL`;LVeKq4{ zC~`kOdT~Yz8%_+~*s;rFAG?mGCYBr$a-^u>rqa!LZi>KwCAKPpp2ELSX94NBcoI!Eaf0b zFNDI_@O|5?);*5Aa;=Lz&H{|fsdO;kgxKE%L?%!D@zbxtNG|SdkshVg=DvQ=)0G9; z-F-{UhU|{PSw9XIB_U-E?1+f&rl6GNa*bd8)SdC^xl`|=-y_#{SH-!rOMTu_Qi6kV ztq{$j(^D42%-j9^N1Xxj8(Uy0ChpliE1)nhdGC03vVR-1!S_O4*4i~|^1l%$=Y5$< z`kD&c=$5Jb>O7HD4?OswHZu^oE~K_g zpFbEGziaWdLEITzH6lI!ajr798A)a%V*cmJFGmi(-Q&k{rLSF(i1E2`@6ojL*u#B^ z0Za>)S|$;qW)xQ>|1G-mZwX6t6WX~ZW>r4v{UzCZsVR+`+TAL24LuxI`xgmXD^C%} zYm-i`jsNzE)TT2?P?4;7t}RIF1)`#>qBJ>a-;f^PSM@I5yY#p-Ial7ty%Rqe8JqQf z+t>{YxZzf_bHLeubm={3|BIL4$nBlov4;|1b!3;LZoIB_fxmAEGelw^>c2Cn(wDny zQJ3B+dp@_bZXqbrvMEP4JqmrbbX`qRN|S0<@>0v+8S7%dTL7+)Eq!qNmsvl3Imsho zTYMD#Xuf~3_y7h3eknTYCP3=rhM8Tu1-lI)DdZLK7yfr4Y*CisJ6{{@SJJ05hbP`o zD7#Y6zPF<6+=|Gh*xUg+F+;2)BKVbL2a#$_y%D&#Ne;0dy4s2Mrr@iEOGa+gB<>pm zKY+;Zc5lUIzo_>W1dDuMBpwRXZS3A@!waf@9C5otW>Vada)fI3ZRN+a6BhMIxOU>k znlaoIpoR9P_HO0yn7LhrW~Xj#M!wFd|2BjFqgk(h=vot~DOYlziED=~14O6t=##R| zC0%4Y**=4mx)m+u8+ouOatpbx{D<&{A6#rS%WfA}_C}Y8CQ4&cqXFB&&@;p8pN+!C z-_0`$>aq%s$0ZfVnPghqJP^WIT>C!)xi2TM0pp9UobJ;eEIc?Um4cq;9Fesxr=g5@YRRM#9 z??z3+1p$XVZqAV-&y=iPzrNKb{LHtI)a$`N&7|tb0bnH_NUHBymB)P1&Z|+vE?HL` zYBp+WN}o;fT`m;EI1zPbf7Cp>9QO(jO0CsJE|Glz5!K#OUufP2?xkgv-<0v%1lTZX z7Mpv}zGj#XRadsJN4KgDs2^WWBO#auA(OiCsXIdtPidF=q^Z_mqeZ2F=G8)3i{ld7 zxM;p4nCM#nCX4L4gjRf*T?WnHLWXuU#5*IgWZf*^mAIvac4Gm?B`nkCc?f%$OuY4_ zQ|W78KKVnZSL5Ppcyn6rs?pi5c#N<4CL)B^3l*c}jWo!(A$Cndv8h$|Er9K+-&0V3Wn|sz$hoGxb)j&c-vL`)Yu8rg z*$>^R^<5EEgQ)eLL?)lQXUvZyzJOk2nObU~PDu}UNP*1a1I9YuBdM7dY)tbv`%Y^X zyA#mZ*lbe(anV4a7|IEisd+5aRiE;BV}!tIvNGJn;=5x_lb%2nB~f+x@rdfpAw>`^ z^8Y$ExUsp75$e4a5pVhild?YTF|`B!C&91Dn|ORua^lTepfTG@fcROK0PsJz!gG_( zHQ23Wp6_Jy|6>V#&I z3SqGN%4pyHLzB)f((N|0|2777>>lwmdvHGmINn$kv#~``9=7YxTCo>#hCCf9U~vB7 z%V^|*?%IvMl^CBVE_Vt!otvG4D!&g#unP7}LFF?|q$(WdD-T1X6kQO#*-)dExzRaa zdTPIH#Boys+mp7DC>|fnY@vv!o!o$iI#H)rgClg zad6gk0^zcmVY{0FPi4drmq=WC9NM0yo?M(Xj@>mk(cOi3*lubpMDIh9Wy9vS8=8PV zPnVRO?OjmO8SFNXyQjZeP?cuMp6eTlf*kCj?Ca5^ z2Tqz;9?-J7t-$BRrh9>^Bulm!-+79gGclLs%DT%E>&B}7!4Y{(qczSAi z+5|`d7BDxQ8|=9++9Oc|I(n;*0C4u!X2P(Geghal8-imb~9G=sr*7}ZK?<5 z_AFAt*>K-kR*7Bp`08GEulb(A(O(XeOJ7yXpRhkITY%@sy5ACYPI2QDcLiN6&4eS6 zGT(N{Tu57@Br8KjvEH{>kgZQVROI=Aos;hBtqFt|cR-*+k$aUjmn1=1ohiqa`A4s0 zy$F#cqxPQ}TLewYGrG%g z<4FhH*ZB4XZx;4Z*|5URRx+00Qi`n(U2#Q_FZiCwB4j~=;a6%Psm_iJMQbZfg>786 z$1`nbM=He1w4aA3byByNElWR5NtxtAno4d&Q_*8qABt<&>($d)>sLy}$W+gir9$hE zwygLdw&nwptpJNvA2tx_Eqv@Z*-&z7P?8{4sB%9^% zHPa!xG|qaLY_&o>7va`j-}`7}e<8)a3#uWWWF_MBXv@eC+2$=y4rC2I=9Z4f4Ygl- z9@J~squZ7t=IBJ4 z8A^{E9ai^LRMnK|#ZpdX!wn4kS~S|hjzf%%$%?9o9fdTRdkO4h!c9BTdLIoUAntj> z3lKM}%0$&t1AV#w?Us?%o6k+pVFhVxnD?dHjksvZF?ajC!=)%~iqW{I%rW!E3T_;3 zy+?MfBi5qj;mq2Cy?igK!l-Q>El+kwxY+Z@THK-~XuIz}EhLbiUtpok%*y?i(A1Rf zvDAoNi5s#L?@7xMKRQ$3MIWTlH=m(^EH8oXra2eslmX83Es!l+I}Co51x;SUzJ0}9 zPxajTpQF8l+kGzTN=P}N(P=`bq`_FM`-GVQoDaZVJ;0y2#h)G>_FdPkAG$UvOY~GF`r}#{+7ssvpSFGYiT%+H`yWU++tG#kqkDU4Lw>33 zvLKMSJ359L1+4f^GH<}GK60zvLf2F2Pf~NCW1;>slwY6glO`<C^+*O}n+7LQ4;oB#wOK}Uzt{}`{v%%&4HRJzj@7v?6Dz9x<5+KUMR4t;S z#8xYutG5E=EfsJQ8*U z1QkQD9EcFe4g?Y)k_RCqAv=5BF~+ynUTX(E_uu60(-6&dDa5Nz~@J_TRFhrd!>mLzVZel8Do43xl7Sf;+Wft8Mz*j5dtVon@~3^_!0{Kx{h*UHxy#_Gr~u?0Ghxi7md-LF~pIY`~-BZ zJeIkQVs$pbxKabOZ06y3*s20xm*4-@`ci=5jH390&?bTBwjML6pRgAkgFHshRyzxE^ zp~e&#X~vugg?|Y9=3;>DTa$O8vUNKWk-)2yE=NN07{mjSoEkh2Z|Mol0x3Vbu<@R( zQi4gG?K-`F$EcT%&Hki|p($Pirb{}fMjL`6!M`wga4gKmlQyW!O5l|C8Iw!6F#cZJ zrp)ZuGvlh6KGUeURFRDjryYBkjpA{oLnB9qa!{%X0NQ^k^{;&qX+~ zh%ywosS-nT*+MZ{zq&5suw>&;DLU@efPy*V=bRVIeiYZchsDskl(qc^7&1_pn7Mzs0v zoc;S)>za%JW-OrL*S``pa<&4T`qKKppeWqEKQ!6V-rm)%=K(@ zcb3>UGH5ybLH;rN>*Jj(m;u!n<-QO^STX7HUTK$C0z3jY2HPgU-5`4p!(H{SNDqwCbQpifFTN^BK{8&+Aov<|@PyjvNmwjk z+7Dx^K6>_~Q@$7h%wZD|yQ7yeIzlD+=DyEA*BIr@JYPIu3O8@8ze5lhK=kH~g`FFV zzudX`M#2MU#@RnI?eNIEnH&}GsxQ9Cg2xT+pq&qV2mSI8jpC~Ml0lSdhz8>c1!@Fc zQvN(Wvex9tU(}KfBQhKxG?-w9LPzdKU8@kz$jbWou0dO%aO!s}n@lHM{M~6S1y2}@ ziEF-n?#XW!9h}{#JZt+f#2p$VKnW4!6p|z$RIC;%<#xIPK0TZ2)r0~+j&&wE7dKbI zpJYr_PYnYO0+ktU|B;bc3RtKR-W3%v6Rhg&u$@0JXMe3A{F}&1#wJ6T zFhg88e*1gwp-CTPHmt-{VvHk^0ma)OIR*?42pw2ZpuL^EcD#DcDP(LmA`CI<^7qRE zE8$CEx^6>gv+{wrj?iM{&p%jW#?W>Zq$HKHxS_r|V(%spyMOYa^umhZr56{?-s_YL zy8?H1dmR|8dFQehKDy7uVR!dnB#f@6t#R$}srPB*&=96oq6O=w(CM4vvRIcyoR!|3 z@{vYt{#@AcXGDjb#3w&I1=1gzp;kxdknMk+p>~a-=(!_j5IXHJA}nn)}e}=i5TqJfB}RK z0A_Px+ajw_P-&ir(2SKrtC}UV4#F|$Lr0RK^pwMGw1~L;BaWZw7xfc{EENMDZJS#6 zP3S;yKSZD?`|wdel>3Q{*pE<6nCKCBDx9=;C1u`pFe9os2>&7*&ITj&{8#T9(a6rM z`zQafZ^FgRqdc3K9%~Z=A!8HKAA$~HLA6BV`{l9yz#$o#6&#N8%3+whI>d~%w1ybO zIg+xIPHjT4b;26-BBOT3R;rzQR-FBjvU;SgpX%Prz#JTP3?gcF%pfW2fEkVpoZEvr zL|k{0eg?gQqw4lF7*zO2W^DX2t)tRfQ)xtLje`Tkq*%aKEqV3^bM9Zqgb8oQh6(GQ z%W5nuD=RW()7xNQlG_(1Ur<_Zhs#~{=Tw=%#G}_He*!E^Mbn%6hUbGuw&u5KwZF|O zt5|TqsSz;3B*L?5e{DLt%whb?KwW~|3v3MzDFnHf4O!4_%&}?N6>f7n@on z#HJP**nF0}_Ln!NZPeI9HM&nr*i%X*q8+gFd`%b{h;=H^-uNZ}^7U+!vwsfSiQ-R| z7hhY7WD0{$- z6o^q|v+fm?wG zHtXdP`QB&PNkD>Ph=>dY2{4Ti-2I7hfjg|E?2qqSkIRc&Pb1n0^WbAL(x6!F6bIMa3nNqsnw z0*tQe%d)Dabgsaca!;QPhNTUj)n#!^`d)l=LxVh;wTF zKxBwK7mIk9g?|+3@r?xFx~1_KAQ z+U%O5^F_?897NI7qUIuT1`FHjh%U2So4gdh=L+g;f(mOxUc;8I-gkvf6~V-4w5T+^<`@GdKij~CHV zkkl|(!TVdj`NZ;gfivvQw!WwZpHJWp4)`e{v7c}-pP0izMuXd-j)eB|vp;*Bt$+Co zj$WI+eb|Z*VerR(Q1-%;fdH!vvrhik_u&7t&+RGLrD1qn?w*z7h!kD3Wbo+bCBM18 z=C*I2nC~U1h2AFaNco?!br~BN{uy7o*-E7=-`w$0z+6s z;uWU-g61dV+}|^Ln`T4+IJ3n`+1~aKnOAwpS-j?!J~<@ z|IhwuXRFbwqdKg`^7(6u*b|yK0}8bpl!sQ9(BYJ4+&W6qQ|zGpJ5FaE%(qh zw{uUAtU(}g-`9rHq+t@JILT&=gC$4UZuBSMoFQT!tfG|RsBBj1a3mFG>{I%5C_+N% z&XR*W!IZ(LL}dT{hT@h7h|o?b{%FECE(Y68HD+VHkvIDe|6wr*d*3A)r?1c0;uxCs zFgD<<&}6tk+}y(hau+f<7=px%Nxr#74zsZgJX3UY*ENSeV&h}rn~V!#MR|uMCSr7r zDzp)21hir7|*o12&8!8dcOd zE}AW{3n2Xk?;c~0hI>44@rTRd^sT0qfpaSnY?hZ#*nDh4ywE9P&mjeDx1_h+5~tzf z%3#+7B~Ib7I7=^B7n&3>592gzkPs1wMj9xpM?(wOznK;f&;9gX+ zm6`JfM>a{zE$ZWj!_N-Hz<0v_UXMW=IfToIzi7eEqU*pOQ0z_H*>gQcHT&M0+cu-r zoRrI`-dcecote0V<}q|KGu9vOr5Kx4-9)1Rh3}&bvAkseat_!*dO8^C@FK#g$iglo z)e0gy9;J~p10>ggbtLJ;D3P;)e`^v?Qj}9!G|M>&14YD!lkwOT{kZD6X?1fYBnvrE z+&7QIkc3(O=HJHMmF|%ocNP4opnS;%X(yJYU6{wC!?rC1CPH*Bv6|o&1K|xy{a>6O zxt2Kz8xAaLI^cm|b%*HQ;Lh$r6$z{5$Ps`fU)dM)P?1QQT!i=Yzu8uo$NDUs%hh>f zN1uL0=z#sGV=CG2@;S|9;WQcw))6WpP?TIwv~B}sQ?Xo>1=9d8g!foi)-hg z1QI02;AT&XMkBzt*g6NP;*5bIBd~iDQ9|3OxU?Z+UlCw(J0n@~h%WJvh6$Xo0_86^ zyd!Xx?vJq~kQLX`7cl_KX8DnxlXD-xmI-7D7n5j7rInjcRsPSPWqW0 zv4_)oN*oVn*S+N=qxG8`>OBil;Mk+bm%pB~|Mg>n%xIX*I03a^#JR|e?AM%C#WxwV z$19}WSnE5R;aY+(hj1!pM=Bclkf05#&&*iZfMBptb8ze}3vH_{`W$c5t6ih}|P2>wDWTwt( zF;qCcrY?=|5*slmI5-qpy}@%qu@GOuV1S8HfCqUn5g&_6^k5@_^A3ipG=OV{&mRU{ z)xN{x^Lc1)wFPM_C&YUp;j%%S#TWnk-6kr*#`d9~6+})H#H)F(vM{>SqczY!O5)!d*p--D zow)f{y?3_LJ_TqKi2&eDA`c3P$^z?H;++DuWEum2p6^zTknGSyULypyEHJ>laQl0F zc;=!e10z@6B9bcOpU{s|3N21$0No13tHbEpav~fh%Vn+9C*cb9oDC){T9gU4R=i}y( zD%G$H3_3I2)vkVrFISU}1>GdA!CSj@Du zzfJ!meviE47}JJK-1-{C=1BZ_JtiYj`O`w#sIbLbzh$rTneB(*y3*>_T9KpUBEQG8 zzzbmnYBqkw>wYkvVJwV2o`J`{sU??LYy+yfEuJ$MhD(7=pMhHqIA&jsy9o?&&+M~s zZr%)kgaq5$%W)^`!KmC)?5HbjS@{RN_0*DmQ=1znnRl8!35HCnWZ~k{l7JD?#Skw5 z)?W5Z`j;Q2ed%q(iVXD@iA2V+k^HT;UK(PDM_M?j^NStvO>FXJC_Kuwq1kuRA@#{a zKi4esOgj0c8L6UP1XxT3r=;}%5t=jeM+Om-;QHJ9%cu8V5_Yw@BuJ((FS+P9?{{j6+XniR@;8V&I7BiVr0`pl8Xc_jwSFLu` zm>#wm>*D2i6#fG`Poftq4H~c%uP>pCJr73dt305%!sFDp2Qz`#H9uiw!>s(RoZhg8 zHeWI{uGD4uVwbV~bEc@Y^5S3h%MU*XQJc7y>?hd@fnZTcFi=waAy!H*@tpxlJN`qu z6Qx+bhK8Dofr8)SxGdz9b6}fm3D?FEOmbsS>#J4UqXmzQ%R;`iqdcCfog`v2FqWlV zls9P6Z^KOSGkPA34~)Hxe|Hazbu6j?gG|qFli?qs zK}0_=B}7y86$3n-&n9?Kii zu>KjE;~B-xKcSLku?-I-ss;cmY^8&tykdI$&>`?HdD_hcj1B{i6P6ayvpUK<3ZWd> z62fDfRe7)lT(3sU1!ro21=xe98NbkfI-YmHQM@)ZUxa%rYh!wVLV$UUE#g137(|hO zGbDl#wJ9`u12O^M>4H^|yZYkcr8R@vZbNTCL)#ZSMqj4e3eS()#-~LjV@)YvfzZS~ znWOFW6>QCXhqF}x>x9IbVoZ1n{w_XM?5tJHhz0N;Vl#FLSD)%mQQie-gSBB9%V;hwJ5FAmD2D5Gy z_RZ+#wyxaci*qj!LmUp_Oc%0^7dGP3g7&*D)+f-SQuiMiT%f_V=m|IboK4KJ*g$ah zfW^8b67@OrIroKu3n!+m3w|o3h53Cqoxzjx)yvJmK!C9o9I}XPAc2`^#9^fr?h+s+ zqc#%_XcY_Cuq~PemOvg@t*UspF_9t~EReE+s zd2ohFrL>cgRU=P6n9mFlXgkVPegV@si0dU8#3Np2DznF!G(>1uQfct=eb&HmAyMvN zuc113UKgkCC5v!3#Vmaigvzl6>VaYIfvD41H?L8w@EQ+iOl7e7K}9^L^Dst^AWvFm z5th*#0mfBw6<-$G0nO}`Z@kPAD5#2_NUH_eI0)CG?NYuo18`$}=^*@a`T%%Lw#wW2 zChvn89-}}0O#5MiY8DD+Y0uI?IezlCIklfXLl+bigq?q)UUaIGrq3Q9lu$~kL|_Ml zPc;mWokx@sAuOs%@`%1C)u(3P0Nylw%%js<((fb&B@RuY+%(-^Wz-N^7V&ZsQ{!J6 z%B9?<#K1S?^X(grIomdP^u>ATpF~1+aM~O+t0bIfspC9L9XwzxHD(iNDmI?@`*NjQ zS(Bm`r6@WE?{MZg7vscXn$b7&j*13sqP$LZ^`|^8e5xUbcgin*u+RzOfT3?f-Hf9i z)EIIf*@Fz|0W!QI#J9XIYAtM%Y!lyq7J{_q3a_0cm=|5Ia4x-`a8}j8YL<*;)-kc& zSFr)`Tb-?T5y89l1n_?OeJ%hxk9~o!Sv_}~SWGNKcK`!3qHa7E!788|+#l(3?$bi& z11lNX@yWPe)#4qE;zYL?i97P0w5Qn((*{vYs0M89ZDKkXdjLq`M`?W?%g9I)A0Uvp z-_D;uFpt6hJB~eWXrl-1yy^A(47--2M3N5qQjE~Lj&K`rLUN}f13)LGD!~K`nX*Ll zPrI*UFBBN@>$%XJ9*@D!&`n2E!!|TZZL;+0U{W_>WSZ?2Um52V`5>r@d9nw+K-H3f zdE3?XnBZ*RHu!V_CU3I|V0DcrHrriYqVB~ZETZSU79~kEx4}!oTdt(bG_8-YUZ$9d zWDeFEhXn>@fHr&<%zbYO&+K?hc&+qCvW zi{~XWI7xTaPiHI>x>6oYpu29;?D z<#V>_^ett6kD%P{&-;&Wx}os&4M6IWo}#&$S^L==KK#qKRj;e?47*1gdt!R0DG7zN z{k0$D=iF$KQxZH+REm!B(_qEyZQZ-HMs()x%k{lyij$d8mOv1z4PxlyCg%`A+MH_(tdw`0WNX;^a*m)?TCNyzaCp=|M87Am2Ead>DqZ3~CdxbB~`Wbc&WZz6y z5&pgUjTcd)A$Gq#%M^J6;1BuDLZQi^`jGHYmAh zw2{(WPrw{^vX>!#G}c0Dnem+^V1$QoVSYpELIcr^BIOkd#u2u#1F@;_w+2rDST(0& zVrCo!>N2^92ntmwY4p6JVU<<=4_l2Kra4($qqCnJ6}cB5dWGjJFHiuui6siQWp3-BFa8_ z2ChiKghRaYl$*V)`D!_X<|G^fQ-zup!l}wskU{=-%9KQSJaNb4N@9!}$nNC}VbH(< znqCIlf2LpzjIrI(q?8an1!X+``9=-*gGwm=4a88}au}|Vl~+{I&?5q5DV0EvEckZj z?Z9c1^5ic(1Y^0k%+9Va2Ilg`)C3N(v(SqGN2IgCEesy8XFTxDG#hMS634otb~^OqAeMTn@c&DGzVjEinT~65?Ca?hYP}mKdLB8vSo(a z{l|))5MBhKReL$Qno$u{)el(Mjr?a$%4K{!ow~}-^hu0VoOMh0n#xK(*fuN*Mn@rQ zt8p`1%7&vI!7D3Y=X2_}IE>522B-Y1-|&N0saW}Uw~bnDnj{@B-A&aAL}J(rsRkwK z3P7SLy)xr~l|@5xY@X$~Mt~C-p2I~ov~jSP%_Kl^FJuUU#sWAoSl)!kAj=4SiQ*#7 zMa=PMzfbhlgbI@tgZCBg%RiDkhG4p|`lL>q-mxz{~9ajt@X z5l`MF5kEozT)V8oncA-H)Q13jt7Xo?Beie`7MLB?P=8L8{O3a}HDdxjVD8xH7~t%; z;Q%ahf>21lB6%$G;oTL0EoxX!cC1#k;+pnNmdWB+8F}^c9T)r6JjRu{(&Yq!2)^vQ zP0(ULgkwrka20SI$k^GRfv^(!FGNWTE5vK-=8Xb}0A5|d$i=?Wq$U`Aq_VS60R+45 zKf1*&zIs<7Sotud_0wodvs)5|eh@?S(_I~0*T~DDPg4ZUDh1?B^%p*zeJK}>(F30E zdxT3se`v+9oeTj#GBQMC(0X)k5Cg0v@U7^J(O^^9$tWPe9~2esV6L9@6a{bNNi)u4 zxBB4jxspfPEg1QtuU^CBHd)a*uidKq=#iGV)BTcg3$zl9yo-d>J4GbXz-#eRgAyb>6( zdjNTj;(RRW{6RjS2rTfeX$dp`U$31AEQq2TNftoX--1&J1gvWGCL&z81f;nJN{N+< z?jnWj!1Jrft5Fc5tXQ`PZVTu?S_q@M-d?2m5y&^gUUdu87BiFbJ9PN2_VRVXU=lSX zst(chvRxTIbtqsttTy;5W{=o#3;HpHqWGRp66-21r9bKxWdFIlj9CcXwe(kIU!ZVM zTIjKH3658o;1r37ejRs0DYV7Or74B7Fc9A>&({bt$0y-vK3iV5j$D#3Q;xdZKZP(^ zH@P5P;Z8XB5LS zxu63^&l0o~D`C*fg0#WI*DCzE^%}IayW!!J1PU-$i)7?ae~*bx&wpsx7A0sDhW3J= z(>OpD3;-4T`XL?c$8=ye?p^|cIt#(_ayGyoDI!7Q*$oG8XN=d;1~NH%RaL0PPyaGf zgy`Hy!5Ck21Evl!+}@X_B<&Z@J0I{7P3*;S;9mV!H))8Cx)Jv|CWYX-G!r6g_fRfm z;-L&D9`XU7a%DuP3@T#cZ)cqi-pXzoN#q$$`L?6zeP2bOw}+yUexW5f+EtQx0MTGB z$nKu_bN4rBE~A@*G9-iS!Z@?3@DWYmK%(z~jw0Rc7WbgI12=^;5-PYxMQFm#@V%g$ znTa_Q&D}t?(C4anX8Wz^-uJ!oyS!J<%xGj08mc10Sb+!j)~gzmOE44ru;hYdUk$ca?vjSZ@g>}Ag0}r|=0Cn#dV{<0V3|Y87ek0chv8K)*1@)juYMNu zRrkdLUr_uP&T!4z`4Ue9ffq*WtWGdkWc(Ky;YfnXJUH)SPn^~g=3WoqWSHM?6t2Zo zO3NJhN7@#4&9)Rw$DDx)EpUwvK-m4sac}P3^G!1-LPW$Ji=6!8vzb+|91Q6OF65C)U# zD5O?L&_{#tG`Iu41}+BMnnVyOsW4~LCL8mq@2e7INB{!->^eu;2^;IQh7g)r2`n2c{+79`M$PuO7A+-Z*qe(dVViji2C4cHu38@= z%?B{|S!p%5q&?$hQayYpyo1a-O(U4Rip+BR)Z$(u-NiR(#|+>IFa@_D_DO#nxp6lU zi#cRW*sH1sk%fXgxs;6zK%C%Y9?Kwi2-jyJ9^iL&4*4KHLCUWsgjg|XmiKYJ5TFRQ zRlm9os=JCAiJ(ip-qUhD<1sCUr#Ec2~-oyEb$?&4DcZ_*XR`@wnu?8gJ7Gr4d zh*3ghEgwH}r#O%$IAXj1W{mf~qPLujv1y25JDW_r^|$9@(3cZD zNh=IDtxy~pY?=0ir&NYQiCEX{+6`BwVh-ms@;YbKokQ}_p$LD6P}}tNXwFE;2IC~t z)O)SZodX>^*vNg3>;nx?K@ild8ZMlDNCYLkRPs_^puG$OXPYPFgJ=+|D+7!7Pvcys zd3!EFzULy%{~@!-t^#Huh@J4rC;>@w*iD(tehZ~A2DW$M3Ib&Ln#W*DVB`|Nu@G02 zvImLd1)O3*MgYu#{E;d$_*h_rS9k$m@LwGM3*TBw7M?kkhYlUXLCH=J2Nn1`uMYGM411x9MIgg7#E zQ$m>j5vb&#o*wEr*w;5zzrS|FsfLDl%oGrxUvB@70)HkaU(u2;j&|k7%fWObTBYtJ zSz}?8=*(f4;D-=Kp}~Xxlv<29Rh@ZE8t{K2*23Sih-jmMd;^VMMgD=fnRRbvp578gxe7mEZVv!%UH01u z+2gn-YNR(j7IVC{B+ElgfWii5nZc;snDuPeM|9mB!u}tJFeGiv?e|ex#H8+68&0(>3 zOPze&MKMLxR&wP*ofzi8*5O~p5oVwVe?yI~ApMur@kq#mwKLE$!t^2T6-jFF7kFRx zYeHa*_XhUG%n$jgISuotD8!2ROO*)R4|)03-w>X%fB*it>MP2#dU2|ibVTv$+{pbJ ziCfLcD>5jLG+%Ohn7CXKCvf%+)FCabBv+M}H(-nwo|CCljAA%>fytckf`P}dm>?~Z zMIaW&BLNP(!9hEW&4p!y@8;)_J1mNo;XatJx!hKoB_2!soc~|J;vamnTRV@^=2KPqZ9t(Y7iQQ&SCGs4DSqm zd}r880-pL!aO2Mcq#~W0rFn1_kx)Z%h<8mzH`X)}t)bD@H9<6lg-FY>x9no~Hk6>n z{zK$&06k#N3^I(71IH=NzZVxxjJrTvkvIl~Scn29{_z>iM=sQE1pk0~PhS!EN#w(! z)#S1wr3oUiE~Ntq>7!5}_Y%Y%?;Hf_$4_$}pX%aEK6zcv$?=@{17)ngs~C>vqZou3 zjQ8dsm~PKHAr)06;5Ll`F#RKdOnPP?zbm=7xg&sswV&tb{z%)!P?TjBVu4Wq%hjIy zAK-KUtGY0xf40pM=NI->&^zl; z5jUxf4I0M7Md{r4!krbUY{zLg$b(TUKa@QTu$2Gn4?kYL41$HamI*Cgd(Fe(bAB0C zz_EAgCvZY9)4;xn#(53?augLe6)>j`R*p1O01ONPmyTE*f~o`Qh6`fWf)b+#S0RF7 zF8gh`lNOF5dfPHu13i7QWfcQ|`z#6McY_^%&L%dysg&8~a-+)vRd=SckccfksGuI-ULkst|p~&N@ykX^# z*|Na4%JNfx1FNjnJxK{Z?Mt^BNtO^y6s;Iuf?{N}DVpBm4LsuUjTgE3vAG|hgSa1v zmm&q~nF|pZL&#?hKt&uIY+vMaI4Q3J7cf8_>Mb&9m~LL^gjp${YLU_)yL|_`A9kX| zO+~kGDZ$o5p5CPT^kxcqozSjr5-gf`?zSb@Ny;7?OMZ7gC?QP-VJwjN#EVai8;GnD zoQQ-G{vRp@|L%z-KLsj7gRFKI=W6`718;=ypYpGro4?!{&k?Q_@HgC(!e#_Epe8ht zu{OL9t6wrb&^P_ZKF}8cTic;?im7uD10W7vN1lkdtiPqs`%YxdA=pbkZ5v~IMK!)- z$cH-OMw_Lodvp3dJR6e$P*=jwsEd!G7$R#}Zdfv7%$zX7z+gOCy9F6JM@CStOD~ zRIO8xf;v;sPf6QQLn zRJFvIVrFg*T7;4&l?50%>S%N;;2#*Pv=nv%npjFoGfN7ORM#8TjuZJT<&G9f@g{Y_ zI?n+3sy+oGpAELi0)V=j6#gJPpN(9G_{HO-JN~9|T{!Q3h^Mm-)(lE4{n7ojOTXs< z!@)*2Z(D4# zZ?A~DyhXwc+FwiQxD=TfgELB6cauH9*I%_#Z=tR4)|vI!)k;Y{98z;J2{Uwak6JO;i{1wkaF(b{xixBhTT0^O-qp z6QF^?V0#C$RiL1x$Xas<<8$1b{G02+4+w|pCP0o|R|a9x;8V)RnOqqOC}M>na;RRH z1LA8uKB`%OJcmBdoguxd^X>Nhj`FjZNc$s)K*+4z8`XDX=oEGOihwZ_?nI{Q1#6z= z`Bzi|9ib0GVla|yt0|S5jKea_)weL6q3;K;D#Zy$AP@;0Fgg{j79CnQ{Z-*MPOOdY zL?+e7&N+Aut_#|4Mk}wO#EMdkw9*MpgF*ilo-$vPHr%_>a!^e76f2S}1d_d!bf+&R zeGPzB?$J3g&AURmTg=MrS%qhQR=6#&j?;JEmT|gUg#VhkAj| zh{TBHArFBG-7xPg{&R<8 zIUXpjXi&e(LRa`K^pviT^TQw4QK3kBLe?+tXtatC58V7MLP1L9%2XNU1mEvglY~%m z!h<-`oQaFfsQ@;^-@*^4JWqjiLIy%K6gV8h^j^_u3ru(7KLlArvneH(Sk~z|LZv!v}Y%g zcN$$3`Np|2aAn1st`hwR2-es&h8h5rBybrn2fxEG!@D|hHR3&75xPOp!zh4_3`9p+ z5ps+T*cwcxjS`(+t_4z$0J(&+-zHnRZp*}PDvNp5T|fQOKjEN~yS`+^O*;r^7=S39 z>}8hLTm+Yy{0cux>u&fi`;o9mMgVA)7s2AR@~jNj_EX^ydo%7)=m0|vXcQ4F?#Q_& z6h@F{OG}R|6jo;99FB<(bz1)LV>>G5$pMK7_Fx)zGz`qsLto`ti6ozu*aOfyayU~T zi_*a&k;o--)%zx7{1(Cu3(DEj)5&HvAQ|@O6 z#ThZ#J{KC*SzCqu?KD@C{$~my}-p-iTuyA#eOp0q>EiFH`d(-$a z9{%0x4~SPd2&XUxq1reKB5)XJgZLnj#l!JGrRC}(b4($0Oz8y-Ka&pH7L3Y<*py;5 zk=ULt(SQo_Pzj}pNju5yZ}0^c{S-|Ri+0b# zR6qiN%+b`xVfGR&m9zj(jYLYX5g2suDL|F=03c^hAZA6ORi+kde_n;8?9CVfOU(i| z{%<>|R%=2ZscFnNhGAWO0=tb!wekm(jV7wFQC<7b|w-fFR}~ z94Y2nwB6%t#8JSKB8Zo?9tcheJ zmb-jYBpMjnFx(#ql%QEgxnSg2O+kmZq6mK!%c?ipVeuZ|*Iqcu#uBjJCu>6fGmHUziBr1G>@)dGrE2*7-2Jg=l2UG6=`*21e|%DAxR}SVI@FA zyZYmeQY1kP@hLVan1djU3LRk>4e%KIzQD-HQ6U9&(0L+|=AMvcpv*|%*OY-K(Figj zB>KnDL%ATW27(O)TZn}bSm9eFox#$rT8sLi^v|6vV*t0X>hRT7aU#xGnbLJ)`P$T7I zsF27*Fd@38lne>Qt^ai%O#NKV*~q}K_~86lJ1yhPPcnLxjsp`F_BdkGWkOSKV_Pnl zIS8%vg(2m>FywVpKXWP?+%?4*Ym7Fe01Bk?Yj+IzsrbSY;35NePyR<*;S;NA^fk#v zT;D~HOdwTAXjubb5K)dIIK~El?FN{9Zh$|H{P3g|1_Sfu9BHNsMAj5<9Z{UXv=8*Q zVmm|uOnW@JP+rIQQVG4Uciw-PqRrSD5Xm81ePzj^%4Sy0g%Vhtt=!H!bAP=!dcAKC z1FH~54&kUENQmK8BLs4Xmkzyyx;PP$Ig;_^P$#-{@A4>vrt%LwGm0k7*~CT9dxqyc zWaWOjBX_AhTW`Kh*P22RuP;9}J#=BJx$=|>nt>trWa0m28%>0Ol zO^F<#FU|r>i4@X-3JGi&lL|p(fb~aa3?!VrlLA?FY+_Z#D?ttNI9~!LN7N` z7g#}RbGS6FHZLc!mMlg&8~l7bTe=-Nh}G5mg1xdpO#Wg8bAt^SylUH2w_<)4A#eDh zI01F#>(UCjVHw2tbzmuB$`8aa=q|r#l9^h zjZKL{AancsDm;x{s*DmYG;&KQf5he*Fik8=&F(MsW(bWY7hB`BrSl=Y@xO4R*LoD*Q%*H%q z3&#&z=V4#au+-`ux=%T=_GLl z_c|)=WTnVy@Lmvb(tv84oOf#KrhNl-(pb;7oKTy>+!8Er7*TUu)j7a6%|oM`N$2ie z^B}=BXM4!RxqCnV{BzTUw7Tl#>Z&WNx!nv{9uos@AaQrewUBv}70~?m(+aasK2-22 zmvPm$+`jga?X&*Z+Mj5}?)&$=egngO(+Dd08fi2Px}Ru zIx&8sjcCefGK%60`>u4Znd>lLZk=B^DN~Fp}@f*$q;F%BCb=@#ztYG z!MI=?+*o6LQvMV|0z;0jh=;BQjnPQdcNQ(UkD(Z+hPgQ|?y-S+74u6fYS<#s{#kkW zvkGICqlnnXlec%f_%5te?_7$h@~Z=gh7Y}-3ktRJC)dV5w&7Qzx-UMks^m(VB(+Cy z+w2(U{N(WGrp(QaSL}FY)>S&UY!&yI>e8`Im(h|T%H?#gE8)OdRKt+QyS3VAkO1=q z*>D4f_-e9=Xfux`M0pKXU>DyEKC3eqH8x#z5L4_lDY&}5CfKWj!mlt|-VL}|wPL_A zIGJd9I`vRvQ`5{gU=>}PgfQ9HXFU#5EgOMbr-{gu?x11HC4E-Hwrr5DD-K1%h;IBKo2K9 zm6f%=b4uXsl#~{l>*O4u8LZ>a35x!ZbppOrj*;-ircWwK<7_8ZJ^XRPjK5%e;Y_e% zx(krG(UiCt*y_0>Nt}tOF5W5emiGnB#vO!_VY=t&B_k5Vtd@JpM{+@}*!VGBPC^sC zgBA|h%jhzy+FuM^o`+mAqlUXClFl?>kH^xQta@$(2=A{*Z(-0B69pWx zHJXelL+51B<-@5=6^J4JJFZ%{9RSEeBTEw=$BNa1@*C;EHD??ljelG_jJ0kAFElTy zJuj*HYc1J;r7_{vsucyslwrMaRrT69`tdnImL{21phHvZ&q#cS5t+y;0SdTc`m7gU z>_?A)4x-CcEuxp0aL@wf#Bxf%sl9aT~DP5Y&Z9|au9%}wlROjw&zQVfF! zQ4wF#wxGQ2C{j}j)v%P7VKQc^B+Mdv<5(*fYv!LxX@4fAdLg#Vj?QBv(1O}2xwZ8s z#fdg!Ol;lK&4~4psR|}EaeHrJKkl=*n&X?iS#{2DsJ)V_Q02bDsdpgC;+Rb-ofmf5 za~1vCN6?{mcg#f_+r_0w%&OIeVdNE8jrxm*`%Up2!+IvNvM&P>PvI7BcTM1)yB72z zbxDh!K#J9dB~%u>nCh6pWxY*IypGoGYixD;PhwSf=x3@fT~tb}src-#KaiW|1Te2u zH71BSIWaDWn+{;84&&I4bhDv=h6>_1mFbHCWg-St>Z)Xa3rq@rZ( zJ~7UBtACAM`}l6)69m=;pO3H1LAuylu^E(E*2$1&pG!a zh;>@Ahwjr(M}|1I$hl}_wgRS|ioILoNxqlX+5Vkk>47Dm4~&ZuXi&hHm-G68et*Wf zwgY=sY-j!B^q8S-vxn{&fgHF=<-2n>36}-GfM?AEP$Xb${HB$7!RrJ>D3qE=M zH!vuqP8Yt=fdlAmij2iL zeGy&&F&?Qt4$X#bIIdCDWFpa3P5nYI@1M3EDHV)&%2vXPY1|abo-6JJx5!f20dTt4 z|NGoU-BlfHnYJD>=iYaqf%`}{)4u)ZxSSha#d1*%dTI<3@0p7+cDYV_FS~0<#)bHV zZjvjum?&VLcXi>k7lYGL%FhcqAkCX7k$g4AD_$A+sTH&q?EiRDJC zotyu1;fkJR>(B_k+~T_Vn+J=;4%MU(Hg~qnhS(R^jM#jwX{aG>zCGFtHM=UitNOmf zhYvTn7Ea*63T#$C^~AUY#@?)c%969D!TCe73;nXNBAhzGT(e*-u5IH695!EK`z5#Y z_DxW{%|-%uvCg`n2m1= z9pjr-j3RaCW}4

>fSX07t^p})cmtotX_MFb=C#b1p`sh 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%0DGhVH@bl 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 DR)(oE diff --git a/rust/kcl-lib/tests/subtract_regression08/artifact_commands.snap b/rust/kcl-lib/tests/subtract_regression08/artifact_commands.snap new file mode 100644 index 000000000..7343042ae --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression08/artifact_commands.snap @@ -0,0 +1,578 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Artifact commands subtract_regression08.kcl +--- +[ + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "edge_lines_visible", + "hidden": false + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_visible", + "object_id": "[uuid]", + "hidden": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_visible", + "object_id": "[uuid]", + "hidden": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "make_plane", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "x_axis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "size": 60.0, + "clobber": false, + "hide": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 23.7998, + "y": 0.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "arc", + "center": { + "x": 23.7998, + "y": 58.7502 + }, + "radius": 58.7502, + "start": { + "unit": "degrees", + "value": 270.0 + }, + "end": { + "unit": "degrees", + "value": 360.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.0, + "y": 23.7998, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "make_plane", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "x_axis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "size": 60.0, + "clobber": false, + "hide": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "close_path", + "path_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "arc", + "center": { + "x": 0.0, + "y": 0.0 + }, + "radius": 30.162499999999998, + "start": { + "unit": "degrees", + "value": 0.0 + }, + "end": { + "unit": "degrees", + "value": 360.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 30.1625, + "y": 0.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_bring_to_front", + "object_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_visible", + "object_id": "[uuid]", + "hidden": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_extrusion_face_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sweep", + "target": "[uuid]", + "trajectory": "[uuid]", + "sectional": true, + "tolerance": 0.0000001, + "relative_to": "trajectory_curve" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "make_plane", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "x_axis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "size": 60.0, + "clobber": false, + "hide": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 23.7998, + "y": 0.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "arc", + "center": { + "x": 23.7998, + "y": 58.7502 + }, + "radius": 58.7502, + "start": { + "unit": "degrees", + "value": 270.0 + }, + "end": { + "unit": "degrees", + "value": 360.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.0, + "y": 23.7998, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "make_plane", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "x_axis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "size": 60.0, + "clobber": false, + "hide": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "close_path", + "path_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "arc", + "center": { + "x": 0.0, + "y": 0.0 + }, + "radius": 23.8125, + "start": { + "unit": "degrees", + "value": 0.0 + }, + "end": { + "unit": "degrees", + "value": 360.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 23.8125, + "y": 0.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_bring_to_front", + "object_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_visible", + "object_id": "[uuid]", + "hidden": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_extrusion_face_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sweep", + "target": "[uuid]", + "trajectory": "[uuid]", + "sectional": true, + "tolerance": 0.0000001, + "relative_to": "trajectory_curve" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "boolean_subtract", + "target_ids": [ + "[uuid]" + ], + "tool_ids": [ + "[uuid]" + ], + "tolerance": 0.0000001 + } + } +] diff --git a/rust/kcl-lib/tests/subtract_regression08/artifact_graph_flowchart.snap b/rust/kcl-lib/tests/subtract_regression08/artifact_graph_flowchart.snap new file mode 100644 index 000000000..50c974df4 --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression08/artifact_graph_flowchart.snap @@ -0,0 +1,6 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Artifact graph flowchart subtract_regression08.kcl +extension: md +snapshot_kind: binary +--- diff --git a/rust/kcl-lib/tests/subtract_regression08/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/subtract_regression08/artifact_graph_flowchart.snap.md new file mode 100644 index 000000000..004106c4b --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression08/artifact_graph_flowchart.snap.md @@ -0,0 +1,105 @@ +```mermaid +flowchart LR + subgraph path5 [Path] + 5["Path
[88, 124, 0]"] + %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] + 9["Segment
[130, 151, 0]"] + %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] + 10["Segment
[157, 238, 0]"] + %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] + 11["Segment
[244, 265, 0]"] + %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] + end + subgraph path6 [Path] + 6["Path
[320, 379, 0]"] + %% [ProgramBodyItem { index: 3 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 12["Segment
[320, 379, 0]"] + %% [ProgramBodyItem { index: 3 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 17[Solid2d] + end + subgraph path7 [Path] + 7["Path
[535, 571, 0]"] + %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] + 13["Segment
[577, 598, 0]"] + %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] + 14["Segment
[604, 685, 0]"] + %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] + 15["Segment
[691, 712, 0]"] + %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] + end + subgraph path8 [Path] + 8["Path
[767, 826, 0]"] + %% [ProgramBodyItem { index: 8 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 16["Segment
[767, 826, 0]"] + %% [ProgramBodyItem { index: 8 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 18[Solid2d] + end + 1["Plane
[47, 64, 0]"] + %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 2["Plane
[279, 296, 0]"] + %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 3["Plane
[494, 511, 0]"] + %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 4["Plane
[726, 743, 0]"] + %% [ProgramBodyItem { index: 7 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 19["Sweep Sweep
[399, 480, 0]"] + %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 20["Sweep Sweep
[849, 929, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 21["CompositeSolid Subtract
[945, 998, 0]"] + %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 22[Wall] + %% face_code_ref=Missing NodePath + 23[Wall] + %% face_code_ref=Missing NodePath + 24[Wall] + %% face_code_ref=Missing NodePath + 25[Wall] + %% face_code_ref=Missing NodePath + 26[Wall] + %% face_code_ref=Missing NodePath + 27[Wall] + %% face_code_ref=Missing NodePath + 28["Cap Start"] + %% face_code_ref=Missing NodePath + 29["Cap Start"] + %% face_code_ref=Missing NodePath + 30["Cap End"] + %% face_code_ref=Missing NodePath + 31["Cap End"] + %% face_code_ref=Missing NodePath + 1 --- 5 + 1 --- 7 + 2 --- 6 + 4 --- 8 + 5 --- 9 + 5 --- 10 + 5 --- 11 + 6 --- 12 + 6 --- 17 + 6 ---- 19 + 6 --- 21 + 7 --- 13 + 7 --- 14 + 7 --- 15 + 8 --- 16 + 8 --- 18 + 8 ---- 20 + 8 --- 21 + 12 --- 22 + 12 <--x 23 + 12 <--x 24 + 16 <--x 25 + 16 <--x 26 + 16 --- 27 + 19 --- 22 + 19 --- 23 + 19 --- 24 + 19 --- 29 + 19 --- 31 + 20 --- 25 + 20 --- 26 + 20 --- 27 + 20 --- 28 + 20 --- 30 +``` diff --git a/rust/kcl-lib/tests/subtract_regression08/ast.snap b/rust/kcl-lib/tests/subtract_regression08/ast.snap new file mode 100644 index 000000000..c4bce86ef --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression08/ast.snap @@ -0,0 +1,1567 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Result of parsing subtract_regression08.kcl +--- +{ + "Ok": { + "body": [ + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "sketch001", + "start": 0, + "type": "Identifier" + }, + "init": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "XY", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "sketch001Profile000", + "start": 0, + "type": "Identifier" + }, + "init": { + "body": [ + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startProfile", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch001", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.937", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.937, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "270", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 270.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "360", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 360.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "2.313", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.313, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "arc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.937", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.937, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "sketch000", + "start": 0, + "type": "Identifier" + }, + "init": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "YZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "sketch000Profile000", + "start": 0, + "type": "Identifier" + }, + "init": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1.1875", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.1875, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "circle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch000", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "sweepExtrude000", + "start": 0, + "type": "Identifier" + }, + "init": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "path", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch001Profile000", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "sectional", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "true", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": true + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sweep", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch000Profile000", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "sketch003", + "start": 0, + "type": "Identifier" + }, + "init": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "XY", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "sketch003Profile000", + "start": 0, + "type": "Identifier" + }, + "init": { + "body": [ + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startProfile", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch001", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.937", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.937, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "270", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 270.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "360", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 360.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "2.313", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.313, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "arc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.937", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.937, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "sketch002", + "start": 0, + "type": "Identifier" + }, + "init": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "YZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "sketch002Profile000", + "start": 0, + "type": "Identifier" + }, + "init": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.9375", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.9375, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "circle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch002", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "sweepCut000Extrude", + "start": 0, + "type": "Identifier" + }, + "init": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "path", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch003Profile000", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "sectional", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "true", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": true + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sweep", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch002Profile000", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "sweepCut000", + "start": 0, + "type": "Identifier" + }, + "init": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tools", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sweepCut000Extrude", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "subtract", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sweepExtrude000", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + } + ], + "commentStart": 0, + "end": 0, + "innerAttrs": [ + { + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "settings", + "start": 0, + "type": "Identifier" + }, + "properties": [ + { + "commentStart": 0, + "end": 0, + "key": { + "commentStart": 0, + "end": 0, + "name": "defaultLengthUnit", + "start": 0, + "type": "Identifier" + }, + "start": 0, + "type": "ObjectProperty", + "value": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "in", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "start": 0, + "type": "Annotation" + } + ], + "nonCodeMeta": { + "nonCodeNodes": { + "0": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "1": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "2": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "3": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "4": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "5": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "6": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "7": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "8": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "9": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ] + }, + "startNodes": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ] + }, + "start": 0 + } +} diff --git a/rust/kcl-lib/tests/subtract_regression08/input.kcl b/rust/kcl-lib/tests/subtract_regression08/input.kcl new file mode 100644 index 000000000..d9a540c26 --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression08/input.kcl @@ -0,0 +1,53 @@ +@settings(defaultLengthUnit = in) + +sketch001 = startSketchOn(XY) + +sketch001Profile000 = startProfile(sketch001, at = [0, 0]) + |> xLine(length = 0.937) + |> arc( + angleStart = 270, + angleEnd = 360, + radius = 2.313 + ) + |> yLine(length = 0.937) + +sketch000 = startSketchOn(YZ) + +sketch000Profile000 = circle( + sketch000, + center = [0, 0], + radius = 1.1875 +) + +sweepExtrude000 = sweep( + sketch000Profile000, + path = sketch001Profile000, + sectional = true, +) + +sketch003 = startSketchOn(XY) + +sketch003Profile000 = startProfile(sketch001, at = [0, 0]) + |> xLine(length = 0.937) + |> arc( + angleStart = 270, + angleEnd = 360, + radius = 2.313 + ) + |> yLine(length = 0.937) + +sketch002 = startSketchOn(YZ) + +sketch002Profile000 = circle( + sketch002, + center = [0, 0], + radius = 0.9375 +) + +sweepCut000Extrude = sweep( + sketch002Profile000, + path = sketch003Profile000, + sectional = true +) + +sweepCut000 = subtract(sweepExtrude000, tools = sweepCut000Extrude) diff --git a/rust/kcl-lib/tests/subtract_regression08/ops.snap b/rust/kcl-lib/tests/subtract_regression08/ops.snap new file mode 100644 index 000000000..1584fd969 --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression08/ops.snap @@ -0,0 +1,147 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Operations executed subtract_regression08.kcl +--- +[ + { + "labeledArgs": {}, + "name": "startSketchOn", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + }, + { + "labeledArgs": {}, + "name": "startSketchOn", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "path": { + "value": { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "sectional": { + "value": { + "type": "Bool", + "value": true + }, + "sourceRange": [] + } + }, + "name": "sweep", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + }, + { + "labeledArgs": {}, + "name": "startSketchOn", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + }, + { + "labeledArgs": {}, + "name": "startSketchOn", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "path": { + "value": { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "sectional": { + "value": { + "type": "Bool", + "value": true + }, + "sourceRange": [] + } + }, + "name": "sweep", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "tools": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + }, + "name": "subtract", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + } +] diff --git a/rust/kcl-lib/tests/subtract_regression08/program_memory.snap b/rust/kcl-lib/tests/subtract_regression08/program_memory.snap new file mode 100644 index 000000000..94a002cbf --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression08/program_memory.snap @@ -0,0 +1,882 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Variables in memory after executing subtract_regression08.kcl +--- +{ + "sketch000": { + "type": "Plane", + "value": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "value": "YZ", + "xAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + } + }, + "sketch000Profile000": { + "type": "Sketch", + "value": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 0.0, + 0.0 + ], + "from": [ + 1.1875, + 0.0 + ], + "radius": 1.1875, + "tag": null, + "to": [ + 1.1875, + 0.0 + ], + "type": "Circle", + "units": { + "type": "Inches" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "YZ", + "xAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 1.1875, + 0.0 + ], + "to": [ + 1.1875, + 0.0 + ], + "units": { + "type": "Inches" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Inches" + } + } + }, + "sketch001": { + "type": "Plane", + "value": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "value": "XY", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + } + } + }, + "sketch001Profile000": { + "type": "Sketch", + "value": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 0.0, + 0.0 + ], + "tag": null, + "to": [ + 0.937, + 0.0 + ], + "type": "ToPoint", + "units": { + "type": "Inches" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 0.937, + 2.313 + ], + "from": [ + 0.937, + 0.0 + ], + "radius": 2.313, + "tag": null, + "to": [ + 3.25, + 2.313 + ], + "type": "Arc", + "units": { + "type": "Inches" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 3.25, + 2.313 + ], + "tag": null, + "to": [ + 3.25, + 3.25 + ], + "type": "ToPoint", + "units": { + "type": "Inches" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "XY", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 0.0, + 0.0 + ], + "to": [ + 0.0, + 0.0 + ], + "units": { + "type": "Inches" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Inches" + } + } + }, + "sketch002": { + "type": "Plane", + "value": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "value": "YZ", + "xAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + } + }, + "sketch002Profile000": { + "type": "Sketch", + "value": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 0.0, + 0.0 + ], + "from": [ + 0.9375, + 0.0 + ], + "radius": 0.9375, + "tag": null, + "to": [ + 0.9375, + 0.0 + ], + "type": "Circle", + "units": { + "type": "Inches" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "YZ", + "xAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 0.9375, + 0.0 + ], + "to": [ + 0.9375, + 0.0 + ], + "units": { + "type": "Inches" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Inches" + } + } + }, + "sketch003": { + "type": "Plane", + "value": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "value": "XY", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + } + } + }, + "sketch003Profile000": { + "type": "Sketch", + "value": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 0.0, + 0.0 + ], + "tag": null, + "to": [ + 0.937, + 0.0 + ], + "type": "ToPoint", + "units": { + "type": "Inches" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 0.937, + 2.313 + ], + "from": [ + 0.937, + 0.0 + ], + "radius": 2.313, + "tag": null, + "to": [ + 3.25, + 2.313 + ], + "type": "Arc", + "units": { + "type": "Inches" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 3.25, + 2.313 + ], + "tag": null, + "to": [ + 3.25, + 3.25 + ], + "type": "ToPoint", + "units": { + "type": "Inches" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "XY", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 0.0, + 0.0 + ], + "to": [ + 0.0, + 0.0 + ], + "units": { + "type": "Inches" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Inches" + } + } + }, + "sweepCut000": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudeArc" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 0.0, + 0.0 + ], + "from": [ + 1.1875, + 0.0 + ], + "radius": 1.1875, + "tag": null, + "to": [ + 1.1875, + 0.0 + ], + "type": "Circle", + "units": { + "type": "Inches" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "YZ", + "xAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 1.1875, + 0.0 + ], + "to": [ + 1.1875, + 0.0 + ], + "units": { + "type": "Inches" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Inches" + } + }, + "height": 0.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Inches" + }, + "sectional": true + } + }, + "sweepCut000Extrude": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudeArc" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 0.0, + 0.0 + ], + "from": [ + 0.9375, + 0.0 + ], + "radius": 0.9375, + "tag": null, + "to": [ + 0.9375, + 0.0 + ], + "type": "Circle", + "units": { + "type": "Inches" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "YZ", + "xAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 0.9375, + 0.0 + ], + "to": [ + 0.9375, + 0.0 + ], + "units": { + "type": "Inches" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Inches" + } + }, + "height": 0.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Inches" + }, + "sectional": true + } + }, + "sweepExtrude000": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudeArc" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 0.0, + 0.0 + ], + "from": [ + 1.1875, + 0.0 + ], + "radius": 1.1875, + "tag": null, + "to": [ + 1.1875, + 0.0 + ], + "type": "Circle", + "units": { + "type": "Inches" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "YZ", + "xAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 1.1875, + 0.0 + ], + "to": [ + 1.1875, + 0.0 + ], + "units": { + "type": "Inches" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Inches" + } + }, + "height": 0.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Inches" + }, + "sectional": true + } + } +} diff --git a/rust/kcl-lib/tests/subtract_regression08/rendered_model.png b/rust/kcl-lib/tests/subtract_regression08/rendered_model.png new file mode 100644 index 0000000000000000000000000000000000000000..76d011a41603ae3581067147ec220baa2f585d76 GIT binary patch literal 94115 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 Lb@1}*?wa*K#-W0E literal 0 HcmV?d00001 diff --git a/rust/kcl-lib/tests/subtract_regression08/unparsed.snap b/rust/kcl-lib/tests/subtract_regression08/unparsed.snap new file mode 100644 index 000000000..172f353bb --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression08/unparsed.snap @@ -0,0 +1,33 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Result of unparsing subtract_regression08.kcl +--- +@settings(defaultLengthUnit = in) + +sketch001 = startSketchOn(XY) + +sketch001Profile000 = startProfile(sketch001, at = [0, 0]) + |> xLine(length = 0.937) + |> arc(angleStart = 270, angleEnd = 360, radius = 2.313) + |> yLine(length = 0.937) + +sketch000 = startSketchOn(YZ) + +sketch000Profile000 = circle(sketch000, center = [0, 0], radius = 1.1875) + +sweepExtrude000 = sweep(sketch000Profile000, path = sketch001Profile000, sectional = true) + +sketch003 = startSketchOn(XY) + +sketch003Profile000 = startProfile(sketch001, at = [0, 0]) + |> xLine(length = 0.937) + |> arc(angleStart = 270, angleEnd = 360, radius = 2.313) + |> yLine(length = 0.937) + +sketch002 = startSketchOn(YZ) + +sketch002Profile000 = circle(sketch002, center = [0, 0], radius = 0.9375) + +sweepCut000Extrude = sweep(sketch002Profile000, path = sketch003Profile000, sectional = true) + +sweepCut000 = subtract(sweepExtrude000, tools = sweepCut000Extrude) diff --git a/rust/kcl-lib/tests/subtract_regression09/artifact_commands.snap b/rust/kcl-lib/tests/subtract_regression09/artifact_commands.snap new file mode 100644 index 000000000..4d3ccae25 --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression09/artifact_commands.snap @@ -0,0 +1,555 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Artifact commands subtract_regression09.kcl +--- +[ + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "edge_lines_visible", + "hidden": false + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_visible", + "object_id": "[uuid]", + "hidden": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_visible", + "object_id": "[uuid]", + "hidden": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "make_plane", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "x_axis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "size": 60.0, + "clobber": false, + "hide": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 5.0, + "y": 3.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.0, + "y": -6.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 24.972, + "y": 0.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.0, + "y": 6.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": -24.972, + "y": 0.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "close_path", + "path_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_bring_to_front", + "object_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "revolve", + "target": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "axis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "axis_is_2d": true, + "angle": { + "unit": "degrees", + "value": 360.0 + }, + "tolerance": 0.0000001, + "opposite": "None" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_adjacency_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_extrusion_face_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "make_plane", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "x_axis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "size": 60.0, + "clobber": false, + "hide": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 1.1882, + "y": 27.4971, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": -0.1771, + "y": 0.7408, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "arc", + "center": { + "x": -4.1275, + "y": 27.0095 + }, + "radius": 5.283446, + "start": { + "unit": "degrees", + "value": 13.4444 + }, + "end": { + "unit": "degrees", + "value": 38.6282 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "arc", + "center": { + "x": 4.7625, + "y": 27.0095 + }, + "radius": 5.793095, + "start": { + "unit": "degrees", + "value": 145.2955 + }, + "end": { + "unit": "degrees", + "value": 14.7045 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "arc", + "center": { + "x": 13.1164, + "y": 23.9689 + }, + "radius": 5.283446, + "start": { + "unit": "degrees", + "value": 121.3718 + }, + "end": { + "unit": "degrees", + "value": 146.5556 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": -0.4198, + "y": -0.6355, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "arc", + "center": { + "x": 1.4162, + "y": 30.8507 + }, + "radius": 8.272375, + "start": { + "unit": "degrees", + "value": 326.1703 + }, + "end": { + "unit": "degrees", + "value": 311.294 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "arc", + "center": { + "x": 4.7625, + "y": 27.0095 + }, + "radius": 3.178087, + "start": { + "unit": "degrees", + "value": 311.6667 + }, + "end": { + "unit": "degrees", + "value": 208.3333 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "tangential_arc_to", + "to": { + "x": -0.7769, + "y": 1.9959, + "z": 0.0 + }, + "angle_snap_increment": null + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "close_path", + "path_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extrude", + "target": "[uuid]", + "distance": 10.0, + "faces": null, + "opposite": { + "Other": 10.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_bring_to_front", + "object_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_adjacency_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_extrusion_face_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "boolean_subtract", + "target_ids": [ + "[uuid]" + ], + "tool_ids": [ + "[uuid]" + ], + "tolerance": 0.0000001 + } + } +] diff --git a/rust/kcl-lib/tests/subtract_regression09/artifact_graph_flowchart.snap b/rust/kcl-lib/tests/subtract_regression09/artifact_graph_flowchart.snap new file mode 100644 index 000000000..a11e17e88 --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression09/artifact_graph_flowchart.snap @@ -0,0 +1,6 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Artifact graph flowchart subtract_regression09.kcl +extension: md +snapshot_kind: binary +--- diff --git a/rust/kcl-lib/tests/subtract_regression09/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/subtract_regression09/artifact_graph_flowchart.snap.md new file mode 100644 index 000000000..8d5d4b23a --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression09/artifact_graph_flowchart.snap.md @@ -0,0 +1,235 @@ +```mermaid +flowchart LR + subgraph path3 [Path] + 3["Path
[88, 124, 0]"] + %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] + 5["Segment
[130, 148, 0]"] + %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] + 6["Segment
[154, 176, 0]"] + %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] + 7["Segment
[182, 199, 0]"] + %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] + 8["Segment
[205, 228, 0]"] + %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] + 9["Segment
[234, 241, 0]"] + %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] + 19[Solid2d] + end + subgraph path4 [Path] + 4["Path
[362, 413, 0]"] + %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] + 10["Segment
[419, 452, 0]"] + %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] + 11["Segment
[458, 554, 0]"] + %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] + 12["Segment
[560, 657, 0]"] + %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] + 13["Segment
[663, 761, 0]"] + %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] + 14["Segment
[767, 801, 0]"] + %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] + 15["Segment
[807, 905, 0]"] + %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] + 16["Segment
[911, 1009, 0]"] + %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] + 17["Segment
[1015, 1073, 0]"] + %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] + 18["Segment
[1198, 1205, 0]"] + %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }] + 20[Solid2d] + end + 1["Plane
[47, 64, 0]"] + %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 2["Plane
[321, 338, 0]"] + %% [ProgramBodyItem { index: 3 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 21["Sweep Revolve
[256, 307, 0]"] + %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 22["Sweep Extrusion
[1223, 1292, 0]"] + %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 23["CompositeSolid Subtract
[1294, 1337, 0]"] + %% [ProgramBodyItem { index: 6 }, ExpressionStatementExpr] + 24[Wall] + %% face_code_ref=Missing NodePath + 25[Wall] + %% face_code_ref=Missing NodePath + 26[Wall] + %% face_code_ref=Missing NodePath + 27[Wall] + %% face_code_ref=Missing NodePath + 28[Wall] + %% face_code_ref=Missing NodePath + 29[Wall] + %% face_code_ref=Missing NodePath + 30[Wall] + %% face_code_ref=Missing NodePath + 31[Wall] + %% face_code_ref=Missing NodePath + 32[Wall] + %% face_code_ref=Missing NodePath + 33[Wall] + %% face_code_ref=Missing NodePath + 34[Wall] + %% face_code_ref=Missing NodePath + 35[Wall] + %% face_code_ref=Missing NodePath + 36["Cap Start"] + %% face_code_ref=Missing NodePath + 37["Cap End"] + %% face_code_ref=Missing NodePath + 38["SweepEdge Opposite"] + 39["SweepEdge Opposite"] + 40["SweepEdge Opposite"] + 41["SweepEdge Opposite"] + 42["SweepEdge Opposite"] + 43["SweepEdge Opposite"] + 44["SweepEdge Opposite"] + 45["SweepEdge Opposite"] + 46["SweepEdge Adjacent"] + 47["SweepEdge Adjacent"] + 48["SweepEdge Adjacent"] + 49["SweepEdge Adjacent"] + 50["SweepEdge Adjacent"] + 51["SweepEdge Adjacent"] + 52["SweepEdge Adjacent"] + 53["SweepEdge Adjacent"] + 54["SweepEdge Adjacent"] + 55["SweepEdge Adjacent"] + 56["SweepEdge Adjacent"] + 1 --- 3 + 2 --- 4 + 3 --- 5 + 3 --- 6 + 3 --- 7 + 3 --- 8 + 3 --- 9 + 3 --- 19 + 3 ---- 21 + 3 --- 23 + 4 --- 10 + 4 --- 11 + 4 --- 12 + 4 --- 13 + 4 --- 14 + 4 --- 15 + 4 --- 16 + 4 --- 17 + 4 --- 18 + 4 --- 20 + 4 ---- 22 + 4 --- 23 + 21 <--x 5 + 5 --- 27 + 5 x--> 46 + 21 <--x 6 + 6 --- 25 + 6 --- 46 + 21 <--x 7 + 7 --- 24 + 7 --- 47 + 21 <--x 8 + 8 --- 26 + 8 --- 48 + 10 --- 29 + 10 x--> 36 + 10 --- 45 + 10 --- 56 + 11 --- 34 + 11 x--> 36 + 11 --- 44 + 11 --- 55 + 12 --- 30 + 12 x--> 36 + 12 --- 43 + 12 --- 54 + 13 --- 35 + 13 x--> 36 + 13 --- 42 + 13 --- 53 + 14 --- 28 + 14 x--> 36 + 14 --- 41 + 14 --- 52 + 15 --- 32 + 15 x--> 36 + 15 --- 40 + 15 --- 51 + 16 --- 33 + 16 x--> 36 + 16 --- 39 + 16 --- 50 + 17 --- 31 + 17 x--> 36 + 17 --- 38 + 17 --- 49 + 21 --- 24 + 21 --- 25 + 21 --- 26 + 21 --- 27 + 21 --- 46 + 21 --- 47 + 21 --- 48 + 22 --- 28 + 22 --- 29 + 22 --- 30 + 22 --- 31 + 22 --- 32 + 22 --- 33 + 22 --- 34 + 22 --- 35 + 22 --- 36 + 22 --- 37 + 22 --- 38 + 22 --- 39 + 22 --- 40 + 22 --- 41 + 22 --- 42 + 22 --- 43 + 22 --- 44 + 22 --- 45 + 22 --- 49 + 22 --- 50 + 22 --- 51 + 22 --- 52 + 22 --- 53 + 22 --- 54 + 22 --- 55 + 22 --- 56 + 24 --- 47 + 25 --- 46 + 47 <--x 26 + 26 --- 48 + 27 --- 46 + 48 <--x 27 + 28 --- 41 + 51 <--x 28 + 28 --- 52 + 29 --- 45 + 55 <--x 29 + 29 --- 56 + 30 --- 43 + 53 <--x 30 + 30 --- 54 + 31 --- 38 + 31 --- 49 + 56 <--x 31 + 32 --- 40 + 50 <--x 32 + 32 --- 51 + 33 --- 39 + 49 <--x 33 + 33 --- 50 + 34 --- 44 + 54 <--x 34 + 34 --- 55 + 35 --- 42 + 52 <--x 35 + 35 --- 53 + 38 <--x 37 + 39 <--x 37 + 40 <--x 37 + 41 <--x 37 + 42 <--x 37 + 43 <--x 37 + 44 <--x 37 + 45 <--x 37 +``` diff --git a/rust/kcl-lib/tests/subtract_regression09/ast.snap b/rust/kcl-lib/tests/subtract_regression09/ast.snap new file mode 100644 index 000000000..f4d8802c8 --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression09/ast.snap @@ -0,0 +1,1775 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Result of parsing subtract_regression09.kcl +--- +{ + "Ok": { + "body": [ + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "sketch001", + "start": 0, + "type": "Identifier" + }, + "init": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "YZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "sketch001Profile000", + "start": 0, + "type": "Identifier" + }, + "init": { + "body": [ + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startProfile", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch001", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "6", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "24.972", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 24.972, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "6", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "24.972", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 24.972, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "close", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "revolve000", + "start": 0, + "type": "Identifier" + }, + "init": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "axis", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "Y", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "360", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 360.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "revolve", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch001Profile000", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "sketch003", + "start": 0, + "type": "Identifier" + }, + "init": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "XY", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "sketch003Profile000", + "start": 0, + "type": "Identifier" + }, + "init": { + "body": [ + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "1.188246", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.188246, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "27.497102", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 27.497102, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startProfile", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch003", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "end", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "0.177089", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.177089, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "raw": "0.740791", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.740791, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "line", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "13.444444", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 13.444444, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "38.628165", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 38.628165, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5.283446", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.283446, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "arc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "145.295512", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 145.295512, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "14.704488", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 14.704488, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5.793095", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.793095, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "arc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "121.371835", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 121.371835, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "146.555556", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 146.555556, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5.283446", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.283446, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "arc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "end", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "0.419774", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.419774, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "0.635548", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.635548, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "line", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "326.170267", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 326.170267, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "311.293981", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 311.293981, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "8.272375", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 8.272375, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "arc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "311.666667", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 311.666667, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "208.333333", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 208.333333, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "3.178087", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.178087, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "arc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "1.188246", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.188246, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "27.497102", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 27.497102, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "tangentialArc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "close", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "nonCodeMeta": { + "nonCodeNodes": { + "8": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "blockComment", + "value": "|> arc(", + "style": "line" + } + }, + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "blockComment", + "value": "angleStart = 208.706019,", + "style": "line" + } + }, + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "blockComment", + "value": "angleEnd = 193.829733,", + "style": "line" + } + }, + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "blockComment", + "value": "radius = 8.272375,", + "style": "line" + } + }, + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "blockComment", + "value": ")", + "style": "line" + } + } + ] + }, + "startNodes": [] + }, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "cut000Extrude", + "start": 0, + "type": "Identifier" + }, + "init": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "bidirectionalLength", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "extrude", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch003Profile000", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tools", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cut000Extrude", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "subtract", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "revolve000", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + } + ], + "commentStart": 0, + "end": 0, + "innerAttrs": [ + { + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "settings", + "start": 0, + "type": "Identifier" + }, + "properties": [ + { + "commentStart": 0, + "end": 0, + "key": { + "commentStart": 0, + "end": 0, + "name": "defaultLengthUnit", + "start": 0, + "type": "Identifier" + }, + "start": 0, + "type": "ObjectProperty", + "value": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "mm", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "start": 0, + "type": "Annotation" + } + ], + "nonCodeMeta": { + "nonCodeNodes": { + "0": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "1": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "2": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "3": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "4": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "5": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ] + }, + "startNodes": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ] + }, + "start": 0 + } +} diff --git a/rust/kcl-lib/tests/subtract_regression09/input.kcl b/rust/kcl-lib/tests/subtract_regression09/input.kcl new file mode 100644 index 000000000..510c16901 --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression09/input.kcl @@ -0,0 +1,56 @@ +@settings(defaultLengthUnit = mm) + +sketch001 = startSketchOn(YZ) + +sketch001Profile000 = startProfile(sketch001, at = [5, 3]) + |> yLine(length = -6) + |> xLine(length = 24.972) + |> yLine(length = 6) + |> xLine(length = -24.972) + |> close() + +revolve000 = revolve(sketch001Profile000, axis = Y, angle = 360) + +sketch003 = startSketchOn(XY) + +sketch003Profile000 = startProfile(sketch003, at = [1.188246, 27.497102]) + |> line(end = [-0.177089, 0.740791]) + |> arc( + angleStart = 13.444444, + angleEnd = 38.628165, + radius = 5.283446, + ) + |> arc( + angleStart = 145.295512, + angleEnd = 14.704488, + radius = 5.793095, + ) + |> arc( + angleStart = 121.371835, + angleEnd = 146.555556, + radius = 5.283446, + ) + |> line(end = [-0.419774, -0.635548]) + |> arc( + angleStart = 326.170267, + angleEnd = 311.293981, + radius = 8.272375, + ) + |> arc( + angleStart = 311.666667, + angleEnd = 208.333333, + radius = 3.178087, + ) + |> tangentialArc( + endAbsolute = [1.188246, 27.497102] + ) + // |> arc( + // angleStart = 208.706019, + // angleEnd = 193.829733, + // radius = 8.272375, + // ) + |> close() + +cut000Extrude = extrude([sketch003Profile000], length = 10, bidirectionalLength = 10) + +subtract(revolve000, tools = cut000Extrude) diff --git a/rust/kcl-lib/tests/subtract_regression09/ops.snap b/rust/kcl-lib/tests/subtract_regression09/ops.snap new file mode 100644 index 000000000..a4963ae0b --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression09/ops.snap @@ -0,0 +1,217 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Operations executed subtract_regression09.kcl +--- +[ + { + "labeledArgs": {}, + "name": "startSketchOn", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + }, + { + "type": "KclStdLibCall", + "name": "revolve", + "unlabeledArg": { + "value": { + "type": "Array", + "value": [ + { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + } + ] + }, + "sourceRange": [] + }, + "labeledArgs": { + "angle": { + "value": { + "type": "Number", + "value": 360.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "axis": { + "value": { + "type": "Object", + "value": { + "direction": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "origin": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + } + } + }, + "sourceRange": [] + } + }, + "sourceRange": [] + }, + { + "labeledArgs": {}, + "name": "startSketchOn", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "bidirectionalLength": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "length": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + }, + "name": "extrude", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Array", + "value": [ + { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + } + ] + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "tools": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + }, + "name": "subtract", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + } +] diff --git a/rust/kcl-lib/tests/subtract_regression09/program_memory.snap b/rust/kcl-lib/tests/subtract_regression09/program_memory.snap new file mode 100644 index 000000000..228a8042c --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression09/program_memory.snap @@ -0,0 +1,1032 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Variables in memory after executing subtract_regression09.kcl +--- +{ + "cut000Extrude": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudeArc" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudeArc" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudeArc" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudeArc" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudeArc" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudeArc" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 1.1882, + 27.4971 + ], + "tag": null, + "to": [ + 1.0112, + 28.2379 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + -4.1275, + 27.0095 + ], + "from": [ + 1.0112, + 28.2379 + ], + "radius": 5.283446, + "tag": null, + "to": [ + -0.0, + 30.3077 + ], + "type": "Arc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 4.7625, + 27.0095 + ], + "from": [ + -0.0, + 30.3077 + ], + "radius": 5.793095, + "tag": null, + "to": [ + 10.3659, + 28.48 + ], + "type": "Arc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 13.1164, + 23.9689 + ], + "from": [ + 10.3659, + 28.48 + ], + "radius": 5.283446, + "tag": null, + "to": [ + 8.7078, + 26.8808 + ], + "type": "Arc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 8.7078, + 26.8808 + ], + "tag": null, + "to": [ + 8.288, + 26.2452 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 1.4162, + 30.8507 + ], + "from": [ + 8.288, + 26.2452 + ], + "radius": 8.272375, + "tag": null, + "to": [ + 6.8753, + 24.6354 + ], + "type": "Arc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 4.7625, + 27.0095 + ], + "from": [ + 6.8753, + 24.6354 + ], + "radius": 3.178087, + "tag": null, + "to": [ + 1.9651, + 25.5012 + ], + "type": "Arc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 9.6285, + 29.6332 + ], + "from": [ + 1.9651, + 25.5012 + ], + "tag": null, + "to": [ + 1.1882, + 27.4971 + ], + "type": "TangentialArcTo", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 1.1882, + 27.4971 + ], + "tag": null, + "to": [ + 1.1882, + 27.4971 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "XY", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 1.1882, + 27.4971 + ], + "to": [ + 1.1882, + 27.4971 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 10.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + "revolve000": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 5.0, + 3.0 + ], + "tag": null, + "to": [ + 5.0, + -3.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 5.0, + -3.0 + ], + "tag": null, + "to": [ + 29.972, + -3.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 29.972, + -3.0 + ], + "tag": null, + "to": [ + 29.972, + 3.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 29.972, + 3.0 + ], + "tag": null, + "to": [ + 5.0, + 3.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 5.0, + 3.0 + ], + "tag": null, + "to": [ + 5.0, + 3.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "YZ", + "xAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 5.0, + 3.0 + ], + "to": [ + 5.0, + 3.0 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 0.0, + "startCapId": null, + "endCapId": null, + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + "sketch001": { + "type": "Plane", + "value": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "value": "YZ", + "xAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + } + }, + "sketch001Profile000": { + "type": "Sketch", + "value": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 5.0, + 3.0 + ], + "tag": null, + "to": [ + 5.0, + -3.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 5.0, + -3.0 + ], + "tag": null, + "to": [ + 29.972, + -3.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 29.972, + -3.0 + ], + "tag": null, + "to": [ + 29.972, + 3.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 29.972, + 3.0 + ], + "tag": null, + "to": [ + 5.0, + 3.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 5.0, + 3.0 + ], + "tag": null, + "to": [ + 5.0, + 3.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "YZ", + "xAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 5.0, + 3.0 + ], + "to": [ + 5.0, + 3.0 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + } + }, + "sketch003": { + "type": "Plane", + "value": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "value": "XY", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + } + } + }, + "sketch003Profile000": { + "type": "Sketch", + "value": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 1.1882, + 27.4971 + ], + "tag": null, + "to": [ + 1.0112, + 28.2379 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + -4.1275, + 27.0095 + ], + "from": [ + 1.0112, + 28.2379 + ], + "radius": 5.283446, + "tag": null, + "to": [ + -0.0, + 30.3077 + ], + "type": "Arc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 4.7625, + 27.0095 + ], + "from": [ + -0.0, + 30.3077 + ], + "radius": 5.793095, + "tag": null, + "to": [ + 10.3659, + 28.48 + ], + "type": "Arc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 13.1164, + 23.9689 + ], + "from": [ + 10.3659, + 28.48 + ], + "radius": 5.283446, + "tag": null, + "to": [ + 8.7078, + 26.8808 + ], + "type": "Arc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 8.7078, + 26.8808 + ], + "tag": null, + "to": [ + 8.288, + 26.2452 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 1.4162, + 30.8507 + ], + "from": [ + 8.288, + 26.2452 + ], + "radius": 8.272375, + "tag": null, + "to": [ + 6.8753, + 24.6354 + ], + "type": "Arc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 4.7625, + 27.0095 + ], + "from": [ + 6.8753, + 24.6354 + ], + "radius": 3.178087, + "tag": null, + "to": [ + 1.9651, + 25.5012 + ], + "type": "Arc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 9.6285, + 29.6332 + ], + "from": [ + 1.9651, + 25.5012 + ], + "tag": null, + "to": [ + 1.1882, + 27.4971 + ], + "type": "TangentialArcTo", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 1.1882, + 27.4971 + ], + "tag": null, + "to": [ + 1.1882, + 27.4971 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "XY", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 1.1882, + 27.4971 + ], + "to": [ + 1.1882, + 27.4971 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + } + } +} diff --git a/rust/kcl-lib/tests/subtract_regression09/rendered_model.png b/rust/kcl-lib/tests/subtract_regression09/rendered_model.png new file mode 100644 index 0000000000000000000000000000000000000000..cbc5f031fe18e85299092e2d3b13d4eb92e7cfde GIT binary patch literal 67989 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 literal 0 HcmV?d00001 diff --git a/rust/kcl-lib/tests/subtract_regression09/unparsed.snap b/rust/kcl-lib/tests/subtract_regression09/unparsed.snap new file mode 100644 index 000000000..fb8f8b8e9 --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression09/unparsed.snap @@ -0,0 +1,38 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Result of unparsing subtract_regression09.kcl +--- +@settings(defaultLengthUnit = mm) + +sketch001 = startSketchOn(YZ) + +sketch001Profile000 = startProfile(sketch001, at = [5, 3]) + |> yLine(length = -6) + |> xLine(length = 24.972) + |> yLine(length = 6) + |> xLine(length = -24.972) + |> close() + +revolve000 = revolve(sketch001Profile000, axis = Y, angle = 360) + +sketch003 = startSketchOn(XY) + +sketch003Profile000 = startProfile(sketch003, at = [1.188246, 27.497102]) + |> line(end = [-0.177089, 0.740791]) + |> arc(angleStart = 13.444444, angleEnd = 38.628165, radius = 5.283446) + |> arc(angleStart = 145.295512, angleEnd = 14.704488, radius = 5.793095) + |> arc(angleStart = 121.371835, angleEnd = 146.555556, radius = 5.283446) + |> line(end = [-0.419774, -0.635548]) + |> arc(angleStart = 326.170267, angleEnd = 311.293981, radius = 8.272375) + |> arc(angleStart = 311.666667, angleEnd = 208.333333, radius = 3.178087) + |> tangentialArc(endAbsolute = [1.188246, 27.497102]) + // |> arc( + // angleStart = 208.706019, + // angleEnd = 193.829733, + // radius = 8.272375, + // ) + |> close() + +cut000Extrude = extrude([sketch003Profile000], length = 10, bidirectionalLength = 10) + +subtract(revolve000, tools = cut000Extrude) diff --git a/rust/kcl-lib/tests/subtract_regression10/artifact_commands.snap b/rust/kcl-lib/tests/subtract_regression10/artifact_commands.snap new file mode 100644 index 000000000..cf7cdbc5a --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression10/artifact_commands.snap @@ -0,0 +1,2625 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Artifact commands subtract_regression10.kcl +--- +[ + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "edge_lines_visible", + "hidden": false + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_visible", + "object_id": "[uuid]", + "hidden": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_visible", + "object_id": "[uuid]", + "hidden": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "make_plane", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "x_axis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "size": 60.0, + "clobber": false, + "hide": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": -1.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 42.1324, + "y": 35.3533, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.0, + "y": 232.0925, + "z": 0.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.9778, + "y": 0.2094, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "make_plane", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "x_axis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "size": 60.0, + "clobber": false, + "hide": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": -1.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 0.1, + "y": 267.0925, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 46.0, + "y": 0.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.0, + "y": -3.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": -3.0, + "y": 0.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.0, + "y": -2.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 3.0, + "y": 0.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.0, + "y": -3.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": -3.0, + "y": 0.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.0, + "y": -2.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 3.0, + "y": 0.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.0, + "y": -3.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": -3.0, + "y": 0.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.0, + "y": -2.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 3.0, + "y": 0.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 46.1, + "y": 189.0925, + "z": 0.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": -8.0, + "y": 0.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 38.1, + "y": 236.0925, + "z": 0.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "tangential_arc", + "radius": 23.0, + "offset": { + "unit": "degrees", + "value": 90.0 + } + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.1, + "y": 259.0925, + "z": 0.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.1, + "y": 267.0925, + "z": 0.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "close_path", + "path_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_bring_to_front", + "object_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "revolve", + "target": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "axis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "axis_is_2d": true, + "angle": { + "unit": "degrees", + "value": 360.0 + }, + "tolerance": 0.0000001, + "opposite": "None" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_adjacency_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_extrusion_face_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "make_plane", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "x_axis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "size": 60.0, + "clobber": false, + "hide": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 40.0, + "y": 241.4675, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.0, + "y": -18.75, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 25.75, + "y": 0.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 65.75, + "y": 241.4675, + "z": 0.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 40.0, + "y": 241.4675, + "z": 0.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "close_path", + "path_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extrude", + "target": "[uuid]", + "distance": 314.0, + "faces": null, + "opposite": "Symmetric" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_bring_to_front", + "object_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_adjacency_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_extrusion_face_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "entity_circular_pattern", + "entity_id": "[uuid]", + "axis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "center": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "num_repetitions": 1, + "arc_degrees": 360.0, + "rotate_duplicates": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "boolean_subtract", + "target_ids": [ + "[uuid]" + ], + "tool_ids": [ + "[uuid]" + ], + "tolerance": 0.0000001 + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "boolean_union", + "solid_ids": [ + "[uuid]", + "[uuid]" + ], + "tolerance": 0.0000001 + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "make_plane", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "x_axis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "size": 60.0, + "clobber": false, + "hide": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "close_path", + "path_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": -1.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "arc", + "center": { + "x": 0.0, + "y": 232.0925 + }, + "radius": 7.5, + "start": { + "unit": "degrees", + "value": 0.0 + }, + "end": { + "unit": "degrees", + "value": 360.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 7.5, + "y": 232.0925, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": -1.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extrude", + "target": "[uuid]", + "distance": 92.0, + "faces": null, + "opposite": "Symmetric" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_bring_to_front", + "object_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_adjacency_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_extrusion_face_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_fillet_edge", + "object_id": "[uuid]", + "edge_id": null, + "edge_ids": [ + "[uuid]" + ], + "radius": 1.875, + "tolerance": 0.0000001, + "cut_type": "fillet", + "strategy": "automatic", + "extra_face_ids": [] + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_fillet_edge", + "object_id": "[uuid]", + "edge_id": null, + "edge_ids": [ + "[uuid]" + ], + "radius": 1.875, + "tolerance": 0.0000001, + "cut_type": "fillet", + "strategy": "automatic", + "extra_face_ids": [] + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_opposite_edge", + "object_id": "[uuid]", + "edge_id": "[uuid]", + "face_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "make_plane", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "x_axis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "size": 60.0, + "clobber": false, + "hide": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": -1.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 0.0, + "y": 195.8425, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.1, + "y": 0.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "tangential_arc_to", + "to": { + "x": 49.9, + "y": -6.75, + "z": 0.0 + }, + "angle_snap_increment": null + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 50.0, + "y": 0.0, + "z": 0.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "entity_get_all_child_uuids", + "entity_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "entity_mirror", + "ids": [ + "[uuid]" + ], + "axis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "point": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "close_path", + "path_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": -1.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extrude", + "target": "[uuid]", + "distance": 314.0, + "faces": null, + "opposite": "Symmetric" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_bring_to_front", + "object_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_adjacency_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_extrusion_face_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "boolean_subtract", + "target_ids": [ + "[uuid]" + ], + "tool_ids": [ + "[uuid]" + ], + "tolerance": 0.0000001 + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "make_plane", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "x_axis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "size": 60.0, + "clobber": false, + "hide": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": -1.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 51.5557, + "y": -8.649, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 17.6009, + "y": 3.7693, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "tangential_arc", + "radius": 5.0, + "offset": { + "unit": "degrees", + "value": 45.0 + } + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 9.7804, + "y": 15.111, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "tangential_arc", + "radius": 5.0, + "offset": { + "unit": "degrees", + "value": -45.0 + } + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 17.6009, + "y": 3.7693, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": -12.2502, + "y": 57.203, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": -17.6009, + "y": -3.7693, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "tangential_arc", + "radius": 5.0, + "offset": { + "unit": "degrees", + "value": -45.0 + } + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": -15.111, + "y": 9.7804, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "tangential_arc", + "radius": 36.0, + "offset": { + "unit": "degrees", + "value": -45.0 + } + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 14.517, + "y": 216.7932, + "z": 0.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "tangential_arc", + "radius": 5.0, + "offset": { + "unit": "degrees", + "value": -45.0 + } + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 3.9122, + "y": 6.0444, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "tangential_arc", + "radius": 5.0, + "offset": { + "unit": "degrees", + "value": -45.0 + } + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 7.0404, + "y": 1.5077, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 25.1426, + "y": 249.749, + "z": 0.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 18.0192, + "y": 254.3595, + "z": 0.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": -3.7693, + "y": 249.6934, + "z": 0.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "entity_get_all_child_uuids", + "entity_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "entity_mirror_across_edge", + "ids": [ + "[uuid]" + ], + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "close_path", + "path_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": -1.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extrude", + "target": "[uuid]", + "distance": 54.0, + "faces": null, + "opposite": "Symmetric" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_bring_to_front", + "object_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_adjacency_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_extrusion_face_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "make_plane", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 232.0925 + }, + "x_axis": { + "x": -0.9778, + "y": 0.0, + "z": -0.2094 + }, + "y_axis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "size": 60.0, + "clobber": false, + "hide": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.2094, + "y": 0.0, + "z": -0.9778 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 54.0, + "y": 0.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_visible", + "object_id": "[uuid]", + "hidden": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": 0.0, + "y": 4.0, + "z": 0.0 + }, + "relative": true + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "tangential_arc", + "radius": 8.0, + "offset": { + "unit": "degrees", + "value": 80.0 + } + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "tangential_arc_to", + "to": { + "x": -94.7784, + "y": 0.0, + "z": 0.0 + }, + "angle_snap_increment": null + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "tangential_arc", + "radius": 8.0, + "offset": { + "unit": "degrees", + "value": 80.0 + } + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "line", + "end": { + "x": -54.0, + "y": 0.0, + "z": 0.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "entity_get_all_child_uuids", + "entity_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "entity_mirror", + "ids": [ + "[uuid]" + ], + "axis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "point": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "close_path", + "path_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.2094, + "y": 0.0, + "z": -0.9778 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extrude", + "target": "[uuid]", + "distance": 554.0, + "faces": null, + "opposite": "Symmetric" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_bring_to_front", + "object_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_adjacency_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_extrusion_face_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "boolean_intersection", + "solid_ids": [ + "[uuid]", + "[uuid]" + ], + "tolerance": 0.0000001 + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "make_plane", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "x_axis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "size": 60.0, + "clobber": false, + "hide": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "close_path", + "path_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": -1.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "arc", + "center": { + "x": 42.1324, + "y": 35.3533 + }, + "radius": 36.0, + "start": { + "unit": "degrees", + "value": 0.0 + }, + "end": { + "unit": "degrees", + "value": 360.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 78.1324, + "y": 35.3533, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": -1.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extrude", + "target": "[uuid]", + "distance": 54.0, + "faces": null, + "opposite": "Symmetric" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_bring_to_front", + "object_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_adjacency_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_extrusion_face_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "close_path", + "path_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": -1.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "arc", + "center": { + "x": 0.0, + "y": 232.0925 + }, + "radius": 7.5, + "start": { + "unit": "degrees", + "value": 0.0 + }, + "end": { + "unit": "degrees", + "value": 360.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 7.5, + "y": 232.0925, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.0, + "y": -1.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extrude", + "target": "[uuid]", + "distance": 54.0, + "faces": null, + "opposite": "Symmetric" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_bring_to_front", + "object_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_adjacency_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_extrusion_face_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "boolean_subtract", + "target_ids": [ + "[uuid]" + ], + "tool_ids": [ + "[uuid]" + ], + "tolerance": 0.0000001 + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "boolean_union", + "solid_ids": [ + "[uuid]", + "[uuid]" + ], + "tolerance": 0.0000001 + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "make_plane", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 232.0925 + }, + "x_axis": { + "x": -0.9778, + "y": 0.0, + "z": -0.2094 + }, + "y_axis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "size": 60.0, + "clobber": false, + "hide": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "close_path", + "path_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.2094, + "y": 0.0, + "z": -0.9778 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extend_path", + "path": "[uuid]", + "segment": { + "type": "arc", + "center": { + "x": 45.0, + "y": 0.0 + }, + "radius": 5.0, + "start": { + "unit": "degrees", + "value": 0.0 + }, + "end": { + "unit": "degrees", + "value": 360.0 + }, + "relative": false + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "move_path_pen", + "path": "[uuid]", + "to": { + "x": 50.0, + "y": 0.0, + "z": 0.0 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_visible", + "object_id": "[uuid]", + "hidden": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "start_path" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "entity_circular_pattern", + "entity_id": "[uuid]", + "axis": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "center": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "num_repetitions": 1, + "arc_degrees": 360.0, + "rotate_duplicates": true + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.2094, + "y": 0.0, + "z": -0.9778 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "enable_sketch_mode", + "entity_id": "[uuid]", + "ortho": false, + "animated": false, + "adjust_camera": false, + "planar_normal": { + "x": 0.2094, + "y": 0.0, + "z": -0.9778 + } + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extrude", + "target": "[uuid]", + "distance": 300.0, + "faces": null, + "opposite": "None" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "extrude", + "target": "[uuid]", + "distance": 300.0, + "faces": null, + "opposite": "None" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_bring_to_front", + "object_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "object_bring_to_front", + "object_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "sketch_mode_disable" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_adjacency_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_adjacency_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_extrusion_face_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "solid3d_get_extrusion_face_info", + "object_id": "[uuid]", + "edge_id": "[uuid]" + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "boolean_subtract", + "target_ids": [ + "[uuid]" + ], + "tool_ids": [ + "[uuid]" + ], + "tolerance": 0.0000001 + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "boolean_union", + "solid_ids": [ + "[uuid]", + "[uuid]" + ], + "tolerance": 0.0000001 + } + } +] diff --git a/rust/kcl-lib/tests/subtract_regression10/artifact_graph_flowchart.snap b/rust/kcl-lib/tests/subtract_regression10/artifact_graph_flowchart.snap new file mode 100644 index 000000000..6c1cc67f9 --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression10/artifact_graph_flowchart.snap @@ -0,0 +1,6 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Artifact graph flowchart subtract_regression10.kcl +extension: md +snapshot_kind: binary +--- diff --git a/rust/kcl-lib/tests/subtract_regression10/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/subtract_regression10/artifact_graph_flowchart.snap.md new file mode 100644 index 000000000..e9b3a1c0e --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression10/artifact_graph_flowchart.snap.md @@ -0,0 +1,672 @@ +```mermaid +flowchart LR + subgraph path10 [Path] + 10["Path
[497, 539, 0]"] + %% [ProgramBodyItem { index: 8 }, ExpressionStatementExpr, PipeBodyItem { index: 0 }] + 20["Segment
[545, 608, 0]"] + %% [ProgramBodyItem { index: 8 }, ExpressionStatementExpr, PipeBodyItem { index: 1 }] + 21["Segment
[614, 787, 0]"] + %% [ProgramBodyItem { index: 8 }, ExpressionStatementExpr, PipeBodyItem { index: 2 }] + 22["Segment
[793, 857, 0]"] + %% [ProgramBodyItem { index: 8 }, ExpressionStatementExpr, PipeBodyItem { index: 3 }] + end + subgraph path11 [Path] + 11["Path
[1105, 1249, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] + 23["Segment
[1255, 1279, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] + 24["Segment
[1285, 1303, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] + 25["Segment
[1309, 1327, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] + 26["Segment
[1333, 1351, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] + 27["Segment
[1357, 1374, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] + 28["Segment
[1380, 1398, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] + 29["Segment
[1404, 1422, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] + 30["Segment
[1428, 1446, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }] + 31["Segment
[1452, 1469, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 10 }] + 32["Segment
[1475, 1493, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 11 }] + 33["Segment
[1499, 1517, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 12 }] + 34["Segment
[1523, 1541, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 13 }] + 35["Segment
[1547, 1564, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 14 }] + 36["Segment
[1570, 1626, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 15 }] + 37["Segment
[1632, 1650, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 16 }] + 38["Segment
[1656, 1710, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 17 }] + 39["Segment
[1716, 1760, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 18 }] + 40["Segment
[1766, 1803, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 19 }] + 41["Segment
[1809, 1865, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] + 42["Segment
[1871, 1878, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 21 }] + 85[Solid2d] + end + subgraph path12 [Path] + 12["Path
[2014, 2178, 0]"] + %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] + 43["Segment
[2184, 2217, 0]"] + %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] + 44["Segment
[2223, 2244, 0]"] + %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] + 45["Segment
[2250, 2287, 0]"] + %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] + 46["Segment
[2293, 2349, 0]"] + %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] + 47["Segment
[2355, 2362, 0]"] + %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] + 89[Solid2d] + end + subgraph path13 [Path] + 13["Path
[2795, 3000, 0]"] + %% [ProgramBodyItem { index: 13 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] + 48["Segment
[2795, 3000, 0]"] + %% [ProgramBodyItem { index: 13 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] + 90[Solid2d] + end + subgraph path14 [Path] + 14["Path
[3228, 3394, 0]"] + %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] + 49["Segment
[3400, 3418, 0]"] + %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] + 50["Segment
[3424, 3606, 0]"] + %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] + 51["Segment
[3612, 3634, 0]"] + %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] + 52["Segment
[3640, 3662, 0]"] + %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] + 53["Segment
[3692, 3699, 0]"] + %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] + 87[Solid2d] + end + subgraph path15 [Path] + 15["Path
[3956, 4116, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] + 54["Segment
[4122, 4186, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] + 55["Segment
[4192, 4229, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] + 56["Segment
[4235, 4299, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] + 57["Segment
[4305, 4343, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] + 58["Segment
[4349, 4413, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] + 59["Segment
[4419, 4482, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] + 60["Segment
[4488, 4552, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] + 61["Segment
[4558, 4596, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }] + 62["Segment
[4602, 4666, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 10 }] + 63["Segment
[4672, 4720, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 11 }] + 64["Segment
[4726, 4822, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 12 }] + 65["Segment
[4828, 4866, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 13 }] + 66["Segment
[4872, 4936, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 14 }] + 67["Segment
[4942, 4980, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 15 }] + 68["Segment
[4986, 5050, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 16 }] + 69["Segment
[5056, 5151, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 17 }] + 70["Segment
[5157, 5257, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 18 }] + 71["Segment
[5263, 5340, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 19 }] + 72["Segment
[5374, 5381, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 21 }] + 86[Solid2d] + end + subgraph path16 [Path] + 16["Path
[5900, 5941, 0]"] + %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] + 73["Segment
[5947, 5964, 0]"] + %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] + 74["Segment
[5970, 6007, 0]"] + %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] + 75["Segment
[6013, 6069, 0]"] + %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] + 76["Segment
[6075, 6112, 0]"] + %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] + 77["Segment
[6118, 6155, 0]"] + %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] + 78["Segment
[6185, 6192, 0]"] + %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] + 83[Solid2d] + end + subgraph path17 [Path] + 17["Path
[6473, 6567, 0]"] + %% [ProgramBodyItem { index: 21 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] + 79["Segment
[6473, 6567, 0]"] + %% [ProgramBodyItem { index: 21 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] + 84[Solid2d] + end + subgraph path18 [Path] + 18["Path
[6627, 6829, 0]"] + %% [ProgramBodyItem { index: 22 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] + 80["Segment
[6627, 6829, 0]"] + %% [ProgramBodyItem { index: 22 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] + 88[Solid2d] + end + subgraph path19 [Path] + 19["Path
[7102, 7138, 0]"] + %% [ProgramBodyItem { index: 24 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] + 81["Segment
[7102, 7138, 0]"] + %% [ProgramBodyItem { index: 24 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] + 82[Solid2d] + end + 1["Plane
[479, 496, 0]"] + %% [ProgramBodyItem { index: 7 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 2["Plane
[1082, 1099, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] + 3["Plane
[1991, 2008, 0]"] + %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] + 4["Plane
[2772, 2789, 0]"] + %% [ProgramBodyItem { index: 13 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] + 5["Plane
[3205, 3222, 0]"] + %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] + 6["Plane
[3933, 3950, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] + 7["Plane
[5861, 5894, 0]"] + %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] + 8["Plane
[6443, 6460, 0]"] + %% [ProgramBodyItem { index: 20 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 9["Plane
[7063, 7096, 0]"] + %% [ProgramBodyItem { index: 24 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] + 91["Sweep Revolve
[1884, 1914, 0]"] + %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 22 }] + 92["Sweep Extrusion
[2368, 2407, 0]"] + %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] + 93["Sweep Extrusion
[3006, 3046, 0]"] + %% [ProgramBodyItem { index: 13 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] + 94["Sweep Extrusion
[3705, 3744, 0]"] + %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] + 95["Sweep Extrusion
[5387, 5425, 0]"] + %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 22 }] + 96["Sweep Extrusion
[6198, 6237, 0]"] + %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }] + 97["Sweep Extrusion
[6573, 6611, 0]"] + %% [ProgramBodyItem { index: 21 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] + 98["Sweep Extrusion
[6835, 6873, 0]"] + %% [ProgramBodyItem { index: 22 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] + 99["Sweep Extrusion
[7278, 7299, 0]"] + %% [ProgramBodyItem { index: 24 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] + 100["Sweep Extrusion
[7278, 7299, 0]"] + %% [ProgramBodyItem { index: 24 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] + 101["CompositeSolid Union
[6973, 7005, 0]"] + %% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 0 }] + 102["CompositeSolid Subtract
[2677, 2725, 0]"] + %% [ProgramBodyItem { index: 12 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 103["CompositeSolid Union
[7355, 7371, 0]"] + %% [ProgramBodyItem { index: 25 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 0 }] + 104["CompositeSolid Intersect
[6268, 6327, 0]"] + %% [ProgramBodyItem { index: 19 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 105["CompositeSolid Subtract
[3781, 3825, 0]"] + %% [ProgramBodyItem { index: 15 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 106["CompositeSolid Union
[2708, 2724, 0]"] + %% [ProgramBodyItem { index: 12 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 0 }] + 107["CompositeSolid Subtract
[7317, 7372, 0]"] + %% [ProgramBodyItem { index: 25 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 108["CompositeSolid Subtract
[6926, 7006, 0]"] + %% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit] + 109[Wall] + %% face_code_ref=Missing NodePath + 110[Wall] + %% face_code_ref=Missing NodePath + 111[Wall] + %% face_code_ref=Missing NodePath + 112[Wall] + %% face_code_ref=Missing NodePath + 113[Wall] + %% face_code_ref=Missing NodePath + 114[Wall] + %% face_code_ref=Missing NodePath + 115[Wall] + %% face_code_ref=Missing NodePath + 116[Wall] + %% face_code_ref=Missing NodePath + 117[Wall] + %% face_code_ref=Missing NodePath + 118[Wall] + %% face_code_ref=Missing NodePath + 119[Wall] + %% face_code_ref=Missing NodePath + 120[Wall] + %% face_code_ref=Missing NodePath + 121[Wall] + %% face_code_ref=Missing NodePath + 122[Wall] + %% face_code_ref=Missing NodePath + 123[Wall] + %% face_code_ref=Missing NodePath + 124[Wall] + %% face_code_ref=Missing NodePath + 125[Wall] + %% face_code_ref=Missing NodePath + 126[Wall] + %% face_code_ref=Missing NodePath + 127[Wall] + %% face_code_ref=Missing NodePath + 128[Wall] + %% face_code_ref=Missing NodePath + 129[Wall] + %% face_code_ref=Missing NodePath + 130[Wall] + %% face_code_ref=Missing NodePath + 131[Wall] + %% face_code_ref=Missing NodePath + 132[Wall] + %% face_code_ref=Missing NodePath + 133[Wall] + %% face_code_ref=Missing NodePath + 134[Wall] + %% face_code_ref=Missing NodePath + 135[Wall] + %% face_code_ref=Missing NodePath + 136["Cap Start"] + %% face_code_ref=Missing NodePath + 137["Cap Start"] + %% face_code_ref=Missing NodePath + 138["Cap Start"] + %% face_code_ref=Missing NodePath + 139["Cap Start"] + %% face_code_ref=Missing NodePath + 140["Cap Start"] + %% face_code_ref=Missing NodePath + 141["Cap End"] + %% face_code_ref=Missing NodePath + 142["Cap End"] + %% face_code_ref=Missing NodePath + 143["Cap End"] + %% face_code_ref=Missing NodePath + 144["Cap End"] + %% face_code_ref=Missing NodePath + 145["Cap End"] + %% face_code_ref=Missing NodePath + 146["SweepEdge Opposite"] + 147["SweepEdge Opposite"] + 148["SweepEdge Opposite"] + 149["SweepEdge Opposite"] + 150["SweepEdge Opposite"] + 151["SweepEdge Opposite"] + 152["SweepEdge Opposite"] + 153["SweepEdge Opposite"] + 154["SweepEdge Adjacent"] + 155["SweepEdge Adjacent"] + 156["SweepEdge Adjacent"] + 157["SweepEdge Adjacent"] + 158["SweepEdge Adjacent"] + 159["SweepEdge Adjacent"] + 160["SweepEdge Adjacent"] + 161["SweepEdge Adjacent"] + 162["SweepEdge Adjacent"] + 163["SweepEdge Adjacent"] + 164["SweepEdge Adjacent"] + 165["SweepEdge Adjacent"] + 166["SweepEdge Adjacent"] + 167["SweepEdge Adjacent"] + 168["SweepEdge Adjacent"] + 169["SweepEdge Adjacent"] + 170["SweepEdge Adjacent"] + 171["SweepEdge Adjacent"] + 172["SweepEdge Adjacent"] + 173["SweepEdge Adjacent"] + 174["SweepEdge Adjacent"] + 175["SweepEdge Adjacent"] + 176["SweepEdge Adjacent"] + 177["SweepEdge Adjacent"] + 178["SweepEdge Adjacent"] + 179["SweepEdge Adjacent"] + 180["EdgeCut Fillet
[3052, 3126, 0]"] + %% [ProgramBodyItem { index: 13 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] + 181["EdgeCut Fillet
[3052, 3126, 0]"] + %% [ProgramBodyItem { index: 13 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] + 1 --- 10 + 2 --- 11 + 3 --- 12 + 4 --- 13 + 5 --- 14 + 6 --- 15 + 7 --- 16 + 8 --- 17 + 8 --- 18 + 9 --- 19 + 10 --- 20 + 10 --- 21 + 10 --- 22 + 11 --- 23 + 11 --- 24 + 11 --- 25 + 11 --- 26 + 11 --- 27 + 11 --- 28 + 11 --- 29 + 11 --- 30 + 11 --- 31 + 11 --- 32 + 11 --- 33 + 11 --- 34 + 11 --- 35 + 11 --- 36 + 11 --- 37 + 11 --- 38 + 11 --- 39 + 11 --- 40 + 11 --- 41 + 11 --- 42 + 11 --- 85 + 11 ---- 91 + 11 --- 102 + 12 --- 43 + 12 --- 44 + 12 --- 45 + 12 --- 46 + 12 --- 47 + 12 --- 89 + 12 ---- 92 + 12 --- 106 + 13 --- 48 + 13 --- 90 + 13 ---- 93 + 14 --- 49 + 14 --- 50 + 14 --- 51 + 14 --- 52 + 14 --- 53 + 14 --- 87 + 14 ---- 94 + 14 --- 105 + 15 --- 54 + 15 --- 55 + 15 --- 56 + 15 --- 57 + 15 --- 58 + 15 --- 59 + 15 --- 60 + 15 --- 61 + 15 --- 62 + 15 --- 63 + 15 --- 64 + 15 --- 65 + 15 --- 66 + 15 --- 67 + 15 --- 68 + 15 --- 69 + 15 --- 70 + 15 --- 71 + 15 --- 72 + 15 --- 86 + 15 ---- 95 + 15 --- 104 + 16 --- 73 + 16 --- 74 + 16 --- 75 + 16 --- 76 + 16 --- 77 + 16 --- 78 + 16 --- 83 + 16 ---- 96 + 16 --- 104 + 17 --- 79 + 17 --- 84 + 17 ---- 97 + 17 --- 101 + 18 --- 80 + 18 --- 88 + 18 ---- 98 + 18 --- 101 + 19 --- 81 + 19 --- 82 + 19 ---- 99 + 19 --- 103 + 91 <--x 23 + 23 --- 127 + 23 x--> 155 + 91 <--x 24 + 24 --- 114 + 24 --- 155 + 91 <--x 25 + 25 --- 115 + 25 --- 156 + 91 <--x 26 + 26 --- 128 + 26 --- 157 + 91 <--x 27 + 27 --- 124 + 27 --- 158 + 91 <--x 28 + 28 --- 119 + 28 --- 159 + 91 <--x 29 + 29 --- 112 + 29 --- 160 + 91 <--x 30 + 30 --- 125 + 30 --- 161 + 91 <--x 31 + 31 --- 113 + 31 --- 162 + 91 <--x 32 + 32 --- 126 + 32 --- 163 + 91 <--x 33 + 33 --- 111 + 33 --- 164 + 91 <--x 34 + 34 --- 122 + 34 --- 165 + 91 <--x 35 + 35 --- 123 + 35 --- 166 + 91 <--x 36 + 36 --- 120 + 36 --- 167 + 91 <--x 37 + 37 --- 121 + 37 --- 168 + 91 <--x 38 + 38 --- 118 + 38 --- 169 + 91 <--x 39 + 39 --- 116 + 39 --- 170 + 91 <--x 40 + 40 --- 117 + 40 --- 171 + 91 <--x 41 + 41 --- 110 + 41 --- 172 + 43 --- 132 + 43 x--> 138 + 43 --- 150 + 43 --- 176 + 44 --- 133 + 44 x--> 138 + 44 --- 151 + 44 --- 177 + 45 --- 134 + 45 x--> 138 + 45 --- 152 + 45 --- 178 + 46 --- 135 + 46 x--> 138 + 46 --- 153 + 46 --- 179 + 48 --- 130 + 48 x--> 137 + 48 --- 148 + 48 --- 174 + 48 --- 181 + 79 --- 131 + 79 x--> 139 + 79 --- 149 + 79 --- 175 + 80 --- 129 + 80 x--> 136 + 80 --- 147 + 80 --- 173 + 81 --- 109 + 81 x--> 140 + 81 --- 146 + 81 --- 154 + 91 --- 110 + 91 --- 111 + 91 --- 112 + 91 --- 113 + 91 --- 114 + 91 --- 115 + 91 --- 116 + 91 --- 117 + 91 --- 118 + 91 --- 119 + 91 --- 120 + 91 --- 121 + 91 --- 122 + 91 --- 123 + 91 --- 124 + 91 --- 125 + 91 --- 126 + 91 --- 127 + 91 --- 128 + 91 --- 155 + 91 --- 156 + 91 --- 157 + 91 --- 158 + 91 --- 159 + 91 --- 160 + 91 --- 161 + 91 --- 162 + 91 --- 163 + 91 --- 164 + 91 --- 165 + 91 --- 166 + 91 --- 167 + 91 --- 168 + 91 --- 169 + 91 --- 170 + 91 --- 171 + 91 --- 172 + 92 --- 132 + 92 --- 133 + 92 --- 134 + 92 --- 135 + 92 --- 138 + 92 --- 143 + 92 --- 150 + 92 --- 151 + 92 --- 152 + 92 --- 153 + 92 --- 176 + 92 --- 177 + 92 --- 178 + 92 --- 179 + 93 --- 130 + 93 --- 137 + 93 --- 142 + 93 --- 148 + 93 --- 174 + 97 --- 131 + 97 --- 139 + 97 --- 144 + 97 --- 149 + 97 --- 175 + 98 --- 129 + 98 --- 136 + 98 --- 141 + 98 --- 147 + 98 --- 173 + 99 --- 109 + 99 --- 140 + 99 --- 145 + 99 --- 146 + 99 --- 154 + 101 --- 108 + 102 --- 105 + 106 --- 102 + 103 --- 107 + 104 --- 108 + 108 --- 107 + 109 --- 146 + 109 --- 154 + 171 <--x 110 + 110 --- 172 + 163 <--x 111 + 111 --- 164 + 159 <--x 112 + 112 --- 160 + 161 <--x 113 + 113 --- 162 + 114 --- 155 + 115 --- 156 + 169 <--x 116 + 116 --- 170 + 170 <--x 117 + 117 --- 171 + 168 <--x 118 + 118 --- 169 + 158 <--x 119 + 119 --- 159 + 166 <--x 120 + 120 --- 167 + 167 <--x 121 + 121 --- 168 + 164 <--x 122 + 122 --- 165 + 165 <--x 123 + 123 --- 166 + 157 <--x 124 + 124 --- 158 + 160 <--x 125 + 125 --- 161 + 162 <--x 126 + 126 --- 163 + 127 --- 155 + 172 <--x 127 + 156 <--x 128 + 128 --- 157 + 129 --- 147 + 129 --- 173 + 130 --- 148 + 130 --- 174 + 131 --- 149 + 131 --- 175 + 132 --- 150 + 132 --- 176 + 179 <--x 132 + 133 --- 151 + 176 <--x 133 + 133 --- 177 + 134 --- 152 + 177 <--x 134 + 134 --- 178 + 135 --- 153 + 178 <--x 135 + 135 --- 179 + 147 <--x 141 + 148 <--x 142 + 150 <--x 143 + 151 <--x 143 + 152 <--x 143 + 153 <--x 143 + 149 <--x 144 + 146 <--x 145 + 148 <--x 180 +``` diff --git a/rust/kcl-lib/tests/subtract_regression10/ast.snap b/rust/kcl-lib/tests/subtract_regression10/ast.snap new file mode 100644 index 000000000..ad168c451 --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression10/ast.snap @@ -0,0 +1,11565 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Result of parsing subtract_regression10.kcl +--- +{ + "Ok": { + "body": [ + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "init": { + "commentStart": 0, + "end": 0, + "raw": "110", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 110.0, + "suffix": "None" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "preComments": [ + "// Define parameters" + ], + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "bore", + "start": 0, + "type": "Identifier" + }, + "init": { + "commentStart": 0, + "end": 0, + "raw": "92", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 92.0, + "suffix": "None" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "pistonHeight", + "start": 0, + "type": "Identifier" + }, + "init": { + "commentStart": 0, + "end": 0, + "raw": "75", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 75.0, + "suffix": "None" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "init": { + "commentStart": 0, + "end": 0, + "raw": "40deg", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 40.0, + "suffix": "Deg" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "init": { + "commentStart": 0, + "end": 0, + "raw": "36", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 36.0, + "suffix": "None" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "pinHeight", + "start": 0, + "type": "Identifier" + }, + "init": { + "commentStart": 0, + "end": 0, + "raw": "35", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 35.0, + "suffix": "None" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "rodLength", + "start": 0, + "type": "Identifier" + }, + "init": { + "commentStart": 0, + "end": 0, + "raw": "201.2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 201.2, + "suffix": "None" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "kinematicSketch", + "start": 0, + "type": "Identifier" + }, + "init": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "XZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "preComments": [ + "", + "", + "// A simple sketch to define piston position at different crank parameters" + ], + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "body": [ + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startProfile", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kinematicSketch", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "TagDeclarator", + "type": "TagDeclarator", + "value": "seg01" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sin", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sqrt", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rodLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "TagDeclarator", + "type": "TagDeclarator", + "value": "seg02" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "line", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "TagDeclarator", + "type": "TagDeclarator", + "value": "seg03" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "nonCodeMeta": { + "nonCodeNodes": { + "3": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLineBlockComment", + "value": "Sketch a profile with a total width equal to half the bore of the piston head. Include lands and gaps for compression rings. Then revolve the profile about the center axis to form the start of a piston head", + "style": "line" + } + } + ] + }, + "startNodes": [] + }, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "pistonBore", + "start": 0, + "type": "Identifier" + }, + "init": { + "body": [ + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "XZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.1, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pinHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sin", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sqrt", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rodLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startProfile", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "bore", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "profileStartY", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + }, + "operator": "-", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pistonHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 8.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "profileStartY", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 8.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "bore", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "bore", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "tangentialArc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "profileStartX", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "profileStartX", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + }, + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "profileStartY", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "line", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "close", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "360", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 360.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "axis", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "Y", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "revolve", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "nonCodeMeta": { + "nonCodeNodes": { + "22": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLineBlockComment", + "value": "Create a square profile divot to subtract from the piston head", + "style": "line" + } + } + ] + }, + "startNodes": [] + }, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "divots", + "start": 0, + "type": "Identifier" + }, + "init": { + "body": [ + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "YZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "bore", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "6", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sin", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sqrt", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rodLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pistonHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startProfile", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pistonHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "25.75", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 25.75, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "profileStartY", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "profileStartX", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + }, + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "profileStartY", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "line", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "close", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "314", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 314.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "symmetric", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "true", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": true + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "extrude", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "nonCodeMeta": { + "nonCodeNodes": { + "7": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLineBlockComment", + "value": "Rotate another divot to the opposite side", + "style": "line" + } + } + ] + }, + "startNodes": [] + }, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "cutDivots", + "start": 0, + "type": "Identifier" + }, + "init": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "instances", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "axis", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "arcDegrees", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "360", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 360.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "rotateDuplicates", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "true", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": true + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "patternCircular3d", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "divots", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "pistonDiv", + "start": 0, + "type": "Identifier" + }, + "init": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tools", + "start": 0, + "type": "Identifier" + }, + "arg": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "union", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cutDivots", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "subtract", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pistonBore", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "preComments": [ + "", + "", + "// Cut the divots from the piston head", + "// WORKED PREVIOUSLY" + ], + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "wristPin", + "start": 0, + "type": "Identifier" + }, + "init": { + "body": [ + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "XZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sin", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sqrt", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rodLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pistonHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "TagDeclarator", + "type": "TagDeclarator", + "value": "seg04" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "circle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "bore", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "symmetric", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "true", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": true + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "extrude", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pistonHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "40", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 40.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tags", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "getOppositeEdge", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg04", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg04", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "fillet", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "nonCodeMeta": { + "nonCodeNodes": { + "3": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLineBlockComment", + "value": "Cut a rounded profile to arc the bottom of the piston skirt", + "style": "line" + } + } + ] + }, + "startNodes": [] + }, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "preComments": [ + "", + "", + "// Extrude and fillet a wrist pin" + ], + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "pistonSkirt", + "start": 0, + "type": "Identifier" + }, + "init": { + "body": [ + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "XZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sin", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sqrt", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rodLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pinHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pistonHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "0.95", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.95, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startProfile", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": ".1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.1, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "bore", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sin", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sqrt", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rodLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pinHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pistonHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "tangentialArc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "axis", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "Y", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "mirror2d", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "close", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "314", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 314.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "symmetric", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "true", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": true + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "extrude", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "nonCodeMeta": { + "nonCodeNodes": { + "8": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "blockComment", + "value": "WORKED PREVIOUSLY", + "style": "line" + } + } + ] + }, + "startNodes": [] + }, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "pistonHead", + "start": 0, + "type": "Identifier" + }, + "init": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tools", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pistonSkirt", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "subtract", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pistonDiv", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "connectingRodProfile", + "start": 0, + "type": "Identifier" + }, + "init": { + "body": [ + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "XZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segEndX", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg01", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "1.25", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.25, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "left": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segEndY", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg01", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "1.25", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.25, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sin", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startProfile", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "45", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 45.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "tangentialArc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "45", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 45.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "45", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 45.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "tangentialArc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1.625", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.625, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "45", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 45.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "tangentialArc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "45", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 45.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "45", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 45.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "tangentialArc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "intersectTag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg03", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "offset", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLineThatIntersects", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "45", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 45.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "tangentialArc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "45", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 45.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "45", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 45.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "tangentialArc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "intersectTag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg03", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "offset", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLineThatIntersects", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "45", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 45.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "intersectTag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg03", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "offset", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLineThatIntersects", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "intersectTag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLineThatIntersects", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "axis", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "mirror2d", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "close", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "54", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 54.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "symmetric", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "true", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": true + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "extrude", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "nonCodeMeta": { + "nonCodeNodes": { + "22": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLineBlockComment", + "value": "Define a plane perpendicular to the connecting rod", + "style": "line" + } + } + ] + }, + "startNodes": [] + }, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "preComments": [ + "", + "", + "// Create a connecting rod that spans from the crank position to the piston height" + ], + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "connectingRodPlane", + "start": 0, + "type": "Identifier" + }, + "init": { + "commentStart": 0, + "end": 0, + "properties": [ + { + "commentStart": 0, + "end": 0, + "key": { + "commentStart": 0, + "end": 0, + "name": "origin", + "start": 0, + "type": "Identifier" + }, + "start": 0, + "type": "ObjectProperty", + "value": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sin", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sqrt", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rodLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "commentStart": 0, + "end": 0, + "key": { + "commentStart": 0, + "end": 0, + "name": "xAxis", + "start": 0, + "type": "Identifier" + }, + "start": 0, + "type": "ObjectProperty", + "value": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sin", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "segAng", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "commentStart": 0, + "end": 0, + "key": { + "commentStart": 0, + "end": 0, + "name": "yAxis", + "start": 0, + "type": "Identifier" + }, + "start": 0, + "type": "ObjectProperty", + "value": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "1.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "start": 0, + "type": "ObjectExpression", + "type": "ObjectExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "connectingRodShape", + "start": 0, + "type": "Identifier" + }, + "init": { + "body": [ + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "connectingRodPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1.5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.5, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startProfile", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "80", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 80.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 8.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "tangentialArc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "lastSegX", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "lastSegY", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "tangentialArc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "80", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 80.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 8.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "tangentialArc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "profileStartY", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "axis", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "X", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "mirror2d", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "close", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "554", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 554.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "symmetric", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "true", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": true + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "extrude", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "preComments": [ + "", + "", + "// Extrude an oval profile through the connecting rod to define its boundaries in the other dimensions" + ], + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "connectingRodShapeSubtract", + "start": 0, + "type": "Identifier" + }, + "init": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "intersect", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "connectingRodProfile", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "connectingRodShape", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "boreHoles", + "start": 0, + "type": "Identifier" + }, + "init": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "XZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "preComments": [ + "", + "", + "// Bore holes in the connecting rod for the wrist pin and crank", + "// REPLACED POLYGON CUTS WITH CIRCLES" + ], + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "crankBore", + "start": 0, + "type": "Identifier" + }, + "init": { + "body": [ + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier" + }, + "arg": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "polar", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "circle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "boreHoles", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "54", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 54.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "symmetric", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "true", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": true + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "extrude", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "wristPinHole", + "start": 0, + "type": "Identifier" + }, + "init": { + "body": [ + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sin", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sqrt", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rodLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "stroke", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankPos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "^", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pistonHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "circle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "boreHoles", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "54", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 54.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "symmetric", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "true", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": true + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "extrude", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "nonCodeMeta": { + "nonCodeNodes": { + "1": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLineBlockComment", + "value": "Subtract out the bore holes", + "style": "line" + } + } + ] + }, + "startNodes": [] + }, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "connectingRodBore", + "start": 0, + "type": "Identifier" + }, + "init": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tools", + "start": 0, + "type": "Identifier" + }, + "arg": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "union", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "wristPinHole", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "crankBore", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "subtract", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "connectingRodShapeSubtract", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "boltHoles", + "start": 0, + "type": "Identifier" + }, + "init": { + "body": [ + { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "connectingRodPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "45", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 45.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "circle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "instances", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "arcDegrees", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "360", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 360.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "rotateDuplicates", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "true", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": true + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "patternCircular2d", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "300", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 300.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "extrude", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "preComments": [ + "", + "", + "// Bore holes for the connecting rod bolts" + ], + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + }, + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "connectingRod", + "start": 0, + "type": "Identifier" + }, + "init": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tools", + "start": 0, + "type": "Identifier" + }, + "arg": { + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "union", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "boltHoles", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "subtract", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "connectingRodBore", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + } + ], + "commentStart": 0, + "end": 0, + "innerAttrs": [ + { + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "settings", + "start": 0, + "type": "Identifier" + }, + "preComments": [ + "// Piston", + "// A piston is the component of an engine that transfers linear motion into circular motion. The piston head is accelerated by exploding fuel, which drives a connecting rod to rotate a crankshaft.", + "", + "", + "// Set units" + ], + "properties": [ + { + "commentStart": 0, + "end": 0, + "key": { + "commentStart": 0, + "end": 0, + "name": "defaultLengthUnit", + "start": 0, + "type": "Identifier" + }, + "start": 0, + "type": "ObjectProperty", + "value": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "mm", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "start": 0, + "type": "Annotation" + } + ], + "nonCodeMeta": { + "nonCodeNodes": { + "18": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "24": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ] + }, + "startNodes": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ] + }, + "start": 0 + } +} diff --git a/rust/kcl-lib/tests/subtract_regression10/input.kcl b/rust/kcl-lib/tests/subtract_regression10/input.kcl new file mode 100644 index 000000000..71dc6a953 --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression10/input.kcl @@ -0,0 +1,205 @@ +// Piston +// A piston is the component of an engine that transfers linear motion into circular motion. The piston head is accelerated by exploding fuel, which drives a connecting rod to rotate a crankshaft. + +// Set units +@settings(defaultLengthUnit = mm) + +// Define parameters +stroke = 110 +bore = 92 +pistonHeight = 75 +crankPos = 40deg +crankRadius = 36 +pinHeight = 35 +rodLength = 201.2 + +// A simple sketch to define piston position at different crank parameters +kinematicSketch = startSketchOn(XZ) +startProfile(kinematicSketch, at = [0, 0]) + |> angledLine(angle = crankPos, length = stroke / 2, tag = $seg01) + |> line( + endAbsolute = [ + 0, + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + ], + tag = $seg02, + ) + |> angledLine(angle = segAng(seg02) - 90, length = 1, tag = $seg03) + +// Sketch a profile with a total width equal to half the bore of the piston head. Include lands and gaps for compression rings. Then revolve the profile about the center axis to form the start of a piston head +pistonBore = startSketchOn(XZ) + |> startProfile(at = [ + 0.1, + pinHeight + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + ]) + |> xLine(length = bore / 2) + |> yLine(length = -3) + |> xLine(length = -3) + |> yLine(length = -2) + |> xLine(length = 3) + |> yLine(length = -3) + |> xLine(length = -3) + |> yLine(length = -2) + |> xLine(length = 3) + |> yLine(length = -3) + |> xLine(length = -3) + |> yLine(length = -2) + |> xLine(length = 3) + |> yLine(endAbsolute = profileStartY(%) - pistonHeight - 3) + |> xLine(length = -8) + |> yLine(endAbsolute = profileStartY(%) - 8 - (bore / 4)) + |> tangentialArc(angle = 90, radius = bore / 4) + |> xLine(endAbsolute = profileStartX(%)) + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) + |> close() + |> revolve(angle = 360, axis = Y) + +// Create a square profile divot to subtract from the piston head +divots = startSketchOn(YZ) + |> startProfile(at = [ + bore / 2 - 6, + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + pistonHeight / 4 / 2 + ]) + |> yLine(length = -pistonHeight / 4) + |> xLine(length = 25.75) + |> yLine(endAbsolute = profileStartY(%)) + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) + |> close() + |> extrude(length = 314, symmetric = true) + +// Rotate another divot to the opposite side +cutDivots = patternCircular3d( + divots, + instances = 2, + axis = [0, 0, 1], + center = [0, 0, 0], + arcDegrees = 360, + rotateDuplicates = true, +) + +// Cut the divots from the piston head +// WORKED PREVIOUSLY + pistonDiv = subtract([pistonBore], tools = union(cutDivots)) + +// Extrude and fillet a wrist pin +wristPin = startSketchOn(XZ) + |> circle( + center = [ + 0, + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + ], + radius = pistonHeight / 10, + tag = $seg04, + ) + |> extrude(length = bore, symmetric = true) + |> fillet(radius = pistonHeight / 40, tags = [getOppositeEdge(seg04), seg04]) + +// Cut a rounded profile to arc the bottom of the piston skirt +pistonSkirt = startSketchOn(XZ) + |> startProfile(at = [ + 0, + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + pinHeight - (pistonHeight * 0.95) + ]) + |> xLine(length = .1) + |> tangentialArc(endAbsolute = [ + bore / 2 + 4, + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + pinHeight - pistonHeight - 3 + ]) + |> yLine(endAbsolute = 0) + |> xLine(endAbsolute = 0) + |> mirror2d(axis = Y) + |> close() + |> extrude(length = 314, symmetric = true) + // WORKED PREVIOUSLY +pistonHead = subtract([pistonDiv], tools = [pistonSkirt]) + +// Create a connecting rod that spans from the crank position to the piston height +connectingRodProfile = startSketchOn(XZ) + |> startProfile(at = [ + segEndX(seg01) - (1.25 * crankRadius * cos(segAng(seg02))), + segEndY(seg01) - (1.25 * crankRadius * sin(segAng(seg02))) + ]) + |> angledLine(angle = segAng(seg02) - 90, length = crankRadius / 2) + |> tangentialArc(angle = 45, radius = 5) + |> angledLine(angle = segAng(seg02) - 45, length = crankRadius / 2) + |> tangentialArc(angle = -45, radius = 5) + |> angledLine(angle = segAng(seg02) - 90, length = crankRadius / 2) + |> angledLine(angle = segAng(seg02), length = crankRadius * 1.625) + |> angledLine(angle = segAng(seg02) + 90, length = crankRadius / 2) + |> tangentialArc(angle = -45, radius = 5) + |> angledLine(angle = segAng(seg02) + 45, length = crankRadius / 2) + |> tangentialArc(angle = -45, radius = crankRadius) + |> angledLineThatIntersects(angle = segAng(seg02), intersectTag = seg03, offset = -crankRadius / 2) + |> tangentialArc(angle = -45, radius = 5) + |> angledLine(angle = segAng(seg02) - 45, length = crankRadius / 5) + |> tangentialArc(angle = -45, radius = 5) + |> angledLine(angle = segAng(seg02) - 90, length = crankRadius / 5) + |> angledLineThatIntersects(angle = segAng(seg02), intersectTag = seg03, offset = crankRadius / 3) + |> angledLineThatIntersects(angle = segAng(seg02) + 45, intersectTag = seg03, offset = crankRadius / 2) + |> angledLineThatIntersects(%, angle = segAng(seg02) + 90, intersectTag = seg02) + |> mirror2d(axis = seg02) + |> close() + |> extrude(length = 54, symmetric = true) + +// Define a plane perpendicular to the connecting rod +connectingRodPlane = { + origin = [ + 0, + 0.0, + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + ], + xAxis = [ + -1 * sin(segAng(seg02)), + 0, + 1 * cos(segAng(seg02)) + ], + yAxis = [0.0, 1.0, 0.0] +} + +// Extrude an oval profile through the connecting rod to define its boundaries in the other dimensions +connectingRodShape = startSketchOn(connectingRodPlane) + |> startProfile(at = [crankRadius * 1.5, 0]) + |> yLine(length = 4) + |> tangentialArc(angle = 80, radius = 8) + |> tangentialArc(endAbsolute = [-lastSegX(%), lastSegY(%)]) + |> tangentialArc(angle = 80, radius = 8) + |> yLine(endAbsolute = profileStartY(%)) + |> mirror2d(axis = X) + |> close() + |> extrude(length = 554, symmetric = true) + +connectingRodShapeSubtract = intersect([ + connectingRodProfile, + connectingRodShape +]) + +// Bore holes in the connecting rod for the wrist pin and crank +// REPLACED POLYGON CUTS WITH CIRCLES +boreHoles = startSketchOn(XZ) +crankBore = circle(boreHoles, center = polar(angle = crankPos, length = stroke / 2), radius = crankRadius) + |> extrude(length = 54, symmetric = true) +wristPinHole = circle( + boreHoles, + center = [ + 0, + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + ], + radius = pistonHeight / 10, + ) + |> extrude(length = 54, symmetric = true) + +// Subtract out the bore holes +connectingRodBore = subtract([connectingRodShapeSubtract], tools = union([wristPinHole, crankBore])) + +// Bore holes for the connecting rod bolts +boltHoles = startSketchOn(connectingRodPlane) + |> circle(center = [45, 0], radius = 5) + |> patternCircular2d( + instances = 2, + center = [0, 0], + arcDegrees = 360, + rotateDuplicates = true, + ) + |> extrude(length = 300) + +connectingRod = subtract([connectingRodBore], tools = union(boltHoles)) diff --git a/rust/kcl-lib/tests/subtract_regression10/ops.snap b/rust/kcl-lib/tests/subtract_regression10/ops.snap new file mode 100644 index 000000000..a216168be --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression10/ops.snap @@ -0,0 +1,1277 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Operations executed subtract_regression10.kcl +--- +[ + { + "labeledArgs": {}, + "name": "startSketchOn", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + }, + { + "labeledArgs": {}, + "name": "startSketchOn", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + }, + { + "type": "KclStdLibCall", + "name": "revolve", + "unlabeledArg": { + "value": { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "labeledArgs": { + "angle": { + "value": { + "type": "Number", + "value": 360.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "axis": { + "value": { + "type": "Object", + "value": { + "direction": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "origin": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + } + } + }, + "sourceRange": [] + } + }, + "sourceRange": [] + }, + { + "labeledArgs": {}, + "name": "startSketchOn", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "length": { + "value": { + "type": "Number", + "value": 314.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "symmetric": { + "value": { + "type": "Bool", + "value": true + }, + "sourceRange": [] + } + }, + "name": "extrude", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "arcDegrees": { + "value": { + "type": "Number", + "value": 360.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "axis": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "center": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "instances": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "rotateDuplicates": { + "value": { + "type": "Bool", + "value": true + }, + "sourceRange": [] + } + }, + "name": "patternCircular3d", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "tools": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + }, + "name": "subtract", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] + }, + "sourceRange": [] + } + }, + { + "labeledArgs": {}, + "name": "union", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] + }, + "sourceRange": [] + } + }, + { + "labeledArgs": {}, + "name": "startSketchOn", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "length": { + "value": { + "type": "Number", + "value": 92.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "symmetric": { + "value": { + "type": "Bool", + "value": true + }, + "sourceRange": [] + } + }, + "name": "extrude", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + }, + { + "type": "KclStdLibCall", + "name": "fillet", + "unlabeledArg": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "labeledArgs": { + "radius": { + "value": { + "type": "Number", + "value": 1.875, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "tags": { + "value": { + "type": "Array", + "value": [ + { + "type": "Uuid", + "value": "[uuid]" + }, + { + "type": "TagIdentifier", + "value": "seg04", + "artifact_id": "[uuid]" + } + ] + }, + "sourceRange": [] + } + }, + "sourceRange": [] + }, + { + "labeledArgs": {}, + "name": "startSketchOn", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "length": { + "value": { + "type": "Number", + "value": 314.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "symmetric": { + "value": { + "type": "Bool", + "value": true + }, + "sourceRange": [] + } + }, + "name": "extrude", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "tools": { + "value": { + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] + }, + "sourceRange": [] + } + }, + "name": "subtract", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] + }, + "sourceRange": [] + } + }, + { + "labeledArgs": {}, + "name": "startSketchOn", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "length": { + "value": { + "type": "Number", + "value": 54.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "symmetric": { + "value": { + "type": "Bool", + "value": true + }, + "sourceRange": [] + } + }, + "name": "extrude", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + }, + { + "labeledArgs": {}, + "name": "startSketchOn", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Object", + "value": { + "origin": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 232.09247866942073, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "xAxis": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": -0.9778288277170034, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": -0.2094057871349092, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "yAxis": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + } + } + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "length": { + "value": { + "type": "Number", + "value": 554.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "symmetric": { + "value": { + "type": "Bool", + "value": true + }, + "sourceRange": [] + } + }, + "name": "extrude", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + }, + { + "labeledArgs": {}, + "name": "intersect", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] + }, + "sourceRange": [] + } + }, + { + "labeledArgs": {}, + "name": "startSketchOn", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + }, + { + "type": "GroupBegin", + "group": { + "type": "FunctionCall", + "name": "polar", + "functionSourceRange": [], + "unlabeledArg": null, + "labeledArgs": { + "angle": { + "value": { + "type": "Number", + "value": 40.0, + "ty": { + "type": "Known", + "type": "Angle", + "type": "Degrees" + } + }, + "sourceRange": [] + }, + "length": { + "value": { + "type": "Number", + "value": 55.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } + }, + "sourceRange": [] + }, + { + "labeledArgs": { + "length": { + "value": { + "type": "Number", + "value": 54.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "symmetric": { + "value": { + "type": "Bool", + "value": true + }, + "sourceRange": [] + } + }, + "name": "extrude", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "length": { + "value": { + "type": "Number", + "value": 54.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "symmetric": { + "value": { + "type": "Bool", + "value": true + }, + "sourceRange": [] + } + }, + "name": "extrude", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "tools": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + }, + "name": "subtract", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] + }, + "sourceRange": [] + } + }, + { + "labeledArgs": {}, + "name": "union", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] + }, + "sourceRange": [] + } + }, + { + "labeledArgs": {}, + "name": "startSketchOn", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Object", + "value": { + "origin": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 232.09247866942073, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "xAxis": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": -0.9778288277170034, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": -0.2094057871349092, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "yAxis": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + } + } + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "length": { + "value": { + "type": "Number", + "value": 300.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + }, + "name": "extrude", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Array", + "value": [ + { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Sketch", + "value": { + "artifactId": "[uuid]" + } + } + ] + }, + "sourceRange": [] + } + }, + { + "labeledArgs": { + "tools": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + } + }, + "name": "subtract", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] + }, + "sourceRange": [] + } + }, + { + "labeledArgs": {}, + "name": "union", + "sourceRange": [], + "type": "StdLibCall", + "unlabeledArg": { + "value": { + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] + }, + "sourceRange": [] + } + }, + { + "type": "GroupEnd" + } +] diff --git a/rust/kcl-lib/tests/subtract_regression10/program_memory.snap b/rust/kcl-lib/tests/subtract_regression10/program_memory.snap new file mode 100644 index 000000000..2ec576eb5 --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression10/program_memory.snap @@ -0,0 +1,5534 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Variables in memory after executing subtract_regression10.kcl +--- +{ + "boltHoles": { + "type": "HomArray", + "value": [ + { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudeArc" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 45.0, + 0.0 + ], + "from": [ + 50.0, + 0.0 + ], + "radius": 5.0, + "tag": null, + "to": [ + 50.0, + 0.0 + ], + "type": "Circle", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 232.09247866942073, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "Custom", + "xAxis": { + "x": -0.9778288277170034, + "y": 0.0, + "z": -0.2094057871349092, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 50.0, + 0.0 + ], + "to": [ + 50.0, + 0.0 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 300.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 45.0, + 0.0 + ], + "from": [ + 50.0, + 0.0 + ], + "radius": 5.0, + "tag": null, + "to": [ + 50.0, + 0.0 + ], + "type": "Circle", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 232.09247866942073, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "Custom", + "xAxis": { + "x": -0.9778288277170034, + "y": 0.0, + "z": -0.2094057871349092, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 50.0, + 0.0 + ], + "to": [ + 50.0, + 0.0 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 300.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + }, + "sectional": false + } + } + ] + }, + "bore": { + "type": "Number", + "value": 92.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "boreHoles": { + "type": "Plane", + "value": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "value": "XZ", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + } + }, + "connectingRod": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 51.5557, + -8.649 + ], + "tag": null, + "to": [ + 69.1566, + -4.8797 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 68.1096, + 0.0095 + ], + "from": [ + 69.1566, + -4.8797 + ], + "tag": null, + "to": [ + 72.3071, + -2.7073 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 72.3071, + -2.7073 + ], + "tag": null, + "to": [ + 82.0875, + 12.4037 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 86.285, + 9.6869 + ], + "from": [ + 82.0875, + 12.4037 + ], + "tag": null, + "to": [ + 85.238, + 14.5761 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 85.238, + 14.5761 + ], + "tag": null, + "to": [ + 102.8389, + 18.3454 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 102.8389, + 18.3454 + ], + "tag": null, + "to": [ + 90.5887, + 75.5484 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 90.5887, + 75.5484 + ], + "tag": null, + "to": [ + 72.9878, + 71.7791 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 71.9407, + 76.6682 + ], + "from": [ + 72.9878, + 71.7791 + ], + "tag": null, + "to": [ + 69.224, + 72.4707 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 69.224, + 72.4707 + ], + "tag": null, + "to": [ + 54.1129, + 82.2511 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 73.6738, + 112.4732 + ], + "from": [ + 54.1129, + 82.2511 + ], + "tag": null, + "to": [ + 38.4719, + 104.9346 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 38.4719, + 104.9346 + ], + "tag": null, + "to": [ + 14.517, + 216.7932 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 19.4061, + 217.8402 + ], + "from": [ + 14.517, + 216.7932 + ], + "tag": null, + "to": [ + 15.2086, + 220.557 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 15.2086, + 220.557 + ], + "tag": null, + "to": [ + 19.1208, + 226.6014 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 23.3183, + 223.8847 + ], + "from": [ + 19.1208, + 226.6014 + ], + "tag": null, + "to": [ + 22.2713, + 228.7738 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 22.2713, + 228.7738 + ], + "tag": null, + "to": [ + 29.3116, + 230.2815 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 29.3116, + 230.2815 + ], + "tag": null, + "to": [ + 25.1426, + 249.749 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 25.1426, + 249.749 + ], + "tag": null, + "to": [ + 18.0192, + 254.3595 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 18.0192, + 254.3595 + ], + "tag": null, + "to": [ + -3.7693, + 249.6934 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -3.7693, + 249.6934 + ], + "tag": null, + "to": [ + 51.5557, + -8.649 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "XZ", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 51.5557, + -8.649 + ], + "to": [ + 51.5557, + -8.649 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 54.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + "connectingRodBore": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 51.5557, + -8.649 + ], + "tag": null, + "to": [ + 69.1566, + -4.8797 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 68.1096, + 0.0095 + ], + "from": [ + 69.1566, + -4.8797 + ], + "tag": null, + "to": [ + 72.3071, + -2.7073 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 72.3071, + -2.7073 + ], + "tag": null, + "to": [ + 82.0875, + 12.4037 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 86.285, + 9.6869 + ], + "from": [ + 82.0875, + 12.4037 + ], + "tag": null, + "to": [ + 85.238, + 14.5761 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 85.238, + 14.5761 + ], + "tag": null, + "to": [ + 102.8389, + 18.3454 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 102.8389, + 18.3454 + ], + "tag": null, + "to": [ + 90.5887, + 75.5484 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 90.5887, + 75.5484 + ], + "tag": null, + "to": [ + 72.9878, + 71.7791 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 71.9407, + 76.6682 + ], + "from": [ + 72.9878, + 71.7791 + ], + "tag": null, + "to": [ + 69.224, + 72.4707 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 69.224, + 72.4707 + ], + "tag": null, + "to": [ + 54.1129, + 82.2511 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 73.6738, + 112.4732 + ], + "from": [ + 54.1129, + 82.2511 + ], + "tag": null, + "to": [ + 38.4719, + 104.9346 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 38.4719, + 104.9346 + ], + "tag": null, + "to": [ + 14.517, + 216.7932 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 19.4061, + 217.8402 + ], + "from": [ + 14.517, + 216.7932 + ], + "tag": null, + "to": [ + 15.2086, + 220.557 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 15.2086, + 220.557 + ], + "tag": null, + "to": [ + 19.1208, + 226.6014 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 23.3183, + 223.8847 + ], + "from": [ + 19.1208, + 226.6014 + ], + "tag": null, + "to": [ + 22.2713, + 228.7738 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 22.2713, + 228.7738 + ], + "tag": null, + "to": [ + 29.3116, + 230.2815 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 29.3116, + 230.2815 + ], + "tag": null, + "to": [ + 25.1426, + 249.749 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 25.1426, + 249.749 + ], + "tag": null, + "to": [ + 18.0192, + 254.3595 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 18.0192, + 254.3595 + ], + "tag": null, + "to": [ + -3.7693, + 249.6934 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -3.7693, + 249.6934 + ], + "tag": null, + "to": [ + 51.5557, + -8.649 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "XZ", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 51.5557, + -8.649 + ], + "to": [ + 51.5557, + -8.649 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 54.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + "connectingRodPlane": { + "type": "Object", + "value": { + "origin": { + "type": "HomArray", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 232.0925, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "xAxis": { + "type": "HomArray", + "value": [ + { + "type": "Number", + "value": -0.9778, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": -0.2094, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "yAxis": { + "type": "HomArray", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + } + } + }, + "connectingRodProfile": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 51.5557, + -8.649 + ], + "tag": null, + "to": [ + 69.1566, + -4.8797 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 68.1096, + 0.0095 + ], + "from": [ + 69.1566, + -4.8797 + ], + "tag": null, + "to": [ + 72.3071, + -2.7073 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 72.3071, + -2.7073 + ], + "tag": null, + "to": [ + 82.0875, + 12.4037 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 86.285, + 9.6869 + ], + "from": [ + 82.0875, + 12.4037 + ], + "tag": null, + "to": [ + 85.238, + 14.5761 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 85.238, + 14.5761 + ], + "tag": null, + "to": [ + 102.8389, + 18.3454 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 102.8389, + 18.3454 + ], + "tag": null, + "to": [ + 90.5887, + 75.5484 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 90.5887, + 75.5484 + ], + "tag": null, + "to": [ + 72.9878, + 71.7791 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 71.9407, + 76.6682 + ], + "from": [ + 72.9878, + 71.7791 + ], + "tag": null, + "to": [ + 69.224, + 72.4707 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 69.224, + 72.4707 + ], + "tag": null, + "to": [ + 54.1129, + 82.2511 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 73.6738, + 112.4732 + ], + "from": [ + 54.1129, + 82.2511 + ], + "tag": null, + "to": [ + 38.4719, + 104.9346 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 38.4719, + 104.9346 + ], + "tag": null, + "to": [ + 14.517, + 216.7932 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 19.4061, + 217.8402 + ], + "from": [ + 14.517, + 216.7932 + ], + "tag": null, + "to": [ + 15.2086, + 220.557 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 15.2086, + 220.557 + ], + "tag": null, + "to": [ + 19.1208, + 226.6014 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 23.3183, + 223.8847 + ], + "from": [ + 19.1208, + 226.6014 + ], + "tag": null, + "to": [ + 22.2713, + 228.7738 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 22.2713, + 228.7738 + ], + "tag": null, + "to": [ + 29.3116, + 230.2815 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 29.3116, + 230.2815 + ], + "tag": null, + "to": [ + 25.1426, + 249.749 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 25.1426, + 249.749 + ], + "tag": null, + "to": [ + 18.0192, + 254.3595 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 18.0192, + 254.3595 + ], + "tag": null, + "to": [ + -3.7693, + 249.6934 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -3.7693, + 249.6934 + ], + "tag": null, + "to": [ + 51.5557, + -8.649 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "XZ", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 51.5557, + -8.649 + ], + "to": [ + 51.5557, + -8.649 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 54.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + "connectingRodShape": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 54.0, + 0.0 + ], + "tag": null, + "to": [ + 54.0, + 4.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 46.0, + 4.0 + ], + "from": [ + 54.0, + 4.0 + ], + "tag": null, + "to": [ + 47.3892, + 11.8785 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 0.0, + -256.879 + ], + "from": [ + 47.3892, + 11.8785 + ], + "tag": null, + "to": [ + -47.3892, + 11.8785 + ], + "type": "TangentialArcTo", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + -46.0, + 4.0 + ], + "from": [ + -47.3892, + 11.8785 + ], + "tag": null, + "to": [ + -54.0, + 4.0 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -54.0, + 4.0 + ], + "tag": null, + "to": [ + -54.0, + 0.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -54.0, + 0.0 + ], + "tag": null, + "to": [ + 54.0, + 0.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 232.09247866942073, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "Custom", + "xAxis": { + "x": -0.9778288277170034, + "y": 0.0, + "z": -0.2094057871349092, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 54.0, + 0.0 + ], + "to": [ + 54.0, + 0.0 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 554.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + "connectingRodShapeSubtract": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 51.5557, + -8.649 + ], + "tag": null, + "to": [ + 69.1566, + -4.8797 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 68.1096, + 0.0095 + ], + "from": [ + 69.1566, + -4.8797 + ], + "tag": null, + "to": [ + 72.3071, + -2.7073 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 72.3071, + -2.7073 + ], + "tag": null, + "to": [ + 82.0875, + 12.4037 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 86.285, + 9.6869 + ], + "from": [ + 82.0875, + 12.4037 + ], + "tag": null, + "to": [ + 85.238, + 14.5761 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 85.238, + 14.5761 + ], + "tag": null, + "to": [ + 102.8389, + 18.3454 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 102.8389, + 18.3454 + ], + "tag": null, + "to": [ + 90.5887, + 75.5484 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 90.5887, + 75.5484 + ], + "tag": null, + "to": [ + 72.9878, + 71.7791 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 71.9407, + 76.6682 + ], + "from": [ + 72.9878, + 71.7791 + ], + "tag": null, + "to": [ + 69.224, + 72.4707 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 69.224, + 72.4707 + ], + "tag": null, + "to": [ + 54.1129, + 82.2511 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 73.6738, + 112.4732 + ], + "from": [ + 54.1129, + 82.2511 + ], + "tag": null, + "to": [ + 38.4719, + 104.9346 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 38.4719, + 104.9346 + ], + "tag": null, + "to": [ + 14.517, + 216.7932 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 19.4061, + 217.8402 + ], + "from": [ + 14.517, + 216.7932 + ], + "tag": null, + "to": [ + 15.2086, + 220.557 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 15.2086, + 220.557 + ], + "tag": null, + "to": [ + 19.1208, + 226.6014 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 23.3183, + 223.8847 + ], + "from": [ + 19.1208, + 226.6014 + ], + "tag": null, + "to": [ + 22.2713, + 228.7738 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 22.2713, + 228.7738 + ], + "tag": null, + "to": [ + 29.3116, + 230.2815 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 29.3116, + 230.2815 + ], + "tag": null, + "to": [ + 25.1426, + 249.749 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 25.1426, + 249.749 + ], + "tag": null, + "to": [ + 18.0192, + 254.3595 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 18.0192, + 254.3595 + ], + "tag": null, + "to": [ + -3.7693, + 249.6934 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -3.7693, + 249.6934 + ], + "tag": null, + "to": [ + 51.5557, + -8.649 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "XZ", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 51.5557, + -8.649 + ], + "to": [ + 51.5557, + -8.649 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 54.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + "crankBore": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudeArc" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 42.1324, + 35.3533 + ], + "from": [ + 78.1324, + 35.3533 + ], + "radius": 36.0, + "tag": null, + "to": [ + 78.1324, + 35.3533 + ], + "type": "Circle", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "XZ", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 78.1324, + 35.3533 + ], + "to": [ + 78.1324, + 35.3533 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 54.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + "crankPos": { + "type": "Number", + "value": 40.0, + "ty": { + "type": "Known", + "type": "Angle", + "type": "Degrees" + } + }, + "crankRadius": { + "type": "Number", + "value": 36.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "cutDivots": { + "type": "HomArray", + "value": [ + { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 40.0, + 241.4675 + ], + "tag": null, + "to": [ + 40.0, + 222.7175 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 40.0, + 222.7175 + ], + "tag": null, + "to": [ + 65.75, + 222.7175 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 65.75, + 222.7175 + ], + "tag": null, + "to": [ + 65.75, + 241.4675 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 65.75, + 241.4675 + ], + "tag": null, + "to": [ + 40.0, + 241.4675 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 40.0, + 241.4675 + ], + "tag": null, + "to": [ + 40.0, + 241.4675 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "YZ", + "xAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 40.0, + 241.4675 + ], + "to": [ + 40.0, + 241.4675 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 314.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 40.0, + 241.4675 + ], + "tag": null, + "to": [ + 40.0, + 222.7175 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 40.0, + 222.7175 + ], + "tag": null, + "to": [ + 65.75, + 222.7175 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 65.75, + 222.7175 + ], + "tag": null, + "to": [ + 65.75, + 241.4675 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 65.75, + 241.4675 + ], + "tag": null, + "to": [ + 40.0, + 241.4675 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 40.0, + 241.4675 + ], + "tag": null, + "to": [ + 40.0, + 241.4675 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "YZ", + "xAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 40.0, + 241.4675 + ], + "to": [ + 40.0, + 241.4675 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 314.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + }, + "sectional": false + } + } + ] + }, + "divots": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 40.0, + 241.4675 + ], + "tag": null, + "to": [ + 40.0, + 222.7175 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 40.0, + 222.7175 + ], + "tag": null, + "to": [ + 65.75, + 222.7175 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 65.75, + 222.7175 + ], + "tag": null, + "to": [ + 65.75, + 241.4675 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 65.75, + 241.4675 + ], + "tag": null, + "to": [ + 40.0, + 241.4675 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 40.0, + 241.4675 + ], + "tag": null, + "to": [ + 40.0, + 241.4675 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "YZ", + "xAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 40.0, + 241.4675 + ], + "to": [ + 40.0, + 241.4675 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 314.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + "kinematicSketch": { + "type": "Plane", + "value": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "value": "XZ", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + } + }, + "pinHeight": { + "type": "Number", + "value": 35.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "pistonBore": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudeArc" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 0.1, + 267.0925 + ], + "tag": null, + "to": [ + 46.1, + 267.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 267.0925 + ], + "tag": null, + "to": [ + 46.1, + 264.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 264.0925 + ], + "tag": null, + "to": [ + 43.1, + 264.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 264.0925 + ], + "tag": null, + "to": [ + 43.1, + 262.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 262.0925 + ], + "tag": null, + "to": [ + 46.1, + 262.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 262.0925 + ], + "tag": null, + "to": [ + 46.1, + 259.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 259.0925 + ], + "tag": null, + "to": [ + 43.1, + 259.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 259.0925 + ], + "tag": null, + "to": [ + 43.1, + 257.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 257.0925 + ], + "tag": null, + "to": [ + 46.1, + 257.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 257.0925 + ], + "tag": null, + "to": [ + 46.1, + 254.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 254.0925 + ], + "tag": null, + "to": [ + 43.1, + 254.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 254.0925 + ], + "tag": null, + "to": [ + 43.1, + 252.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 252.0925 + ], + "tag": null, + "to": [ + 46.1, + 252.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 252.0925 + ], + "tag": null, + "to": [ + 46.1, + 189.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 189.0925 + ], + "tag": null, + "to": [ + 38.1, + 189.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 38.1, + 189.0925 + ], + "tag": null, + "to": [ + 38.1, + 236.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 15.1, + 236.0925 + ], + "from": [ + 38.1, + 236.0925 + ], + "tag": null, + "to": [ + 15.1, + 259.0925 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 15.1, + 259.0925 + ], + "tag": null, + "to": [ + 0.1, + 259.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 0.1, + 259.0925 + ], + "tag": null, + "to": [ + 0.1, + 267.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 0.1, + 267.0925 + ], + "tag": null, + "to": [ + 0.1, + 267.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "XZ", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 0.1, + 267.0925 + ], + "to": [ + 0.1, + 267.0925 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 0.0, + "startCapId": null, + "endCapId": null, + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + "pistonDiv": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudeArc" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 0.1, + 267.0925 + ], + "tag": null, + "to": [ + 46.1, + 267.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 267.0925 + ], + "tag": null, + "to": [ + 46.1, + 264.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 264.0925 + ], + "tag": null, + "to": [ + 43.1, + 264.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 264.0925 + ], + "tag": null, + "to": [ + 43.1, + 262.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 262.0925 + ], + "tag": null, + "to": [ + 46.1, + 262.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 262.0925 + ], + "tag": null, + "to": [ + 46.1, + 259.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 259.0925 + ], + "tag": null, + "to": [ + 43.1, + 259.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 259.0925 + ], + "tag": null, + "to": [ + 43.1, + 257.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 257.0925 + ], + "tag": null, + "to": [ + 46.1, + 257.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 257.0925 + ], + "tag": null, + "to": [ + 46.1, + 254.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 254.0925 + ], + "tag": null, + "to": [ + 43.1, + 254.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 254.0925 + ], + "tag": null, + "to": [ + 43.1, + 252.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 252.0925 + ], + "tag": null, + "to": [ + 46.1, + 252.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 252.0925 + ], + "tag": null, + "to": [ + 46.1, + 189.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 189.0925 + ], + "tag": null, + "to": [ + 38.1, + 189.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 38.1, + 189.0925 + ], + "tag": null, + "to": [ + 38.1, + 236.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 15.1, + 236.0925 + ], + "from": [ + 38.1, + 236.0925 + ], + "tag": null, + "to": [ + 15.1, + 259.0925 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 15.1, + 259.0925 + ], + "tag": null, + "to": [ + 0.1, + 259.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 0.1, + 259.0925 + ], + "tag": null, + "to": [ + 0.1, + 267.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 0.1, + 267.0925 + ], + "tag": null, + "to": [ + 0.1, + 267.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "XZ", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 0.1, + 267.0925 + ], + "to": [ + 0.1, + 267.0925 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 0.0, + "startCapId": null, + "endCapId": null, + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + "pistonHead": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudeArc" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 0.1, + 267.0925 + ], + "tag": null, + "to": [ + 46.1, + 267.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 267.0925 + ], + "tag": null, + "to": [ + 46.1, + 264.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 264.0925 + ], + "tag": null, + "to": [ + 43.1, + 264.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 264.0925 + ], + "tag": null, + "to": [ + 43.1, + 262.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 262.0925 + ], + "tag": null, + "to": [ + 46.1, + 262.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 262.0925 + ], + "tag": null, + "to": [ + 46.1, + 259.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 259.0925 + ], + "tag": null, + "to": [ + 43.1, + 259.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 259.0925 + ], + "tag": null, + "to": [ + 43.1, + 257.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 257.0925 + ], + "tag": null, + "to": [ + 46.1, + 257.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 257.0925 + ], + "tag": null, + "to": [ + 46.1, + 254.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 254.0925 + ], + "tag": null, + "to": [ + 43.1, + 254.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 254.0925 + ], + "tag": null, + "to": [ + 43.1, + 252.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 43.1, + 252.0925 + ], + "tag": null, + "to": [ + 46.1, + 252.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 252.0925 + ], + "tag": null, + "to": [ + 46.1, + 189.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 46.1, + 189.0925 + ], + "tag": null, + "to": [ + 38.1, + 189.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 38.1, + 189.0925 + ], + "tag": null, + "to": [ + 38.1, + 236.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 15.1, + 236.0925 + ], + "from": [ + 38.1, + 236.0925 + ], + "tag": null, + "to": [ + 15.1, + 259.0925 + ], + "type": "TangentialArc", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 15.1, + 259.0925 + ], + "tag": null, + "to": [ + 0.1, + 259.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 0.1, + 259.0925 + ], + "tag": null, + "to": [ + 0.1, + 267.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 0.1, + 267.0925 + ], + "tag": null, + "to": [ + 0.1, + 267.0925 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "XZ", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 0.1, + 267.0925 + ], + "to": [ + 0.1, + 267.0925 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 0.0, + "startCapId": null, + "endCapId": null, + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + "pistonHeight": { + "type": "Number", + "value": 75.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "pistonSkirt": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 0.0, + 195.8425 + ], + "tag": null, + "to": [ + 0.1, + 195.8425 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": false, + "center": [ + 0.1, + 8.0223 + ], + "from": [ + 0.1, + 195.8425 + ], + "tag": null, + "to": [ + 50.0, + 189.0925 + ], + "type": "TangentialArcTo", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 50.0, + 189.0925 + ], + "tag": null, + "to": [ + 50.0, + 0.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 50.0, + 0.0 + ], + "tag": null, + "to": [ + 0.0, + 0.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 0.0, + 0.0 + ], + "tag": null, + "to": [ + 0.0, + 195.8425 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "XZ", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 0.0, + 195.8425 + ], + "to": [ + 0.0, + 195.8425 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 314.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + "rodLength": { + "type": "Number", + "value": 201.2, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "seg01": { + "type": "TagIdentifier", + "type": "TagIdentifier", + "value": "seg01" + }, + "seg02": { + "type": "TagIdentifier", + "type": "TagIdentifier", + "value": "seg02" + }, + "seg03": { + "type": "TagIdentifier", + "type": "TagIdentifier", + "value": "seg03" + }, + "seg04": { + "type": "TagIdentifier", + "type": "TagIdentifier", + "value": "seg04" + }, + "stroke": { + "type": "Number", + "value": 110.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "wristPin": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": { + "commentStart": 2986, + "end": 2992, + "start": 2986, + "type": "TagDeclarator", + "value": "seg04" + }, + "type": "extrudeArc" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 0.0, + 232.0925 + ], + "from": [ + 7.5, + 232.0925 + ], + "radius": 7.5, + "tag": { + "commentStart": 2986, + "end": 2992, + "start": 2986, + "type": "TagDeclarator", + "value": "seg04" + }, + "to": [ + 7.5, + 232.0925 + ], + "type": "Circle", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "XZ", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 7.5, + 232.0925 + ], + "to": [ + 7.5, + 232.0925 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "tags": { + "seg04": { + "type": "TagIdentifier", + "value": "seg04" + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 92.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "edgeCuts": [ + { + "type": "fillet", + "id": "[uuid]", + "radius": { + "n": 1.875, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "edgeId": "[uuid]", + "tag": null + }, + { + "type": "fillet", + "id": "[uuid]", + "radius": { + "n": 1.875, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "edgeId": "[uuid]", + "tag": null + } + ], + "units": { + "type": "Mm" + }, + "sectional": false + } + }, + "wristPinHole": { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudeArc" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "ccw": true, + "center": [ + 0.0, + 232.0925 + ], + "from": [ + 7.5, + 232.0925 + ], + "radius": 7.5, + "tag": null, + "to": [ + 7.5, + 232.0925 + ], + "type": "Circle", + "units": { + "type": "Mm" + } + } + ], + "on": { + "artifactId": "[uuid]", + "id": "[uuid]", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Mm" + } + }, + "type": "plane", + "value": "XZ", + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0, + "units": { + "type": "Unknown" + } + }, + "yAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0, + "units": { + "type": "Unknown" + } + } + }, + "start": { + "from": [ + 7.5, + 232.0925 + ], + "to": [ + 7.5, + 232.0925 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", + "units": { + "type": "Mm" + } + }, + "height": 54.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + }, + "sectional": false + } + } +} diff --git a/rust/kcl-lib/tests/subtract_regression10/rendered_model.png b/rust/kcl-lib/tests/subtract_regression10/rendered_model.png new file mode 100644 index 0000000000000000000000000000000000000000..3c3edf378881daa1e87618a45aeabd01aa50f64a GIT binary patch literal 79706 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%0A5e_)1lfdZIt|SD{e8_VMD6nyCe(^N11?Gc1 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 literal 0 HcmV?d00001 diff --git a/rust/kcl-lib/tests/subtract_regression10/unparsed.snap b/rust/kcl-lib/tests/subtract_regression10/unparsed.snap new file mode 100644 index 000000000..27a00ca82 --- /dev/null +++ b/rust/kcl-lib/tests/subtract_regression10/unparsed.snap @@ -0,0 +1,209 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Result of unparsing subtract_regression10.kcl +--- +// Piston +// A piston is the component of an engine that transfers linear motion into circular motion. The piston head is accelerated by exploding fuel, which drives a connecting rod to rotate a crankshaft. + +// Set units +@settings(defaultLengthUnit = mm) + +// Define parameters +stroke = 110 +bore = 92 +pistonHeight = 75 +crankPos = 40deg +crankRadius = 36 +pinHeight = 35 +rodLength = 201.2 + +// A simple sketch to define piston position at different crank parameters +kinematicSketch = startSketchOn(XZ) +startProfile(kinematicSketch, at = [0, 0]) + |> angledLine(angle = crankPos, length = stroke / 2, tag = $seg01) + |> line( + endAbsolute = [ + 0, + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + ], + tag = $seg02, + ) + |> angledLine(angle = segAng(seg02) - 90, length = 1, tag = $seg03) + +// Sketch a profile with a total width equal to half the bore of the piston head. Include lands and gaps for compression rings. Then revolve the profile about the center axis to form the start of a piston head +pistonBore = startSketchOn(XZ) + |> startProfile(at = [ + 0.1, + pinHeight + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + ]) + |> xLine(length = bore / 2) + |> yLine(length = -3) + |> xLine(length = -3) + |> yLine(length = -2) + |> xLine(length = 3) + |> yLine(length = -3) + |> xLine(length = -3) + |> yLine(length = -2) + |> xLine(length = 3) + |> yLine(length = -3) + |> xLine(length = -3) + |> yLine(length = -2) + |> xLine(length = 3) + |> yLine(endAbsolute = profileStartY(%) - pistonHeight - 3) + |> xLine(length = -8) + |> yLine(endAbsolute = profileStartY(%) - 8 - (bore / 4)) + |> tangentialArc(angle = 90, radius = bore / 4) + |> xLine(endAbsolute = profileStartX(%)) + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) + |> close() + |> revolve(angle = 360, axis = Y) + +// Create a square profile divot to subtract from the piston head +divots = startSketchOn(YZ) + |> startProfile(at = [ + bore / 2 - 6, + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + pistonHeight / 4 / 2 + ]) + |> yLine(length = -pistonHeight / 4) + |> xLine(length = 25.75) + |> yLine(endAbsolute = profileStartY(%)) + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) + |> close() + |> extrude(length = 314, symmetric = true) + +// Rotate another divot to the opposite side +cutDivots = patternCircular3d( + divots, + instances = 2, + axis = [0, 0, 1], + center = [0, 0, 0], + arcDegrees = 360, + rotateDuplicates = true, +) + +// Cut the divots from the piston head +// WORKED PREVIOUSLY +pistonDiv = subtract([pistonBore], tools = union(cutDivots)) + +// Extrude and fillet a wrist pin +wristPin = startSketchOn(XZ) + |> circle( + center = [ + 0, + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + ], + radius = pistonHeight / 10, + tag = $seg04, + ) + |> extrude(length = bore, symmetric = true) + |> fillet(radius = pistonHeight / 40, tags = [getOppositeEdge(seg04), seg04]) + +// Cut a rounded profile to arc the bottom of the piston skirt +pistonSkirt = startSketchOn(XZ) + |> startProfile(at = [ + 0, + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + pinHeight - (pistonHeight * 0.95) + ]) + |> xLine(length = .1) + |> tangentialArc(endAbsolute = [ + bore / 2 + 4, + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + pinHeight - pistonHeight - 3 + ]) + |> yLine(endAbsolute = 0) + |> xLine(endAbsolute = 0) + |> mirror2d(axis = Y) + |> close() + |> extrude(length = 314, symmetric = true) +// WORKED PREVIOUSLY +pistonHead = subtract([pistonDiv], tools = [pistonSkirt]) + +// Create a connecting rod that spans from the crank position to the piston height +connectingRodProfile = startSketchOn(XZ) + |> startProfile(at = [ + segEndX(seg01) - (1.25 * crankRadius * cos(segAng(seg02))), + segEndY(seg01) - (1.25 * crankRadius * sin(segAng(seg02))) + ]) + |> angledLine(angle = segAng(seg02) - 90, length = crankRadius / 2) + |> tangentialArc(angle = 45, radius = 5) + |> angledLine(angle = segAng(seg02) - 45, length = crankRadius / 2) + |> tangentialArc(angle = -45, radius = 5) + |> angledLine(angle = segAng(seg02) - 90, length = crankRadius / 2) + |> angledLine(angle = segAng(seg02), length = crankRadius * 1.625) + |> angledLine(angle = segAng(seg02) + 90, length = crankRadius / 2) + |> tangentialArc(angle = -45, radius = 5) + |> angledLine(angle = segAng(seg02) + 45, length = crankRadius / 2) + |> tangentialArc(angle = -45, radius = crankRadius) + |> angledLineThatIntersects(angle = segAng(seg02), intersectTag = seg03, offset = -crankRadius / 2) + |> tangentialArc(angle = -45, radius = 5) + |> angledLine(angle = segAng(seg02) - 45, length = crankRadius / 5) + |> tangentialArc(angle = -45, radius = 5) + |> angledLine(angle = segAng(seg02) - 90, length = crankRadius / 5) + |> angledLineThatIntersects(angle = segAng(seg02), intersectTag = seg03, offset = crankRadius / 3) + |> angledLineThatIntersects(angle = segAng(seg02) + 45, intersectTag = seg03, offset = crankRadius / 2) + |> angledLineThatIntersects(%, angle = segAng(seg02) + 90, intersectTag = seg02) + |> mirror2d(axis = seg02) + |> close() + |> extrude(length = 54, symmetric = true) + +// Define a plane perpendicular to the connecting rod +connectingRodPlane = { + origin = [ + 0, + 0.0, + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + ], + xAxis = [ + -1 * sin(segAng(seg02)), + 0, + 1 * cos(segAng(seg02)) + ], + yAxis = [0.0, 1.0, 0.0] +} + +// Extrude an oval profile through the connecting rod to define its boundaries in the other dimensions +connectingRodShape = startSketchOn(connectingRodPlane) + |> startProfile(at = [crankRadius * 1.5, 0]) + |> yLine(length = 4) + |> tangentialArc(angle = 80, radius = 8) + |> tangentialArc(endAbsolute = [-lastSegX(%), lastSegY(%)]) + |> tangentialArc(angle = 80, radius = 8) + |> yLine(endAbsolute = profileStartY(%)) + |> mirror2d(axis = X) + |> close() + |> extrude(length = 554, symmetric = true) + +connectingRodShapeSubtract = intersect([ + connectingRodProfile, + connectingRodShape +]) + +// Bore holes in the connecting rod for the wrist pin and crank +// REPLACED POLYGON CUTS WITH CIRCLES +boreHoles = startSketchOn(XZ) +crankBore = circle(boreHoles, center = polar(angle = crankPos, length = stroke / 2), radius = crankRadius) + |> extrude(length = 54, symmetric = true) +wristPinHole = circle( + boreHoles, + center = [ + 0, + stroke / 2 * sin(crankPos) + sqrt(rodLength ^ 2 - ((stroke / 2 * cos(crankPos)) ^ 2)) + ], + radius = pistonHeight / 10, + ) + |> extrude(length = 54, symmetric = true) + +// Subtract out the bore holes +connectingRodBore = subtract([connectingRodShapeSubtract], tools = union([wristPinHole, crankBore])) + +// Bore holes for the connecting rod bolts +boltHoles = startSketchOn(connectingRodPlane) + |> circle(center = [45, 0], radius = 5) + |> patternCircular2d( + instances = 2, + center = [0, 0], + arcDegrees = 360, + rotateDuplicates = true, + ) + |> extrude(length = 300) + +connectingRod = subtract([connectingRodBore], tools = union(boltHoles))