1
0
mirror of https://github.com/nophead/NopSCADlib.git synced 2025-09-09 22:51:16 +02:00

Added screw_length() to calculuate screw lengths includin washers, inserts and nuts.

This commit is contained in:
Chris Palmer
2021-01-15 18:12:37 +00:00
parent c33876530e
commit 93b260b7b9
28 changed files with 62 additions and 88 deletions

View File

@@ -151,10 +151,8 @@ function fan_screw_depth(type, full_depth = false) = fan_boss_d(type) || full_de
function fan_screw_length(type, thickness, full_depth = false) =
let(depth = fan_screw_depth(type, full_depth),
washers = depth == fan_depth(type) ? 2 : 1,
washer = screw_washer(fan_screw(type)),
nut = screw_nut(fan_screw(type)))
screw_longer_than(thickness + depth + washer_thickness(washer) * washers + nut_thickness(nut, true)); //! Screw length required
washers = depth == fan_depth(type) ? 2 : 1)
screw_length(fan_screw(type), thickness + depth, washers, nyloc = true); //! Screw length required
module fan_assembly(type, thickness, include_fan = true, screw = false, full_depth = false) { //! Fan with its fasteners
translate_z(-fan_depth(type) / 2) {

View File

@@ -247,10 +247,7 @@ module iec_inserts(type) { //! Place the inserts
module iec_assembly(type, thickness) { //! Assembly with fasteners given panel thickness
screw = iec_screw(type);
washer = screw_washer(screw);
nut = screw_nut(screw);
insert = screw_insert(screw);
screw_length = thickness ? screw_longer_than(iec_flange_t(type) + thickness + washer_thickness(washer) + nut_thickness(nut, true))
screw_length = thickness ? screw_length(screw, iec_flange_t(type) + thickness, 1, nyloc = true)
: insert_screw_length;
iec(type);
@@ -262,6 +259,6 @@ module iec_assembly(type, thickness) { //! Assembly with fasteners given panel
if(thickness)
translate_z(-thickness)
vflip()
nut_and_washer(nut, true);
nut_and_washer(screw_nut(screw), true);
}
}

View File

@@ -129,15 +129,13 @@ module mod_screw_positions(type) //! Position children at the screw positions
module module_assembly(type, thickness) { //! Module with its fasteners in place
screw = mod_screw(type);
washer = screw_washer(screw);
nut = screw_nut(screw);
screw_length = screw_longer_than(thickness + mod_screw_z(type) + 2 * washer_thickness(washer) + nut_thickness(nut, true));
screw_length = screw_length(screw, thickness + mod_screw_z(type), 2, nyloc = true);
mod(type);
mod_screw_positions(type) {
translate_z(mod_screw_z(type))
nut_and_washer(nut, true);
nut_and_washer(screw_nut(screw), true);
translate_z(-thickness)
vflip()

View File

@@ -1121,9 +1121,7 @@ module pcb_assembly(type, height, thickness) { //! Draw PCB assembly with spaces
screw = pcb_screw(type);
if(!is_undef(screw)) {
washer = screw_washer(screw);
nut = screw_nut(screw);
screw_length = screw_longer_than(height + thickness + pcb_thickness(type) + washer_thickness(washer) + nut_thickness(nut, true));
screw_length = screw_length(screw, height + thickness + pcb_thickness(type), 1, nyloc = true);
taper = screw_smaller_than(pcb_hole_d(type)) > 2 * screw_radius(screw); // Arduino?
pcb_screw_positions(type) {
@@ -1138,7 +1136,7 @@ module pcb_assembly(type, height, thickness) { //! Draw PCB assembly with spaces
translate_z(-thickness)
vflip()
nut_and_washer(nut, true);
nut_and_washer(screw_nut(screw), true);
}
}
}

View File

@@ -128,7 +128,7 @@ module ring_terminal_assembly(type, thickness, top = false) { //! Earthing assem
screw = ringterm_screw(type);
washer = screw_washer(screw);
nut = screw_nut(screw);
screw_length = screw_longer_than(thickness + 2 * washer_thickness(washer) + nut_thickness(nut, true) + ringterm_thickness(type));
screw_length = screw_length(screw, thickness + ringterm_thickness(type), 2, nyloc = true);
explode(10, true) star_washer(washer)
if(top)

View File

@@ -48,7 +48,7 @@ function screw_head_depth(type, d = 0) = //! How far a counter sink
? 0
: let(r = screw_radius(type)) screw_head_radius(type) - max(r, d / 2) + r / 5;
function screw_longer_than(x) = x <= 5 ? 5 : //! Returns shortest screw length longer or equal to x
function screw_longer_than(x) = x <= 5 ? 5 : //! Returns the length of the shortest screw length longer or equal to x
x <= 6 ? 6 :
x <= 8 ? 8 :
x <= 10 ? 10 :
@@ -56,7 +56,7 @@ function screw_longer_than(x) = x <= 5 ? 5 : //! Returns shortest screw length
x <= 16 ? 16 :
ceil(x / 5) * 5;
function screw_shorter_than(x) = x >= 20 ? floor(x / 5) * 5 : //! Returns longest screw length shorter than or equal to x
function screw_shorter_than(x) = x >= 20 ? floor(x / 5) * 5 : //! Returns the length of the longest screw shorter than or equal to x
x >= 16 ? 16 :
x >= 12 ? 12 :
x >= 10 ? 10 :
@@ -64,6 +64,14 @@ function screw_shorter_than(x) = x >= 20 ? floor(x / 5) * 5 : //! Returns longes
x >= 6 ? 6 :
5;
function screw_length(screw, thickness, washers, insert = false, nyloc = false, nut = false, longer = false) = //! Returns the length of the longest or shortest screw that will got through `thickness` and `washers` and possibly an `insert`, `nut` or `nyloc`
let(washer = washers ? washers * washer_thickness(screw_washer(screw)) : 0,
insert = insert ? insert_length(screw_insert(screw)) : 0,
nut = nut || nyloc ? nut_thickness(screw_nut(screw), nyloc) : 0,
total = thickness + washer + insert + nut
)
longer || nut || nyloc ? screw_longer_than(total) : screw_shorter_than(total);
function screw_smaller_than(d) = d >= 2.5 && d < 3 ? 2.5 : floor(d); // Largest diameter screw less than or equal to specified diameter
function screw_insert(screw, i = 0) = let(d = screw_radius(screw) * 2)

View File

@@ -71,15 +71,13 @@ use <nut.scad>
use <washer.scad>
module ssr_assembly(type, screw, thickness) { //! Assembly with fasteners in place
nut = screw_nut(screw);
washer = screw_washer(screw);
screw_length = screw_longer_than(2 * washer_thickness(washer) + thickness + ssr_base_t(type) + nut_thickness(nut, true));
screw_length = screw_length(screw, thickness + ssr_base_t(type), 2, nyloc = true);
ssr(type);
ssr_hole_positions(type) {
translate_z(ssr_base_t(type))
nut_and_washer(nut, true);
nut_and_washer(screw_nut(screw), true);
translate_z(-thickness)
vflip()

View File

@@ -146,9 +146,8 @@ module vero_cutouts(type, angle = undef) vero_components(type, true, angle); //!
module veroboard_assembly(type, height, thickness, flip = false) //! Draw the assembly with components and fasteners in place
assembly(vero_assembly(type)) {
screw = vero_screw(type);
washer = screw_washer(screw);
nut = screw_nut(screw);
screw_length = screw_longer_than(height + thickness + vero_thickness(type) + 2 * washer_thickness(washer) + nut_thickness(nut, true));
screw_length = screw_length(screw, height + thickness + vero_thickness(type), 2, nyloc = true);
translate_z(height) {
veroboard(type);