uma matriz de objetos tikz

uma matriz de objetos tikz

Eu uso o código a seguir para desenhar um objeto tikz.

\begin{tikzpicture}

    % Axis
    \draw (-0.5,0) -- (5.0,0);
    \draw (0,-0.5) -- (0,2.5);

    \node (rect) at (1.5,2) [draw,minimum height=0.65cm,minimum width=2cm,fill=gray!50] {};
    \node (rect) at (2.5,1) [draw,minimum height=0.65cm,minimum width=3cm,fill=gray!50] {};

\end{tikzpicture}

e o objeto se parece com -

insira a descrição da imagem aqui

O que eu gostaria de ter é uma grade desses objetos. Portanto, na grade em cada local (1,1), (1,2)... (n,n) este objeto deve ser desenhado.

Claro que posso copiar e colar este código usando escopo e usar xshift, yshiftpara colocar muitos deles. O que eu preciso para ver como é 10 x 10a grade ou mesmo 100 x 100a grade de tais objetos. No entanto, eu gostaria de usar um forloop para desenhar esta grade de nós tikz. Eu quero usar o loop for mencionado nestepergunta. No entanto, meu nó tikz consiste em vários nós (2 linhas e 2 retângulos).

É possível desenhar a grade de objetos usando loop for?

Responder1

É de fato possível

\begin{tikzpicture}
  \foreach \x in {1,2,3}{
    \foreach \y in {1,2,3}{
    \begin{scope}[shift={(3*\x,2*\y)}]
      \draw (-0.25,0) -- (2.5,0);
      \draw (0,-0.25) -- (0,1.25);
      \node (rect) at (.75,1) [draw,minimum height=0.325cm,minimum width=1cm,fill=gray!50] {};
      \node (rect) at (1.25,.5) [draw,minimum height=0.325cm,minimum width=1.5cm,fill=gray!50] {};
    \end{scope}
    }
  }
\end{tikzpicture}

insira a descrição da imagem aqui

Aberto para comentários ou melhores soluções!

Responder2

Apenas mais uma solução picsque pode ser usada em foreachloops ou arquivos matrix.

\documentclass[border=2mm,tikz]{standalone}

\tikzset{
    myobject/.pic={
      \draw (-0.25,0) -- (2.5,0);
      \draw (0,-0.25) -- (0,1.25);
      \node (rect) at (.75,1) [draw,minimum height=0.325cm,minimum width=1cm,fill=gray!50] {};
      \node (rect) at (1.25,.5) [draw,minimum height=0.325cm,minimum width=1.5cm,fill=gray!50] {};
        }
}

\begin{document}

\begin{tikzpicture}
  \foreach \x in {1,2,3}{
    \foreach \y in {1,2,3}{
    \begin{scope}[shift={(3*\x,2*\y)}]
      \pic{myobject};
    \end{scope}
    }
  }
\end{tikzpicture}

\begin{tikzpicture}
  \matrix [column sep=3mm, row sep=3mm] {
      \pic{myobject}; &  \pic{myobject}; &  \pic{myobject}; \\
      \pic{myobject}; &  \pic{myobject}; &  \pic{myobject}; \\
      \pic{myobject}; &  \pic{myobject}; &  \pic{myobject}; \\
    };
\end{tikzpicture}

\end{document}

insira a descrição da imagem aqui

informação relacionada