separated catears into their own file, renamed dogear_headband to dogears, slightly changed dogear to fit new headband, removed old headband

This commit is contained in:
tessaK9 2026-03-12 13:08:21 +01:00
commit 2d143d6a56
6 changed files with 152 additions and 259 deletions

View file

@ -1,98 +1,35 @@
RAKE_DEPTH=1;
RAKE_WIDTH=1;
RAKE_STRETCH=1;
RAKE_CHAMFER=0.5;
use <bezierExtrusion.scad>;
module partial_ring(part, radius, thickness, height) {
rotate(180-180*part, [0, 0, 1])
rotate_extrude(angle=360*part, $fn = 128)
translate([radius, 0]){
polygon(points = [[thickness/2,height/2-0.5],
[thickness/2-0.5,height/2],
[-thickness/2+0.5,height/2],
[-thickness/2,height/2-0.5],
[-thickness/2,-height/2+0.5],
[-thickness/2+0.5,-height/2],
[thickness/2-0.5,-height/2],
[thickness/2,-height/2+0.5]]);
}
module headband(thickness, height){
rake_length = 2.5;
shape_band = [[thickness/2,height/2-0.5],
[thickness/2,-height/2+0.5],
[thickness/2-0.5,-height/2],
[-thickness/2+0.5,-height/2],
[-thickness/2,-height/2+0.5],
[-thickness/2,height/2-0.5],
[-thickness/2+0.5,height/2],
[thickness/2-0.5,height/2]];
shape_rake = [[0,-height/2],
[0,height/2],
[rake_length,height/2-2],
[rake_length,-height/2+2]];
ctrl_band = [[21,0],[77,56],[56,126],[0,126]];
ctrl_end = [[21,0],[20,-1],[18,-4],[17,-10]];
ctrl_rake = [[-52,86],[-40,139.5],[40,139.5],[52,86]];
fillet = function (t) (t < 0.75) ? 1 : sqrt(1-((4*t)-3)^2)/1.5 + 0.33;
rake = function (t) (-cos(64 * 360 * t) > 0.33) ? 1 : 0.1;
union(){
bezier_extrude(ctrl = ctrl_band, shape = shape_band, sections = 128);
mirror([1,0,0]) bezier_extrude(ctrl = ctrl_band, shape = shape_band, sections = 128);
bezier_extrude(ctrl = ctrl_end, shape = shape_band, mod_x = fillet, sections = 16);
mirror([1,0,0]) bezier_extrude(ctrl = ctrl_end, shape = shape_band, mod_x = fillet, sections = 16);
bezier_extrude(ctrl = ctrl_rake, shape = shape_rake, mod_x = rake, sections = 512);
}
}
module headband(size, height, thickness, part, stretch_len, tip_len, tip_bend, rake_depth = RAKE_DEPTH, rake_width = RAKE_WIDTH, rake_stretch = RAKE_STRETCH, rake_chamfer = RAKE_CHAMFER, with_rake=true) {
union() {
union() {
color("purple")
partial_ring(part, radius=size, thickness=thickness, height=height);
rotate( 90-180*part, [0, 0, 1])
translate([stretch_len/2, size, 0]) {
color("orange"){
rotate(90,[0,1,0]){
rotate(90, [0,0,1]){
linear_extrude(stretch_len, center = true, convexity = 10){
polygon(points = [[thickness/2,height/2-0.5],
[thickness/2-0.5,height/2],
[-thickness/2+0.5,height/2],
[-thickness/2,height/2-0.5],
[-thickness/2,-height/2+0.5],
[-thickness/2+0.5,-height/2],
[thickness/2-0.5,-height/2],
[thickness/2,-height/2+0.5]]);
}
}
}
}
color("purple") translate([stretch_len/2, tip_bend, 0])
rotate(90+180*tip_len, [0, 0, 1])
partial_ring(
part=tip_len,
radius=tip_bend,
thickness=thickness,
height=height
);
}
rotate(-90+180*part, [0, 0, 1])
translate([stretch_len/2, -size, 0]) {
color("orange"){
rotate(90,[0,1,0]){
rotate(90, [0,0,1]){
linear_extrude(stretch_len, center = true, convexity = 10){
polygon(points = [[thickness/2,height/2-0.5],
[thickness/2-0.5,height/2],
[-thickness/2+0.5,height/2],
[-thickness/2,height/2-0.5],
[-thickness/2,-height/2+0.5],
[-thickness/2+0.5,-height/2],
[thickness/2-0.5,-height/2],
[thickness/2,-height/2+0.5]]);
}
}
}
}
color("purple")
scale([1, -1, 1])
translate([stretch_len/2, tip_bend, 0])
rotate(90+180*tip_len, [0, 0, 1])
partial_ring(
part=tip_len,
radius=tip_bend,
thickness=thickness,
height=height
);
}
}
if (with_rake) for (i=[-size/2:size/2]) {
rotate(i*2-rake_width/2, [0, 0, 1])
intersection() {
scale([1, 1, rake_stretch/(rake_depth/height)])
translate([0, rake_width/2, 0])
rotate_extrude(angle=rake_width)
translate([rake_depth/2-size+thickness/2, 0, 0])
scale([1, 0.5, 1])
circle(r=rake_depth, $fn=3);
translate([rake_depth/2-size+thickness/2-rake_chamfer, 0, 0])
color("red")
cube([2*rake_depth, rake_width, height], center=true);
}
}
}
}
headband(thickness = 2.5, height = 5.5);