100 lines
2.1 KiB
OpenSCAD
100 lines
2.1 KiB
OpenSCAD
use_colors = true;
|
|
|
|
xsize = 450;
|
|
ysize = 400;
|
|
sled_ysize = 7 * 25.4;
|
|
sled_xsize = 8 * 25.4;
|
|
|
|
xmin = 155;
|
|
ymin = 140;
|
|
// 130..320
|
|
cur_xpos = 155;
|
|
// 140..260
|
|
cur_ypos = 140;
|
|
|
|
echo(str("Range = ", [ xsize - xmin * 2, ysize - ymin*2 ]));
|
|
|
|
$fs = 1.5;
|
|
$include_substock = true;
|
|
|
|
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 = 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 = ysled_rail_spacing / 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);
|
|
}
|
|
|
|
|
|
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([frame_size / 2 + corner_size / 2,
|
|
cur_ypos, 0]) {
|
|
ysled_slider(spread = sled_ysize, associated_parts = true);
|
|
translate([xsize - frame_size - corner_size, 0, 0])
|
|
rotate([0, 180, 0])
|
|
ysled_slider(spread = sled_ysize, associated_parts = true);
|
|
ysled_rails();
|
|
|
|
}
|
|
translate([cur_xpos, cur_ypos, 0])
|
|
xsled();
|
|
}
|
|
|
|
union() {
|
|
frame();
|
|
rails();
|
|
corners();
|
|
moving_parts();
|
|
}
|
|
|