use_colors = true; xsize = 500; ysize = 400; sled_size = 6 * 25.4; cur_xpos = 100; cur_ypos = 200; include ; csize = 15; module frame() { translate([corner_offset, 0, 0]) rotate([0, 90, 0]) tslot(xsize - 2 * corner_offset); translate([0, corner_offset, 0]) rotate([-90, 0, 0]) tslot(ysize - 2*corner_offset); translate([corner_offset, ysize, 0]) rotate([0, 90, 0]) tslot(xsize - 2*corner_offset); translate([xsize, corner_offset, 0]) rotate([-90, 0, 0]) tslot(ysize - 2*corner_offset); } module corners() { render() { translate([0,0]) flcorner(); translate([xsize, 0, 0]) frcorner(); translate([xsize, ysize, 0]) brcorner(); translate([0, ysize, 0]) blcorner(); } } module rails() { frame_offset = frame_size / 2 + corner_size / 2; colorize(stock_color) { for (xpos = [frame_offset, xsize - frame_offset]) { translate([xpos, frame_size / 2 + wall_thickness]) rotate([-90, 0, 0]) cylinder(d = rail_diam, h = ysize - corner_offset * 2); } } } module ysled_rails() { frame_offset = frame_size + corner_size / 2; yoff = (sled_size + ysled_extralen * 2 - frame_size) / 2; colorize(stock_color) for (ypos = [-yoff, yoff]) translate([frame_size / 2, ypos, 0]) rotate([0, 90, 0]) cylinder(d = rail_diam, h = xsize - frame_size * 2 - corner_size); } union() { frame(); rails(); corners(); } translate([frame_size / 2 + corner_size / 2, cur_ypos, 0]) { ysled(associated_parts = true); translate([xsize - frame_size - corner_size, 0, 0]) rotate([0, 180, 0]) ysled(associated_parts = true); ysled_rails(); } //translate([0, 0, -1000]) cube(2000, center=true);