diff --git a/pressfit_headband.scad b/pressfit_headband.scad new file mode 100644 index 0000000..2731c7a --- /dev/null +++ b/pressfit_headband.scad @@ -0,0 +1,95 @@ +$fn=360; + +module inserticle() { + cube([4.6, 7.4, 5.4], center=true); +} + +module testblock_inserticle() { + union() { + translate([0, 0, 5.4/2]) inserticle(); + translate([0, 0, -5]) cube([15, 12, 10], center=true); + } +} + +module testblock_recepticle() { + rotate(180, [0, 1, 0]) difference() { + translate([0, 0, 5]) cube([15, 12, 10], center=true); + translate([0, 0, 5.4/2]) inserticle(); + } +} + +module partial_ring(part, radius, thickness, height) { + rotate(180-180*part, [0, 0, 1]) + rotate_extrude(angle=360*part) + translate([radius, 0]) + square([thickness, height], center=true); +} + +module headband(size=60, height=4.6, thickness=3, part=0.7, stretch_len=40, tip_len=0.1, tip_bend=20, rake_depth=1.5, rake_width=0.5, rake_stretch=2) { + 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") cube([stretch_len, thickness, height], center=true); + 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") cube([stretch_len, thickness, height], center=true); + 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 + ); + } + for (i=[-size/2:size/2]) { + rotate(i*2-rake_width/2, [0, 0, 1]) intersection() { + scale([1, 1, rake_stretch/(rake_depth/height)]) + 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, 0, 0]) + color("red") + cube([4*rake_depth, 4*rake_depth, height], center=true); + } + }; + }; +} + +module pressfit_headband(size=60, height=4.6, thickness=3, part=0.7, stretch_len=40, tip_len=0.1, tip_bend=20, rake_depth=1.5, rake_width=0.5, rake_stretch=2) { + union() { + color("pink") { $a=48; + rotate( $a, [0, 0, 1]) { + translate([-size-4, 0,]) rotate(90, [0, 1, 0]) inserticle(); + translate([-size-3, 0,]) rotate(90, [0, 1, 0]) inserticle(); + } + rotate(-$a, [0, 0, 1]) { + translate([-size-4, 0,]) rotate(90, [0, 1, 0]) inserticle(); + translate([-size-3, 0,]) rotate(90, [0, 1, 0]) inserticle(); + } + } + headband( + size=size, + height=height, + thickness=thickness, + part=part, + stretch_len=stretch_len, + tip_len=tip_len, + tip_bend=tip_bend, + rake_depth=rake_depth, + rake_width=rake_width, + rake_stretch=rake_stretch + ); + }; +} + +pressfit_headband();