2

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:

enter image description here

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.

8
  • Name the coordinates and then draw between them? What's the problem exactly?
    – cfr
    Commented Jul 3, 2017 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. Commented Jul 3, 2017 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
    Commented Jul 3, 2017 at 3:49
  • On a side, suggest to use \def and \tikzmath to automate your code better
    – berkus
    Commented Jul 3, 2017 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. Commented Jul 3, 2017 at 9:47

1 Answer 1

2

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}
\usetikzlibrary{arrows.meta,calc} %%% Add calc

\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}

enter image description here

0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .