$fn = 100;

d_achse = 3; //Durchmesser Achse bei der Rolle
d_achse_halter = 5; // Durchmesser Achse beim Halter
d_rolle = 10; //Rollendurchmesser

b_rolle = 10; //Rollenbreite
b_halter = 1.5; //Halterbreite
b_boden = 1.5; //Bodenbreite
boden_offset = 2; //Zusätzlicher Rahmen außenrum

t_rolle_aussparung_1 = 0.5; // Tiefe der Achsenaussparung - spitz zulaufend
t_rolle_aussparung_2 = 1; // Tiefe der Achsenaussparung - zylinder
a_rolle_halter = 0.5; // Abstand zwischen Rolle und Halter
a_rolle_boden = 3; //Abstand zwischen Rolle und Boden

module halter () 
{
    translate([- d_rolle / 2,0,0]){
        resize([0,d_rolle,0])  {
            difference () {
                cylinder(h = b_halter, r = d_rolle * 3 /4);
                translate([- d_rolle*3/4, -d_rolle*3/4, 0]) cube([d_rolle * 3 /4, 2 * d_rolle * 3 /4, b_halter]);
            } 
        }
        translate([-a_rolle_boden, -d_rolle /2, 0]) cube([a_rolle_boden,d_rolle, b_halter]);
    }
    
    translate([0,0,b_halter]) {
        cylinder(h=t_rolle_aussparung_1 + a_rolle_halter, r1 = d_achse_halter / 2, r2 = d_achse / 2);
        translate([0,0,t_rolle_aussparung_1]) cylinder(h=t_rolle_aussparung_2 + a_rolle_halter, r = d_achse / 2);
    }
}

module halterung ()
{
    halter();
    translate([0,0,b_rolle + 2 * (a_rolle_halter + b_halter)]) mirror([0,0,1]) halter();
    
    translate([- d_rolle / 2 - a_rolle_boden - b_boden,-d_rolle /2 - boden_offset,-boden_offset]) {
        cube([b_boden,d_rolle + boden_offset * 2, b_halter * 2 + a_rolle_halter * 2 + b_rolle + boden_offset * 2]);
    }
}
    
module rolle () 
{
    translate([0,0,-a_rolle_halter - b_halter]) difference() {
        translate([0,0,a_rolle_halter + b_halter]) cylinder(h=b_rolle, d=d_rolle);
        halterung();
    }
}

rolle();
translate([3 * d_rolle,0,b_boden + a_rolle_boden + d_rolle / 2]) rotate([0,-90,0]) halterung();

