[Tex/LaTex] How to draw a cake using TikZ

funtikz-pgf

It is always someone's birthday. I would like to use TikZ to draw a birthday cake. There are all sorts of cakes. What I would like is a cake that looks nice and tasty. Preferably a cake with lots of chocolate and vanilla custard. How can I draw this with TikZ?

Here is something to start with:

\documentclass{article}

\usepackage{tikz}

\usetikzlibrary{shapes}

\newsavebox{\mycandle}% From https://tex.stackexchange.com/a/39211/5701
\savebox{\mycandle}{ 
\begin{tikzpicture}[scale=.1]
  \shade[top color=yellow,bottom color=red] (0,0) .. controls (1,.15)
  and (1,.3) .. (0,2.5) .. controls (-1,.3) and (-1,.15) .. (0,0);
  \fill[red!70!blue] (.4,0) rectangle (-.4,-5);
\end{tikzpicture} }

\begin{document}

\begin{tikzpicture}[>=stealth, shape aspect=.5]
  \draw[fill=yellow!16] (0,-0.2) circle [x radius=1.59cm, y radius=0.29cm];
  \node [cylinder,cylinder uses custom fill, cylinder end fill=yellow!6,
cylinder body fill=yellow!12, shape border rotate=90, minimum width=3cm, minimum
  height=1.2cm, aspect=2.5, overlay, draw] {};
  \foreach \candle in {(-0.32,1.05), (0.32,1.05), (1.2,0.9), (-1.2,0.9), (0.65,0.7), (-0.65,0.7)} \node at \candle {\usebox{\mycandle}};
\end{tikzpicture}

\end{document}

A cake to decorate

Oh, and apparently someone already made a pink cake but without providing a recipe.

Best Answer

I'm not sure that this will win any prizes for elegance ...

This is the pink cake referred to in the question:

Pink cake drawn with TikZ

And here's the recipe:

\documentclass{standalone}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
\fill[white!80!black] (3,-.2) circle[x radius=5.05,y radius=1.66666];
\fill[white!80!black] (3,0) circle[x radius=5,y radius=1.66666];
\draw[white!75!black] (3,0) circle[x radius=5,y radius=1.66666];
\fill[white!75!black] (3,0) circle[x radius=4,y radius=1.33333];
\begin{scope}
\clip (0,0) arc[x radius=3,y radius=1,start angle=180,delta angle=180] -- ++(0,2)  arc[x radius=3,y radius=1,start angle=0,delta angle=-180] -- ++(0,-2);
\foreach \k in {0,...,60} {
  \pgfmathparse{Mod(\k,2) ? "pink" : "purple!50"}
  \let\linecol=\pgfmathresult
  \draw[line width=1mm,\linecol] (\k mm,2) -- ++(0,-3);
}
\end{scope}
\fill[opacity=.3] (0,2) arc[x radius=3,y radius=1,start angle=180,delta angle=180] -- ++(0,-.5)  arc[x radius=3,y radius=1.25,start angle=0,delta angle=-180] -- ++(0,.5);
\fill[pink] (-.25,2) .. controls +(0,-.5) and +(-2,0) .. ++(3.25,-1.25) .. controls +(2,0) and +(0,-.5) .. ++(3.25,1.25) -- ++(0,1) .. controls +(0,.5) and +(2,0) .. ++(-3.25,1.25) .. controls +(-2,0) and +(0,.5) .. ++(-3.25,-1.25);
\draw[pink!80!black] (-.25,3) .. controls +(0,-.5) and +(-2,0) .. ++(3.25,-1.25) .. controls +(2,0) and +(0,-.5) .. ++(3.25,1.25)  .. controls +(0,.5) and +(2,0) .. ++(-3.25,1.25) .. controls +(-2,0) and +(0,.5) .. ++(-3.25,-1.25);
\fill[pink!80!black] (.75,3) .. controls +(0,-.25) and +(-2,0) .. ++(2.25,-.75) .. controls +(2,0) and +(0,-.25) .. ++(2.25,.75)  .. controls +(0,.25) and +(2,0) .. ++(-2.25,.75) .. controls +(-2,0) and +(0,.25) .. ++(-2.25,-.75);
\foreach \i in {0,...,5} {
\pgfmathsetmacro{\yshift}{-\i * (5 - \i) * .07cm}
\begin{scope}[xshift=\i * .5cm,yshift = \yshift]
\fill[purple!70] (1.5,3) arc[x radius=5pt, y radius=2.5pt, start angle=-180, end angle=0] -- ++(0,2) arc[x radius=5pt, y radius=2.5pt, start angle=0, end angle=-180] -- cycle;
\fill[pink] (1.5,5) arc[x radius=5pt, y radius=2.5pt, start angle=-180, end angle=180];
\fill[yellow] (1.5,7.5) ++(5pt,0) .. controls +(0,-1) and +(.5,0) .. ++(0,-2.5) .. controls +(-.5,0) and +(0,-1) .. ++(0,2.5);
\end{scope}
}
\end{tikzpicture}
\end{document}