Helpers for converting [x, y] tuples to [x, y, r] tuples and back
echo-bravo-yahoo opened this issue · comments
One of the consistent API pain points I have is moving between an [x, y] and [x, y, r] coordinate lists. I frequently find I want to start with a polygon in [x, y] space while developing iteratively, and only later move it to an [x, y, r] polygon. Additionally, I've wanted to use translateRadiiPoints
for regular [x, y] polygons before. Here are two (dumb, simple) helper functions that I frequently use; I think Round-Anything could benefit from similar (better-named) functions.
function rless(list) = [for (i=[0:len(list)-1]) [list[i][0], list[i][1]]] ;
function rish(list, r) = [for (i=[0:len(list)-1]) [list[i][0], list[i][1], r]] ;
Example where rless
is helpful:
portWidth = 5;
portHeight = 12.50;
points = [
[0, 0, 2],
[0, portHeight, 2],
[portWidth, portHeight, 2],
[portWidth, 0, 2],
];
polygon(rless(points));
And for rish
:
portWidth = 5;
portHeight = 12.50;
points = [
[0, 0],
[0, portHeight],
[portWidth, portHeight],
[portWidth, 0],
];
polygon(rless(translateRadiiPoints(rish(points, 0)));
I understand if you think this doesn't meet the bar for inclusion, but I find openSCAD's functions to be incredibly painful to write. My usual approach when writing in unfamiliar languages is to be verbose and split things into more operations with well-named variables as intermediate steps, and openSCAD's function syntax seems actively hostile to that.
It's a good point @Trial-In-Error. I already have a rless
equivalent
function getpoints(p)=[for(i=[0:len(p)-1])[p[i].x,p[i].y]];// gets [x,y]list of[x,y,r]list
but not rish
.
Plus getpoints
is not documented.
I'll leave this open and try and do something about it soon, but prod me if it's been a couple weeks and I haven't got around to it.