
blocklyThis example is showing off the possibilities of Async OpenCascade components and advanced rendering of "Bit by bit developers" application. You might need to have a more powerful GPU to have the scene rendered at good frame rates.
This script is large, so only its beginning is shown here. Open it in the editor to see all of it.
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable id="4WruCBSlau2%ruGq!04D">shape</variable>
<variable id="en+U|i2=vn%/#3)ye(SD">faceColour</variable>
<variable id="!j+!g5nn:`O9kdtviDLc">faceOpacity</variable>
<variable id=",M+tf-g=1M%qw%s|ZxT)">precision</variable>
<variable id="RTBglAnS1@9+0]h3}7Mk">length</variable>
<variable id="]3~JKnFIby15=7ESrBhf">loft</variable>
<variable id="L^*nFd$$-XqdXoKks6MG">hexagonGlass</variable>
<variable id="_tmj52.^)E~]![ZE4DgW">drawnGround</variable>
<variable id="P=|){?hEsDq=EBy5/n3b">movedPointsForTops</variable>
<variable id="*@zwFl?f~xJj7m:}u0LO">hexGridNrX</variable>
<variable id="qtMp~e:nxaN%`VwUR|gC">glassGroupCompound</variable>
<variable id="CMn7/qoHh~%SLc(|PtQ1">occtShape</variable>
<variable id="tBlJB)v83o3exilg.RS7">nurbsSurface</variable>
<variable id=":1*%s_jb6mlTX^IXip?q">pointsOnSurface</variable>
<variable id="AB)8^b,V{lNVI1:BE}gt">innerSideLength</variable>
<variable id="%5(}p*ezX1vn+ub0o0,%">filletBase</variable>
<variable id="m;we^sq=tw]*PAEpOa1=">hexagonBase</variable>
<variable id="Em0l*h`=,-xuV42;Jzt8">hexGridNrY</variable>
<variable id="dABBv7*ou}Uu625}QhUl">baseGroupCompound</variable>
<variable id="m:AuG!cTPboqR76Eb`FC">m</variable>
<variable id="szQI}9nQa$%_jX_Bv(uc">point1</variable>
<variable id="B}dlS./rL5]0g#xOiT[=">chamferEdgeIndexes</variable>
<variable id="!0p6ApRy`{K@6$_|`LSU">hexagonGlassOnSrf</variable>
<variable id="my|Y~G+Aib^EEpdRR;id">bulbBoxMesh</variable>
<variable id="5hRIZ.lOkM97i3[e)8BA">firstTime</variable>
<variable id="ibE`Uhb2`rE^/8i=7@VE">hexGridPoints</variable>
<variable id="at.4_1NUcO=e%+/pU)}H">bulbBox</variable>
<variable id="~UF48{W8a(Avb99Y$Z?T">lineOrient</variable>
<variable id="E#ZK7*u*s/T05?Ar81uE">chamferGlass</variable>
<variable id="h(45Hn~+gx0.6%Q8o}#~">hexagonBaseOnSrf</variable>
<variable id="C_l,t!QA]Z!c2*(=tr}3">n</variable>
<variable id=".:lEfGx]982[{A_Flu?{">hexGridPointsMoved</variable>
<variable id="W$l5QY6N?h-b5NX]n}WV">linesForIntersection</variable>
<variable id="1IeB*p@O]}=y-xmv^/P:">point2</variable>
<variable id="JMa2`*NQ}|rl)i:Gc.ax">i</variable>
<variable id="^O5PHAYPIZj:)XeB8~o{">glassGroupCompoundMesh</variable>
<variable id="5/;~?2:]@xKw*P}lAY5w">point3</variable>
<variable id="$x1qy{t}ng8GQ*x0E5OX">j</variable>
<variable id="k*f._K?3rpWKa~1^%9ih">baseGroupCompoundMesh</variable>
<variable id="t#=dA;N03:z2G`d$k8F7">baseTriangle</variable>
<variable id="F/d7r%}[z-=4Hy-G.Pbp">k</variable>
</variables>
<block type="procedures_callnoreturn" id="X[?CAO/@MS)h3ke8o,8w" x="-6560" y="-516">
<mutation name="createLightsAndAdjustCamera">
</mutation>
<next>
<block type="procedures_callnoreturn" id="rE~zMYS[nnz(-!8rl0hW">
<mutation name="baseSetupForHexagonTriangleShape">
</mutation>
<next>
<block type="procedures_callnoreturn" id="k24/MVJV}N6U{^Xq%jd3">
<mutation name="makeHexGridAndVerticalLinesForIntersection">
</mutation>
<next>
<block type="procedures_callnoreturn" id="XDPUo{QIHmDVqI~!CiAv">
<mutation name="createNurbsSurfaceForHexGridProjections">
</mutation>
<next>
<block type="procedures_callnoreturn" id=",0c#PLNSxBmC5u+{q{)|">
<mutation name="findIntersectionsOnSurface">
</mutation>
<next>
<block type="procedures_callnoreturn" id="tHU2Lk/COHk$%_4x8F=C">
<mutation name="createBaseTriangleShapeAndGlass">
</mutation>
<next>
<block type="procedures_callnoreturn" id="%6X~eD0hvb}F]bY:2A5o">
<mutation name="rotateTriangleToHexagons">
</mutation>
<next>
<block type="procedures_callnoreturn" id="D@t[!cINL!4jru#hk2os">
<mutation name="createAndDrawGround">
</mutation>
<next>
<block type="procedures_callnoreturn" id="+yzb/B;t^a!D$Ev*E0_T">
<mutation name="createCompoundMeshesForDrawing">
</mutation>
<next>
<block type="procedures_callnoreturn" id="2q~HzY,F10cRlxex9[$5">
<mutation name="drawOptimizedMeshInstances">
</mutation>
<next>
<block type="procedures_callnoreturn" id="gyw]Ka9GbZLX|H/S7}mB">
<mutation name="higherQualityDrawingOfOCCModel">
</mutation>
<next>
<block type="procedures_callnoreturn" id="Cke)/OW-GEFNa)Dzs3a9">
<mutation name="drawVerticalColumns">
</mutation>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
<block type="procedures_defnoreturn" id="XZ%T8k$8JQ1~kdXRlzRv" x="-5943" y="-514">
<field name="NAME">baseSetupForHexagonTriangleShape</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="variables_set" id="Mn]fjzpnbINy(-vn;sX.">
<field name="VAR" id="RTBglAnS1@9+0]h3}7Mk">length</field>
<value name="VALUE">
<block type="math_number" id="eu_;iC:HCj~D;lu?fz@3">
<field name="NUM">20</field>
</block>
</value>
<next>
<block type="variables_set" id="D?(!ogH5WQ9?utgi]Gd`">
<field name="VAR" id="AB)8^b,V{lNVI1:BE}gt">innerSideLength</field>
<value name="VALUE">
<block type="math_number" id="kqGS7-^ez[7@w@Y:Zhk8">
<field name="NUM">3</field>
</block>
</value>
<next>
<block type="variables_set" id="p^1@-`Sg{D.QJrG5Im[;">
<field name="VAR" id="szQI}9nQa$%_jX_Bv(uc">point1</field>
<value name="VALUE">
<block type="bitbybit.point.pointXYZ" id=":4APa)A[Bgp/!P{F(bCH">
<value name="X">
<block type="math_number" id="@@?:hQ!sEcQW}!2tHer!">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="d+deNpc[gHE?2w@v`[pl">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id=";-t/?kedyS(ft3M^z*;k">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="Q!rY@DaqzhUcZzDp$,TY">
<field name="VAR" id="~UF48{W8a(Avb99Y$Z?T">lineOrient</field>
<value name="VALUE">
<block type="bitbybit.line.create" id="bHV)gz-Hq?s8{kiWsxL2">
<value name="Start">
<block type="bitbybit.point.pointXYZ" id="BiS%$K9B;)83jYDIbcx1">
<value name="X">
<block type="math_number" id="9EU#as]paiiF2F?RBo|f">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id=";OmX,CV7s=Fl$I3c/}C@">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="}iGe+LPBM0pCYCg4M1Iv">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="End">
<block type="bitbybit.point.pointXYZ" id="=KL`z*H+gEo42n7K.,[=">
<value name="X">
<block type="math_number" id="UW/^FL5R{xopAiEyPem2">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="Yjw7IkxSIy(NXQP9![@S">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="variables_get" id="VWqm$;XxXY}gzYYwW8a0">
<field name="VAR" id="RTBglAnS1@9+0]h3}7Mk">length</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id=")e8=SIe4[7u!lyv$S6^7">
<field name="VAR" id="1IeB*p@O]}=y-xmv^/P:">point2</field>
<value name="VALUE">
<block type="bitbybit.line.getEndPoint" id="1HN@a}}5Zhs_EdE]g):v">
<value name="Line">
<block type="bitbybit.line.transformLine" id="S;KPh(Z;q9=/1_bLIai8">
<value name="Line">
<block type="variables_get" id=")qV{iGAPI^t@U{:|a~AQ">
<field name="VAR" id="~UF48{W8a(Avb99Y$Z?T">lineOrient</field>
</block>
</value>
<value name="Transformation">
<block type="bitbybit.babylon.transforms.rotationCenterY" id="jOHnD5joB!Z)O^}gz}Bq">
<value name="Angle">
<block type="math_number" id="M6H}s*L.:*-wY6`uQX!M">
<field name="NUM">59.09</field>
</block>
</value>
<value name="Center">
<block type="bitbybit.vector.vectorXYZ" id="y:|^C[1M;zxvw8la$`fV">
<value name="X">
<block type="math_number" id="wEPyV(p+(tIRINy*U^Po">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id=".FQu(|%GyWx*{lw@5Sie">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="Zl)m5W#m,/g7#Y]85|Tn">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="@nfjJmTfERzHymoEhpY{">
<field name="VAR" id="5/;~?2:]@xKw*P}lAY5w">point3</field>
<value name="VALUE">
<block type="bitbybit.line.getEndPoint" id="Hc;}AeV@3l8/zxi[V!=w">
<value name="Line">
<block type="bitbybit.line.transformLine" id="y@1N%uy_q/%-QoKvFmn$">
<value name="Line">
<block type="variables_get" id="058eJWATWD0$kZJ0w}f!">
<field name="VAR" id="~UF48{W8a(Avb99Y$Z?T">lineOrient</field>
</block>
</value>
<value name="Transformation">
<block type="bitbybit.babylon.transforms.rotationCenterY" id="Y;7Fqbt/NjE;|^JZbIgw">
<value name="Angle">
<block type="math_number" id="[l%jR_vMh3Fz|lME+0pX">
<field name="NUM">0.01</field>
</block>
</value>
<value name="Center">
<block type="bitbybit.vector.vectorXYZ" id="[RnY?R,VED5m`zvBf^v8">
<value name="X">
<block type="math_number" id="yRay)q%2UYD?Dp5r#POo">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="4UJNGt5`#46s:@{$oq-E">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="zs)u}(M#`.9w4`)qF6ef">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="bui[,7WGz+F;YgXr1z!Z">
<field name="VAR" id="t#=dA;N03:z2G`d$k8F7">baseTriangle</field>
<value name="VALUE">
<block type="bitbybit.occt.shapes.wire.createPolygonWire" id="U4AG6JrdgLT/3@[PN}OA">
<value name="Points">
<block type="lists_create_with" id=".B{8s3FEAMg`4,Ck*v(]">
<mutation items="3">
</mutation>
<value name="ADD0">
<block type="variables_get" id="MbuzCX^rZ*TCsNkUByI5">
<field name="VAR" id="szQI}9nQa$%_jX_Bv(uc">point1</field>
</block>
</value>
<value name="ADD1">
<block type="variables_get" id="J(0ZD6yrJf6/~w2ZZtcH">
<field name="VAR" id="1IeB*p@O]}=y-xmv^/P:">point2</field>
</block>
</value>
<value name="ADD2">
<block type="variables_get" id="L[TfQkEa~/W5tJGU_%(F">
<field name="VAR" id="5/;~?2:]@xKw*P}lAY5w">point3</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="*5%C.=tY}kCvv%{F$6o," x="-5003" y="-528">
<field name="NAME">createLightsAndAdjustCamera</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="bitbybit.babylon.scene.adjustActiveArcRotateCamera" id="kcR@9Xr8$Bl%7n%#D}gY">
<value name="Position">
<block type="bitbybit.point.pointXYZ" id="3s99[)eXN=Yob3;2yt`X">
<value name="X">
<block type="math_number" id="?6vYI@p@pCneyV8r0@J9">
<field name="NUM">250</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="F;CM%-%K[6h8IaNY$gfB">
<field name="NUM">170</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="10{}v,_O~5rL]/}7fkAK">
<field name="NUM">250</field>
</block>
</value>
</block>
</value>
<value name="LookAt">
<block type="bitbybit.point.pointXYZ" id="ux!SvoRkF:1+dQhZLVdY">
<value name="X">
<block type="math_number" id="o%/@^Wctm%Iu*R0z@6Wi">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="/0zdS853y]]Qn0V;CwBl">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="q_z-{:xT,zE`8viq@FXL">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="MaxZ">
<block type="math_number" id="8tg5@DIC1E:-3)os2/c]">
<field name="NUM">10000</field>
</block>
</value>
<value name="PanningSensibility">
<block type="math_number" id="A^c=.{mMf(c,+d713hq[">
<field name="NUM">100</field>
</block>
</value>
<value name="WheelPrecision">
<block type="math_number" id=".ape9F*ESORSh19+(Rkh">
<field name="NUM">3</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.scene.drawPointLightNoReturn" id="@odG+3%`4I/DUjgWq+#$">
<value name="Position">
<block type="bitbybit.point.pointXYZ" id="}|Kvibbu:3SZTp.*oo$l">
<value name="X">
<block type="math_number" id=".Xl0~joW,$y5F*I~G+Sv">
<field name="NUM">200</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="+Pn7dX396pU.Y99E!8Ou">
<field name="NUM">130</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="sSMJNaCGg|vStKhJipyT">
<field name="NUM">200</field>
</block>
</value>
</block>
</value>
<value name="Intensity">
<block type="math_number" id="3qLSS9SUSe6(+cli^($(">
<field name="NUM">60000</field>
</block>
</value>
<value name="Diffuse">
<block type="colour_picker" id="{svHnG9=}y$c}6A@DzwG">
<field name="COLOUR">#ff99ff</field>
</block>
</value>
<value name="Specular">
<block type="colour_picker" id="+#A[@jZ}5B_il5pz(WIu">
<field name="COLOUR">#ffffff</field>
</block>
</value>
<value name="Radius">
<block type="math_number" id="lNa$w:/[)C:}(NO9`(:f">
<field name="NUM">0.5</field>
</block>
</value>
<value name="ShadowGeneratorMapSize">
<block type="math_number" id="u.wZPa~9I/.k=-6_Utsp">
<field name="NUM">1024</field>
</block>
</value>
<value name="EnableShadows">
<block type="logic_boolean" id="8:!bX}s{XBoEs$I,2Stz">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="ShadowDarkness">
<block type="math_number" id="TqTsl50Vn4V|hb!0pNc)">
<field name="NUM">0</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.scene.drawPointLightNoReturn" id=";jz84T#sw6Oyk=iN7M8$">
<value name="Position">
<block type="bitbybit.point.pointXYZ" id="g.n%M/T=||%FjQ*nAaro">
<value name="X">
<block type="math_number" id="wcC68DSTDXN^{}]-*X3_">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="^raD?ThN4v~om(eX{GK@">
<field name="NUM">160</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="8o!WZ0K*I.*!G]{HnN.i">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="Intensity">
<block type="math_number" id="jA*t2*g?,s8xZ2cMfJ^K">
<field name="NUM">60000</field>
</block>
</value>
<value name="Diffuse">
<block type="colour_picker" id="sfQ*wJwI-~Yvwr.w@P|f">
<field name="COLOUR">#ff99ff</field>
</block>
</value>
<value name="Specular">
<block type="colour_picker" id="rS(g:4L~hqfL{jSGvfHM">
<field name="COLOUR">#ffffff</field>
</block>
</value>
<value name="Radius">
<block type="math_number" id=";f12W.}R[xl0|%~+0jNB">
<field name="NUM">0.5</field>
</block>
</value>
<value name="ShadowGeneratorMapSize">
<block type="math_number" id="%tmRjD5L2(3MI^]]ci)S">
<field name="NUM">1024</field>
</block>
</value>
<value name="EnableShadows">
<block type="logic_boolean" id="Mg+21Fl|IH29sK|3ZEUj">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="ShadowDarkness">
<block type="math_number" id="rsjAFKSOE@.rcfIPk2q5">
<field name="NUM">0</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.scene.drawPointLightNoReturn" id="h76%3#P6XlQ^s*1M^!P$">
<value name="Position">
<block type="bitbybit.point.pointXYZ" id="wA!Hp;,d)1zA,D~$;;.8">
<value name="X">
<block type="math_number" id="42Jt~A%qlw%Z$kMNLZ}O">
<field name="NUM">200</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="X}4C5AVs#d)]SK^S`@g*">
<field name="NUM">90</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="[j18X/1(@-I1+F;H}lkh">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="Intensity">
<block type="math_number" id="Gb=cd-4kacYo^`=|Z?GT">
<field name="NUM">60000</field>
</block>
</value>
<value name="Diffuse">
<block type="colour_picker" id="RuK[8PgT{;2VU6#X5`jw">
<field name="COLOUR">#ff99ff</field>
</block>
</value>
<value name="Specular">
<block type="colour_picker" id="UcP/J3,ZmkTf:3RW$tW_">
<field name="COLOUR">#ffffff</field>
</block>
</value>
<value name="Radius">
<block type="math_number" id="C{%:UyVs5m36L`w+J$~6">
<field name="NUM">0.5</field>
</block>
</value>
<value name="ShadowGeneratorMapSize">
<block type="math_number" id="`CS~Ci6{VUVs9Oz]x!Z%">
<field name="NUM">1024</field>
</block>
</value>
<value name="EnableShadows">
<block type="logic_boolean" id="as.TLmQ;j$sT|o3`?k^#">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="ShadowDarkness">
<block type="math_number" id="wULPTQ?Y2Ct/9D%s0DN;">
<field name="NUM">0</field>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="R!~5+Qj{7(T=9W.bNqbp" x="-4433" y="-518">
<field name="NAME">createBaseTriangleShapeAndGlass</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="variables_set" id="Jp9eKKOhgOI3[c$;2=)r">
<field name="VAR" id="]3~JKnFIby15=7ESrBhf">loft</field>
<value name="VALUE">
<block type="bitbybit.occt.operations.loft" id=")!d:qurTtU,lh{Y:ln.U">
<value name="Shapes">
<block type="lists_create_with" id="S^s%?D^=Do?)ne6SqEwj">
<mutation items="2">
</mutation>
<value name="ADD0">
<block type="bitbybit.occt.shapes.wire.createPolygonWire" id="fGHz_@vORt2%sCMEsnK9">
<value name="Points">
<block type="lists_create_with" id="DP8hx(`LI|IHTBW/uQao">
<mutation items="3">
</mutation>
<value name="ADD0">
<block type="bitbybit.point.pointXYZ" id="Ck@]if`I!]{$N^lJ-:]Y">
<value name="X">
<block type="math_number" id="WOC/v]@iMc.$@o3+1DI`">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="hSvtKL-~tIQJ$xI{KzI[">
<field name="NUM">5</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="p-V235A94XI]hhI0~C;c">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="ADD1">
<block type="bitbybit.point.pointXYZ" id="tbY2rHMf#Nk8[31i}Y(m">
<value name="X">
<block type="bitbybit.point.getX" id="!nQ5N{64H[]^L1=R?%1Q">
<value name="Point">
<block type="variables_get" id="2#D{}o!*}^A+;-rNcIl:">
<field name="VAR" id="1IeB*p@O]}=y-xmv^/P:">point2</field>
</block>
</value>
</block>
</value>
<value name="Y">
<block type="math_number" id="END.ObkkSRkjM6@JgCly">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="bitbybit.point.getZ" id="}Jy;uuTGasY~OJ4dme(+">
<value name="Point">
<block type="variables_get" id="/S%CAxI0c7GzggdRD0SX">
<field name="VAR" id="1IeB*p@O]}=y-xmv^/P:">point2</field>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="ADD2">
<block type="bitbybit.point.pointXYZ" id="K|Xw]$^X=pkAatV[@bW5">
<value name="X">
<block type="bitbybit.point.getX" id="TlhZ?+C5+[b|BHdKPW(h">
<value name="Point">
<block type="variables_get" id="ZN0Zo(EVp85Jaa~TC85T">
<field name="VAR" id="5/;~?2:]@xKw*P}lAY5w">point3</field>
</block>
</value>
</block>
</value>
<value name="Y">
<block type="math_number" id="N8c%|8lW~s/r;]J0wRhD">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="bitbybit.point.getZ" id=",K?2fex(W/N06K`lDzA,">
<value name="Point">
<block type="variables_get" id=";.u(Il}a+z${-c)$?gn;">
<field name="VAR" id="5/;~?2:]@xKw*P}lAY5w">point3</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="ADD1">
<block type="bitbybit.occt.shapes.wire.createPolygonWire" id="svzS:~0Y583U-:83?}=z">
<value name="Points">
<block type="lists_create_with" id="ssh%5)=jOA%L,=%EZSrt">
<mutation items="3">
</mutation>
<value name="ADD0">
<block type="bitbybit.point.pointXYZ" id="sK4bMF0MAh+0tf*O{3ae">
<value name="X">
<block type="math_number" id="65nb-LkXz=*}N~0}^PC`">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="SY=bi]hJg6)k`0:|=-KI">
<field name="NUM">10</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="[%PDw`5zL3mHZ5pZQxGC">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="ADD1">
<block type="bitbybit.point.pointXYZ" id="8o5wwPy:8OR-HTs1rM#m">
<value name="X">
<block type="bitbybit.point.getX" id="V8W-~[yDrw(m-+b!~wzU">
<value name="Point">
<block type="variables_get" id="lJ;;xcqU1VaUVxW,XFIB">
<field name="VAR" id="1IeB*p@O]}=y-xmv^/P:">point2</field>
</block>
</value>
</block>
</value>
<value name="Y">
<block type="math_number" id="q9@z;Vasxe|LHQfdAHgw">
<field name="NUM">14</field>
</block>
</value>
<value name="Z">
<block type="bitbybit.point.getZ" id="Zm#FX=f%Zm.pEQV)hRx!">
<value name="Point">
<block type="variables_get" id="kN+Rt`y2H]vx@VD!MNt0">
<field name="VAR" id="1IeB*p@O]}=y-xmv^/P:">point2</field>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="ADD2">
<block type="bitbybit.point.pointXYZ" id="a+t+0Z?xvne$lFyC7-94">
<value name="X">
<block type="bitbybit.point.getX" id="CjR]!*cZp#GS0#~E+cY(">
<value name="Point">
<block type="variables_get" id="8HZjNSBYqWeoDT%/apKO">
<field name="VAR" id="5/;~?2:]@xKw*P}lAY5w">point3</field>
</block>
</value>
</block>
</value>
<value name="Y">
<block type="math_number" id="d--!:vvXe5BB|U4v*xW$">
<field name="NUM">14</field>
</block>
</value>
<value name="Z">
<block type="bitbybit.point.getZ" id="00m]Q:L6Aq.I!{Y%t[N.">
<value name="Point">
<block type="variables_get" id="+Q]%fy~kG^Pi$:RD}Dop">
<field name="VAR" id="5/;~?2:]@xKw*P}lAY5w">point3</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="MakeSolid">
<block type="logic_boolean" id="z$:C/mBwz2dI,J)PcAz~">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="$opg7[_.DtZ{YgxQ)1]j">
<field name="VAR" id="%5(}p*ezX1vn+ub0o0,%">filletBase</field>
<value name="VALUE">
<block type="bitbybit.occt.fillets.filletEdges" id="T/aQ-P#YyWRsf@am}atD">
<value name="Shape">
<block type="bitbybit.occt.booleans.difference" id="hI$OUYCHd_scKg=GR[0L">
<value name="Shape">
<block type="variables_get" id="U.Lvm+:aQ*menkx~XTE.">
<field name="VAR" id="]3~JKnFIby15=7ESrBhf">loft</field>
</block>
</value>
<value name="Shapes">
<block type="lists_create_with" id="+hN=VzSb:-o^t/}_3whw">
<mutation items="1">
</mutation>
<value name="ADD0">
<block type="bitbybit.occt.operations.extrude" id="N]2exQ~D$gY:DlF-6h]%">
<value name="Shape">
<block type="bitbybit.occt.shapes.face.createFaceFromWire" id=",a}qR1Dg9QrUqWlwa;/s">
<value name="Shape">
<block type="bitbybit.occt.operations.offset" id="B|hZnS1nv$T3C^Q}!8S9">
<value name="Shape">
<block type="variables_get" id="G/e,i$e#QHAB:i_E+}cV">
<field name="VAR" id="t#=dA;N03:z2G`d$k8F7">baseTriangle</field>
</block>
</value>
<value name="Distance">
<block type="math_number" id="WSbvys4|ma2rZ5Q%QZ`R">
<field name="NUM">-1.5</field>
</block>
</value>
<value name="Tolerance">
<block type="math_number" id="bm#e8B5}cS=/ns$n_x8t">
<field name="NUM">0.00001</field>
</block>
</value>
</block>
</value>
<value name="Planar">
<block type="logic_boolean" id="r%b)3V75];C$q4(kuB?/">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</value>
<value name="Direction">
<block type="bitbybit.point.pointXYZ" id="8d~nIj?-_^HOd(rbujCP">
<value name="X">
<block type="math_number" id="M|0C}i];I*Scjg$37$VH">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="N`[0EMx3?TUQcZX4LhGJ">
<field name="NUM">50</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="1#q-Ddc?Z/;Gs|9o^%s9">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="KeepEdges">
<block type="logic_boolean" id="L$_Uq#4=4QofpoN5dNi^">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</value>
<value name="Radius">
<block type="math_number" id="Bek%.tWu`$1!)mLiCnwO">
<field name="NUM">0.6</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="]WBm|4CbYES!fcs?@NF%">
<field name="VAR" id="B}dlS./rL5]0g#xOiT[=">chamferEdgeIndexes</field>
<value name="VALUE">
<block type="lists_create_with" id="oKWtO-yah$;);Hq_Ee1d">
<mutation items="3">
</mutation>
<value name="ADD0">
<block type="math_number" id=":bfGD^me*16oEUhGDetW">
<field name="NUM">15</field>
</block>
</value>
<value name="ADD1">
<block type="math_number" id=",.u~uWXVv0Z/j#(U+$uV">
<field name="NUM">12</field>
</block>
</value>
<value name="ADD2">
<block type="math_number" id="4#zK{U=dh$v$^[!Z+,~M">
<field name="NUM">3</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id=")-7v1-B=YfFx4BjU[~}$">
<field name="VAR" id="E#ZK7*u*s/T05?Ar81uE">chamferGlass</field>
<value name="VALUE">
<block type="bitbybit.occt.fillets.chamferEdges" id="0Ou_%MEs4Y5hgWBp09(U">
<value name="Shape">
<block type="bitbybit.occt.operations.extrude" id="eUV+^94T2zd=x{P.M!:q">
<value name="Shape">
<block type="bitbybit.occt.shapes.face.createFaceFromWire" id="nldFH::01.fr]/D,a1ZV">
<value name="Shape">
<block type="bitbybit.occt.shapes.wire.getWire" id="oWx%/4H/,Pj{#G,Sm!j@">
<value name="Shape">
<block type="variables_get" id="CZ37j}%XxPz(}J~[:[(9">
<field name="VAR" id="%5(}p*ezX1vn+ub0o0,%">filletBase</field>
</block>
</value>
<value name="Index">
<block type="math_number" id="}nLKxYTOKCWtOeQ+3L}Q">
<field name="NUM">14</field>
</block>
</value>
</block>
</value>
<value name="Planar">
<block type="logic_boolean" id="{J*$!,tKK3Ls0y,G)+10">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</value>
<value name="Direction">
<block type="bitbybit.point.pointXYZ" id="ilj-x)g-):Xwx)mUP*8n">
<value name="X">
<block type="math_number" id="X0elynbqp.~@LN:fT9iz">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id=":v9LGfz*T_!AH]V_a=V/">
<field name="NUM">1</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="E}MiY6`Cic(=iMI`gm_~">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="Distance">
<block type="math_number" id="c78`oVl-X6t]n}`;k}YB">
<field name="NUM">0.5</field>
</block>
</value>
<value name="Indexes">
<block type="variables_get" id="b6d,%A2*X7YzM(8l;(64">
<field name="VAR" id="B}dlS./rL5]0g#xOiT[=">chamferEdgeIndexes</field>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="=Fz6V|+jf:O)J3jMX(ln" x="-2822" y="-537">
<field name="NAME">rotateTriangleToHexagons</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="variables_set" id="YD]L!v9fK~haQ6/`8,R;">
<field name="VAR" id="L^*nFd$$-XqdXoKks6MG">hexagonGlass</field>
<value name="VALUE">
<block type="lists_create_with" id="MW}itN1UeooiwDzR)j8t">
<mutation items="0">
</mutation>
</block>
</value>
<next>
<block type="variables_set" id="3)l+]bGi:NUV*:dhzQ[A">
<field name="VAR" id="m;we^sq=tw]*PAEpOa1=">hexagonBase</field>
<value name="VALUE">
<block type="lists_create_with" id="K=ZRvwLw=6EZ*lXIdrrK">
<mutation items="0">
</mutation>
</block>
</value>
<next>
<block type="variables_set" id="lc|`UCh7L4Mh^4LcHv{C">
<field name="VAR" id="!0p6ApRy`{K@6$_|`LSU">hexagonGlassOnSrf</field>
<value name="VALUE">
<block type="lists_create_with" id="7kru!7`(K6T/9lJHE4Gg">
<mutation items="0">
</mutation>
</block>
</value>
<next>
<block type="variables_set" id="Czevlw3GEr+)Fmn=(JwQ">
<field name="VAR" id="h(45Hn~+gx0.6%Q8o}#~">hexagonBaseOnSrf</field>
<value name="VALUE">
<block type="lists_create_with" id="Jp/2T6@X{s!7LK?=R*/X">
<mutation items="0">
</mutation>
</block>
</value>
<next>
<block type="controls_for" id="G.KqQnaP.cTP[He}Ghn#">
<field name="VAR" id="JMa2`*NQ}|rl)i:Gc.ax">i</field>
<value name="FROM">
<block type="math_number" id="N27VHI-Xrtr#vPlq`Ts3">
<field name="NUM">60</field>
</block>
</value>
<value name="TO">
<block type="math_number" id="MeH*oMR5~[aoODs,#q]U">
<field name="NUM">300</field>
</block>
</value>
<value name="BY">
<block type="math_number" id="Q![t3gW?[FAH?2@/v`~(">
<field name="NUM">60</field>
</block>
</value>
<statement name="DO">
<block type="lists_setIndex" id="*c8*_ry=B*5E0.%9zn@/">
<mutation at="false">
</mutation>
<field name="MODE">INSERT</field>
<field name="WHERE">LAST</field>
<value name="LIST">
<block type="variables_get" id="e@]A~~U?qdHKGGTLfX0.">
<field name="VAR" id="L^*nFd$$-XqdXoKks6MG">hexagonGlass</field>
</block>
</value>
<value name="TO">
<block type="bitbybit.occt.transforms.rotate" id="lt*w^}.8S$ucCbA0-3L}">
<value name="Shape">
<block type="variables_get" id="o)0;e,n]!ZVWdOPldyqS">
<field name="VAR" id="E#ZK7*u*s/T05?Ar81uE">chamferGlass</field>
</block>
</value>
<value name="Axis">
<block type="bitbybit.point.pointXYZ" id="I]5i_)]a)Zc^aF9!vA%1">
<value name="X">
<block type="math_number" id="0vMFy=,~O,I;gWL6n.)6">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="%gxeXtAy(K||4z6.EhCR">
<field name="NUM">1</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="?CT~@$aK(r:]9+|h3cV=">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="Angle">
<block type="variables_get" id="A)eh;o#Sr*aWac4@y|z@">
<field name="VAR" id="JMa2`*NQ}|rl)i:Gc.ax">i</field>
</block>
</value>
</block>
</value>
</block>
</statement>
<next>
<block type="controls_for" id="HOtSZg0LyuVPD;}]$:}c">
<field name="VAR" id="$x1qy{t}ng8GQ*x0E5OX">j</field>
<value name="FROM">
<block type="math_number" id="VX@YXR9Sgcvk1AAcGS@s">
<field name="NUM">60</field>
</block>
</value>
<value name="TO">
<block type="math_number" id="|6JEENDt^g2q#?6#REwC">
<field name="NUM">300</field>
</block>
</value>
<value name="BY">
<block type="math_number" id="d0:`s%PWM-MicbXx$dYB">
<field name="NUM">60</field>
</block>
</value>
<statement name="DO">
<block type="lists_setIndex" id="?@#j/PqKmN%Un~m+[_4B">
<mutation at="false">
</mutation>
<field name="MODE">INSERT</field>
<field name="WHERE">LAST</field>
<value name="LIST">
<block type="variables_get" id="jOFY!5Sn:KT]HF]|suLY">
<field name="VAR" id="m;we^sq=tw]*PAEpOa1=">hexagonBase</field>
</block>
</value>
<value name="TO">
<block type="bitbybit.occt.transforms.rotate" id="F4gF2Fu].Uhq9q26EH~0">
<value name="Shape">
<block type="variables_get" id="kRM4ntux;l+De=?/4_MI">
<field name="VAR" id="%5(}p*ezX1vn+ub0o0,%">filletBase</field>
</block>
</value>
<value name="Axis">
<block type="bitbybit.point.pointXYZ" id="=Uwr5qq.fbD@8T`+ma-{">
<value name="X">
<block type="math_number" id="_MBg_r]Mr!}A#/W9wuVA">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="O%%rHT@qQCKCd^K/ZS@$">
<field name="NUM">1</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="eT:J6v?I+K.)u-TzOZ@A">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="Angle">
<block type="variables_get" id="4$@:Vyu#}bl`w`u#Cuyf">
<field name="VAR" id="$x1qy{t}ng8GQ*x0E5OX">j</field>
</block>
</value>
</block>
</value>
</block>
</statement>
<next>
<block type="controls_for" id="|]2QmzVux5HbtV1i8UBE">
<field name="VAR" id="JMa2`*NQ}|rl)i:Gc.ax">i</field>
<value name="FROM">
<block type="math_number" id="FLQJ;ZebSW`YoA.{_|nl">
<field name="NUM">0</field>
</block>
</value>
<value name="TO">
<block type="math_number" id="`?vQ{IWZ_++FbE]@/O,+">
<field name="NUM">300</field>
</block>
</value>
<value name="BY">
<block type="math_number" id="@Uo*a7R)I~1*f;/dk,W4">
<field name="NUM">60</field>
</block>
</value>
<statement name="DO">
<block type="lists_setIndex" id="F=VO5up^^9E*oU/^G4q?">
<mutation at="false">
</mutation>
<field name="MODE">INSERT</field>
<field name="WHERE">LAST</field>
<value name="LIST">
<block type="variables_get" id="P1;JJrzw!Ow^1v@@rCDB">
<field name="VAR" id="!0p6ApRy`{K@6$_|`LSU">hexagonGlassOnSrf</field>
</block>
</value>
<value name="TO">
<block type="bitbybit.occt.transforms.rotate" id="wKb*A[a(mEB(j5L_:~i`">
<value name="Shape">
<block type="variables_get" id="}%pWx._QN};rp5g9MZiN">
<field name="VAR" id="E#ZK7*u*s/T05?Ar81uE">chamferGlass</field>
</block>
</value>
<value name="Axis">
<block type="bitbybit.point.pointXYZ" id="x!!nuN22lSUKI:mB7Ll.">
<value name="X">
<block type="math_number" id="xuYg1$$x9}GmIL,X[5i]">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="~2L[~~VggNsTG~{Q1%wt">
<field name="NUM">1</field>
</block>
</value>
<value name="Z">
<block type="math_number" id=".)_Z0I$*l~O^Lu)v$Vbd">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="Angle">
<block type="variables_get" id="tC-}XYb)mN{9]0-67:zR">
<field name="VAR" id="JMa2`*NQ}|rl)i:Gc.ax">i</field>
</block>
</value>
</block>
</value>
</block>
</statement>
<next>
<block type="controls_for" id="GQ/9~rIv^#oMpe?50nG/">
<field name="VAR" id="$x1qy{t}ng8GQ*x0E5OX">j</field>
<value name="FROM">
<block type="math_number" id="p{Zc+|Au5o04)aFgo1lh">
<field name="NUM">0</field>
</block>
</value>
<value name="TO">
<block type="math_number" id="-0d@cL=:K(l{C^(TB#a[">
<field name="NUM">300</field>
</block>
</value>
<value name="BY">
<block type="math_number" id=".B5/:$:}}WImtHDMPAf1">
<field name="NUM">60</field>
</block>
</value>
<statement name="DO">
<block type="lists_setIndex" id="1N{~s!dn~[aMIkQOzCIR">
<mutation at="false">
</mutation>
<field name="MODE">INSERT</field>
<field name="WHERE">LAST</field>
<value name="LIST">
<block type="variables_get" id="nrSI2_80G)UI$mT`vx,p">
<field name="VAR" id="h(45Hn~+gx0.6%Q8o}#~">hexagonBaseOnSrf</field>
</block>
</value>
<value name="TO">
<block type="bitbybit.occt.transforms.rotate" id="3-bYe/[d(Swu6vlM(!*v">
<value name="Shape">
<block type="variables_get" id="]fo%aS#Kh!^c(gv=SC%8">
<field name="VAR" id="%5(}p*ezX1vn+ub0o0,%">filletBase</field>
</block>
</value>
<value name="Axis">
<block type="bitbybit.point.pointXYZ" id="(ir=Zc6*/PG+3#Q3yhU`">
<value name="X">
<block type="math_number" id="eArcS-z|=z$j8@qQv?sf">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="SeR6asjAd9V|U#..}%Zm">
<field name="NUM">1</field>
</block>
</value>
<value name="Z">
<block type="math_number" id=")D?V^XbNf51m]MKAy_}R">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="Angle">
<block type="variables_get" id="%s#@@MLeaA]RRbiSy|%Q">
<field name="VAR" id="$x1qy{t}ng8GQ*x0E5OX">j</field>
</block>
</value>
</block>
</value>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="|}k[%}O)?E_^`_42lf5*" x="-1930" y="-544">
<field name="NAME">createAndDrawGround</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="variables_set" id="yMI#}zz,,oQNtUn9M^Ft">
<field name="VAR" id="_tmj52.^)E~]![ZE4DgW">drawnGround</field>
<value name="VALUE">
<block type="procedures_callreturn" id="|Bpbf{XXSrjSb44X4uQ4">
<mutation name="drawOcctShape">
<arg name="shape">
</arg>
<arg name="faceColour">
</arg>
<arg name="faceOpacity">
</arg>
<arg name="precision">
</arg>
</mutation>
<value name="ARG0">
<block type="bitbybit.occt.transforms.translate" id="VOCHwD$|KPL3}d!h|4?R">
<value name="Shape">
<block type="bitbybit.occt.shapes.solid.createBox" id="Ko3;}OqU7@)BV6}r-5pC">
<value name="Width">
<block type="math_number" id="$I:d9|IQ_uh(qDDzBC~p">
<field name="NUM">500</field>
</block>
</value>
<value name="Length">
<block type="math_number" id="@)([tV1gs);*H.p{fqWH">
<field name="NUM">500</field>
</block>
</value>
<value name="Height">
<block type="math_number" id="(03@]ZZ58D;M7:E:x-4n">
<field name="NUM">1</field>
</block>
</value>
<value name="Center">
<block type="bitbybit.point.pointXYZ" id="qp#=x|2DI=j!^+2HGGRq">
<value name="X">
<block type="math_number" id="^c`JDIybfkqr|KyPrvLa">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="l4ba;Y%{gf%;4*#j~_Xz">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="[M6M~fC{;qbT?1*AinC-">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="Translation">
<block type="bitbybit.point.pointXYZ" id="|)U~V$Jk9p6Mf.b~=G6G">
<value name="X">
<block type="math_number" id="t}Ar)sEkQz2UWK[::WiX">
<field name="NUM">125</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="n06]2zmA#!)U7^20ulYZ">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="W/-Hu|#vAy]POBeur-[e">
<field name="NUM">125</field>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="ARG1">
<block type="colour_picker" id="KwW4!*:}(}:!1.;$#f2N">
<field name="COLOUR">#000000</field>
</block>
</value>
<value name="ARG2">
<block type="math_number" id="c2|$v9}TX;(G**[~8Vea">
<field name="NUM">0.99</field>
</block>
</value>
<value name="ARG3">
<block type="math_number" id="rycqWT_6y|z(.$zB:~/}">
<field name="NUM">0.5</field>
</block>
</value>
</block>
</value>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="{RyY+!Ea2ZH?E5+0*0Ju" x="-1023" y="-524">
<field name="NAME">drawOptimizedMeshInstances</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="variables_set" id="bJ6EzN(L;{Zph_6m?#|2">
<field name="VAR" id="P=|){?hEsDq=EBy5/n3b">movedPointsForTops</field>
<value name="VALUE">
<block type="bitbybit.point.transformPoints" id="{b(IdYR}d;GIdu:L;5X8">
<value name="Points">
<block type="variables_get" id="WC!%nfK4.JW[Wef@.(5e">
<field name="VAR" id=":1*%s_jb6mlTX^IXip?q">pointsOnSurface</field>
</block>
</value>
<value name="Transformation">
<block type="bitbybit.babylon.transforms.translationXYZ" id="sg9o!8#a=]Pt#Kp.prP*">
<value name="Translation">
<block type="bitbybit.vector.vectorXYZ" id="u_FG_aa-0$+HC%$(1=QG">
<value name="X">
<block type="math_number" id="wYD^1%InZ0LpH,fWJr`-">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="UY(50Ou4B6TW[xJ5K]qb">
<field name="NUM">15</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="Sbyb5pf|vZH1B6ER+L{`">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="base_time_async_context" id="!`=-Px`5rlv)9y`Su$6{">
<statement name="Then">
<block type="variables_set" id="YkmMs4?5b2jhNf{^t8Q%">
<field name="VAR" id="my|Y~G+Aib^EEpdRR;id">bulbBoxMesh</field>
<value name="VALUE">
<block type="base_time_await_return" id="w=BQ][7asl+CXiG`oR}m">
<value name="Promise">
<block type="variables_get" id="{:h7?7K}GNOVs%baW!4}">
<field name="VAR" id="at.4_1NUcO=e%+/pU)}H">bulbBox</field>
</block>
</value>
</block>
</value>
<next>
<block type="controls_forEach" id=";l~Y%o:+7J2|h2.q`SFd">
<field name="VAR" id="C_l,t!QA]Z!c2*(=tr}3">n</field>
<value name="LIST">
<block type="variables_get" id="%}uC-7NQDGZGttD(n/4l">
<field name="VAR" id="P=|){?hEsDq=EBy5/n3b">movedPointsForTops</field>
</block>
</value>
<statement name="DO">
<block type="bitbybit.babylon.mesh.createMeshInstanceAndTransformNoReturn" id="Z*mVUUYlCpesHp#zp@r|">
<value name="Mesh">
<block type="variables_get" id="xkCX1QLhoMYZ[-vc`Vx.">
<field name="VAR" id="my|Y~G+Aib^EEpdRR;id">bulbBoxMesh</field>
</block>
</value>
<value name="Position">
<block type="variables_get" id="N2m]Lf^,rT/{McQ0XZ@#">
<field name="VAR" id="C_l,t!QA]Z!c2*(=tr}3">n</field>
</block>
</value>
<value name="Rotation">
<block type="bitbybit.point.pointXYZ" id="60*!kN]v$-Hh6.BaSnw(">
<value name="X">
<block type="math_number" id="a1-$MkLg+F`k#Yzf`YX,">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="s7vSk6W-k%Nl;,Hue`lH">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="T/cTj_^pPCfAf?+~p=83">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="Scaling">
<block type="bitbybit.point.pointXYZ" id="09Am%t]yrL)kRd+U6Tfn">
<value name="X">
<block type="math_number" id="C23h}Kr;_e0!IVp$UE*V">
<field name="NUM">1</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="}IV~,CmepYBOl$c-5zS;">
<field name="NUM">1</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="vL:fwfi`R2.4Fz0?E9Cj">
<field name="NUM">1</field>
</block>
</value>
</block>
</value>
</block>
</statement>
</block>
</next>
</block>
</statement>
<next>
<block type="variables_set" id="yTH39/,K0zCo6M`V9lMk">
<field name="VAR" id="5hRIZ.lOkM97i3[e)8BA">firstTime</field>
<value name="VALUE">
<block type="logic_boolean" id="G^u2,B9_Jh,Lm6q3^P7w">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="base_time_async_context" id="?81lm`|^MJYy[[syq@Q#">
<statement name="Then">
<block type="variables_set" id="F5AP|tZ.Y.Igof@X{d@F">
<field name="VAR" id="^O5PHAYPIZj:)XeB8~o{">glassGroupCompoundMesh</field>
<value name="VALUE">
<block type="base_time_await_return" id="%jrbyJ:RHP:8{KZMC-*P">
<value name="Promise">
<block type="variables_get" id="6~::M#@9*mtZ}YSu.[)W">
<field name="VAR" id="qtMp~e:nxaN%`VwUR|gC">glassGroupCompound</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="@/~AF,|uk3y|u6|qE_R`">
<field name="VAR" id="k*f._K?3rpWKa~1^%9ih">baseGroupCompoundMesh</field>
<value name="VALUE">
<block type="base_time_await_return" id="p|w.qhJo?fCJ!?=XZ|@4">
<value name="Promise">
<block type="variables_get" id="$,/h=5E`o;%#85CYVZUR">
<field name="VAR" id="dABBv7*ou}Uu625}QhUl">baseGroupCompound</field>
</block>
</value>
</block>
</value>
<next>
<block type="controls_forEach" id="*x]8w;/K/E]~`qJS^%CI">
<field name="VAR" id="F/d7r%}[z-=4Hy-G.Pbp">k</field>
<value name="LIST">
<block type="variables_get" id="{F=^Fl/Pr!;,(;YO(%{`">
<field name="VAR" id=":1*%s_jb6mlTX^IXip?q">pointsOnSurface</field>
</block>
</value>
<statement name="DO">
<block type="controls_if" id="NjOQ`KWe;_riZbdOTu@r">
<value name="IF0">
<block type="logic_negate" id="!H.BhlMF~{*Ag]U:VHpk">
<value name="BOOL">
<block type="variables_get" id="h8:|?ncxFspjCoXR;wR6">
<field name="VAR" id="5hRIZ.lOkM97i3[e)8BA">firstTime</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="bitbybit.babylon.mesh.createMeshInstanceAndTransformNoReturn" id="+o2`?(_(sHAd3S6,5BrI">
<value name="Mesh">
<block type="variables_get" id="S;R9o/I@amXu;Ud7CvFM">
<field name="VAR" id="^O5PHAYPIZj:)XeB8~o{">glassGroupCompoundMesh</field>
</block>
</value>
<value name="Position">
<block type="variables_get" id=":`%k^Z,|#[6g5j8p7y,c">
<field name="VAR" id="F/d7r%}[z-=4Hy-G.Pbp">k</field>
</block>
</value>
<value name="Rotation">
<block type="bitbybit.point.pointXYZ" id="+MdNvy=U$KNdLEkrCbv:">
<value name="X">
<block type="math_number" id="2N,{xiLp40hWD9jtPwvj">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="xolQj8gdiZ.!8xK,G!+s">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="lYWy,ep3k81@RX%SKQBt">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="Scaling">
<block type="bitbybit.point.pointXYZ" id="fxY1ZS);HZR.Y#=sv+gE">
<value name="X">
<block type="math_number" id="3mvcjg8_Dh(Hfj#;gFxi">
<field name="NUM">1</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="gcu_;PM*IcUFTwhVkU6-">
<field name="NUM">1</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="9)GA~4B?YE);(qop@VKX">
<field name="NUM">1</field>
</block>
</value>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.createMeshInstanceAndTransformNoReturn" id="=[rx0-W@/gbB%z+{BJrS">
<value name="Mesh">
<block type="variables_get" id="bt%*(WeswFz:5iXBXiCD">
<field name="VAR" id="k*f._K?3rpWKa~1^%9ih">baseGroupCompoundMesh</field>
</block>
</value>
<value name="Position">
<block type="variables_get" id="%[uy9_=?j7i/0=GjdHx5">
<field name="VAR" id="F/d7r%}[z-=4Hy-G.Pbp">k</field>
</block>
</value>
<value name="Rotation">
<block type="bitbybit.point.pointXYZ" id="5Y_jvFLv$gtoTtY#X9G3">
<value name="X">
<block type="math_number" id="XW`iGk}p^n;O|d8kXYJ0">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="4?A4xfgky=nn9*vg*);g">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="/i/N-_q.AL0YlXOyDnGn">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="Scaling">
<block type="bitbybit.point.pointXYZ" id="H!%SaX`HEfmj{E]wf(3(">
<value name="X">
<block type="math_number" id="TDOb9,r,J8vt`[aF0N8@">
<field name="NUM">1</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="B|x~1d1Pri3_Zz@QZa{3">
<field name="NUM">1</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="Rl@%l;o:Uq(LDPc:KiOv">
<field name="NUM">1</field>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</statement>
<next>
<block type="variables_set" id="S.3{.~cmg9qieo@BtbW~">
<field name="VAR" id="5hRIZ.lOkM97i3[e)8BA">firstTime</field>
<value name="VALUE">
<block type="logic_boolean" id="C#?BWGY+t$sR@I!0psoy">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="b^Y%R4lH9~,Z4RKgv74." x="-5941" y="532">
<field name="NAME">makeHexGridAndVerticalLinesForIntersection</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="variables_set" id="c#kJ;C3)uqb;T^/tn@yM">
<field name="VAR" id="*@zwFl?f~xJj7m:}u0LO">hexGridNrX</field>
<value name="VALUE">
<block type="math_number" id="3M7F*|t?i8p$AO+:{?_=">
<field name="NUM">6</field>
</block>
</value>
<next>
<block type="variables_set" id="0HqXNxp@Smk^^D$b[N8]">
<field name="VAR" id="Em0l*h`=,-xuV42;Jzt8">hexGridNrY</field>
<value name="VALUE">
<block type="math_number" id="G;=|^)?)r_eUpr4STbFa">
<field name="NUM">7</field>
</block>
</value>
<next>
<block type="variables_set" id="]ar-~Pc))3s{krU={lK_">
<field name="VAR" id="ibE`Uhb2`rE^/8i=7@VE">hexGridPoints</field>
<value name="VALUE">
<block type="bitbybit.point.transformPoints" id="Ato?WGkW8pg//vBPP@JE">
<value name="Points">
<block type="bitbybit.point.hexGrid" id="I1}WH([sQ022cinN_9KQ">
<value name="NrHexagonsY">
<block type="variables_get" id="jWEVVY$x424ARc7H}Pd1">
<field name="VAR" id="Em0l*h`=,-xuV42;Jzt8">hexGridNrY</field>
</block>
</value>
<value name="NrHexagonsX">
<block type="variables_get" id="/v:08pgKygD9|ytkFWF1">
<field name="VAR" id="*@zwFl?f~xJj7m:}u0LO">hexGridNrX</field>
</block>
</value>
<value name="RadiusHexagon">
<block type="variables_get" id="lDaN{)o./9BbnRcH}xv;">
<field name="VAR" id="RTBglAnS1@9+0]h3}7Mk">length</field>
</block>
</value>
</block>
</value>
<value name="Transformation">
<block type="bitbybit.babylon.transforms.rotationCenterX" id="T8?j[g6cK/FQTLgu_e@-">
<value name="Angle">
<block type="math_number" id="#1r`@!2ngSSH?I:W;a1x">
<field name="NUM">90</field>
</block>
</value>
<value name="Center">
<block type="bitbybit.vector.vectorXYZ" id="U]r!sgY;A/Jg|3Bc_Iva">
<value name="X">
<block type="math_number" id="e_nFTnZ)@;Fdb)DnXS!Z">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="GMIf}SYSpd}!(l;B;pO!">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="SPU}oZxX4BTbL{WjuHk6">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="|?PN@Z3.)X1Na9#0E}Jb">
<field name="VAR" id=".:lEfGx]982[{A_Flu?{">hexGridPointsMoved</field>
<value name="VALUE">
<block type="bitbybit.point.transformPoints" id="V^+aR)z@qG#YDqcJf9Q3">
<value name="Points">
<block type="variables_get" id="G9je_#jhFB^6;XG9yIYd">
<field name="VAR" id="ibE`Uhb2`rE^/8i=7@VE">hexGridPoints</field>
</block>
</value>
<value name="Transformation">
<block type="bitbybit.babylon.transforms.translationXYZ" id="ky:e5ahoijASBk={%Hef">
<value name="Translation">
<block type="bitbybit.vector.vectorXYZ" id="I39GdtEp(G.}[14H?h`6">
<value name="X">
<block type="math_number" id="PK*#YA.8N2T{Tg^,upGV">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="qASB.+F3z[m}vq^iGGRl">
<field name="NUM">100</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="G:X#d}#G*+?@$$kL|.]c">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="|wIysM2*4hhxYTgggPGq">
<field name="VAR" id="W$l5QY6N?h-b5NX]n}WV">linesForIntersection</field>
<value name="VALUE">
<block type="bitbybit.line.linesBetweenStartAndEndPoints" id="/[tR{K7m%[7~2W.(TY$[">
<value name="StartPoints">
<block type="variables_get" id="DyWC.2:%T_mg3i#y7_Js">
<field name="VAR" id="ibE`Uhb2`rE^/8i=7@VE">hexGridPoints</field>
</block>
</value>
<value name="EndPoints">
<block type="variables_get" id="}MW+KTi@IlVznL?gb.Es">
<field name="VAR" id=".:lEfGx]982[{A_Flu?{">hexGridPointsMoved</field>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="1KB!z){-AE@(S/9IFRP[" x="-3488" y="1106">
<field name="NAME">createCompoundMeshesForDrawing</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="variables_set" id="C@aEedb!d.fzrJ/9J}r_">
<field name="VAR" id="qtMp~e:nxaN%`VwUR|gC">glassGroupCompound</field>
<value name="VALUE">
<block type="procedures_callreturn" id="F8?evoq[a`{7y~ddqC^B">
<mutation name="drawOcctShape">
<arg name="shape">
</arg>
<arg name="faceColour">
</arg>
<arg name="faceOpacity">
</arg>
<arg name="precision">
</arg>
</mutation>
<value name="ARG0">
<block type="bitbybit.occt.shapes.compound.makeCompound" id="_~C:;.jO#Y1pb`hL^8Ql">
<value name="Shapes">
<block type="variables_get" id="~IIU]MEmmSq;B:6]cb[=">
<field name="VAR" id="!0p6ApRy`{K@6$_|`LSU">hexagonGlassOnSrf</field>
</block>
</value>
</block>
</value>
<value name="ARG1">
<block type="colour_picker" id="?kmgc7@:^^!##Ao!p~bC">
<field name="COLOUR">#ffcc33</field>
</block>
</value>
<value name="ARG2">
<block type="math_number" id="7:HugSS]X7$~sbdYfd7B">
<field name="NUM">0.3</field>
</block>
</value>
<value name="ARG3">
<block type="math_number" id="UScAF)*]fjz{5-.snI^h">
<field name="NUM">40</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="kS=z]ZWu2zM8Iuh*U,m7">
<field name="VAR" id="dABBv7*ou}Uu625}QhUl">baseGroupCompound</field>
<value name="VALUE">
<block type="procedures_callreturn" id="u~eX@L7m5,4Szj(.s57I">
<mutation name="drawOcctShape">
<arg name="shape">
</arg>
<arg name="faceColour">
</arg>
<arg name="faceOpacity">
</arg>
<arg name="precision">
</arg>
</mutation>
<value name="ARG0">
<block type="bitbybit.occt.shapes.compound.makeCompound" id="(!z#fjM-REeZ%A|.|YrT">
<value name="Shapes">
<block type="variables_get" id="aA=Uazq)QgcD;y~n,W}k">
<field name="VAR" id="h(45Hn~+gx0.6%Q8o}#~">hexagonBaseOnSrf</field>
</block>
</value>
</block>
</value>
<value name="ARG1">
<block type="colour_picker" id="p7-zoCI4lR#/5sOQ:m(~">
<field name="COLOUR">#3366ff</field>
</block>
</value>
<value name="ARG2">
<block type="math_number" id="2^8bHh5#{#jR(zCb=Jwz">
<field name="NUM">1</field>
</block>
</value>
<value name="ARG3">
<block type="math_number" id="R,o9kXI=F:Sh=2_R6lGO">
<field name="NUM">100</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="1OSU{BqYujy5ojL_l;3_">
<field name="VAR" id="at.4_1NUcO=e%+/pU)}H">bulbBox</field>
<value name="VALUE">
<block type="procedures_callreturn" id="0D=x%EfcCt+o%xff1.$t">
<mutation name="drawOcctShape">
<arg name="shape">
</arg>
<arg name="faceColour">
</arg>
<arg name="faceOpacity">
</arg>
<arg name="precision">
</arg>
</mutation>
<value name="ARG0">
<block type="bitbybit.occt.shapes.solid.createBox" id="jSH@%zXe]FiNG~dISJhG">
<value name="Width">
<block type="math_number" id="IZ15_*/7e|2l35-a:vUL">
<field name="NUM">1</field>
</block>
</value>
<value name="Length">
<block type="math_number" id="Z54/cp=.QffU4Kq1rxt]">
<field name="NUM">1</field>
</block>
</value>
<value name="Height">
<block type="math_number" id="UNEDI-:^C)uk;,XS?4hd">
<field name="NUM">4</field>
</block>
</value>
<value name="Center">
<block type="bitbybit.point.pointXYZ" id="Jn+1`TTRKzm4V{Yde?mw">
<value name="X">
<block type="math_number" id="r!3f_(x_eiQt^Zw[/FPw">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="V,$E*^:jT+?e}?t$Eh6*">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="a_jLk}@Kz@[:(/6berQ-">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="ARG1">
<block type="colour_picker" id="%FIUc7VS]D^XG8@`zjIm">
<field name="COLOUR">#ffffff</field>
</block>
</value>
<value name="ARG2">
<block type="math_number" id="]%yH.$jp199SfE5q/.`8">
<field name="NUM">1</field>
</block>
</value>
<value name="ARG3">
<block type="math_number" id="PZ1kS`diwA@l~7?Q2@_]">
<field name="NUM">30</field>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defreturn" id="LoHf^*rbq9a=;d@RlEvT" x="-2473" y="1128">
<mutation>
<arg name="shape" varid="4WruCBSlau2%ruGq!04D">
</arg>
<arg name="faceColour" varid="en+U|i2=vn%/#3)ye(SD">
</arg>
<arg name="faceOpacity" varid="!j+!g5nn:`O9kdtviDLc">
</arg>
<arg name="precision" varid=",M+tf-g=1M%qw%s|ZxT)">
</arg>
</mutation>
<field name="NAME">drawOcctShape</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="variables_set" id="bEYI%vmRxWLrf1z@Jp$7">
<field name="VAR" id="CMn7/qoHh~%SLc(|PtQ1">occtShape</field>
<value name="VALUE">
<block type="bitbybit.draw.drawAnyAsync" id="pyuo/37cQDQ7Jr5W-}ck">
<value name="Entity">
<block type="variables_get" id="g#[KH+rKA?m^YQ96vXAz">
<field name="VAR" id="4WruCBSlau2%ruGq!04D">shape</field>
</block>
</value>
<value name="Options">
<block type="bitbybit.draw.optionsOcctShape" id=":SqHv?o!1`bSPEV/rMm4">
<value name="FaceOpacity">
<block type="variables_get" id="TR?1SaaoRzV|Mo#*25uO">
<field name="VAR" id="!j+!g5nn:`O9kdtviDLc">faceOpacity</field>
</block>
</value>
<value name="EdgeOpacity">
<block type="math_number" id="dnKGD(ZI,NKzopp4@r}/">
<field name="NUM">1</field>
</block>
</value>
<value name="EdgeColour">
<block type="colour_picker" id="7eKkYPPmzd)g53+6w*wb">
<field name="COLOUR">#bbbbff</field>
</block>
</value>
<value name="FaceColour">
<block type="variables_get" id="=c0B{E87kS?[mrhCP$8b">
<field name="VAR" id="en+U|i2=vn%/#3)ye(SD">faceColour</field>
</block>
</value>
<value name="EdgeWidth">
<block type="math_number" id="rIJG-Y$hA$F/2%PgS13b">
<field name="NUM">2</field>
</block>
</value>
<value name="DrawEdges">
<block type="logic_boolean" id="!WXUcv296X2Su$AThwkz">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="DrawFaces">
<block type="logic_boolean" id="Glpcy/}(El8P7vpwzFz|">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="Precision">
<block type="variables_get" id="9o6#XM0[Dght2~6i:Uv2">
<field name="VAR" id=",M+tf-g=1M%qw%s|ZxT)">precision</field>
</block>
</value>
<value name="DrawEdgeIndexes">
<block type="logic_boolean" id="#w[ukJ{Tac4~Mx;n|fK,">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="EdgeIndexHeight">
<block type="math_number" id="Zb,t,e@Q587%$s_zL?4G">
<field name="NUM">0.06</field>
</block>
</value>
<value name="EdgeIndexColour">
<block type="colour_picker" id="O-ZFXSC+;EU6*/,i1g]j">
<field name="COLOUR">#bbbbff</field>
</block>
</value>
<value name="DrawFaceIndexes">
<block type="logic_boolean" id="*|bp~t?~B~IfE8V,P4ex">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="FaceIndexHeight">
<block type="math_number" id="W~fUzbKv3bT1eamvv%rh">
<field name="NUM">0.06</field>
</block>
</value>
<value name="FaceIndexColour">
<block type="colour_picker" id="bFCQaMUmBSvXF4=+WJB#">
<field name="COLOUR">#0000ff</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</statement>
<value name="RETURN">
<block type="variables_get" id=";a}4#}maP|k@HKYAJXLx">
<field name="VAR" id="CMn7/qoHh~%SLc(|PtQ1">occtShape</field>
</block>
</value>
</block>
<block type="procedures_defnoreturn" id="nEPQ`!^w!Oj]/NpXUhg." x="-5943" y="1316">
<field name="NAME">createNurbsSurfaceForHexGridProjections</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="variables_set" id="Q{r{-_Nr$8rI6e0K]EMa">
<field name="VAR" id="tBlJB)v83o3exilg.RS7">nurbsSurface</field>
<value name="VALUE">
<block type="bitbybit.verb.surface.transformSurface" id="j@.s(qv]1oFOqi~`B7U!">
<value name="Surface">
<block type="bitbybit.verb.surface.createSurfaceByCorners" id="XE^*mhNL%(t-l~{)F8B%">
<value name="Point1">
<block type="bitbybit.point.transformPoint" id="u$006C!Lm(ZhOxNV]T@*">
<value name="Point">
<block type="lists_getIndex" id="[@AJ9G!E2!zrqyUXU}*r">
<mutation statement="false" at="false">
</mutation>
<field name="MODE">GET</field>
<field name="WHERE">FIRST</field>
<value name="VALUE">
<block type="variables_get" id="=o4R?NgbQrR*}|M^{I-X">
<field name="VAR" id="ibE`Uhb2`rE^/8i=7@VE">hexGridPoints</field>
</block>
</value>
</block>
</value>
<value name="Transformation">
<block type="bitbybit.babylon.transforms.translationXYZ" id="]GDdfU::#l_=3KfU!]9S">
<value name="Translation">
<block type="bitbybit.vector.vectorXYZ" id="h;=6nV1IC+|;YSgb[i%M">
<value name="X">
<block type="math_number" id="J+?JZS7`c+$#FBOz6Kd[">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="o^{cNVk^00d@+;#e()C(">
<field name="NUM">100</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="qcZs;@3.zAYGKTx62glv">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="Point2">
<block type="bitbybit.point.transformPoint" id="q;VZ?v=Q^nU|4A?zaYsw">
<value name="Point">
<block type="lists_getIndex" id="%BMIqzh{l.vc#WP,gDUl">
<mutation statement="false" at="true">
</mutation>
<field name="MODE">GET</field>
<field name="WHERE">FROM_START</field>
<value name="VALUE">
<block type="variables_get" id="1H70%(G^;|oFUx1KTx9:">
<field name="VAR" id="ibE`Uhb2`rE^/8i=7@VE">hexGridPoints</field>
</block>
</value>
<value name="AT">
<block type="variables_get" id="=yu7a2qbR%d*]^2Ki$mk">
<field name="VAR" id="Em0l*h`=,-xuV42;Jzt8">hexGridNrY</field>
</block>
</value>
</block>
</value>
<value name="Transformation">
<block type="bitbybit.babylon.transforms.translationXYZ" id="QaRDSqIXm1u_Uh{A{^Y_">
<value name="Translation">
<block type="bitbybit.vector.vectorXYZ" id="Pb{yto-.L_-r3C#KM;qy">
<value name="X">
<block type="math_number" id="9(E8]CNO_U^[R]/s(iTn">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="(@R`jP[AOO@~NA68#?N=">
<field name="NUM">50</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="@nn-o[wN6!z1#Du%S*/M">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="Point3">
<block type="bitbybit.point.transformPoint" id="`iCwYGhbhg=`sqsWwQ{J">
<value name="Point">
<block type="lists_getIndex" id="^FPN6$`%R35pyOe[2yGI">
<mutation statement="false" at="false">
</mutation>
<field name="MODE">GET</field>
<field name="WHERE">LAST</field>
<value name="VALUE">
<block type="variables_get" id="8Sn]S``P!u+hw5}.a7E,">
<field name="VAR" id="ibE`Uhb2`rE^/8i=7@VE">hexGridPoints</field>
</block>
</value>
</block>
</value>
<value name="Transformation">
<block type="bitbybit.babylon.transforms.translationXYZ" id="Y)G3p{C6OLLJJ8yie[tB">
<value name="Translation">
<block type="bitbybit.vector.vectorXYZ" id="0/2KUxgc[+TNv=%+YoN{">
<value name="X">
<block type="math_number" id="r={+Ae%C+qflh@wt$4:u">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="s(*2}0:BEKhqvmm+gEqG">
<field name="NUM">90</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="zr+p*GP=iF35D;Ipl?5a">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="Point4">
<block type="bitbybit.point.transformPoint" id="4t1vmosr^$.XV/|zDV3a">
<value name="Point">
<block type="lists_getIndex" id="=Vo^29..!0lzGFZ}H?Fw">
<mutation statement="false" at="true">
</mutation>
<field name="MODE">GET</field>
<field name="WHERE">FROM_END</field>
<value name="VALUE">
<block type="variables_get" id="czx]0%jFXgCOJuof;8gw">
<field name="VAR" id="ibE`Uhb2`rE^/8i=7@VE">hexGridPoints</field>
</block>
</value>
<value name="AT">
<block type="variables_get" id="ynN,i_6g~T-!t_3^DBXB">
<field name="VAR" id="Em0l*h`=,-xuV42;Jzt8">hexGridNrY</field>
</block>
</value>
</block>
</value>
<value name="Transformation">
<block type="bitbybit.babylon.transforms.translationXYZ" id="23.jDjx~86*Dapg(n3@A">
<value name="Translation">
<block type="bitbybit.vector.vectorXYZ" id=".kk[TPgUskX,`2+vvP[7">
<value name="X">
<block type="math_number" id="NP~ncB?.8Q0VtBTF;Zu!">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="9[I$rl`/oa!%P?Nqok1a">
<field name="NUM">40</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="];h^C-@BkU]e+=0@Z{WA">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="Transformation">
<block type="lists_create_with" id="+$TZFbcu6nZPQx~j%-N]">
<mutation items="2">
</mutation>
<value name="ADD0">
<block type="bitbybit.babylon.transforms.scaleXYZ" id="=.eG9Q0#ho$73=ct/ynw">
<value name="ScaleXyz">
<block type="bitbybit.vector.vectorXYZ" id="3~9G8Ed2-6NuWwKiT03_">
<value name="X">
<block type="math_number" id="kS3dZD|$lF|B+$xU@^i=">
<field name="NUM">1.5</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="IYEF:ZU,SXBNu|MCxR($">
<field name="NUM">1</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="8?EikjUP%L.PgeM5ldTh">
<field name="NUM">1.5</field>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="ADD1">
<block type="bitbybit.babylon.transforms.translationXYZ" id="W1oJ#ZlZVs@}rPvr)nqZ">
<value name="Translation">
<block type="bitbybit.vector.vectorXYZ" id="+g`TK8XW/cXYKRBiotAy">
<value name="X">
<block type="math_number" id="Uge9;EG;o=xztKF4s:vD">
<field name="NUM">-20</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="Qxjaj$Sa82/6_7A!3*=)">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="x/4:{WkC6C+,j?69Pi`N">
<field name="NUM">-20</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="kfBt}_BmCFrw$^wRrQ3K" x="-4427" y="1774">
<field name="NAME">higherQualityDrawingOfOCCModel</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="bitbybit.draw.drawAnyAsyncNoReturn" id="$+vy)UYtc)}1!R49+xwN">
<value name="Entity">
<block type="bitbybit.occt.transforms.translate" id="m%8NZW^l7n}Wg3X$=)yk">
<value name="Shape">
<block type="bitbybit.occt.shapes.compound.makeCompound" id="4lbG:G):*GZI{}5[R6!1">
<value name="Shapes">
<block type="variables_get" id="PvIPt6@V^T8z|VDE${aW">
<field name="VAR" id="m;we^sq=tw]*PAEpOa1=">hexagonBase</field>
</block>
</value>
</block>
</value>
<value name="Translation">
<block type="lists_getIndex" id="5mKIBxHfU+mYkFk:$AN}">
<mutation statement="false" at="false">
</mutation>
<field name="MODE">GET</field>
<field name="WHERE">FIRST</field>
<value name="VALUE">
<block type="variables_get" id="l!YaTr86J+6|]qd#ys,R">
<field name="VAR" id=":1*%s_jb6mlTX^IXip?q">pointsOnSurface</field>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="Options">
<block type="bitbybit.draw.optionsOcctShape" id="S3xVqkNM|Cbc:{WI+WD5">
<value name="FaceOpacity">
<block type="math_number" id="b1cA)P4|m_aQ!s[|jyBu">
<field name="NUM">0.2</field>
</block>
</value>
<value name="EdgeOpacity">
<block type="math_number" id="qKVc9[89qW%Y*`81LTg6">
<field name="NUM">0.5</field>
</block>
</value>
<value name="EdgeColour">
<block type="colour_picker" id="XqR??(F%$eq5w8Y?HLA}">
<field name="COLOUR">#ffffff</field>
</block>
</value>
<value name="FaceColour">
<block type="colour_picker" id="iAp9#8xlS;8QNWr~$/Y!">
<field name="COLOUR">#cc33cc</field>
</block>
</value>
<value name="EdgeWidth">
<block type="math_number" id="%F_^rBc[8+I/$Ab{Yl`~">
<field name="NUM">5</field>
</block>
</value>
<value name="DrawEdges">
<block type="logic_boolean" id=");[u$Rk5c*ylLBCU1Yre">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="DrawFaces">
<block type="logic_boolean" id="|!veKL5#?d=fj$+QgR1n">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="Precision">
<block type="math_number" id="rh^^)xs)QYlk61ZsC4D_">
<field name="NUM">1</field>
</block>
</value>
<value name="DrawEdgeIndexes">
<block type="logic_boolean" id="kxD70SaUYwSw/1%O081~">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="EdgeIndexHeight">
<block type="math_number" id="$w+|DPD;/_)xK3/6zvLq">
<field name="NUM">0.06</field>
</block>
</value>
<value name="EdgeIndexColour">
<block type="colour_picker" id="5XkW5{9!%i%)KrNtzU0E">
<field name="COLOUR">#bbbbff</field>
</block>
</value>
<value name="DrawFaceIndexes">
<block type="logic_boolean" id="0Z7Kp|W.Y.)~,CVIi7;^">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="FaceIndexHeight">
<block type="math_number" id="jk)cM^P.rSD/Q/*FyDdO">
<field name="NUM">0.06</field>
</block>
</value>
<value name="FaceIndexColour">
<block type="colour_picker" id=".g4bsCReqIl.{`dRwz-F">
<field name="COLOUR">#0000ff</field>
</block>
</value>
</block>
</value>
<next>
<block type="bitbybit.draw.drawAnyAsyncNoReturn" id="Rw648@6SUP2F.oQ!XOOJ">
<value name="Entity">
<block type="bitbybit.occt.transforms.translate" id="C+BakQ8k#0`A/!t=4$kS">
<value name="Shape">
<block type="variables_get" id="*s-f$}/c{DKp;Os8cSGo">
<field name="VAR" id="%5(}p*ezX1vn+ub0o0,%">filletBase</field>
</block>
</value>
<value name="Translation">
<block type="lists_getIndex" id="`9t*NP0=ek/gBWPYgt_R">
<mutation statement="false" at="false">
</mutation>
<field name="MODE">GET</field>
<field name="WHERE">FIRST</field>
<value name="VALUE">
<block type="variables_get" id="Bn.-TY0`c!|cJn~]}h@Z">
<field name="VAR" id=":1*%s_jb6mlTX^IXip?q">pointsOnSurface</field>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="Options">
<block type="bitbybit.draw.optionsOcctShape" id=",zl$)?rVvY#5)k+kHjLS">
<value name="FaceOpacity">
<block type="math_number" id="mhhdOIS9d@pkW]dfrD)l">
<field name="NUM">1</field>
</block>
</value>
<value name="EdgeOpacity">
<block type="math_number" id="OknW^_wlyiAe,qhhsw^X">
<field name="NUM">1</field>
</block>
</value>
<value name="EdgeColour">
<block type="colour_picker" id="QHL@h]29lzUn(awHRRvT">
<field name="COLOUR">#bbbbff</field>
</block>
</value>
<value name="FaceColour">
<block type="colour_picker" id="z/m5ir/]U+RE5f?ge6Bg">
<field name="COLOUR">#993399</field>
</block>
</value>
<value name="EdgeWidth">
<block type="math_number" id="2oj1_/@-!YQ:Pbv7%q!v">
<field name="NUM">2</field>
</block>
</value>
<value name="DrawEdges">
<block type="logic_boolean" id="zG0rT(zoV-`_r*C-S?0M">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="DrawFaces">
<block type="logic_boolean" id="0X:2hxdaRyonQN*P9KpL">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="Precision">
<block type="math_number" id="T^1+liL;p]hLXE/m*q83">
<field name="NUM">1</field>
</block>
</value>
<value name="DrawEdgeIndexes">
<block type="logic_boolean" id="/DstrGJtJ`$r_UC;M_I@">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="EdgeIndexHeight">
<block type="math_number" id="bsH?6}qu5yuJ1{$tSL}Y">
<field name="NUM">0.06</field>
</block>
</value>
<value name="EdgeIndexColour">
<block type="colour_picker" id="H-?1o.Wyp
Editor plans for 3D development, API keys for server-side CAD algorithms
Cloud storage, private projects & 3D tools for Bitbybit editors
* "Unlimited" means high limits that most users won't reach. Compare the plans
Run CAD algorithms on managed cloud servers from your own backend applications
Custom software development, dedicated servers & CAD automation at scale.