%!TEX root = ../pmdraw.tex

% *------------------------------*
% |7````````````````````````````9|
% |`````____````____`````````````|
% |````|MFMF\  /MFMF|````````````|
% |````|MF|MF\/MF|MF|````````````|
% |````|MF|\MFMF/|MF|_______`````|
% |````|MF|``````|MFMFMFMFMF|````|
% |````|MF|``````|MF|````````````|
% |````|MF|``````|MF|___`````````|
% |``````````````|MFMFMF|````````|
% |``````````````|MF|````````````|
% |``````````````|MF|````````````|
% |``````````````|MF|````````````|
% |6````````````````````````````5|
% *------------------------------*

\usetikzlibrary{patterns}

\newcommand{\blockStyles}{
   \tikzstyle{typeI} = [
       very thick,
       rounded corners=5pt,
       red,
       preaction={fill, red!3}
   ]
   \tikzstyle{typeT} = [
       very thick,
       rounded corners=5pt,
       dash pattern={on 7.5pt off 2.5pt},
       green,
       preaction={fill, green!3}
   ]
   \tikzstyle{typeB} = [
       very thick,
       rounded corners=5pt,
       dash pattern={on 2.5pt off 2.5pt},
       blue,
       preaction={fill, blue!3}
   ]
   \tikzstyle{typeO} = [
       very thick,
       rounded corners=5pt,
       dash pattern={on 2.5pt off 2.5pt on 7.5pt off 2.5pt},
       orange,
       preaction={fill, orange!3}
   ]
   \tikzstyle{typeU} = [
       very thick,
       rounded corners=5pt,
       dash pattern={on 2.5pt off 2.5pt on 2.5pt off 2.5pt on 7.5pt off 2.5pt},
       violet,
       preaction={fill, violet!3}
   ]
   \tikzstyle{typeN} = [
       very thick,
       rounded corners=5pt,
       dash pattern={on 7.5pt off 2.5pt on 7.5pt off 2.5pt on 2.5pt off 2.5pt},
       yellow,
       preaction={fill, yellow!3}
   ]
}

\pmdProduct[ % Options
   decorate before={
       \blockStyles
       \draw[typeU] (0.6, 2.4) -- (1.4, 2.4) -- (1.4, 0.7) -- (3.6, 0.7) -- (3.6, 2.4) -- (4.4, 2.4) -- (4.4, -1.7) -- (0.6, -1.7) -- cycle;
       \draw[typeT] (1.6, 1.3) rectangle (3.4, 2.4);
       \foreach \x in {0,2} {
           \begin{scope}[shift={(\x,0)}]
               \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3);
           \end{scope}
       }
   }
]{ % Added edges
   {1}{4}
}{ % Top Diagram
   { % Brick 1
       [ % Options
           degree=4
       ]{ % Upper non transversal edges
           {2}{3}
       }{ % Lower non transversal edges
           {2}{3}
       }{ % Transversal edges
           {1}{1}
           {4}{4}
       }
   }
}{ % Bottom Diagram
   { % Brick 1
       [ % Options
           degree=4
       ]{ % Upper non transversal edges
           {1}{2}
           {3}{4}
       }{ % Lower non transversal edges
           {1}{2}
           {3}{4}
       }{ % Transversal edges
           \pmdEmpty
       }
   }
}
\hspace{5em}
\pmdProduct[ % Options
   decorate before={
       \blockStyles
       \draw[typeU] (0.6, 2.4) -- (1.4, 2.4) -- (1.4, 0.7) -- (10.6, 0.7) -- (10.6, 2.4) -- (11.4, 2.4) -- (11.4, -1.7) -- (0.6, -1.7) -- cycle;
       \foreach \x in {0,2,4,7,9} {
           \begin{scope}[shift={(\x,0)}]
               \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3);
           \end{scope}
       }
       \foreach \x in {1,3,8} {
           \begin{scope}[shift={(\x,0)}]
               \draw[typeT] (0.6, 1.3) rectangle (2.4, 2.4);
           \end{scope}
       }
   }
]{ % Added edges
   {1}{5}
   {9}{11}
}{ % Top Diagram
   { % Brick 1
       [ % Options
           degree=5
       ]{ % Upper non transversal edges
           {2}{3}
           {4}{5}
       }{ % Lower non transversal edges
           {2}{3}
           {4}{5}
       }{ % Transversal edges
           {1}{1}
       }
   }{ % Brick 2
       [ % Options
           blank top=2,
           blank bottom=2,
           degree=3
       ]{ % Upper non transversal edges
           {3}{4}
       }{ % Lower non transversal edges
           {3}{4}
       }{ % Transversal edges
           {5}{5}
       }
   }
}{ % Bottom Diagram
   { % Brick 1
       [ % Options
           degree=6
       ]{ % Upper non transversal edges
           {1}{2}
           {3}{4}
           {5}{6}
       }{ % Lower non transversal edges
           {1}{2}
           {3}{4}
           {5}{6}
       }{ % Transversal edges
           \pmdEmpty
       }
   }{ % Brick 2
       [ % Options
           degree=4
       ]{ % Upper non transversal edges
           {1}{2}
           {3}{4}
       }{ % Lower non transversal edges
           {1}{2}
           {3}{4}
       }{ % Transversal edges
           \pmdEmpty
       }
   }
}