Skip to content

Instantly share code, notes, and snippets.

@chrisandreae
Last active June 26, 2024 13:35
Show Gist options
  • Save chrisandreae/cc3f2524a47d4f0ec105d836bd6d4b3a to your computer and use it in GitHub Desktop.
Save chrisandreae/cc3f2524a47d4f0ec105d836bd6d4b3a to your computer and use it in GitHub Desktop.
Tilted Foot Adapter (OpenSCAD)
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