include ; 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() { translate([0,0]) flcorner(); translate([xsize, 0, 0]) frcorner(); translate([xsize, ysize, 0]) brcorner(); translate([0, ysize, 0]) blcorner(); } module rails() { frame_offset = yrail_offset; colorize(stock_color) { for (xpos = [frame_offset, xsize - frame_offset]) { rail_len = ysize - corner_offset * 2; bom_item(printable=false, label = str("steel_bar(d=8mm, len=", rail_len, "mm)")); translate([xpos, frame_size / 2 + wall_thickness]) rotate([-90, 0, 0]) cylinder(d = rail_diam, h = ysize - corner_offset * 2); } } } module ysled_rails() { yoff = ysled_rail_spacing / 2; rail_len = xsize - frame_size - yrail_offset * 2; colorize(stock_color) for (ypos = [-yoff, yoff]) { bom_item(printable=false, label = str("steel_bar(d=8mm, len=", rail_len, "mm)")); translate([frame_size / 2, ypos, 0]) rotate([0, 90, 0]) cylinder(d = rail_diam, h = rail_len); } } module xsled() { xdiff = sled_xsize / 2 + frame_size / 2; translate([0, 0, frame_size]) xsled_frame(); } module moving_parts(xpos = cur_xpos, ypos = cur_ypos) { translate([yrail_offset, cur_ypos, 0]) ysled_slider(spread = sled_ysize); translate([xsize - yrail_offset, cur_ypos, 0]) rotate([0, 180, 0]) ysled_slider(spread = sled_ysize); translate([yrail_offset, cur_ypos, 0]) if($preview) ysled_rails(); translate([cur_xpos, cur_ypos, 0]) { // xsled(); xsled2(); } } union() { if($preview) frame(); if($preview) rails(); corners(); moving_parts(); }