# How to bend wire into a spring. I want to animate this process

So i have a straight wire piece, that i want to bend around another wire, like you would do in real life, but i cant figure out how to do this naturally.

I can use screw modifier to model the final result, but it doesn't animate properly.  • You could do it with bones? A bit complicated but it would work... May 17 at 6:22

Can be done with geonodes: • First, if you cut a ring, and moved one end along the symmetry axis of the ring by some $$x$$ value, you would get a repeating screw segment. This value is simply the small diameter of the ring, the diameter of the wire making the ring. This is the value you normally put into the "Screw" value of the "Screw Modifier".
• I calculate the diameter of the ring (well, $$r×2$$, not very hard), and compare with the big circumference of the ring, to calculate the "Minimum Approach Angle". At this angle (or higher) the bent wire will not constantly hit itself while wrapping the other wire. Or in 3D industry, will not overlap self.
• Notice how instead of reusing the "Diameter", I'm also summing the "Radius" with self. This is because while I use 1 Radius value for both wires, if they were different, you would sum r₁ and r₂.
• The calculated angle I use in "Arc" to sweep to it. Otherwise I just use an offset, which I scale up to have more than one rotation of the wire around another wire, so you might want to plug a Group input into that "Vector Math: Scale" node…
• My "Offset" is always +X +Y, so I rotate it based on the positioning of the object - I "Fix Orientation".
• I use "Connect Center" in the "Arc" node only because that adds another point, which I want, for the cost of enabling "Cyclic", which I don't want. So I then disable "Cyclic", and reposition this added point to get a straight line.
• I move this pre-bent setup 2 radii up - beware, this should actually be r₁ + r₂. And in your case it looks like you want to move down instead…
• I prepared the setup in such a way to bend around the $$y$$ axis, that's why I check if $$x$$ is positive for selection.
• I sweep the $$<0, 0, 2>$$ vector, because I start at the top-most position (in your case it would be $$<0, 0, -2>$$). The logic here probably has to be improved for two different radii, the division by 2 is in a wrong, misleading place (I just had free room for a node in that spot).
• Since I wasn't rotating the real position but starting with new, artificial vector, I then need to also offset by original $$y$$; keep in mind it wouldn't be the original $$y$$ if the approach angle was lower than the calculated minimum.
• All of the above could be accomplished manually by fitting an arc together with a spiral, just 2 nodes, then convert to mesh (no bevel), merge by distance, convert to curve again.
• After that, basically just trim the curve, and in the trim spot add a straight segment of the trimmed length and tangent at the trimming place. I think using the "Trim Curve" node in this case would end up with more nodes, so I did it as you see on the screenshot.
• Bevel the curves, I again optimize the node setup taking the advantage the radii are equal.
• For Animation purposes below (GIF limitations) I lowered offset and samples (too many samples break shading on curves).  • That's some pro explanation. Thank you so much, i did solve it with just bendy bones yet its looking not that clean. Ill need to dive deeper to explore the theory behind it. Thanks again! May 17 at 20:57