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([ 180, 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(); }