Hand tools and fabrication machines | ||||||
|
This is a project made as an entry for the Make Magazine "April Fool's 3D Printing Contest"
As liquid is poured into the cup the liquid will flow through drain holes into the lower cup at the foot of the goblet. Drinking the liquid from the foot of the goblet is an uncomfortable task unless you know that there is an internal channel running from bottom of the foot to one of the decorative dimples at the top of the cup. This internal channel can be used as a straw to drink the liquid from the foot of the goblet. The straw like feature can be used with your mouth on the rim of the cup in the same position as if drinking from the cup normally.
The cup needs to be printed with greater than normal shell thickness and top/bottom thickness to ensure the internal straw is air tight (some over-extrusion also helps). If the straw isn't air tight you will need to suck like an Electrolux to get the liquid out.
Dextruder = .4;
Dpipe=2;
t=Dpipe+Dextruder*9;
OD=69;
H=140;
fnpipe=10;
cup_shapen=30;
dia=OD;
r2=dia/2;
r1=r2*3/2;
length=r1*2;
render() cup_model();
module cup_model()
{
difference()
{
difference()
{
cup();
drain_tubes();
}
// This is for taking a cross section
//translate([0,-500,0])cube(1000);
tubes();
}
}
module cup()
{
difference ()
{
union()
{
//////////////////////////
// Bottom of bottom cup //
//////////////////////////
cylinder(d=OD,h=t/2);
/////////////////////
// Make bottom Cup //
/////////////////////
rotate_extrude ()
{
hull()
{
translate ([OD/2,t/4]) circle (d=t/2,$fn=25);
translate ([OD/2,30]) circle (d=t/2,$fn=25);
}
}
///////////////////////////////////
// Make flair ar bottom of stem //
///////////////////////////////////
translate([0,0,t/2])
linear_extrude(10,scale=.1)circle(d=OD/2);
///////////////
// Make Stem //
///////////////
Dstem=9.0;
linear_extrude (H/2,scale=1,twist=280)
{
translate([4,0])circle (d=Dstem,$fn=20);
translate([-4,0])circle (d=Dstem,$fn=20);
translate([0,4])circle (d=Dstem,$fn=20);
translate([0,-4])circle (d=Dstem,$fn=20);
}
///////////////////////////////////
// Sphere at bottom of upper cup //
///////////////////////////////////
translate([0,0,75])
sphere(d=25);
///////////////////////
// Upper cup Outside //
///////////////////////
translate ([0,0,H])
cup_shape(delta=t/2,dia=OD,n=cup_shapen);
}
//////////////////////////
// Holes in Bottom Cup //
//////////////////////////
for (a=[0:15:360])
{
rotate(a)
{
translate([OD/2,0,21+5])
rotate([0,90,0])
cylinder(d=6,h=10,center=true,$fn=25);
}
}
////////////////////////////////
// Cutout inside of upper cup //
////////////////////////////////
translate ([0,0,H+1])
cup_shape(delta=-t/2,dia=OD,n=cup_shapen);
///////////////////
// Make Dimples //
///////////////////
Ddimple=6;
for (a=[0:30:360])
{
rotate(a)
{
translate([OD/2+Ddimple+.0,0,H-9]) sphere(Ddimple);
}
}
}
///////////////////
// Make Cup Rim //
///////////////////
translate([0,0,H])
rotate_extrude()
{
$fs=1;
$fa=1;
translate([OD/2+1,0])circle(d=t*1.1,$fs=.1);
}
}
/////////////////////////////////////////////////////////////////////////////////
function yyy(xx,r1,r2)= sqrt(r2*r2 * (1-(xx*xx)/(r1*r1)) / (1/( 1-0.6/r1*xx)) );
module cup_shape(delta=0.0,dia=6,n=25)
{
$fn=n;
step=(r1*2)/n;
width=2*r2*cos(45);
hull()
{
rotate([0,180,0])
translate ([0,0,r1/3])
rotate_extrude()
for (xx=[-r1/3:step:r1])
{
hull()
polygon(points=[
[0,xx],
[0,xx+step],
[yyy(xx+step,r1,r2)+delta,xx+step],
[yyy(xx,r1,r2)+delta,xx]
]);
}
}
}
module tubes()
{
dia=OD;
r2=dia/2;
r1=r2*3/2;
length=r1*2;
r2=dia/2;
r1=r2*3/2;
echo(r1,r2);
length=r1*2;
step=(r1*2)/n;
///////////////////////////////////
// Make straw tubes //
///////////////////////////////////
// starting at the bottom of the cup
tube_points = [
[0,18,t ],
[0,18,t/2],
[0,0 ,t/2],
[0,0 ,H-r1*4/3-5]];
for (i=[1:len(tube_points)-1])
{
hull()
{
translate(tube_points[i-1])sphere(d=Dpipe,$fn=fnpipe);
translate(tube_points[i] )sphere(d=Dpipe,$fn=fnpipe);
}
}
// Followin the arc up
step = 2;
mini = 4;
maxi = floor(r1*4/3-t)-10;
fudge=.6;
for (i=[mini:step:maxi-step])
{
hull()
{
translate([0, yyy(r1-i-step,r1,r2),H-r1*4/3+i+step+fudge])
sphere(d=Dpipe,$fn=fnpipe);
translate([0, yyy(r1-i ,r1,r2),H-r1*4/3+i+fudge ])
sphere(d=Dpipe,$fn=fnpipe);
}
}
minz = H-r1*4/3+mini+fudge;
minr = yyy(r1-mini ,r1,r2);
maxz = H-r1*4/3+maxi+fudge;
maxr = yyy(r1-maxi ,r1,r2);
hull()
{
translate([0, minr,minz]) sphere(d=Dpipe,$fn=fnpipe);
translate(tube_points[3]) sphere(d=Dpipe,$fn=fnpipe);
}
ang=0;
rotate(ang)
{
for (i=[maxi:step:maxi+7])
{
hull()
{
translate([0, yyy(r1-i-step,r1,r2),H-r1*4/3+i+step])
sphere(d=Dpipe,$fn=fnpipe);
translate([0, yyy(r1-i ,r1,r2),H-r1*4/3+i ])
sphere(d=Dpipe,$fn=fnpipe);
}
}
hull()
{
translate([0, yyy(r1-(maxi+6)-step,r1,r2),H-r1*4/3+maxi+6+step])
sphere(d=Dpipe,$fn=fnpipe);
translate([0,t+ yyy(r1-(maxi+6)-step,r1,r2),H-r1*4/3+maxi+6+step])
sphere(d=Dpipe,$fn=fnpipe);
}
}
///////////////////////////////////
// trick vent hole tubes //
///////////////////////////////////
//translate([0,0,maxz])
//rotate_extrude()
//{
// translate([maxr,0])circle(d=Dpipe,$fn=fnpipe);
//}
}
module drain_tubes()
{
///////////////////////////////////
// Make drain / fountain tubes //
///////////////////////////////////
drain_points = [
[0,0 ,H-r1 ],
[0,0 ,79+11],
[0,30,27]];
//color("green")
for (alpha=[60:120:360-45])
{
rotate(alpha)
{
for (i=[1:len(drain_points)-1])
{
hull()
{
translate(drain_points[i-1])sphere(d=Dpipe*2,$fn=fnpipe);
translate(drain_points[i] )sphere(d=Dpipe*2,$fn=fnpipe);
}
}
}
}
///////////////////////////////////
}
Comments