A design script method utilizing UV values:
The design script to pull the UV values along the perimeter:
toOne = 0..1..#cnt/2;
fromOne = 1..0..#cnt/2;
zeroPad = List.OfRepeatedItem(0,cnt/2);
onePad = List.OfRepeatedItem(1,cnt/2);
u1 = List.DropItems(List.Join([toOne,onePad]),1);
v1 = List.DropItems(List.Join([zeroPad,toOne]),1);
u2 = List.DropItems(List.Join([zeroPad,toOne]),1);
v2 = List.DropItems(List.Join([toOne,onePad]),1);
u3 = List.DropItems(List.Join([zeroPad,toOne]),1);
v3 = List.DropItems(List.Join([fromOne,zeroPad]),1);
u4 = List.DropItems(List.Join([toOne, onePad]),1);
v4 = List.DropItems(List.Join([onePad, fromOne]),1);
d1 =
Curve.ByParameterLineOnSurface(
surf,
List.DropItems(UV.ByCoordinates(u1,v1),-1),
List.DropItems(UV.ByCoordinates(u2,v2),-1)
);
d2 =
Curve.ByParameterLineOnSurface(
surf,
List.DropItems(UV.ByCoordinates(u3,v3),-1),
List.DropItems(UV.ByCoordinates(u4,v4),-1)
);
oSets = Curve.ByIsoCurveOnSurface(surf,(0..1)@L1<1>, 0..1..#cnt-1);
crvs = List.Join(List.Flatten([d1,d2,oSets],-1));
csSet = Curve.CoordinateSystemAtParameter(crvs,0);
profile = Circle.ByCenterPointRadiusNormal(Point.Origin(), 1/8, Vector.YAxis());
profiles = Geometry.Transform(profile,csSet);
solids = Solid.BySweep(profiles, crvs);