$fn = 100; head_top_inner_radius = 76; band_top_width = 5; band_thickness = 3; head_top_outer_radius = head_top_inner_radius + band_thickness; buffer=10; band_height = 127; head_side_inner_radius = 127; head_side_outer_radius = head_side_inner_radius + band_thickness; module hairband() { difference() { difference() { union() { difference() { cylinder(r=head_top_outer_radius, h=band_top_width, center=true); cylinder(r=head_top_inner_radius, h=band_top_width+buffer, center=true); } translate([head_side_outer_radius - head_top_outer_radius,0,0]) difference() { cylinder(r=head_side_outer_radius, h=band_top_width, center=true); cylinder(r=head_side_inner_radius, h=band_top_width+buffer, center=true); } translate([-(head_side_outer_radius - head_top_outer_radius),0,0]) difference() { cylinder(r=head_side_outer_radius, h=band_top_width, center=true); cylinder(r=head_side_inner_radius, h=band_top_width+buffer, center=true); } } difference() { translate([-(head_side_outer_radius - head_top_outer_radius),0,0]) cylinder(r=head_side_inner_radius, center=true, h=band_top_width+buffer); translate([-head_side_outer_radius, -0, 0]) cube([head_side_outer_radius*2, head_side_outer_radius*2, band_top_width+buffer*2], center=true); translate([0, head_side_outer_radius/2, 0]) cube([head_side_outer_radius*2, head_side_outer_radius, band_top_width+buffer*2], center=true); } difference() { translate([(head_side_outer_radius - head_top_outer_radius),0,0]) cylinder(r=head_side_inner_radius, center=true, h=band_top_width+buffer); translate([head_side_outer_radius, 0, 0]) cube([head_side_outer_radius*2, head_side_outer_radius*2, band_top_width+buffer*2], center=true); translate([0, head_side_outer_radius/2, 0]) cube([head_side_outer_radius*2, head_side_outer_radius, band_top_width+buffer*2], center=true); } translate([0, -band_height, 0]) cube([head_side_inner_radius*2, head_side_inner_radius, band_top_width+buffer*2], center=true); } difference() { cylinder(r=head_side_outer_radius*2+buffer, h=band_top_width+buffer, center=true); cylinder(r=head_top_outer_radius, center=true, h=band_top_width+buffer*3); intersection() { translate([head_side_outer_radius - head_top_outer_radius,0,0]) cylinder(r=head_side_outer_radius, h=band_top_width+buffer*3, center=true); translate([-head_top_outer_radius+buffer/2,-head_top_outer_radius,0]) cube([head_top_outer_radius+buffer,head_top_outer_radius*2,band_top_width+buffer*3], center=true); } intersection() { translate([-(head_side_outer_radius - head_top_outer_radius),0,0]) cylinder(r=head_side_outer_radius, h=band_top_width+buffer*3, center=true); translate([head_top_outer_radius+buffer,-head_top_outer_radius,0]) cube([head_top_outer_radius+buffer,head_top_outer_radius*2,band_top_width+buffer*3], center=true); } } } } hairband(); module ears() { translate([0, 0, - band_top_width / 2]) { rotate([90,0,30]) { translate([-0.2, 0, 1]) { linear_extrude(height=58.5) { square([band_thickness, band_top_width]); } } } rotate([90,0,-30]) { linear_extrude(height=57.5) { square([band_thickness, band_top_width]); } } translate([band_thickness/2, 0, 0]) cylinder(h=band_top_width, r=band_thickness/2); } } translate([-57, 17, 0]) { rotate([0, 0, 30]) { translate([head_top_outer_radius/2, head_top_outer_radius, 0]) ears(); } } mirror([200, 0, 0]) { translate([-57, 17, 0]) { rotate([0, 0, 30]) { translate([head_top_outer_radius/2, head_top_outer_radius, 0]) ears(); } } }