Overwriting fill patterns in TikZ

If you don't want the white fill then you can punch the rectangle and repat the path (and use even odd rule if complex paths are used). If you have a really complicated path then use layers and send them to different layers.

\documentclass[tikz]{standalone}
\usetikzlibrary{patterns}
\begin{document}
\begin{tikzpicture}
\fill[yellow!20] (-1,-1) rectangle (5,5);
\draw[pattern=dots, pattern color=green] (0, 0) rectangle (4, 4) (2, 2) circle[radius=1];
\path[pattern=bricks,pattern color=brown] (2,2) circle (1);
\end{tikzpicture}
\end{document}

enter image description here


It's possible to apply inner patern as a postaction over a previously white filled circle.

\documentclass[10pt,class=memoir]{standalone}
\usepackage[cmyk,dvipsnames,svgnames]{xcolor}
\usepackage{tikz}
  \usetikzlibrary{calc,shapes,decorations,decorations.text, mindmap,shadings,patterns,matrix,arrows,intersections,automata,backgrounds}
\begin{document}
\begin{tikzpicture}
\draw[pattern=dots, pattern color=green] (0, 0) rectangle (4, 4);
\draw[fill=white, postaction={pattern color=brown, pattern=bricks}] (2, 2) circle[radius=1]; 
\end{tikzpicture}
\end{document}

enter image description here


If care is taken over the path directions (which is a nuisance in this case) then the different filling rules can be exploited (at least for PDF output) and it can be done in one path with various post actions:

\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{patterns}
\begin{document}
\tikz\draw [pattern=bricks, pattern color=brown, nonzero rule,
  postaction={fill=white, even odd rule, 
    postaction={pattern=dots, pattern color=green}}] 
      (0, 0) rectangle (4, 4) (3, 2) arc (360:0:1);
\end{document}

enter image description here