# tikz building blocks for pneumatic diagrams

I've created a small library of tikz shapes that I want to use over and over in a convienient manner. The following is a subset of the shapes used together in an example:

\documentclass[]{standalone}

\usepackage{pgf,tikz}

\begin{document}
\usetikzlibrary{arrows.meta}

\begin{tikzpicture}
%Left-override
\begin{scope}[rotate=270]
\draw (0,0) -- (0,-2.5) --(3,-2.5)--(3,0);
\draw (0.25,-2.25)--(1.5,-1)--(2.75,-2.25)--cycle;
\end{scope}
%horz-3by2solenoid
\begin{scope}[shift={(0,1)},rotate=270]
\draw (0,0) -- (0,5) -- (5,5) -- (5,0) -- (0,0);
\draw[line width = 0.1cm,black] (5,1.25) -- (4,1.25);
\draw[line width = 0.1cm,black] (4,1.75) -- (4,.75);
\draw[-{Triangle},line width = 0.1cm,blue] (5,2.5) -- (0,2);
\draw[-{Triangle},line width = 0.1cm,red] (0,3.25) -- (5,3.75);
\draw (0,5) -- (0,10) -- (5,10) -- (5,5) -- (0,5);
\draw[line width = 0.1cm,black] (5,8.75) -- (4,8.75) node[pos=-0.5]{EB};
\draw[line width = 0.1cm,black] (4,9.25) -- (4,8.25);
\draw[-{Triangle},line width = 0.1cm,blue] (0,6.75) -- (5,6.25)node[pos=1.1]{EA};
\draw[-{Triangle},line width = 0.1cm,red] (5,7.5) -- (0,8) node[pos=-0.1]{S};
\end{scope}
%Right-override
\begin{scope}[shift={(10,-3)},rotate=90]
\draw (0,0) -- (0,-2.5) --(3,-2.5)--(3,0);
\draw (0.25,-2.25)--(1.5,-1)--(2.75,-2.25)--cycle;
\end{scope}
%Right-coil
\begin{scope}[shift={(12.5,-3)},rotate=90]
\draw (0,0) -- (0,-2.5) --(3,-2.5)--(3,0);
\draw (0,-1.5)--(3,-1);
\end{scope}
%some connection lines..
\draw[green](2,1.5)--(2,4)--(20,4);
\draw[green](3,1.5)--(3,3)--(18,3)--(18,-7)--(20,-7);
\draw[green](3.75,-4.25)--(3.75,-5.5);
%Vertical-2wayPiston
\begin{scope}[shift={(20,-12.5)}]
\draw (1,5) -- (1,19) -- (5,19) -- (5,5) -- (1,5);
\draw (0,17) -- (1,17);
\draw (0,6) -- (1,6);
\filldraw (1,15) rectangle (5,16);
\filldraw[fill=white] (2.9,15) rectangle (3.1,1);
\end{scope}
\begin{scope}[shift={(20,-12.5)}]
\draw[{Triangle}-{Triangle},line width = 0.1cm] (7,10)--node[pos=1.1]{OPEN}(7,15);
\end{scope}
%Vertical-speedControl
\begin{scope}[shift={(3.75,-9)},scale=0.75]
\draw (0,4)--(0,3);
\draw (0,1)--(0,0);
\draw (1,0.5) arc (-90:-270:0.9 and 1.5);
\draw (-1,0.5) arc (-90:90:0.9 and 1.5);
\draw [-{Triangle}](-1,1) -- (1,3);
\end{scope}
\end{tikzpicture}
\end{document}


that produces the following image:

What would be the easiest way to cobble these building blocks together such that drawing the green lines would be easier? I purposely did not connect them to the intended locations to illustrate difficulty... But I would like them to join up at the obvious spots.

Any help would be appreciated.

• Name the coordinates and then draw between them? What's the problem exactly? – cfr Jul 3 '17 at 1:23
• In TikZ nomenclature, a shape is a type of node (by default, nodes are rectangles). You can create shapes, although it is a lot easier with circuitikz than TikZ. – John Kormylo Jul 3 '17 at 2:16
• @JohnKormylo pics are easier. Not sure how circuittikz would make creating new node types easier. Does it provide a higher level interface? There is another package which does that, I think, but the nodes are not as flexible as arbitrary TikZ nodes, I think. – cfr Jul 3 '17 at 3:49
• On a side, suggest to use \def and \tikzmath to automate your code better – berkus Jul 3 '17 at 7:58
• @cfr I've been using Tex for decades, but only recently started using tikz instead of inserting jpg or eps graphics. Coordinates, as shown in solution proposed by StefanH should do the trick. – 2nd.Bridger Jul 3 '17 at 9:47

Add coordinates at the points you want to connect and use them to draw the lines. I also added the library calc to draw the lines. They can also be used to position your blocks, as e.g. the speed control:

\documentclass[border=5mm]{standalone}

\usepackage{pgf,tikz}

\begin{document}

\begin{tikzpicture}
% Left-override
\begin{scope}[rotate=270]
\draw (0,0) -- (0,-2.5) --(3,-2.5)--(3,0);
\draw (0.25,-2.25)--(1.5,-1)--(2.75,-2.25)--cycle;
\end{scope}
% horz-3by2solenoid
\begin{scope}[shift={(0,1)},rotate=270]
\draw (0,0) -- (0,5) -- (5,5) -- (5,0) -- (0,0);
\draw[line width = 0.1cm,black] (5,1.25) -- (4,1.25);
\draw[line width = 0.1cm,black] (4,1.75) -- (4,.75);
\draw[-{Triangle},line width = 0.1cm,blue] (5,2.5) -- (0,2) coordinate(BlueArrow);   %%% New coordinate
\draw[-{Triangle},line width = 0.1cm,red] (0,3.25) -- (5,3.75)
coordinate[pos=0](RedArrowStart) coordinate[pos=1](RedArrowEnd);  %%% New coordinates
\draw (0,5) -- (0,10) -- (5,10) -- (5,5) -- (0,5);
\draw[line width = 0.1cm,black] (5,8.75) -- (4,8.75) node[pos=-0.5]{EB};
\draw[line width = 0.1cm,black] (4,9.25) -- (4,8.25);
\draw[-{Triangle},line width = 0.1cm,blue] (0,6.75) -- (5,6.25)node[pos=1.1]{EA};
\draw[-{Triangle},line width = 0.1cm,red] (5,7.5) -- (0,8) node[pos=-0.1]{S};
\end{scope}
% Right-override
\begin{scope}[shift={(10,-3)},rotate=90]
\draw (0,0) -- (0,-2.5) --(3,-2.5)--(3,0);
\draw (0.25,-2.25)--(1.5,-1)--(2.75,-2.25)--cycle;
\end{scope}
% Right-coil
\begin{scope}[shift={(12.5,-3)},rotate=90]
\draw (0,0) -- (0,-2.5) --(3,-2.5)--(3,0);
\draw (0,-1.5)--(3,-1);
\end{scope}
% some connection lines..  %%%% Wait with these until you have all coodinates to connections %%%%%%%%%%%
% \draw[green](2,1.5)--(2,4)--(20,4);
% \draw[green](3,1.5)--(3,3)--(18,3)--(18,-7)--(20,-7);
% \draw[green](3.75,-4.25)--(3.75,-5.5);
% Vertical-2wayPiston
\begin{scope}[shift={(20,-12.5)}]
\draw (1,5) -- (1,19) -- (5,19) -- (5,5) -- (1,5);
\draw (0,17) -- (1,17) coordinate[pos=0](UpperConnection);    %%% New coordinate
\draw (0,6) -- (1,6) coordinate[pos=0](LowerConnection);    %%% New coordinate
\filldraw (1,15) rectangle (5,16);
\filldraw[fill=white] (2.9,15) rectangle (3.1,1);
\end{scope}
\begin{scope}[shift={(20,-12.5)}]
\draw[{Triangle}-{Triangle},line width = 0.1cm] (7,10)--node[pos=1.1]{OPEN}(7,15);
\end{scope}
% Vertical-speedControl
\begin{scope}[shift={($(RedArrowEnd) + (0,-5)$)},scale=0.75]%[shift={(3.75,-9)},scale=0.75]
\draw (0,4)--(0,3) coordinate[pos=0](SpeedControl);  %%% New coordinate
\draw (0,1)--(0,0);
\draw (1,0.5) arc (-90:-270:0.9 and 1.5);
\draw (-1,0.5) arc (-90:90:0.9 and 1.5);
\draw [-{Triangle}](-1,1) -- (1,3);
\end{scope}
%%% Green stuff
\draw[green] (RedArrowEnd) -- (SpeedControl);
\draw[green] (BlueArrow) |- (UpperConnection);
\draw[green] (RedArrowStart) -- +(0,2) -| ($(LowerConnection)+(-1,0)$) -- (LowerConnection);
\end{tikzpicture}
\end{document}