TikZ PGF – How to Create Asymmetric Cloud Shapes

tikz-pgf

I have this little cloud shape that I want to use in my system diagram figures.

\usetikzlibrary{shapes}

\begin{tikzpicture}
\node [cloud, draw,cloud puffs=10,cloud puff arc=120, aspect=2, inner ysep=1em] {};
\end{tikzpicture}

It looks like this:

symmetric cloud

The problem, though, is that the cloud is too symmetrical. I want one side to be 'shorter'. Something like this (minus the arrow, text and drop shadow, of course):

unsymmetric cloud

Can't find anything in the manual or online. Any hints?

Best Answer

It's not a very good answer but I don't have enough time to do a new shape and you can find a lot of examples to do a new shape (batman or other shapes) from this answer.

I made manually a cloud and I place the text inside. You can make a macro to draw the cloud and to place the text at the same time.

You can use the node (cloud) to place arrows etc.

What you can do:

  • new shape: asym cloud
  • or a macro to draw the cloud and to place the text

\documentclass[11pt]{scrartcl}
\usepackage{tikz}
\newcommand{\asymcloud}[2][.1]{%
\begin{scope}[#2]
\pgftransformscale{#1}%    
\pgfpathmoveto{\pgfpoint{261 pt}{115 pt}} 
  \pgfpathcurveto{\pgfqpoint{70 pt}{107 pt}}
                 {\pgfqpoint{137 pt}{291 pt}}
                 {\pgfqpoint{260 pt}{273 pt}} 
  \pgfpathcurveto{\pgfqpoint{78 pt}{382 pt}}
                 {\pgfqpoint{381 pt}{445 pt}}
                 {\pgfqpoint{412 pt}{410 pt}}
  \pgfpathcurveto{\pgfqpoint{577 pt}{587 pt}}
                 {\pgfqpoint{698 pt}{488 pt}}
                 {\pgfqpoint{685 pt}{366 pt}}
  \pgfpathcurveto{\pgfqpoint{840 pt}{192 pt}}
                 {\pgfqpoint{610 pt}{157 pt}}
                 {\pgfqpoint{610 pt}{157 pt}}
  \pgfpathcurveto{\pgfqpoint{531 pt}{39 pt}}
                 {\pgfqpoint{298 pt}{51 pt}}
                 {\pgfqpoint{261 pt}{115 pt}}
\pgfusepath{fill,stroke}         
\end{scope}}    
\begin{document}
 \begin{tikzpicture}
 \draw (0,0) rectangle (15,10) ;
 \node (cloud) at (8,7) {\tikz \asymcloud{fill=gray!20,thick};};
 \node at (4,6) {\tikz[cm={-1,0,0,1,(0,0)}]\asymcloud[.15]{fill=gray!20,thick};}; 
 \node at (8,7) {Net};
\end{tikzpicture}

\end{document}  

enter image description here