
/* [OpenSCAD] */
$fn=60; // [30:6:180]

/* [Profil] */

// Aluprofil (quadratisch)
Raster = 20; // [20,30]
// Gewindebohrung metrisch
Schraube = 5; // [5,6,8]

/* [Verbinder] */
// Winkel der Verbindung
Winkel = 90; // [30:5:180]
// Radius, um die Schrauben zu erreichen
Radius = 0; // [0:1:50]
// Modell für den Slicer auf die Seite legen
Kippen = true;

/* [Hidden] */

// Montageplatte [Länge,Breite,Dicke]
Montageplatte = [Raster*1.0,Raster,3];
Fuehrung = 1.5;

////////////////////////////////////////////////////////////////////////////////////////

module grundplatte() {
  Toleranz=0.2;
  translate([ (Montageplatte.x/2+Radius),0,0])
  difference() {
    // Platte mit Bolzen
    union() {
      cube( [Montageplatte.x,Montageplatte.y,Montageplatte.z], center=true );
      if (Radius==0) { // Seitenplatten innen rund verbinden
        translate([-Montageplatte.x/2,0,0]) rotate([90,0,0]) cylinder( d=Montageplatte.z, h=Raster, center=true);
      }
      // zwei Führungsbolzen vorne und hinten
      translate([(Montageplatte.x/2-Montageplatte.z),0,-(Montageplatte.z+Fuehrung)/2]) cube( [Schraube/2, Schraube-Toleranz, Fuehrung], center=true );
      translate([-(Montageplatte.x/2-Montageplatte.z),0,-(Montageplatte.z+Fuehrung)/2]) cube( [Schraube/2, Schraube-Toleranz, Fuehrung], center=true );
    }
    // Langloch für Schraube
    hull() {
      translate([Montageplatte.z/2,0,0]) cylinder( d=Schraube+Toleranz, h=3*Montageplatte.z, center=true );
      translate([-Montageplatte.z/2,0,0]) cylinder( d=Schraube+Toleranz, h=3*Montageplatte.z, center=true );
    }
  }
}

module seite() { 
  hull() { 
    translate([Montageplatte.x/2+Radius,0,0]) cube([Montageplatte.x,Montageplatte.z,Montageplatte.z], center=true );
    rotate([0,-Winkel,0]) translate([Montageplatte.x/2+Radius,0,0]) cube([Montageplatte.x,Montageplatte.z,Montageplatte.z], center=true );
  }
}

// Auf die Seite legen, dann wird es beim Slicen einfacher
turn90degree=(Kippen==true)?90:0;
rotate([turn90degree,0,0]) union() {
  // Montageplatte 
  color("red") grundplatte();
  // innere Verbindung der beiden Grundplatten
  color("green") hull() {
    translate([ (Radius),0,0]) rotate([90,0,0]) cylinder( d=Montageplatte.z, h=Raster, center=true);
    rotate([0,-Winkel,0]) translate([ (Radius),0,0]) rotate([90,0,0]) cylinder( d=Montageplatte.z, h=Raster, center=true);
  }
  // die andere Montageplatte, gedreht und gespiegelt
  color("orange") rotate([0,-Winkel,0]) mirror([0,0,1]) grundplatte();
  // beide Seitenteile
  color("lightblue") union() {
    translate([0,(Montageplatte.y-Montageplatte.z)/2,0]) seite();
    translate([0,-(Montageplatte.y-Montageplatte.z)/2,0]) seite();
  }
}
