%&tex \documentclass{standalone} \usepackage{tikz} \usepackage{siltex} \usetikzlibrary {calc,arrows.meta,positioning,patterns,math} %\input{graphics/tics.tikz} \begin{document} \begin{tikzpicture}[x=0.9cm, y=0.9cm, nodes={text width=4.5cm,anchor=north west,draw=none}] \def \markerradius {0.5}; \def \angle {40}; \def \startangle {-90-\angle}; \def \stopangle {-90+\angle}; \def \length{4}; \def \thick{0.3}; \def \clampoffset{2}; \pgfmathsetmacro{\clamppos}{\clampoffset-\markerradius*sin(\angle)}; \pgfmathsetmacro{\side}{\markerradius*(1-cos(\angle))}; \def \clampsection {++(${\side}*(0,1)$) arc[start angle=\startangle,end angle=\stopangle,radius=\markerradius] -- ++(${-1*\side}*(0,1)$)}; \def \blockdistance {2.8} \def \blockpos {(0,0)}; \def \markerdrop {0.5}; \def \spacing {5.6}; \def \yspacing {4.6}; \tikzset{ block/.pic= { \def \height {1.5}; \def \width {1}; \draw[pattern = north west lines] (\clamppos,-1) -- (\clamppos,-\markerdrop) -- \clampsection -- ++(0,-0.2) -- (\blockdistance,-\markerdrop-0.2) -- (\blockdistance,1) -- (\blockdistance+\width,1) -- (\blockdistance+\width,-1); }, upperclamp/.pic= { \def \startangle {90+\angle}; \def \stopangle {90-\angle}; \def \side {-\markerradius*(1-cos(\angle))}; \draw[fill=lightgray] (0,0) -- (${\clamppos}*(1,0)$) coordinate(a) -- \clampsection coordinate(b) -- (\length,0) -- ++(0,\thick) -- (0,\thick); }, lowerclamp/.pic= { \draw[fill=lightgray] (0,0) -- (${\clamppos}*(1,0)$) -- \clampsection -- ++(0,-\thick) -- (0,-\thick); }, marker/.pic= { \draw[fill=gray] (0,0) circle(\markerradius); } } \def \nodepos {(\blockdistance-4.0,2.9)}; \begin{scope}[shift={(0*\spacing,0)}] \def \eex {1.3}; \def \eey {-0.5}; \pgfmathsetmacro{\clampangle}{max(0,atan2(\eey,{\blockdistance+\eex}))}; \draw \blockpos pic {block}; \node at \nodepos {1. Marker is clamped in springloaded end-effector.}; \draw (2-\eex,{\markerradius+\eey*-1}) pic {marker}; \begin{scope}[shift={(-\eex,-\eey)}] \draw (0,0) pic {lowerclamp}; \draw (0,1) pic[rotate=\clampangle] {upperclamp}; \end{scope} \end{scope} \begin{scope}[shift={(1*\spacing,0)}] \def \eex {0}; \def \eey {0}; \pgfmathsetmacro{\clampangle}{max(0,atan2(\eey,{\blockdistance+\eex}))}; \draw \blockpos pic {block}; \node at \nodepos {2. End-effector is positioned on the holder.}; \draw (2,\markerradius) pic {marker}; \begin{scope}[shift={(-\eex,-\eey)}] \draw (0,0) pic {lowerclamp}; \draw (0,1) pic[rotate=\clampangle] {upperclamp}; \end{scope} \end{scope} \begin{scope}[shift={(2*\spacing,0)}] \def \eex {0}; \def \eey {0.5}; \pgfmathsetmacro{\clampangle}{max(0,atan2(\eey,{\blockdistance+\eex}))}; \draw \blockpos pic {block}; \node at \nodepos {3. End-effector is moved down, forcing the upper clamp open.}; \draw (2,\markerradius-\markerdrop) pic {marker}; \begin{scope}[shift={(-\eex,-\eey)}] \draw (0,0) pic {lowerclamp}; \draw (0,1) pic[rotate=\clampangle] {upperclamp}; \end{scope} \end{scope} \begin{scope}[shift={(0*\spacing,-\yspacing)}] \def \eex {0}; \def \eey {0.7}; \pgfmathsetmacro{\clampangle}{max(0,atan2(\eey,{\blockdistance+\eex}))}; \draw \blockpos pic {block}; \node at \nodepos {4. End-effector continues down, leaving the marker in the holder.}; \draw (2,\markerradius-\markerdrop) pic {marker}; \begin{scope}[shift={(-\eex,-\eey)}] \draw (0,0) pic {lowerclamp}; \draw (0,1) pic[rotate=\clampangle] {upperclamp}; \end{scope} \end{scope} \begin{scope}[shift={(1*\spacing,-\yspacing)}] \def \eex {1}; \def \eey {0.7}; \pgfmathsetmacro{\clampangle}{max(0,atan2(\eey,{\blockdistance+\eex}))}; \draw \blockpos pic {block}; \node at \nodepos {5. The longer arm allows the end-effector to move sideways.}; \draw (2,\markerradius-\markerdrop) pic {marker}; \begin{scope}[shift={(-\eex,-\eey)}] \draw (0,0) pic {lowerclamp}; \draw (0,1) pic[rotate=\clampangle] {upperclamp}; \end{scope} \end{scope} \begin{scope}[shift={(2*\spacing,-\yspacing)}] \def \eex {1}; \def \eey {0}; \pgfmathsetmacro{\clampangle}{max(0,atan2(\eey,{\blockdistance-\eex}))}; \draw \blockpos pic {block}; \node at \nodepos {6. Return to begin position, now without marker.}; \draw (2,\markerradius-\markerdrop) pic {marker}; \begin{scope}[shift={(-\eex,-\eey)}] \draw (0,0) pic {lowerclamp}; \draw (0,1) pic[rotate=\clampangle] {upperclamp}; \end{scope} \end{scope} \draw (4.2,-1.3*\yspacing) -- (4.2,2.9); \draw[shift={(\spacing,0)}] (4.2,-1.3*\yspacing) -- (4.2,2.9); \draw(-1.4,-1.5) -- ++(3*\spacing,0); \end{tikzpicture} \end{document}