Irev-Dev/Round-Anything

Helpers for converting [x, y] tuples to [x, y, r] tuples and back

echo-bravo-yahoo opened this issue · 2 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.