// The following should be editable within reason to adjust for container and phone size $fn=50; // number of facets to the cylinders - basically level of detail drink_rad = 46; // radius of drink container - allow some wiggle room phone_width = 80/2; // width of phone - allow some wiggle room phone_depth = 8; // depth of phone - allow some wiggle room // not intended to be changed holder_rad = drink_rad + 5; base_rad = holder_rad + 5; module cup_holder_base_shape() { // basic shape for cup holder union() { // lower base cylinder(h=2,r=base_rad,center=true); // upper base translate([0,0,2.99]) cylinder(r2=holder_rad,r1=base_rad,h=5,center=true); // holder translate([0,0,48.99]) difference() { cylinder(r=holder_rad,h=90,center=true); // cut to hollow out cup cylinder(r=drink_rad,h=91,center=true); } } } //cup_holder_base_shape(); module cup_holder_finished() { // cut features from basic cup holder shape difference() { cup_holder_base_shape(); // cut side slot for strap translate([0,drink_rad,54]) rotate([0,10,10]) cube([5,20,95],center=true); // cut other side slot for strap translate([0,-drink_rad,54]) rotate([0,-10,10]) cube([5,20,95],center=true); // cut bottom slot for strap translate([0,0,6.5]) rotate([90,0,13]) cylinder(r=2.75,h=120,center=true); // cut drainage holes translate([0,0,0]) cylinder(r=6,h=40,center=true); translate([20,5,0]) cylinder(r=4,h=40,center=true); translate([-20,-5,0]) cylinder(r=4,h=40,center=true); } } //cup_holder_finished(); module cylinder_cube(cr1=4,cr2=4,ch=5,cx=50,cy=10) { // makes a cube rounded on 4 sides // can be narrower at top (used this for the beveled section) // cr1 - bottom corner radius // cr2 - top corner radius // ch - height // cx - length // cy - width hull() { translate([cx-cr1,cy-cr1,0]) cylinder(r1=cr1,r2=cr2,h=ch,center=true); translate([cx-cr1,-cy+cr1,0]) cylinder(r1=cr1,r2=cr2,h=ch,center=true); translate([-cx+cr1,cy-cr1,0]) cylinder(r1=cr1,r2=cr2,h=ch,center=true); translate([-cx+cr1,-cy+cr1,0]) cylinder(r1=cr1,r2=cr2,h=ch,center=true); } } //cylinder_cube(); module phone_holder() { difference() { union() { //lower base cylinder_cube(cr1=6,cr2=6,ch=2,cx=phone_width+10,cy=phone_depth+10); // upper base translate([0,0,2.99]) cylinder_cube(cr1=6,cr2=2,ch=5,cx=phone_width+9,cy=phone_depth+9); //holder translate([0,0,34.99]) difference() { cylinder_cube(cr1=2,cr2=2,ch=61,cx=phone_width+5,cy=phone_depth+5); translate([1,0,.1]) cylinder_cube(cr1=3,cr2=3,ch=62,cx=phone_width,cy=phone_depth); } } // cut drainage hole translate([0,0,.1]) cylinder_cube(cr1=2,cr2=2,ch=30,cx=20,cy=3); } } //phone_holder(); module combo_holder() { // merge the two pieces union(){ rotate([0,0,-12]) cup_holder_finished(); translate([holder_rad + phone_width,0,0]) phone_holder(); } } combo_holder();