// PRUSA iteration4
// Einsy base 
// GNU GPL v3
// Josef Průša <iam@josefprusa.cz> and contributors
// http://www.reprap.org/wiki/Prusa_Mendel
// http://prusamendel.org


module CubicPattern(Xdim, Ydim)
{
        for (x =[0:12:Xdim-10])
        {
            for (y =[0:12:Ydim-10])
            {
                translate([x,y,-0.2])cube([10,10,0.4]);
            }
        }
}

module BottomCubic()
{
    difference()
    {
        translate([5,5,0]) CubicPattern(110,90);
        translate([11,0,-1]) cube( [ 11, 40 , 4 ] );  
        translate([0,0,-1]) cube( [ 11, 28 , 4 ] );  
        translate([0,64,-1]) cube( [ 16, 28 , 4 ] ); 
        translate([95,64,-1]) cube( [ 20, 28 , 4 ] );  
        translate([95,0,-1]) cube( [ 20, 28 , 4 ] );  
        translate([76,-10,-1]) cube( [ 20, 20 , 4 ] );  
        translate([52,76,-1]) cube( [ 12, 20 , 4 ] );  
    }
}



// main body
module main_body()

         
{
      
    
       //raspberry frame
        
        
    
        // side panel
        cube( [ 118.5 , 92 , 2 ] );  

        // upper panel
        cube( [ 1.5 , 92 , 35 ] );  
        // rear panel
        translate( [ 0 , 90 , 0 ] ) cube( [ 105.5 , 2 , 35 ] );  
         

        // upper panel frame reinforcement
        translate( [ 0 , 0 , 1 ] ) cube( [ 5 , 7 , 34 ] );  

        // side panel reinforcement
       translate( [ 0 , 0 , 1 ] ) cube( [ 9 , 92 , 3 ] );  
        translate( [ 98 , 0 , 0 ] ) cube( [ 9 , 92 , 4 ] ); 
        
        // 
        translate([21,81,0]) cylinder( h = 4.5, r = 2.5, $fn=30);   
        translate([21+58,81,0]) cylinder( h = 4.5, r = 2.5, $fn=30);
      
        
        // ziptie cable managment
     translate( [0 , 55 , 22 ] )  difference() {
           
       translate( [0 , 0 , -2 ] ) cube( [ 5 , 8 , 10 ] );
       translate( [0 , -1 , -3 ] ) rotate([0,45,0])  cube( [ 5 , 10 , 8 ] );
       translate( [5, -1 , 6 ] ) rotate([0,-60,0])  cube( [ 5 , 10 , 8 ] );
      union() {  
       translate( [1.5 , 2.5 , 3.5] ) cube( [ 2 , 3 ,10 ] );
       translate( [3 , 2.5 , 2 ] ) cube( [ 5.5 , 3 ,2 ] );
       translate( [2 , 2.5 , 6.5 ] ) cube( [ 5 , 3 ,3 ] );
       
       difference () {    
       translate( [ 3 ,5.5 , 3.5 ] ) rotate([90,0,0]) cylinder( h = 3, r = 1.5, $fn=30);  
          translate( [3.5 , 1.5 , 4 ] ) cube( [ 5 , 5 ,3 ] );  
           
       }
       
       
       
       
        difference () {    
       translate( [ 4,5.5 , 4.5 ] ) rotate([90,0,0]) cylinder( h = 3, r = 1, $fn=30);      
       translate( [ 4,5.5 , 4.5 ] ) rotate([90,0,0]) cylinder( h = 3, r = 0.5, $fn=30);  
          translate( [3.5 , 1.5 , 4.5 ] ) cube( [ 5 , 5 ,3 ] );  
          translate( [4. , 1.5 , 4 ] ) cube( [ 5 , 5 ,3 ] ); 
       }
           }
     }
     
     translate( [25 , 91.5 , 22 ] ) rotate([0,0,-90])  difference() {
           
       translate( [0 , 0 , -2 ] ) cube( [ 5 , 8 , 10 ] );
       translate( [0 , -1 , -3 ] ) rotate([0,45,0])  cube( [ 5 , 10 , 8 ] );
       translate( [5, -1 , 6 ] ) rotate([0,-60,0])  cube( [ 5 , 10 , 8 ] );
      union() {  
       translate( [1.5 , 2.5 , 3.5] ) cube( [ 2 , 3 ,10 ] );
       translate( [3 , 2.5 , 2 ] ) cube( [ 5.5 , 3 ,2 ] );
       translate( [2 , 2.5 , 6.5 ] ) cube( [ 5 , 3 ,3 ] );
       
       difference () {    
       translate( [ 3 ,5.5 , 3.5 ] ) rotate([90,0,0]) cylinder( h = 3, r = 1.5, $fn=30);  
          translate( [3.5 , 1.5 , 4 ] ) cube( [ 5 , 5 ,3 ] );  
           
       }
       
       
       
       
        difference () {    
       translate( [ 4,5.5 , 4.5 ] ) rotate([90,0,0]) cylinder( h = 3, r = 1, $fn=30);      
       translate( [ 4,5.5 , 4.5 ] ) rotate([90,0,0]) cylinder( h = 3, r = 0.5, $fn=30);  
          translate( [3.5 , 1.5 , 4.5 ] ) cube( [ 5 , 5 ,3 ] );  
          translate( [4. , 1.5 , 4 ] ) cube( [ 5 , 5 ,3 ] ); 
       }
           }
     }
     
     
     
    difference()
        {
            // bottom side reinforcement    
            translate( [ 98 , 86 , 0 ] ) cube( [ 7.5 , 6 , 35 ] ); 
            translate( [ 96 , 79 , 0 ] ) rotate([0,0,45]) cube( [ 7.5 , 6 , 36 ] ); 
        }
        translate( [ 0 , 85 , 0 ] ) cube( [ 5.5 , 7 , 35 ] ); 

        // screw mounting block
        translate( [ 54 , 84 , 0 ] ) cube( [ 9.5 , 7 , 35 ] );  

        // frame side panel
        translate( [ 20 , 0 , 0 ] ) cube( [ 80 , 3 , 5 ] );  

        // Einsy mounting holes
        translate( [ 102.5 , 14 , 1 ] ) rotate([0,0,90]) cylinder( h = 7, r = 5.5, $fn=6); 
        translate( [ 102.5 , 75 , 1 ] ) rotate([0,0,90]) cylinder( h = 7, r = 5.5, $fn=6); 
        translate( [ 7.5 , 14 , 1 ] ) cylinder( h = 7, r = 5.5, $fn=6); 
        translate( [ 7.5 , 75 , 1 ] ) cylinder( h = 7, r = 5.5, $fn=6); 

        // corners reinforcement
        translate( [ 0 , 75 , 1 ] ) cube( [ 13 , 16 , 6 ] );  
        translate( [ 0 , 70.25 , 1 ] ) cube( [ 7.5 , 11 , 6 ] ); 
        translate( [ 0 , 7.75 , 1 ] ) cube( [ 7.5 , 11 , 6 ] ); 
        translate( [ 0 , 0 , 1 ] ) cube( [ 13 , 14 , 6 ] ); 

        // frame mounting screw blocks
        //upper
        translate( [ 1 , 0 , 0 ] ) cube( [ 28 , 4 , 10 ] );  
        translate( [ 18.45 , 0 , 0 ] ) cube( [ 3 , 4 , 5.5] ); 

        //lower
        translate( [ 98 , 0 , 0 ] ) cube( [ 20.5 , 4 , 10 ] ); 

       

        // door closing corner
        translate( [ 102 , 88.5 , 35 ] ) cylinder( h = 3, r1=2.5, r2=1, $fn=30);   

        // doors pin upper
        translate( [ 2 , 85 , 31 ] ) cube( [ 6 , 7 , 4] ); 
        translate( [ 4 , 88.5 , 35 ] ) cylinder( h = 3, r1=2.5, r2=1, $fn=30);   

        // x-axis cables entry hole body
        translate( [ 89 , 2 , 0 ] ) cylinder( h = 5, r = 6, $fn=6);   
        
       
}
    module rambo_popout_cover () {
        
        //raspberry cover
        translate( [ 20 , 37.5 , 0] )  cube( [ 3 , 1 , 0.5] );
        translate( [ 33 , 37.5 , 0] )  cube( [ 3 , 1 , 0.5] );
        translate( [ 45.8 , 37.5 , 0] )  cube( [ 3 , 1 , 0.5] );
        translate( [ 59 , 37.5 , 0] )  cube( [ 3 , 1 , 0.5] );
        translate( [72.5 , 37.5 , 0] )  cube( [ 3 , 1 , 0.5] );
        
        
        translate( [ 20 , 71.5 , 0] )  cube( [ 3 , 1 , 0.5] );
        translate( [ 33 , 71.5 , 0] )  cube( [ 3 , 1 , 0.5] );
        translate( [ 45.8 , 71.5 , 0] )  cube( [ 3 , 1 , 0.5] );
        translate( [ 59 , 71.5 , 0] )  cube( [ 3 , 1 , 0.5] );
        translate( [72.5 , 71.5 , 0] )  cube( [ 3 , 1 , 0.5] );
       
       
        translate( [ 9 , 51.5 , 0] )  cube( [ 5 , 7 , 0.5] );
        translate( [ 81 , 53.5 , 0] )  cube( [ 1 , 3 , 0.5] );
        
        
        
        
 
        
       difference() {
        translate( [ 14 , 38.5 , 0] )  cube( [ 67 , 33 , 2] );
        
           
        translate( [ 0.5 , 0.5 , 0] ) difference() 
           {   
        translate( [ 17.5 , 42 , -1.1] )  cylinder( h = 9.2, r = 8, $fn=40);
        translate( [ 17.2 , 41.7 , -1] )  cylinder( h = 9, r = 3.7, $fn=40);
        
        translate( [ 13.5 , 41.7 , -1] )  cube( [ 12.7 , 9 , 9] );
        translate( [ 17.2 , 38 , -1] )  cube( [ 9, 5 , 9] );     
  }  
  
  
        translate( [ 60 , 0 , 0] )  difference() 
           {   
        translate( [ 17.3 , 42.2 , -1.1] )  cylinder( h = 9.2, r = 8, $fn=40);
        translate( [ 17.3 , 42.2 , -1] )  cylinder( h = 9, r = 3.7, $fn=40);
        
        translate( [ 9.0 , 42 , -1] )  cube( [ 12 , 9 , 9] );
        translate( [ 8.8 , 38.5 , -1] )  cube( [ 9, 5 , 9] );   
             
}          
        translate( [ 60 , 26 , 0] )  difference() 
           {   
        translate( [ 17.3 , 41.8 , -1.1] )  cylinder( h = 9.2, r = 8, $fn=40);
        translate( [ 17.4 , 41.8 , -1] )  cylinder( h = 9, r = 3.7, $fn=40);
        
        translate( [ 8.5 , 33.5 , -1] )  cube( [ 9 , 12 , 9] );
        translate( [ 17 , 33 , -1] )  cube( [ 4, 9 , 9] ); 
}           
           
        translate( [ 0 , 26 , 0] )  difference() 
           {   
        translate( [ 17.7 , 41.8 , -1.1] )  cylinder( h = 9.2, r = 8, $fn=40);
        translate( [ 17.7 , 41.8 , -1] )  cylinder( h = 9, r = 3.7, $fn=40);
        
        translate( [ 17.5 , 33.5 , -1] )  cube( [ 9 , 12 , 9] );
        translate( [ 14 , 33.5 , -1] )  cube( [ 5, 9 , 9] );     
              }  }}



 
    module ventilation_holes()
    {
        
        difference () {
     for ( i = [-5 : 8] ){
      translate([46 + (i*5.5),10.5,-1]) cube([3.65,19+49.0,1.2]);
      translate([46 + (i*5.5),10.5,-1]) cube([3.65,18,10]);
      translate([46 + (i*5.5),10.5+25,-1]) cube([3.65,18,10]);
      translate([46 + (i*5.5),10.5+50,-1]) cube([3.65,18,10]);
    }
    difference () {
    translate( [ 13 , 35 , 0] )  cube( [ 71 , 39 , 2] );
    translate( [ 14 , 40.5 , -0.1] )  cube( [ 63 , 29 , 2.2] );
}}
}


    
    
    


module cutouts(){
    
    
    // extruder cable holder
    translate([1.5,7,14.8]) rotate([0,45,0]) cube([3,40,5]); 
    translate([-20,28,28]) rotate([0,90,0]) cylinder( h = 40,r = 5.5,$fn=30); 
    translate([-15,0,35]) cube([30,60,15]); 
    translate([-15,24,30]) cube([30,8,8]); 
    
    translate([-15,12,28]) cube([15,30,8]); 
    translate([-12,16.5,28]) cube([15,23,8]); 
    translate([-3,28,28]) rotate([35,90,0]) cylinder( h = 24,r = 1.7,$fn=30); 
    

    
    
   
    
    
    
    // side     
    translate( [ 12 , 19 , 1 ] ) cube( [ 85.5 , 51 , 3 ] );   

    // Einsy M3 screws
    translate( [ 7.5 , 14 , -1 ] ) cylinder( h = 10, r = 1.9, $fn=30);  
    translate( [ 102.5 , 14 , -1 ] ) cylinder( h = 10, r = 1.9, $fn=30);  
    translate( [ 102.5 , 75 , -1 ] ) cylinder( h = 10, r = 1.9, $fn=30);  
    translate( [ 7.5 , 75 , -1 ] ) cylinder( h = 10, r = 1.9, $fn=30);     

    translate( [ 7.5 , 14 , 6 ] ) cylinder( h = 3, r1 = 1.9, r2=2.4, $fn=30);  
    translate( [ 102.5 , 14 , 6 ] ) cylinder( h = 3, r1 = 1.9, r2=2.4, $fn=30);  
    translate( [ 102.5 , 75 , 6 ] ) cylinder( h = 3, r1 = 1.9, r2=2.4, $fn=30);  
    translate( [ 7.5 , 75 , 6 ] ) cylinder( h = 3, r1 = 1.9, r2=2.4, $fn=30);     

    translate( [ 2 , 0 , 0 ] )ventilation_holes();
    
   
    
    // frame mounting screws
    //upper    
    translate( [ 18.5, -2 , 15.6 ] ) rotate([0,45,0]) cube( [ 15 , 10 , 10] );     
    translate( [ 16.5 , 8 , 5 ] ) rotate([90,0,0]) cylinder( h = 10, r = 1.6, $fn=30);   
    translate( [ 16.5 , 9 , 5 ] ) rotate([90,0,0]) cylinder( h = 5, r = 3, $fn=30);   
    translate( [ 15.15 , -2 , 5 ] ) cube( [ 2.7 , 15 , 10] ); 
    translate( [ 15.1 , -2 , 7 ] ) rotate([0,5,0]) cube( [ 2.8 , 15 , 10] ); 
    translate( [ 15.1 , -2 , 7 ] ) rotate([0,-5,0]) cube( [ 2.8 , 15 , 10] ); 


    //lower
    translate( [ 110.5 , 9 , 5 ] ) rotate([90,0,0]) cylinder( h = 10, r = 1.6, $fn=30);   
    translate( [ 110.5 , 9 , 5 ] ) rotate([90,0,0]) cylinder( h = 5, r = 3, $fn=30);       
    translate( [ 118.5 , -2 , 6 ] ) rotate([0,-45,0]) cube( [ 5 , 15 , 15] ); 
    translate( [ 94.5 , -2 , 8.5 ] ) rotate([0,45,0]) cube( [ 5 , 8 , 15] ); 
    translate( [ 0 , -2 , -5 ] ) cube( [ 120 , 15 , 5] ); 
    translate( [ 109.15 , -2 , 5 ] ) cube( [ 2.7 , 15 , 10] ); 
    translate( [ 109.3 , -2 , 6.5 ] ) rotate([0,5,0]) cube( [ 2.5 , 15 , 10] ); 
    translate( [ 109.2 , -2 , 6.5 ] ) rotate([0,-5,0]) cube( [ 2.5 , 15 , 10] ); 

    // USB connector hole
    translate( [ -1 , 41.5 , 11 ] ) cube( [ 5.5 , 13 , 11 ] );  

    // reset button
    translate( [ -2 , 65 , 14 ] ) rotate([0,90,0]) cylinder( h = 10, r = 2, $fn=30);  

    // door closing screw
    translate( [ 58.5 , 88 , -1 ] ) cylinder( h = 43, r = 1.9, $fn=30);  


   


    


  
    
    
 
    // nut traps HEX  
    translate( [ 7.5 , 14 , -1 ] ){
    cylinder( h = 4, r = 3.2, $fn=6);  
    rotate([0,0,0]) resize([0,2,0]) cylinder( h = 4, r = 3.5, $fn=6);  
    rotate([0,0,60]) resize([0,2,0]) cylinder( h = 4, r = 3.5, $fn=6);  
    rotate([0,0,120]) resize([0,2,0]) cylinder( h = 4, r = 3.5, $fn=6);  
    }

    translate( [ 102.5 , 14 , -1 ] ){
    cylinder( h = 4, r = 3.2, $fn=6);  
    rotate([0,0,0]) resize([0,2,0]) cylinder( h = 4, r = 3.5, $fn=6);  
    rotate([0,0,60]) resize([0,2,0]) cylinder( h = 4, r = 3.5, $fn=6);  
    rotate([0,0,120]) resize([0,2,0]) cylinder( h = 4, r = 3.5, $fn=6);  
    }

    translate( [ 102.5 , 75 , -1 ] ){
    cylinder( h = 4, r = 3.2, $fn=6);  
    rotate([0,0,0]) resize([0,2,0]) cylinder( h = 4, r = 3.5, $fn=6);  
    rotate([0,0,60]) resize([0,2,0]) cylinder( h = 4, r = 3.5, $fn=6);  
    rotate([0,0,120]) resize([0,2,0]) cylinder( h = 4, r = 3.5, $fn=6);  
    }

    translate( [ 7.5 , 75 , -1 ] ){
    cylinder( h = 4, r = 3.2, $fn=6);  
    rotate([0,0,0]) resize([0,2,0]) cylinder( h = 4, r = 3.5, $fn=6);  
    rotate([0,0,60]) resize([0,2,0]) cylinder( h = 4, r = 3.5, $fn=6);  
    rotate([0,0,120]) resize([0,2,0]) cylinder( h = 4, r = 3.5, $fn=6);  
    }

    translate( [ 7.5 , 14 , -1 ] ) cylinder( h = 1.5, r1 = 6, r2=3.2, $fn=6);  
    translate( [ 102.5 , 14 , -1 ] ) cylinder( h = 1.5, r1 = 6, r2=3.2, $fn=6);  
    translate( [ 102.5 , 75 , -1 ] ) cylinder( h = 1.5, r1 = 6, r2=3.2, $fn=6);  
    translate( [ 7.5 , 75 , -1 ] ) cylinder( h = 1.5, r1 = 6, r2=3.2, $fn=6);  
    translate( [ 58.5 , 88 , -1 ] ) cylinder( h = 4, r = 3.2, $fn=30);   

    // door closing corners
    translate( [ 8 , 80 , 28 ] ) rotate([0,0,45]) cube( [ 5 , 5 , 10] ); 
    translate( [ 106 , 81 , 4 ] ) rotate([0,0,45]) cube( [ 5 , 5 , 40] ); 

    // inner edges cutout
   translate( [ 54 , 79.5 , 2 ] ) rotate([0,0,45]) cube( [ 5 , 5 , 50] ); 
    //translate( [ 70 , 82.5 , 2 ] ) rotate([0,0,45]) cube( [ 5 , 5 , 50] ); 
    translate( [ 6 , 80 , 7 ] ) rotate([0,0,45]) cube( [ 5 , 5 , 24] ); 
   translate( [ 5.5 , 4 , 7 ] ) rotate([0,0,45]) cube( [ 3 , 5 , 29] ); 

    // x axis cable hole
    translate( [ 89 , 2 , -1 ] ) cylinder( h = 10, r = 4, $fn=6);   
    translate( [ 80 , -5 , -1 ] ) cube( [ 15, 5, 10] ); 

    // large corner coutout
    translate( [ -27 , 80 , -54 ] ) rotate([50,0,45]) cube( [ 50, 50, 50] ); 
    translate( [ 137.5 , 60 , -10 ] ) rotate([0,0,45]) cube( [ 50, 50, 50] ); 


     // screw body edge
    translate( [ 65 ,74.2 , 2] ) rotate([0,0,45]) cube( [ 10 , 10 , 50 ] );



}



 module raspberry()   
    
    {
        //raspberry pcb
        
         translate( [ 11 , 42 , -1] )  cube( [ 2.1 , 26 , 9] );
         translate( [ 81.9 , 42 , -1] )  cube( [ 2.1 , 5 , 9] );
         translate( [ 81.9 ,63 , -1] )  cube( [ 2.1 , 5 , 9] );
        
       difference() {
        translate( [ 13 , 37.5 , -1] )  cube( [ 69 , 35 , 9] );
        
           
        translate( [ 0 , 0 , 0] ) difference() 
           {   
        translate( [ 17.5 , 42 , -1.1] )  cylinder( h = 9.2, r = 8, $fn=40);
        translate( [ 17.5 , 42 , -1] )  cylinder( h = 9, r = 4.5, $fn=40);
        
        translate( [ 13 , 42 , -1] )  cube( [ 12 , 8 , 9] );
        translate( [ 17.5 , 37.5 , -1] )  cube( [ 8, 5 , 9] );     
  }  
  
  
        translate( [ 60 , 0 , 0] )  difference() 
           {   
        translate( [ 17.5 , 42 , -1.1] )  cylinder( h = 9.2, r = 8, $fn=40);
        translate( [ 17.5 , 42 , -1] )  cylinder( h = 9, r = 4.5, $fn=40);
        
        translate( [ 10 , 42 , -1] )  cube( [ 12 , 8 , 9] );
        translate( [ 9.5 , 37.5 , -1] )  cube( [ 8, 5 , 9] );   
             
}          
        translate( [ 60 , 26 , 0] )  difference() 
           {   
        translate( [ 17.5 , 42 , -1.1] )  cylinder( h = 9.2, r = 8, $fn=40);
        translate( [ 17.5 , 42 , -1] )  cylinder( h = 9, r = 4.5, $fn=40);
        
        translate( [ 9.5 , 34.5 , -1] )  cube( [ 8 , 12 , 9] );
        translate( [ 18 , 34 , -1] )  cube( [ 4, 8 , 9] ); 
}           
           
        translate( [ 0 , 26 , 0] )  difference() 
           {   
        translate( [ 17.5 , 42 , -1.1] )  cylinder( h = 9.2, r = 8, $fn=40);
        translate( [ 17.5 , 42 , -1] )  cylinder( h = 9, r = 4.5, $fn=40);
        
        translate( [ 17.5 , 34.5 , -1] )  cube( [ 8 , 12 , 9] );
        translate( [ 13 , 34 , -1] )  cube( [ 5, 8 , 9] );     
              
       
  }  }}

module usb()
{
    // z sizes are unimportant
    translate([48,18,0]) cube([14.6,20,50]);
    translate([48+14.6/2-5/2,3,0]) cube ([5,30,50]);  
    rotate([-60,0,0]) translate([48+14.6/2-5/2,0,0]) cube ([5,30,50]);
}

module rambo_cover()
{
    

//    difference(){
//    rambo_popout_cover ();
//    cutouts();    
//    }
        
    difference(){
    main_body();
        
    cutouts();
     
    raspberry();    
    // cutout raspberrypi cover
    rambo_popout_cover ();
    usb();    
    // main hole
    translate( [ -10 , 28 , 26 ] ) rotate([0,90,0]) cylinder( h = 24, r = 6.8, $fn=30);   
    // cable opening slot
    translate( [ -15 , 25 , 30 ] ) cube( [ 30 , 6 , 10 ] ); 
        
      
     
    
    
    }
}


difference()
{
    union()
            {
            rambo_cover();
            
            
            // extruder cable holder
                
                
    difference(){
    translate([0,0,15]) cube([5,40,20]);
    translate([1.5,3,14.8]) rotate([0,45,0]) cube([3,40,5]);  
    }    
    translate([5,28,28]) rotate([0,90,0]) cylinder(h=5,r1=10,r2=8,$fn=30);  
    difference()
    {
        translate([-1.93,0,28.07]) rotate([0,45,0]) cube([9.8,25,9.8]);  
        translate([-5,-5,15]) cube([5,40,20]);  
        translate([10,-5,15]) cube([5,40,20]); 
        
        
        
        // screwdriver hole
         translate( [ 7.5 , 14 , 15 ] ) cylinder( h = 25, r = 2, $fn=30);
        translate( [ 7.5 , 12 , 15 ] ) cube( [ 8 , 4 , 25] );
        
    }
    translate([-6,28,28]) rotate([0,90,0]) cylinder(h=6,r=13.5,$fn=30);  
    translate([-10,28,28]) rotate([0,90,0]) cylinder(h=4,r1=8.5,r2=13.5,$fn=30);  
    
    difference()
    {
        translate([-5.5,23.5,16]) rotate([0,45,0]) cube([8,9,8]);  
        translate([1,0,10]) cube([5,40,20]); 
        
        
    }    
     
    
    
     // heatbed cable mounting reinforcement
    translate([63,86.0,0.5]) cube([15,5,34.5]); 
    translate([75,90,28]) rotate([90,0,0]) cylinder(h=6,r1=16.5,r2=11,$fn=30); 
    translate([75,99,28]) rotate([90,0,0]) cylinder(h=9,r=13,$fn=30); 
    translate([75,101,28]) rotate([90,0,0]) cylinder(h=2,r1=9,r2=13,$fn=30); 
    difference(){
    translate([70.3,88.5,12.7]) rotate([-45,0,0]) cube([9.5,5,10]);
    translate([70.4,85.5,10])  cube([9.5,5,9]);    
    } 
    
    
            }
            
            
            
            
      // extruder cable holder
    translate([1.5,7.1,14.8]) rotate([0,45,0]) cube([3,40,5]); 
    translate([-20,28,28]) rotate([0,90,0]) cylinder( h = 40,r = 5.5,$fn=30); 
    translate([-15,7,35]) cube([30,40,15]); 
    translate([-15,23.5,30]) cube([30,9,8]); 
    
    translate([-15,12,28]) cube([15,30,8]); 
    translate([-12,16.5,28]) cube([15,23,8]); 
    translate([-3,28,28]) rotate([35,90,0]) cylinder( h = 24,r = 1.8,$fn=30); 
    

            //screw holes
    translate([-2.7,19.5,20]) rotate([0,0,90]) cylinder( h = 33,r = 1.6,$fn=30);  
    translate([-2.7,36.5,20]) rotate([0,0,90]) cylinder( h = 33,r = 1.6,$fn=30); 
   
    
            // nuts with supports
      translate([-5.7,19.5,24.5]) difference (){
translate([0,0,-0.25]) rotate([0,0,0]) cube([12,5.7,2.7], center =true) ;
translate([-8.6,-5,0.35])  cube([10,15,0.75]);
translate([4.6,-5,0.35])  cube([4,15,0.75]);
translate([-2.6,-5.6,0.65])  cube([15,4,0.35]);
translate([-2.6,1.6,0.65])  cube([15,4,0.35]);           
          
      }
      
    
      translate([-5.7,36.5,24.5]) difference (){
 translate([0,0,-0.25]) rotate([0,0,0]) cube([12,5.7,2.7], center =true) ;
translate([-8.6,-5,0.35])  cube([10,15,0.75]);
translate([4.6,-5,0.35])  cube([4,15,0.75]);
translate([-2.6,-5.6,0.65])  cube([15,4,0.35]);
translate([-2.6,1.6,0.65])  cube([15,4,0.35]);             
      }
    

    
            
            
            
            
          
            
    translate([-2.7,36,12]) rotate([0,0,90]) cube([3,40,5]);  
     
    
    // new heatbed cable holder
    translate([61,102,28]) rotate([35,90,0]) cylinder(h=35,r=3.3,$fn=30); 


            // nuts with supports
      translate([67,90.8 -4,24.5]) difference (){
translate([0,0,-0.25]) rotate([0,0,90]) cube([10,5.7,2.7], center =true) ;
translate([-5.6,-5,0.65])  cube([4,15,0.5]);
translate([1.6,-5,0.65])  cube([4,15,0.5]);
translate([-5.6,-3.6,0.35])  cube([15,4,0.75]);
translate([-5.6,3.6,0.35])  cube([15,4,0.75]);           
          
      }
      
    
      translate([83,98,24.5]) difference (){
translate([0,0,-0.25]) rotate([0,0,90]) cube([10,5.7,2.7], center =true) ;
translate([-5.6,-5,0.65])  cube([4,15,0.5]);
translate([1.6,-5,0.65])  cube([4,15,0.5]);
translate([-5.6,-7.6,0.35])  cube([15,4,0.75]);
translate([-5.6,-0.4,0.35])  cube([15,4,0.75]);           
      }
 

 
 
    translate([67,88.8,20]) rotate([0,0,0]) cylinder(h=15,r=1.6,$fn=30); 
    translate([83,96,20]) rotate([0,0,0]) cylinder(h=15,r=1.6,$fn=30);
    translate([60,92,28]) rotate([0,0,0]) cube([30,13,14]);  
    translate([60,80,35]) rotate([0,0,0]) cube([30,13,14]);
    translate([72.5,80,30])rotate([0,0,0])  cube([5,13,14]);
    
    translate([62.5,82,28]) rotate([0,0,0]) cube([25,20,14]);
   
    
    translate( [ 58.5 , 88 , -1 ] ) cylinder( h = 43, r = 1.9, $fn=30);    
            
            
 
    translate( [ -16.2 , 28, 29 ] ) rotate([45,0,0]) cube( [ 40 , 12 , 12 ] ); 
    
    //BottomCubic();
    translate( [ 14.5, 10, -2 ] ) cube( [ 4 , 23 , 10 ] ); 
    translate( [ 16.5, 10, -2 ] ) cylinder( h = 20, r = 2, $fn=30);  
    translate( [ 16.5, 33, -2 ] ) cylinder( h = 20, r = 2, $fn=30);  
    
        
    
    // lightening slots
    translate( [ 100 ,21 , 2] ) cube( [ 5 , 48 , 5 ] );     
    translate( [ 3 ,21 , 2] ) cube( [ 4.5, 48 , 5 ] );     

    // bottom holes print supports
    translate( [ 7.5 , 14 ,0] ){
    translate( [ 0 , 0 , 2.5 ] ) cube([3.2,5.6,2], center=true);
    translate( [ 0 , 0 , 3 ] ) cube([3.2,3.8,2], center=true);
    }

    translate( [ 102.5 , 14 ,0] ){
    translate( [ 0 , 0 , 2.5 ] ) cube([3.2,5.6,2], center=true);
    translate( [ 0 , 0 , 3 ] ) cube([3.2,3.8,2], center=true);
    }

    translate( [ 102.5 , 75 ,0] ){
    translate( [ 0 , 0 , 2.5 ] ) cube([3.2,5.6,2], center=true);
    translate( [ 0 , 0 , 3 ] ) cube([3.2,3.8,2], center=true);
    }

    translate( [ 7.5 , 75 ,0] ){
    translate( [ 0 , 0 , 2.5 ] ) cube([3.2,5.6,2], center=true);
    translate( [ 0 , 0 , 3 ] ) cube([3.2,3.8,2], center=true);
    }

    translate( [ 58.5 , 88 ,0] ){
       intersection(){cylinder(r=3.2, h=10, $fn=30);
    translate( [ 0 , 0 , 2.5 ] ) cube([3.8,8,2], center=true);}
    translate( [ 0 , 0 , 3 ] ) cube([3.8,3.8,2], center=true);
    }

    translate([21,81,-5]) cylinder( h = 24, r = 0.8, $fn=30);   
    translate([21+58,81,-5]) cylinder( h = 24, r = 0.8, $fn=30);   


    translate([115,68,1.5]) rotate([0,0,90]) linear_extrude(height = 0.8) 
    { text("R3",font = "helvetica:style=Bold", size=6, center=true); }   
       
}

 module heatbed_cable_clip()
{
    
difference()
{    
    
    union()
    {
        difference()
        {
            union()
            {
                // body base
                translate([75,99,28]) rotate([90,0,0]) cylinder( h = 15, r = 13, $fn=30); 
                translate([75,101,28]) rotate([90,0,0]) cylinder( h = 2, r1=9,r2 = 13, $fn=30); 
                
            }

             
           
            
            // cut flat and shape
            translate([60,82,14]) cube([30,20,14]);  
            translate([60,72,20]) cube([30,20,30]); 
        }
         
        
        difference() {
        translate([62.75,84,28]) cube([24.5,8,7]);
        difference () {
        translate([75,85,28]) rotate([90,0,0]) cube([30,20,10], center = true);    
        translate([75,90,28]) rotate([90,0,0]) cylinder(h=6,r1=16.5,r2=11,$fn=30);   
           
        } 
    }}
    
    // cable opening
    translate([61,102,28]) rotate([35,90,0])
    
    difference (){
   
    cylinder(h=35,r=4,$fn=30);
       
    
    translate([0,0,3]) cylinder(h=5,r=4,$fn=30);
    translate([0,0,12]) cylinder(h=1,r=4,$fn=30); 
    translate([0,0,16]) cylinder(h=1,r=4,$fn=30); 
    translate([0,0,20]) cylinder(h=1,r=4,$fn=30);
   
    }
     translate([61,102,28]) rotate([35,90,0]) cylinder(h=35,r=3,$fn=30);
    
  
    
    // screw heads
    translate([67,88.8,30.5]) rotate([0,0,0]) cylinder(h=10,r=3.2,$fn=30); 
    translate([83,96,30.5]) rotate([0,0,0]) cylinder(h=10,r=3.2,$fn=30); 
    
    
    // screws
            translate([67,88.8,14]) rotate([0,0,0]) cylinder(h=35,r=1.6,$fn=50); 
            translate([83,96,14]) rotate([0,0,0]) cylinder(h=35,r=1.6,$fn=50);
    
    
    // grips
    
    
    
}


    

} 

//translate([0,0,0]) heatbed_cable_clip();


module extruder_cable_clip()
{
    
    difference(){
    difference()
    {
        union()
        {
            // body shape
            translate([-6,28,28]) rotate([0,90,0]) cylinder(h=6,r=13.5,$fn=30);  
            translate([-10,28,28]) rotate([0,90,0]) cylinder(h=4,r1=8.5,r2=13.5, $fn=30);  
            translate([0,16.6,28]) cube([2.9,22.8,7]); 
        }
        
        // bottom cut and shape
        translate([-15,7,13]) cube([30,40,15]); 
        translate([-20,28,28]) rotate([0,90,0]) cylinder(h=40,r=6, $fn=30);
        
        // screws
        translate([-2.7,19.5,25]) rotate([0,0,90]) cylinder(h= 10, r = 1.6, $fn=50); 
        translate([-2.7,36.5,25]) rotate([0,0,90]) cylinder( h = 10, r = 1.6, $fn=50); 
        translate([-2.7,36.5,32]) rotate([0,0,90]) cylinder( h = 13, r = 3.1, $fn=30);
        translate([-2.7,19.5,32]) rotate([0,0,90]) cylinder( h = 13, r = 3.1, $fn=30); 
        
        // screw heads opening
        translate([-2.7,16.4,35]) cube([10,6.2,15]); 
        translate([-2.7,33.4,35]) cube([10,6.2,15]); 
        
        
    }
    
    difference()
    {
        // cable grip
        translate([-8,28,28]) rotate([0,90,0]) cylinder( h = 10, r = 6, $fn=30);
        translate([-20,28,28]) rotate([0,90,0]) cylinder( h = 40, r = 5.5, $fn=30);
        translate([-15,7,13]) cube([30,40,15]); 
        translate([-6,7,13]) cube([2,40,25]); 
        translate([-2,7,13]) cube([2,40,25]); 
        
    }
    
    
    //nylon hole
        
        translate([-3,28,28]) rotate([35,90,0]) cylinder( h = 24,r = 1.8,$fn=30);}
    
}

//translate([0,0,0]) extruder_cable_clip();


module raspberry_cover () {
    
    
        
    //holders
         
         difference() {
             union () {
    
         translate( [ 11.5 , 42.5 , 0] )  cube( [ 2 , 4 , 3.5] );
         translate( [ 11.5 ,63.5 , 0] )  cube( [ 2 , 4 , 3.5] );
         translate( [ 81.5 , 42.5 , 0] )  cube( [ 2 , 4 , 2.5] );
         translate( [ 81.5 ,63.5 , 0] )  cube( [ 2 , 4 , 2.5] );
         
         translate( [ 10.4 , 42.5 , 2.7] ) rotate([0,45,0]) cube( [ 2 , 4 , 2] );
         translate( [ 10.4 ,63.5 , 2.7] )  rotate([0,45,0]) cube( [ 2 , 4 , 2] );
         translate( [ 81.7 , 42.5 , 1.7] ) rotate([0,45,0]) cube( [ 2 , 4 , 2] );
         translate( [ 81.7 ,63.5 , 1.7] )  rotate([0,45,0]) cube( [ 2 , 4 , 2] );}
         
         translate( [ 10.5 , 42 , 3.5] )  cube( [ 4 , 5 , 3.5] );
         translate( [ 10.5 ,63 , 3.5] )  cube( [ 4 , 5 , 3.5] );
         translate( [ 81.5 , 42 , 2.5] )  cube( [ 4 , 5 , 2.5] );
         translate( [ 81.5 ,63 , 2.5] )  cube( [ 4 , 5 , 2.5] );
    
     }
      
   //body
   
    difference() {
       translate( [ 11.5 , 36 , -3] )  cube( [ 72 , 38 , 3] );
        
        
        translate( [ -0.4 , -0.4 , 0] ) difference() 
           {   
        translate( [ 17.5 , 42 , -4.1] )  cylinder( h = 4.2, r = 8, $fn=40);
        translate( [ 17.5 , 42 , -4] )  cylinder( h = 4, r = 5.6, $fn=40);
        
        translate( [ 11.9 , 42 , -4] )  cube( [ 14 , 8 , 4] );
        translate( [ 17.5 , 36.4 , -4] )  cube( [ 8, 6 , 4] );     
  }  
  
  
        translate( [ 60.4 , -0.4 , 0] )  difference() 
           {   
        translate( [ 17.5 , 42 , -4.1] )  cylinder( h = 4.2, r = 8, $fn=40);
        translate( [ 17.5 , 42 , -4] )  cylinder( h = 4, r = 5.6, $fn=40);
        
        translate( [ 9.1 , 42 , -4] )  cube( [ 14 , 8 , 4] );
        translate( [ 9.5 , 36.4 , -4] )  cube( [ 8, 6 , 4] );   
            
}          
        translate( [ 60.4 , 26.4 , 0] )  difference() 
           {   
        translate( [ 17.5 , 42 , -4.1] )  cylinder( h = 4.2, r = 8, $fn=40);
        translate( [ 17.5 , 42 , -4] )  cylinder( h = 4, r = 5.6, $fn=40);
        
        translate( [ 8.5 , 33.6 , -4] )  cube( [ 9 , 14 , 4] );
        translate( [ 17.1 , 34 , -4] )  cube( [ 6, 8 , 4] ); 
}           
           
        translate( [ -0.4 , 26.4 , 0] )  difference() 
           {   
        translate( [ 17.5 , 42 , -4.1] )  cylinder( h = 4.2, r = 8, $fn=40);
        translate( [ 17.5 , 42 , -4] )  cylinder( h = 4, r = 5.6, $fn=40);
        
        translate( [ 17.5 , 33.6 , -4] )  cube( [ 9 , 14 , 4] );
        translate( [ 11.9 , 33.4 , -4] )  cube( [ 6, 9 , 4] );   
             
             
       
       
              
       
  } 
  
  
    // ventilation cutout   
           
           
     for ( i = [-5 : 6] ){
      
      translate([43 + (i*5.5),42.3,-5]) cube([3.65,25.2,10]);
      
      
    }       

 
 

    
    //raspberry pcb cutout
        
      
        
      translate ([0,0,-2]) difference() {
        translate( [ 13.5 , 38 , 0] )  cube( [ 68 , 34 , 9] );
        
           
        translate( [ 0 , 0 , 0] ) difference() 
           {   
        translate( [ 17.5 , 42 , -1.1] )  cylinder( h = 9.2, r = 8, $fn=40);
        translate( [ 17.5 , 42 , -1] )  cylinder( h = 9, r = 4, $fn=40);
        
        translate( [ 13.5 , 42 , -1] )  cube( [ 12 , 8 , 9] );
        translate( [ 17.5 , 38 , -1] )  cube( [ 8, 5 , 9] );     
  }  
  
  
        translate( [ 60 , 0 , 0] )  difference() 
           {   
        translate( [ 17.5 , 42 , -1.1] )  cylinder( h = 9.2, r = 8, $fn=40);
        translate( [ 17.5 , 42 , -1] )  cylinder( h = 9, r = 4, $fn=40);
        
        translate( [ 9.5 , 42 , -1] )  cube( [ 12 , 8 , 9] );
        translate( [ 9.5 , 38 , -1] )  cube( [ 8, 5 , 9] );   
             
}          
        translate( [ 60 , 26 , 0] )  difference() 
           {   
        translate( [ 17.5 , 42 , -1.1] )  cylinder( h = 9.2, r = 8, $fn=40);
        translate( [ 17.5 , 42 , -1] )  cylinder( h = 9, r = 4, $fn=40);
        
        translate( [ 9.5 , 34 , -1] )  cube( [ 8 , 12 , 9] );
        translate( [ 17.5 , 34 , -1] )  cube( [ 4, 8 , 9] ); 
}           
           
        translate( [ 0 , 26 , 0] )  difference() 
           {   
        translate( [ 17.5 , 42 , -1.1] )  cylinder( h = 9.2, r = 8, $fn=40);
        translate( [ 17.5 , 42 , -1] )  cylinder( h = 9, r = 4, $fn=40);
        
        translate( [ 17.5 , 34 , -1] )  cube( [ 8 , 12 , 9] );
        translate( [ 13.5 , 34 , -1] )  cube( [ 5, 8 , 9] );     
              
               
               
                
       
  }  }
  
  
  
  
  
  }
}
