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

$fn=128;
//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
//M2-Schrauben
M2=true,       //Bohrungen für M3-Zylinderkopf-Inbusschraube
skd3=4.3,       //Schraubenkopfdurchmesser M3-Schraube
skh3=2,       //Schraubenkopfhöhe M3-Schraube
dsh3=2.2,       //Schaftdurchmesser M3-Schraube
dvst3=6.3,        //Verstärkung für M3-Schraube

//MC-Einbaubuchse
)
//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]);
//Rahmenaufdoppelung für Acrylscheibe 2x1mm
//translate([25-21,25-21,-1.8])cube([42,42,2]);



}               //union 2 end
    //alles, was vor der nächsten geschweiften Klammer steht, wird davon abgezogen (difference 2)
//Einsenkung in das Segment
polyhedron(
               points= [[wu,wu,thick],                                  //0 unten
                        [xwert*segment-wu,wu,thick],                    //1 unten
                        [xwert*segment-wu,ywert*segment-wu,thick],      //2 unten
                        [wu,ywert*segment-wu,thick],                    //3 unten
                        [wo,wo,hght+0.01],                              //4 oben
                        [wo,ywert*segment-wo, hght+0.01],               //5 oben
                        [xwert*segment-wo,ywert*segment-wo,hght+0.01],  //6 oben
                        [xwert*segment-wo,wo,hght+0.01],                //7 oben
                       ],
               faces=  [[0,1,2,3],      //Boden
                        [0,4,7,1],      //Deckel
                        [1,7,6,2],      //Front
                        [2,6,5,3],      //Seitenwand rechts
                        [3,5,4,0],      //Rückwand
                        [4,5,6,7]]      //Seitenwand links
               );   

      
}  //difference 2 end
    //alles, was vor der nächsten geschweiften Klammer steht, wird dazu hinzugefügt (union 1)
//Verstärkungen für Schrauben x-Achse unten
for (x=[0:segment:xwert*segment])
{
if (M2==true) translate([x,0,0]) cylinder(d=dvst3,h=hght,$fn=16);
if (B2mm==true) translate([x,0,0]) cylinder(d=dvst2,h=hght,$fn=16);
}
//Verstärkungen für Schrauben x-Achse oben
for (x=[0:segment:xwert*segment])
{
if (M2==true) translate([x,ywert*segment,0]) cylinder(d=dvst3,h=hght,$fn=16);
if (B2mm==true) translate([x,ywert*segment,0]) cylinder(d=dvst2,h=hght,$fn=16);
}
//Verstärkungen für Schrauben y-Achse links
for (y=[0:segment:ywert*segment])
{
if (M2==true) translate([0,y,0]) cylinder(d=dvst3,h=hght,$fn=16);
if (B2mm==true) translate([0,y,0]) cylinder(d=dvst2,h=hght,$fn=16);
}
//Verstärkungen für Schrauben y-Achse rechts
for (y=[0:segment:ywert*segment])
{
if (M2==true) translate([xwert*segment,y,0]) cylinder(d=dvst3,h=hght,$fn=16);
if (B2mm==true) translate([xwert*segment,y,0]) cylinder(d=dvst2,h=hght,$fn=16);
}

/*
//Abflachungen für 4mm-MC-Buchse (Mindestgröße 2x2)
translate([xwert*segment/2-5,ywert*segment/2+MCdist/2,0])  cube([10,3,thick]);
translate([xwert*segment/2-5,ywert*segment/2-MCdist/2-3,0])  cube([10,3,thick]);
*/


}               //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])
{
if (M2==true) translate([x,0,-0.1]) cylinder(d=dsh3,h=2*hght,$fn=16);
if (M2==true) translate([x,0,hght-skh3]) cylinder(d=skd3,h=2*hght,$fn=16);
if (B2mm==true) translate([x,0,-0.1]) cylinder(d=dsh2,h=2*hght,$fn=16);
if (B2mm==true) translate([x,0,hght-skh2]) cylinder(d=skd2,h=2*hght,$fn=16); 
}
//Bohrungen für Schrauben x-Achse oben
for (x=[0:segment:xwert*segment])
{
if (M2==true) translate([x,ywert*segment,-0.1]) cylinder(d=dsh3,h=2*hght,$fn=16);
if (M2==true) translate([x,ywert*segment,hght-skh3]) cylinder(d=skd3,h=2*hght,$fn=16);
if (B2mm==true) translate([x,ywert*segment,-0.1]) cylinder(d=dsh2,h=2*hght,$fn=16);
if (B2mm==true) translate([x,ywert*segment,hght-skh2]) cylinder(d=skd2,h=2*hght,$fn=16); 
}
//Bohrungen für Schrauben y-Achse links
for (y=[0:segment:ywert*segment])
{
if (M2==true) translate([0,y,-0.1]) cylinder(d=dsh3,h=2*hght,$fn=16);
if (M2==true) translate([0,y,hght-skh3]) cylinder(d=skd3,h=2*hght,$fn=16);
if (B2mm==true) translate([0,y,-0.1]) cylinder(d=dsh2,h=2*hght,$fn=16);
if (B2mm==true) translate([0,y,hght-skh2]) cylinder(d=skd2,h=2*hght,$fn=16); 
}
//Bohrungen für Schrauben y-Achse rechts
for (y=[0:segment:ywert*segment])
{
if (M2==true) translate([xwert*segment,y,-0.1]) cylinder(d=dsh3,h=2*hght,$fn=16);
if (M2==true) translate([xwert*segment,y,hght-skh3]) cylinder(d=skd3,h=2*hght,$fn=16);
if (B2mm==true) translate([xwert*segment,y,-0.1]) cylinder(d=dsh2,h=2*hght,$fn=16);
if (B2mm==true) translate([xwert*segment,y,hght-skh2]) cylinder(d=skd2,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]);

// Ausschnitt Vertiefung Acrylglasplatte
//translate([25-19,25-18,-2])cube([38,36,2]);

// Ausschnitt Sichtfenster
translate([2.5,2.5,-5])cube([45,45,10]);

// Ausschnitt Acrylplatte von hinten
    difference(){
    translate([1,1,-1])cube([48,48,2]);
    //Verstärkungen für Schrauben y-Achse links
    for (y=[0:segment:ywert*segment])
       translate([0,y,-2]) cylinder(d=6,h=4,$fn=16);
    //Verstärkungen für Schrauben y-Achse rechts
    for (y=[0:segment:ywert*segment])
       translate([xwert*segment,y,-2]) cylinder(d=6,h=4,$fn=16);
    }

}               //difference 1 end

}  //module end

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

// Acrylplatte:
module Acrylplatte()
{
    segment=50;
    xwert=1;
    ywert=1;
    difference(){
    translate([0.05,0.05,-1])cube([49.9,49.9,3]);
    //Verstärkungen für Schrauben y-Achse links
    for (y=[0:segment:ywert*segment])
        translate([0,y,-2]) cylinder(d=3.1,h=4,$fn=128);
    //Verstärkungen für Schrauben y-Achse rechts
    for (y=[0:segment:ywert*segment])
       translate([xwert*segment,y,-2]) cylinder(d=3.1,h=4,$fn=128);
    }
}

projection() Acrylplatte();