7

How would you draw a table, i.e. the piece of furniture on which one eats, like the following in Tikz? As always, I am very grateful for your clever tikz constructions! table attacked by arrows

  • 2
    There is a website texample.net which lists a lot of TikZ examples. Have a look if you find what you are looking for there. If not it would be a good idea to upload the solution to your drawing request there, so other people find them more easily. – Martin Scharrer Apr 4 '11 at 7:49
  • Thanks, Martin, I plan on doing just that at the end of the project on which Im currently working! From what I understand, the license under which answers appear here allows this kind of cross-posting as long as I link back to the original answer. – Thanos D. Papaïoannou Apr 4 '11 at 22:47
21

Here is a crude solution. With time and refactoring, an elegant solution may be written up.

The key part is to use the 3-dimensional coordinate system.

I only drew the table.

\begin{tikzpicture}[fill=lightgray]

%legs
\foreach \leg in {(0.3,0,0),(4.9,0,0),(4.9,0,-2.7),(0.3,0,-2.7)}{
\begin{scope}[shift=\leg,draw=red]
\draw[fill] (0,0,0) -- (0,0,-0.2) -- (0,2,-0.2) -- (0,2,0);
\draw[fill] (0,0,0) rectangle (-0.2,2,0);
\end{scope}}

%table
\begin{scope}[draw=blue,shift={(0,2,0)}]
\draw[fill] (0,0,0) -- (5,0,0) -- (5,0,-3) -- (0,0,-3) -- cycle;
\draw[fill] (0,0,0) -- (5,0,0) -- (5,-0.1,0)-- (0,-0.1,0) -- cycle;
\draw[fill] (5,0,0) -- (5,0,-3) -- (5,-0.1,-3)-- (5,-0.1,0) -- cycle;
\end{scope}

\end{tikzpicture}

The result is

enter image description here

Hera is another version of the code. It is longer, but it uses macros defined at the beginning, to make it easier to modify the table.

\begin{tikzpicture}[fill=lightgray]

%table dimensions
\pgfmathsetmacro{\tablelength}{5};
\pgfmathsetmacro{\tablewidth}{3};
\pgfmathsetmacro{\tablethickness}{0.2};

%leg dimensions
\pgfmathsetmacro{\leglength}{\tablewidth};
\pgfmathsetmacro{\halflegwidth}{0.5*\tablethickness};

\pgfmathsetmacro{\shift}{2*\halflegwidth};

%legs
\foreach \leg in {(0+\shift,0,0),(\tablelength-\shift,0,-\shift),
                  (\tablelength-\shift,0,-\tablewidth+\shift),
                  (0+\shift,0,-\tablewidth+\shift)}{
    \path[shift=\leg,draw=red,fill] 
        (\halflegwidth,0,\halflegwidth) -- (\halflegwidth,0,-\halflegwidth) -- 
        (\halflegwidth,\leglength,-\halflegwidth) --    
               (\halflegwidth,\leglength,\halflegwidth)

        (\halflegwidth,0,\halflegwidth) rectangle 
              (-\halflegwidth,\leglength,\halflegwidth);
}

%table
\path[draw=blue,shift={(0,\leglength,0)},fill]
    (0,0,0) -- (\tablelength,0,0) -- (\tablelength,0,-\tablewidth) -- 
     (0,0,-\tablewidth) -- cycle

    (0,0,0) -- (\tablelength,0,0) -- (\tablelength,-\tablethickness,0)--
     (0,-\tablethickness,0) -- cycle

    (\tablelength,0,0) -- (\tablelength,0,-\tablewidth) -- 
     (\tablelength,-\tablethickness,-\tablewidth)--
    (\tablelength,-\tablethickness,0) -- cycle;

\end{tikzpicture}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.