doc fixes, improved error handling

This commit is contained in:
Adrian Mariano 2022-05-27 19:44:06 -04:00
parent 924f8a6298
commit deb83eabf0

View file

@ -54,7 +54,7 @@ include <screw_drive.scad>
// To set the pitch using these pitch strings you use the `thread=` argument to the modules.
// You cannot incorporate a named pitch into the thread name. The finer pitch categories
// are defined only for larger screw diameters. You can also use the `thread=` argument to
// directly specify a pitch, so `thread=2` would produce a thread pitch of 2mm. Setting the
// directly specify a pitch, so `thread=2` produces a thread pitch of 2mm. Setting the
// pitch to zero produces an unthreaded screws, the same as setting it to "none". Specifying
// a numeric value this way overrides a value given in the name.
// Subsection: Screw Heads
@ -73,20 +73,20 @@ include <screw_drive.scad>
// shows which drive type is compatible with each head types. Different head types work in ISO and UTS,
// as marked in the first column.
// .
// ISO|UTS|Head | Drive
// ---|---|--------------- | ----------------------------
// X|X|"none" | hex, torx
// X|X|"hex" | *none*
// X|X|"socket" | hex, torx
// X|X|"button" | hex, torx
// X|X|"flat" | slot, phillips, hex, torx
// |X|"round" | slot, phillips
// |X|"fillister" | slot, phillips
// |X|"flat small" | phillips, slot
// |X|"flat large" | hex, torx
// |X|"flat undercut" | slot, phillips
// X| |"pan" | slot, phillips
// X| |"cheese" | slot, phillips
// |ISO|UTS|Head | Drive |
// |---|---|--------------- | ----------------------------|
// |X|X|"none" | hex, torx|
// |X|X|"hex" | *none*|
// |X|X|"socket" | hex, torx|
// |X|X|"button" | hex, torx|
// |X|X|"flat" | slot, phillips, hex, torx|
// | |X|"round" | slot, phillips |
// | |X|"fillister" | slot, phillips |
// | |X|"flat small" | slot, phillips|
// | |X|"flat large" | hex, torx |
// | |X|"flat undercut" | slot, phillips |
// |X| |"pan" | slot, phillips |
// |X| |"cheese" | slot, phillips |
// .
// The drive size is specified appropriately to the drive type: drive number for phillips or torx,
// and allen width in mm or inches (as appropriate) for hex. Drive size is determined automatically
@ -298,9 +298,9 @@ Torx values: https://www.stanleyengineeredfastening.com/-/media/web/sef/resourc
// down(INCH*1/20*2.145) nut("1/4-20", thickness=8, diameter=0.5*INCH,tolerance="1B");
// }
function screw(name, head, drive, thread="coarse", drive_size, oversize=0, spec, length, l, shank=0, tolerance=undef, details=true, anchor=undef,anchor_head=undef,spin=0, orient=UP) = no_function("screw");
function screw(name, head="none", drive, thread="coarse", drive_size, oversize=0, spec, length, l, shank=0, tolerance=undef, details=true, anchor=undef,anchor_head=undef,spin=0, orient=UP) = no_function("screw");
module screw(name, head, drive, thread="coarse", drive_size, oversize=0, spec, length, l, shank=0, tolerance=undef, details=true, anchor=undef,anchor_head=undef,spin=0, orient=UP)
module screw(name, head="none", drive, thread="coarse", drive_size, oversize=0, spec, length, l, shank=0, tolerance=undef, details=true, anchor=undef,anchor_head=undef,spin=0, orient=UP)
{
a=echo(ssthread=thread);
spec = _validate_screw_spec(
@ -310,8 +310,10 @@ module screw(name, head, drive, thread="coarse", drive_size, oversize=0, spec, l
head = struct_val(spec,"head");
pitch = struct_val(spec, "pitch");
diameter = struct_val(spec, "diameter");
headless = head=="none" || head==undef;
eps = headless || starts_with(head,"flat") ? 0 : 0.01;
headless = head=="none";
eps = headless ? 0
: starts_with(head,"flat") ? -0.01
: 0.01;
screwlen = one_defined([l,length],"l,length",dflt=undef);
length = u_add(first_defined([screwlen,struct_val(spec,"length")]) , eps);
assert(all_positive(length), "Must specify positive length");
@ -688,7 +690,6 @@ module screw_head(screw_info,details=false) {
full_height = head_size/2/tan(angle);
height = is_def(head_height) ? head_height : full_height;
d2 = head_size*(1-height/full_height);
//down(height)
zflip()
cyl(d1=head_size, d2=d2, l=height, anchor=BOTTOM);
}
@ -758,7 +759,7 @@ module screw_head(screw_info,details=false) {
// thread = thread type or specification. See [screw pitch](#subsection-standard-screw-pitch). Default: "coarse"
// drive_size = size of drive recess to override computed value
// oversize = amount to increase screw diameter for clearance holes. Default: 0
function screw_info(name, head, drive, thread="coarse", drive_size=undef, oversize=0) =
function screw_info(name, head="none", drive, thread="coarse", drive_size=undef, oversize=0) =
let(type=_parse_screw_name(name),
drive_info = _parse_drive(drive, drive_size),
drive=drive_info[0],
@ -822,7 +823,7 @@ function _screw_info_english(diam, threadcount, head, thread, drive) =
)
INCH / struct_val(UTS_thread, diam)[tind],
head_data =
head=="none" || is_undef(head) ? let (
head=="none" ? let (
UTS_setscrew = [ // hex width, hex depth
["#0", [0.028, 0.050]],
["#1", [0.035, 0.060]],
@ -1151,7 +1152,7 @@ function _screw_info_metric(diam, pitch, head, thread, drive) =
)
struct_val(ISO_thread, diam)[tind],
head_data =
head=="none" || is_undef(head) ? let(
head=="none" ? let(
metric_setscrew =
[
[1.4, [0.7]],
@ -1363,7 +1364,7 @@ function _validate_screw_spec(spec) = let(
pitch = struct_val(spec,"pitch"),
pitchOK = is_undef(pitch) || (is_num(pitch) && pitch>=0),
head = struct_val(spec,"head"),
headOK = is_undef(head) || head=="none" || (
headOK = head=="none" || (
in_list(head, ["cheese","pan flat","pan round", "flat","flat large", "flat small", "flat undercut", "button","socket","fillister","round","hex"]) &&
_is_positive(struct_val(spec, "head_size"))),
drive = struct_val(spec, "drive"),
@ -1382,7 +1383,7 @@ function _validate_screw_spec(spec) = let(
assert(systemOK, str("Screw spec has invalid \"system\", ", struct_val(spec,"system"), ". Must be \"ISO\" or \"UTS\""))
assert(diamOK, str("Screw spec has invalid \"diameter\", ", struct_val(spec,"diameter")))
assert(pitchOK, str("Screw spec has invalid \"pitch\", ", pitch))
assert(headOK, "Screw spec head type invalid or unknown for your screw size")
assert(headOK, "Screw spec head type invalid or unknown for your screw type and size")
assert(driveOK, "Screw drive type invalid or unknown for your screw size or head type")
spec;
@ -1393,9 +1394,9 @@ function _validate_screw_spec(spec) = let(
// Usage:
// thread_specification(screw_spec, [tolerance], [internal])
// Description:
// Determines actual thread geometry for a given screw with specified tolerance. If tolerance is omitted the default is used. If tolerance
// is "none" or 0 then return the nominal thread geometry. See {{screw()}} or {{nut()}} for details on tolerance values for screws (internal=false) and
// nuts (internal=true).
// Determines actual thread geometry for a given screw with specified tolerance and nominal size. See [tolerance](#subsection-tolerance) for
// information on tolerances. If tolerance is omitted the default is used. If tolerance
// is "none" or 0 then return the nominal thread geometry. When `internal=true` the nut tolerance is used.
// .
// The return value is a structure with the following fields:
// - pitch: the thread pitch