discuss@lists.openscad.org

OpenSCAD general discussion Mailing-list

View all threads

Assign Depreciated Then?

P
Pyr3x
Thu, Nov 10, 2016 6:05 PM

Excuse me for asking what might be a stupid question but if assign is being
phased out what would be the better option for me in the case of the code
below:

module Curve(p1, p2, cursor, steps = 5, filled = true)
{
stepsize1 = (cursor - p1) / steps;
stepsize2 = (p2 - cursor) / steps;

for (i = [0:steps - 1])
{
	assign(point1 = p1 + stepsize1 * i)
	assign(point2 = cursor + stepsize2 * i)
	assign(point3 = p1 + stepsize1 * (i + 1))
	assign(point4 = cursor + stepsize2 * (i + 1)) 
	{
		assign(bpoint1 = point1 + (point2 - point1) * (i / steps))
		assign(bpoint2 = point3 + (point4 - point3) * ((i + 1) / steps))
			polygon(points = [bpoint1, bpoint2, filled ? p1 : cursor]);
	}
}

}

--
View this message in context: http://forum.openscad.org/Assign-Depreciated-Then-tp19018.html
Sent from the OpenSCAD mailing list archive at Nabble.com.

Excuse me for asking what might be a stupid question but if assign is being phased out what would be the better option for me in the case of the code below: module Curve(p1, p2, cursor, steps = 5, filled = true) { stepsize1 = (cursor - p1) / steps; stepsize2 = (p2 - cursor) / steps; for (i = [0:steps - 1]) { assign(point1 = p1 + stepsize1 * i) assign(point2 = cursor + stepsize2 * i) assign(point3 = p1 + stepsize1 * (i + 1)) assign(point4 = cursor + stepsize2 * (i + 1)) { assign(bpoint1 = point1 + (point2 - point1) * (i / steps)) assign(bpoint2 = point3 + (point4 - point3) * ((i + 1) / steps)) polygon(points = [bpoint1, bpoint2, filled ? p1 : cursor]); } } } -- View this message in context: http://forum.openscad.org/Assign-Depreciated-Then-tp19018.html Sent from the OpenSCAD mailing list archive at Nabble.com.
P
Pyr3x
Thu, Nov 10, 2016 6:10 PM

Never mind I am an idiot... Sorry

module Curve(p1, p2, cursor, steps = 5, filled = true)
{
stepsize1 = (cursor - p1) / steps;
stepsize2 = (p2 - cursor) / steps;

for (i = [0:steps - 1])
{
	point1 = p1 + stepsize1 * i;
	point2 = cursor + stepsize2 * i;
	point3 = p1 + stepsize1 * (i + 1);
	point4 = cursor + stepsize2 * (i + 1);
	{
		bpoint1 = point1 + (point2 - point1) * (i / steps);
		bpoint2 = point3 + (point4 - point3) * ((i + 1) / steps);
		polygon(points = [bpoint1, bpoint2, filled ? p1 : cursor]);
	}
}

}

--
View this message in context: http://forum.openscad.org/Assign-Depreciated-Then-tp19018p19019.html
Sent from the OpenSCAD mailing list archive at Nabble.com.

Never mind I am an idiot... Sorry module Curve(p1, p2, cursor, steps = 5, filled = true) { stepsize1 = (cursor - p1) / steps; stepsize2 = (p2 - cursor) / steps; for (i = [0:steps - 1]) { point1 = p1 + stepsize1 * i; point2 = cursor + stepsize2 * i; point3 = p1 + stepsize1 * (i + 1); point4 = cursor + stepsize2 * (i + 1); { bpoint1 = point1 + (point2 - point1) * (i / steps); bpoint2 = point3 + (point4 - point3) * ((i + 1) / steps); polygon(points = [bpoint1, bpoint2, filled ? p1 : cursor]); } } } -- View this message in context: http://forum.openscad.org/Assign-Depreciated-Then-tp19018p19019.html Sent from the OpenSCAD mailing list archive at Nabble.com.
RP
Ronaldo Persiano
Thu, Nov 10, 2016 6:51 PM

Never mind I am an idiot... Sorry

module Curve(p1, p2, cursor, steps = 5, filled = true)
{
stepsize1 = (cursor - p1) / steps;
stepsize2 = (p2 - cursor) / steps;

     for (i = [0:steps - 1])
     {
             point1 = p1 + stepsize1 * i;
             point2 = cursor + stepsize2 * i;
             point3 = p1 + stepsize1 * (i + 1);
             point4 = cursor + stepsize2 * (i + 1);
             {
                     bpoint1 = point1 + (point2 - point1) * (i / steps);
                     bpoint2 = point3 + (point4 - point3) * ((i + 1) /

steps);
polygon(points = [bpoint1, bpoint2, filled ? p1 :
cursor]);
}
}
}

--
View this message in context: http://forum.openscad.org/
Assign-Depreciated-Then-tp19018p19019.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

https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/General#Variables 2016-11-10 16:10 GMT-02:00 Pyr3x <pyrex@xploit.ninja>: > Never mind I am an idiot... Sorry > > > module Curve(p1, p2, cursor, steps = 5, filled = true) > { > stepsize1 = (cursor - p1) / steps; > stepsize2 = (p2 - cursor) / steps; > > for (i = [0:steps - 1]) > { > point1 = p1 + stepsize1 * i; > point2 = cursor + stepsize2 * i; > point3 = p1 + stepsize1 * (i + 1); > point4 = cursor + stepsize2 * (i + 1); > { > bpoint1 = point1 + (point2 - point1) * (i / steps); > bpoint2 = point3 + (point4 - point3) * ((i + 1) / > steps); > polygon(points = [bpoint1, bpoint2, filled ? p1 : > cursor]); > } > } > } > > > > -- > View this message in context: http://forum.openscad.org/ > Assign-Depreciated-Then-tp19018p19019.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 >
NH
nop head
Thu, Nov 10, 2016 8:06 PM

Problem is not all braces create a new scope so I have to use for(var =
value) instead of assign(var = value) in the odd place.

On 10 November 2016 at 18:51, Ronaldo Persiano rcmpersiano@gmail.com
wrote:

Never mind I am an idiot... Sorry

module Curve(p1, p2, cursor, steps = 5, filled = true)
{
stepsize1 = (cursor - p1) / steps;
stepsize2 = (p2 - cursor) / steps;

     for (i = [0:steps - 1])
     {
             point1 = p1 + stepsize1 * i;
             point2 = cursor + stepsize2 * i;
             point3 = p1 + stepsize1 * (i + 1);
             point4 = cursor + stepsize2 * (i + 1);
             {
                     bpoint1 = point1 + (point2 - point1) * (i /

steps);
bpoint2 = point3 + (point4 - point3) * ((i + 1) /
steps);
polygon(points = [bpoint1, bpoint2, filled ? p1 :
cursor]);
}
}
}

--
View this message in context: http://forum.openscad.org/Assi
gn-Depreciated-Then-tp19018p19019.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

Problem is not all braces create a new scope so I have to use for(var = value) instead of assign(var = value) in the odd place. On 10 November 2016 at 18:51, Ronaldo Persiano <rcmpersiano@gmail.com> wrote: > https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/General#Variables > > > 2016-11-10 16:10 GMT-02:00 Pyr3x <pyrex@xploit.ninja>: > >> Never mind I am an idiot... Sorry >> >> >> module Curve(p1, p2, cursor, steps = 5, filled = true) >> { >> stepsize1 = (cursor - p1) / steps; >> stepsize2 = (p2 - cursor) / steps; >> >> for (i = [0:steps - 1]) >> { >> point1 = p1 + stepsize1 * i; >> point2 = cursor + stepsize2 * i; >> point3 = p1 + stepsize1 * (i + 1); >> point4 = cursor + stepsize2 * (i + 1); >> { >> bpoint1 = point1 + (point2 - point1) * (i / >> steps); >> bpoint2 = point3 + (point4 - point3) * ((i + 1) / >> steps); >> polygon(points = [bpoint1, bpoint2, filled ? p1 : >> cursor]); >> } >> } >> } >> >> >> >> -- >> View this message in context: http://forum.openscad.org/Assi >> gn-Depreciated-Then-tp19018p19019.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 >> > > > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org > >
RP
Ronaldo Persiano
Thu, Nov 10, 2016 9:43 PM

nophead, it would be nice to have a note on this in the Manual.

2016-11-10 18:06 GMT-02:00 nop head nop.head@gmail.com:

Problem is not all braces create a new scope so I have to use for(var =
value) instead of assign(var = value) in the odd place.

On 10 November 2016 at 18:51, Ronaldo Persiano rcmpersiano@gmail.com
wrote:

Never mind I am an idiot... Sorry

module Curve(p1, p2, cursor, steps = 5, filled = true)
{
stepsize1 = (cursor - p1) / steps;
stepsize2 = (p2 - cursor) / steps;

     for (i = [0:steps - 1])
     {
             point1 = p1 + stepsize1 * i;
             point2 = cursor + stepsize2 * i;
             point3 = p1 + stepsize1 * (i + 1);
             point4 = cursor + stepsize2 * (i + 1);
             {
                     bpoint1 = point1 + (point2 - point1) * (i /

steps);
bpoint2 = point3 + (point4 - point3) * ((i + 1)
/ steps);
polygon(points = [bpoint1, bpoint2, filled ? p1
: cursor]);
}
}
}

--
View this message in context: http://forum.openscad.org/Assi
gn-Depreciated-Then-tp19018p19019.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

nophead, it would be nice to have a note on this in the Manual. 2016-11-10 18:06 GMT-02:00 nop head <nop.head@gmail.com>: > Problem is not all braces create a new scope so I have to use for(var = > value) instead of assign(var = value) in the odd place. > > On 10 November 2016 at 18:51, Ronaldo Persiano <rcmpersiano@gmail.com> > wrote: > >> https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/General#Variables >> >> >> 2016-11-10 16:10 GMT-02:00 Pyr3x <pyrex@xploit.ninja>: >> >>> Never mind I am an idiot... Sorry >>> >>> >>> module Curve(p1, p2, cursor, steps = 5, filled = true) >>> { >>> stepsize1 = (cursor - p1) / steps; >>> stepsize2 = (p2 - cursor) / steps; >>> >>> for (i = [0:steps - 1]) >>> { >>> point1 = p1 + stepsize1 * i; >>> point2 = cursor + stepsize2 * i; >>> point3 = p1 + stepsize1 * (i + 1); >>> point4 = cursor + stepsize2 * (i + 1); >>> { >>> bpoint1 = point1 + (point2 - point1) * (i / >>> steps); >>> bpoint2 = point3 + (point4 - point3) * ((i + 1) >>> / steps); >>> polygon(points = [bpoint1, bpoint2, filled ? p1 >>> : cursor]); >>> } >>> } >>> } >>> >>> >>> >>> -- >>> View this message in context: http://forum.openscad.org/Assi >>> gn-Depreciated-Then-tp19018p19019.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 >>> >> >> >> _______________________________________________ >> OpenSCAD mailing list >> Discuss@lists.openscad.org >> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >> >> > > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org > >
NH
nop head
Thu, Nov 10, 2016 10:15 PM

Well in my mind deprecating assign was a mistake unless all braces create a
new scope but some people objected to that as they used braces to fold
things in their editor.

On 10 November 2016 at 21:43, Ronaldo Persiano rcmpersiano@gmail.com
wrote:

nophead, it would be nice to have a note on this in the Manual.

2016-11-10 18:06 GMT-02:00 nop head nop.head@gmail.com:

Problem is not all braces create a new scope so I have to use for(var =
value) instead of assign(var = value) in the odd place.

On 10 November 2016 at 18:51, Ronaldo Persiano rcmpersiano@gmail.com
wrote:

Never mind I am an idiot... Sorry

module Curve(p1, p2, cursor, steps = 5, filled = true)
{
stepsize1 = (cursor - p1) / steps;
stepsize2 = (p2 - cursor) / steps;

     for (i = [0:steps - 1])
     {
             point1 = p1 + stepsize1 * i;
             point2 = cursor + stepsize2 * i;
             point3 = p1 + stepsize1 * (i + 1);
             point4 = cursor + stepsize2 * (i + 1);
             {
                     bpoint1 = point1 + (point2 - point1) * (i /

steps);
bpoint2 = point3 + (point4 - point3) * ((i + 1)
/ steps);
polygon(points = [bpoint1, bpoint2, filled ? p1
: cursor]);
}
}
}

--
View this message in context: http://forum.openscad.org/Assi
gn-Depreciated-Then-tp19018p19019.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

Well in my mind deprecating assign was a mistake unless all braces create a new scope but some people objected to that as they used braces to fold things in their editor. On 10 November 2016 at 21:43, Ronaldo Persiano <rcmpersiano@gmail.com> wrote: > nophead, it would be nice to have a note on this in the Manual. > > 2016-11-10 18:06 GMT-02:00 nop head <nop.head@gmail.com>: > >> Problem is not all braces create a new scope so I have to use for(var = >> value) instead of assign(var = value) in the odd place. >> >> On 10 November 2016 at 18:51, Ronaldo Persiano <rcmpersiano@gmail.com> >> wrote: >> >>> https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/General#Variables >>> >>> >>> 2016-11-10 16:10 GMT-02:00 Pyr3x <pyrex@xploit.ninja>: >>> >>>> Never mind I am an idiot... Sorry >>>> >>>> >>>> module Curve(p1, p2, cursor, steps = 5, filled = true) >>>> { >>>> stepsize1 = (cursor - p1) / steps; >>>> stepsize2 = (p2 - cursor) / steps; >>>> >>>> for (i = [0:steps - 1]) >>>> { >>>> point1 = p1 + stepsize1 * i; >>>> point2 = cursor + stepsize2 * i; >>>> point3 = p1 + stepsize1 * (i + 1); >>>> point4 = cursor + stepsize2 * (i + 1); >>>> { >>>> bpoint1 = point1 + (point2 - point1) * (i / >>>> steps); >>>> bpoint2 = point3 + (point4 - point3) * ((i + 1) >>>> / steps); >>>> polygon(points = [bpoint1, bpoint2, filled ? p1 >>>> : cursor]); >>>> } >>>> } >>>> } >>>> >>>> >>>> >>>> -- >>>> View this message in context: http://forum.openscad.org/Assi >>>> gn-Depreciated-Then-tp19018p19019.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 >>>> >>> >>> >>> _______________________________________________ >>> OpenSCAD mailing list >>> Discuss@lists.openscad.org >>> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >>> >>> >> >> _______________________________________________ >> OpenSCAD mailing list >> Discuss@lists.openscad.org >> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >> >> > > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org > >
MK
Marius Kintel
Thu, Nov 10, 2016 10:52 PM

On Nov 10, 2016, at 17:15, nop head nop.head@gmail.com wrote:

Well in my mind deprecating assign was a mistake unless all braces create a new scope but some people objected to that as they used braces to fold things in their editor.

That’s a bit hard to enforce without breaking old designs.
Perhaps we should deprecate that behavior as well (unscoped braces). Just not sure how to best deal with backwards compatibility.

-Marius

> On Nov 10, 2016, at 17:15, nop head <nop.head@gmail.com> wrote: > > Well in my mind deprecating assign was a mistake unless all braces create a new scope but some people objected to that as they used braces to fold things in their editor. > That’s a bit hard to enforce without breaking old designs. Perhaps we should deprecate that behavior as well (unscoped braces). Just not sure how to best deal with backwards compatibility. -Marius
M
MichaelAtOz
Thu, Nov 10, 2016 11:00 PM

Replace assign() with let()? [I don't know where let() came from]


Admin - PM me if you need anything, or if I've done something stupid...

Unless specifically shown otherwise above, my contribution is in the Public Domain; to the extent possible under law, I have waived all copyright and related or neighbouring rights to this work. Obviously inclusion of works of previous authors is not included in the above.

The TPP is no simple “trade agreement.”  Fight it! http://www.ourfairdeal.org/  time is running out!

View this message in context: http://forum.openscad.org/Assign-Depreciated-Then-tp19018p19025.html
Sent from the OpenSCAD mailing list archive at Nabble.com.

Replace assign() with let()? [I don't know where let() came from] ----- Admin - PM me if you need anything, or if I've done something stupid... Unless specifically shown otherwise above, my contribution is in the Public Domain; to the extent possible under law, I have waived all copyright and related or neighbouring rights to this work. Obviously inclusion of works of previous authors is not included in the above. The TPP is no simple “trade agreement.” Fight it! http://www.ourfairdeal.org/ time is running out! -- View this message in context: http://forum.openscad.org/Assign-Depreciated-Then-tp19018p19025.html Sent from the OpenSCAD mailing list archive at Nabble.com.
DM
doug moen
Thu, Nov 10, 2016 11:42 PM

I don't think that forcing people to replace assign() with for() is
acceptable. Because you are encouraging people to exploit a bug in for()
[which I think should be fixed] in order to work around the fact that
assign() prints a deprecation warning.

The easiest way out is to undeprecate assign(), as Nop Head suggested.

If you want people to use {} in preference to assign(), then fix it so that
it works correctly. This means fixing the "unscoped braces" bug, even
though there is a person or maybe some people who have started exploiting
the bug in their own code. And yeah, fixing language bugs usually raises
backward compatibility issues in OpenSCAD. Maybe a broader discussion needs
to occur around this issue of fixing bugs and backwards compatibility.

On 10 November 2016 at 17:52, Marius Kintel marius@kintel.net wrote:

On Nov 10, 2016, at 17:15, nop head nop.head@gmail.com wrote:

Well in my mind deprecating assign was a mistake unless all braces

create a new scope but some people objected to that as they used braces to
fold things in their editor.

That’s a bit hard to enforce without breaking old designs.
Perhaps we should deprecate that behavior as well (unscoped braces). Just
not sure how to best deal with backwards compatibility.

-Marius


OpenSCAD mailing list
Discuss@lists.openscad.org
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org

I don't think that forcing people to replace assign() with for() is acceptable. Because you are encouraging people to exploit a bug in for() [which I think should be fixed] in order to work around the fact that assign() prints a deprecation warning. The easiest way out is to undeprecate assign(), as Nop Head suggested. If you want people to use {} in preference to assign(), then fix it so that it works correctly. This means fixing the "unscoped braces" bug, even though there is a person or maybe some people who have started exploiting the bug in their own code. And yeah, fixing language bugs usually raises backward compatibility issues in OpenSCAD. Maybe a broader discussion needs to occur around this issue of fixing bugs and backwards compatibility. On 10 November 2016 at 17:52, Marius Kintel <marius@kintel.net> wrote: > > On Nov 10, 2016, at 17:15, nop head <nop.head@gmail.com> wrote: > > > > Well in my mind deprecating assign was a mistake unless all braces > create a new scope but some people objected to that as they used braces to > fold things in their editor. > > > That’s a bit hard to enforce without breaking old designs. > Perhaps we should deprecate that behavior as well (unscoped braces). Just > not sure how to best deal with backwards compatibility. > > -Marius > > > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >
NH
nop head
Fri, Nov 11, 2016 12:13 AM

My guess would be using braces to collapse assignments in an editor must be
a pretty obscure use case. Is there more than one person that does this?

On 10 November 2016 at 23:42, doug moen doug@moens.org wrote:

I don't think that forcing people to replace assign() with for() is
acceptable. Because you are encouraging people to exploit a bug in for()
[which I think should be fixed] in order to work around the fact that
assign() prints a deprecation warning.

The easiest way out is to undeprecate assign(), as Nop Head suggested.

If you want people to use {} in preference to assign(), then fix it so
that it works correctly. This means fixing the "unscoped braces" bug, even
though there is a person or maybe some people who have started exploiting
the bug in their own code. And yeah, fixing language bugs usually raises
backward compatibility issues in OpenSCAD. Maybe a broader discussion needs
to occur around this issue of fixing bugs and backwards compatibility.

On 10 November 2016 at 17:52, Marius Kintel marius@kintel.net wrote:

On Nov 10, 2016, at 17:15, nop head nop.head@gmail.com wrote:

Well in my mind deprecating assign was a mistake unless all braces

create a new scope but some people objected to that as they used braces to
fold things in their editor.

That’s a bit hard to enforce without breaking old designs.
Perhaps we should deprecate that behavior as well (unscoped braces). Just
not sure how to best deal with backwards compatibility.

-Marius


OpenSCAD mailing list
Discuss@lists.openscad.org
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org

My guess would be using braces to collapse assignments in an editor must be a pretty obscure use case. Is there more than one person that does this? On 10 November 2016 at 23:42, doug moen <doug@moens.org> wrote: > I don't think that forcing people to replace assign() with for() is > acceptable. Because you are encouraging people to exploit a bug in for() > [which I think should be fixed] in order to work around the fact that > assign() prints a deprecation warning. > > The easiest way out is to undeprecate assign(), as Nop Head suggested. > > If you want people to use {} in preference to assign(), then fix it so > that it works correctly. This means fixing the "unscoped braces" bug, even > though there is a person or maybe some people who have started exploiting > the bug in their own code. And yeah, fixing language bugs usually raises > backward compatibility issues in OpenSCAD. Maybe a broader discussion needs > to occur around this issue of fixing bugs and backwards compatibility. > > On 10 November 2016 at 17:52, Marius Kintel <marius@kintel.net> wrote: > >> > On Nov 10, 2016, at 17:15, nop head <nop.head@gmail.com> wrote: >> > >> > Well in my mind deprecating assign was a mistake unless all braces >> create a new scope but some people objected to that as they used braces to >> fold things in their editor. >> > >> That’s a bit hard to enforce without breaking old designs. >> Perhaps we should deprecate that behavior as well (unscoped braces). Just >> not sure how to best deal with backwards compatibility. >> >> -Marius >> >> >> _______________________________________________ >> OpenSCAD mailing list >> Discuss@lists.openscad.org >> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >> > > > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org > >