diff --git a/catear_headband.scad b/catear_headband.scad index 093b749..a2fe08e 100644 --- a/catear_headband.scad +++ b/catear_headband.scad @@ -1,6 +1,7 @@ include ; use ; +use ; module catear(height, thickness, fractal=0, side_len=30, bend_factor=0.5, stretch_factor=1.2, debug=false, chamfer=CHAMFER, chamfer_shape=CHAMFER_SHAPE) { $A=[0, side_len/2]; @@ -69,7 +70,7 @@ module catear(height, thickness, fractal=0, side_len=30, bend_factor=0.5, stretc } } -module catear_headband(debug=DEBUG, size=SIZE, height=HEIGHT, thickness=THICKNESS, part=PART, stretch_len=STRETCH_LEN, tip_len=TIP_LEN, tip_bend=TIP_BEND, ear_scale=1.5, ear_bend_factor=0.15, ear_stretch_factor=1.2, ear_angle=42, chamfer=CHAMFER, chamfer_shape=CHAMFER_SHAPE) { +module catear_headband(debug=DEBUG, size=SIZE, height=HEIGHT, thickness=THICKNESS, part=PART, stretch_len=STRETCH_LEN, tip_len=TIP_LEN, tip_bend=TIP_BEND, ear_scale=1.5, ear_bend_factor=0.15, ear_stretch_factor=1.2, ear_angle=42, chamfer=CHAMFER, chamfer_shape=CHAMFER_SHAPE, with_rake=true) { $a=size/2*ear_scale; $delta=2*(acos($a/(size*2))-90); @@ -107,7 +108,8 @@ module catear_headband(debug=DEBUG, size=SIZE, height=HEIGHT, thickness=THICKNES part=part, stretch_len=stretch_len, tip_len=tip_len, - tip_bend=tip_bend + tip_bend=tip_bend, + with_rake=with_rake ); }; } diff --git a/catear_pedestal.scad b/catear_pedestal.scad new file mode 100644 index 0000000..ad0bf7f --- /dev/null +++ b/catear_pedestal.scad @@ -0,0 +1,49 @@ +include + +use + +SCALE_FACTOR=SIZE/9; + +echo("scale factor: ", SCALE_FACTOR); +echo("bottom diameter: ", SIZE/SCALE_FACTOR); + + +difference() { + union() + for (i=[-1,1]) + translate([i*2, 0, 0]) + rotate(i*90, [0, 1, 0]) + scale(1/SCALE_FACTOR) + union() { + translate([0, 0, SIZE+20+60]) + rotate(90, [0, 1, 0]) + scale(1.6) + catear_headband(thickness=5, with_rake=false); + translate([0, 0, 20]) + cylinder(h=10, r=SIZE, $fn=360); + cylinder(h=20, d=SIZE, $fn=360); + } + translate([0, 0, -SIZE*(1/SCALE_FACTOR)*5]) + cube(SIZE*10*(1/SCALE_FACTOR), center=true); +} + +/* +scale(1/SCALE_FACTOR) { +translate([0, 0, 30]) +scale([1, 1, -1]) +difference() { + union() { + translate([0, 0, 20]) + cylinder(h=10, r=SIZE, $fn=360); + cylinder(h=20, d=SIZE, $fn=360); + } + translate([0, 0, SIZE+20+60]) + rotate(90, [0, 1, 0]) + scale(1.6) + catear_headband(thickness=5, with_rake=false); +} +scale(1.6) + translate([0, 0, HEIGHT/2]) + catear_headband(thickness=5, with_rake=false); +} +*/ \ No newline at end of file diff --git a/headband.scad b/headband.scad index 6d3302d..07e02b2 100644 --- a/headband.scad +++ b/headband.scad @@ -1,5 +1,5 @@ -include include +use module partial_ring(part, radius, thickness, height) { rotate(180-180*part, [0, 0, 1]) @@ -8,7 +8,7 @@ module partial_ring(part, radius, thickness, height) { square([thickness, height], center=true); } -module headband(debug=DEBUG, 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, rake_chamfer=RAKE_CHAMFER, chamfer=CHAMFER, chamfer_shape=CHAMFER_SHAPE) { +module headband(debug=DEBUG, 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, rake_chamfer=RAKE_CHAMFER, chamfer=CHAMFER, chamfer_shape=CHAMFER_SHAPE, with_rake=true) { union() { chamfer(size=chamfer, child_h=height, child_bot=-height/2, shape=chamfer_shape) union() { color("purple") @@ -41,7 +41,7 @@ module headband(debug=DEBUG, size=SIZE, height=HEIGHT, thickness=THICKNESS, part ); } } - for (i=[-size/2:size/2]) { + 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)]) diff --git a/pressfit_horns.scad b/pressfit_horns.scad new file mode 100644 index 0000000..a3d4db7 --- /dev/null +++ b/pressfit_horns.scad @@ -0,0 +1,67 @@ +include ; + +use ; + +$fn=360; +A=30; +N=4; +R=45; +LENGTH=100; +TWIST=720; +STEPS=360; +SLICES=max(TWIST, STEPS, LENGTH); +SHEIGHT=LENGTH/STEPS; +BEND_X_FACTOR=0.5; +BEND_Y_FACTOR=1; + +COLORS=[ +"#f00", +"#f70", +"#7f0", +"#0f0", +"#0f7", +"#07f", +"#00f", +"#70f", +"#f07" +]; + +difference() { + union() for (step=[1:STEPS]) { + a = A*(1-(step-1)/STEPS); + b = A*(1-step/STEPS); + r = TWIST/STEPS*(step-1); + sh_xy = 0; + sh_yx = 0; + sh_xz = 1/STEPS*step*BEND_X_FACTOR; + sh_yz = 1/STEPS*step*BEND_Y_FACTOR; + sh_zx = 0; + sh_zy = 0; + t_x = sh_xz*SHEIGHT*(step-1)*0.5; + t_y = sh_yz*SHEIGHT*(step-1)*0.5; + t_z = LENGTH/STEPS*(step-1); + sc_x = 1; + sc_y = 1; + sc_z = 1; + mm = [ + [sc_x, sh_xy, sh_xz, t_x], + [sh_yx, sc_y, sh_yz, t_y], + [sh_zx, sh_zy, sc_z, t_z], + ]; + echo(a, b, b/a, r, mm); + multmatrix(mm) + color(COLORS[(step-1)%9]) + linear_extrude( + SHEIGHT, + center=false, + twist=TWIST/STEPS, + scale=b/a, + slices=SLICES/STEPS + ) rotate(R-r) + circle(d=a, $fn=N); + } + translate([0, 0, INSERTICLE_Z/2]) + inserticle(); +} + +echo("twist angle: ", TWIST/STEPS); \ No newline at end of file