3D CNC

Full tutorial for this 3D model is here:
Use 3D object visualization in TNG software

CNC.txt
<?xml version="1.0" encoding="UTF-8"?>
<Model>
  <Expr>
offset_x = -35;
offset_y = -5;
offset_gantry_y = 22;
offset_gantry_z = 5;
  </Expr>
  <!-- Main 'model' assembly -->
  <Assembly>
    <Items>
      <!-- Spindle assembly -->
      <Assembly Name="Spindle">
        <Items>
          <Include Filename="Spindle.txt"/>
        </Items>
      </Assembly>
 
      <!-- Table assembly -->
      <Assembly Name="Table">
        <Transform X="offset_x" Y="offset_y"/>
        <Items>
          <Include Filename="Table.txt"/>
        </Items>
      </Assembly>
 
      <!-- Gantry assembly -->
      <Assembly Name="Gantry">
        <Transform X="offset_x" Y="offset_y+offset_gantry_y"/>
        <Items>
          <Include Filename="Gantry.txt"/>
        </Items>
      </Assembly>
 
      <!-- Carriage X assembly -->
      <Assembly Name="CarriageX">
        <Transform Y="offset_y+offset_gantry_y"/>
        <Items>
          <Include Filename="CarriageX.txt"/>
        </Items>
      </Assembly>
 
      <!-- Carriage Z assembly -->
      <Assembly Name="CarriageZ">
        <Transform Y="offset_y+offset_gantry_y" Z="offset_gantry_z"/>
        <Items>
          <Include Filename="CarriageZ.txt"/>
        </Items>
      </Assembly>
 
    </Items>
  </Assembly>
</Model>
Table.txt
<?xml version="1.0" encoding="UTF-8"?>
<Model>
  <Expr>
table_sizex = 240;
table_sizey = 440;
table_thick = 15;
table_height = 40;
  </Expr>
  <Assembly Name="Table">
    <Items>
      <Part Name="Top">
        <Color Value="ffaaaacc"/>
        <Cuboid X="0" Y="0" Z="-0.5" W="table_sizex" L="table_sizey" H="-table_thick"/>
      </Part>	
      <Part Name="Front">
        <Color Value="ff9999bb"/>
        <Cuboid X="0" Y="0" Z="-table_thick" W="table_sizex" L="table_thick" H="-table_height"/>
      </Part>
      <Part Name="Back">
        <Color Value="ff9999bb"/>
        <Cuboid X="0" Y="table_sizey" Z="-table_thick" W="table_sizex" L="-table_thick" H="-table_height"/>
      </Part>	
    </Items>
  </Assembly>
</Model>
Gantry.txt
<?xml version="1.0" encoding="UTF-8"?>
<Model>
  <Expr>
gantry_sizey = 100;
gantry_top = 180;
gantry_bottom = -table_thick - table_height/2;
gantry_gap = 24;
gantry_thick = 12;
gantry_posl = 0 - gantry_gap;
gantry_posr = table_sizex + gantry_gap;
gantry_sizex = table_sizex + 2*gantry_gap;
 
gantry_clear = 80;
gantry_rail_size = 8;
gantry_rail_posy = gantry_sizey - gantry_thick - 2*gantry_rail_size;
gantry_rail_posz1 = gantry_clear + 10;
gantry_rail_posz2 = gantry_top - 10;
  </Expr>
  <Assembly Name="Gantry">
    <Move Y="1"/>
    <Items>
      <Part Name="Left">
        <Color Value="ff8e6767"/>
        <Poly 
          X1="gantry_bottom" Y1="gantry_bottom" 
          X2="gantry_bottom + 0.3*gantry_top" Y2="gantry_bottom"
          X3="gantry_top" Y3="0.4*gantry_sizey"
          X4="gantry_top" Y4="gantry_sizey"
          X5="gantry_bottom" Y5="gantry_sizey"
          Reverse="false"
          Size="-gantry_thick " X="gantry_posl" Y="0" Z="0" RY="-90"/>
      </Part>	
 
      <Part Name="Right">
        <Color Value="ff8e6767"/>
        <Poly 
          X1="gantry_bottom" Y1="gantry_bottom" 
          X2="gantry_bottom + 0.3*gantry_top" Y2="gantry_bottom"
          X3="gantry_top" Y3="0.4*gantry_sizey"
          X4="gantry_top" Y4="gantry_sizey"
          X5="gantry_bottom" Y5="gantry_sizey"
          Reverse="false"
          Size="+gantry_thick" X="gantry_posr" Y="0" Z="0" RY="-90"/>
      </Part>
 
      <Part Name="Back">
        <Color Value="ff8e6767"/>
        <Cuboid X="-gantry_gap" Y="gantry_sizey" Z="gantry_clear" W="gantry_sizex" L="-gantry_thick" H="gantry_top - gantry_clear"/>
      </Part>
 
      <Part Name="Rail">
        <Color Value="ff008080"/>
        <Cylinder X="gantry_posl" Y="gantry_rail_posy" Z="gantry_rail_posz1" R1="gantry_rail_size" R2="gantry_rail_size" Size="gantry_sizex" RY="90"/>
      </Part>
 
      <Part Name="Rail">
        <Color Value="ff008080"/>
        <Cylinder X="gantry_posl" Y="gantry_rail_posy" Z="gantry_rail_posz2" R1="gantry_rail_size" R2="gantry_rail_size" Size="gantry_sizex" RY="90"/>
      </Part>
 
    </Items>
  </Assembly>
</Model>
CarriageX.txt
<?xml version="1.0" encoding="UTF-8"?>
<Model>
  <Expr>
carriagex_sizex = 90;
carriagex_sizey = 30;
carriagex_sizez = 115;
 
carriagex_bot = gantry_clear;
carriagex_top = carriagex_bot + carriagex_sizez;
carriagex_posy = gantry_sizey - gantry_thick - 2;
 
carriagex_arm_posy = carriagex_posy-carriagex_sizey;
carriagex_arm_sizey = 30;
carriagex_arm_sizez = 10;
 
carriagex_rail_size = 6;
carriagex_rail_posy = carriagex_arm_posy - carriagex_arm_sizey/2;
carriagex_rail_offx = 1.5*carriagex_rail_size;
  </Expr>
  <Assembly Name="Carriage X">
    <Move X="1" Y="1"/>
	<Transform X="-carriagex_sizex/2"/>
    <Items>
      <Part Name="Block">
        <Color Value="ffaaaacc"/>
        <Cuboid X="0" Y="carriagex_posy" Z="carriagex_top" W="carriagex_sizex" L="-carriagex_sizey" H="-carriagex_sizez"/>
      </Part>
 
      <Part Name="Top">
        <Color Value="ff9999bb"/>
        <Cuboid X="0" Y="carriagex_arm_posy" Z="carriagex_top" W="carriagex_sizex" L="-carriagex_arm_sizey" H="-carriagex_arm_sizez"/>
      </Part>	
      <Part Name="Bottom">
        <Color Value="ff9999bb"/>
        <Cuboid X="0" Y="carriagex_arm_posy" Z="carriagex_bot" W="carriagex_sizex" L="-carriagex_arm_sizey" H="+carriagex_arm_sizez"/>
      </Part>
 
      <Part Name="Rail">
        <Color Value="ff008080"/>
        <Cylinder X="0+carriagex_rail_offx" Y="carriagex_rail_posy" Z="carriagex_top" R1="carriagex_rail_size" R2="carriagex_rail_size" Size="-carriagex_sizez"/>
      </Part>	
      <Part Name="Rail">
        <Color Value="ff008080"/>
        <Cylinder X="carriagex_sizex-carriagex_rail_offx" Y="carriagex_rail_posy" Z="carriagex_top" R1="carriagex_rail_size" R2="carriagex_rail_size" Size="-carriagex_sizez"/>
      </Part>
 
    </Items>
  </Assembly>
</Model>
CarriageZ.txt
<?xml version="1.0" encoding="UTF-8"?>
<Model>
  <Expr>
carriagez_sizex = carriagex_sizex;
carriagez_sizez = 30;
carriagez_sizey = 32;
 
carriagez_posy = carriagex_arm_posy;
carriagez_posz = carriagex_bot + carriagex_arm_sizez + 1;
 
carriagez_arm_sizez = 80;
carriagez_arm_sizey = 10;
carriagez_arm_posy = carriagez_posy - carriagez_sizey;
carriagez_arm_posz = carriagez_posz + carriagez_sizez;
  </Expr>
  <Assembly Name="Carriage Z">
    <Move X="1" Y="1" Z="1"/>
	<Transform X="-carriagez_sizex/2"/>
    <Items>
      <Part Name="Block">
        <Color Value="ff9999bb"/>
        <Cuboid X="0" Y="carriagez_posy" Z="carriagez_posz" W="carriagez_sizex" L="-carriagez_sizey" H="carriagez_sizez"/>
      </Part>
 
	  <Part Name="Arm">
        <Color Value="ffaaaacc"/>
        <Cuboid X="0" Y="carriagez_arm_posy" Z="carriagez_arm_posz" W="carriagez_sizex" L="-carriagez_arm_sizey" H="-carriagez_arm_sizez"/>
      </Part>
 
    </Items>
  </Assembly>
</Model>