\documentclass{minimal} % Tikz \usepackage{pgf} \usepackage{tikz} \usetikzlibrary{calc,trees,positioning,arrows,chains,shapes.geometric,% decorations.pathreplacing,decorations.pathmorphing,shapes,% matrix,shapes.symbols,positioning} \tikzset{ kiste/.style={ rectangle, rounded corners, % fill=black!10, draw=black, very thick, text width=10em, minimum height=3em, text centered}, kkiste/.style={ rectangle, rounded corners, % fill=black!10, draw=black, very thick, text width=7em, minimum height=2em, text centered}, } \begin{document} \begin{center} \begin{tikzpicture} \node[kiste](IOM) at (0,0) {IOManager}; \node[kiste,rotate=90](PD) at (-5,-4) {Persistent Data}; \node[kiste,rotate=-90](DS) at (5,-4) {Data Structures}; \path[fill=yellow!20,rounded corners,draw=black!50, dashed] (-3.5,-2) rectangle (-0.5,-6); \path[fill=yellow!20,rounded corners,draw=black!50, dashed] (.5,-2) rectangle (3.5,-6); \node[] at (-2,-2.5) {Reader/Writer}; \node[kkiste] at (-2,-3.5) {OBJ}; \node[] at (-2,-4.25) {$\vdots$}; \node[kkiste] at (-2,-5.25) {Custom file format}; \node[] at (2,-2.5) {Importer/Exporter}; \node[kkiste] at (2,-3.5) {OpenMesh}; \node[] at (2,-4.25) {$\vdots$}; \node[kkiste] at (2,-5.25) {Custom data structure}; \path [draw,thick,>=latex,<->] (-0.1,-0.6) -- (-2,-1.9) {}; \path [draw,thick,>=latex,<->] (0.1,-0.6) -- (2,-1.9) {}; \path [draw,thick,>=latex,->] (-4.4,-3.8) -- (-3.6,-3.8) {}; \path [draw,thick,>=latex,<-] (-4.4,-4.2) -- (-3.6,-4.2) {}; \path [draw,thick,>=latex,->] (4.4,-3.8) -- (3.6,-3.8) {}; \path [draw,thick,>=latex,<-] (4.4,-4.2) -- (3.6,-4.2) {}; \end{tikzpicture} \end{center} \end{document}