R
runsun
Mon, Nov 14, 2016 8:18 PM
Just looked at the multiple generator expression in the new snapshot again:
points = [
for (a = [0 : steps]) [ a, 10 * sin(a * 360 / steps) + 10 ],
for (a = [steps : -1 : 0]) [ a, 10 * cos(a * 360 / steps) - 20 ],
[ 10, -3 ], [ 3, 0 ], [ 10, 3 ]
];
and wondering its benefit over currently available concat:
points = concat(
[ for (a = [0 : steps]) [ a, 10 * sin(a * 360 / steps) + 10 ] ],
[ for (a = [steps : -1 : 0]) [ a, 10 * cos(a * 360 / steps) - 20 ] ],
[ [ 10, -3 ], [ 3, 0 ], [ 10, 3 ] ]
);
Is the speed a major benefit ?
If so, I assume that this
pts = [ each a, each b, each c ...];
will be faster than:
pts = concat(a,b,c ...);
is that so ?
$ Runsun Pan, PhD $ libs: doctest , faces ( git ), offline doc ( git ), runscad.py ( 2 , git ), synwrite ( 2 ); $ tips: hash ( 2 ), matrix ( 2 , 3 ), sweep ( 2 , 3 ), var ( 2 ), lerp , animation ( gif , prodVid , animlib ), precision ( 2 ), xl-control , type , rounded polygon , chfont , tailRecur ( 2, 3 ), isosphere ( 2 ), area , vol/center , RGB , CurvedImg , tests ( 2 ), text ; $ Apps: rollApp , blockscad , openjscad , on AWS ( pdf )
View this message in context: http://forum.openscad.org/Regarding-the-multiple-generator-expression-in-the-snapshot-2016-10-4-tp19098.html
Sent from the OpenSCAD mailing list archive at Nabble.com.
Just looked at the multiple generator expression in the new snapshot again:
> points = [
> for (a = [0 : steps]) [ a, 10 * sin(a * 360 / steps) + 10 ],
> for (a = [steps : -1 : 0]) [ a, 10 * cos(a * 360 / steps) - 20 ],
> [ 10, -3 ], [ 3, 0 ], [ 10, 3 ]
> ];
and wondering its benefit over currently available concat:
> points = concat(
> [ for (a = [0 : steps]) [ a, 10 * sin(a * 360 / steps) + 10 ] ],
> [ for (a = [steps : -1 : 0]) [ a, 10 * cos(a * 360 / steps) - 20 ] ],
> [ [ 10, -3 ], [ 3, 0 ], [ 10, 3 ] ]
> );
Is the speed a major benefit ?
If so, I assume that this
pts = [ each a, each b, each c ...];
will be faster than:
pts = concat(a,b,c ...);
is that so ?
-----
$ Runsun Pan, PhD $ libs: doctest , faces ( git ), offline doc ( git ), runscad.py ( 2 , git ), synwrite ( 2 ); $ tips: hash ( 2 ), matrix ( 2 , 3 ), sweep ( 2 , 3 ), var ( 2 ), lerp , animation ( gif , prodVid , animlib ), precision ( 2 ), xl-control , type , rounded polygon , chfont , tailRecur ( 2, 3 ), isosphere ( 2 ), area , vol/center , RGB , CurvedImg , tests ( 2 ), text ; $ Apps: rollApp , blockscad , openjscad , on AWS ( pdf )
--
View this message in context: http://forum.openscad.org/Regarding-the-multiple-generator-expression-in-the-snapshot-2016-10-4-tp19098.html
Sent from the OpenSCAD mailing list archive at Nabble.com.
DM
doug moen
Mon, Nov 14, 2016 8:40 PM
Runsun: I think that the benefit is mostly in the notation. List
constructors are more powerful, you are less likely to need to convert a
list constructor to a concat() call when your code becomes more
complicated, and it may help you write more readable code.
The only way to know for sure what the performance is like is to run a
benchmark. However, in the concat version of your example, each of the
three arguments to concat is an intermediate list value that doesn't need
to be constructed in the "list constructor" version. If we had an
optimizing compiler that could internally rewrite a call to concat into the
code for a list constructor, then the performance would be identical. But
we don't have that right now.
On 14 November 2016 at 15:18, runsun runsun@gmail.com wrote:
Just looked at the multiple generator expression in the new snapshot again:
points = [
for (a = [0 : steps]) [ a, 10 * sin(a * 360 / steps) + 10 ],
for (a = [steps : -1 : 0]) [ a, 10 * cos(a * 360 / steps) - 20 ],
[ 10, -3 ], [ 3, 0 ], [ 10, 3 ]
];
and wondering its benefit over currently available concat:
points = concat(
[ for (a = [0 : steps]) [ a, 10 * sin(a * 360 / steps) + 10 ] ],
[ for (a = [steps : -1 : 0]) [ a, 10 * cos(a * 360 / steps) - 20 ]
[ [ 10, -3 ], [ 3, 0 ], [ 10, 3 ] ]
);
Is the speed a major benefit ?
If so, I assume that this
pts = [ each a, each b, each c ...];
will be faster than:
pts = concat(a,b,c ...);
is that so ?
$ Runsun Pan, PhD $ libs: doctest , faces ( git ), offline doc ( git ),
runscad.py ( 2 , git ), synwrite ( 2 ); $ tips: hash ( 2 ), matrix (
2 , 3 ), sweep ( 2 , 3 ), var ( 2 ), lerp , animation ( gif , prodVid ,
animlib ), precision ( 2 ), xl-control , type , rounded polygon , chfont ,
tailRecur ( 2, 3 ), isosphere ( 2 ), area , vol/center , RGB , CurvedImg ,
tests ( 2 ), text ; $ Apps: rollApp , blockscad , openjscad , on AWS ( pdf )
View this message in context: http://forum.openscad.org/
Regarding-the-multiple-generator-expression-in-the-
snapshot-2016-10-4-tp19098.html
Sent from the OpenSCAD mailing list archive at Nabble.com.
OpenSCAD mailing list
Discuss@lists.openscad.org
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Runsun: I think that the benefit is mostly in the notation. List
constructors are more powerful, you are less likely to need to convert a
list constructor to a concat() call when your code becomes more
complicated, and it may help you write more readable code.
The only way to know for sure what the performance is like is to run a
benchmark. However, in the `concat` version of your example, each of the
three arguments to `concat` is an intermediate list value that doesn't need
to be constructed in the "list constructor" version. If we had an
optimizing compiler that could internally rewrite a call to concat into the
code for a list constructor, then the performance would be identical. But
we don't have that right now.
On 14 November 2016 at 15:18, runsun <runsun@gmail.com> wrote:
> Just looked at the multiple generator expression in the new snapshot again:
>
> > points = [
> > for (a = [0 : steps]) [ a, 10 * sin(a * 360 / steps) + 10 ],
> > for (a = [steps : -1 : 0]) [ a, 10 * cos(a * 360 / steps) - 20 ],
> > [ 10, -3 ], [ 3, 0 ], [ 10, 3 ]
> > ];
>
> and wondering its benefit over currently available concat:
>
> > points = concat(
> > [ for (a = [0 : steps]) [ a, 10 * sin(a * 360 / steps) + 10 ] ],
> > [ for (a = [steps : -1 : 0]) [ a, 10 * cos(a * 360 / steps) - 20 ]
> ],
> > [ [ 10, -3 ], [ 3, 0 ], [ 10, 3 ] ]
> > );
>
> Is the speed a major benefit ?
>
> If so, I assume that this
>
> pts = [ each a, each b, each c ...];
>
> will be faster than:
>
> pts = concat(a,b,c ...);
>
> is that so ?
>
>
>
> -----
>
> $ Runsun Pan, PhD $ libs: doctest , faces ( git ), offline doc ( git ),
> runscad.py ( 2 , git ), synwrite ( 2 ); $ tips: hash ( 2 ), matrix (
> 2 , 3 ), sweep ( 2 , 3 ), var ( 2 ), lerp , animation ( gif , prodVid ,
> animlib ), precision ( 2 ), xl-control , type , rounded polygon , chfont ,
> tailRecur ( 2, 3 ), isosphere ( 2 ), area , vol/center , RGB , CurvedImg ,
> tests ( 2 ), text ; $ Apps: rollApp , blockscad , openjscad , on AWS ( pdf )
> --
> View this message in context: http://forum.openscad.org/
> Regarding-the-multiple-generator-expression-in-the-
> snapshot-2016-10-4-tp19098.html
> Sent from the OpenSCAD mailing list archive at Nabble.com.
>
> _______________________________________________
> OpenSCAD mailing list
> Discuss@lists.openscad.org
> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
>
>
>
TP
Torsten Paul
Mon, Nov 14, 2016 8:57 PM
On 11/14/2016 09:18 PM, runsun wrote:
If so, I assume that this
pts = [ each a, each b, each c ...];
will be faster than:
pts = concat(a,b,c ...);
is that so ?
No, I don't think there is any relevant performance difference
between those two.
ciao,
Torsten.
On 11/14/2016 09:18 PM, runsun wrote:
> If so, I assume that this
> pts = [ each a, each b, each c ...];
> will be faster than:
> pts = concat(a,b,c ...);
> is that so ?
>
No, I don't think there is any relevant performance difference
between those two.
ciao,
Torsten.
R
Ronaldo
Mon, Nov 14, 2016 9:11 PM
I wouldn't expect too much differences but I have made a simple test
comparing three forms that seems to be equivalent:
n=1000;
/*
pts = [
each [for(i=[0:n],j=[0:n]) [] ],
each [for(i=[0:n],j=[0:n]) [] ],
each [for(i=[0:n],j=[0:n]) [] ]
];
echo(len(pts));
/
/
pts = [
for(i=[0:n],j=[0:n]) [] ,
for(i=[0:n],j=[0:n]) [] ,
for(i=[0:n],j=[0:n]) []
];
echo(len(pts));
/
/
pts = concat(
[for(i=[0:n],j=[0:n]) [] ],
[for(i=[0:n],j=[0:n]) [] ],
[for(i=[0:n],j=[0:n]) [] ]
);
echo(len(pts));
*/
In my computer the first code run in 4 sec. and the other two in 3 sec. I
have flushed the caches between tests. So, it seems the 'each' form is a bit
slower than the other two forms. However, this is neglegible considering I
was building lists with 3.006e+06 empty list elements. For these three
cases, I think the second form is simpler and cleaner.
I don't like concat, specially when I want to add one element (a vector) to
a list. Oftenly, I forget to enclose the element between brackets and suffer
to find the error.
--
View this message in context: http://forum.openscad.org/Regarding-the-multiple-generator-expression-in-the-snapshot-2016-10-4-tp19098p19101.html
Sent from the OpenSCAD mailing list archive at Nabble.com.
I wouldn't expect too much differences but I have made a simple test
comparing three forms that seems to be equivalent:
> n=1000;
> /*
> pts = [
> each [for(i=[0:n],j=[0:n]) [] ],
> each [for(i=[0:n],j=[0:n]) [] ],
> each [for(i=[0:n],j=[0:n]) [] ]
> ];
> echo(len(pts));
> */
> /*
> pts = [
> for(i=[0:n],j=[0:n]) [] ,
> for(i=[0:n],j=[0:n]) [] ,
> for(i=[0:n],j=[0:n]) []
> ];
> echo(len(pts));
> */
> /*
> pts = concat(
> [for(i=[0:n],j=[0:n]) [] ],
> [for(i=[0:n],j=[0:n]) [] ],
> [for(i=[0:n],j=[0:n]) [] ]
> );
> echo(len(pts));
> */
In my computer the first code run in 4 sec. and the other two in 3 sec. I
have flushed the caches between tests. So, it seems the 'each' form is a bit
slower than the other two forms. However, this is neglegible considering I
was building lists with 3.006e+06 empty list elements. For these three
cases, I think the second form is simpler and cleaner.
I don't like concat, specially when I want to add one element (a vector) to
a list. Oftenly, I forget to enclose the element between brackets and suffer
to find the error.
--
View this message in context: http://forum.openscad.org/Regarding-the-multiple-generator-expression-in-the-snapshot-2016-10-4-tp19098p19101.html
Sent from the OpenSCAD mailing list archive at Nabble.com.
NH
nop head
Mon, Nov 14, 2016 10:57 PM
You could wrap concat in a function called append that takes an element and
adds it to a list to make it more readable and not need the brackets.
On 14 November 2016 at 21:11, Ronaldo rcmpersiano@gmail.com wrote:
I wouldn't expect too much differences but I have made a simple test
comparing three forms that seems to be equivalent:
n=1000;
/*
pts = [
each [for(i=[0:n],j=[0:n]) [] ],
each [for(i=[0:n],j=[0:n]) [] ],
each [for(i=[0:n],j=[0:n]) [] ]
];
echo(len(pts));
/
/
pts = [
for(i=[0:n],j=[0:n]) [] ,
for(i=[0:n],j=[0:n]) [] ,
for(i=[0:n],j=[0:n]) []
];
echo(len(pts));
/
/
pts = concat(
[for(i=[0:n],j=[0:n]) [] ],
[for(i=[0:n],j=[0:n]) [] ],
[for(i=[0:n],j=[0:n]) [] ]
);
echo(len(pts));
*/
In my computer the first code run in 4 sec. and the other two in 3 sec. I
have flushed the caches between tests. So, it seems the 'each' form is a
bit
slower than the other two forms. However, this is neglegible considering I
was building lists with 3.006e+06 empty list elements. For these three
cases, I think the second form is simpler and cleaner.
I don't like concat, specially when I want to add one element (a vector) to
a list. Oftenly, I forget to enclose the element between brackets and
suffer
to find the error.
--
View this message in context: http://forum.openscad.org/
Regarding-the-multiple-generator-expression-in-the-snapshot-2016-10-4-
tp19098p19101.html
Sent from the OpenSCAD mailing list archive at Nabble.com.
OpenSCAD mailing list
Discuss@lists.openscad.org
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
You could wrap concat in a function called append that takes an element and
adds it to a list to make it more readable and not need the brackets.
On 14 November 2016 at 21:11, Ronaldo <rcmpersiano@gmail.com> wrote:
> I wouldn't expect too much differences but I have made a simple test
> comparing three forms that seems to be equivalent:
>
> > n=1000;
> > /*
> > pts = [
> > each [for(i=[0:n],j=[0:n]) [] ],
> > each [for(i=[0:n],j=[0:n]) [] ],
> > each [for(i=[0:n],j=[0:n]) [] ]
> > ];
> > echo(len(pts));
> > */
> > /*
> > pts = [
> > for(i=[0:n],j=[0:n]) [] ,
> > for(i=[0:n],j=[0:n]) [] ,
> > for(i=[0:n],j=[0:n]) []
> > ];
> > echo(len(pts));
> > */
> > /*
> > pts = concat(
> > [for(i=[0:n],j=[0:n]) [] ],
> > [for(i=[0:n],j=[0:n]) [] ],
> > [for(i=[0:n],j=[0:n]) [] ]
> > );
> > echo(len(pts));
> > */
>
> In my computer the first code run in 4 sec. and the other two in 3 sec. I
> have flushed the caches between tests. So, it seems the 'each' form is a
> bit
> slower than the other two forms. However, this is neglegible considering I
> was building lists with 3.006e+06 empty list elements. For these three
> cases, I think the second form is simpler and cleaner.
>
> I don't like concat, specially when I want to add one element (a vector) to
> a list. Oftenly, I forget to enclose the element between brackets and
> suffer
> to find the error.
>
>
>
> --
> View this message in context: http://forum.openscad.org/
> Regarding-the-multiple-generator-expression-in-the-snapshot-2016-10-4-
> tp19098p19101.html
> Sent from the OpenSCAD mailing list archive at Nabble.com.
>
> _______________________________________________
> OpenSCAD mailing list
> Discuss@lists.openscad.org
> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
>
R
runsun
Tue, Nov 15, 2016 12:04 AM
Thx guys for the responses and tests.
@nophead, that's a good idea. I do have append and prepend in my lib.
$ Runsun Pan, PhD $ libs: doctest , faces ( git ), offline doc ( git ), runscad.py ( 2 , git ), synwrite ( 2 ); $ tips: hash ( 2 ), matrix ( 2 , 3 ), sweep ( 2 , 3 ), var ( 2 ), lerp , animation ( gif , prodVid , animlib ), precision ( 2 ), xl-control , type , rounded polygon , chfont , tailRecur ( 2, 3 ), isosphere ( 2 ), area , vol/center , RGB , CurvedImg , tests ( 2 ), text ; $ Apps: rollApp , blockscad , openjscad , on AWS ( pdf )
View this message in context: http://forum.openscad.org/Regarding-the-multiple-generator-expression-in-the-snapshot-2016-10-4-tp19098p19104.html
Sent from the OpenSCAD mailing list archive at Nabble.com.
Thx guys for the responses and tests.
@nophead, that's a good idea. I do have append and prepend in my lib.
-----
$ Runsun Pan, PhD $ libs: doctest , faces ( git ), offline doc ( git ), runscad.py ( 2 , git ), synwrite ( 2 ); $ tips: hash ( 2 ), matrix ( 2 , 3 ), sweep ( 2 , 3 ), var ( 2 ), lerp , animation ( gif , prodVid , animlib ), precision ( 2 ), xl-control , type , rounded polygon , chfont , tailRecur ( 2, 3 ), isosphere ( 2 ), area , vol/center , RGB , CurvedImg , tests ( 2 ), text ; $ Apps: rollApp , blockscad , openjscad , on AWS ( pdf )
--
View this message in context: http://forum.openscad.org/Regarding-the-multiple-generator-expression-in-the-snapshot-2016-10-4-tp19098p19104.html
Sent from the OpenSCAD mailing list archive at Nabble.com.
JL
Jean-Paul Louis
Tue, Nov 15, 2016 2:25 AM
Guys, watch the semantics. For an outsider like me,
concat and append are synonymous.
Just my two cents,
Jean-Paul
On Nov 14, 2016, at 7:04 PM, runsun runsun@gmail.com wrote:
Thx guys for the responses and tests.
@nophead, that's a good idea. I do have append and prepend in my lib.
$ Runsun Pan, PhD $ libs: doctest , faces ( git ), offline doc ( git ), runscad.py ( 2 , git ), synwrite ( 2 ); $ tips: hash ( 2 ), matrix ( 2 , 3 ), sweep ( 2 , 3 ), var ( 2 ), lerp , animation ( gif , prodVid , animlib ), precision ( 2 ), xl-control , type , rounded polygon , chfont , tailRecur ( 2, 3 ), isosphere ( 2 ), area , vol/center , RGB , CurvedImg , tests ( 2 ), text ; $ Apps: rollApp , blockscad , openjscad , on AWS ( pdf )
View this message in context: http://forum.openscad.org/Regarding-the-multiple-generator-expression-in-the-snapshot-2016-10-4-tp19098p19104.html
Sent from the OpenSCAD mailing list archive at Nabble.com.
OpenSCAD mailing list
Discuss@lists.openscad.org
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Guys, watch the semantics. For an outsider like me,
concat and append are synonymous.
Just my two cents,
Jean-Paul
> On Nov 14, 2016, at 7:04 PM, runsun <runsun@gmail.com> wrote:
>
> Thx guys for the responses and tests.
>
> @nophead, that's a good idea. I do have append and prepend in my lib.
>
>
>
> -----
>
> $ Runsun Pan, PhD $ libs: doctest , faces ( git ), offline doc ( git ), runscad.py ( 2 , git ), synwrite ( 2 ); $ tips: hash ( 2 ), matrix ( 2 , 3 ), sweep ( 2 , 3 ), var ( 2 ), lerp , animation ( gif , prodVid , animlib ), precision ( 2 ), xl-control , type , rounded polygon , chfont , tailRecur ( 2, 3 ), isosphere ( 2 ), area , vol/center , RGB , CurvedImg , tests ( 2 ), text ; $ Apps: rollApp , blockscad , openjscad , on AWS ( pdf )
> --
> View this message in context: http://forum.openscad.org/Regarding-the-multiple-generator-expression-in-the-snapshot-2016-10-4-tp19098p19104.html
> Sent from the OpenSCAD mailing list archive at Nabble.com.
>
> _______________________________________________
> OpenSCAD mailing list
> Discuss@lists.openscad.org
> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
RP
Ronaldo Persiano
Tue, Nov 15, 2016 4:43 AM
Still odd:
a = prepend(aini, append(aend, A));
b = append( bend, concat(B1, B2) );
compared with:
a = [aini, each A, aend];
b = [ concat(B1, B2), bend];
and, as usually the lists are built with for, better would be:
a = [ aini, for(...) a[i] ];
b = [ for(...) b1[i], for(..) b2[i], bend ];
Still odd:
a = prepend(aini, append(aend, A));
b = append( bend, concat(B1, B2) );
compared with:
a = [aini, each A, aend];
b = [ concat(B1, B2), bend];
and, as usually the lists are built with for, better would be:
a = [ aini, for(...) a[i] ];
b = [ for(...) b1[i], for(..) b2[i], bend ];
R
runsun
Tue, Nov 15, 2016 5:02 AM
concat and append are synonymous.
The purpose of append is to save the trouble of remembering extra [ ]:
a = concat( arr, [x] );
a = append( arr, x );
$ Runsun Pan, PhD $ libs: doctest , faces ( git ), offline doc ( git ), runscad.py ( 2 , git ), synwrite ( 2 ); $ tips: hash ( 2 ), matrix ( 2 , 3 ), sweep ( 2 , 3 ), var ( 2 ), lerp , animation ( gif , prodVid , animlib ), precision ( 2 ), xl-control , type , rounded polygon , chfont , tailRecur ( 2, 3 ), isosphere ( 2 ), area , vol/center , RGB , CurvedImg , tests ( 2 ), text ; $ Apps: rollApp , blockscad , openjscad , on AWS ( pdf )
View this message in context: http://forum.openscad.org/Regarding-the-multiple-generator-expression-in-the-snapshot-2016-10-4-tp19098p19108.html
Sent from the OpenSCAD mailing list archive at Nabble.com.
louijp wrote
> concat and append are synonymous.
The purpose of append is to save the trouble of remembering extra [ ]:
a = concat( arr, [x] );
a = append( arr, x );
-----
$ Runsun Pan, PhD $ libs: doctest , faces ( git ), offline doc ( git ), runscad.py ( 2 , git ), synwrite ( 2 ); $ tips: hash ( 2 ), matrix ( 2 , 3 ), sweep ( 2 , 3 ), var ( 2 ), lerp , animation ( gif , prodVid , animlib ), precision ( 2 ), xl-control , type , rounded polygon , chfont , tailRecur ( 2, 3 ), isosphere ( 2 ), area , vol/center , RGB , CurvedImg , tests ( 2 ), text ; $ Apps: rollApp , blockscad , openjscad , on AWS ( pdf )
--
View this message in context: http://forum.openscad.org/Regarding-the-multiple-generator-expression-in-the-snapshot-2016-10-4-tp19098p19108.html
Sent from the OpenSCAD mailing list archive at Nabble.com.
R
runsun
Tue, Nov 15, 2016 5:11 AM
@Ronaldo:
I think the append/prepend are useful before the new snapshot is formalized.
It is also handy for ppl coming from other languages 'cos other languages
have at least append (python: a=arr.append(x); javascript: a=arr.push(x) ).
$ Runsun Pan, PhD $ libs: doctest , faces ( git ), offline doc ( git ), runscad.py ( 2 , git ), synwrite ( 2 ); $ tips: hash ( 2 ), matrix ( 2 , 3 ), sweep ( 2 , 3 ), var ( 2 ), lerp , animation ( gif , prodVid , animlib ), precision ( 2 ), xl-control , type , rounded polygon , chfont , tailRecur ( 2, 3 ), isosphere ( 2 ), area , vol/center , RGB , CurvedImg , tests ( 2 ), text ; $ Apps: rollApp , blockscad , openjscad , on AWS ( pdf )
View this message in context: http://forum.openscad.org/Regarding-the-multiple-generator-expression-in-the-snapshot-2016-10-4-tp19098p19109.html
Sent from the OpenSCAD mailing list archive at Nabble.com.
@Ronaldo:
I think the append/prepend are useful before the new snapshot is formalized.
It is also handy for ppl coming from other languages 'cos other languages
have at least append (python: a=arr.append(x); javascript: a=arr.push(x) ).
-----
$ Runsun Pan, PhD $ libs: doctest , faces ( git ), offline doc ( git ), runscad.py ( 2 , git ), synwrite ( 2 ); $ tips: hash ( 2 ), matrix ( 2 , 3 ), sweep ( 2 , 3 ), var ( 2 ), lerp , animation ( gif , prodVid , animlib ), precision ( 2 ), xl-control , type , rounded polygon , chfont , tailRecur ( 2, 3 ), isosphere ( 2 ), area , vol/center , RGB , CurvedImg , tests ( 2 ), text ; $ Apps: rollApp , blockscad , openjscad , on AWS ( pdf )
--
View this message in context: http://forum.openscad.org/Regarding-the-multiple-generator-expression-in-the-snapshot-2016-10-4-tp19098p19109.html
Sent from the OpenSCAD mailing list archive at Nabble.com.