I rewrote the script from the previous weaving algorithm and it produced a much more favourable result. Beforehand, I had based the weaving geometry on surface geodesic curves, which then had their control points moved based on a positive or negative surface normal value.
In rewriting the script, I changed the fundamental way the weave pattern was applied to the surface. in this method, I created the weave on a plane, and then used one of grasshopper’s useful functions called maptosurface, which takes a set of curves which exist within a UV space, and can morph them into another UV space of your own description.
There is still a bit of compression happening in the weaving pattern where the circumference of the target surface is smaller, so I might try to compensate for this by including a function into the script which analyses how close the base curves come in contact with each other, and scales down the thickness of the woven material. However this result is still better than the previous one which had far larger discrepancies as well as stretching in odd places.
Obligatory accompanying render below. Lit from the inside.