Script: Blockly Drone Example

Blockly Drone Example picture
Type
Blockly logo indicatorblockly
Date Created
Oct 12, 2026, 2:56:08 PM
Last Edit Date
Oct 12, 2026, 2:58:18 PM

Project Information

Drone example demonstrating 3D app development in multi-file environment.

View Full Project

Script Code

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="arms">arms</variable>
  <variable id="length">length</variable>
  <variable id="diameter">diameter</variable>
  <variable id="name">name</variable>
  <variable id="colour">colour</variable>
  <variable id="metallic">metallic</variable>
  <variable id="roughness">roughness</variable>
  <variable id="glow">glow</variable>
  <variable id="edge colour">edge colour</variable>
  <variable id="edge width">edge width</variable>
  <variable id="shape">shape</variable>
  <variable id="count">count</variable>
  <variable id="plate">plate</variable>
  <variable id="legs">legs</variable>
  <variable id="half back">half back</variable>
  <variable id="one arm">one arm</variable>
  <variable id="profile">profile</variable>
  <variable id="propellers">propellers</variable>
  <variable id="lights">lights</variable>
  <variable id="front">front</variable>
  <variable id="shell">shell</variable>
  <variable id="placed logo">placed logo</variable>
  <variable id="neighbours">neighbours</variable>
  <variable id="arm length">arm length</variable>
  <variable id="outline">outline</variable>
  <variable id="angles">angles</variable>
  <variable id="post">post</variable>
  <variable id="tip">tip</variable>
  <variable id="cuts">cuts</variable>
  <variable id="span">span</variable>
  <variable id="first blade">first blade</variable>
  <variable id="clamp">clamp</variable>
  <variable id="spun">spun</variable>
  <variable id="chosen">chosen</variable>
  <variable id="wires">wires</variable>
  <variable id="paint">paint</variable>
  <variable id="middle">middle</variable>
  <variable id="logo">logo</variable>
  <variable id="antenna">antenna</variable>
  <variable id="rubber">rubber</variable>
  <variable id="bent">bent</variable>
  <variable id="carbon">carbon</variable>
  <variable id="rings">rings</variable>
  <variable id="bolt">bolt</variable>
  <variable id="bracket">bracket</variable>
  <variable id="strap">strap</variable>
  <variable id="aluminium">aluminium</variable>
  <variable id="polymer">polymer</variable>
  <variable id="canopy room">canopy room</variable>
  <variable id="largest">largest</variable>
  <variable id="propeller size">propeller size</variable>
  <variable id="slab">slab</variable>
  <variable id="i">i</variable>
  <variable id="top plate">top plate</variable>
  <variable id="body">body</variable>
  <variable id="holes">holes</variable>
  <variable id="sections">sections</variable>
  <variable id="hub">hub</variable>
  <variable id="motor bolt">motor bolt</variable>
  <variable id="placed">placed</variable>
  <variable id="section">section</variable>
  <variable id="faces">faces</variable>
  <variable id="cells">cells</variable>
  <variable id="box">box</variable>
  <variable id="scaled">scaled</variable>
  <variable id="tube">tube</variable>
  <variable id="ring">ring</variable>
  <variable id="hexagons">hexagons</variable>
  <variable id="socket">socket</variable>
  <variable id="bolt pair">bolt pair</variable>
  <variable id="copper">copper</variable>
  <variable id="housing">housing</variable>
  <variable id="station">station</variable>
  <variable id="lamp">lamp</variable>
  <variable id="canopy cells">canopy cells</variable>
  <variable id="areas">areas</variable>
  <variable id="steel">steel</variable>
  <variable id="vents">vents</variable>
  <variable id="accent">accent</variable>
  <variable id="pad">pad</variable>
  <variable id="one motor">one motor</variable>
  <variable id="nut">nut</variable>
  <variable id="r">r</variable>
  <variable id="x">x</variable>
  <variable id="centre">centre</variable>
  <variable id="largest side">largest side</variable>
  <variable id="ellipse">ellipse</variable>
  <variable id="angle">angle</variable>
  <variable id="turned">turned</variable>
  <variable id="one stator">one stator</variable>
  <variable id="half">half</variable>
  <variable id="normal">normal</variable>
  <variable id="hexagon">hexagon</variable>
  <variable id="one propeller">one propeller</variable>
  <variable id="new cells">new cells</variable>
  <variable id="arm fixings">arm fixings</variable>
  <variable id="green">green</variable>
  <variable id="one light">one light</variable>
  <variable id="front lights">front lights</variable>
  <variable id="back lights">back lights</variable>
 </variables>
 <block type="procedures_defreturn" id="fitPropeller" collapsed="true" x="0" y="0">
  <mutation>
   <arg name="arms" varid="arms">
   </arg>
   <arg name="length" varid="length">
   </arg>
   <arg name="diameter" varid="diameter">
   </arg>
  </mutation>
  <field name="NAME">fit propeller</field>
  <comment pinned="false" h="80" w="160">Describe this function...</comment>
  <statement name="STACK">
   <block type="variables_set" id=":VsBrsvN$H{!|fac|187">
    <field name="VAR" id="neighbours">neighbours</field>
    <value name="VALUE">
     <block type="math_arithmetic" id="!eSuolDd$@6y@_cuCznJ">
      <field name="OP">MINUS</field>
      <value name="A">
       <block type="math_arithmetic" id="Tb38k,IB_d6kFo9`*d;_">
        <field name="OP">MULTIPLY</field>
        <value name="A">
         <block type="math_arithmetic" id="~^I{Gzllh2(hcLFk1$*p">
          <field name="OP">MULTIPLY</field>
          <value name="A">
           <block type="math_number" id="[QFR`~,$+8[VcKpVa.d%">
            <field name="NUM">2</field>
           </block>
          </value>
          <value name="B">
           <block type="variables_get" id="b]-XQ%KZK9W_4wgUgRYq">
            <field name="VAR" id="length">length</field>
           </block>
          </value>
         </block>
        </value>
        <value name="B">
         <block type="bitbybit.math.sin" id="O^KlMdUfh0~gPeHcYpp8">
          <value name="Number">
           <block type="math_arithmetic" id="7TP*,J0yiG=Cw[pvl!j?">
            <field name="OP">DIVIDE</field>
            <value name="A">
             <block type="bitbybit.math.pi" id="Ff7rn1lk/h-D23lex/U(">
             </block>
            </value>
            <value name="B">
             <block type="variables_get" id="9MqZ0l*j]?#/=%KgLEcz">
              <field name="VAR" id="arms">arms</field>
             </block>
            </value>
           </block>
          </value>
         </block>
        </value>
       </block>
      </value>
      <value name="B">
       <block type="math_number" id="99?=6*e^ybE6B~Y`Z%JI">
        <field name="NUM">10</field>
       </block>
      </value>
     </block>
    </value>
    <next>
     <block type="variables_set" id="b@Q2J[L%r4i(VrTD^^cl">
      <field name="VAR" id="canopy room">canopy room</field>
      <value name="VALUE">
       <block type="math_arithmetic" id="J6MQ^td8G_s=I.O:/=0Z">
        <field name="OP">MULTIPLY</field>
        <value name="A">
         <block type="math_number" id="q}[v@T2cogjV%Jh0uFD[">
          <field name="NUM">2</field>
         </block>
        </value>
        <value name="B">
         <block type="math_arithmetic" id="J^M%gKl3`qh_4$h)2[h1">
          <field name="OP">MINUS</field>
          <value name="A">
           <block type="variables_get" id="1,6hG|QDs)43(3p-+rkF">
            <field name="VAR" id="length">length</field>
           </block>
          </value>
          <value name="B">
           <block type="math_number" id="q=/=$EvPUw,~LT0|^uat">
            <field name="NUM">68</field>
           </block>
          </value>
         </block>
        </value>
       </block>
      </value>
      <next>
       <block type="variables_set" id="6~Zz,=3NGjQk|:|?W,*{">
        <field name="VAR" id="largest">largest</field>
        <value name="VALUE">
         <block type="math_arithmetic" id="72sD={0oQ0,@~~n.BXa3">
          <field name="OP">MULTIPLY</field>
          <value name="A">
           <block type="math_round" id="PwsYPLg:h#Bw%Me*c5A:">
            <field name="OP">ROUNDDOWN</field>
            <value name="NUM">
             <block type="math_arithmetic" id="+Q4((WiTxhI*2U)C^11|">
              <field name="OP">DIVIDE</field>
              <value name="A">
               <block type="logic_ternary" id="ZUX#[PYuZEOOo~X_A=1q">
                <value name="IF">
                 <block type="logic_compare" id="+0j3{/V:eO7LxjxC~E4b">
                  <field name="OP">LT</field>
                  <value name="A">
                   <block type="variables_get" id="g*L3jKDC[egI3wE{e?Eg">
                    <field name="VAR" id="neighbours">neighbours</field>
                   </block>
                  </value>
                  <value name="B">
                   <block type="variables_get" id="vi{A=^pn~Zmh|C}Q!SBY">
                    <field name="VAR" id="canopy room">canopy room</field>
                   </block>
                  </value>
                 </block>
                </value>
                <value name="THEN">
                 <block type="variables_get" id="{~XO~hq,E-hh^^.38Q2V">
                  <field name="VAR" id="neighbours">neighbours</field>
                 </block>
                </value>
                <value name="ELSE">
                 <block type="variables_get" id="zkM^oWg@7!ms8f~d]Ec+">
                  <field name="VAR" id="canopy room">canopy room</field>
                 </block>
                </value>
               </block>
              </value>
              <value name="B">
               <block type="math_number" id="(MXtgq@v1(LJw#1?N)Iy">
                <field name="NUM">5</field>
               </block>
              </value>
             </block>
            </value>
           </block>
          </value>
          <value name="B">
           <block type="math_number" id="Ri8tf[MtUcxh;*P@zh$@">
            <field name="NUM">5</field>
           </block>
          </value>
         </block>
        </value>
       </block>
      </next>
     </block>
    </next>
   </block>
  </statement>
  <value name="RETURN">
   <block type="logic_ternary" id="hbu/ceE}l?pJ*(ZY)q!H">
    <value name="IF">
     <block type="logic_compare" id="D+gO_j%|S$cuNhS[tZ=3">
      <field name="OP">LT</field>
      <value name="A">
       <block type="variables_get" id="+.GrkZdK*.VF0;vlRnt^">
        <field name="VAR" id="diameter">diameter</field>
       </block>
      </value>
      <value name="B">
       <block type="variables_get" id="1IpsU:un,aJn0!Ita44u">
        <field name="VAR" id="largest">largest</field>
       </block>
      </value>
     </block>
    </value>
    <value name="THEN">
     <block type="variables_get" id="ZIY]Aw}%Qp*d;%R[WsEK">
      <field name="VAR" id="diameter">diameter</field>
     </block>
    </value>
    <value name="ELSE">
     <block type="variables_get" id="T@!3DPy^%nhI@Q~jjH,8">
      <field name="VAR" id="largest">largest</field>
     </block>
    </value>
   </block>
  </value>
 </block>
 <block type="variables_set" id="sizes" x="0" y="96">
  <field name="VAR" id="arms">arms</field>
  <value name="VALUE">
   <block type="math_number" id="armsValue">
    <field name="NUM">4</field>
   </block>
  </value>
  <next>
   <block type="variables_set" id="xB4BQK=|W?@F~75e-T=C">
    <field name="VAR" id="arm length">arm length</field>
    <value name="VALUE">
     <block type="math_number" id="djP/ODgFm~DdrizAK8cM">
      <field name="NUM">185</field>
     </block>
    </value>
    <next>
     <block type="variables_set" id="#ugc)}V0B_}g@nygJJ.@">
      <field name="VAR" id="propeller size">propeller size</field>
      <value name="VALUE">
       <block type="math_number" id=";pRki@8`;mQ![QK,[GE!">
        <field name="NUM">230</field>
       </block>
      </value>
      <next>
       <block type="variables_set" id="Mj.YJAuiulu!NR%#j^k6">
        <field name="VAR" id="legs">legs</field>
        <value name="VALUE">
         <block type="math_number" id="+ha?Ukg!P9W_3Ev!yBg5">
          <field name="NUM">4</field>
         </block>
        </value>
        <next>
         <block type="variables_set" id="ByIL.`fkKMVA[B6#_a(t">
          <field name="VAR" id="diameter">diameter</field>
          <value name="VALUE">
           <block type="procedures_callreturn" id="g:!=R19)[`QDgkFqaDjn">
            <mutation name="fit propeller">
             <arg name="arms">
             </arg>
             <arg name="length">
             </arg>
             <arg name="diameter">
             </arg>
            </mutation>
            <value name="ARG0">
             <block type="variables_get" id="*4E)hk7:KTdxatGkqLWt">
              <field name="VAR" id="arms">arms</field>
             </block>
            </value>
            <value name="ARG1">
             <block type="variables_get" id="L^A}3`i`-eC0wm5)3*}S">
              <field name="VAR" id="arm length">arm length</field>
             </block>
            </value>
            <value name="ARG2">
             <block type="variables_get" id="ke,N~C)N3E1eRwq.t!A/">
              <field name="VAR" id="propeller size">propeller size</field>
             </block>
            </value>
           </block>
          </value>
         </block>
        </next>
       </block>
      </next>
     </block>
    </next>
   </block>
  </next>
 </block>
 <block type="procedures_defreturn" id="look" collapsed="true" x="0" y="536">
  <mutation>
   <arg name="name" varid="name">
   </arg>
   <arg name="colour" varid="colour">
   </arg>
   <arg name="metallic" varid="metallic">
   </arg>
   <arg name="roughness" varid="roughness">
   </arg>
   <arg name="glow" varid="glow">
   </arg>
   <arg name="edge colour" varid="edge colour">
   </arg>
   <arg name="edge width" varid="edge width">
   </arg>
  </mutation>
  <field name="NAME">look</field>
  <comment pinned="false" h="80" w="160">Describe this function...</comment>
  <value name="RETURN">
   <block type="bitbybit.draw.optionsOcctShape" id="X:$iuT=Rx4nkN62ZiB$K">
    <value name="FaceOpacity">
     <block type="math_number" id="ZF8A@G#INZcwya0@G/S2">
      <field name="NUM">1</field>
     </block>
    </value>
    <value name="EdgeOpacity">
     <block type="math_number" id="?BJ7Z5CwcNILyXxQ]d_c">
      <field name="NUM">1</field>
     </block>
    </value>
    <value name="EdgeColour">
     <block type="variables_get" id="Bp!WH-R}1(RAG25#q*,x">
      <field name="VAR" id="edge colour">edge colour</field>
     </block>
    </value>
    <value name="FaceColour">
     <block type="colour_picker" id="6/xL}JT~FKdHzPz)Vs`g">
      <field name="COLOUR">#ff0000</field>
     </block>
    </value>
    <value name="VertexColour">
     <block type="colour_picker" id="AZDC?fiy?U8m_jR{M!kE">
      <field name="COLOUR">#ff00ff</field>
     </block>
    </value>
    <value name="FaceMaterial">
     <block type="bitbybit.babylon.material.pbrMetallicRoughness.create" id="+O4WcZNm50qh.1ZQf9=R">
      <value name="Name">
       <block type="variables_get" id="C}B@E+|sh`tea9ju(*]C">
        <field name="VAR" id="name">name</field>
       </block>
      </value>
      <value name="BaseColor">
       <block type="variables_get" id="]UIaFuprj*Oe:?gO8ntZ">
        <field name="VAR" id="colour">colour</field>
       </block>
      </value>
      <value name="EmissiveColor">
       <block type="variables_get" id="yR-p`dB_k,~(@/NK{P!!">
        <field name="VAR" id="glow">glow</field>
       </block>
      </value>
      <value name="Metallic">
       <block type="variables_get" id=",K1|xUrH-`9Qdkj~$z)s">
        <field name="VAR" id="metallic">metallic</field>
       </block>
      </value>
      <value name="Roughness">
       <block type="variables_get" id="n,0MB*VD^^vKC~gQl7iY">
        <field name="VAR" id="roughness">roughness</field>
       </block>
      </value>
      <value name="Alpha">
       <block type="math_number" id="t=f?nd8=0u+Ty^y8U6CY">
        <field name="NUM">1</field>
       </block>
      </value>
      <value name="BackFaceCulling">
       <block type="logic_boolean" id="KCXR.wfF4Ft~(.e$c.@U">
        <field name="BOOL">FALSE</field>
       </block>
      </value>
      <value name="ZOffset">
       <block type="math_number" id="v[OF+3CqKI^plX5T6p.h">
        <field name="NUM">2</field>
       </block>
      </value>
     </block>
    </value>
    <value name="EdgeWidth">
     <block type="variables_get" id="G1ONVQEI-S_Ef5X!;!ba">
      <field name="VAR" id="edge width">edge width</field>
     </block>
    </value>
    <value name="VertexSize">
     <block type="math_number" id="c.13{b1SO$1!-F1;;97n">
      <field name="NUM">0.03</field>
     </block>
    </value>
    <value name="DrawEdges">
     <block type="logic_compare" id="4L#n.qDX-Q_wn~b*VVHt">
      <field name="OP">GT</field>
      <value name="A">
       <block type="variables_get" id="s}QsbX^bN#-RkUFcmJ[Q">
        <field name="VAR" id="edge width">edge width</field>
       </block>
      </value>
      <value name="B">
       <block type="math_number" id="C)T}RT|xV:!O4TXZ~[[^">
        <field name="NUM">0</field>
       </block>
      </value>
     </block>
    </value>
    <value name="DrawFaces">
     <block type="logic_boolean" id="k=V%Sjc-g?2Wo,Yp^IMj">
      <field name="BOOL">TRUE</field>
     </block>
    </value>
    <value name="DrawVertices">
     <block type="logic_boolean" id="h}V^rC0rP[^GJl(Sh,QT">
      <field name="BOOL">FALSE</field>
     </block>
    </value>
    <value name="Precision">
     <block type="math_number" id="14PD-tUuNxxJm@-50{*G">
      <field name="NUM">0.05</field>
     </block>
    </value>
    <value name="AngularDeflection">
     <block type="math_number" id="fG;xX*,+e(=}PW:;p]/K">
      <field name="NUM">0.5</field>
     </block>
    </value>
    <value name="RelativeDeflection">
     <block type="logic_boolean" id="{Qy]r7CohV[CP6cy#HbN">
      <field name="BOOL">FALSE</field>
     </block>
    </value>
    <value name="DrawEdgeIndexes">
     <block type="logic_boolean" id="}aVt/GRgy9WWTR)`I?]-">
      <field name="BOOL">FALSE</field>
     </block>
    </value>
    <value name="EdgeIndexHeight">
     <block type="math_number" id="y*J=rD1/zwaaiL?X5):[">
      <field name="NUM">0.06</field>
     </block>
    </value>
    <value name="EdgeIndexColour">
     <block type="colour_picker" id="Ip.N%OJS+|kTt7zw(s0d">
      <field name="COLOUR">#ff00ff</field>
     </block>
    </value>
    <value name="DrawFaceIndexes">
     <block type="logic_boolean" id="5.lZ_j]j+Ex@4[7|NaPn">
      <field name="BOOL">FALSE</field>
     </block>
    </value>
    <value name="FaceIndexHeight">
     <block type="math_number" id="yGjL?d2N|if7OIvU5BSe">
      <field name="NUM">0.06</field>
     </block>
    </value>
    <value name="FaceIndexColour">
     <block type="colour_picker" id="$.s_`O7|W)m0,6n1(-[^">
      <field name="COLOUR">#0000ff</field>
     </block>
    </value>
    <value name="DrawTwoSided">
     <block type="logic_boolean" id="_3G9Y0%M1sK.czd:Yjr7">
      <field name="BOOL">FALSE</field>
     </block>
    </value>
    <value name="BackFaceColour">
     <block type="colour_picker" id="d5;Xv+j!1_^uKAFK|+.B">
      <field name="COLOUR">#0000ff</field>
     </block>
    </value>
    <value name="BackFaceOpacity">
     <block type="math_number" id="iG+IWT/w*@:VoO3RBzAg">
      <field name="NUM">1</field>
     </block>
    </value>
    <value name="EdgeArrowSize">
     <block type="math_number" id=",pucz7B1GE:IgT=#GSul">
      <field name="NUM">0</field>
     </block>
    </value>
    <value name="EdgeArrowAngle">
     <block type="math_number" id="rQY;Ai,[m2H!L^;K](Q4">
      <field name="NUM">15</field>
     </block>
    </value>
    <value name="KeepMeshData">
     <block type="logic_boolean" id="}hgOa?1{O!^|%dzrGI?j">
      <field name="BOOL">FALSE</field>
     </block>
    </value>
    <value name="AllowQualityDecrease">
     <block type="logic_boolean" id=",p5Z;RKLN++0Ttt]j=c|">
      <field name="BOOL">TRUE</field>
     </block>
    </value>
    <value name="ForceFaceDeflection">
     <block type="logic_boolean" id=":kH!=_]{pg0fKyCC7uA.">
      <field name="BOOL">FALSE</field>
     </block>
    </value>
    <value name="DrawIsoCurves">
     <block type="logic_boolean" id="A3^Raug4qD{kVMXlWYCM">
      <field name="BOOL">FALSE</field>
     </block>
    </value>
    <value name="IsoCurvesU">
     <block type="math_number" id="6G%(cm-oqlyPqMWj|3]o">
      <field name="NUM">5</field>
     </block>
    </value>
    <value name="IsoCurvesV">
     <block type="math_number" id="`8og2w(_0y6TvOB4sSnV">
      <field name="NUM">5</field>
     </block>
    </value>
    <value name="IsoCurvesColour">
     <block type="colour_picker" id="uv?#=Xy5Hl$bJEJba]x.">
      <field name="COLOUR">#808080</field>
     </block>
    </value>
    <value name="SurfaceAnalysis">
     <block type="bitbybit.occt.enums.surfaceAnalysisEnum" id="~xJLR[I{m!cgyS{f|#0m">
      <field name="bitbybit.occt.enums.surfaceAnalysisEnum">'none'</field>
     </block>
    </value>
    <value name="DraftDirection">
     <block type="bitbybit.vector.vectorXYZ" id="CO+Z##]lwqRT?!@XD!,P">
      <value name="X">
       <block type="math_number" id="vQa#bJ3K%iEF*DMRoCIY">
        <field name="NUM">0</field>
       </block>
      </value>
      <value name="Y">
       <block type="math_number" id="/V,=60Y5K[[*!!L5VVUm">
        <field name="NUM">1</field>
       </block>
      </value>
      <value name="Z">
       <block type="math_number" id="R;]TZ`VU`$m|H{QcSIDV">
        <field name="NUM">0</field>
       </block>
      </value>
     </block>
    </value>
   </block>
  </value>
 </block>
 <block type="bitbybit.babylon.scene.backgroundColour" id="stage" x="0" y="632">
  <value name="Colour">
   <block type="colour_picker" id="0ITl`rhUCxwD2$q]Q}}v">
    <field name="COLOUR">#15171a</field>
   </block>
  </value>
  <next>
   <block type="bitbybit.babylon.scene.enableSkybox" id="B8OlWoHGXox7LHf#FTNF">
    <value name="Skybox">
     <block type="bitbybit.babylon.enums.skyboxEnum" id=":GdNZ@VD8^2~O=4FPYs?">
      <field name="bitbybit.babylon.enums.skyboxEnum">'city'</field>
     </block>
    </value>
    <value name="Size">
     <block type="math_number" id="e9VvX5y/:,*}IKy6_Whv">
      <field name="NUM">1000</field>
     </block>
    </value>
    <value name="Blur">
     <block type="math_number" id="~,!@E@qZuFL8{pjfABPo">
      <field name="NUM">0.1</field>
     </block>
    </value>
    <value name="EnvironmentIntensity">
     <block type="math_number" id="~{g5m7GcJ6ZvdO$wH^#P">
      <field name="NUM">0.4</field>
     </block>
    </value>
    <value name="HideSkybox">
     <block type="logic_boolean" id=",%@w5iI=$jJu(6]9T7.+">
      <field name="BOOL">TRUE</field>
     </block>
    </value>
    <value name="EnableGroundProjection">
     <block type="logic_boolean" id="X(dFxGpo+ZWoMCDzjm]4">
      <field name="BOOL">FALSE</field>
     </block>
    </value>
    <value name="ProjectedGroundRadius">
     <block type="math_number" id="$nFzX1-8$hqS8B!J~2Cj">
      <field name="NUM">20</field>
     </block>
    </value>
    <value name="ProjectedGroundHeight">
     <block type="math_number" id="1?JZk0n.S.UvW#%Uw)DQ">
      <field name="NUM">3</field>
     </block>
    </value>
    <next>
     <block type="bitbybit.babylon.scene.drawDirectionalLightNoReturn" id="{^xZ6}MdwtRs={d^h?Ps">
      <value name="Direction">
       <block type="bitbybit.vector.vectorXYZ" id="5X(,9Byxoa5wAY7|$)4%">
        <value name="X">
         <block type="math_number" id="r#0RV;-__iiYChXK1oo7">
          <field name="NUM">-0.45</field>
         </block>
        </value>
        <value name="Y">
         <block type="math_number" id="upiTEQT#{r{;_+TW;7[a">
          <field name="NUM">-1</field>
         </block>
        </value>
        <value name="Z">
         <block type="math_number" id="~6Oe*0~;@Xk5glL_r)@|">
          <field name="NUM">-0.3</field>
         </block>
        </value>
       </block>
      </value>
      <value name="Intensity">
       <block type="math_number" id="zE=~y:?hc[?y+/Dt[,9v">
        <field name="NUM">2</field>
       </block>
      </value>
      <value name="Diffuse">
       <block type="colour_picker" id="/jcK!sZ0/_Tqg%@HZyfw">
        <field name="COLOUR">#ffffff</field>
       </block>
      </value>
      <value name="Specular">
       <block type="colour_picker" id="GGdf*ydkD86iZ7p[)n|A">
        <field name="COLOUR">#ffffff</field>
       </block>
      </value>
      <value name="ShadowGeneratorMapSize">
       <block type="math_number" id="_dA|2)#I3N*qlC}wkbPl">
        <field name="NUM">4096</field>
       </block>
      </value>
      <value name="EnableShadows">
       <block type="logic_boolean" id="EsX)X=E%Pt=nOj@k%7t8">
        <field name="BOOL">TRUE</field>
       </block>
      </value>
      <value name="ShadowDarkness">
       <block type="math_number" id="$21Wnu_N[j|AI]ZJW#zC">
        <field name="NUM">0</field>
       </block>
      </value>
      <value name="ShadowUsePercentageCloserFiltering">
       <block type="logic_boolean" id="+63YnY*T}3.Gj;,lW1%|">
        <field name="BOOL">TRUE</field>
       </block>
      </value>
      <value name="TransparencyShadow">
       <block type="logic_boolean" id="-9~F11CL|eEj*2Th?k2X">
        <field name="BOOL">FALSE</field>
       </block>
      </value>
      <value name="ShadowContactHardeningLightSizeUVRatio">
       <block type="math_number" id="@uQiR%M[Lc43fPP{SQ+:">
        <field name="NUM">0.2</field>
       </block>
      </value>
      <value name="ShadowBias">
       <block type="math_number" id="f,BToUE*5TELBrjvkdDl">
        <field name="NUM">0.0003</field>
       </block>
      </value>
      <value name="ShadowNormalBias">
       <block type="math_number" id=",^^qcm-nEcy9{}@saR$c">
        <field name="NUM">1</field>
       </block>
      </value>
      <value name="ShadowMaxZ">
       <block type="math_number" id="JSof6]bog!.[1^mD:==X">
        <field name="NUM">1000</field>
       </block>
      </value>
      <value name="ShadowMinZ">
       <block type="math_number" id="lBJm!A$n[yyc;20e[Y|+">
        <field name="NUM">-1000</field>
       </block>
      </value>
      <value name="ShadowRefreshRate">
       <block type="math_number" id="/,#[Scgz@I.NoJPO]{_A">
        <field name="NUM">1</field>
       </block>
      </value>
      <next>
       <block type="bitbybit.babylon.scene.adjustActiveArcRotateCamera" id="u)+$Y}Vn|aT#V4-/T0i%">
        <value name="Position">
         <block type="bitbybit.point.pointXYZ" id="-wo7R3:9#e|pN-a|S9[H">
          <value name="X">
           <block type="math_number" id="+!TYU`j:bgbG7a!@oKuJ">
            <field name="NUM">620</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id="Rdh=v?oAnTX)j?C%^/GM">
            <field name="NUM">380</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="S,5ZCW-}Offc!,B];+Yo">
            <field name="NUM">760</field>
           </block>
          </value>
         </block>
        </value>
        <value name="LookAt">
         <block type="bitbybit.point.pointXYZ" id="iP:4{MgyACQqnyKf-)G7">
          <value name="X">
           <block type="math_number" id="Y9O37(U4Y.*${v`;I%.!">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id="iJ[bRT?R~/K2qpF(2*o/">
            <field name="NUM">-20</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="b8)KzM6pP];HrTL}w%pr">
            <field name="NUM">0</field>
           </block>
          </value>
         </block>
        </value>
        <value name="LowerBetaLimit">
         <block type="math_number" id="OQJP*lS(rMgVO#,(L$?h">
          <field name="NUM">1</field>
         </block>
        </value>
        <value name="UpperBetaLimit">
         <block type="math_number" id="qPSHrCz;L+%y%h+1z(R8">
          <field name="NUM">179</field>
         </block>
        </value>
        <value name="AngularSensibilityX">
         <block type="math_number" id="%T=`Yn/YyL8pXVQs1o1.">
          <field name="NUM">1000</field>
         </block>
        </value>
        <value name="AngularSensibilityY">
         <block type="math_number" id="=/E-TMh{w^.]qDY:0:jZ">
          <field name="NUM">1000</field>
         </block>
        </value>
        <value name="MaxZ">
         <block type="math_number" id="}=xA~dEB_R-Ogjt.fr:f">
          <field name="NUM">20000</field>
         </block>
        </value>
        <value name="PanningSensibility">
         <block type="math_number" id=",LJ5d@{HlC,FuVNvnDil">
          <field name="NUM">2</field>
         </block>
        </value>
        <value name="WheelPrecision">
         <block type="math_number" id="~@y^hI|%Kvaxs](4y%a2">
          <field name="NUM">3</field>
         </block>
        </value>
       </block>
      </next>
     </block>
    </next>
   </block>
  </next>
 </block>
 <block type="procedures_defreturn" id="framePlate" collapsed="true" x="0" y="2687">
  <field name="NAME">frame plate</field>
  <comment pinned="false" h="80" w="160">Describe this function...</comment>
  <statement name="STACK">
   <block type="variables_set" id="p8EXq$y(#rxR=9T|YJ(_">
    <field name="VAR" id="outline">outline</field>
    <value name="VALUE">
     <block type="bitbybit.occt.fillets.fillet2d" id=";v/F/:G,RAR*$pQBqvP~">
      <value name="Shape">
       <block type="bitbybit.occt.shapes.wire.createRectangleWire" id="c.^8HDXv+ck^HvR1mo85">
        <value name="Width">
         <block type="math_number" id="LYkEN%#B#iHd,k;Z0h_n">
          <field name="NUM">96</field>
         </block>
        </value>
        <value name="Length">
         <block type="math_number" id=":*;h]y114|cdGe*p!3`t">
          <field name="NUM">150</field>
         </block>
        </value>
        <value name="Center">
         <block type="bitbybit.point.pointXYZ" id="/2#j2hC)N90Sbhxsn)7P">
          <value name="X">
           <block type="math_number" id="I1Q[?_^]+ZEYdyHq%Qhl">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id="~Pr,KG]%~E^u%y{j{b3C">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="F%0uy!Q}T@jJAy^XS4bW">
            <field name="NUM">0</field>
           </block>
          </value>
         </block>
        </value>
        <value name="Direction">
         <block type="bitbybit.vector.vectorXYZ" id=")^+k`._3p~w$:{R1q-YA">
          <value name="X">
           <block type="math_number" id="Df0,;5~!ZAREwdT[XaRz">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id=":%`LZ#q`)f^(W*+5qxs7">
            <field name="NUM">1</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="94+W}c;/Xg{Y`1fYpG9o">
            <field name="NUM">0</field>
           </block>
          </value>
         </block>
        </value>
       </block>
      </value>
      <value name="Radius">
       <block type="math_number" id="eo+E`(tlyWo54b{+boM4">
        <field name="NUM">26</field>
       </block>
      </value>
     </block>
    </value>
    <next>
     <block type="variables_set" id="brZ[1wt!ClBqS_eObKI3">
      <field name="VAR" id="slab">slab</field>
      <value name="VALUE">
       <block type="bitbybit.occt.operations.extrude" id="(:gX[N3::!.#Qd?pIu]m">
        <value name="Shape">
         <block type="bitbybit.occt.shapes.face.createFaceFromWire" id="4$aAaM~/kl{Yut!zE(@k">
          <value name="Shape">
           <block type="variables_get" id="vX@q|f~p{x)Mg9t_D9|q">
            <field name="VAR" id="outline">outline</field>
           </block>
          </value>
          <value name="Planar">
           <block type="logic_boolean" id="beG}lS@jZv[[5OE:JG:M">
            <field name="BOOL">TRUE</field>
           </block>
          </value>
         </block>
        </value>
        <value name="Direction">
         <block type="bitbybit.vector.vectorXYZ" id="z;[JK|^DEU:?^LUHiU@-">
          <value name="X">
           <block type="math_number" id="Nj6xE)(`1War4YVlRjWs">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id=",i[{gmx:JH|ki!IKw0.V">
            <field name="NUM">3</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="nWx1dzT?=iL~MAhX.X^d">
            <field name="NUM">0</field>
           </block>
          </value>
         </block>
        </value>
       </block>
      </value>
      <next>
       <block type="variables_set" id="o:}#{O3/K6R%cx@oY?zk">
        <field name="VAR" id="hexagons">hexagons</field>
        <value name="VALUE">
         <block type="bitbybit.occt.shapes.wire.hexagonsInGrid" id="~3EAfNXJz99b9[?gj:{n">
          <value name="Width">
           <block type="math_number" id="QuHA#?e$}{nSl;8mT=RC">
            <field name="NUM">56</field>
           </block>
          </value>
          <value name="Height">
           <block type="math_number" id="(C7gYsRo1!1_/-=|(k7b">
            <field name="NUM">20</field>
           </block>
          </value>
          <value name="NrHexagonsInWidth">
           <block type="math_number" id="f4i@iY$bvK=p=]qPh)B!">
            <field name="NUM">5</field>
           </block>
          </value>
          <value name="NrHexagonsInHeight">
           <block type="math_number" id="~GFnu1a%$|7a=l1@#d_X">
            <field name="NUM">2</field>
           </block>
          </value>
          <value name="FlatTop">
           <block type="logic_boolean" id="QFk=+QIVq1ouocy.z!LP">
            <field name="BOOL">TRUE</field>
           </block>
          </value>
          <value name="ExtendTop">
           <block type="logic_boolean" id="ZaU(vJW7#}tF}H-4,uVD">
            <field name="BOOL">FALSE</field>
           </block>
          </value>
          <value name="ExtendBottom">
           <block type="logic_boolean" id="HxFGLmCAwn1kmpMj02;J">
            <field name="BOOL">FALSE</field>
           </block>
          </value>
          <value name="ExtendLeft">
           <block type="logic_boolean" id="o^dLJB?*E!Plz#aWVLxj">
            <field name="BOOL">FALSE</field>
           </block>
          </value>
          <value name="ExtendRight">
           <block type="logic_boolean" id="OOV3Z*~o],UF?Z4z@07X">
            <field name="BOOL">FALSE</field>
           </block>
          </value>
          <value name="ScalePatternWidth">
           <block type="lists_create_with" id="2e~k|3lq@D3TcemDr{6:">
            <mutation items="1">
            </mutation>
            <value name="ADD0">
             <block type="math_number" id="3x*,F;`C/a)j!JxS[v[d">
              <field name="NUM">0.8</field>
             </block>
            </value>
           </block>
          </value>
          <value name="ScalePatternHeight">
           <block type="lists_create_with" id=",5*}ip4x;Md45c$I,hKU">
            <mutation items="1">
            </mutation>
            <value name="ADD0">
             <block type="math_number" id="dI]}F5(j]mol.i6J#D!s">
              <field name="NUM">0.8</field>
             </block>
            </value>
           </block>
          </value>
         </block>
        </value>
        <next>
         <block type="variables_set" id="7xW/v^Fgw/M*#7A-OoS(">
          <field name="VAR" id="vents">vents</field>
          <value name="VALUE">
           <block type="bitbybit.occt.shapes.compound.makeCompound" id="U]KSIZ]MbBc0GGTGl?T7">
            <value name="Shapes">
             <block type="bitbybit.occt.operations.extrudeShapes" id="1M0zUsZ[p~/x`Qjr9jG`">
              <value name="Shapes">
               <block type="bitbybit.occt.shapes.face.createFacesFromWires" id="K!PvgUWm?X,Va-c!0Jwb">
                <value name="Shapes">
                 <block type="variables_get" id="cc!{!g4w!6q%3[4ud/4B">
                  <field name="VAR" id="hexagons">hexagons</field>
                 </block>
                </value>
                <value name="Planar">
                 <block type="logic_boolean" id="*6}?,xE2{H[@3Wzvet`8">
                  <field name="BOOL">TRUE</field>
                 </block>
                </value>
               </block>
              </value>
              <value name="Direction">
               <block type="bitbybit.vector.vectorXYZ" id="MAK4K.WO)_^YOW)P){18">
                <value name="X">
                 <block type="math_number" id="[P%HOR3$e3ClU81PND5l">
                  <field name="NUM">0</field>
                 </block>
                </value>
                <value name="Y">
                 <block type="math_number" id="v*R?Uo{6%m-w@(1%.Q%/">
                  <field name="NUM">3</field>
                 </block>
                </value>
                <value name="Z">
                 <block type="math_number" id="YaVsuXvC6D4Q4z$7^kgs">
                  <field name="NUM">0</field>
                 </block>
                </value>
               </block>
              </value>
             </block>
            </value>
           </block>
          </value>
         </block>
        </next>
       </block>
      </next>
     </block>
    </next>
   </block>
  </statement>
  <value name="RETURN">
   <block type="bitbybit.occt.booleans.difference" id="[kWj$yMMpeZC~n5J?C3]">
    <value name="Shape">
     <block type="variables_get" id="RtI_s-K6C~E5LA{i9V=6">
      <field name="VAR" id="slab">slab</field>
     </block>
    </value>
    <value name="Shapes">
     <block type="lists_create_with" id="R/ShZ4G0E14;h,*wj7Ad">
      <mutation items="2">
      </mutation>
      <value name="ADD0">
       <block type="bitbybit.occt.transforms.translate" id="{hk.#:H*}L7:P(vC5K#F">
        <value name="Shape">
         <block type="variables_get" id="sRS==LS~VhK+]9PycvB(">
          <field name="VAR" id="vents">vents</field>
         </block>
        </value>
        <value name="Translation">
         <block type="bitbybit.vector.vectorXYZ" id="[rvhW[Mm.I^~A6-1n^n*">
          <value name="X">
           <block type="math_number" id="hE!8F4*}ZL`5?zjk_BZ8">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id="ay)kiuZ$~q!B3#P33ev8">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="dp6L#(gjbF`xg;hsNOZP">
            <field name="NUM">60</field>
           </block>
          </value>
         </block>
        </value>
       </block>
      </value>
      <value name="ADD1">
       <block type="bitbybit.occt.transforms.translate" id="ce{VWVLeS(pNTHf5Ic^{">
        <value name="Shape">
         <block type="variables_get" id="jx!,+=3#XuO0OamVQY?.">
          <field name="VAR" id="vents">vents</field>
         </block>
        </value>
        <value name="Translation">
         <block type="bitbybit.vector.vectorXYZ" id="iMP[m]O[9UpmPNCMo/,N">
          <value name="X">
           <block type="math_number" id="2`K9Yk!41DvsDHa/v%F_">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id="/i9/Ig?th1N*);.j];!/">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="-Hz%iehO%ypqYcpfNHIT">
            <field name="NUM">-60</field>
           </block>
          </value>
         </block>
        </value>
       </block>
      </value>
     </block>
    </value>
    <value name="KeepEdges">
     <block type="logic_boolean" id="JMXxw6z;?;de?i`nMLKP">
      <field name="BOOL">FALSE</field>
     </block>
    </value>
    <value name="Strategy">
     <block type="bitbybit.occt.enums.booleanStrategyEnum" id="kKYU{F9~a_jOX01LD69n">
      <field name="bitbybit.occt.enums.booleanStrategyEnum">'oneAfterAnother'</field>
     </block>
    </value>
   </block>
  </value>
 </block>
 <block type="procedures_defreturn" id="around" collapsed="true" x="0" y="2783">
  <mutation>
   <arg name="shape" varid="shape">
   </arg>
   <arg name="count" varid="count">
   </arg>
  </mutation>
  <field name="NAME">around</field>
  <comment pinned="false" h="80" w="160">Describe this function...</comment>
  <statement name="STACK">
   <block type="variables_set" id="|qfrkW_1MEu@!{Eq(;S/">
    <field name="VAR" id="angles">angles</field>
    <value name="VALUE">
     <block type="bitbybit.lists.createEmptyList" id="]s[?NjgqK9Fx5gOAXo5!">
     </block>
    </value>
    <next>
     <block type="controls_for" id="F-Q-RU%QhCyD@{A6l|N1">
      <field name="VAR" id="i">i</field>
      <value name="FROM">
       <block type="math_number" id="*[M2YssE:qgKD;#L;=.p">
        <field name="NUM">0</field>
       </block>
      </value>
      <value name="TO">
       <block type="math_arithmetic" id="XGFi!rHYoyGaN**_mhi5">
        <field name="OP">MINUS</field>
        <value name="A">
         <block type="variables_get" id="FgCS5E5Jp9bUAu;:h+$f">
          <field name="VAR" id="count">count</field>
         </block>
        </value>
        <value name="B">
         <block type="math_number" id="/.t;CnA;8}3eKmJ-b/l_">
          <field name="NUM">1</field>
         </block>
        </value>
       </block>
      </value>
      <value name="BY">
       <block type="math_number" id="Dn*ab48*MT[#wIQ%L0Tr">
        <field name="NUM">1</field>
       </block>
      </value>
      <statement name="DO">
       <block type="variables_set" id="44,9uzzyn{{bPmP3F;FJ">
        <field name="VAR" id="angles">angles</field>
        <value name="VALUE">
         <block type="bitbybit.lists.addItem" id="JIp?A7F9,bB]D3k[clg=">
          <value name="List">
           <block type="variables_get" id="NH}z~VT`{sUZWhC6Dr9K">
            <field name="VAR" id="angles">angles</field>
           </block>
          </value>
          <value name="Item">
           <block type="math_arithmetic" id="(4D=Sz6%CV{w$r#q76}M">
            <field name="OP">DIVIDE</field>
            <value name="A">
             <block type="math_arithmetic" id="~j`7{PzYVARA}h/+b]TE">
              <field name="OP">MULTIPLY</field>
              <value name="A">
               <block type="math_arithmetic" id="x/|n`)!^%5|wUg2!(E+~">
                <field name="OP">ADD</field>
                <value name="A">
                 <block type="variables_get" id="Jf;1xeAZSp^ehr/#c=6b">
                  <field name="VAR" id="i">i</field>
                 </block>
                </value>
                <value name="B">
                 <block type="math_number" id="sZ+9/9)Bx~B}{V7E3)gc">
                  <field name="NUM">0.5</field>
                 </block>
                </value>
               </block>
              </value>
              <value name="B">
               <block type="math_number" id="GC~9y#v(n_CZTn`=Ox[q">
                <field name="NUM">360</field>
               </block>
              </value>
             </block>
            </value>
            <value name="B">
             <block type="variables_get" id="Busu!Qr+nf]WJ$AKqvsK">
              <field name="VAR" id="count">count</field>
             </block>
            </value>
           </block>
          </value>
          <value name="Clone">
           <block type="logic_boolean" id="J{3:0cuVO80%FlkCTq;T">
            <field name="BOOL">FALSE</field>
           </block>
          </value>
         </block>
        </value>
       </block>
      </statement>
     </block>
    </next>
   </block>
  </statement>
  <value name="RETURN">
   <block type="bitbybit.occt.transforms.rotateShapes" id="d~pH#[y{qr}HLkk.Ff8M">
    <value name="Shapes">
     <block type="bitbybit.lists.repeat" id="g,[YAzeBEj.F:0p39E)R">
      <value name="Item">
       <block type="variables_get" id="Z!l,hEpn~J5WQ*KN-:^]">
        <field name="VAR" id="shape">shape</field>
       </block>
      </value>
      <value name="Times">
       <block type="variables_get" id="V8euQemxni+ZH25(Fkr6">
        <field name="VAR" id="count">count</field>
       </block>
      </value>
     </block>
    </value>
    <value name="Axes">
     <block type="bitbybit.lists.repeat" id="RAdjZx;Uxoj]#k0jYK`f">
      <value name="Item">
       <block type="bitbybit.vector.vectorXYZ" id="8Ew@ra+9B%YO@O6kr+3%">
        <value name="X">
         <block type="math_number" id="`Fj#U}XZM|pj33wJNC.t">
          <field name="NUM">0</field>
         </block>
        </value>
        <value name="Y">
         <block type="math_number" id="/!^B#-a.GKQGv{wiJMQ+">
          <field name="NUM">1</field>
         </block>
        </value>
        <value name="Z">
         <block type="math_number" id="L#9,_POY[hoD+?SY_m7w">
          <field name="NUM">0</field>
         </block>
        </value>
       </block>
      </value>
      <value name="Times">
       <block type="variables_get" id="kiJ5!ObIYU!YB^sPmUXy">
        <field name="VAR" id="count">count</field>
       </block>
      </value>
     </block>
    </value>
    <value name="Angles">
     <block type="variables_get" id="|URS@S5J*Kz3N$%,2/$5">
      <field name="VAR" id="angles">angles</field>
     </block>
    </value>
   </block>
  </value>
 </block>
 <block type="variables_set" id="plateSet" x="0" y="2879">
  <field name="VAR" id="plate">plate</field>
  <value name="VALUE">
   <block type="procedures_callreturn" id="(bZ@}2s/m:%Ppabn_(c6">
    <mutation name="frame plate">
    </mutation>
   </block>
  </value>
  <next>
   <block type="variables_set" id="plateOpenings">
    <field name="VAR" id="plate">plate</field>
    <value name="VALUE">
     <block type="bitbybit.occt.booleans.difference" id="Isd8=m_jsL^bPWaAHnbR">
      <value name="Shape">
       <block type="variables_get" id="4fr,5UulB0RLt8X9[B`F">
        <field name="VAR" id="plate">plate</field>
       </block>
      </value>
      <value name="Shapes">
       <block type="lists_create_with" id=")5dR5,$D5^4[,/F%a*aQ">
        <mutation items="1">
        </mutation>
        <value name="ADD0">
         <block type="procedures_callreturn" id="+]6AzaH4?c;`RnQ-2#Z@">
          <mutation name="leg openings">
           <arg name="legs">
           </arg>
          </mutation>
          <value name="ARG0">
           <block type="variables_get" id="Vs8D@2-y:Lc_T4YiK[M~">
            <field name="VAR" id="legs">legs</field>
           </block>
          </value>
         </block>
        </value>
       </block>
      </value>
      <value name="KeepEdges">
       <block type="logic_boolean" id="4.#{`}6/VJGAW|)a-erb">
        <field name="BOOL">FALSE</field>
       </block>
      </value>
      <value name="Strategy">
       <block type="bitbybit.occt.enums.booleanStrategyEnum" id="3_)P,A}.KMM9DU+Grv|2">
        <field name="bitbybit.occt.enums.booleanStrategyEnum">'oneAfterAnother'</field>
       </block>
      </value>
     </block>
    </value>
    <next>
     <block type="variables_set" id="3_gfG(fE]i(9VEbyfiX-">
      <field name="VAR" id="top plate">top plate</field>
      <value name="VALUE">
       <block type="bitbybit.occt.transforms.translate" id="[/)/DwBg[BMv:bI4e,Uj">
        <value name="Shape">
         <block type="variables_get" id=":XYe=%E~eu(_Yd5S_0X0">
          <field name="VAR" id="plate">plate</field>
         </block>
        </value>
        <value name="Translation">
         <block type="bitbybit.vector.vectorXYZ" id="-?{/(I]cUQJ?*:QB9yB*">
          <value name="X">
           <block type="math_number" id="/IT5|pGMnDufA,$ARgGc">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id=",FE9rdv,f,0tFTIPj8zP">
            <field name="NUM">13</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="`=U=`kw;Z7}Ma_EutM%2">
            <field name="NUM">0</field>
           </block>
          </value>
         </block>
        </value>
       </block>
      </value>
      <next>
       <block type="variables_set" id="jLvL3JhJc27{|mNhy/yi">
        <field name="VAR" id="carbon">carbon</field>
        <value name="VALUE">
         <block type="procedures_callreturn" id="80W:$CFO0iwhk*`f6zLo">
          <mutation name="look">
           <arg name="name">
           </arg>
           <arg name="colour">
           </arg>
           <arg name="metallic">
           </arg>
           <arg name="roughness">
           </arg>
           <arg name="glow">
           </arg>
           <arg name="edge colour">
           </arg>
           <arg name="edge width">
           </arg>
          </mutation>
          <value name="ARG0">
           <block type="text" id=".{cSs7hG|^tBrVymSA9Z">
            <field name="TEXT">carbon</field>
           </block>
          </value>
          <value name="ARG1">
           <block type="colour_picker" id="wjx=7*-$;vmLK6qlL$OD">
            <field name="COLOUR">#23262b</field>
           </block>
          </value>
          <value name="ARG2">
           <block type="math_number" id="2VX5qJ)pzLARufCQyS8T">
            <field name="NUM">0.35</field>
           </block>
          </value>
          <value name="ARG3">
           <block type="math_number" id="o8)2:KB/+UH]3Qu!T/6R">
            <field name="NUM">0.45</field>
           </block>
          </value>
          <value name="ARG4">
           <block type="colour_picker" id="Rg/,,=*Q+CC8tyC^=q2d">
            <field name="COLOUR">#000000</field>
           </block>
          </value>
          <value name="ARG5">
           <block type="colour_picker" id="#7r%}?F3*mwQ1cX1c,ok">
            <field name="COLOUR">#f2f2f2</field>
           </block>
          </value>
          <value name="ARG6">
           <block type="math_number" id="laer|_x7UtYxQO?e6s]H">
            <field name="NUM">6</field>
           </block>
          </value>
         </block>
        </value>
        <next>
         <block type="bitbybit.draw.drawAnyAsyncNoReturn" id="!(;50Ub:=p!i}L%Ci:[$">
          <value name="Entity">
           <block type="lists_create_with" id="_W6l3L#Chjy1yI/x,W.%">
            <mutation items="2">
            </mutation>
            <value name="ADD0">
             <block type="variables_get" id="fZ6i2I=tsFCC8Oc^ioi`">
              <field name="VAR" id="plate">plate</field>
             </block>
            </value>
            <value name="ADD1">
             <block type="variables_get" id="w~GtgqaU4Vxm5Qh12`.U">
              <field name="VAR" id="top plate">top plate</field>
             </block>
            </value>
           </block>
          </value>
          <value name="Options">
           <block type="variables_get" id="$.lR[u{@r@{1d4#-oX6p">
            <field name="VAR" id="carbon">carbon</field>
           </block>
          </value>
         </block>
        </next>
       </block>
      </next>
     </block>
    </next>
   </block>
  </next>
 </block>
 <block type="procedures_defreturn" id="legOpenings" collapsed="true" x="0" y="4083">
  <mutation>
   <arg name="legs" varid="legs">
   </arg>
  </mutation>
  <field name="NAME">leg openings</field>
  <comment pinned="false" h="80" w="160">Describe this function...</comment>
  <value name="RETURN">
   <block type="bitbybit.occt.shapes.compound.makeCompound" id="Jz-M1)l,0ixQOsXG025T">
    <value name="Shapes">
     <block type="procedures_callreturn" id="bCIfmcRf*c_}I=vqRt5a">
      <mutation name="around">
       <arg name="shape">
       </arg>
       <arg name="count">
       </arg>
      </mutation>
      <value name="ARG0">
       <block type="bitbybit.occt.shapes.solid.createCylinder" id="/)CKaOQO(92u477e4n4Q">
        <value name="Radius">
         <block type="math_number" id="$yshrNs:sXHVSE!kh9tB">
          <field name="NUM">6</field>
         </block>
        </value>
        <value name="Height">
         <block type="math_number" id="1a[@GI-pk1a8+r9m/BCb">
          <field name="NUM">3</field>
         </block>
        </value>
        <value name="Center">
         <block type="bitbybit.point.pointXYZ" id="^Y%-!(sm{A3R[D.a|Rsr">
          <value name="X">
           <block type="math_number" id="Z~M|dvrfGZ8#Oh4xBoPd">
            <field name="NUM">52</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id="1|7USzokbE#*EC#mk3Oc">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="Mk^}190o,Zscc)nAU5wx">
            <field name="NUM">0</field>
           </block>
          </value>
         </block>
        </value>
        <value name="Direction">
         <block type="bitbybit.vector.vectorXYZ" id="`!sJ)w`{%eQE|7tYT6O5">
          <value name="X">
           <block type="math_number" id="RCQknx8Jpx?@]Ro5c`!-">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id="z:+SW#wCrSP0k,h!,Oj(">
            <field name="NUM">1</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="(9^8w!Xk#I{Znc.;`zn2">
            <field name="NUM">0</field>
           </block>
          </value>
         </block>
        </value>
        <value name="Angle">
         <block type="math_number" id="?-63be?wVx#,7ZDvg$UG">
          <field name="NUM">360</field>
         </block>
        </value>
        <value name="OriginOnCenter">
         <block type="logic_boolean" id="^#tvhmqSY_9Y|v7**n#o">
          <field name="BOOL">FALSE</field>
         </block>
        </value>
       </block>
      </value>
      <value name="ARG1">
       <block type="variables_get" id="!20:Gv_o`fL_SO;|)JDG">
        <field name="VAR" id="legs">legs</field>
       </block>
      </value>
     </block>
    </value>
   </block>
  </value>
 </block>
 <block type="procedures_defreturn" id="m3Bolt" collapsed="true" x="0" y="4179">
  <mutation>
   <arg name="length" varid="length">
   </arg>
  </mutation>
  <field name="NAME">m3 bolt</field>
  <comment pinned="false" h="80" w="160">Describe this function...</comment>
  <statement name="STACK">
   <block type="variables_set" id=")J-[t:nklkpia7l4r4}L">
    <field name="VAR" id="profile">profile</field>
    <value name="VALUE">
     <block type="lists_create_with" id="=r%r$*@(5@5Dl47=Z*=U">
      <mutation items="8">
      </mutation>
      <value name="ADD0">
       <block type="bitbybit.point.pointXYZ" id="oLk=JJ:/N)gcbyO4+`Y`">
        <value name="X">
         <block type="math_number" id="2d^uov}K84T}):Q,kSlJ">
          <field name="NUM">0</field>
         </block>
        </value>
        <value name="Y">
         <block type="math_number" id="dr$jWe57I)LeT_cZ$),P">
          <field name="NUM">-3</field>
         </block>
        </value>
        <value name="Z">
         <block type="math_number" id="z$B3b_AM#w.6T~e|Q`3l">
          <field name="NUM">0</field>
         </block>
        </value>
       </block>
      </value>
      <value name="ADD1">
       <block type="bitbybit.point.pointXYZ" id="[/Iy;A1#.=MTGH#L{(*$">
        <value name="X">
         <block type="math_number" id="n-/ulbm#FU94;!qj=cbI">
          <field name="NUM">2.35</field>
         </block>
        </value>
        <value name="Y">
         <block type="math_number" id="E/v$Jc?p5AF!C%el#H_E">
          <field name="NUM">-3</field>
         </block>
        </value>
        <value name="Z">
         <block type="math_number" id="iup#RX#6DZI}0mCVV#{b">
          <field name="NUM">0</field>
         </block>
        </value>
       </block>
      </value>
      <value name="ADD2">
       <block type="bitbybit.point.pointXYZ" id="wF)Pi:v^BF5:FjH4?GZR">
        <value name="X">
         <block type="math_number" id="$c/bVwwLD=fdvB}JlpUL">
          <field name="NUM">2.75</field>
         </block>
        </value>
        <value name="Y">
         <block type="math_number" id="}C6^i-fsUN4o!SM:nH2l">
          <field name="NUM">-2.6</field>
         </block>
        </value>
        <value name="Z">
         <block type="math_number" id="Qq3SlXomdlXt+8X+YHkD">
          <field name="NUM">0</field>
         </block>
        </value>
       </block>
      </value>
      <value name="ADD3">
       <block type="bitbybit.point.pointXYZ" id="0PI~Ci9f0f.~eP84`I*w">
        <value name="X">
         <block type="math_number" id="{:#!X,O=Zftq${9:u=y_">
          <field name="NUM">2.75</field>
         </block>
        </value>
        <value name="Y">
         <block type="math_number" id="W;}po[q(=!i/,ooDsZ`u">
          <field name="NUM">0</field>
         </block>
        </value>
        <value name="Z">
         <block type="math_number" id="fNRBgBJsP`Ekn6hWQH9v">
          <field name="NUM">0</field>
         </block>
        </value>
       </block>
      </value>
      <value name="ADD4">
       <block type="bitbybit.point.pointXYZ" id="$mfE!dnf9k(TPON[]BHV">
        <value name="X">
         <block type="math_number" id="8aef|bEs(#rmZ!nQ5.-%">
          <field name="NUM">1.5</field>
         </block>
        </value>
        <value name="Y">
         <block type="math_number" id="q]eH0b?Mj{uQ{h{,rnK#">
          <field name="NUM">0</field>
         </block>
        </value>
        <value name="Z">
         <block type="math_number" id="k6xD8Ud-aa(gE_`=RHg^">
          <field name="NUM">0</field>
         </block>
        </value>
       </block>
      </value>
      <value name="ADD5">
       <block type="bitbybit.point.pointXYZ" id="AgWwU}gBk!?$#^RbXLE!">
        <value name="X">
         <block type="math_number" id="s*]}[cU]U5(g/1%0V9Tn">
          <field name="NUM">1.5</field>
         </block>
        </value>
        <value name="Y">
         <block type="math_arithmetic" id="3/r~V$vir4}siQ~hzEIh">
          <field name="OP">MINUS</field>
          <value name="A">
           <block type="variables_get" id="Y47pMBu{cOpC3,4!zrU^">
            <field name="VAR" id="length">length</field>
           </block>
          </value>
          <value name="B">
           <block type="math_number" id=":{`[Ytk2FZzi{amE)Ivp">
            <field name="NUM">0.4</field>
           </block>
          </value>
         </block>
        </value>
        <value name="Z">
         <block type="math_number" id="7KPaZ:rGBC9Bp^n?|+i9">
          <field name="NUM">0</field>
         </block>
        </value>
       </block>
      </value>
      <value name="ADD6">
       <block type="bitbybit.point.pointXYZ" id="~:=+UIZpp`Kz{6g$K_ht">
        <value name="X">
         <block type="math_number" id=".U9]SvEcph~y*Cw*/tfz">
          <field name="NUM">1.1</field>
         </block>
        </value>
        <value name="Y">
         <block type="variables_get" id="!D_J;kZj{11-SA,8SEtV">
          <field name="VAR" id="length">length</field>
         </block>
        </value>
        <value name="Z">
         <block type="math_number" id="|BRY7H)/OdYW_]#Ob_tq">
          <field name="NUM">0</field>
         </block>
        </value>
       </block>
      </value>
      <value name="ADD7">
       <block type="bitbybit.point.pointXYZ" id=".D`]tUA@mA$ql~r52GQ_">
        <value name="X">
         <block type="math_number" id="eZ{Zk^[1jS5UYs0t%}:F">
          <field name="NUM">0</field>
         </block>
        </value>
        <value name="Y">
         <block type="variables_get" id="fbHZSA1*wNaND{q.IY]N">
          <field name="VAR" id="length">length</field>
         </block>
        </value>
        <value name="Z">
         <block type="math_number" id="{(%L~7Y9OZuRW)NGpoey">
          <field name="NUM">0</field>
         </block>
        </value>
       </block>
      </value>
     </block>
    </value>
    <next>
     <block type="variables_set" id="#J3OYgho`jrc*BuCra!G">
      <field name="VAR" id="body">body</field>
      <value name="VALUE">
       <block type="bitbybit.occt.operations.revolve" id="w%~a/$_=)vp/yTnhF.D.">
        <value name="Shape">
         <block type="bitbybit.occt.shapes.face.createFaceFromWire" id=",WdL[OIX::Jq.pPERd7Q">
          <value name="Shape">
           <block type="bitbybit.occt.shapes.wire.createPolygonWire" id="}ET`h2GBG+J^Hlh)]!fv">
            <value name="Points">
             <block type="variables_get" id="9/?[l$`G/vXpZ|!pwtX5">
              <field name="VAR" id="profile">profile</field>
             </block>
            </value>
           </block>
          </value>
          <value name="Planar">
           <block type="logic_boolean" id="r]V].]QIz?yx:J`Lu_a]">
            <field name="BOOL">TRUE</field>
           </block>
          </value>
         </block>
        </value>
        <value name="Angle">
         <block type="math_number" id="WX6,wHN]?e^u8+K?q2tP">
          <field name="NUM">360</field>
         </block>
        </value>
        <value name="Direction">
         <block type="bitbybit.vector.vectorXYZ" id="(:^Ty9gcYQJ:q`]3SBeP">
          <value name="X">
           <block type="math_number" id="[eAQFLk7eju#i1cI4.OM">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id="uRD?XTwQGjTj[gc:;lm;">
            <field name="NUM">1</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="#k+)En%b0m)`+.*^[BQ5">
            <field name="NUM">0</field>
           </block>
          </value>
         </block>
        </value>
        <value name="Copy">
         <block type="logic_boolean" id="!+TV*6lFGybUCHw$-w_!">
          <field name="BOOL">FALSE</field>
         </block>
        </value>
       </block>
      </value>
      <next>
       <block type="variables_set" id="B%%wi})CyI,FxeC)/UF;">
        <field name="VAR" id="socket">socket</field>
        <value name="VALUE">
         <block type="bitbybit.occt.operations.extrude" id="]pdm%[}8lPUiB/g9_qp,">
          <value name="Shape">
           <block type="bitbybit.occt.shapes.face.createFaceFromWire" id="9UN;D_%s=:QdgHLb+c*,">
            <value name="Shape">
             <block type="bitbybit.occt.shapes.wire.createNGonWire" id=")L}JZ_JVg6;]SX3Jz8SU">
              <value name="Center">
               <block type="bitbybit.point.pointXYZ" id="kH1^kEqyd=6%0!]TQ~Yj">
                <value name="X">
                 <block type="math_number" id="InBfNWZCJe#%(I*[b?!n">
                  <field name="NUM">0</field>
                 </block>
                </value>
                <value name="Y">
                 <block type="math_number" id="`J0crNWrX7u6s_S3EJ8V">
                  <field name="NUM">-3.5</field>
                 </block>
                </value>
                <value name="Z">
                 <block type="math_number" id="V;l.jN9M@,ejQ|mq+z4l">
                  <field name="NUM">0</field>
                 </block>
                </value>
               </block>
              </value>
              <value name="Direction">
               <block type="bitbybit.vector.vectorXYZ" id="FaUH=wVk{{}H_MOVg2.#">
                <value name="X">
                 <block type="math_number" id="RAtP}Yam;Np#p%8,Dv@1">
                  <field name="NUM">0</field>
                 </block>
                </value>
                <value name="Y">
                 <block type="math_number" id="XfmDss4.*Z3{Z0d2qLta">
                  <field name="NUM">1</field>
                 </block>
                </value>
                <value name="Z">
                 <block type="math_number" id="%gC2xe*x%kArT^Y}Un5b">
                  <field name="NUM">0</field>
                 </block>
                </value>
               </block>
              </value>
              <value name="NrCorners">
               <block type="math_number" id="LtK$nm%Nqfu[:$h}![:s">
                <field name="NUM">6</field>
               </block>
              </value>
              <value name="Radius">
               <block type="math_number" id="Yj!?cVTsCf(c.|!n4R*L">
                <field name="NUM">1.45</field>
               </block>
              </value>
             </block>
            </value>
            <value name="Planar">
             <block type="logic_boolean" id="EkSJ*f3;:)g-~Q^)*x3f">
              <field name="BOOL">TRUE</field>
             </block>
            </value>
           </block>
          </value>
          <value name="Direction">
           <block type="bitbybit.vector.vectorXYZ" id="QA1XfN|*_2Okmw]/Jxds">
            <value name="X">
             <block type="math_number" id="or]w|Cv%4H![Bg_1rPKS">
              <field name="NUM">0</field>
             </block>
            </value>
            <value name="Y">
             <block type="math_number" id="c!3AL[?QF!1YM6Ix`XnQ">
              <field name="NUM">2.5</field>
             </block>
            </value>
            <value name="Z">
             <block type="math_number" id="fkv@wRgB.wmDv0Eci81!">
              <field name="NUM">0</field>
             </block>
            </value>
           </block>
          </value>
         </block>
        </value>
       </block>
      </next>
     </block>
    </next>
   </block>
  </statement>
  <value name="RETURN">
   <block type="bitbybit.occt.booleans.difference" id="weOntUfD+R+K|Rk$Z;0i">
    <value name="Shape">
     <block type="variables_get" id="|mZz4.bmX/[/^2LYbd2b">
      <field name="VAR" id="body">body</field>
     </block>
    </value>
    <value name="Shapes">
     <block type="lists_create_with" id=".rxnG4jWu1!l9Ok/*~df">
      <mutation items="1">
      </mutation>
      <value name="ADD0">
       <block type="variables_get" id="04T#aoZ3CQZd(h^S!Mv+">
        <field name="VAR" id="socket">socket</field>
       </block>
      </value>
     </block>
    </value>
    <value name="KeepEdges">
     <block type="logic_boolean" id="EkAg@VnIaFT[f70PK~kl">
      <field name="BOOL">FALSE</field>
     </block>
    </value>
    <value name="Strategy">
     <block type="bitbybit.occt.enums.booleanStrategyEnum" id=")]UJ+Bo.4H)6J3mEF;,U">
      <field name="bitbybit.occt.enums.booleanStrategyEnum">'oneAfterAnother'</field>
     </block>
    </value>
   </block>
  </value>
 </block>
 <block type="variables_set" id="standoffs" x="0" y="4275">
  <field name="VAR" id="half back">half back</field>
  <value name="VALUE">
   <block type="math_arithmetic" id="ZW4FiP@Ew_!Wl5:8vwOh">
    <field name="OP">DIVIDE</field>
    <value name="A">
     <block type="math_number" id="k]HjWA}sdTL5I6~g66GZ">
      <field name="NUM">-180</field>
     </block>
    </value>
    <value name="B">
     <block type="variables_get" id="3s=@=-:PMIb4FfqO=V@y">
      <field name="VAR" id="arms">arms</field>
     </block>
    </value>
   </block>
  </value>
  <next>
   <block type="variables_set" id="_?_|%_15s;udyA_90znr">
    <field name="VAR" id="post">post</field>
    <value name="VALUE">
     <block type="bitbybit.occt.transforms.rotate" id="V${F3^rPyV.^zLS)LH4!">
      <value name="Shape">
       <block type="bitbybit.occt.shapes.solid.createCylinder" id="j)+K)f~OvM2r0YgKgH~O">
        <value name="Radius">
         <block type="math_number" id="i]gqS=_T*9{LG*ZnB~:C">
          <field name="NUM">3.2</field>
         </block>
        </value>
        <value name="Height">
         <block type="math_number" id="i.6[06nRwNQ|(2Um;`_W">
          <field name="NUM">10</field>
         </block>
        </value>
        <value name="Center">
         <block type="bitbybit.point.pointXYZ" id="`:~?U_b`V^=!Q4ZhK)q:">
          <value name="X">
           <block type="math_number" id="+G)LUGxh=wVyj6=},U;e">
            <field name="NUM">40</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id="nr,npHE6lHPY,2z|lKCL">
            <field name="NUM">3</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="FG8E^TiVFi$A7AfqMc_F">
            <field name="NUM">0</field>
           </block>
          </value>
         </block>
        </value>
        <value name="Direction">
         <block type="bitbybit.vector.vectorXYZ" id="i@j*TB}CoHc(e05;!SVS">
          <value name="X">
           <block type="math_number" id="K|(nSc(WvbRF[yfRSA0=">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id=":R.#[vQkCm4`,503#ptx">
            <field name="NUM">1</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="*OYn{lo%Kyk|hF5hUzh-">
            <field name="NUM">0</field>
           </block>
          </value>
         </block>
        </value>
        <value name="Angle">
         <block type="math_number" id="!yg.BQVhT9kwV87a.oe!">
          <field name="NUM">360</field>
         </block>
        </value>
        <value name="OriginOnCenter">
         <block type="logic_boolean" id="::faq*(yPP+,M?vhi9xS">
          <field name="BOOL">FALSE</field>
         </block>
        </value>
       </block>
      </value>
      <value name="Axis">
       <block type="bitbybit.vector.vectorXYZ" id="RBx}5i{Aq[D!Va-`C6Zr">
        <value name="X">
         <block type="math_number" id=".~C;--P?ebhkeGH}8Al7">
          <field name="NUM">0</field>
         </block>
        </value>
        <value name="Y">
         <block type="math_number" id="px-26y;lpHdlwNs`i5:A">
          <field name="NUM">1</field>
         </block>
        </value>
        <value name="Z">
         <block type="math_number" id="]!s-:][JBd/3}MO?FEDD">
          <field name="NUM">0</field>
         </block>
        </value>
       </block>
      </value>
      <value name="Angle">
       <block type="variables_get" id="{=^(;s1;A@BTiJHzl~{J">
        <field name="VAR" id="half back">half back</field>
       </block>
      </value>
     </block>
    </value>
    <next>
     <block type="variables_set" id="!82,?=kCYNE25bAT,eyz">
      <field name="VAR" id="bolt">bolt</field>
      <value name="VALUE">
       <block type="procedures_callreturn" id="[sAmHfRC?`5b%|If8LD.">
        <mutation name="m3 bolt">
         <arg name="length">
         </arg>
        </mutation>
        <value name="ARG0">
         <block type="math_number" id=";[GUCD1[S$pnM;9=|DUu">
          <field name="NUM">8</field>
         </block>
        </value>
       </block>
      </value>
      <next>
       <block type="variables_set" id="~AM}0~:Cbg11p*xIM8/F">
        <field name="VAR" id="bolt pair">bolt pair</field>
        <value name="VALUE">
         <block type="bitbybit.occt.transforms.rotate" id="FUef?21Ek%C[jWSPM=;`">
          <value name="Shape">
           <block type="bitbybit.occt.shapes.compound.makeCompound" id="-h`EM.@#o$f]K=Yb,aJh">
            <value name="Shapes">
             <block type="lists_create_with" id=";URyfOBTzdK,tRPQZ2^=">
              <mutation items="2">
              </mutation>
              <value name="ADD0">
               <block type="bitbybit.occt.transforms.translate" id="oi4uXZpYs)RI}7q!D{OJ">
                <value name="Shape">
                 <block type="variables_get" id="(Tet^~aQxtbsd4iNqmz[">
                  <field name="VAR" id="bolt">bolt</field>
                 </block>
                </value>
                <value name="Translation">
                 <block type="bitbybit.vector.vectorXYZ" id="Z]s?SHG#A:]3a;QBbGYr">
                  <value name="X">
                   <block type="math_number" id="g,wTp-)oxwkPJSph9auH">
                    <field name="NUM">40</field>
                   </block>
                  </value>
                  <value name="Y">
                   <block type="math_number" id="XwV7NZfkSa`}d:koX0xo">
                    <field name="NUM">0</field>
                   </block>
                  </value>
                  <value name="Z">
                   <block type="math_number" id="Pd0hTt+-}7x*R3i=#H/4">
                    <field name="NUM">0</field>
                   </block>
                  </value>
                 </block>
                </value>
               </block>
              </value>
              <value name="ADD1">
               <block type="bitbybit.occt.transforms.translate" id="d~:0F=-~Fu?fWHx}JVkK">
                <value name="Shape">
                 <block type="bitbybit.occt.transforms.rotate" id="Ij$QQQ)g-7d.9u*H;Fj?">
                  <value name="Shape">
                   <block type="variables_get" id="@sT0rJ7:U%M$+BX`)Y@4">
                    <field name="VAR" id="bolt">bolt</field>
                   </block>
                  </value>
                  <value name="Axis">
                   <block type="bitbybit.vector.vectorXYZ" id="p2bK-rPyiF7;mRvN7)+h">
                    <value name="X">
                     <block type="math_number" id=",38:SYn.=W0w9}b`GnT:">
                      <field name="NUM">1</field>
                     </block>
                    </value>
                    <value name="Y">
                     <block type="math_number" id="u]qb{Q~7)e#y(cv-V$5+">
                      <field name="NUM">0</field>
                     </block>
                    </value>
                    <value name="Z">
                     <block type="math_number" id="mPJJ_ial=qWI_:IvA`|V">
                      <field name="NUM">0</field>
                     </block>
                    </value>
                   </block>
                  </value>
                  <value name="Angle">
                   <block type="math_number" id="gpC}mGGy7cf{OG9vwz_=">
                    <field name="NUM">180</field>
                   </block>
                  </value>
                 </block>
                </value>
                <value name="Translation">
                 <block type="bitbybit.vector.vectorXYZ" id="2J|$=+Bjctxx}h^8bmE#">
                  <value name="X">
                   <block type="math_number" id="EI)s}-47r3g)_(;9PpQT">
                    <field name="NUM">40</field>
                   </block>
                  </value>
                  <value name="Y">
                   <block type="math_number" id="^n7rY2,p*W@g^pxzND/i">
                    <field name="NUM">16</field>
                   </block>
                  </value>
                  <value name="Z">
                   <block type="math_number" id="YB*^ScO74thy|q7Rl8VX">
                    <field name="NUM">0</field>
                   </block>
                  </value>
                 </block>
                </value>
               </block>
              </value>
             </block>
            </value>
           </block>
          </value>
          <value name="Axis">
           <block type="bitbybit.vector.vectorXYZ" id="~K|n+8xq^Q9x?o^p^lzU">
            <value name="X">
             <block type="math_number" id="H/q]$2egq3#WIkj~T*[$">
              <field name="NUM">0</field>
             </block>
            </value>
            <value name="Y">
             <block type="math_number" id="#L,*^M!ci|XL}}o}L$xW">
              <field name="NUM">1</field>
             </block>
            </value>
            <value name="Z">
             <block type="math_number" id="6erl0SGAWeVGC:yadYC*">
              <field name="NUM">0</field>
             </block>
            </value>
           </block>
          </value>
          <value name="Angle">
           <block type="variables_get" id="~p~YI1K3$$0t4NDAk3!e">
            <field name="VAR" id="half back">half back</field>
           </block>
          </value>
         </block>
        </value>
        <next>
         <block type="variables_set" id="DQzWdk5HH|c87~5}TI)V">
          <field name="VAR" id="accent">accent</field>
          <value name="VALUE">
           <block type="procedures_callreturn" id="3PTw5!v?_aUHnT*td~jY">
            <mutation name="look">
             <arg name="name">
             </arg>
             <arg name="colour">
             </arg>
             <arg name="metallic">
             </arg>
             <arg name="roughness">
             </arg>
             <arg name="glow">
             </arg>
             <arg name="edge colour">
             </arg>
             <arg name="edge width">
             </arg>
            </mutation>
            <value name="ARG0">
             <block type="text" id="NuzUD$6Fh}^Ld1uE:zHU">
              <field name="TEXT">accent</field>
             </block>
            </value>
            <value name="ARG1">
             <block type="colour_picker" id="N;PGf.xM^/RXo7l0FvLR">
              <field name="COLOUR">#f0cebb</field>
             </block>
            </value>
            <value name="ARG2">
             <block type="math_number" id="KSD56g]205L@]-BcsH@8">
              <field name="NUM">0.85</field>
             </block>
            </value>
            <value name="ARG3">
             <block type="math_number" id="(=vlFm|biF=ezJO*9t/c">
              <field name="NUM">0.35</field>
             </block>
            </value>
            <value name="ARG4">
             <block type="colour_picker" id="}b1$,_=Q]z^(lnRh^zQs">
              <field name="COLOUR">#000000</field>
             </block>
            </value>
            <value name="ARG5">
             <block type="colour_picker" id="8%5ZL(mxs?,18OK;3Y?5">
              <field name="COLOUR">#0d0e10</field>
             </block>
            </value>
            <value name="ARG6">
             <block type="math_number" id=":CZSsvD^Me-U6[%bKfuq">
              <field name="NUM">4</field>
             </block>
            </value>
           </block>
          </value>
          <next>
           <block type="variables_set" id="P+M:.*zK|%vo(||:!u3[">
            <field name="VAR" id="steel">steel</field>
            <value name="VALUE">
             <block type="procedures_callreturn" id="|rV.fvt0%OlDBiTiZG?h">
              <mutation name="look">
               <arg name="name">
               </arg>
               <arg name="colour">
               </arg>
               <arg name="metallic">
               </arg>
               <arg name="roughness">
               </arg>
               <arg name="glow">
               </arg>
               <arg name="edge colour">
               </arg>
               <arg name="edge width">
               </arg>
              </mutation>
              <value name="ARG0">
               <block type="text" id="sHsV7CefZm?fn=EzjIVo">
                <field name="TEXT">steel</field>
               </block>
              </value>
              <value name="ARG1">
               <block type="colour_picker" id="[YpkjJ7NyY]X}g5p|g9a">
                <field name="COLOUR">#1c1c1e</field>
               </block>
              </value>
              <value name="ARG2">
               <block type="math_number" id="jNiCO7?bPfyT:CNRb{f2">
                <field name="NUM">0.9</field>
               </block>
              </value>
              <value name="ARG3">
               <block type="math_number" id="uLzqOz+atmA?CB2A@5HU">
                <field name="NUM">0.42</field>
               </block>
              </value>
              <value name="ARG4">
               <block type="colour_picker" id="Y]%N~83mg%##YdyLgOR#">
                <field name="COLOUR">#000000</field>
               </block>
              </value>
              <value name="ARG5">
               <block type="colour_picker" id="AQTd/]k`7J$L2aiHAg*}">
                <field name="COLOUR">#f2f2f2</field>
               </block>
              </value>
              <value name="ARG6">
               <block type="math_number" id=";Vn,QK$_hDnH/^e^t.xt">
                <field name="NUM">4</field>
               </block>
              </value>
             </block>
            </value>
            <next>
             <block type="bitbybit.draw.drawAnyAsyncNoReturn" id="noW}OF6C*(YtiS5yVrm#">
              <value name="Entity">
               <block type="procedures_callreturn" id="M*Cx1smrf38`dzH`Svgs">
                <mutation name="around">
                 <arg name="shape">
                 </arg>
                 <arg name="count">
                 </arg>
                </mutation>
                <value name="ARG0">
                 <block type="variables_get" id="NXsuHr,L^QBj)p5HiPv6">
                  <field name="VAR" id="post">post</field>
                 </block>
                </value>
                <value name="ARG1">
                 <block type="variables_get" id="_myR6hy.(GHRxQFG4.^C">
                  <field name="VAR" id="arms">arms</field>
                 </block>
                </value>
               </block>
              </value>
              <value name="Options">
               <block type="variables_get" id="H#cs3WULKwE*eL@F+c~-">
                <field name="VAR" id="accent">accent</field>
               </block>
              </value>
              <next>
               <block type="bitbybit.draw.drawAnyAsyncNoReturn" id="dRU1Hw1}]*(=PzGe)Cu$">
                <value name="Entity">
                 <block type="procedures_callreturn" id="cMTHhDvDRcs})XHi}8}T">
                  <mutation name="around">
                   <arg name="shape">
                   </arg>
                   <arg name="count">
                   </arg>
                  </mutation>
                  <value name="ARG0">
                   <block type="variables_get" id=",vk0?UIITe*~JwI?1pT+">
                    <field name="VAR" id="bolt pair">bolt pair</field>
                   </block>
                  </value>
                  <value name="ARG1">
                   <block type="variables_get" id="-h#HgaT,9~UuR5)wG6o|">
                    <field name="VAR" id="arms">arms</field>
                   </block>
                  </value>
                 </block>
                </value>
                <value name="Options">
                 <block type="variables_get" id="Ha^sE{dcn5j!+`-(0UnK">
                  <field name="VAR" id="steel">steel</field>
                 </block>
                </value>
               </block>
              </next>
             </block>
            </next>
           </block>
          </next>
         </block>
        </next>
       </block>
      </next>
     </block>
    </next>
   </block>
  </next>
 </block>
 <block type="procedures_defreturn" id="armBody" collapsed="true" x="0" y="7067">
  <mutation>
   <arg name="length" varid="length">
   </arg>
  </mutation>
  <field name="NAME">arm body</field>
  <comment pinned="false" h="80" w="160">Describe this function...</comment>
  <statement name="STACK">
   <block type="variables_set" id="8B8H)kmU__i~7?#%(U*#">
    <field name="VAR" id="tip">tip</field>
    <value name="VALUE">
     <block type="math_arithmetic" id="y.Ag,DQe(J~]KA.d!GB#">
      <field name="OP">MINUS</field>
      <value name="A">
       <block type="variables_get" id="gM%wJHl-JO/iu0z25qrW">
        <field name="VAR" id="length">length</field>
       </block>
      </value>
      <value name="B">
       <block type="math_number" id="oTNV`M^Um1lt5iS4y$-9">
        <field name="NUM">12</field>
       </block>
      </value>
     </block>
    </value>
    <next>
     <block type="variables_set" id="kr%ijZ35iMVcsy~J=^?l">
      <field name="VAR" id="outline">outline</field>
      <value name="VALUE">
       <block type="bitbybit.occt.fillets.fillet2d" id="V5il(K`_l~v0bmzZ44jv">
        <value name="Shape">
         <block type="bitbybit.occt.shapes.wire.createPolygonWire" id="|~g:Q_]F$~r:_;PfUUJF">
          <value name="Points">
           <block type="lists_create_with" id="%M(]c{Y2)@?O;o4[p%!G">
            <mutation items="4">
            </mutation>
            <value name="ADD0">
             <block type="bitbybit.point.pointXYZ" id="fYJ3~:+{8(s1KgCG#2-P">
              <value name="X">
               <block type="math_number" id="nv+won.qf8ld(oa/wKAZ">
                <field name="NUM">28</field>
               </block>
              </value>
              <value name="Y">
               <block type="math_number" id="9V_G(M$I(py?JEB,I8Q:">
                <field name="NUM">0</field>
               </block>
              </value>
              <value name="Z">
               <block type="math_number" id="BZ~=~On34.vQu:XfEn|-">
                <field name="NUM">-13</field>
               </block>
              </value>
             </block>
            </value>
            <value name="ADD1">
             <block type="bitbybit.point.pointXYZ" id="d=Eg+s$Z.RMz9?hp6*UT">
              <value name="X">
               <block type="variables_get" id="/[sGvDf)d.(^Z)miLx~.">
                <field name="VAR" id="tip">tip</field>
               </block>
              </value>
              <value name="Y">
               <block type="math_number" id="%GQ[khTyR*ap2a0-Szc3">
                <field name="NUM">0</field>
               </block>
              </value>
              <value name="Z">
               <block type="math_number" id="w]p=-xoj:9o;A1nd^qM9">
                <field name="NUM">-8</field>
               </block>
              </value>
             </block>
            </value>
            <value name="ADD2">
             <block type="bitbybit.point.pointXYZ" id="y%N|f4_Jlu7VBEHj5-XS">
              <value name="X">
               <block type="variables_get" id="8aa4Q#JmmK7%=bp!a?UG">
                <field name="VAR" id="tip">tip</field>
               </block>
              </value>
              <value name="Y">
               <block type="math_number" id="Y9PW;iUR;Ba;5mjV*#Ly">
                <field name="NUM">0</field>
               </block>
              </value>
              <value name="Z">
               <block type="math_number" id="#Y+8$)DB^BE]S*yvK=b)">
                <field name="NUM">8</field>
               </block>
              </value>
             </block>
            </value>
            <value name="ADD3">
             <block type="bitbybit.point.pointXYZ" id=".[fN!K!L)GI}wz*uZ?_e">
              <value name="X">
               <block type="math_number" id=":~{A?RC3#Iz,Z/8iNc:X">
                <field name="NUM">28</field>
               </block>
              </value>
              <value name="Y">
               <block type="math_number" id="h]xanz?uKP9Ro:wM:`__">
                <field name="NUM">0</field>
               </block>
              </value>
              <value name="Z">
               <block type="math_number" id="K[_@hD[_}gm*}_.hl983">
                <field name="NUM">13</field>
               </block>
              </value>
             </block>
            </value>
           </block>
          </value>
         </block>
        </value>
        <value name="Radius">
         <block type="math_number" id="Gv`;HNMw[6N!)mTA`TBE">
          <field name="NUM">4</field>
         </block>
        </value>
       </block>
      </value>
      <next>
       <block type="variables_set" id="3qlk)z=zqXRql8[:m9Js">
        <field name="VAR" id="slab">slab</field>
        <value name="VALUE">
         <block type="bitbybit.occt.transforms.translate" id="-~{2Y9M|cY5=T$-]@U66">
          <value name="Shape">
           <block type="bitbybit.occt.operations.extrude" id="rdYpTpt(=c*i55V]@Jm.">
            <value name="Shape">
             <block type="bitbybit.occt.shapes.face.createFaceFromWire" id="V85E6OltHV/s(fa3J$Y^">
              <value name="Shape">
               <block type="variables_get" id="^GY9,~BHP8OKgr/0fJcu">
                <field name="VAR" id="outline">outline</field>
               </block>
              </value>
              <value name="Planar">
               <block type="logic_boolean" id="b1.:A{igOABe$6-(,G]-">
                <field name="BOOL">TRUE</field>
               </block>
              </value>
             </block>
            </value>
            <value name="Direction">
             <block type="bitbybit.vector.vectorXYZ" id="KeWQaDe!IC7I2x]6;Hp|">
              <value name="X">
               <block type="math_number" id="X7uz{lO]n,3W|`PL9RM-">
                <field name="NUM">0</field>
               </block>
              </value>
              <value name="Y">
               <block type="math_number" id="%z3qyOustf@TbZeuL-%S">
                <field name="NUM">10</field>
               </block>
              </value>
              <value name="Z">
               <block type="math_number" id="ks?.W|-__Ky^MEty*1xB">
                <field name="NUM">0</field>
               </block>
              </value>
             </block>
            </value>
           </block>
          </value>
          <value name="Translation">
           <block type="bitbybit.vector.vectorXYZ" id="l=,:/,#IX`iihM.s!(6L">
            <value name="X">
             <block type="math_number" id="7UCQ^A9(4tM8@uTnq;sE">
              <field name="NUM">0</field>
             </block>
            </value>
            <value name="Y">
             <block type="math_number" id=".(*XTpq)[#sznz/3/6:#">
              <field name="NUM">3</field>
             </block>
            </value>
            <value name="Z">
             <block type="math_number" id="dw;7qz0lnYFE;/MxE.UY">
              <field name="NUM">0</field>
             </block>
            </value>
           </block>
          </value>
         </block>
        </value>
        <next>
         <block type="variables_set" id="~l6*k_u3KJky^M@F[eB?">
          <field name="VAR" id="pad">pad</field>
          <value name="VALUE">
           <block type="bitbybit.occt.shapes.solid.createCylinder" id="1YT^H26Z,oS.,wCZ?M?R">
            <value name="Radius">
             <block type="math_number" id="LiTVo]5V_r]^aB*aY~Rg">
              <field name="NUM">15</field>
             </block>
            </value>
            <value name="Height">
             <block type="math_number" id="h^J!mWMjTj1kFh.Ef=lp">
              <field name="NUM">10</field>
             </block>
            </value>
            <value name="Center">
             <block type="bitbybit.point.pointXYZ" id="wh{dIfV%uO8[vUKF^x#)">
              <value name="X">
               <block type="variables_get" id="y@,FCL|K4::.s_sE/zjK">
                <field name="VAR" id="length">length</field>
               </block>
              </value>
              <value name="Y">
               <block type="math_number" id="guaR{}wx|y*oK|,HE%2L">
                <field name="NUM">3</field>
               </block>
              </value>
              <value name="Z">
               <block type="math_number" id="ci%jv(AKPi{wcr9H:]^~">
                <field name="NUM">0</field>
               </block>
              </value>
             </block>
            </value>
            <value name="Direction">
             <block type="bitbybit.vector.vectorXYZ" id="Rb9=+ujTmLJhehrb3pdi">
              <value name="X">
               <block type="math_number" id="2X3X%230tCh0o{}C|?%g">
                <field name="NUM">0</field>
               </block>
              </value>
              <value name="Y">
               <block type="math_number" id=":iDz`z94t;uR3TH3s/5x">
                <field name="NUM">1</field>
               </block>
              </value>
              <value name="Z">
               <block type="math_number" id="weH]k}^SISUl25,zP{WH">
                <field name="NUM">0</field>
               </block>
              </value>
             </block>
            </value>
            <value name="Angle">
             <block type="math_number" id="Zl/E=%r?f+dIC^c+py0}">
              <field name="NUM">360</field>
             </block>
            </value>
            <valu
Plans & Pricing

Choose Your Plan

Editor plans for 3D development, API keys for server-side CAD algorithms

B2B

ENTERPRISE

Custom pricing

Custom software development, dedicated servers & CAD automation at scale.

CAD Automation & Software
  • Custom software development
  • Cloud CAD automation pipelines
  • 3D configurators (STEP & GLTF)
  • Batch export jobs
  • Custom algorithms & deployment
Infrastructure & Support
  • Custom compute allocation
  • Dedicated / VPS server tenants
  • Long-running computation jobs
  • Custom upload limits & overage
  • SLA & premium support