Mechanics on arcs (spring, damper)

circuitikztikz-pgf

I am used to drawing basic mechanical components (spring, damper) using the tikz and circuitikz this way:

\coordinate (A) at (0,0);
\coordinate (B) at (3,0);

[..]

\draw (A) to[spring] (B);
\draw (C) to[damper] (D);

Now I am in a configuration where I want to draw the same component but on an arc, not a line:

\draw (0,0) + (30:3cm) arc (30:80:3cm);

I've tried without success using to[spring] positioned before and after the arc command (see figure) and also:

\draw[damper] (0,0) + (30:3cm) arc (30:80:3cm);

The last command just draw this arc, without the mechanical component.
Failed attempt to draw spring on arc

I've seen here, here and here that it is possible with coils using decorations, but I wish to keep the same spring representation, and the solution for the dampers seems quite complicated, is there a simpler way to achieve that ?

EDIT: working example

\usepackage{tikz}
\usepackage{circuitikz}
%
\begin{figure} [h]
\begin{tikzpicture}         
    \coordinate (elbow) at (0,0);
    \coordinate (shoulder) at ($(elbow) + (0, 3.25)$);
    %
    \draw[rounded corners=1ex, rotate around={-60:(elbow)}] (0.175, 0) rectangle (-0.175, 3.25); 
    \draw[rounded corners=0.5ex] ($(elbow) + (0.175, 0)$) rectangle ($(shoulder) + (-0.175, 0)$) node (wrist){};
            
    \node[circle, draw, minimum size=1.25cm, fill=white] (joint) at (elbow) {};
    \node[circle, draw, minimum size=0.15cm, inner sep=0, fill=white] (jointBis) at (elbow) {};
    %
    \draw[white, line width=1.5pt] (0,0) + (15:0.625cm) arc (15:45:0.625cm);
    %
    \draw (0,0) + (33:3cm) arc (33:87:3cm); %to[spring]
    \draw[damper] (0,0) + (35:2cm) arc (35:85:2cm);
    %
    \draw[gray, dashed] (0.625,0) -- (3,0);
    \draw[-{Latex[length=2mm]}] (0,0) + (0:2cm) arc (0:25:2cm) node[midway, right]{$\theta$};
\end{tikzpicture}
\end{figure} 

Best Answer

Positioning a node along an arc is not so difficult --- the problem is that circuitikz elements can only be automatically positioned along a straight line, with the to statement.

So to position an element on an arc we must rely on using the "naked" node and position it. For example

\path (0,0) +(30:3cm) arc (30:80:3cm) 
   node[draw, springshape, pos=0.5, sloped](S){};

will give:

enter image description here

Now, the big problem is to connect the element and remove the line underneath. I used a bit of trigonometry here (and for sure it could be automated in some macro...); for example --- I let in red the help lines that guided me in the construction:

\begin{tikzpicture}[]
    % these are to show the construction
    \draw[red,thin]  (0,0) + (30:3cm) coordinate(B) 
         arc (30:80:3cm) coordinate(E);
    \node[red] at (B){B}; \node[red] at (E){E};
    \path (B) arc (30:80:3cm) node[draw, springshape, pos=0.5, sloped](S){};
    % from B the circle starts at 120 degree, let's se e the landing angle and use a spline
    \draw let \p1=(S.right), \n1={-90+acos(\x1/3cm)} 
          in (B) to[out=120,in=\n1] (S.right);
    % from E it starts at -10, let's caluclate the landing angle
    \draw let \p1=(S.left), \n1={90+acos(\x1/3cm)} 
          in (E) to[out=-10,in=\n1] (S.left);
\end{tikzpicture}

enter image description here

So the arcs are not really arcs, but the final result (removing the red parts) seems acceptable to me:

\path (0,0) +(30:3cm) coordinate(B)
        arc (30:80:3cm) coordinate(E)
        node[draw, springshape, pos=0.5, sloped](S){};
    % from B the circle starts at 120 degree, let's se e the landing angle and use a spline
    \draw let \p1=(S.right), \n1={-90+acos(\x1/3cm)}
          in (B) to[out=120,in=\n1] (S.right);
    % from E it starts at -10, let's caluclate the landing angle
    \draw let \p1=(S.left), \n1={90+acos(\x1/3cm)}
          in (E) to[out=-10,in=\n1] (S.left);

enter image description here

with a damper, use the nodename for the element you find in the manual:

enter image description here

to obtain:

enter image description here