use ; use ; use ; thickness = 2.7; height = 5.5; epsilon = 0.001; //needs to be small but greater 0 so that the model doesn't break smoothing = true; module catear(){ ctrl_ear1 = [[49,96],[58,112],[63,137],[61.5,141]]; ctrl_ear2 = [[61.5+1.5*epsilon,141-4*epsilon],[60,145],[42.5,140.5],[18,123]]; shape_band = [[thickness/2,height/2-0.4], [thickness/2,-height/2+0.4], [thickness/2-0.4,-height/2], [-thickness/2+0.4,-height/2], [-thickness/2,-height/2+0.4], [-thickness/2,height/2-0.4], [-thickness/2+0.4,height/2], [thickness/2-0.4,height/2]]; bezier_extrude(ctrl = ctrl_ear1, shape = shape_band, sections = 32); bezier_extrude(ctrl = ctrl_ear2, shape = shape_band, sections = 32); //smoothing the corners between ears and headband if(smoothing){ //these values are approximations to intersections and tangents c1 = [18.3,123.21]; v1 = [18.33,123.2]; v2 = [18.35,123.25]; v3 = [18.27,123.22]; c2 = [48.75,95.56]; v4 = [48.85,95.35]; v5 = [49,96]; v6 = [48.65,95.8]; k = 4; //pick k such that 0.4/k < layer height for(i = [0 : k]){ linear_extrude(height-i*0.8/k, center = true, convexity = 10){ smoothing(v1,c1,v2,r=2.5,th=thickness/2-(k-i)*0.4/k); smoothing(v2,c1,v3,r=4,th=thickness/2-(k-i)*0.4/k); smoothing(v4,c2,v5,r=4,th=thickness/2-(k-i)*0.4/k); smoothing(v5,c2,v6,r=2.5,th=thickness/2-(k-i)*0.4/k); } } } } module catears(){ union(){ headband(thickness = thickness, height = height); catear(); mirror([1,0,0]) catear(); } } catears();