Not a perfect solution! but I think it solves the twist and the distance between chain links are equal.
![enter image description here](https://cdn.statically.io/img/i.sstatic.net/2nFsz.png)
- It first resample the curve producing points that are at equal distance (the links length).
- This curve is subdivided once and the tilt is set so that we have 90° between point N and point N + 2.
- The curve is transformed into point in order to have tangent and normal.
- Then it creates an instance for every point with a odd index.
- Instances are rotated to be X aligned to tangent and another axis rotated around normal (as normal reflects the tilt).
Resampling with equal distance between two points:
![enter image description here](https://cdn.statically.io/img/i.sstatic.net/YagfC.png)
The principles: iterating over the curve factor (0 to 1) and at each step using a dichotomy to find the next factor so that the related point is at the wanted distance (from the previous point).
It presumes a resulting point count based on the 'standard' resampled point count (we should have less points as a result).
Start with the position for the first factor (=0).
Calculate the base factor extension as the chain link length divided by the curve total length.
Calculate the next factor 'max' value (4 times the wanted length which should be enough if the curve is not too curly).
Engage the dichotomy (see below).
Take the resulting factor coordinate and add it to the result (but only if we are not over the curve last point).
Set the found factor as starting factor for the next iteration.
The result is guessed to be between factor 0 and 'max' next factor.
Calculate the distance at the middle of these two previous.
If the distance is greater than the wanted distance then next guess is between factor 0 and the middle and if not, next guess is between the middle and next factor.
Having 12 (for instance) iterations over that seems to be efficient enough (fast and with an accuracy around 0,025%).
![enter image description here](https://cdn.statically.io/img/i.sstatic.net/3FloS.gif)
![](https://cdn.statically.io/img/blend-exchange.com/embedImage.png?bid=rsDVO4nE)
But not perfect... in fact we may need more complicated things.
In this situation we may rotate this way (3D cursor at center here):
![enter image description here](https://cdn.statically.io/img/i.sstatic.net/5G1CN.gif)
But in this situation, this way:
![enter image description here](https://cdn.statically.io/img/i.sstatic.net/d6VRx.gif)
And real situations should be the mix of the two...