assignments in for loops

classic Classic list List threaded Threaded
21 messages Options
12
Reply | Threaded
Open this post in threaded view
|

assignments in for loops

kintel
Administrator
Hi all,

Looking into how to implement more logical scoping of assignments, I made a patch which makes this possible:

for (i=[0:10], d=sin(36*i)) {
  echo(d);
}

Does this resonate with any of you guys' needs?

I'm looking into variable assignments inside non-module scopes next.
Wishes, use-cases, corner cases, examples etc. are welcome!

Cheers,

 -Marius


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

Drew Rogge
I would think a more common approach would be:

for (i=[0:10]) {
    d=sin(36*i);
    echo(d);
}

This is the C style that nop head (I think) mentioned. If you consider a pair
of curly braces a "block" then assignment at the top of a block is allowed,
variable names are local to that block and override any other variable of the
same name while the block is active. Calls to modules outside the block make
the block inactive until the called module returns.

To be honest, I'm not sure what the desire is to keep OpenSCAD a functional
language. I think one could do everything in a language that had syntax similar
to C or python that one could do in OpenSCAD. If the simple declarative nature
of OpenSCAD is desirable then just avoid the extensions. Is there a need to
invent another language? Climbing down off my soap box now :-)

Drew

On 4/18/13 6:34 PM, Marius Kintel wrote:

> Hi all,
>
> Looking into how to implement more logical scoping of assignments, I made a patch which makes this possible:
>
> for (i=[0:10], d=sin(36*i)) {
>    echo(d);
> }
>
> Does this resonate with any of you guys' needs?
>
> I'm looking into variable assignments inside non-module scopes next.
> Wishes, use-cases, corner cases, examples etc. are welcome!
>
> Cheers,
>
>   -Marius
>
>
> _______________________________________________
> OpenSCAD mailing list
> [hidden email]
> http://rocklinux.net/mailman/listinfo/openscad
> http://openscad.org - https://flattr.com/thing/121566
>
_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

kintel
Administrator
On 2013-04-18, at 22:16 , Drew Rogge wrote:

> I would think a more common approach would be:
>
> for (i=[0:10]) {
>    d=sin(36*i);

Yes, but this would encompass syntax changes, which is more work.

> Is there a need to invent another language?

OpenSCAD is already here, so w're dealing with iterative changes from what's already in place, and sometimes improving/generalizing concepts.

If we ever were to create a new version of the language, we would probably think it though a fair bit before starting to hack on it , and using an existing language/interpreter as a basis would be an idea.

 -Marius

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

nophead
Yes Drew's version is the normal syntax people would expect and semantically identical I think, so looks like it would be just as easy to implement. 


On 19 April 2013 03:32, Marius Kintel <[hidden email]> wrote:
On 2013-04-18, at 22:16 , Drew Rogge wrote:

> I would think a more common approach would be:
>
> for (i=[0:10]) {
>    d=sin(36*i);

Yes, but this would encompass syntax changes, which is more work.

> Is there a need to invent another language?

OpenSCAD is already here, so w're dealing with iterative changes from what's already in place, and sometimes improving/generalizing concepts.

If we ever were to create a new version of the language, we would probably think it though a fair bit before starting to hack on it , and using an existing language/interpreter as a basis would be an idea.

 -Marius

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

Jason Essington
In reply to this post by kintel
I usually solve this sort of problem (today) with a function:

function d(i) = sin(36*1);

for (i=[0:10]) {
 echo(d(i));
}

-jason


On Apr 18, 2013, at 7:34 PM, Marius Kintel wrote:

Hi all,

Looking into how to implement more logical scoping of assignments, I made a patch which makes this possible:

for (i=[0:10], d=sin(36*i)) {
 echo(d);
}

Does this resonate with any of you guys' needs?

I'm looking into variable assignments inside non-module scopes next.
Wishes, use-cases, corner cases, examples etc. are welcome!

Cheers,

-Marius


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

Miro Hrončok

36*i, right?

Dne 19.4.2013 16:28 "Jason Essington" <[hidden email]> napsal(a):
I usually solve this sort of problem (today) with a function:

function d(i) = sin(36*1);

for (i=[0:10]) {
 echo(d(i));
}

-jason


On Apr 18, 2013, at 7:34 PM, Marius Kintel wrote:

Hi all,

Looking into how to implement more logical scoping of assignments, I made a patch which makes this possible:

for (i=[0:10], d=sin(36*i)) {
 echo(d);
}

Does this resonate with any of you guys' needs?

I'm looking into variable assignments inside non-module scopes next.
Wishes, use-cases, corner cases, examples etc. are welcome!

Cheers,

-Marius


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

Jason Essington
yeah "i" ... 

Basically rather than doing an assignment, I move that calculation to a function ...

If the value, d(i) in this case, is used quite often in each iteration of the loop, and the calculation is time consuming, this could certainly slow down rendering though as the calculation would need to be run each time the value is used.

-jason


On Apr 19, 2013, at 8:33 AM, Miro Hrončok wrote:

36*i, right?

Dne 19.4.2013 16:28 "Jason Essington" <[hidden email]> napsal(a):
I usually solve this sort of problem (today) with a function:

function d(i) = sin(36*i);

for (i=[0:10]) {
 echo(d(i));
}

-jason

On Apr 18, 2013, at 7:34 PM, Marius Kintel wrote:

Hi all,

Looking into how to implement more logical scoping of assignments, I made a patch which makes this possible:

for (i=[0:10], d=sin(36*i)) {
 echo(d);
}

Does this resonate with any of you guys' needs?

I'm looking into variable assignments inside non-module scopes next.
Wishes, use-cases, corner cases, examples etc. are welcome!

Cheers,

-Marius


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

kintel
Administrator
On 2013-04-19, at 10:39 , Jason Essington wrote:

> If the value, d(i) in this case, is used quite often in each iteration of the loop, and the calculation is time consuming, this could certainly slow down rendering though as the calculation would need to be run each time the value is used.
>
..but is perfectly cacheable.
I feel there are more important things to optimize at the moment though.

 -Marius

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

kintel
Administrator
In reply to this post by nophead
On 2013-04-19, at 07:53 , nop head wrote:

> Yes Drew's version is the normal syntax people would expect and semantically identical I think, so looks like it would be just as easy to implement.
>
Not quite the same, but it should be doable without too much trouble, plus it would force me to further refactor and generalize this.

The for() module is special in that it "leaks" variables from its parameter list to the children scope. I don't think any other module should do this.
The real feature I suggested shouldn't be limited to for loops, but make parameters depend on each other:

module mymodule(a, b=a/2) {
  square([a,b]);
}
mymodule(10);

I think this makes sense, but I still need someone to stress test this to discover corner cases.

I'll continue looking into supporting variables in children scopes.
The same corner case discovery issues goes there, so if anyone wants to go crazy - I need test cases.

 -Marius

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

nophead
That is a nice feature but I think being able to define new variables after an open brace rather that wrap assigns around block is a syntactically cleaner way of achieving the same thing.

How is assign(a =1) {  ... } any different from { a = 1; ... } other than syntax?




On 19 April 2013 15:47, Marius Kintel <[hidden email]> wrote:
On 2013-04-19, at 07:53 , nop head wrote:

> Yes Drew's version is the normal syntax people would expect and semantically identical I think, so looks like it would be just as easy to implement.
>
Not quite the same, but it should be doable without too much trouble, plus it would force me to further refactor and generalize this.

The for() module is special in that it "leaks" variables from its parameter list to the children scope. I don't think any other module should do this.
The real feature I suggested shouldn't be limited to for loops, but make parameters depend on each other:

module mymodule(a, b=a/2) {
  square([a,b]);
}
mymodule(10);

I think this makes sense, but I still need someone to stress test this to discover corner cases.

I'll continue looking into supporting variables in children scopes.
The same corner case discovery issues goes there, so if anyone wants to go crazy - I need test cases.

 -Marius

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

kintel
Administrator
On 2013-04-19, at 10:58 , nop head wrote:

> How is assign(a =1) {  ... } any different from { a = 1; ... } other than syntax?
>
It's mostly syntax (apart from assign performing an implicit union).

 -Marius

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

Whosawhatsis
Speaking of which, it would be really nice if we could do a for loop without the implicit union, so that the iterations from the loop would be passed as separate children to the parent module. This would negate the need for intersection_for(), and would be useful for other modules that make the children interact with each other in ways other than a union, like my chain_hull() module: https://plus.google.com/u/0/105535247347788377245/posts/aZGXKFX1ACN

On Friday, April 19, 2013 at 8:05 AM, Marius Kintel wrote:

On 2013-04-19, at 10:58 , nop head wrote:

How is assign(a =1) { ... } any different from { a = 1; ... } other than syntax?
It's mostly syntax (apart from assign performing an implicit union).

-Marius

_______________________________________________
OpenSCAD mailing list


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

kintel
Administrator
On 2013-04-19, at 14:05 , whosawhatsis wrote:

> Speaking of which, it would be really nice if we could do a for loop without the implicit union,

I agree - the implicit union should only happen in the rare case where the parent scope cannot handle lists of children (like the top-level scope).

 -Marius
_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

Peter Falke
In reply to this post by kintel
// Here are a few cases I can think of:

// by TakeItAndRun


// logical scoping of assignments

// simple

for (i=[0:2], d=sin(36*i)) {

echo(d);

}


// more than one assignment, and without brackets

for (i=[0:2],a=i+1,b=i-1)

echo(i,a,b);


// assignment by assignment

for (i=[0:2],a=2*i,b=a+1){

echo(i,a,b);

}


// assignment by vector

prim=[1,2,3,5,7,11];

for (i=[0:2],a=prim[i+3])

echo(i,a);


// vectot assignment

for (i=[0:2],a=[2*i,3*i,4*i])

echo(i,a);


// divide by zero

for(i=[0:2],a=1/i)

echo(i,a);


// undefined assignment

v=[1,1];

for(i=[0:2],a=v[i])

echo(i,a);



// assignment by function

function f(i)=3.3*i;

for (i=[0:2],a=2*f(i))

echo(i,a);


// string assignment

for (i=[0:2],str1=str(i))

echo(i,str1);


// constant assignment

for(i=[0:2],a=3)

echo(i,a);


// conditional assignments

for(i=[0:2],a=(i=1)?3:2)

echo(i,a);


// assignment of special variables

for(i=[0:2],$fn=10*i){

echo(i,$fn);

circle(3);

}


// assignment of special variables:

// "bad, very bad!"

// or OpenSCAD and time travel

for(i=[0:2],$t=10*i){

echo(i,$t);

translate([i*10,-10,0])circle(3);

}


// assignment of boolean variables

for(i=[0:2],bool=(i=1)?true:false){

echo(i,bool);

if (bool) translate([i*10,10,0])square(3);

}



// sub-vectors (I know, different thread, but I now understand how far U could go together with recursion .-)

v=[0,1,0,1];

for (i=[0:len(v)-1],v2=v[i:])

echo(i,v2);


// lets not forget intersection_for, but I never used it befor :-)


// intersection_for (<loop_variable_name> = <vector_of_vectors>) {...}



On 19 April 2013 04:32, Marius Kintel <[hidden email]> wrote:
On 2013-04-18, at 22:16 , Drew Rogge wrote:

> I would think a more common approach would be:
>
> for (i=[0:10]) {
>    d=sin(36*i);

Yes, but this would encompass syntax changes, which is more work.

> Is there a need to invent another language?

OpenSCAD is already here, so w're dealing with iterative changes from what's already in place, and sometimes improving/generalizing concepts.

If we ever were to create a new version of the language, we would probably think it though a fair bit before starting to hack on it , and using an existing language/interpreter as a basis would be an idea.

 -Marius

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566



--
[hidden email]

P.S. Falls meine E-Mail kürzer ausfällt als Dir angenehm ist:
Ich probiere gerade aus kurze Antworten statt gar keine Antworten zu schreiben.
Wenn Du gerne mehr lesen möchtest, dann lass es mich bitte wissen.

P.S. In case my e-mail is shorter than you enjoy:
I am currently trying short replies instead of no replies at all.
Please let me know, if you like to read more.

Enjoy!

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

kintel
Administrator
On 2013-04-19, at 16:03 , Peter Falke wrote:

> // Here are a few cases I can think of:

Thanks - I made some minor changes (syntax errors).
I've attached the new .scad file and the output when running it with my experimental branch.

 -Marius




_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566

for-assignments.scad (1K) Download Attachment
for-assignments-output.txt (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

Peter Falke
// Here are three more case I can think of:

echo(" re- assignment");

for (i=[0:2],a=2*i,a=i+1){

echo(i,a);

}


echo(" re- assignment by assingment");

for (i=[0:2],a=2*i,a=a+1){

echo(i,a);

}


echo(" assignment to loop variable");

for (i=[0:2],i=i+1){

echo(i,i);

}






On 19 April 2013 23:31, Marius Kintel <[hidden email]> wrote:
On 2013-04-19, at 16:03 , Peter Falke wrote:

> // Here are a few cases I can think of:

Thanks - I made some minor changes (syntax errors).
I've attached the new .scad file and the output when running it with my experimental branch.

 -Marius




_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566



--
[hidden email]

P.S. Falls meine E-Mail kürzer ausfällt als Dir angenehm ist:
Ich probiere gerade aus kurze Antworten statt gar keine Antworten zu schreiben.
Wenn Du gerne mehr lesen möchtest, dann lass es mich bitte wissen.

P.S. In case my e-mail is shorter than you enjoy:
I am currently trying short replies instead of no replies at all.
Please let me know, if you like to read more.

Enjoy!

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

kintel
Administrator
Hi Peter,

Thanks - output below - it all seems to work, even though the last one could be confusing..

 -Marius

On 2013-04-20, at 03:01 , Peter Falke wrote:

> // Here are three more case I can think of:
>
> echo(" re- assignment");
> for (i=[0:2],a=2*i,a=i+1){
> echo(i,a);
> }
ECHO: " re- assignment"
ECHO: 0, 1
ECHO: 1, 2
ECHO: 2, 3
> echo(" re- assignment by assingment");
> for (i=[0:2],a=2*i,a=a+1){
> echo(i,a);
> }
ECHO: " re- assignment by assingment"
ECHO: 0, 1
ECHO: 1, 3
ECHO: 2, 5

> echo(" assignment to loop variable");
> for (i=[0:2],i=i+1){
> echo(i,i);
> }
ECHO: " assignment to loop variable"
ECHO: 1, 1
ECHO: 2, 2
ECHO: 3, 3

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

Peter Falke
Hi Marius,

re-assigment by assignment: I thought OpenSCAD would olny use the last assignment, as done with decleration of 'variable'

i=1;

a=2*i;

a=a+1;


echo(i,a);


Gives:

WARNING: Ignoring unknown variable 'a'.

ECHO: 1, undef


Sincerely,


TakeItAndRun



On 20 April 2013 19:49, Marius Kintel <[hidden email]> wrote:
Hi Peter,

Thanks - output below - it all seems to work, even though the last one could be confusing..

 -Marius

On 2013-04-20, at 03:01 , Peter Falke wrote:

> // Here are three more case I can think of:
>
> echo(" re- assignment");
> for (i=[0:2],a=2*i,a=i+1){
> echo(i,a);
> }
ECHO: " re- assignment"
ECHO: 0, 1
ECHO: 1, 2
ECHO: 2, 3
> echo(" re- assignment by assingment");
> for (i=[0:2],a=2*i,a=a+1){
> echo(i,a);
> }
ECHO: " re- assignment by assingment"
ECHO: 0, 1
ECHO: 1, 3
ECHO: 2, 5

> echo(" assignment to loop variable");
> for (i=[0:2],i=i+1){
> echo(i,i);
> }
ECHO: " assignment to loop variable"
ECHO: 1, 1
ECHO: 2, 2
ECHO: 3, 3

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566



--
[hidden email]

P.S. Falls meine E-Mail kürzer ausfällt als Dir angenehm ist:
Ich probiere gerade aus kurze Antworten statt gar keine Antworten zu schreiben.
Wenn Du gerne mehr lesen möchtest, dann lass es mich bitte wissen.

P.S. In case my e-mail is shorter than you enjoy:
I am currently trying short replies instead of no replies at all.
Please let me know, if you like to read more.

Enjoy!

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

kintel
Administrator
On 2013-04-20, at 15:02 , Peter Falke wrote:

> re-assigment by assignment: I thought OpenSCAD would olny use the last assignment, as done with decleration of 'variable'
>
Parameter lists are handled differently than assignments: They are evaluated in order.
Furthermore, for loops are handled differently in that it will iterate separately over each variable, e.g.

for (i=[0:2], j=[0:1]) echo(i,j);

->

ECHO: 0, 0
ECHO: 0, 1
ECHO: 1, 0
ECHO: 1, 1
ECHO: 2, 0
ECHO: 2, 1

You raise one valid issue though; should we look up assigned variables in a similar way; i.e. in order and thus implicitly allow reassignments? The reassignment would in any case not be very useful, as all assigned variables would be evaluate before actually dealing with any geometry.
Something to think about. I'll look at that while working with generalizing assignments.

 -Marius

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
Reply | Threaded
Open this post in threaded view
|

Re: assignments in for loops

Peter Falke
echo(" assignment with  two loop variables");
  for (i=[0:2],j=[0:2],a=i+j){
  echo(i,,j,a);
}


On 20 April 2013 21:50, Marius Kintel <[hidden email]> wrote:
On 2013-04-20, at 15:02 , Peter Falke wrote:

> re-assigment by assignment: I thought OpenSCAD would olny use the last assignment, as done with decleration of 'variable'
>
Parameter lists are handled differently than assignments: They are evaluated in order.
Furthermore, for loops are handled differently in that it will iterate separately over each variable, e.g.

for (i=[0:2], j=[0:1]) echo(i,j);

->

ECHO: 0, 0
ECHO: 0, 1
ECHO: 1, 0
ECHO: 1, 1
ECHO: 2, 0
ECHO: 2, 1

You raise one valid issue though; should we look up assigned variables in a similar way; i.e. in order and thus implicitly allow reassignments? The reassignment would in any case not be very useful, as all assigned variables would be evaluate before actually dealing with any geometry.
Something to think about. I'll look at that while working with generalizing assignments.

 -Marius

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566



--
[hidden email]

P.S. Falls meine E-Mail kürzer ausfällt als Dir angenehm ist:
Ich probiere gerade aus kurze Antworten statt gar keine Antworten zu schreiben.
Wenn Du gerne mehr lesen möchtest, dann lass es mich bitte wissen.

P.S. In case my e-mail is shorter than you enjoy:
I am currently trying short replies instead of no replies at all.
Please let me know, if you like to read more.

Enjoy!

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://rocklinux.net/mailman/listinfo/openscad
http://openscad.org - https://flattr.com/thing/121566
12