module rail() { import("rail-bold.stl"); } rail_width = 20; base_thickness = 4; base_width = rail_width / 2; module attachment(w = base_width) { cube([w, rail_width, base_thickness]); difference() { x = sqrt(pow(rail_width, 2) * 2) / 2; difference() { translate([0, rail_width / 2, rail_width / -2]) rotate([45, 0, 0]) cube([w, x, x]); translate([0, 0, -rail_width - (rail_width / 3)]) cube([rail_width, rail_width, rail_width]); translate([0, 0, base_thickness]) cube([w, rail_width, rail_width]); } translate([0, 0, -1.5]) rotate([0, 90, 0]) rail(); translate([0, 0, -2]) cube([rail_width, 2, 2]); translate([0, rail_width - 2, -2]) cube([rail_width, 2, 2]); } } module holder_straight() { w = rail_width; attachment(w); translate([0, rail_width / 2, 10]) rotate([0, 90, 0]) cylinder(w, d = base_thickness, $fn = 200); hull() { translate([0, rail_width / 2, 10]) rotate([0, 90, 0]) cylinder(base_thickness, d = base_thickness, $fn = 200); translate([base_thickness / 2, 0, base_thickness / 2]) rotate([-90, 0, 0]) cylinder(rail_width, d = base_thickness, $fn = 200); } hull() { #translate([w - base_thickness, rail_width / 2, 10]) rotate([0, 90, 0]) cylinder(base_thickness, d = base_thickness, $fn = 200); translate([w - base_thickness / 2, 0, base_thickness / 2]) rotate([-90, 0, 0]) cylinder(rail_width, d = base_thickness, $fn = 200); } } module holder_angled() { attachment(); translate([base_width / 2, 0, 10]) rotate([-90, 0, 0]) cylinder(rail_width, d = base_thickness, $fn = 200); hull() { translate([base_width / 2, 0, 10]) rotate([-90, 0, 0]) cylinder(base_thickness, d = base_thickness, $fn = 200); translate([0, base_thickness / 2, base_thickness / 2]) rotate([0, 90, 0]) cylinder(base_width, d = base_thickness, $fn = 200); } hull() { translate([base_width / 2, rail_width - base_thickness, 10]) rotate([-90, 0, 0]) cylinder(base_thickness, d = base_thickness, $fn = 200); translate([0, rail_width - base_thickness / 2, base_thickness / 2]) rotate([0, 90, 0]) cylinder(base_width, d = base_thickness, $fn = 200); } } holder_angled(); translate([rail_width, 0, 0]) holder_straight();