
blocklyWe used some of our new OCCT components to model this parametric shape. It is quite complex solid, which was created by filling, lofting and filleting non planar periodic curves. Just to showcase that we can now in various ways subdivide the points on faces we put the nice looking point pattern which amplifies the shape of this model.
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable id="Wj,v?RS_d63{xAhrOHn5">points1</variable>
<variable id="it}]_2]fh!Ps.E6gqht!">points2</variable>
<variable id="Ia;bFe:^X8r@56hK)?tv">points3</variable>
<variable id="ZSs+~t2X0Ora;a[:Z65r">crv1</variable>
<variable id="f]kNsRn(3SE.]dD(Y_8g">crv2</variable>
<variable id="hnr0`v*sUTVOm,Z?.A^K">crv3</variable>
<variable id="rt1iVg$l-qrTzx}aI{_p">face1</variable>
<variable id="bg.?0vA#5|6TUS^s-S7O">loft</variable>
<variable id="$viQ]3^0$#RJ00kk_$]E">half</variable>
<variable id="RY/xm*{$bUXY_PxtaknX">mirrored</variable>
<variable id="9Bl:vn8zr=S@7S/X?F*y">facesMirrored</variable>
<variable id="zIIA0/nf@}|aUh1AJ_u3">facesFirstHalf</variable>
<variable id="r/c;2ho+tMI~?N#7+?-~">allFaces</variable>
<variable id="X;Z8-G69EovG5*^)2/zO">i</variable>
<variable id="/7lnGQo5iLMA#bZXfCp+">j</variable>
<variable id="~H97HH6!CLB*VvLc?SCH">finalShape</variable>
<variable id="8=3cW$e96!W|mj;A1{iB">ground</variable>
<variable id="xNL=rfomO2om!X)}Gex6">drawnPoints1</variable>
<variable id="UNOO|hja2c0m*fpQzRY@">drawnPoints2</variable>
<variable id="DCDlbD3Q#$PWPSGP}j3.">drawnObject</variable>
<variable id="*![r]sgpifD/Iq)*$PFH">timeElapsedFromPreviousFrame</variable>
</variables>
<block type="bitbybit.babylon.scene.drawDirectionalLightNoReturn" id="scUqH87Z9Se{lm{;m1I#" x="489" y="-1461">
<value name="Direction">
<block type="bitbybit.point.pointXYZ" id="DWI|kRAfUv},BVEidJ3v">
<value name="X">
<block type="math_number" id="4p2`KoFW:ACbLoe0koA[">
<field name="NUM">100</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="~?W]QdqMwg3s,,Q2|J6?">
<field name="NUM">-50</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="zUQnX,a=lbp|NT6Esm9-">
<field name="NUM">-100</field>
</block>
</value>
</block>
</value>
<value name="Intensity">
<block type="math_number" id="Wuj1rr|{#2R$[vI=rw]5">
<field name="NUM">1</field>
</block>
</value>
<value name="Diffuse">
<block type="colour_picker" id="u}`D,#j,sR+@u0Rd%qLG">
<field name="COLOUR">#ffffff</field>
</block>
</value>
<value name="Specular">
<block type="colour_picker" id="-!#*ep1YUZXn0LkC]_m/">
<field name="COLOUR">#ffffff</field>
</block>
</value>
<value name="ShadowGeneratorMapSize">
<block type="math_number" id="IkU9WbBzPH5Ky%7IIl(E">
<field name="NUM">1024</field>
</block>
</value>
<value name="EnableShadows">
<block type="logic_boolean" id="KtySfeq,7oVM*nKLHKx#">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="ShadowDarkness">
<block type="math_number" id="eP.w9wR*k_4e8s-]UR^?">
<field name="NUM">0</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.scene.activateCamera" id="*_@+NL.FX3!O)[O0lB/Q">
<value name="Camera">
<block type="bitbybit.babylon.camera.arcRotate.create" id="i`M2xcJfXd4hkPC14wC-">
<value name="Alpha">
<block type="math_number" id=".Giz.Kdq:!X5gIj8KHQA">
<field name="NUM">-0.3</field>
</block>
</value>
<value name="Beta">
<block type="math_number" id="A+mSJejvmk9-X*f41qdM">
<field name="NUM">1.3</field>
</block>
</value>
<value name="Radius">
<block type="math_number" id="H|7o-_7P#Hdsn~L0$,+Z">
<field name="NUM">20</field>
</block>
</value>
<value name="Target">
<block type="bitbybit.point.pointXYZ" id="to8rbOqM+m$IEobqTAYZ">
<value name="X">
<block type="math_number" id="dar.6x7nmF(-Zh@y^X@n">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="}L{BiS5vm,`nCk4,t3%v">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="h|jYXc.(Nahu2C:h@T{9">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="rC=@(c,@4`_a)0S(?*RQ">
<field name="VAR" id="Wj,v?RS_d63{xAhrOHn5">points1</field>
<value name="VALUE">
<block type="lists_create_with" id="p.Z6EG?1P+9VT}Y8;mYT">
<mutation items="6">
</mutation>
<value name="ADD0">
<block type="bitbybit.point.pointXYZ" id="OE`7@ER{Qk=y*~1?j`t]">
<value name="X">
<block type="math_number" id="g._*=uA_Q+@m;}Y:rR]y">
<field name="NUM">1</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="WIK6v3`6,0(4u[uio}(P">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="qcRiA;5;o{ci6)_!VDG[">
<field name="NUM">3.2</field>
</block>
</value>
</block>
</value>
<value name="ADD1">
<block type="bitbybit.point.pointXYZ" id="h7+:W`U/Ci@72jkn#Cjd">
<value name="X">
<block type="math_number" id="A2df8sDo6rpL#L]Zn^-X">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id=",Bb#_B`e[wXvoW63!uKS">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="TF3`Y;|R;O*_?_CXTn[=">
<field name="NUM">3</field>
</block>
</value>
</block>
</value>
<value name="ADD2">
<block type="bitbybit.point.pointXYZ" id="fIH+,|a/^i+EY*ADIW7f">
<value name="X">
<block type="math_number" id="9;l/N),%`yrl0bm|Hr+B">
<field name="NUM">-1</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="mr,]Yf`X@ye0E:ybGv9D">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="(n_uT^m]4MO`np?h;{QQ">
<field name="NUM">3.2</field>
</block>
</value>
</block>
</value>
<value name="ADD3">
<block type="bitbybit.point.pointXYZ" id="?/NOzioXFtkmC:{,5@v|">
<value name="X">
<block type="math_number" id="XSKb6E@u@pA0l?(wHvt_">
<field name="NUM">-3.5</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="W;9U^;fL.A+E.)FA_T9(">
<field name="NUM">0.5</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="1HAaApW1H3,o^8%8$o0%">
<field name="NUM">8</field>
</block>
</value>
</block>
</value>
<value name="ADD4">
<block type="bitbybit.point.pointXYZ" id="Xlf48V{mgBnG^5Y{vk;*">
<value name="X">
<block type="math_number" id="a4J*(XNkWTwa(;+|;-l+">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="LZ#o9m~|@m-P,1`wyMQY">
<field name="NUM">3</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="j-,Ch|Q.!X5g!f$AfN_h">
<field name="NUM">3.5</field>
</block>
</value>
</block>
</value>
<value name="ADD5">
<block type="bitbybit.point.pointXYZ" id="E[0EX]F[OmmXHlFMruY|">
<value name="X">
<block type="math_number" id="jlnK9Kuvp)/j3L%2P}O]">
<field name="NUM">3.5</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="kNNmlz*h9vZb^Xu0wJwY">
<field name="NUM">0.5</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="d-kdUAt[ujX1x/vR=YKM">
<field name="NUM">8</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id=";!Tb)hwb571t$01#-:!)">
<field name="VAR" id="it}]_2]fh!Ps.E6gqht!">points2</field>
<value name="VALUE">
<block type="lists_create_with" id="GV$I[#lI7S%WCH,m!zcR">
<mutation items="6">
</mutation>
<value name="ADD0">
<block type="bitbybit.point.pointXYZ" id="+K^Z+R^gV$aG;:Jg5hB+">
<value name="X">
<block type="math_number" id="=LmOTd@6W2mho^L$Fi94">
<field name="NUM">1</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="Y/H{]-2xryCpT]6zoThw">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id=".1waQxHtRx`lOkKIMZ[6">
<field name="NUM">1.8</field>
</block>
</value>
</block>
</value>
<value name="ADD1">
<block type="bitbybit.point.pointXYZ" id="BJ@WkOvckfmJK+AKs*:q">
<value name="X">
<block type="math_number" id="r01YFk2I~Qu{ItB;}Hx/">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="Ju=-vYTzz|+FpxZFdaEY">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="Jzd%Vnf!t+4hBq-Q/v}D">
<field name="NUM">2</field>
</block>
</value>
</block>
</value>
<value name="ADD2">
<block type="bitbybit.point.pointXYZ" id="PJVi.2WtjKhJvr8^#%|c">
<value name="X">
<block type="math_number" id="r7_i4#i9a.I=c/KlH4!@">
<field name="NUM">-1</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="1M8#b]B3skzhW(x$pAm*">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="}]mzdQ/SW10q)7YH,f!?">
<field name="NUM">1.8</field>
</block>
</value>
</block>
</value>
<value name="ADD3">
<block type="bitbybit.point.pointXYZ" id="j]`Ey_/3u;]B9BsvuS|T">
<value name="X">
<block type="math_number" id="V+2*_QT^5XJ!v#pw}a-;">
<field name="NUM">-7</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="Lvw^r#O]YHMrQiGNX]V#">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="tEv412da3g9k((~AKzTJ">
<field name="NUM">6</field>
</block>
</value>
</block>
</value>
<value name="ADD4">
<block type="bitbybit.point.pointXYZ" id="WcmWU*zY;BJ{1]2Kvt7X">
<value name="X">
<block type="math_number" id=")N*X6%o#gd;SHwBrlB3.">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="J2%x)NZ8jP[{lBA65E2Q">
<field name="NUM">3</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="@|)-[*wvhriJ#eL#4M6+">
<field name="NUM">2</field>
</block>
</value>
</block>
</value>
<value name="ADD5">
<block type="bitbybit.point.pointXYZ" id="~m/1+u,tMxJShct_#9Lp">
<value name="X">
<block type="math_number" id="k#t^FgzW=~2*3IF5:G,t">
<field name="NUM">7</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="chnN3wHH*T.L6JE%sMSB">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="S|t1?PZK~E8Vr$+kZ0Hp">
<field name="NUM">6</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="@eNRNFtASy$4dl(3rCvz">
<field name="VAR" id="Ia;bFe:^X8r@56hK)?tv">points3</field>
<value name="VALUE">
<block type="lists_create_with" id="[Vj7w|_k8Vp/RU}39Ra(">
<mutation items="6">
</mutation>
<value name="ADD0">
<block type="bitbybit.point.pointXYZ" id="idPv66%2[xX/N.=0Kq0j">
<value name="X">
<block type="math_number" id="C%/%5kj:S2)h1!`.kAf%">
<field name="NUM">1</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="m1_u44aY!BmTiR(/`$Kx">
<field name="NUM">0.5</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="sl9ZR||%PE#M+mZYg`Fd">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="ADD1">
<block type="bitbybit.point.pointXYZ" id="],ycju[RkK,kYR6oxkt=">
<value name="X">
<block type="math_number" id="DHb(/1miR^O|0uw;RGv8">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="DQ.aFn+1Nvu(nX3gS#OF">
<field name="NUM">0.5</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="M9-z3L}~|^MWghPTF8c8">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="ADD2">
<block type="bitbybit.point.pointXYZ" id="{eFsrP3[Je@L!jsC-3uX">
<value name="X">
<block type="math_number" id=",XhlHjdNp.MY(M5B+S!b">
<field name="NUM">-1</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="Ni!!vxK83,1aC,Nnw.09">
<field name="NUM">0.5</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="nG@jyGy.nTP~=_]OUq`D">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="ADD3">
<block type="bitbybit.point.pointXYZ" id="Jr/bi@Kn~ngdFI(x6GYg">
<value name="X">
<block type="math_number" id="IZ`Lbt-~UNhuj~^pzD~v">
<field name="NUM">-4</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="J[Ivb{SsNvqNqjsHOV:o">
<field name="NUM">0.5</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="=4?1r=sm$1v)-^ZFq4ah">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="ADD4">
<block type="bitbybit.point.pointXYZ" id="M|PjoPvb=AG/Qm)51E!U">
<value name="X">
<block type="math_number" id="83lW`WzB`yIW[lw!SBJ?">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="83Rm1tN#{2[WsHj/5=e*">
<field name="NUM">2</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="nR@y}IKp:ZA%hO}H6Osz">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="ADD5">
<block type="bitbybit.point.pointXYZ" id="G^MQB!zE0FA).JhPM97-">
<value name="X">
<block type="math_number" id="iGfuFX^CuR;aY4_,WVWH">
<field name="NUM">4</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="uyiX;lx3+dZ=*B(UD^yG">
<field name="NUM">0.5</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="kNW#V3!U{@6Kg5CR_,or">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="vDFn6OC69/~e)9)[j-A+">
<field name="VAR" id="ZSs+~t2X0Ora;a[:Z65r">crv1</field>
<value name="VALUE">
<block type="bitbybit.occt.shapes.wire.interpolatePoints" id="29#uR-$?)+:bH_3yu5ye">
<value name="Points">
<block type="variables_get" id="clTW8g%U8*r1JgjDhc:n">
<field name="VAR" id="Wj,v?RS_d63{xAhrOHn5">points1</field>
</block>
</value>
<value name="Periodic">
<block type="logic_boolean" id="pGxPCv`7raG^uQT:$0UY">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="Tolerance">
<block type="math_number" id="@d9*iy`W8M#ZpN$2TqY#">
<field name="NUM">0.1</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="+RoSGq%CX-Lc~SMl@r|Q">
<field name="VAR" id="f]kNsRn(3SE.]dD(Y_8g">crv2</field>
<value name="VALUE">
<block type="bitbybit.occt.shapes.wire.interpolatePoints" id="AQ_G?o/64;LaQcRo-uf7">
<value name="Points">
<block type="variables_get" id="lDQ~F|k]0~O;bA|2`x16">
<field name="VAR" id="it}]_2]fh!Ps.E6gqht!">points2</field>
</block>
</value>
<value name="Periodic">
<block type="logic_boolean" id="30nc(K9o_0%8i:2W,JBa">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="Tolerance">
<block type="math_number" id="MBff4b_)@u!prIjYJQc|">
<field name="NUM">0.1</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="~1mD8t-YAF8X!-}G$8r/">
<field name="VAR" id="hnr0`v*sUTVOm,Z?.A^K">crv3</field>
<value name="VALUE">
<block type="bitbybit.occt.shapes.wire.interpolatePoints" id=")/tS8x69p-!gW$d6MATX">
<value name="Points">
<block type="variables_get" id="[)}/-h/5KuK!uy1#E#$P">
<field name="VAR" id="Ia;bFe:^X8r@56hK)?tv">points3</field>
</block>
</value>
<value name="Periodic">
<block type="logic_boolean" id="g@UE6yR=:ZWdXGy%(_0o">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="Tolerance">
<block type="math_number" id="4-uNcCkM2XDsE$0fJea0">
<field name="NUM">0.1</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="gn}(gOs9iN-?y098bPzB">
<field name="VAR" id="rt1iVg$l-qrTzx}aI{_p">face1</field>
<value name="VALUE">
<block type="bitbybit.occt.shapes.face.createFaceFromWire" id="jVas)hy+p@hi5I#LObZE">
<value name="Shape">
<block type="variables_get" id="JR1_lpj2mcrgt93lgM8^">
<field name="VAR" id="ZSs+~t2X0Ora;a[:Z65r">crv1</field>
</block>
</value>
<value name="Planar">
<block type="logic_boolean" id="M?Do@:,,fqVHvgHRK$Z[">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="Hj)5*rBg4X1T/jb0|D#{">
<field name="VAR" id="bg.?0vA#5|6TUS^s-S7O">loft</field>
<value name="VALUE">
<block type="bitbybit.occt.operations.loft" id="K?z/;C$Ys!G9S%PLAQ$Y">
<value name="Shapes">
<block type="lists_create_with" id="RDKBJh7Sw5iE(5|]^7)#">
<mutation items="3">
</mutation>
<value name="ADD0">
<block type="variables_get" id="8)^BVw/?w]xX3b!aPw18">
<field name="VAR" id="ZSs+~t2X0Ora;a[:Z65r">crv1</field>
</block>
</value>
<value name="ADD1">
<block type="variables_get" id="q-(`RaRQ?VS7xIX^)Z?U">
<field name="VAR" id="f]kNsRn(3SE.]dD(Y_8g">crv2</field>
</block>
</value>
<value name="ADD2">
<block type="variables_get" id="F~Zu{AU?B2it+d`7nmuP">
<field name="VAR" id="hnr0`v*sUTVOm,Z?.A^K">crv3</field>
</block>
</value>
</block>
</value>
<value name="MakeSolid">
<block type="logic_boolean" id="xA,rpWFOLFN20CL.SKRF">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="skjMuc`oYO-ouP02oqqw">
<field name="VAR" id="$viQ]3^0$#RJ00kk_$]E">half</field>
<value name="VALUE">
<block type="bitbybit.occt.fillets.filletEdges" id="O0%nl]}I2=Dj4^zm5*0:">
<value name="Shape">
<block type="bitbybit.occt.shapes.shell.sewFaces" id="Eh];Y6mzp1ZLK}YBN9QE">
<value name="Shapes">
<block type="lists_create_with" id="[5Eo2;b/im|95*-CAJ:i">
<mutation items="2">
</mutation>
<value name="ADD0">
<block type="variables_get" id="3E|zU0b-RC.csE=^1nN!">
<field name="VAR" id="bg.?0vA#5|6TUS^s-S7O">loft</field>
</block>
</value>
<value name="ADD1">
<block type="variables_get" id="Y1qMtVVNmAT?~Y0!:DWZ">
<field name="VAR" id="rt1iVg$l-qrTzx}aI{_p">face1</field>
</block>
</value>
</block>
</value>
<value name="Tolerance">
<block type="math_number" id="s+XsZz1dmTJvzesX;!zp">
<field name="NUM">1e-7</field>
</block>
</value>
</block>
</value>
<value name="Radius">
<block type="math_number" id="V?PpyjV#a9bO`sZ~.,f%">
<field name="NUM">0.08</field>
</block>
</value>
<value name="Indexes">
<block type="lists_create_with" id="9I-IL{jTFj~n-08J;3l9">
<mutation items="1">
</mutation>
<value name="ADD0">
<block type="math_number" id="hE5+zSF/:L_[I;S0XlQy">
<field name="NUM">1</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="Ce6Z6=1*:Ii.O(,LiG?{">
<field name="VAR" id="RY/xm*{$bUXY_PxtaknX">mirrored</field>
<value name="VALUE">
<block type="bitbybit.occt.transforms.mirrorAlongNormal" id="zws[HnP)(XnHaQKOp8Z6">
<value name="Shape">
<block type="variables_get" id="1|QbhDt-F[P~i9cTeyao">
<field name="VAR" id="$viQ]3^0$#RJ00kk_$]E">half</field>
</block>
</value>
<value name="Origin">
<block type="bitbybit.point.pointXYZ" id="K%yc?U8h2?y}9m%UB+ws">
<value name="X">
<block type="math_number" id="vwoOgY@..7=)=_+,a2*G">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="-8:t61h}h9D@:`7*~~+-">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="bL{JC{|WdGE$R7}oEebu">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="Normal">
<block type="bitbybit.point.pointXYZ" id="1NmSlwLfg^)N$/Ax[~pt">
<value name="X">
<block type="math_number" id="bT:(_#`F^G4_1J()4?$U">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="xm*5$+PY}BO:=fIqN^9I">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="Whf])TN:S9:p6(0d}^D9">
<field name="NUM">1</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="base_time_async_context" id="s$Ffq32vE9R9FdO5UVC~">
<statement name="Then">
<block type="variables_set" id="-8ZJw5SA-R88RCBzQcV+">
<field name="VAR" id="9Bl:vn8zr=S@7S/X?F*y">facesMirrored</field>
<value name="VALUE">
<block type="base_time_await_return" id="7~N/|Q_1Q7$)*SC0n=g2">
<value name="Promise">
<block type="bitbybit.occt.shapes.face.getFaces" id="@Fli1Q6f9q=q5nZr/XNk">
<value name="Shape">
<block type="variables_get" id="zkuF%HtnU?RT,hVwd1jW">
<field name="VAR" id="RY/xm*{$bUXY_PxtaknX">mirrored</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="_ncu$[?H]/iT[[O7u/`*">
<field name="VAR" id="zIIA0/nf@}|aUh1AJ_u3">facesFirstHalf</field>
<value name="VALUE">
<block type="base_time_await_return" id="K5|WJ=JM@cyQt2dB-%29">
<value name="Promise">
<block type="bitbybit.occt.shapes.face.getFaces" id="4r0.oy*X_7;Ewu.m(4yX">
<value name="Shape">
<block type="variables_get" id="fD/;3U_BCr]%Qk:a2H5@">
<field name="VAR" id="$viQ]3^0$#RJ00kk_$]E">half</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="}_52[:#zcqgldXJcHNVD">
<field name="VAR" id="r/c;2ho+tMI~?N#7+?-~">allFaces</field>
<value name="VALUE">
<block type="lists_create_with" id="0vkRZkl_t6?~!69MmxAL">
<mutation items="0">
</mutation>
</block>
</value>
<next>
<block type="controls_forEach" id="r/%jER=-)L%Xh5(@+h.E">
<field name="VAR" id="X;Z8-G69EovG5*^)2/zO">i</field>
<value name="LIST">
<block type="variables_get" id="1bdcW@yzr-MjFVN2eG{Z">
<field name="VAR" id="9Bl:vn8zr=S@7S/X?F*y">facesMirrored</field>
</block>
</value>
<statement name="DO">
<block type="lists_setIndex" id="r9bY4Pcqi2?~o2(Uj!-W">
<mutation at="false">
</mutation>
<field name="MODE">INSERT</field>
<field name="WHERE">LAST</field>
<value name="LIST">
<block type="variables_get" id="tPTJ}^k5_/{gx)BeaUGd">
<field name="VAR" id="r/c;2ho+tMI~?N#7+?-~">allFaces</field>
</block>
</value>
<value name="TO">
<block type="variables_get" id="hua#Q%ezlew{EounAZ3[">
<field name="VAR" id="X;Z8-G69EovG5*^)2/zO">i</field>
</block>
</value>
</block>
</statement>
<next>
<block type="controls_forEach" id="jk6a4_hBMLoV^[^`V$[%">
<field name="VAR" id="/7lnGQo5iLMA#bZXfCp+">j</field>
<value name="LIST">
<block type="variables_get" id="6z`c+d7P#j~!H,Vr~*G#">
<field name="VAR" id="zIIA0/nf@}|aUh1AJ_u3">facesFirstHalf</field>
</block>
</value>
<statement name="DO">
<block type="lists_setIndex" id="fk8G8q/Xn3nOj%5=.!oj">
<mutation at="false">
</mutation>
<field name="MODE">INSERT</field>
<field name="WHERE">LAST</field>
<value name="LIST">
<block type="variables_get" id="6ap#K.1ZQ{U*O2@R=Fq5">
<field name="VAR" id="r/c;2ho+tMI~?N#7+?-~">allFaces</field>
</block>
</value>
<value name="TO">
<block type="variables_get" id="UuAXOJMB9-J+1+d_vMe1">
<field name="VAR" id="/7lnGQo5iLMA#bZXfCp+">j</field>
</block>
</value>
</block>
</statement>
<next>
<block type="variables_set" id="on|kw*fT3H)r5n4a2~Mi">
<field name="VAR" id="~H97HH6!CLB*VvLc?SCH">finalShape</field>
<value name="VALUE">
<block type="bitbybit.occt.shapes.shell.sewFaces" id="ry^,wzl;=0q;xG,o`[9}">
<value name="Shapes">
<block type="variables_get" id="=$Orqn^:f)v:!-OgISf(">
<field name="VAR" id="r/c;2ho+tMI~?N#7+?-~">allFaces</field>
</block>
</value>
<value name="Tolerance">
<block type="math_number" id="*E,4NEn_bAOorqQ8SGh8">
<field name="NUM">1e-7</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="T=lk(_vN$^Hks)_6U0(Y">
<field name="VAR" id="8=3cW$e96!W|mj;A1{iB">ground</field>
<value name="VALUE">
<block type="base_time_await_return" id="{P?w+Vt9~Z@}Ck331@]Z">
<value name="Promise">
<block type="bitbybit.draw.drawAnyAsync" id="n.,-T5+E1m:G7`ntYHmX">
<value name="Entity">
<block type="bitbybit.occt.shapes.face.createCircleFace" id="JNJ(D5lzj]GOgXjBI?sX">
<value name="Radius">
<block type="math_number" id="%gUU!B3S7`^12Uk#Z(:g">
<field name="NUM">15</field>
</block>
</value>
<value name="Center">
<block type="bitbybit.point.pointXYZ" id="2P^jU5i45giobvjv6jo@">
<value name="X">
<block type="math_number" id="lBr7Z53q,W0U#ICO8R1`">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="crsx9`t(Zp[Z{X0c!c?.">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="@:*s8QyIU.+Kw*$Uz}v$">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="Direction">
<block type="bitbybit.point.pointXYZ" id="#N%/v%[)[l-}wp%U5mPl">
<value name="X">
<block type="math_number" id="1pFXh6yr+hgRSd8q^OKV">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="zwZKeena])aHR[Y}tQBX">
<field name="NUM">1</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="gd?U+cSfh|$4zT*/]|y}">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="}^Umg|Bd4~hMK9|Uk~v%">
<field name="VAR" id="xNL=rfomO2om!X)}Gex6">drawnPoints1</field>
<value name="VALUE">
<block type="base_time_await_return" id="JMFa[A,e7MV%GOPtfTh,">
<value name="Promise">
<block type="bitbybit.draw.drawAnyAsync" id="ao:3Bg|-o0J5AIloucMO">
<value name="Entity">
<block type="bitbybit.occt.shapes.face.subdivideToPoints" id="T(Wn=+GQ1~q)eJ./xsv^">
<value name="Shape">
<block type="bitbybit.occt.shapes.face.getFace" id="3{y}3)HzwodBiHLt@aa{">
<value name="Shape">
<block type="variables_get" id="H,hPDxVy-B|LT%l7J7%W">
<field name="VAR" id="~H97HH6!CLB*VvLc?SCH">finalShape</field>
</block>
</value>
<value name="Index">
<block type="math_number" id="?TIv[!2b|Mn*xs[2WF.s">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="NrDivisionsU">
<block type="math_number" id="2VaI:jOhiLRq+B}Ru]$@">
<field name="NUM">200</field>
</block>
</value>
<value name="NrDivisionsV">
<block type="math_number" id="QoMt|T2[xc[:#c%Z_z}?">
<field name="NUM">15</field>
</block>
</value>
<value name="ShiftHalfStepU">
<block type="logic_boolean" id="2=!klakV,-7LcoXsR~:Y">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="RemoveStartEdgeU">
<block type="logic_boolean" id="TXufxhC]:5[LSVw0c.P;">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="RemoveEndEdgeU">
<block type="logic_boolean" id="GhisjoNv]s!}}kspgy?V">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="ShiftHalfStepV">
<block type="logic_boolean" id="=E-MyjyeJ:r#V?q]8@W)">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="RemoveStartEdgeV">
<block type="logic_boolean" id="iFL^RmJ(~%CB7!59O[}:">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="RemoveEndEdgeV">
<block type="logic_boolean" id="MH^wbwNo|N_mXI$}nNUn">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</value>
<value name="Options">
<block type="bitbybit.draw.optionsSimple" id="y.iq@UMks6}aJ.WU;@Z_">
<value name="Colours">
<block type="colour_picker" id="f@VI(k,r8ZXZ$@.F}.Sf">
<field name="COLOUR">#ffffff</field>
</block>
</value>
<value name="Size">
<block type="math_number" id="$,5`dKLY%Ji{TpP)VLFp">
<field name="NUM">0.1</field>
</block>
</value>
<value name="Opacity">
<block type="math_number" id="$w:43$y=j.XfFS=}PiJP">
<field name="NUM">1</field>
</block>
</value>
<value name="Updatable">
<block type="logic_boolean" id="qc).}m}COKVJ$(O=lgrM">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="Hidden">
<block type="logic_boolean" id="AWck|-R+:RiG]AtSB:Eo">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="cHcuUCsPls$~m@VN`%%3">
<field name="VAR" id="UNOO|hja2c0m*fpQzRY@">drawnPoints2</field>
<value name="VALUE">
<block type="base_time_await_return" id="XAoAVjr/)/CIZpoZB?Hp">
<value name="Promise">
<block type="bitbybit.draw.drawAnyAsync" id="Jr]op*R;-H{q{O[U*RzC">
<value name="Entity">
<block type="bitbybit.occt.shapes.face.subdivideToPoints" id="]l`jU0%,a7D/4+XC#j-B">
<value name="Shape">
<block type="bitbybit.occt.shapes.face.getFace" id="{}6[nKWd(?C$N@XIa0Ru">
<value name="Shape">
<block type="variables_get" id="G,QGQSfTpPW26SD20+j7">
<field name="VAR" id="~H97HH6!CLB*VvLc?SCH">finalShape</field>
</block>
</value>
<value name="Index">
<block type="math_number" id="|J4[izIeBdqi,SQsJeJ9">
<field name="NUM">3</field>
</block>
</value>
</block>
</value>
<value name="NrDivisionsU">
<block type="math_number" id="yASLv{C$N~L3_idmt9oV">
<field name="NUM">200</field>
</block>
</value>
<value name="NrDivisionsV">
<block type="math_number" id="xGujrQBRr-@,C6!C]v1#">
<field name="NUM">15</field>
</block>
</value>
<value name="ShiftHalfStepU">
<block type="logic_boolean" id="1)h;{qT9M?#.vA#2,6N-">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="RemoveStartEdgeU">
<block type="logic_boolean" id="0;2Y{o(U(59b5npW}zC@">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="RemoveEndEdgeU">
<block type="logic_boolean" id="};oJi*pt#I]8[u54(4#R">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="ShiftHalfStepV">
<block type="logic_boolean" id="6@-F9OJAfT?#j)Qe%b-N">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="RemoveStartEdgeV">
<block type="logic_boolean" id="~H7F6M.e+|FvEzGe@y%W">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="RemoveEndEdgeV">
<block type="logic_boolean" id="LZ8-u5FiisvU.1)Z|v@R">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</value>
<value name="Options">
<block type="bitbybit.draw.optionsSimple" id="d[dxmG)09EC1/;T6*q)}">
<value name="Colours">
<block type="colour_picker" id="=ly0e;Y7SF%Hg91]N%f`">
<field name="COLOUR">#ffffff</field>
</block>
</value>
<value name="Size">
<block type="math_number" id="iTo~u3+F}asr$Tx0_`GP">
<field name="NUM">0.1</field>
</block>
</value>
<value name="Opacity">
<block type="math_number" id="VVK}QL[xFhaY@8YF]WSG">
<field name="NUM">1</field>
</block>
</value>
<value name="Updatable">
<block type="logic_boolean" id="u;3oB51`sg_3H9eV*bWE">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="Hidden">
<block type="logic_boolean" id="[d#0I=0/NN{gedgbG8Nz">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="yl%n,V?IwQ3V3T4CL1w/">
<field name="VAR" id="DCDlbD3Q#$PWPSGP}j3.">drawnObject</field>
<value name="VALUE">
<block type="base_time_await_return" id="os/XeY%ClVo0M07Y0|+2">
<value name="Promise">
<block type="bitbybit.draw.drawAnyAsync" id="=T8WrEQo1iCC?Eai*~dI">
<value name="Entity">
<block type="variables_get" id="nN*zB:|o=5f)Ym6+!r47">
<field name="VAR" id="~H97HH6!CLB*VvLc?SCH">finalShape</field>
</block>
</value>
<value name="Options">
<block type="bitbybit.draw.optionsOcctShapeMaterial" id="xa(QKpr]Jc`5dp6f|qqz">
<value name="Precision">
<block type="math_number" id="05YLh2)7U10;lp+P?4/C">
<field name="NUM">0.005</field>
</block>
</value>
<value name="FaceMaterial">
<block type="bitbybit.babylon.material.pbrMetallicRoughness.create" id="hsY7=t$($=Mmi%YYIl,H">
<value name="Name">
<block type="text" id="f$?uZ?az=Zk@tcbn*,/f">
<field name="TEXT">Custom Name</field>
</block>
</value>
<value name="BaseColor">
<block type="colour_picker" id="];s3ztOL!WWgQL~R4W1f">
<field name="COLOUR">#ff0000</field>
</block>
</value>
<value name="Metallic">
<block type="math_number" id="1D7c~-?I#B8pj2Cx03SK">
<field name="NUM">0.4</field>
</block>
</value>
<value name="Roughness">
<block type="math_number" id="BSrbyIM?g/`N(5XZcCtg">
<field name="NUM">0.6</field>
</block>
</value>
<value name="Alpha">
<block type="math_number" id="{;b7^El(={l^YI=fYKxm">
<field name="NUM">1</field>
</block>
</value>
<value name="BackFaceCulling">
<block type="logic_boolean" id="X{Oop:Jb.gRK?fAoH$Mi">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="ZOffset">
<block type="math_number" id="-}OwtOi0a949.}d(BZ@T">
<field name="NUM">2</field>
</block>
</value>
</block>
</value>
<value name="DrawEdges">
<block type="logic_boolean" id="Y{zlG2rB?s;H{[2:Q_7-">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="EdgeColour">
<block type="colour_picker" id="Z}-T{;EP4Q2)A69)x*(X">
<field name="COLOUR">#ffffff</field>
</block>
</value>
<value name="EdgeWidth">
<block type="math_number" id="5AIJ)hJGaokosG?_Ij,I">
<field name="NUM">3</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.setParent" id="E|n+s_BW@i~%FpMy=SaQ">
<value name="BabylonMesh">
<block type="variables_get" id="12I1%)Ba,F}m%+]=WQQd">
<field name="VAR" id="xNL=rfomO2om!X)}Gex6">drawnPoints1</field>
</block>
</value>
<value name="ParentMesh">
<block type="variables_get" id="Xi$cLRZTBl0|WJOCXmcB">
<field name="VAR" id="8=3cW$e96!W|mj;A1{iB">ground</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.setParent" id="k,{0m:~rTZ%kP,!Qx=~X">
<value name="BabylonMesh">
<block type="variables_get" id="AX~GKU-a#bu5te1jrf/Y">
<field name="VAR" id="UNOO|hja2c0m*fpQzRY@">drawnPoints2</field>
</block>
</value>
<value name="ParentMesh">
<block type="variables_get" id="MC4gn+?g.s!#=GfV0e7P">
<field name="VAR" id="8=3cW$e96!W|mj;A1{iB">ground</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.setParent" id="@^m6nW:nQJ+D-9!3{GAz">
<value name="BabylonMesh">
<block type="variables_get" id=":LbDlQu6_M2`sV!kFCi2">
<field name="VAR" id="DCDlbD3Q#$PWPSGP}j3.">drawnObject</field>
</block>
</value>
<value name="ParentMesh">
<block type="variables_get" id="%|bl;,;2O?7501?3E^gU">
<field name="VAR" id="8=3cW$e96!W|mj;A1{iB">ground</field>
</block>
</value>
<next>
<block type="base_time_update" id="Ahz6-L!C1nIMOxf!kFi6">
<field name="TimePassedMs" id="*![r]sgpifD/Iq)*$PFH">timeElapsedFromPreviousFrame</field>
<statement name="Update">
<block type="bitbybit.babylon.mesh.yaw" id="`EnE/5K~FbKbOf_8ihL7">
<value name="BabylonMesh">
<block type="variables_get" id="BxUj{Q|v4/D3PI0(`9t[">
<field name="VAR" id="8=3cW$e96!W|mj;A1{iB">ground</field>
</block>
</value>
<value name="Rotate">
<block type="math_number" id="Ly;0ufl{biC]L9eEL%I5">
<field name="NUM">0.05</field>
</block>
</value>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</xml>
Editor plans for 3D development, API keys for server-side CAD algorithms
Cloud storage, private projects & 3D algorithms for Bitbybit editors
Run CAD algorithms on managed cloud servers from your own backend applications
Custom software development, dedicated servers & CAD automation at scale.