catears-v2/scad/base/dogear.scad

97 lines
No EOL
3 KiB
OpenSCAD

use <hinge.scad>;
include <bezier_extrusion.scad>;
//these values were mostly determined by manually finetuning them
t = 5;
a = 41.186; //arctan(7/8)
mod = function (t) 12*t^2*(1-t)^2+1;
ctrl_0 = angl_to_ctrl([-30.5,0]+t*[1,0], 180, [-30.5,0]+t*[-cos(a-25),-sin(a-25)], a-25, mod = 0.5);
ctrl_1 = angl_to_ctrl([-23.6,7]+t*[1,0], 180, [-23.6,7]+t*[-cos(a+180), -sin(a+180)], a+180);
ctrl_2 = angl_to_ctrl([-8,37]+t*[1,0], 180, [-8.5,37]+t*[0,-1], 75, mod = 0.5);
ctrl_3 = angl_to_ctrl([-7.3,44]+t*[1,0], 180, [-7.3,44]+t*[0,1], 270, mod = 0.5);
rectangle_r = [[1.5,0],[1.5,6],[0,6],[0,0]];
rectangle_l = [[0,0],[0,6],[-1.5,6],[-1.5,0]];
//a1, a2, a3, a4 are the four angles of the pairs of hinges on the ear from bottom to tip
module dogearAllOptions(a1, a2, a3, a4){
translate([25,0,0]){
union(){
bezier_extrude(ctrl = ctrl_0, shape = rectangle_r, sections = 8);
bezier_extrude(ctrl = ctrl_1, shape = rectangle_l, mod_x = mod, sections = 8);
bezier_extrude(ctrl = ctrl_2, shape = rectangle_r, mod_x = mod, sections = 8);
bezier_extrude(ctrl = ctrl_3, shape = rectangle_l, mod_x = mod, sections = 8);
//translate([-8,37,0]) cube([10,10,20]);
linear_extrude(height = 6, center = false, convexity = 10){
polygon(points = [[-33,0],[-25,0],[-25,7]]);
}
hinge(a1, len_before = 25, len_after = 5.5);
translate([12.5,0,0]) hinge(a2, len_after = 5.5);
translate([25,0,0]) hinge(a3, len_after = 5.5);
translate([0,37,0]) hinge(a1, len_before = 8, len_after = 5.5);
translate([12.5,37,0]) hinge(a2, len_after = 5.5);
translate([25,37,0]) hinge(a3, len_after = 8);
translate([34,0,0]){
cube([7,18.5,6]);
translate([3.5,18.5,0]) cylinder(h = 6, r = 3.5, center = false, $fn=32);
}
translate([40,40.5,0]) cylinder(h = 6, r = 3.5, center = false, $fn=32);
translate([53,0,0]) cube([24,7,6], center = false);
translate([40,11,0]){
rotate(-45,[0,0,1]){
hinge(a4, len_before = 7, len_after = 7);
translate([14.1,3.5,0]){
cylinder(h = 6, r = 3.5, center = false, $fn=32);
}
translate([0,17.3,0]) hinge(a4, len_before = 21, len_after = 24.6);
translate([31.4,20.8,0]) cylinder(h = 6, r = 3.5, center = false, $fn=32);
}
}
}
}
}
module dogear(flopness){
a1 = 30;
a2 = 30;
a3 = 30;
a4 = 45;
if(flopness == "vvvflop"){
a1 = 45;
a2 = 45;
a3 = 45;
dogearAllOptions(a1, a2, a3, a4);
}
else{
if(flopness == "vvflop"){
a1 = 40;
a2 = 40;
a3 = 40;
dogearAllOptions(a1, a2, a3, a4);
}
else{
if(flopness == "vflop"){
a1 = 35;
a2 = 35;
a3 = 35;
dogearAllOptions(a1, a2, a3, a4);
}
else{
if(flopness == "lflop"){
a1 = 15;
a2 = 15;
a3 = 15;
a4 = 30;
dogearAllOptions(a1, a2, a3, a4);
}
else{
dogearAllOptions(a1, a2, a3, a4);
}
}
}
}
}