[OpenSCAD] function for vector sizeof/length?

William Adams william_a_adams at msn.com
Fri Nov 11 00:26:07 CET 2011


Yah, I remember that implementation from way back when. As the current release seems to be locking down, perhaps it can show up in a future release? But, who knows.  Perhaps there are other more interesting future features for OpenScad. -- William

===============================

- Shaping clay is easier than digging it out of the ground.


http://blog.nanotechstyles.com
http://www.thingiverse.com/WilliamAAdams
https://github.com/Wiladams
 

 > Date: Thu, 10 Nov 2011 18:24:26 -0500
> From: christopherolah.co at gmail.com
> To: openscad at rocklinux.org
> Subject: Re: [OpenSCAD] function for vector sizeof/length?
> 
> Hey William,
> 
> I implemented this a while ago, thought the changes weren't accepted
> into the main branch.
> 
> http://christopherolah.wordpress.com/2011/03/28/extending-openscad/
> 
> https://github.com/colah/openscad
> 
> On Thu, Nov 10, 2011 at 6:01 PM, William Adams <william_a_adams at msn.com> wrote:
> > It would still be nice to know the length of an array.
> >
> > function lerp1(u, a, b) = (1-u)*a + u*b;
> > function lerp2(u, a, b) = [lerp1(u, a[0], b[0]), lerp1(u, a[1], b[1])];
> > function lerp3(u, a, b) = [lerp1(u, a[0], b[0]), lerp1(u, a[1], b[1]),
> > lerp1(u, a[2], b[2])];
> >
> > function lerp(u, a, b) = len(a) == 1 ? [lerp1(u, a[0], b[0])] :
> >     len(a) == 2 ? lerp2(u, a, b) :
> >     len(a) == 3 ? lerp3(u, a, b) :
> >     []
> >
> > Here, I want to know the length of the array so I can determine which
> > function to call.  I use lerp here for simplicity.  You don't really need
> > it in this case, but I have run across many situations where it would be
> > desirable.
> >
> > Also, it would be beneficial because then the empty array '[]' could serve
> > as kind of a 'null' value.  I don't want to return '-1' as a return value,
> > I want to return an array that has no entries in it.  Or, if the system had
> > a 'null', or 'undef' that I could reference, that would be good as well.
> >
> > At any rate, knowing the length of an array could have some very good uses.
> >
> > -- William
> >
> > ===============================
> > - Shaping clay is easier than digging it out of the ground.
> >
> > http://blog.nanotechstyles.com
> > http://www.thingiverse.com/WilliamAAdams
> > https://github.com/Wiladams
> >
> >
> >
> >> From: andrew at plumb.org
> >> Date: Thu, 10 Nov 2011 15:22:06 -0500
> >> To: andrew at plumb.org
> >> CC: openscad at rocklinux.org
> >> Subject: Re: [OpenSCAD] function for vector sizeof/length?
> >>
> >> s/sublet/subtle/
> >>
> >> On 2011-11-10, at 3:20 PM, Andrew Plumb wrote:
> >>
> >> > Just the sublet language thing I was looking for.
> >> >
> >> > Thanks!
> >> >
> >> > Andrew.
> >> >
> >> > On 2011-11-10, at 3:18 PM, Giles Bathgate wrote:
> >> >
> >> >> Can you use:
> >> >>
> >> >> for(j=paths)
> >> >>
> >> >> I.e for can itterate over a vector as well as a range
> >> >>
> >> >> Regards
> >> >>
> >> >> Giles
> >> >>
> >> >> On Nov 10, 2011 8:13 PM, "Andrew Plumb" <andrew at plumb.org> wrote:
> >> >> Hey Marius,
> >> >>
> >> >> Is there a utility function of some kind that will return the number of
> >> >> elements in a vector?
> >> >>
> >> >> I could *really* use one for iterating over elements of variable-length
> >> >> vectors passed into modules.
> >> >>
> >> >> Hypothetical example:
> >> >>
> >> >> --snip--
> >> >>
> >> >> mypoints=[[0,0],[10,0],[10,10],[5,15],[0,10],[4,1],[6,1],[6,6],[4,6]];
> >> >> mypaths=[[0,1,2,3,4],[5,6,7,8]];
> >> >>
> >> >> module polygon_outline(points,paths,width=0.2) {
> >> >> for(i=[0:sizeof(paths)-1] ) {
> >> >> for(j=[1:sizeof(paths[i])-1] ) {
> >> >> // draw line from points[paths[i][j-1]] to points[paths[i][j]] using
> >> >> oriented rectangles and octagons at endpoints of width 0.2
> >> >> }
> >> >> // draw closing line from points[paths[i][sizeof(paths[i])-1]] back to
> >> >> points[paths[i][0]]
> >> >> }
> >> >> }
> >> >>
> >> >> difference() {
> >> >> polygon_outline(points=mypoints,paths=mypaths,width=0.5);
> >> >> polygon(points=mypoints,paths=mypaths);
> >> >> }
> >> >>
> >> >> --end-snip--
> >> >>
> >> >> Thanks!
> >> >>
> >> >> Andrew.
> >> >>
> >> >>
> >> >> --
> >> >>
> >> >> "The future is already here. It's just not very evenly distributed" --
> >> >> William Gibson
> >> >>
> >> >> Me: http://clothbot.com/wiki/
> >> >>
> >> >>
> >> >> _______________________________________________
> >> >> OpenSCAD mailing list
> >> >> OpenSCAD at rocklinux.org
> >> >> http://rocklinux.net/mailman/listinfo/openscad
> >> >> _______________________________________________
> >> >> OpenSCAD mailing list
> >> >> OpenSCAD at rocklinux.org
> >> >> http://rocklinux.net/mailman/listinfo/openscad
> >> >
> >> > --
> >> >
> >> > "The future is already here. It's just not very evenly distributed" --
> >> > William Gibson
> >> >
> >> > Me: http://clothbot.com/wiki/
> >> >
> >> >
> >>
> >> --
> >>
> >> "The future is already here. It's just not very evenly distributed" --
> >> William Gibson
> >>
> >> Me: http://clothbot.com/wiki/
> >>
> >>
> >> _______________________________________________
> >> OpenSCAD mailing list
> >> OpenSCAD at rocklinux.org
> >> http://rocklinux.net/mailman/listinfo/openscad
> >
> > _______________________________________________
> > OpenSCAD mailing list
> > OpenSCAD at rocklinux.org
> > http://rocklinux.net/mailman/listinfo/openscad
> >
> >
> _______________________________________________
> OpenSCAD mailing list
> OpenSCAD at rocklinux.org
> http://rocklinux.net/mailman/listinfo/openscad
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://rocklinux.net/pipermail/openscad/attachments/20111111/13f8676e/attachment.html


More information about the OpenSCAD mailing list