My initial code for the surface.
(I have a UV Texture node before this wrangle, set to rows&columns)
int divs = chi("divs"); int primuvmode = chi("primuvmode"); vector2 uv_start, uv_surface; float u, v; uv_surface = set(v@uv[0], v@uv[1]); // U uv_start = uv_surface * {0,1}; u = primarclen(0, uv_start, uv_surface, @primnum, divs, primuvmode); // V uv_start = uv_surface * {1,0}; v = primarclen(0, uv_start, uv_surface, @primnum, divs, primuvmode); v@arclen = set(u, v, 0);