Script: Example in Blockly

Example in Blockly picture
Type
Blockly logo indicatorblockly
Date Created
Mar 19, 2021, 11:53:56 AM
Last Edit Date
Dec 5, 2023, 8:12:00 PM

Project Information

Demonstrates how simple curve is converted to CNC GCode. Script runs and offers to save the file to disk. If dialog gets closed user can analyse the 3D model and tagged points.

View Full Project

Script Code

<xml xmlns="https://developers.google.com/blockly/xml">
 <variables>
  <variable id="EDdstU5a4:F:MO/DusTU">curveForGCode</variable>
  <variable id="~jaGB$/e_AOm}0{d07Vh">curvePoints</variable>
  <variable id="X4emyG!!4%6F]aCC[w{D">gCodeText</variable>
  <variable id="2h{JzTj7$Vv-@|+#sJrC">gCodeTags</variable>
  <variable id="iV+ep`-Z@{jW93KFYaCM">curvePoint</variable>
  <variable id="B@]p$gPGuy/Z8imGULVR">xLine</variable>
  <variable id="3x.Wy/)nrrKh-Q_ZN8},">lineText</variable>
 </variables>
 <block type="bitbybit.draw.drawGridMeshNoReturn" id="/W/#[TX.f(q7h0]!{P6p" x="-133" y="-472">
  <value name="Width">
   <block type="math_number" id="CLkIJ^BluHH!wJrBed!h">
    <field name="NUM">400</field>
   </block>
  </value>
  <value name="Height">
   <block type="math_number" id="1}HXorX..1:MCtJD2U^]">
    <field name="NUM">400</field>
   </block>
  </value>
  <value name="Subdivisions">
   <block type="math_number" id="OK!occ6!z2P+D$;m@Jzq">
    <field name="NUM">10</field>
   </block>
  </value>
  <value name="MajorUnitFrequency">
   <block type="math_number" id="Q}c4%SEUaJ#f.NHB{LoY">
    <field name="NUM">10</field>
   </block>
  </value>
  <value name="MinorUnitVisibility">
   <block type="math_number" id="b-^Mb}yaFAJAGX+hFJ):">
    <field name="NUM">0.45</field>
   </block>
  </value>
  <value name="GridRatio">
   <block type="math_number" id="9!Yzqe|y`@RWp^-Uv68E">
    <field name="NUM">0.5</field>
   </block>
  </value>
  <value name="Opacity">
   <block type="math_number" id="{Gdpp2zg8WuY#UYJ/`%0">
    <field name="NUM">0.5</field>
   </block>
  </value>
  <value name="BackFaceCulling">
   <block type="logic_boolean" id="*9IgGxCkCmXT]Y7e=L5F">
    <field name="BOOL">FALSE</field>
   </block>
  </value>
  <value name="MainColor">
   <block type="colour_picker" id=")EBTHod][R#|exI9vH6W">
    <field name="COLOUR">#ffffff</field>
   </block>
  </value>
  <value name="SecondaryColor">
   <block type="colour_picker" id="hW*=8_oyDlHDJbt~$cvA">
    <field name="COLOUR">#ffffff</field>
   </block>
  </value>
  <next>
   <block type="variables_set" id="ZZI0LctXcyVpJyj10ycb">
    <field name="VAR" id="EDdstU5a4:F:MO/DusTU">curveForGCode</field>
    <value name="VALUE">
     <block type="bitbybit.verb.curve.createCurveByPoints" id="}cED{E|$(`}lB+i-`8g_">
      <value name="Degree">
       <block type="math_number" id="}_QKjgI=QGw.o$DOGArO">
        <field name="NUM">3</field>
       </block>
      </value>
      <value name="Points">
       <block type="lists_create_with" id="l!@%~M[.Wlu8W[}E+kKj">
        <mutation items="5">
        </mutation>
        <value name="ADD0">
         <block type="bitbybit.point.pointXYZ" id="wvW+[SwyxoQE4SlrEGh1">
          <value name="X">
           <block type="math_number" id="va{_OUCp:O;jHnerEsV*">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id=";Ak;j*M#$sKw$OsJ~ftk">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="@#IiG/dR4?N};$B%X}A9">
            <field name="NUM">0</field>
           </block>
          </value>
         </block>
        </value>
        <value name="ADD1">
         <block type="bitbybit.point.pointXYZ" id="AW~%c-,jVk*rM4RooZed">
          <value name="X">
           <block type="math_number" id="aH/Y^n*9sChktular8}1">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id="y6G!VizklKx4^me@jWG^">
            <field name="NUM">0.3</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="a4U4HG/tXl@6KC_{to.a">
            <field name="NUM">2</field>
           </block>
          </value>
         </block>
        </value>
        <value name="ADD2">
         <block type="bitbybit.point.pointXYZ" id="is.*$(=V2qszKrHiPU^X">
          <value name="X">
           <block type="math_number" id="x*ob1D[H^uYW}*sm;(Me">
            <field name="NUM">1</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id="I*fc]g9#k?yYyRSB+]bO">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="~E^asc4|Oj@m[#FkiZr6">
            <field name="NUM">0</field>
           </block>
          </value>
         </block>
        </value>
        <value name="ADD3">
         <block type="bitbybit.point.pointXYZ" id="An$ED6rPzTDbcRMdenbL">
          <value name="X">
           <block type="math_number" id="Xr3)8D.2Yg7_hWs;7$=x">
            <field name="NUM">3</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id="yF8jIr]nU0KcLkCNs$6r">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="AcJ-Tm{]`![CJwFM|F7n">
            <field name="NUM">-1</field>
           </block>
          </value>
         </block>
        </value>
        <value name="ADD4">
         <block type="bitbybit.point.pointXYZ" id="jNO+RB#(KE2QunUC_:DH">
          <value name="X">
           <block type="math_number" id="BNbt?P5m;NR=J[9IzXXO">
            <field name="NUM">-1</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id="ssE:1mM#/QS8w5cM+Y$k">
            <field name="NUM">0.3</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="+s*8?[YbCkXF,Zn/mdrr">
            <field name="NUM">1</field>
           </block>
          </value>
         </block>
        </value>
       </block>
      </value>
     </block>
    </value>
    <next>
     <block type="variables_set" id="cND!,m:.r`BdIB{0i:8=">
      <field name="VAR" id="~jaGB$/e_AOm}0{d07Vh">curvePoints</field>
      <value name="VALUE">
       <block type="bitbybit.verb.curve.tessellate" id="9HG5xqsuAWb5]B?U6Ffm">
        <value name="Curve">
         <block type="variables_get" id="azi;O:UVZQ6N%p#tKAoB">
          <field name="VAR" id="EDdstU5a4:F:MO/DusTU">curveForGCode</field>
         </block>
        </value>
        <value name="Tolerance">
         <block type="math_number" id="eIa:+w3a@)WSvTbH`35x">
          <field name="NUM">0.000001</field>
         </block>
        </value>
       </block>
      </value>
      <next>
       <block type="variables_set" id=";wsBF$q]LJViEpD.@4{,">
        <field name="VAR" id="X4emyG!!4%6F]aCC[w{D">gCodeText</field>
        <value name="VALUE">
         <block type="lists_create_with" id="2hLHvy=M9FDf-Ts)GEfx">
          <mutation items="0">
          </mutation>
         </block>
        </value>
        <next>
         <block type="variables_set" id="F(?2%3Pw$]78duKOY=$Y">
          <field name="VAR" id="2h{JzTj7$Vv-@|+#sJrC">gCodeTags</field>
          <value name="VALUE">
           <block type="lists_create_with" id="f^%V_DK*QgR^JjwK7zaF">
            <mutation items="0">
            </mutation>
           </block>
          </value>
          <next>
           <block type="lists_setIndex" id="Pk=75pfPeEH$I1l?w@%,">
            <mutation at="false">
            </mutation>
            <field name="MODE">INSERT</field>
            <field name="WHERE">LAST</field>
            <value name="LIST">
             <block type="variables_get" id="+lD**xP4@wMqDn;EI$t2">
              <field name="VAR" id="X4emyG!!4%6F]aCC[w{D">gCodeText</field>
             </block>
            </value>
            <value name="TO">
             <block type="text" id="yX9SX:IKAi/J9n`U5zmE">
              <field name="TEXT">// Generated with bitbybit.dev</field>
             </block>
            </value>
            <next>
             <block type="controls_forEach" id="TF1Q+(Oybsd*YEfSNa;o">
              <field name="VAR" id="iV+ep`-Z@{jW93KFYaCM">curvePoint</field>
              <value name="LIST">
               <block type="variables_get" id="b]1Nbjn`jje`q#8}+5Tt">
                <field name="VAR" id="~jaGB$/e_AOm}0{d07Vh">curvePoints</field>
               </block>
              </value>
              <statement name="DO">
               <block type="variables_set" id="Mkhj8T5?13@H^WEsPgxl">
                <field name="VAR" id="B@]p$gPGuy/Z8imGULVR">xLine</field>
                <value name="VALUE">
                 <block type="text" id="jtKo=Nr==A2Jf5]a:X[R">
                  <field name="TEXT">G1 X</field>
                 </block>
                </value>
                <next>
                 <block type="controls_if" id="`7UK}^mhpKBKDwsx5_aT">
                  <value name="IF0">
                   <block type="logic_compare" id="yIIiAe^/xD0q-]Jy3t|!">
                    <field name="OP">NEQ</field>
                    <value name="A">
                     <block type="variables_get" id=",7zPo7z0PQ~B?PcBIp!Z">
                      <field name="VAR" id="iV+ep`-Z@{jW93KFYaCM">curvePoint</field>
                     </block>
                    </value>
                    <value name="B">
                     <block type="lists_getIndex" id="42_HucCl#sDy}6TgF#%H">
                      <mutation statement="false" at="false">
                      </mutation>
                      <field name="MODE">GET</field>
                      <field name="WHERE">FIRST</field>
                      <value name="VALUE">
                       <block type="variables_get" id="BX9m$=p{gJB;uPi(urpa">
                        <field name="VAR" id="~jaGB$/e_AOm}0{d07Vh">curvePoints</field>
                       </block>
                      </value>
                     </block>
                    </value>
                   </block>
                  </value>
                  <statement name="DO0">
                   <block type="variables_set" id="$Lbm,x1a.h;rD$t3yf-D">
                    <field name="VAR" id="B@]p$gPGuy/Z8imGULVR">xLine</field>
                    <value name="VALUE">
                     <block type="text" id="0{*xG/2,3Fa[k-}s#4UK">
                      <field name="TEXT">X</field>
                     </block>
                    </value>
                   </block>
                  </statement>
                  <next>
                   <block type="variables_set" id="ZmrMF:EuWhcwEjC?m0I]">
                    <field name="VAR" id="3x.Wy/)nrrKh-Q_ZN8},">lineText</field>
                    <value name="VALUE">
                     <block type="text_join" id="jCZe2w%Z)=}_r[0OyTzu">
                      <mutation items="6">
                      </mutation>
                      <value name="ADD0">
                       <block type="variables_get" id="QyNjenh1Rc0Xoj*=Vt1D">
                        <field name="VAR" id="B@]p$gPGuy/Z8imGULVR">xLine</field>
                       </block>
                      </value>
                      <value name="ADD1">
                       <block type="bitbybit.math.roundToDecimals" id="q%]BA/Fim/#bo7TXtHd:">
                        <value name="Number">
                         <block type="bitbybit.point.getX" id="x#CMQOg_{yUR0)l[(%og">
                          <value name="Point">
                           <block type="variables_get" id="Dk%;glAm._K:Kcf@%h4V">
                            <field name="VAR" id="iV+ep`-Z@{jW93KFYaCM">curvePoint</field>
                           </block>
                          </value>
                         </block>
                        </value>
                        <value name="DecimalPlaces">
                         <block type="math_number" id="r5?4:nj-cw20R5v.I}$=">
                          <field name="NUM">3</field>
                         </block>
                        </value>
                       </block>
                      </value>
                      <value name="ADD2">
                       <block type="text" id="7+5kIfE}12e5s:FP~M`t">
                        <field name="TEXT"> Y</field>
                       </block>
                      </value>
                      <value name="ADD3">
                       <block type="bitbybit.math.roundToDecimals" id="Ah[BtAMP.hv^nt0M3))(">
                        <value name="Number">
                         <block type="bitbybit.point.getZ" id=":rr3^rQQjw_jSWXQL}J$">
                          <value name="Point">
                           <block type="variables_get" id="O~w}5Qiz|Y)N)AC(1zNv">
                            <field name="VAR" id="iV+ep`-Z@{jW93KFYaCM">curvePoint</field>
                           </block>
                          </value>
                         </block>
                        </value>
                        <value name="DecimalPlaces">
                         <block type="math_number" id="+Pxrd]dwbqJEIiLw[p2Z">
                          <field name="NUM">3</field>
                         </block>
                        </value>
                       </block>
                      </value>
                      <value name="ADD4">
                       <block type="text" id="|cwLJBRl$w1lSyA3f:Ty">
                        <field name="TEXT"> Z</field>
                       </block>
                      </value>
                      <value name="ADD5">
                       <block type="bitbybit.math.roundToDecimals" id="@sDOkkIX.}4#B;nkB0!|">
                        <value name="Number">
                         <block type="bitbybit.point.getY" id="e/Z,/L5@MP}]P@:t#cPg">
                          <value name="Point">
                           <block type="variables_get" id="6PQ?_.8gBJ4Xs2/K@4Ef">
                            <field name="VAR" id="iV+ep`-Z@{jW93KFYaCM">curvePoint</field>
                           </block>
                          </value>
                         </block>
                        </value>
                        <value name="DecimalPlaces">
                         <block type="math_number" id="|c7lB=/!DAq(B|C[`FZB">
                          <field name="NUM">3</field>
                         </block>
                        </value>
                       </block>
                      </value>
                     </block>
                    </value>
                    <next>
                     <block type="lists_setIndex" id="w0@!;RqMb^3(K$!c$W{h">
                      <mutation at="false">
                      </mutation>
                      <field name="MODE">INSERT</field>
                      <field name="WHERE">LAST</field>
                      <value name="LIST">
                       <block type="variables_get" id="Qp-iE79#QJ8.EOhNRBW_">
                        <field name="VAR" id="2h{JzTj7$Vv-@|+#sJrC">gCodeTags</field>
                       </block>
                      </value>
                      <value name="TO">
                       <block type="bitbybit.tag.create" id="F}(.-D}N5*.9zl?R-6l}">
                        <value name="Text">
                         <block type="variables_get" id="Zi9_Q/KCYYEMvb0CtOvx">
                          <field name="VAR" id="3x.Wy/)nrrKh-Q_ZN8},">lineText</field>
                         </block>
                        </value>
                        <value name="Position">
                         <block type="bitbybit.point.pointXYZ" id="$P$,anc}b`j=8?0O6bWP">
                          <value name="X">
                           <block type="bitbybit.point.getX" id="n2B4zw`fimAL-k=LMc;S">
                            <value name="Point">
                             <block type="variables_get" id="!gJ}wij:xRLVfcVi)`?Z">
                              <field name="VAR" id="iV+ep`-Z@{jW93KFYaCM">curvePoint</field>
                             </block>
                            </value>
                           </block>
                          </value>
                          <value name="Y">
                           <block type="math_arithmetic" id="wC.iQ*I~]@Rw5L.+;011">
                            <field name="OP">ADD</field>
                            <value name="A">
                             <block type="bitbybit.point.getY" id="ykVe[SR9#K[5]]E^p#36">
                              <value name="Point">
                               <block type="variables_get" id="nxhdkEnc4`8N-qxT4]D#">
                                <field name="VAR" id="iV+ep`-Z@{jW93KFYaCM">curvePoint</field>
                               </block>
                              </value>
                             </block>
                            </value>
                            <value name="B">
                             <block type="math_number" id="JZS,smHcr];(HX$7gEO4">
                              <field name="NUM">0.1</field>
                             </block>
                            </value>
                           </block>
                          </value>
                          <value name="Z">
                           <block type="math_arithmetic" id="~,P?dsSoq/)PeuL88v6P">
                            <field name="OP">MINUS</field>
                            <value name="A">
                             <block type="bitbybit.point.getZ" id="1h*uGFjvn+4P97si4]sJ">
                              <value name="Point">
                               <block type="variables_get" id="r%~tIUjy,i~#t$B+L|*f">
                                <field name="VAR" id="iV+ep`-Z@{jW93KFYaCM">curvePoint</field>
                               </block>
                              </value>
                             </block>
                            </value>
                            <value name="B">
                             <block type="math_number" id="(/@!wKOkx#GGX[y$~z~z">
                              <field name="NUM">0.1</field>
                             </block>
                            </value>
                           </block>
                          </value>
                         </block>
                        </value>
                        <value name="Size">
                         <block type="math_number" id="K]NP=P|UV`nq*uCR=|A!">
                          <field name="NUM">8</field>
                         </block>
                        </value>
                        <value name="AdaptDepth">
                         <block type="logic_boolean" id="$h3*3g,B3j6A(mZGa:vd">
                          <field name="BOOL">TRUE</field>
                         </block>
                        </value>
                       </block>
                      </value>
                      <next>
                       <block type="lists_setIndex" id="tl[a^9#)fL72IxA3j)`Z">
                        <mutation at="false">
                        </mutation>
                        <field name="MODE">INSERT</field>
                        <field name="WHERE">LAST</field>
                        <value name="LIST">
                         <block type="variables_get" id="/ENyCSG}@x#DyFxtQ*^,">
                          <field name="VAR" id="X4emyG!!4%6F]aCC[w{D">gCodeText</field>
                         </block>
                        </value>
                        <value name="TO">
                         <block type="variables_get" id="mm|B1Hzpm=[,:_4]c]]k">
                          <field name="VAR" id="3x.Wy/)nrrKh-Q_ZN8},">lineText</field>
                         </block>
                        </value>
                       </block>
                      </next>
                     </block>
                    </next>
                   </block>
                  </next>
                 </block>
                </next>
               </block>
              </statement>
              <next>
               <block type="base_io_print_save" id="[I0]J,t%jNhNp#~x(s;@">
                <value name="Text">
                 <block type="variables_get" id="@/^{M.{1].1,U@#4+Z)f">
                  <field name="VAR" id="X4emyG!!4%6F]aCC[w{D">gCodeText</field>
                 </block>
                </value>
                <next>
                 <block type="bitbybit.draw.drawAnyAsyncNoReturn" id="~j~7pMYO)uGORf+uq/%*">
                  <value name="Entity">
                   <block type="variables_get" id="o[r)|Ysm{uJ2mttHfIW]">
                    <field name="VAR" id="2h{JzTj7$Vv-@|+#sJrC">gCodeTags</field>
                   </block>
                  </value>
                  <next>
                   <block type="bitbybit.draw.drawAnyAsyncNoReturn" id="He~%}TnX=7bEo9e=H[ZV">
                    <value name="Entity">
                     <block type="variables_get" id="awVI=Z/(M@v6r?/f_qyW">
                      <field name="VAR" id="~jaGB$/e_AOm}0{d07Vh">curvePoints</field>
                     </block>
                    </value>
                    <value name="Options">
                     <block type="bitbybit.draw.optionsSimple" id="Y3A$T7DEr_o.GO{YHI?%">
                      <value name="Colours">
                       <block type="colour_picker" id="20gU`dov3rX+n2(XtS?|">
                        <field name="COLOUR">#0000ff</field>
                       </block>
                      </value>
                      <value name="Size">
                       <block type="math_number" id="AuI6U|zcDqQ}Wx01f49y">
                        <field name="NUM">0.05</field>
                       </block>
                      </value>
                      <value name="Opacity">
                       <block type="math_number" id="eG#ybljs96rnkEKPw0S^">
                        <field name="NUM">1</field>
                       </block>
                      </value>
                      <value name="Updatable">
                       <block type="logic_boolean" id="K!VwAyp8GY[-ezj{O[EF">
                        <field name="BOOL">FALSE</field>
                       </block>
                      </value>
                      <value name="Hidden">
                       <block type="logic_boolean" id="t8^i:|zf,o-F]U(ScB.D">
                        <field name="BOOL">FALSE</field>
                       </block>
                      </value>
                     </block>
                    </value>
                    <next>
                     <block type="bitbybit.draw.drawAnyAsyncNoReturn" id="}:[@[_R@@EEyioqyME=j">
                      <value name="Entity">
                       <block type="variables_get" id="{BV3nz%Z@4ki*);Ug5K@">
                        <field name="VAR" id="EDdstU5a4:F:MO/DusTU">curveForGCode</field>
                       </block>
                      </value>
                     </block>
                    </next>
                   </block>
                  </next>
                 </block>
                </next>
               </block>
              </next>
             </block>
            </next>
           </block>
          </next>
         </block>
        </next>
       </block>
      </next>
     </block>
    </next>
   </block>
  </next>
 </block>
</xml>