Create band design

This commit is contained in:
2025-02-02 18:03:43 -08:00
commit 9a32816461
2 changed files with 101 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*.3mf

100
band.scad Normal file
View File

@@ -0,0 +1,100 @@
include <BOSL2/std.scad>;
$fn = $preview ? 32 : 128;
band_arc_radius = 65;
thickness = 3;
height = 10;
band_arc = 240;
leg_length = 27;
edge_radius = 0.5;
punch_angles = [-95, -70, -45, 0, 45, 70, 95];
tooth_width=2;
tooth_height=2.5;
teeth_max_angle = 110;
teeth_spacing = 2.5;
punch_clearance = 5;
module tooth() {
cyl(
d1=tooth_width,
d2=edge_radius*2,
h=tooth_height,
rounding2=edge_radius,
anchor=BOT,
orient=FWD
);
}
module punch() {
region = right(
1,
p=rect(
[height/2+1, height/2],
rounding=height/4,
anchor=LEFT
)
);
linear_sweep(
[region, xflip(region)],
length=thickness+2,
center=true,
orient=BACK
);
}
module band() {
region = right(
band_arc_radius,
p=rect(
[thickness, height],
rounding=edge_radius
)
);
rotate_sweep(
region,
angle=band_arc,
spin=-band_arc/2+90
);
}
module leg() {
rotate(-band_arc/2+90)
right(band_arc_radius)
cuboid(
[thickness, leg_length, height],
rounding=edge_radius,
edges="Y",
anchor=BACK
)
attach(FWD)
xcyl(
thickness,
d=height,
rounding=edge_radius
);
}
difference() {
union() {
band();
leg();
xflip() leg();
}
for(a=punch_angles) {
zrot(a) back(band_arc_radius) punch();
}
}
for(a=[-teeth_max_angle:teeth_spacing:teeth_max_angle]) {
if(all([
for (b=punch_angles)
abs(b - a) > punch_clearance
])) {
zrot(a) back(band_arc_radius-thickness/2+0.1) {
up(height/4) tooth();
down(height/4) tooth();
};
}
}