Files
film-scanner/assembly.scad

84 lines
2.2 KiB
OpenSCAD

include <constants.scad>
include <parts.scad>
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, is_left = false);
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();
}
*intersection() {
ysled_slider(spread=sled_ysize);
translate([0, -1000, -1000])
cube([2000, 2000, 2000]);
}
*xsled2();