Last active
June 26, 2024 13:35
-
-
Save chrisandreae/cc3f2524a47d4f0ec105d836bd6d4b3a to your computer and use it in GitHub Desktop.
Tilted Foot Adapter (OpenSCAD)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
count = 6; | |
tilt_angle = 10; | |
sprues = true; | |
module __Customizer_Limit__ () {} | |
$fn = 60; | |
leg_diameter = 11.849; | |
inner_diameter = 10.554; // measured top of foot on the model: assumption that it's the same | |
top_rim_height = 0.3; // how much does the top of the adapter protrude into the foot | |
foot_inset_height = 0.3; | |
minimum_thickness = 0.3; // how close a wedge does it come to at the thin end | |
tilt_height = sin(tilt_angle) * leg_diameter + minimum_thickness; | |
total_height = tilt_height + top_rim_height; | |
nut_depth = 4; | |
module foot() { | |
difference() { | |
union() { | |
// foot | |
translate([0, leg_diameter/2, -top_rim_height]) cylinder(d=inner_diameter, h=top_rim_height); | |
difference() { | |
// wedge | |
hull() { | |
// bottom | |
translate([0, leg_diameter/2, 0]) cylinder(d = leg_diameter, h=0.01); | |
// top | |
translate([0, 0, minimum_thickness]) | |
rotate([tilt_angle, 0, 0]) | |
translate([0, leg_diameter/2, 0]) | |
cylinder(d=leg_diameter, h=0.01); | |
} | |
// inset | |
inset_hyp_offset = (leg_diameter - inner_diameter) / 2; | |
inset_opp_offset = sin(tilt_angle) * inset_hyp_offset; | |
inset_adj_offset = cos(tilt_angle) * inset_hyp_offset; | |
translate([0, inset_adj_offset, minimum_thickness + inset_opp_offset + 0.011]) | |
rotate([tilt_angle, 0, 0]) | |
translate([0, inner_diameter/2, -foot_inset_height]) | |
cylinder(d=inner_diameter, h=foot_inset_height + 0.01); | |
} | |
} | |
} | |
} | |
if (count == 1) { | |
foot(); | |
} | |
else { | |
sep = 1; | |
spacing = sep + leg_diameter; | |
sprue_d = 1.5; | |
sprue_overlap = 0.2; | |
rows = ceil(count / 2); | |
even = count % 2 == 0; | |
// main sprue | |
if (sprues) { | |
translate([0, leg_diameter + sep + sprue_d/2, sprue_d/2]) | |
rotate([0,90,0]) cylinder(h = (rows - 1) * spacing, d=sprue_d); | |
} | |
for (row=[0:1:rows - 1]) { | |
translate([row * spacing, 0, 0]) { | |
foot(); | |
if(row < rows - 1 || even) { | |
translate([0, 2 * spacing + sprue_d, 0]) mirror([0,1,0]) foot(); | |
} | |
// pair sprue | |
if (sprues) { | |
sprue_l = sep * 2 + sprue_d + sprue_overlap * 2; | |
translate([0, leg_diameter + sprue_l - sprue_overlap, sprue_d / 2]) | |
rotate([90, 0, 0]) cylinder(h=sprue_l, d=sprue_d); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment