discuss@lists.openscad.org

OpenSCAD general discussion Mailing-list

View all threads

too much WARNING: Bad range parameter in for statement: too many elements

BB
Bruno Boettcher
Sat, May 9, 2020 11:47 AM

Hello,
trying to build a sand filter for my pump, made this :

module SandFilter(partikel = 1, luft = .2, overkill = 1)
{
//halbZollMutter();//need my libs for that one
translate([0,0,11])
{
difference()
{
cylinder(d1=24.3, d2=40, h=20,$fn = 64);
translate([0,0,-1])
cylinder(d1=18.5, d2=36, h=22,$fn = 64);
}
}
pumpFlaeche = PI18.518.5/4;
lochFlAeche = PI * partikelpartikel/4;
anzahl = ceil(PI
18.5/(partikel+luft));
einKreisF = anzahl * lochFlAeche;
kreisAnzahl = ceil(pumpFlaeche/einKreisF)+2;//+2 to compensate for borders
echo("Pf = ",pumpFlaeche, " LF : ", lochFlAeche," * ",anzahl," = ",
einKreisF," * ",kreisAnzahl);
translate([0,0,31])
{
difference()
{
cylinder(d=40, h=overkillkreisAnzahl(partikel+luft),$fn = 64);
union()
{
schritt = 1*(partikel+luft);
translate([0,0,-1])
cylinder(d=36, h=overkillkreisAnzahl(partikel+luft)-1,$fn = 64);
for(y = [1 : schritt:overkill*(kreisAnzahl)(partikel+luft)-1])
{
translate([0,0,y])
for(w = [0 : 360/anzahl:360])
rotate([0,0,w+((y/schritt)%2
90/anzahl)])

color("red")translate([0,30,0])rotate([90,0,0])cylinder(d=partikel,
h=60,$fn = 64);
for(r = [0 : (partikel+luft):18])
for(w = [0 : ceil(PIr/(partikel+luft)):360])
rotate([0,0,w])
translate([0,r,overkill
kreisAnzahl*(partikel+luft)-2])
color("red")cylinder(d=partikel, h=10,$fn = 64);
}
}
}
}
}//module SandFilter(partikel = 1)

problem is here i filter 1mm sand corns, i would like to go down to .2, or
even try .1 but as is, i launched to compilation for 1mm holes 20 min ago
and i am at 34/1000 in the advancement bar :'(

so this doesn't seem to be the right way to do it? what would the correct
one be?

--
ciao
Bruno

---==========
http://nohkumado.eu/, http://bboett.free.frhttp://aikido.nohkumado.eu/,
http://bboett.free.fr
http://aikido.zorn.free.fr

Hello, trying to build a sand filter for my pump, made this : module SandFilter(partikel = 1, luft = .2, overkill = 1) { //halbZollMutter();//need my libs for that one translate([0,0,11]) { difference() { cylinder(d1=24.3, d2=40, h=20,$fn = 64); translate([0,0,-1]) cylinder(d1=18.5, d2=36, h=22,$fn = 64); } } pumpFlaeche = PI*18.5*18.5/4; lochFlAeche = PI * partikel*partikel/4; anzahl = ceil(PI*18.5/(partikel+luft)); einKreisF = anzahl * lochFlAeche; kreisAnzahl = ceil(pumpFlaeche/einKreisF)+2;//+2 to compensate for borders echo("Pf = ",pumpFlaeche, " LF : ", lochFlAeche," * ",anzahl," = ", einKreisF," * ",kreisAnzahl); translate([0,0,31]) { difference() { cylinder(d=40, h=overkill*kreisAnzahl*(partikel+luft),$fn = 64); union() { schritt = 1*(partikel+luft); translate([0,0,-1]) cylinder(d=36, h=overkill*kreisAnzahl*(partikel+luft)-1,$fn = 64); for(y = [1 : schritt:overkill*(kreisAnzahl)*(partikel+luft)-1]) { translate([0,0,y]) for(w = [0 : 360/anzahl:360]) rotate([0,0,w+((y/schritt)%2*90/anzahl)]) color("red")translate([0,30,0])rotate([90,0,0])cylinder(d=partikel, h=60,$fn = 64); for(r = [0 : (partikel+luft):18]) for(w = [0 : ceil(PI*r/(partikel+luft)):360]) rotate([0,0,w]) translate([0,r,overkill*kreisAnzahl*(partikel+luft)-2]) color("red")cylinder(d=partikel, h=10,$fn = 64); } } } } }//module SandFilter(partikel = 1) problem is here i filter 1mm sand corns, i would like to go down to .2, or even try .1 but as is, i launched to compilation for 1mm holes 20 min ago and i am at 34/1000 in the advancement bar :'( so this doesn't seem to be the right way to do it? what would the correct one be? -- ciao Bruno =========================================== http://nohkumado.eu/, <http://bboett.free.fr>http://aikido.nohkumado.eu/, <http://bboett.free.fr> http://aikido.zorn.free.fr
NH
nop head
Sat, May 9, 2020 12:11 PM

I can't follow the code as I don't speak German and the error message I get
from running it doesn't make sense.

ECHO: "Pf = ", 268.803, " LF : ", 314.159, " * ", 3, " = ", 942.478, " * ",
3

WARNING: Bad range parameter in for statement: too many elements
(4294967295), in file RepRaptor, line 36

TRACE: called by 'for', in file RepRaptor, line 36.

TRACE: called by 'for', in file RepRaptor, line 35.

TRACE: called by 'for', in file RepRaptor, line 29.

TRACE: called by 'union', in file RepRaptor, line 24.

TRACE: called by 'difference', in file RepRaptor, line 21.

TRACE: called by 'translate', in file RepRaptor, line 19.

TRACE: called by 'SandFilter', in file RepRaptor, line 47.

The file is Untitled.scad, there is no file called RepRaptor.

I don't know where 4 billion comes from, seems to be 2^32-1.

The likely solution to it being too slow is to do it in 2D and linear
extrude the result.

On Sat, 9 May 2020 at 12:48, Bruno Boettcher bboett@gmail.com wrote:

Hello,
trying to build a sand filter for my pump, made this :

module SandFilter(partikel = 1, luft = .2, overkill = 1)
{
//halbZollMutter();//need my libs for that one
translate([0,0,11])
{
difference()
{
cylinder(d1=24.3, d2=40, h=20,$fn = 64);
translate([0,0,-1])
cylinder(d1=18.5, d2=36, h=22,$fn = 64);
}
}
pumpFlaeche = PI18.518.5/4;
lochFlAeche = PI * partikelpartikel/4;
anzahl = ceil(PI
18.5/(partikel+luft));
einKreisF = anzahl * lochFlAeche;
kreisAnzahl = ceil(pumpFlaeche/einKreisF)+2;//+2 to compensate for
borders
echo("Pf = ",pumpFlaeche, " LF : ", lochFlAeche," * ",anzahl," = ",
einKreisF," * ",kreisAnzahl);
translate([0,0,31])
{
difference()
{
cylinder(d=40, h=overkillkreisAnzahl(partikel+luft),$fn = 64);
union()
{
schritt = 1*(partikel+luft);
translate([0,0,-1])
cylinder(d=36, h=overkillkreisAnzahl(partikel+luft)-1,$fn =
64);
for(y = [1 : schritt:overkill*(kreisAnzahl)(partikel+luft)-1])
{
translate([0,0,y])
for(w = [0 : 360/anzahl:360])
rotate([0,0,w+((y/schritt)%2
90/anzahl)])

color("red")translate([0,30,0])rotate([90,0,0])cylinder(d=partikel,
h=60,$fn = 64);
for(r = [0 : (partikel+luft):18])
for(w = [0 : ceil(PIr/(partikel+luft)):360])
rotate([0,0,w])
translate([0,r,overkill
kreisAnzahl*(partikel+luft)-2])
color("red")cylinder(d=partikel, h=10,$fn = 64);
}
}
}
}
}//module SandFilter(partikel = 1)

problem is here i filter 1mm sand corns, i would like to go down to .2, or
even try .1 but as is, i launched to compilation for 1mm holes 20 min ago
and i am at 34/1000 in the advancement bar :'(

so this doesn't seem to be the right way to do it? what would the correct
one be?

--
ciao
Bruno

---==========
http://nohkumado.eu/, http://bboett.free.frhttp://aikido.nohkumado.eu/,
http://bboett.free.fr
http://aikido.zorn.free.fr


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

I can't follow the code as I don't speak German and the error message I get from running it doesn't make sense. ECHO: "Pf = ", 268.803, " LF : ", 314.159, " * ", 3, " = ", 942.478, " * ", 3 WARNING: Bad range parameter in for statement: too many elements (4294967295), in file RepRaptor, line 36 TRACE: called by 'for', in file RepRaptor, line 36. TRACE: called by 'for', in file RepRaptor, line 35. TRACE: called by 'for', in file RepRaptor, line 29. TRACE: called by 'union', in file RepRaptor, line 24. TRACE: called by 'difference', in file RepRaptor, line 21. TRACE: called by 'translate', in file RepRaptor, line 19. TRACE: called by 'SandFilter', in file RepRaptor, line 47. The file is Untitled.scad, there is no file called RepRaptor. I don't know where 4 billion comes from, seems to be 2^32-1. The likely solution to it being too slow is to do it in 2D and linear extrude the result. On Sat, 9 May 2020 at 12:48, Bruno Boettcher <bboett@gmail.com> wrote: > Hello, > trying to build a sand filter for my pump, made this : > > module SandFilter(partikel = 1, luft = .2, overkill = 1) > { > //halbZollMutter();//need my libs for that one > translate([0,0,11]) > { > difference() > { > cylinder(d1=24.3, d2=40, h=20,$fn = 64); > translate([0,0,-1]) > cylinder(d1=18.5, d2=36, h=22,$fn = 64); > } > } > pumpFlaeche = PI*18.5*18.5/4; > lochFlAeche = PI * partikel*partikel/4; > anzahl = ceil(PI*18.5/(partikel+luft)); > einKreisF = anzahl * lochFlAeche; > kreisAnzahl = ceil(pumpFlaeche/einKreisF)+2;//+2 to compensate for > borders > echo("Pf = ",pumpFlaeche, " LF : ", lochFlAeche," * ",anzahl," = ", > einKreisF," * ",kreisAnzahl); > translate([0,0,31]) > { > difference() > { > cylinder(d=40, h=overkill*kreisAnzahl*(partikel+luft),$fn = 64); > union() > { > schritt = 1*(partikel+luft); > translate([0,0,-1]) > cylinder(d=36, h=overkill*kreisAnzahl*(partikel+luft)-1,$fn = > 64); > for(y = [1 : schritt:overkill*(kreisAnzahl)*(partikel+luft)-1]) > { > translate([0,0,y]) > for(w = [0 : 360/anzahl:360]) > rotate([0,0,w+((y/schritt)%2*90/anzahl)]) > > color("red")translate([0,30,0])rotate([90,0,0])cylinder(d=partikel, > h=60,$fn = 64); > for(r = [0 : (partikel+luft):18]) > for(w = [0 : ceil(PI*r/(partikel+luft)):360]) > rotate([0,0,w]) > translate([0,r,overkill*kreisAnzahl*(partikel+luft)-2]) > color("red")cylinder(d=partikel, h=10,$fn = 64); > } > } > } > } > }//module SandFilter(partikel = 1) > > problem is here i filter 1mm sand corns, i would like to go down to .2, or > even try .1 but as is, i launched to compilation for 1mm holes 20 min ago > and i am at 34/1000 in the advancement bar :'( > > so this doesn't seem to be the right way to do it? what would the correct > one be? > > -- > ciao > Bruno > > =========================================== > http://nohkumado.eu/, <http://bboett.free.fr>http://aikido.nohkumado.eu/, > <http://bboett.free.fr> > http://aikido.zorn.free.fr > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >
TP
Torsten Paul
Sat, May 9, 2020 12:31 PM

If you put an echo between the 2 for loop

for(r = [0 : (partikel+luft):18])
echo(step = ceil(PIr/(partikel+luft)))
for(w = [0 : ceil(PI
r/(partikel+luft)):360])

you'll see that the step gets 0 at some point, which makes
the range basically infinite causing the complaint citing
the maximum integer as loop count.

ciao,
Torsten.

If you put an echo between the 2 for loop for(r = [0 : (partikel+luft):18]) echo(step = ceil(PI*r/(partikel+luft))) for(w = [0 : ceil(PI*r/(partikel+luft)):360]) you'll see that the step gets 0 at some point, which makes the range basically infinite causing the complaint citing the maximum integer as loop count. ciao, Torsten.
BB
Bruno Boettcher
Sat, May 9, 2020 1:06 PM

Indeed... argh.... i could kick myself....

still its very slow....

ok, here's the corrected (and commented, does that help?) code:

//filter for a pump, outside diameter 4cm, partikel size as argument as an
offset to space them up
//overkill, factor to increase the needed surface, 1 same surface
module Filter(partikel,luft, overkill)
{
pumpFlaeche = PI18.518.5/4;//surface of the pumphole
lochFlAeche = PI * partikelpartikel/4;//surface of the individual hole
anzahl = ceil(PI
18.5/(partikel+luft));//number of holes on the radius of
the filter
einKreisF = anzahl * lochFlAeche; //surface of one circle of holes
kreisAnzahl = ceil(pumpFlaeche/einKreisF)+2;//number of circles needed +2
to compensate for borders
//echo("Pf = ",pumpFlaeche, " LF : ", lochFlAeche," * ",anzahl," = ",
einKreisF," * ",kreisAnzahl);
difference()
{
cylinder(d=40, h=overkillkreisAnzahl(partikel+luft),$fn = 64);
union()
{
schritt = 1*(partikel+luft);
translate([0,0,-1])
cylinder(d=36, h=overkillkreisAnzahl(partikel+luft)-1,$fn = 64);
for(y = [1 : schritt:overkill*(kreisAnzahl)(partikel+luft)-1])
{
translate([0,0,y])
for(w = [0 : 360/anzahl:360])
rotate([0,0,w+((y/schritt)%2
90/anzahl)])

color("red")translate([0,30,0])rotate([90,0,0])cylinder(d=partikel,
h=60,$fn = 64);
for(r = [partikel : (partikel+luft):18])
for(w = [0 : 360/ceil(PIr/(partikel+luft)):360])
rotate([0,0,w])
translate([0,r,overkill
kreisAnzahl*(partikel+luft)-2])
color("red")cylinder(d=partikel, h=10,$fn = 64);
}
}
}
}

Am Sa., 9. Mai 2020 um 14:32 Uhr schrieb Torsten Paul Torsten.Paul@gmx.de:

If you put an echo between the 2 for loop

for(r = [0 : (partikel+luft):18])
echo(step = ceil(PIr/(partikel+luft)))
for(w = [0 : ceil(PI
r/(partikel+luft)):360])

you'll see that the step gets 0 at some point, which makes
the range basically infinite causing the complaint citing
the maximum integer as loop count.

ciao,
Torsten.


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

Indeed... argh.... i could kick myself.... still its very slow.... ok, here's the corrected (and commented, does that help?) code: //filter for a pump, outside diameter 4cm, partikel size as argument as an offset to space them up //overkill, factor to increase the needed surface, 1 same surface module Filter(partikel,luft, overkill) { pumpFlaeche = PI*18.5*18.5/4;//surface of the pumphole lochFlAeche = PI * partikel*partikel/4;//surface of the individual hole anzahl = ceil(PI*18.5/(partikel+luft));//number of holes on the radius of the filter einKreisF = anzahl * lochFlAeche; //surface of one circle of holes kreisAnzahl = ceil(pumpFlaeche/einKreisF)+2;//number of circles needed +2 to compensate for borders //echo("Pf = ",pumpFlaeche, " LF : ", lochFlAeche," * ",anzahl," = ", einKreisF," * ",kreisAnzahl); difference() { cylinder(d=40, h=overkill*kreisAnzahl*(partikel+luft),$fn = 64); union() { schritt = 1*(partikel+luft); translate([0,0,-1]) cylinder(d=36, h=overkill*kreisAnzahl*(partikel+luft)-1,$fn = 64); for(y = [1 : schritt:overkill*(kreisAnzahl)*(partikel+luft)-1]) { translate([0,0,y]) for(w = [0 : 360/anzahl:360]) rotate([0,0,w+((y/schritt)%2*90/anzahl)]) color("red")translate([0,30,0])rotate([90,0,0])cylinder(d=partikel, h=60,$fn = 64); for(r = [partikel : (partikel+luft):18]) for(w = [0 : 360/ceil(PI*r/(partikel+luft)):360]) rotate([0,0,w]) translate([0,r,overkill*kreisAnzahl*(partikel+luft)-2]) color("red")cylinder(d=partikel, h=10,$fn = 64); } } } } Am Sa., 9. Mai 2020 um 14:32 Uhr schrieb Torsten Paul <Torsten.Paul@gmx.de>: > If you put an echo between the 2 for loop > > for(r = [0 : (partikel+luft):18]) > echo(step = ceil(PI*r/(partikel+luft))) > for(w = [0 : ceil(PI*r/(partikel+luft)):360]) > > you'll see that the step gets 0 at some point, which makes > the range basically infinite causing the complaint citing > the maximum integer as loop count. > > ciao, > Torsten. > > > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org > -- ciao Bruno =========================================== http://nohkumado.eu/, <http://bboett.free.fr>http://aikido.nohkumado.eu/, <http://bboett.free.fr> http://aikido.zorn.free.fr
BB
Bruno Boettcher
Sat, May 9, 2020 2:12 PM

1h later we are at 143/1000 for the compilation :(

Am Sa., 9. Mai 2020 um 15:06 Uhr schrieb Bruno Boettcher bboett@gmail.com:

Indeed... argh.... i could kick myself....

still its very slow....

ok, here's the corrected (and commented, does that help?) code:

//filter for a pump, outside diameter 4cm, partikel size as argument as an
offset to space them up
//overkill, factor to increase the needed surface, 1 same surface
module Filter(partikel,luft, overkill)
{
pumpFlaeche = PI18.518.5/4;//surface of the pumphole
lochFlAeche = PI * partikelpartikel/4;//surface of the individual hole
anzahl = ceil(PI
18.5/(partikel+luft));//number of holes on the radius
of the filter
einKreisF = anzahl * lochFlAeche; //surface of one circle of holes
kreisAnzahl = ceil(pumpFlaeche/einKreisF)+2;//number of circles needed
+2 to compensate for borders
//echo("Pf = ",pumpFlaeche, " LF : ", lochFlAeche," * ",anzahl," = ",
einKreisF," * ",kreisAnzahl);
difference()
{
cylinder(d=40, h=overkillkreisAnzahl(partikel+luft),$fn = 64);
union()
{
schritt = 1*(partikel+luft);
translate([0,0,-1])
cylinder(d=36, h=overkillkreisAnzahl(partikel+luft)-1,$fn = 64);
for(y = [1 : schritt:overkill*(kreisAnzahl)(partikel+luft)-1])
{
translate([0,0,y])
for(w = [0 : 360/anzahl:360])
rotate([0,0,w+((y/schritt)%2
90/anzahl)])

color("red")translate([0,30,0])rotate([90,0,0])cylinder(d=partikel,
h=60,$fn = 64);
for(r = [partikel : (partikel+luft):18])
for(w = [0 : 360/ceil(PIr/(partikel+luft)):360])
rotate([0,0,w])
translate([0,r,overkill
kreisAnzahl*(partikel+luft)-2])
color("red")cylinder(d=partikel, h=10,$fn = 64);
}
}
}
}

Am Sa., 9. Mai 2020 um 14:32 Uhr schrieb Torsten Paul <Torsten.Paul@gmx.de

:

If you put an echo between the 2 for loop

for(r = [0 : (partikel+luft):18])
echo(step = ceil(PIr/(partikel+luft)))
for(w = [0 : ceil(PI
r/(partikel+luft)):360])

you'll see that the step gets 0 at some point, which makes
the range basically infinite causing the complaint citing
the maximum integer as loop count.

ciao,
Torsten.


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

1h later we are at 143/1000 for the compilation :( Am Sa., 9. Mai 2020 um 15:06 Uhr schrieb Bruno Boettcher <bboett@gmail.com>: > Indeed... argh.... i could kick myself.... > > still its very slow.... > > ok, here's the corrected (and commented, does that help?) code: > > //filter for a pump, outside diameter 4cm, partikel size as argument as an > offset to space them up > //overkill, factor to increase the needed surface, 1 same surface > module Filter(partikel,luft, overkill) > { > pumpFlaeche = PI*18.5*18.5/4;//surface of the pumphole > lochFlAeche = PI * partikel*partikel/4;//surface of the individual hole > anzahl = ceil(PI*18.5/(partikel+luft));//number of holes on the radius > of the filter > einKreisF = anzahl * lochFlAeche; //surface of one circle of holes > kreisAnzahl = ceil(pumpFlaeche/einKreisF)+2;//number of circles needed > +2 to compensate for borders > //echo("Pf = ",pumpFlaeche, " LF : ", lochFlAeche," * ",anzahl," = ", > einKreisF," * ",kreisAnzahl); > difference() > { > cylinder(d=40, h=overkill*kreisAnzahl*(partikel+luft),$fn = 64); > union() > { > schritt = 1*(partikel+luft); > translate([0,0,-1]) > cylinder(d=36, h=overkill*kreisAnzahl*(partikel+luft)-1,$fn = 64); > for(y = [1 : schritt:overkill*(kreisAnzahl)*(partikel+luft)-1]) > { > translate([0,0,y]) > for(w = [0 : 360/anzahl:360]) > rotate([0,0,w+((y/schritt)%2*90/anzahl)]) > > color("red")translate([0,30,0])rotate([90,0,0])cylinder(d=partikel, > h=60,$fn = 64); > for(r = [partikel : (partikel+luft):18]) > for(w = [0 : 360/ceil(PI*r/(partikel+luft)):360]) > rotate([0,0,w]) > translate([0,r,overkill*kreisAnzahl*(partikel+luft)-2]) > color("red")cylinder(d=partikel, h=10,$fn = 64); > } > } > } > } > > Am Sa., 9. Mai 2020 um 14:32 Uhr schrieb Torsten Paul <Torsten.Paul@gmx.de > >: > >> If you put an echo between the 2 for loop >> >> for(r = [0 : (partikel+luft):18]) >> echo(step = ceil(PI*r/(partikel+luft))) >> for(w = [0 : ceil(PI*r/(partikel+luft)):360]) >> >> you'll see that the step gets 0 at some point, which makes >> the range basically infinite causing the complaint citing >> the maximum integer as loop count. >> >> ciao, >> Torsten. >> >> >> _______________________________________________ >> OpenSCAD mailing list >> Discuss@lists.openscad.org >> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >> > > > -- > ciao > Bruno > > =========================================== > http://nohkumado.eu/, <http://bboett.free.fr>http://aikido.nohkumado.eu/, > <http://bboett.free.fr> > http://aikido.zorn.free.fr > -- ciao Bruno =========================================== http://nohkumado.eu/, <http://bboett.free.fr>http://aikido.nohkumado.eu/, <http://bboett.free.fr> http://aikido.zorn.free.fr
NH
nop head
Sat, May 9, 2020 2:40 PM

OK I can see my 2D suggestion makes no sense now.

I think it will go a lot faster if you stop the cylinders intersecting at
the middle. Any 3D operation with so many objects will be slow though.

On Sat, 9 May 2020 at 15:13, Bruno Boettcher bboett@gmail.com wrote:

1h later we are at 143/1000 for the compilation :(

Am Sa., 9. Mai 2020 um 15:06 Uhr schrieb Bruno Boettcher <bboett@gmail.com

:

Indeed... argh.... i could kick myself....

still its very slow....

ok, here's the corrected (and commented, does that help?) code:

//filter for a pump, outside diameter 4cm, partikel size as argument as
an offset to space them up
//overkill, factor to increase the needed surface, 1 same surface
module Filter(partikel,luft, overkill)
{
pumpFlaeche = PI18.518.5/4;//surface of the pumphole
lochFlAeche = PI * partikelpartikel/4;//surface of the individual hole
anzahl = ceil(PI
18.5/(partikel+luft));//number of holes on the radius
of the filter
einKreisF = anzahl * lochFlAeche; //surface of one circle of holes
kreisAnzahl = ceil(pumpFlaeche/einKreisF)+2;//number of circles needed
+2 to compensate for borders
//echo("Pf = ",pumpFlaeche, " LF : ", lochFlAeche," * ",anzahl," = ",
einKreisF," * ",kreisAnzahl);
difference()
{
cylinder(d=40, h=overkillkreisAnzahl(partikel+luft),$fn = 64);
union()
{
schritt = 1*(partikel+luft);
translate([0,0,-1])
cylinder(d=36, h=overkillkreisAnzahl(partikel+luft)-1,$fn = 64);
for(y = [1 : schritt:overkill*(kreisAnzahl)(partikel+luft)-1])
{
translate([0,0,y])
for(w = [0 : 360/anzahl:360])
rotate([0,0,w+((y/schritt)%2
90/anzahl)])

color("red")translate([0,30,0])rotate([90,0,0])cylinder(d=partikel,
h=60,$fn = 64);
for(r = [partikel : (partikel+luft):18])
for(w = [0 : 360/ceil(PIr/(partikel+luft)):360])
rotate([0,0,w])
translate([0,r,overkill
kreisAnzahl*(partikel+luft)-2])
color("red")cylinder(d=partikel, h=10,$fn = 64);
}
}
}
}

Am Sa., 9. Mai 2020 um 14:32 Uhr schrieb Torsten Paul <
Torsten.Paul@gmx.de>:

If you put an echo between the 2 for loop

for(r = [0 : (partikel+luft):18])
echo(step = ceil(PIr/(partikel+luft)))
for(w = [0 : ceil(PI
r/(partikel+luft)):360])

you'll see that the step gets 0 at some point, which makes
the range basically infinite causing the complaint citing
the maximum integer as loop count.

ciao,
Torsten.


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

OK I can see my 2D suggestion makes no sense now. I think it will go a lot faster if you stop the cylinders intersecting at the middle. Any 3D operation with so many objects will be slow though. On Sat, 9 May 2020 at 15:13, Bruno Boettcher <bboett@gmail.com> wrote: > 1h later we are at 143/1000 for the compilation :( > > Am Sa., 9. Mai 2020 um 15:06 Uhr schrieb Bruno Boettcher <bboett@gmail.com > >: > >> Indeed... argh.... i could kick myself.... >> >> still its very slow.... >> >> ok, here's the corrected (and commented, does that help?) code: >> >> //filter for a pump, outside diameter 4cm, partikel size as argument as >> an offset to space them up >> //overkill, factor to increase the needed surface, 1 same surface >> module Filter(partikel,luft, overkill) >> { >> pumpFlaeche = PI*18.5*18.5/4;//surface of the pumphole >> lochFlAeche = PI * partikel*partikel/4;//surface of the individual hole >> anzahl = ceil(PI*18.5/(partikel+luft));//number of holes on the radius >> of the filter >> einKreisF = anzahl * lochFlAeche; //surface of one circle of holes >> kreisAnzahl = ceil(pumpFlaeche/einKreisF)+2;//number of circles needed >> +2 to compensate for borders >> //echo("Pf = ",pumpFlaeche, " LF : ", lochFlAeche," * ",anzahl," = ", >> einKreisF," * ",kreisAnzahl); >> difference() >> { >> cylinder(d=40, h=overkill*kreisAnzahl*(partikel+luft),$fn = 64); >> union() >> { >> schritt = 1*(partikel+luft); >> translate([0,0,-1]) >> cylinder(d=36, h=overkill*kreisAnzahl*(partikel+luft)-1,$fn = 64); >> for(y = [1 : schritt:overkill*(kreisAnzahl)*(partikel+luft)-1]) >> { >> translate([0,0,y]) >> for(w = [0 : 360/anzahl:360]) >> rotate([0,0,w+((y/schritt)%2*90/anzahl)]) >> >> color("red")translate([0,30,0])rotate([90,0,0])cylinder(d=partikel, >> h=60,$fn = 64); >> for(r = [partikel : (partikel+luft):18]) >> for(w = [0 : 360/ceil(PI*r/(partikel+luft)):360]) >> rotate([0,0,w]) >> translate([0,r,overkill*kreisAnzahl*(partikel+luft)-2]) >> color("red")cylinder(d=partikel, h=10,$fn = 64); >> } >> } >> } >> } >> >> Am Sa., 9. Mai 2020 um 14:32 Uhr schrieb Torsten Paul < >> Torsten.Paul@gmx.de>: >> >>> If you put an echo between the 2 for loop >>> >>> for(r = [0 : (partikel+luft):18]) >>> echo(step = ceil(PI*r/(partikel+luft))) >>> for(w = [0 : ceil(PI*r/(partikel+luft)):360]) >>> >>> you'll see that the step gets 0 at some point, which makes >>> the range basically infinite causing the complaint citing >>> the maximum integer as loop count. >>> >>> ciao, >>> Torsten. >>> >>> >>> _______________________________________________ >>> OpenSCAD mailing list >>> Discuss@lists.openscad.org >>> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >>> >> >> >> -- >> ciao >> Bruno >> >> =========================================== >> http://nohkumado.eu/, <http://bboett.free.fr>http://aikido.nohkumado.eu/, >> <http://bboett.free.fr> >> http://aikido.zorn.free.fr >> > > > -- > ciao > Bruno > > =========================================== > http://nohkumado.eu/, <http://bboett.free.fr>http://aikido.nohkumado.eu/, > <http://bboett.free.fr> > http://aikido.zorn.free.fr > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >
TP
Torsten Paul
Sat, May 9, 2020 3:03 PM

On 09.05.20 16:40, nop head wrote:

I think it will go a lot faster if you stop the cylinders
intersecting at the middle. Any 3D operation with so many> objects will be slow though.

Also it seems the code is generating the top holes multiple
times.

Maybe check if $fn = 64 is really needed for all those tiny
holes.

ciao,
Torsten.

On 09.05.20 16:40, nop head wrote: > I think it will go a lot faster if you stop the cylinders > intersecting at the middle. Any 3D operation with so many> objects will be slow though. Also it seems the code is generating the top holes multiple times. Maybe check if $fn = 64 is really needed for all those tiny holes. ciao, Torsten.
RP
Ronaldo Persiano
Sat, May 9, 2020 6:18 PM

Besides the high $fn values for holes, your code imposes extra avoidable
work to CGAL. For instance, the for loop that makes the top holes is inside
the for loop of the radial holes; the cylinders making the ring of radial
holes are duplicated and unnecessarily longs. You could use a high $fn
value for the outer filter cylinder but keep a smaller value for the hole
cylinders.

Correcting those flaws and redesigning a little the order of the
operations, I was able to render your filter in 2min 48sec while your
original code required 13min 26sec in my machine, both running with $fn=64
for the outer cylinder and $fn=24 for the others. If you need I can share
my code.

Em sáb., 9 de mai. de 2020 às 16:03, Torsten Paul Torsten.Paul@gmx.de
escreveu:

On 09.05.20 16:40, nop head wrote:

I think it will go a lot faster if you stop the cylinders
intersecting at the middle. Any 3D operation with so many> objects will

be slow though.

Also it seems the code is generating the top holes multiple
times.

Maybe check if $fn = 64 is really needed for all those tiny
holes.

ciao,
Torsten.


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

Besides the high $fn values for holes, your code imposes extra avoidable work to CGAL. For instance, the for loop that makes the top holes is inside the for loop of the radial holes; the cylinders making the ring of radial holes are duplicated and unnecessarily longs. You could use a high $fn value for the outer filter cylinder but keep a smaller value for the hole cylinders. Correcting those flaws and redesigning a little the order of the operations, I was able to render your filter in 2min 48sec while your original code required 13min 26sec in my machine, both running with $fn=64 for the outer cylinder and $fn=24 for the others. If you need I can share my code. Em sáb., 9 de mai. de 2020 às 16:03, Torsten Paul <Torsten.Paul@gmx.de> escreveu: > On 09.05.20 16:40, nop head wrote: > > I think it will go a lot faster if you stop the cylinders > > intersecting at the middle. Any 3D operation with so many> objects will > be slow though. > > Also it seems the code is generating the top holes multiple > times. > > Maybe check if $fn = 64 is really needed for all those tiny > holes. > > ciao, > Torsten. > > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >