make slop undef and add get_slop()

add no_children in places
This commit is contained in:
Adrian Mariano 2022-04-11 22:18:52 -04:00
parent f75ff907c7
commit 82b4b284a9
12 changed files with 51 additions and 34 deletions

View file

@ -1309,7 +1309,8 @@ function bezier_vnf_degenerate_patch(patch, splinesteps=16, reverse=false, retur
// [ 5, 10], [ 0, 10]
// ];
// debug_bezier(bez, N=3, width=0.5);
module debug_bezier(bezpath, width=1, N=3) {
module debug_bezier(bezpath, width=1, N=3) {
no_children($children);
assert(is_path(bezpath));
assert(is_int(N));
assert(len(bezpath)%N == 1, str("A degree ",N," bezier path shound have a multiple of ",N," points in it, plus 1."));
@ -1372,6 +1373,7 @@ module debug_bezier(bezpath, width=1, N=3) {
// debug_bezier_patches(patches=[patch1, patch2], splinesteps=8, showcps=true);
module debug_bezier_patches(patches=[], size, splinesteps=16, showcps=true, showdots=false, showpatch=true, convexity=10, style="default")
{
no_children($children);
assert(is_undef(size)||is_num(size));
assert(is_int(splinesteps) && splinesteps>0);
assert(is_list(patches) && all([for (patch=patches) is_bezier_patch(patch)]));

View file

@ -22,6 +22,11 @@ _UNDEF="LRG+HX7dy89RyHvDlAKvb9Y04OTuaikpx205CTh8BSI";
// `2*$slop` to each side. This should be done for both X and Y axes. The Z axis will require a
// slop that depends on your layer height and bridging settings, and hole sizes. We leave that as
// a more complicated exercise for the user.
// .
// Note that the slop value is accessed using the {{get_slop()}} function. This function provides
// the default value of 0 if you have not set `$slop`. This approach makes it possible for you to
// set `$slop` in your programs without experiencing peculiar OpenSCAD issues having to do with multiple
// definitions of the variable. If you write code that uses `$slop` be sure to reference it using {{get_slop()}}.
// DefineHeader(NumList): Calibration
// Calibration: To calibrate the `$slop` value for your printer, follow this procedure:
// Print the Slop Calibration part from the example below.
@ -92,7 +97,14 @@ _UNDEF="LRG+HX7dy89RyHvDlAKvb9Y04OTuaikpx205CTh8BSI";
// text("gap", size=1.5, halign="center");
// }
// }
$slop = 0.0;
// Function: get_slop()
// Usage:
// slop = get_slop();
// Description:
// Returns the current $slop value, or the default value if the user did not set $slop.
// Always acess the `$slop` variable using this function.
function get_slop() = is_undef($slop) ? 0 : $slop;
// Constant: INCH

View file

@ -204,11 +204,11 @@ module cubetruss_clip(extents=1, size, strut, clipthick, anchor=CENTER, spin=0,
}
}
fwd(strut*3/2) {
cube([$slop, strut*3, size], center=true);
cube([get_slop(), strut*3, size], center=true);
}
}
right($slop/2+0.01) {
fwd(strut*1.25+$slop) {
right(get_slop()/2+0.01) {
fwd(strut*1.25+get_slop()) {
yrot(-90) prismoid([clipheight-cliplen*2, strut/2], [clipheight-cliplen*2-2*clipsize, strut/2], h=clipsize+0.01);
}
}
@ -268,7 +268,7 @@ module cubetruss_foot(w=1, size, strut, clipthick, anchor=CENTER, spin=0, orient
}
// Horiz Wall Clips
up(clipthick+strut+$slop*2) {
up(clipthick+strut+get_slop()*2) {
xcopies(w*(size-strut)+strut) {
prismoid([clipsize*2, size/3.5], [0.1, size/3.5], h=clipsize*3, anchor=BOT);
}
@ -280,19 +280,19 @@ module cubetruss_foot(w=1, size, strut, clipthick, anchor=CENTER, spin=0, orient
difference() {
// Start with octagon to fit sides.
up(clipthick-0.01) {
zrot(180/8) cylinder(h=strut, d1=cyld-4*$slop, d2=cyld-4*$slop-1, center=false, $fn=8);
zrot(180/8) cylinder(h=strut, d1=cyld-4*get_slop(), d2=cyld-4*get_slop()-1, center=false, $fn=8);
}
// Bevel to fit.
up(clipthick+strut) {
ycopies(size-2*strut-4*$slop) {
ycopies(size-2*strut-4*get_slop()) {
chamfer_edge_mask(l=size-strut, chamfer=strut*2/3, orient=RIGHT);
}
}
// Cut out X for possible top mount.
zrot_copies([-45, 45]) {
cube([size*3, strut/sqrt(2)+2*$slop, size*3], center=true);
cube([size*3, strut/sqrt(2)+2*get_slop(), size*3], center=true);
}
}
}
@ -354,7 +354,7 @@ module cubetruss_joiner(w=1, vert=true, size, strut, clipthick, anchor=CENTER, s
// Vert Wall Clips
up(size/2) {
xflip_copy(offset=(w*(size-strut)+strut+0.02)/2) {
yflip_copy(offset=strut+$slop/2) {
yflip_copy(offset=strut+get_slop()/2) {
yrot(-90) {
back_half() {
prismoid([size/3.5, clipthick*2], [size/3.5-4*2*clipsize, 0.1], h=2*clipsize, anchor=BOT);
@ -393,15 +393,15 @@ module cubetruss_uclip(dual=true, size, strut, clipthick, anchor=CENTER, spin=0,
strut = is_undef(strut)? $cubetruss_strut_size : strut;
clipthick = is_undef(clipthick)? $cubetruss_clip_thickness : clipthick;
clipsize = 0.5;
s = [(dual?2:1)*strut+2*clipthick+$slop, strut+2*clipthick, size/3.5];
s = [(dual?2:1)*strut+2*clipthick+get_slop(), strut+2*clipthick, size/3.5];
attachable(anchor,spin,orient, size=s) {
union() {
difference() {
cube(s, center=true);
back(clipthick) cube([(dual?2:1)*strut+$slop, strut+2*clipthick, size+1], center=true);
back(clipthick) cube([(dual?2:1)*strut+get_slop(), strut+2*clipthick, size+1], center=true);
}
back((strut+$slop)/2) {
xflip_copy(offset=(dual?1:0.5)*strut+$slop/2) {
back((strut+get_slop())/2) {
xflip_copy(offset=(dual?1:0.5)*strut+get_slop()/2) {
yrot(-90) {
back_half() {
prismoid([size/3.5, clipthick*1.87], [size/3.5, 0.1], h=clipsize, anchor=BOT);

View file

@ -1127,6 +1127,7 @@ function _turtle_command(command, parm, parm2, state, index) =
// );
module debug_polygon(points, paths, vertices=true, edges=true, convexity=2, size=1)
{
no_children($children);
paths = is_undef(paths)? [count(points)] :
is_num(paths[0])? [paths] :
paths;

View file

@ -1202,6 +1202,7 @@ module _gear_tooth_profile(
center = false,
mod
) {
no_children($children);
pitch = is_undef(mod) ? pitch : pitch_value(mod);
r = _root_radius(pitch, teeth, clearance, interior);
fwd(r)

View file

@ -56,7 +56,7 @@
// }
module apply_folding_hinges_and_snaps(thick, foldangle=90, hinges=[], snaps=[], sockets=[], snaplen=5, snapdiam=5, hingegap=undef, layerheight=0.2)
{
hingegap = default(hingegap, layerheight)+2*$slop;
hingegap = default(hingegap, layerheight)+2*get_slop();
difference() {
children();
for (hinge = hinges) {
@ -111,7 +111,7 @@ module apply_folding_hinges_and_snaps(thick, foldangle=90, hinges=[], snaps=[],
// folding_hinge_mask(l=100, thick=3, foldangle=60);
module folding_hinge_mask(l, thick, layerheight=0.2, foldangle=90, hingegap=undef, anchor=CENTER, spin=0, orient=UP)
{
hingegap = default(hingegap, layerheight)+2*$slop;
hingegap = default(hingegap, layerheight)+2*get_slop();
size = [l, hingegap, 2*thick];
size2 = [l, hingegap+2*thick*tan(foldangle/2)];
attachable(anchor,spin,orient, size=size, size2=size2) {
@ -141,7 +141,7 @@ module folding_hinge_mask(l, thick, layerheight=0.2, foldangle=90, hingegap=unde
// snap_lock(thick=3, foldangle=60);
module snap_lock(thick, snaplen=5, snapdiam=5, layerheight=0.2, foldangle=90, hingegap=undef, anchor=CENTER, spin=0, orient=UP)
{
hingegap = default(hingegap, layerheight)+2*$slop;
hingegap = default(hingegap, layerheight)+2*get_slop();
snap_x = (snapdiam/2) / tan(foldangle/2) + (thick-2*layerheight)/tan(foldangle/2) + hingegap/2;
size = [snaplen, snapdiam, 2*thick];
attachable(anchor,spin,orient, size=size) {
@ -176,12 +176,12 @@ module snap_lock(thick, snaplen=5, snapdiam=5, layerheight=0.2, foldangle=90, hi
// snap_socket(thick=3, foldangle=60);
module snap_socket(thick, snaplen=5, snapdiam=5, layerheight=0.2, foldangle=90, hingegap=undef, anchor=CENTER, spin=0, orient=UP)
{
hingegap = default(hingegap, layerheight)+2*$slop;
hingegap = default(hingegap, layerheight)+2*get_slop();
snap_x = (snapdiam/2) / tan(foldangle/2) + (thick-2*layerheight)/tan(foldangle/2) + hingegap/2;
size = [snaplen, snapdiam, 2*thick];
attachable(anchor,spin,orient, size=size) {
fwd(snap_x) {
zrot_copies([0,180], r=snaplen+$slop) {
zrot_copies([0,180], r=snaplen+get_slop()) {
diff("divot")
cube([snaplen, snapdiam, snapdiam/2+thick], anchor=BOT) {
attach(TOP) xcyl(l=snaplen, d=snapdiam, $fn=16);

View file

@ -107,7 +107,7 @@ module half_joiner(h=20, w=10, l=10, a=30, screwsize=undef, guides=true, anchor=
cube([w+1, guide_width+1, h+1], anchor=FWD+BOT);
// Clear sides
xcopies(2*w*2/3-$slop*2) {
xcopies(2*w*2/3-get_slop()*2) {
cube([w, guide_width, h/3], center=true);
fwd(guide_width/2)
yrot_copies(n=2)
@ -119,7 +119,7 @@ module half_joiner(h=20, w=10, l=10, a=30, screwsize=undef, guides=true, anchor=
// Guide ridges.
if (guides == true) {
xcopies(w/3-$slop*2) {
xcopies(w/3-get_slop()*2) {
// Guide ridge.
fwd(0.05/2) {
scale([0.75, 1, 2]) yrot(45)
@ -325,7 +325,7 @@ module joiner_pair_clear(spacing=100, n=2, h=40, w=10, a=30, clearance=0, overla
// anchor = Translate so anchor point is at origin (0,0,0). See [anchor](attachments.scad#subsection-anchor). Default: `CENTER`
// spin = Rotate this many degrees around the Z axis after anchor. See [spin](attachments.scad#subsection-spin). Default: `0`
// orient = Vector to rotate top towards, after spin. See [orient](attachments.scad#subsection-orient). Default: `UP`
// $slop = Printer specific slop value to make parts fit more closely.
// get_slop() = Printer specific slop value to make parts fit more closely.
// Example(FlatSpin,VPD=200):
// joiner_pair(spacing=50, l=10);
// Examples:
@ -540,7 +540,7 @@ module dovetail(gender, width, height, slide, h, w, angle, slope, taper, back_wi
assert(count3<=1 || (radius==0 && chamfer==0), "Do not specify both chamfer and radius");
slope = is_def(slope) ? slope :
is_def(angle) ? 1/tan(angle) : 6;
extra_slop = gender == "female" ? 2*$slop : 0;
extra_slop = gender == "female" ? 2*get_slop() : 0;
width = w + extra_slop;
height = h + extra_slop;
back_width = u_add(back_width, extra_slop);

View file

@ -469,9 +469,9 @@ module nema34_stepper(h=75, shaft=12.7, shaft_len=32, anchor=TOP, spin=0, orient
module nema_mount_holes(size=17, depth=5, l=5, anchor=CENTER, spin=0, orient=UP)
{
motor_width = nema_motor_width(size);
plinth_diam = nema_motor_plinth_diam(size)+$slop;
plinth_diam = nema_motor_plinth_diam(size)+get_slop();
screw_spacing = nema_motor_screw_spacing(size);
screw_size = nema_motor_screw_size(size)+$slop;
screw_size = nema_motor_screw_size(size)+get_slop();
anchors = [
named_anchor("screw1", [+screw_spacing/2, +screw_spacing/2, depth/2]),

View file

@ -432,13 +432,13 @@ module partition_mask(l=100, w=100, h=100, cutsize=10, cutpath="jigsaw", gap=0,
cutsize = is_vector(cutsize)? point2d(cutsize) : [cutsize*2, cutsize];
path = _partition_cutpath(l, h, cutsize, cutpath, gap);
midpath = select(path,1,-2);
sizepath = concat([path[0]+[-$slop,0]], midpath, [last(path)+[$slop,0]], [[+(l/2+$slop), (w+$slop)*(inverse?-1:1)], [-(l/2+$slop), (w+$slop)*(inverse?-1:1)]]);
sizepath = concat([path[0]+[-get_slop(),0]], midpath, [last(path)+[get_slop(),0]], [[+(l/2+get_slop()), (w+get_slop())*(inverse?-1:1)], [-(l/2+get_slop()), (w+get_slop())*(inverse?-1:1)]]);
bnds = pointlist_bounds(sizepath);
fullpath = concat(path, [[last(path).x, w*(inverse?-1:1)], [path[0].x, w*(inverse?-1:1)]]);
attachable(anchor,spin,orient, size=point3d(bnds[1]-bnds[0],h)) {
linear_extrude(height=h, center=true, convexity=10) {
intersection() {
offset(delta=-$slop) polygon(fullpath);
offset(delta=-get_slop()) polygon(fullpath);
square([l, w*2], center=true);
}
}
@ -483,7 +483,7 @@ module partition_cut_mask(l=100, h=100, cutsize=10, cutpath="jigsaw", gap=0, anc
path = _partition_cutpath(l, h, cutsize, cutpath, gap);
attachable(anchor,spin,orient, size=[l,cutsize.y,h]) {
linear_extrude(height=h, center=true, convexity=10) {
stroke(path, width=max(0.1, $slop*2));
stroke(path, width=max(0.1, get_slop()*2));
}
children();
}

View file

@ -164,6 +164,7 @@ module torx_mask(size, l=5, center, anchor, spin=0, orient=UP) {
// Example(2D):
// torx_mask2d(size=30, $fa=1, $fs=1);
module torx_mask2d(size) {
no_children($children);
od = torx_diam(size);
id = _torx_inner_diam(size);
tip = _torx_tip_radius(size);
@ -360,7 +361,7 @@ module robertson_mask(size, extra=1, ang=2.5) {
Fmax = [0.038, 0.065, 0.075, 0.095, 0.100][size];
F = (Fmin + Fmax) / 2 * INCH;
h = T + extra;
Mslop=M+2*$slop;
Mslop=M+2*get_slop();
down(T) {
intersection(){
Mtop = Mslop + 2*adj_ang_to_opp(F+extra,ang);

View file

@ -41,16 +41,16 @@ module slider(l=30, w=10, h=10, base=10, wall=5, ang=30, anchor=BOTTOM, spin=0,
zrot(90)
down(base+h/2) {
// Base
cuboid([full_width, l, base-$slop], chamfer=2, edges=[FRONT,BACK], except_edges=BOT, anchor=BOTTOM);
cuboid([full_width, l, base-get_slop()], chamfer=2, edges=[FRONT,BACK], except_edges=BOT, anchor=BOTTOM);
// Wall
xflip_copy(offset=w/2+$slop) {
xflip_copy(offset=w/2+get_slop()) {
cuboid([wall, l, full_height], chamfer=2, edges=RIGHT, except_edges=BOT, anchor=BOTTOM+LEFT);
}
// Sliders
up(base+h/2) {
xflip_copy(offset=w/2+$slop+0.02) {
xflip_copy(offset=w/2+get_slop()+0.02) {
bev_h = h/2*tan(ang);
prismoid([h, l], [0, l-w], h=bev_h+0.01, orient=LEFT, anchor=BOT);
}

View file

@ -539,7 +539,7 @@ module acme_threaded_nut(
// anchor = Translate so anchor point is at origin (0,0,0). See [anchor](attachments.scad#subsection-anchor). Default: `CENTER`
// spin = Rotate this many degrees around the Z axis after anchor. See [spin](attachments.scad#subsection-spin). Default: `0`
// orient = Vector to rotate top towards, after spin. See [orient](attachments.scad#subsection-orient). Default: `UP`
// $slop = The printer-specific slop value, which adds clearance (`4*$slop`) to internal threads.p
// $slop = The printer-specific slop value, which adds clearance (`4*$slop`) to internal threads.
// Example(2D): The straight gray rectangle reveals the tapered threads.
// projection(cut=true) npt_threaded_rod(size=1/4, orient=BACK);
// right(.533*INCH/2) color("gray") rect([2,0.5946*INCH],anchor=LEFT);
@ -1075,7 +1075,7 @@ module generic_threaded_rod(
r2 = get_radius(d1=d2, d=d);
sides = quantup(segs(max(r1,r2)), starts);
rsc = internal? (1/cos(180/sides)) : 1;
islop = internal? 2*$slop : 0;
islop = internal? 2*get_slop() : 0;
_r1 = r1 * rsc + islop;
_r2 = r2 * rsc + islop;
threads = quantup(l/pitch+2,1); // Was quantup(1/pitch+2,2*starts);