//---------------------------------------------------------------------
//
// OpenSCAD-Script for mosaic 50x50mm Schuko Socket M3 screws
//
// derived from:
// https://github.com/MakeMagazinDE/OpenSCAD_Frontplatten/
//---------------------------------------------------------------------
//
// 2024-06-03 xsider    modified for grid 25mm and M2-screws
//
//---------------------------------------------------------------------

//Moduldefinition mit Parametern für Frontplattensystem im 19mm-Raster
module FrontElem (
    //Frontplattenelement
    xwert=1,        //Anzahl der Segmente in horizontaler Richtung
    ywert=1,        //Anzahl der Segmente in vertikaler Richtung
    segment=50,   //Kantenlänge des Segments
    hght=3.0,       //Höhe des Rands des Frontplattensegments
    thick=2,      //verbleibende Dicke des Frontplattensegments
    wo=1.0,         //Wandstärke oben
    wu=2.0,         //Wandstärke unten
    splt = 0.05,     // Luftspalt

    //M3-Schrauben
    dsh3=3.2,       //Schaftdurchmesser M3-Schraube
    dvst3=6.3,        //Verstärkung für M3-Schraube
)
//Beginn Modul
{
    difference()
    {   //difference 1
        union()
        {        //union 1
            difference()
            {   //difference 2
                union()
                {        //union 2
                    
                    //alles, was vor der nächsten geschweiften Klammer steht, wird zusammengefügt (union 2)0
                    //Körper des Frontplattensegments
                    cube([xwert*segment, ywert*segment, hght]);
                    
                    // umlaufend 0.2mm Luft
                    translate([1.25,1.25,-13+3])cube([47.5,47.5,13-1]);
                }               //union 2 end
                //alles, was vor der nächsten geschweiften Klammer steht, wird davon abgezogen (difference 2)
                  
            }  //difference 2 end
            
            //alles, was vor der nächsten geschweiften Klammer steht, wird dazu hinzugefügt (union 1)
        }               //union 1 end
        
        //alles, was vor der nächsten geschweiften Klammer steht, wird davon wieder abgezogen (difference 1)
        //Bohrungen für Schrauben x-Achse unten
        for (x=[0:segment:xwert*segment])
        {
            translate([x,0,-0.1]) cylinder(d=dsh3,h=2*hght,$fn=16);
        }
        
        //Bohrungen für Schrauben x-Achse oben
        for (x=[0:segment:xwert*segment])
        {
            translate([x,ywert*segment,-0.1]) cylinder(d=dsh3,h=2*hght,$fn=16);
        }
        
        //Bohrungen für Schrauben y-Achse links
        for (y=[0:segment:ywert*segment])
        {
            translate([0,y,-0.1]) cylinder(d=dsh3,h=2*hght,$fn=16);
        }
        
        //Bohrungen für Schrauben y-Achse rechts
        for (y=[0:segment:ywert*segment])
        {
            translate([xwert*segment,y,-0.1]) cylinder(d=dsh3,h=2*hght,$fn=16);
        }
        
        //Abschneiden Verstärkungen unten
        translate([-250,-10,-0.1])
        cube([500,10,25]);
        
        //Abschneiden Verstärkungen oben
        translate([-250,ywert*segment,-0.1])
        cube([500,10,25]);
        
        //Abschneiden Verstärkungen links
        translate([-10,-250,-0.1])
        cube([10,500,25]);
        
        //Abschneiden Verstärkungen rechts
        translate([xwert*segment,-250,-0.1])
        cube([10,500,25]);

        // cutout for 45mm plug insert
        translate([2.45,2.45,-8.6+3])cube([45.1,45.1,8.6+1]);
        
        //
        translate([4.65,4.65,-15])cube([40.7,40.7,20]);
        ddome=5.4;
        h=30;
        fn=256;

        // Cutout for screw domes in Grind
        for (x=[0:segment:xwert*segment])
        {
            translate([x,0,-h]) cylinder(d=ddome,h=h,$fn=fn);
        }
        
        //Bohrungen für Schrauben x-Achse oben
        for (x=[0:segment:xwert*segment])
        {
            translate([x,ywert*segment,-h]) cylinder(d=ddome,h=h,$fn=fn);
        }
        
        //Bohrungen für Schrauben y-Achse links
        for (y=[0:segment:ywert*segment])
        {
            translate([0,y,-h]) cylinder(d=ddome,h=h,$fn=fn);
        }

        //Bohrungen für Schrauben y-Achse rechts
        for (y=[0:segment:ywert*segment])
        {
            translate([xwert*segment,y,-h]) cylinder(d=ddome,h=h,$fn=fn);
        }

        //Bohrungen für Schrauben x-Achse unten
        for (x=[0:segment:xwert*segment])
        {
            translate([x,0,-h]) cylinder(d=ddome,h=h,$fn=fn);
        }
    }               //difference 1 end
}  //module end

//Hier werden Instanzen des Moduls aufgerufen
translate([0,0,0]) FrontElem();

