diff --git a/tests/rails.scad b/tests/rails.scad index a9fb0e9..7616169 100644 --- a/tests/rails.scad +++ b/tests/rails.scad @@ -23,6 +23,7 @@ use <../utils/layout.scad> use <../vitamins/nut.scad> sheet = 3; +pos = 1; //[-1 : 0.1 : 1] module rails() layout([for(l = rails) carriage_width(rail_carriage(l))], 20) @@ -33,7 +34,7 @@ module rails() nut = screw_nut(screw); washer = screw_washer(screw); - rail_assembly(rail, length, rail_travel(rail, length) / 2, $i<2 ? grey(20) : "green", $i<2 ? grey(20) : "red"); + rail_assembly(rail, length, pos * rail_travel(rail, length) / 2, $i<2 ? grey(20) : "green", $i<2 ? grey(20) : "red"); rail_screws(rail, length, sheet + nut_thickness(nut, true) + washer_thickness(washer)); diff --git a/vitamins/rail.scad b/vitamins/rail.scad index 804f48e..f84914e 100644 --- a/vitamins/rail.scad +++ b/vitamins/rail.scad @@ -52,8 +52,9 @@ function rail_holes(type, length) = //! Number of holes in a rail given its ```l module rail_hole_positions(type, length, first = 0, screws = 100, both_ends = true) { //! Position children over screw holes pitch = rail_pitch(type); holes = rail_holes(type, length); - for(i = [first : holes - 1 - first]) - if(i < screws || (holes - i <= screws && both_ends)) + last = first + screws; + for(i = [first : holes - 1], j = holes - 1 - i) + if(i < last || both_ends && (j >= first && j < last)) translate([i * pitch - length / 2 + (length - (holes - 1) * pitch) / 2, 0]) children(); } @@ -177,7 +178,6 @@ module rail_assembly(type, length, pos, carriage_end_colour = grey(20), carriage translate([pos, 0]) carriage(rail_carriage(type), type, carriage_end_colour, carriage_wiper_colour); - } module rail_screws(type, length, thickness, screws = 100) { //! Place screws in the rail @@ -193,6 +193,6 @@ module rail_screws(type, length, thickness, screws = 100) { //! Place screws in screw(end_screw, end_screw_len); translate_z(rail_screw_height(type, screw)) - rail_hole_positions(type, length, index_screws, screws) + rail_hole_positions(type, length, index_screws, min(screws, rail_holes(type, length)) - 2 * index_screws) screw(screw, screw_len); }