attachability for torx, roberson, screw_head

This commit is contained in:
Adrian Mariano 2023-06-18 20:20:01 -04:00
parent 74fca586d7
commit 391a7078b6
2 changed files with 102 additions and 83 deletions

View file

@ -168,7 +168,7 @@ function hex_drive_mask(size,length,l,h,height,anchor,spin,orient) = no_function
// See Also: phillips_mask(), hex_drive_mask(), torx_mask(), phillips_depth(), phillips_diam(), robertson_mask() // See Also: phillips_mask(), hex_drive_mask(), torx_mask(), phillips_depth(), phillips_diam(), robertson_mask()
// Usage: // Usage:
// torx_mask(size, l, [center]) [ATTACHMENTS]; // torx_mask(size, l, [center]) [ATTACHMENTS];
// Description: Creates a torx bit tip. // Description: Creates a torx bit tip. The anchors are located on the circumscribing cylinder. See {{torx_info()}} for allowed sizes.
// Arguments: // Arguments:
// size = Torx size. // size = Torx size.
// l = Length of bit. // l = Length of bit.
@ -191,7 +191,6 @@ module torx_mask(size, l=5, center, anchor, spin=0, orient=UP) {
} }
// Module: torx_mask2d() // Module: torx_mask2d()
// Synopsis: Creates the 2D cross section for a torx drive recess. // Synopsis: Creates the 2D cross section for a torx drive recess.
// SynTags: Geom // SynTags: Geom
@ -199,13 +198,12 @@ module torx_mask(size, l=5, center, anchor, spin=0, orient=UP) {
// See Also: phillips_mask(), hex_drive_mask(), torx_mask(), phillips_depth(), phillips_diam(), torx_info(), robertson_mask() // See Also: phillips_mask(), hex_drive_mask(), torx_mask(), phillips_depth(), phillips_diam(), torx_info(), robertson_mask()
// Usage: // Usage:
// torx_mask2d(size); // torx_mask2d(size);
// Description: Creates a torx bit 2D profile. // Description: Creates a torx bit 2D profile. The anchors are located on the circumscribing circle. See {{torx_info()}} for allowed sizes.
// Arguments: // Arguments:
// size = Torx size. // size = Torx size.
// Example(2D): // Example(2D):
// torx_mask2d(size=30, $fa=1, $fs=1); // torx_mask2d(size=30, $fa=1, $fs=1);
module torx_mask2d(size) { module torx_mask2d(size,anchor=CENTER,spin) {
no_children($children);
info = torx_info(size); info = torx_info(size);
od = info[0]; od = info[0];
id = info[1]; id = info[1];
@ -213,6 +211,7 @@ module torx_mask2d(size) {
rounding = info[4]; rounding = info[4];
base = od - 2*tip; base = od - 2*tip;
$fn = quantup(segs(od/2),12); $fn = quantup(segs(od/2),12);
attachable(anchor,spin,two_d=true,d=od){
difference() { difference() {
union() { union() {
circle(d=base); circle(d=base);
@ -234,6 +233,8 @@ module torx_mask2d(size) {
} }
} }
} }
children();
}
} }
@ -251,6 +252,10 @@ module torx_mask2d(size) {
// - Drive Hole Depth // - Drive Hole Depth
// - External Tip Rounding Radius // - External Tip Rounding Radius
// - Inner Rounding Radius // - Inner Rounding Radius
// .
// The allowed torx sizes are:
// 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 27, 30, 40, 45, 50, 55,
// 60, 70, 80, 90, 100.
// Arguments: // Arguments:
// size = Torx size. // size = Torx size.
function torx_info(size) = function torx_info(size) =
@ -333,6 +338,11 @@ function torx_depth(size) = torx_info(size)[2];
// ang = taper angle of each face. Default: 2.5 // ang = taper angle of each face. Default: 2.5
// --- // ---
// $slop = enlarge recess by this twice amount. Default: 0 // $slop = enlarge recess by this twice amount. Default: 0
// anchor = Translate so anchor point is at origin (0,0,0). See [anchor](attachments.scad#subsection-anchor). Default: TOP
// 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`
// Side Effects:
// Sets tag to "remove" if no tag is set.
// Example: // Example:
// robertson_mask(size=2); // robertson_mask(size=2);
// Example: // Example:
@ -340,7 +350,7 @@ function torx_depth(size) = torx_info(size)[2];
// cyl(d1=2, d2=8, h=4, anchor=TOP); // cyl(d1=2, d2=8, h=4, anchor=TOP);
// robertson_mask(size=2); // robertson_mask(size=2);
// } // }
module robertson_mask(size, extra=1, ang=2.5) { module robertson_mask(size, extra=1, ang=2.5,anchor=TOP,spin,orient) {
dummy=assert(is_int(size) && size>=0 && size<=4); dummy=assert(is_int(size) && size>=0 && size<=4);
Mmin = [0.0696, 0.0900, 0.1110, 0.1315, 0.1895][size]; Mmin = [0.0696, 0.0900, 0.1110, 0.1315, 0.1895][size];
Mmax = [0.0710, 0.0910, 0.1126, 0.1330, 0.1910][size]; Mmax = [0.0710, 0.0910, 0.1126, 0.1330, 0.1910][size];
@ -353,13 +363,17 @@ module robertson_mask(size, extra=1, ang=2.5) {
F = (Fmin + Fmax) / 2 * INCH; F = (Fmin + Fmax) / 2 * INCH;
h = T + extra; h = T + extra;
Mslop=M+2*get_slop(); Mslop=M+2*get_slop();
down(T) {
intersection(){
Mtop = Mslop + 2*adj_ang_to_opp(F+extra,ang); Mtop = Mslop + 2*adj_ang_to_opp(F+extra,ang);
Mbot = Mslop - 2*adj_ang_to_opp(T-F,ang); Mbot = Mslop - 2*adj_ang_to_opp(T-F,ang);
anchors = [named_anchor("standard",[0,0,T-h/2], UP, 0)];
default_tag("remove")
attachable(anchor,spin,orient,size=[Mbot,Mbot,T],size2=[Mtop,Mtop],anchors=anchors){
down(T/2)
intersection(){
prismoid([Mbot,Mbot],[Mtop,Mtop],h=h,anchor=BOT); prismoid([Mbot,Mbot],[Mtop,Mtop],h=h,anchor=BOT);
cyl(d1=0, d2=Mslop/(T-F)*sqrt(2)*h, h=h, anchor=BOT); cyl(d1=0, d2=Mslop/(T-F)*sqrt(2)*h, h=h, anchor=BOT);
} }
children();
} }
} }

View file

@ -1442,6 +1442,8 @@ module screw_head(screw_info,details=false, counterbore=0,flat_height,teardrop=f
counterbore = counterbore_temp==0 && head!="flat" ? counterbore_temp : counterbore_temp + 0.01; counterbore = counterbore_temp==0 && head!="flat" ? counterbore_temp : counterbore_temp + 0.01;
adj_diam = struct_val(screw_info, "diameter") + head_oversize; // Used for determining chamfers and ribbing adj_diam = struct_val(screw_info, "diameter") + head_oversize; // Used for determining chamfers and ribbing
attachable(){
union(){
if (head!="flat" && counterbore>0){ if (head!="flat" && counterbore>0){
d = head=="hex"? 2*head_size/sqrt(3) : head_size; d = head=="hex"? 2*head_size/sqrt(3) : head_size;
if (teardrop) if (teardrop)
@ -1500,6 +1502,9 @@ module screw_head(screw_info,details=false, counterbore=0,flat_height,teardrop=f
if (head=="hex") if (head=="hex")
up(head_height/2)_nutshape(head_size,head_height,"hex",false,true); up(head_height/2)_nutshape(head_size,head_height,"hex",false,true);
} }
}
union(){};
}
} }