discuss@lists.openscad.org

OpenSCAD general discussion Mailing-list

View all threads

how to pass a module to a module

SD
sean d'epagnier
Thu, Jun 4, 2020 2:35 PM

module all(m) {
m();
mirror([1, 0, 0])
m();
mirror([0, 1, 0]) {
m();
mirror([1, 0, 0])
m();
}
}

I am finding strange this does not work.  What would be the best
solution for the above problem?

module all(m) { m(); mirror([1, 0, 0]) m(); mirror([0, 1, 0]) { m(); mirror([1, 0, 0]) m(); } } I am finding strange this does not work. What would be the best solution for the above problem?
AC
A. Craig West
Thu, Jun 4, 2020 3:02 PM

How do you mean not work? What does it do?

On Thu, 4 Jun 2020, 10:36 sean d'epagnier, seandepagnier@gmail.com wrote:

module all(m) {
m();
mirror([1, 0, 0])
m();
mirror([0, 1, 0]) {
m();
mirror([1, 0, 0])
m();
}
}

I am finding strange this does not work.  What would be the best
solution for the above problem?


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

How do you mean not work? What does it do? On Thu, 4 Jun 2020, 10:36 sean d'epagnier, <seandepagnier@gmail.com> wrote: > module all(m) { > m(); > mirror([1, 0, 0]) > m(); > mirror([0, 1, 0]) { > m(); > mirror([1, 0, 0]) > m(); > } > } > > I am finding strange this does not work. What would be the best > solution for the above problem? > > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >
L
lar3ry
Thu, Jun 4, 2020 3:14 PM

Works fine for me.

all();
module all(m) {
m();
mirror([1, 0, 0])
m();
mirror([0, 1, 0]) {
m();
mirror([1, 0, 0])
m();
}
}

module m() {
cube(10);
}

--
Sent from: http://forum.openscad.org/

Works fine for me. all(); module all(m) { m(); mirror([1, 0, 0]) m(); mirror([0, 1, 0]) { m(); mirror([1, 0, 0]) m(); } } module m() { cube(10); } -- Sent from: http://forum.openscad.org/
SD
sean d'epagnier
Thu, Jun 4, 2020 3:16 PM

I want to pass different modules like:
module m() {
cube(10);
}

module n() {
...
}

all(m);
all(n);

On 6/4/20, lar3ry lar3ry@sasktel.net wrote:

Works fine for me.

all();
module all(m) {
m();
mirror([1, 0, 0])
m();
mirror([0, 1, 0]) {
m();
mirror([1, 0, 0])
m();
}
}

module m() {
cube(10);
}

--
Sent from: http://forum.openscad.org/


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

I want to pass different modules like: module m() { cube(10); } module n() { ... } all(m); all(n); On 6/4/20, lar3ry <lar3ry@sasktel.net> wrote: > Works fine for me. > > all(); > module all(m) { > m(); > mirror([1, 0, 0]) > m(); > mirror([0, 1, 0]) { > m(); > mirror([1, 0, 0]) > m(); > } > } > > > module m() { > cube(10); > } > > > > > -- > Sent from: http://forum.openscad.org/ > > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >
AC
A. Craig West
Thu, Jun 4, 2020 3:33 PM

Ahhh, modules aren't objects that can be passed. You would use children() :
module all() {
children();
mirror([1, 0, 0])
children();
mirror([0, 1, 0]) {
children();
mirror([1, 0, 0])
children();
}
}
module m() {
cube(10);
}
module n() {
cube(20);
}
all() m();
all() n();

On Thu, 4 Jun 2020, 11:17 sean d'epagnier, seandepagnier@gmail.com wrote:

I want to pass different modules like:
module m() {
cube(10);
}

module n() {
...
}

all(m);
all(n);

On 6/4/20, lar3ry lar3ry@sasktel.net wrote:

Works fine for me.

all();
module all(m) {
m();
mirror([1, 0, 0])
m();
mirror([0, 1, 0]) {
m();
mirror([1, 0, 0])
m();
}
}

module m() {
cube(10);
}

--
Sent from: http://forum.openscad.org/


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

Ahhh, modules aren't objects that can be passed. You would use children() : module all() { children(); mirror([1, 0, 0]) children(); mirror([0, 1, 0]) { children(); mirror([1, 0, 0]) children(); } } module m() { cube(10); } module n() { cube(20); } all() m(); all() n(); On Thu, 4 Jun 2020, 11:17 sean d'epagnier, <seandepagnier@gmail.com> wrote: > I want to pass different modules like: > module m() { > cube(10); > } > > module n() { > ... > } > > all(m); > all(n); > > On 6/4/20, lar3ry <lar3ry@sasktel.net> wrote: > > Works fine for me. > > > > all(); > > module all(m) { > > m(); > > mirror([1, 0, 0]) > > m(); > > mirror([0, 1, 0]) { > > m(); > > mirror([1, 0, 0]) > > m(); > > } > > } > > > > > > module m() { > > cube(10); > > } > > > > > > > > > > -- > > Sent from: http://forum.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 >
AC
A. Craig West
Thu, Jun 4, 2020 3:34 PM

essentially there are userspace objects that can be passed as parameters,
and rendered objects, like modules, and they live in different spaces

On Thu, Jun 4, 2020 at 11:33 AM A. Craig West acraigwest@gmail.com wrote:

Ahhh, modules aren't objects that can be passed. You would use children() :
module all() {
children();
mirror([1, 0, 0])
children();
mirror([0, 1, 0]) {
children();
mirror([1, 0, 0])
children();
}
}
module m() {
cube(10);
}
module n() {
cube(20);
}
all() m();
all() n();

On Thu, 4 Jun 2020, 11:17 sean d'epagnier, seandepagnier@gmail.com
wrote:

I want to pass different modules like:
module m() {
cube(10);
}

module n() {
...
}

all(m);
all(n);

On 6/4/20, lar3ry lar3ry@sasktel.net wrote:

Works fine for me.

all();
module all(m) {
m();
mirror([1, 0, 0])
m();
mirror([0, 1, 0]) {
m();
mirror([1, 0, 0])
m();
}
}

module m() {
cube(10);
}

--
Sent from: http://forum.openscad.org/


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

essentially there are userspace objects that can be passed as parameters, and rendered objects, like modules, and they live in different spaces On Thu, Jun 4, 2020 at 11:33 AM A. Craig West <acraigwest@gmail.com> wrote: > Ahhh, modules aren't objects that can be passed. You would use children() : > module all() { > children(); > mirror([1, 0, 0]) > children(); > mirror([0, 1, 0]) { > children(); > mirror([1, 0, 0]) > children(); > } > } > module m() { > cube(10); > } > module n() { > cube(20); > } > all() m(); > all() n(); > > On Thu, 4 Jun 2020, 11:17 sean d'epagnier, <seandepagnier@gmail.com> > wrote: > >> I want to pass different modules like: >> module m() { >> cube(10); >> } >> >> module n() { >> ... >> } >> >> all(m); >> all(n); >> >> On 6/4/20, lar3ry <lar3ry@sasktel.net> wrote: >> > Works fine for me. >> > >> > all(); >> > module all(m) { >> > m(); >> > mirror([1, 0, 0]) >> > m(); >> > mirror([0, 1, 0]) { >> > m(); >> > mirror([1, 0, 0]) >> > m(); >> > } >> > } >> > >> > >> > module m() { >> > cube(10); >> > } >> > >> > >> > >> > >> > -- >> > Sent from: http://forum.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 >> >
AC
A. Craig West
Thu, Jun 4, 2020 3:37 PM

Personally, I think it would be awesome if there was a version of render()
which was a function, that returned a list of faces

On Thu, Jun 4, 2020 at 11:34 AM A. Craig West acraigwest@gmail.com wrote:

essentially there are userspace objects that can be passed as parameters,
and rendered objects, like modules, and they live in different spaces

On Thu, Jun 4, 2020 at 11:33 AM A. Craig West acraigwest@gmail.com
wrote:

Ahhh, modules aren't objects that can be passed. You would use children()
:
module all() {
children();
mirror([1, 0, 0])
children();
mirror([0, 1, 0]) {
children();
mirror([1, 0, 0])
children();
}
}
module m() {
cube(10);
}
module n() {
cube(20);
}
all() m();
all() n();

On Thu, 4 Jun 2020, 11:17 sean d'epagnier, seandepagnier@gmail.com
wrote:

I want to pass different modules like:
module m() {
cube(10);
}

module n() {
...
}

all(m);
all(n);

On 6/4/20, lar3ry lar3ry@sasktel.net wrote:

Works fine for me.

all();
module all(m) {
m();
mirror([1, 0, 0])
m();
mirror([0, 1, 0]) {
m();
mirror([1, 0, 0])
m();
}
}

module m() {
cube(10);
}

--
Sent from: http://forum.openscad.org/


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

Personally, I think it would be awesome if there was a version of render() which was a function, that returned a list of faces On Thu, Jun 4, 2020 at 11:34 AM A. Craig West <acraigwest@gmail.com> wrote: > essentially there are userspace objects that can be passed as parameters, > and rendered objects, like modules, and they live in different spaces > > On Thu, Jun 4, 2020 at 11:33 AM A. Craig West <acraigwest@gmail.com> > wrote: > >> Ahhh, modules aren't objects that can be passed. You would use children() >> : >> module all() { >> children(); >> mirror([1, 0, 0]) >> children(); >> mirror([0, 1, 0]) { >> children(); >> mirror([1, 0, 0]) >> children(); >> } >> } >> module m() { >> cube(10); >> } >> module n() { >> cube(20); >> } >> all() m(); >> all() n(); >> >> On Thu, 4 Jun 2020, 11:17 sean d'epagnier, <seandepagnier@gmail.com> >> wrote: >> >>> I want to pass different modules like: >>> module m() { >>> cube(10); >>> } >>> >>> module n() { >>> ... >>> } >>> >>> all(m); >>> all(n); >>> >>> On 6/4/20, lar3ry <lar3ry@sasktel.net> wrote: >>> > Works fine for me. >>> > >>> > all(); >>> > module all(m) { >>> > m(); >>> > mirror([1, 0, 0]) >>> > m(); >>> > mirror([0, 1, 0]) { >>> > m(); >>> > mirror([1, 0, 0]) >>> > m(); >>> > } >>> > } >>> > >>> > >>> > module m() { >>> > cube(10); >>> > } >>> > >>> > >>> > >>> > >>> > -- >>> > Sent from: http://forum.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 >>> >>
SD
sean d'epagnier
Thu, Jun 4, 2020 7:50 PM

Thanks for pointing out the use of children(), this makes a lot more possible.

This is still a limitation compared to multiple parameters.. but I
guess openscad doesn't allow mixing passed parameters with modules.

On 6/4/20, A. Craig West acraigwest@gmail.com wrote:

Personally, I think it would be awesome if there was a version of render()
which was a function, that returned a list of faces

On Thu, Jun 4, 2020 at 11:34 AM A. Craig West acraigwest@gmail.com wrote:

essentially there are userspace objects that can be passed as parameters,
and rendered objects, like modules, and they live in different spaces

On Thu, Jun 4, 2020 at 11:33 AM A. Craig West acraigwest@gmail.com
wrote:

Ahhh, modules aren't objects that can be passed. You would use
children()
:
module all() {
children();
mirror([1, 0, 0])
children();
mirror([0, 1, 0]) {
children();
mirror([1, 0, 0])
children();
}
}
module m() {
cube(10);
}
module n() {
cube(20);
}
all() m();
all() n();

On Thu, 4 Jun 2020, 11:17 sean d'epagnier, seandepagnier@gmail.com
wrote:

I want to pass different modules like:
module m() {
cube(10);
}

module n() {
...
}

all(m);
all(n);

On 6/4/20, lar3ry lar3ry@sasktel.net wrote:

Works fine for me.

all();
module all(m) {
m();
mirror([1, 0, 0])
m();
mirror([0, 1, 0]) {
m();
mirror([1, 0, 0])
m();
}
}

module m() {
cube(10);
}

--
Sent from: http://forum.openscad.org/


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

Thanks for pointing out the use of children(), this makes a lot more possible. This is still a limitation compared to multiple parameters.. but I guess openscad doesn't allow mixing passed parameters with modules. On 6/4/20, A. Craig West <acraigwest@gmail.com> wrote: > Personally, I think it would be awesome if there was a version of render() > which was a function, that returned a list of faces > > > On Thu, Jun 4, 2020 at 11:34 AM A. Craig West <acraigwest@gmail.com> wrote: > >> essentially there are userspace objects that can be passed as parameters, >> and rendered objects, like modules, and they live in different spaces >> >> On Thu, Jun 4, 2020 at 11:33 AM A. Craig West <acraigwest@gmail.com> >> wrote: >> >>> Ahhh, modules aren't objects that can be passed. You would use >>> children() >>> : >>> module all() { >>> children(); >>> mirror([1, 0, 0]) >>> children(); >>> mirror([0, 1, 0]) { >>> children(); >>> mirror([1, 0, 0]) >>> children(); >>> } >>> } >>> module m() { >>> cube(10); >>> } >>> module n() { >>> cube(20); >>> } >>> all() m(); >>> all() n(); >>> >>> On Thu, 4 Jun 2020, 11:17 sean d'epagnier, <seandepagnier@gmail.com> >>> wrote: >>> >>>> I want to pass different modules like: >>>> module m() { >>>> cube(10); >>>> } >>>> >>>> module n() { >>>> ... >>>> } >>>> >>>> all(m); >>>> all(n); >>>> >>>> On 6/4/20, lar3ry <lar3ry@sasktel.net> wrote: >>>> > Works fine for me. >>>> > >>>> > all(); >>>> > module all(m) { >>>> > m(); >>>> > mirror([1, 0, 0]) >>>> > m(); >>>> > mirror([0, 1, 0]) { >>>> > m(); >>>> > mirror([1, 0, 0]) >>>> > m(); >>>> > } >>>> > } >>>> > >>>> > >>>> > module m() { >>>> > cube(10); >>>> > } >>>> > >>>> > >>>> > >>>> > >>>> > -- >>>> > Sent from: http://forum.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 >>>> >>> >
AC
A. Craig West
Thu, Jun 4, 2020 7:53 PM

Modules aren't passable at all, they are in a different space

On Thu, 4 Jun 2020, 15:51 sean d'epagnier, seandepagnier@gmail.com wrote:

Thanks for pointing out the use of children(), this makes a lot more
possible.

This is still a limitation compared to multiple parameters.. but I
guess openscad doesn't allow mixing passed parameters with modules.

On 6/4/20, A. Craig West acraigwest@gmail.com wrote:

Personally, I think it would be awesome if there was a version of

render()

which was a function, that returned a list of faces

On Thu, Jun 4, 2020 at 11:34 AM A. Craig West acraigwest@gmail.com

wrote:

essentially there are userspace objects that can be passed as

parameters,

and rendered objects, like modules, and they live in different spaces

On Thu, Jun 4, 2020 at 11:33 AM A. Craig West acraigwest@gmail.com
wrote:

Ahhh, modules aren't objects that can be passed. You would use
children()
:
module all() {
children();
mirror([1, 0, 0])
children();
mirror([0, 1, 0]) {
children();
mirror([1, 0, 0])
children();
}
}
module m() {
cube(10);
}
module n() {
cube(20);
}
all() m();
all() n();

On Thu, 4 Jun 2020, 11:17 sean d'epagnier, seandepagnier@gmail.com
wrote:

I want to pass different modules like:
module m() {
cube(10);
}

module n() {
...
}

all(m);
all(n);

On 6/4/20, lar3ry lar3ry@sasktel.net wrote:

Works fine for me.

all();
module all(m) {
m();
mirror([1, 0, 0])
m();
mirror([0, 1, 0]) {
m();
mirror([1, 0, 0])
m();
}
}

module m() {
cube(10);
}

--
Sent from: http://forum.openscad.org/


OpenSCAD mailing list
Discuss@lists.openscad.org

Modules aren't passable at all, they are in a different space On Thu, 4 Jun 2020, 15:51 sean d'epagnier, <seandepagnier@gmail.com> wrote: > Thanks for pointing out the use of children(), this makes a lot more > possible. > > This is still a limitation compared to multiple parameters.. but I > guess openscad doesn't allow mixing passed parameters with modules. > > On 6/4/20, A. Craig West <acraigwest@gmail.com> wrote: > > Personally, I think it would be awesome if there was a version of > render() > > which was a function, that returned a list of faces > > > > > > On Thu, Jun 4, 2020 at 11:34 AM A. Craig West <acraigwest@gmail.com> > wrote: > > > >> essentially there are userspace objects that can be passed as > parameters, > >> and rendered objects, like modules, and they live in different spaces > >> > >> On Thu, Jun 4, 2020 at 11:33 AM A. Craig West <acraigwest@gmail.com> > >> wrote: > >> > >>> Ahhh, modules aren't objects that can be passed. You would use > >>> children() > >>> : > >>> module all() { > >>> children(); > >>> mirror([1, 0, 0]) > >>> children(); > >>> mirror([0, 1, 0]) { > >>> children(); > >>> mirror([1, 0, 0]) > >>> children(); > >>> } > >>> } > >>> module m() { > >>> cube(10); > >>> } > >>> module n() { > >>> cube(20); > >>> } > >>> all() m(); > >>> all() n(); > >>> > >>> On Thu, 4 Jun 2020, 11:17 sean d'epagnier, <seandepagnier@gmail.com> > >>> wrote: > >>> > >>>> I want to pass different modules like: > >>>> module m() { > >>>> cube(10); > >>>> } > >>>> > >>>> module n() { > >>>> ... > >>>> } > >>>> > >>>> all(m); > >>>> all(n); > >>>> > >>>> On 6/4/20, lar3ry <lar3ry@sasktel.net> wrote: > >>>> > Works fine for me. > >>>> > > >>>> > all(); > >>>> > module all(m) { > >>>> > m(); > >>>> > mirror([1, 0, 0]) > >>>> > m(); > >>>> > mirror([0, 1, 0]) { > >>>> > m(); > >>>> > mirror([1, 0, 0]) > >>>> > m(); > >>>> > } > >>>> > } > >>>> > > >>>> > > >>>> > module m() { > >>>> > cube(10); > >>>> > } > >>>> > > >>>> > > >>>> > > >>>> > > >>>> > -- > >>>> > Sent from: http://forum.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 >
NH
nop head
Thu, Jun 4, 2020 7:54 PM

You can pass parameters to children via $ variables. A bit of hack but it
works.

module ten() {
let($p = 10) children();
}

ten() cube($p);

On Thu, 4 Jun 2020 at 20:51, sean d'epagnier seandepagnier@gmail.com
wrote:

Thanks for pointing out the use of children(), this makes a lot more
possible.

This is still a limitation compared to multiple parameters.. but I
guess openscad doesn't allow mixing passed parameters with modules.

On 6/4/20, A. Craig West acraigwest@gmail.com wrote:

Personally, I think it would be awesome if there was a version of

render()

which was a function, that returned a list of faces

On Thu, Jun 4, 2020 at 11:34 AM A. Craig West acraigwest@gmail.com

wrote:

essentially there are userspace objects that can be passed as

parameters,

and rendered objects, like modules, and they live in different spaces

On Thu, Jun 4, 2020 at 11:33 AM A. Craig West acraigwest@gmail.com
wrote:

Ahhh, modules aren't objects that can be passed. You would use
children()
:
module all() {
children();
mirror([1, 0, 0])
children();
mirror([0, 1, 0]) {
children();
mirror([1, 0, 0])
children();
}
}
module m() {
cube(10);
}
module n() {
cube(20);
}
all() m();
all() n();

On Thu, 4 Jun 2020, 11:17 sean d'epagnier, seandepagnier@gmail.com
wrote:

I want to pass different modules like:
module m() {
cube(10);
}

module n() {
...
}

all(m);
all(n);

On 6/4/20, lar3ry lar3ry@sasktel.net wrote:

Works fine for me.

all();
module all(m) {
m();
mirror([1, 0, 0])
m();
mirror([0, 1, 0]) {
m();
mirror([1, 0, 0])
m();
}
}

module m() {
cube(10);
}

--
Sent from: http://forum.openscad.org/


OpenSCAD mailing list
Discuss@lists.openscad.org

You can pass parameters to children via $ variables. A bit of hack but it works. module ten() { let($p = 10) children(); } ten() cube($p); On Thu, 4 Jun 2020 at 20:51, sean d'epagnier <seandepagnier@gmail.com> wrote: > Thanks for pointing out the use of children(), this makes a lot more > possible. > > This is still a limitation compared to multiple parameters.. but I > guess openscad doesn't allow mixing passed parameters with modules. > > On 6/4/20, A. Craig West <acraigwest@gmail.com> wrote: > > Personally, I think it would be awesome if there was a version of > render() > > which was a function, that returned a list of faces > > > > > > On Thu, Jun 4, 2020 at 11:34 AM A. Craig West <acraigwest@gmail.com> > wrote: > > > >> essentially there are userspace objects that can be passed as > parameters, > >> and rendered objects, like modules, and they live in different spaces > >> > >> On Thu, Jun 4, 2020 at 11:33 AM A. Craig West <acraigwest@gmail.com> > >> wrote: > >> > >>> Ahhh, modules aren't objects that can be passed. You would use > >>> children() > >>> : > >>> module all() { > >>> children(); > >>> mirror([1, 0, 0]) > >>> children(); > >>> mirror([0, 1, 0]) { > >>> children(); > >>> mirror([1, 0, 0]) > >>> children(); > >>> } > >>> } > >>> module m() { > >>> cube(10); > >>> } > >>> module n() { > >>> cube(20); > >>> } > >>> all() m(); > >>> all() n(); > >>> > >>> On Thu, 4 Jun 2020, 11:17 sean d'epagnier, <seandepagnier@gmail.com> > >>> wrote: > >>> > >>>> I want to pass different modules like: > >>>> module m() { > >>>> cube(10); > >>>> } > >>>> > >>>> module n() { > >>>> ... > >>>> } > >>>> > >>>> all(m); > >>>> all(n); > >>>> > >>>> On 6/4/20, lar3ry <lar3ry@sasktel.net> wrote: > >>>> > Works fine for me. > >>>> > > >>>> > all(); > >>>> > module all(m) { > >>>> > m(); > >>>> > mirror([1, 0, 0]) > >>>> > m(); > >>>> > mirror([0, 1, 0]) { > >>>> > m(); > >>>> > mirror([1, 0, 0]) > >>>> > m(); > >>>> > } > >>>> > } > >>>> > > >>>> > > >>>> > module m() { > >>>> > cube(10); > >>>> > } > >>>> > > >>>> > > >>>> > > >>>> > > >>>> > -- > >>>> > Sent from: http://forum.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 >
J
jon
Thu, Jun 4, 2020 7:59 PM

a BIT of a hack?

On 6/4/2020 3:54 PM, nop head wrote:

You can pass parameters to children via $ variables. A bit of hack but
it works.

module ten() {
   let($p = 10) children();
}

ten() cube($p);

a BIT of a hack? On 6/4/2020 3:54 PM, nop head wrote: > You can pass parameters to children via $ variables. A bit of hack but > it works. > > module ten() { >    let($p = 10) children(); > } > > ten() cube($p); >
NH
nop head
Thu, Jun 4, 2020 8:00 PM

Not sure what your question was, but you can pass multiple modules as
children.

module twokids() {
difference() {
children(0);
children(1);
}
}

twokids() {
cube();
sphere();
}

On Thu, 4 Jun 2020 at 20:54, nop head nop.head@gmail.com wrote:

You can pass parameters to children via $ variables. A bit of hack but it
works.

module ten() {
let($p = 10) children();
}

ten() cube($p);

On Thu, 4 Jun 2020 at 20:51, sean d'epagnier seandepagnier@gmail.com
wrote:

Thanks for pointing out the use of children(), this makes a lot more
possible.

This is still a limitation compared to multiple parameters.. but I
guess openscad doesn't allow mixing passed parameters with modules.

On 6/4/20, A. Craig West acraigwest@gmail.com wrote:

Personally, I think it would be awesome if there was a version of

render()

which was a function, that returned a list of faces

On Thu, Jun 4, 2020 at 11:34 AM A. Craig West acraigwest@gmail.com

wrote:

essentially there are userspace objects that can be passed as

parameters,

and rendered objects, like modules, and they live in different spaces

On Thu, Jun 4, 2020 at 11:33 AM A. Craig West acraigwest@gmail.com
wrote:

Ahhh, modules aren't objects that can be passed. You would use
children()
:
module all() {
children();
mirror([1, 0, 0])
children();
mirror([0, 1, 0]) {
children();
mirror([1, 0, 0])
children();
}
}
module m() {
cube(10);
}
module n() {
cube(20);
}
all() m();
all() n();

On Thu, 4 Jun 2020, 11:17 sean d'epagnier, seandepagnier@gmail.com
wrote:

I want to pass different modules like:
module m() {
cube(10);
}

module n() {
...
}

all(m);
all(n);

On 6/4/20, lar3ry lar3ry@sasktel.net wrote:

Works fine for me.

all();
module all(m) {
m();
mirror([1, 0, 0])
m();
mirror([0, 1, 0]) {
m();
mirror([1, 0, 0])
m();
}
}

module m() {
cube(10);
}

--
Sent from: http://forum.openscad.org/


OpenSCAD mailing list
Discuss@lists.openscad.org


OpenSCAD mailing list
Discuss@lists.openscad.org

Not sure what your question was, but you can pass multiple modules as children. module twokids() { difference() { children(0); children(1); } } twokids() { cube(); sphere(); } On Thu, 4 Jun 2020 at 20:54, nop head <nop.head@gmail.com> wrote: > You can pass parameters to children via $ variables. A bit of hack but it > works. > > module ten() { > let($p = 10) children(); > } > > ten() cube($p); > > > > On Thu, 4 Jun 2020 at 20:51, sean d'epagnier <seandepagnier@gmail.com> > wrote: > >> Thanks for pointing out the use of children(), this makes a lot more >> possible. >> >> This is still a limitation compared to multiple parameters.. but I >> guess openscad doesn't allow mixing passed parameters with modules. >> >> On 6/4/20, A. Craig West <acraigwest@gmail.com> wrote: >> > Personally, I think it would be awesome if there was a version of >> render() >> > which was a function, that returned a list of faces >> > >> > >> > On Thu, Jun 4, 2020 at 11:34 AM A. Craig West <acraigwest@gmail.com> >> wrote: >> > >> >> essentially there are userspace objects that can be passed as >> parameters, >> >> and rendered objects, like modules, and they live in different spaces >> >> >> >> On Thu, Jun 4, 2020 at 11:33 AM A. Craig West <acraigwest@gmail.com> >> >> wrote: >> >> >> >>> Ahhh, modules aren't objects that can be passed. You would use >> >>> children() >> >>> : >> >>> module all() { >> >>> children(); >> >>> mirror([1, 0, 0]) >> >>> children(); >> >>> mirror([0, 1, 0]) { >> >>> children(); >> >>> mirror([1, 0, 0]) >> >>> children(); >> >>> } >> >>> } >> >>> module m() { >> >>> cube(10); >> >>> } >> >>> module n() { >> >>> cube(20); >> >>> } >> >>> all() m(); >> >>> all() n(); >> >>> >> >>> On Thu, 4 Jun 2020, 11:17 sean d'epagnier, <seandepagnier@gmail.com> >> >>> wrote: >> >>> >> >>>> I want to pass different modules like: >> >>>> module m() { >> >>>> cube(10); >> >>>> } >> >>>> >> >>>> module n() { >> >>>> ... >> >>>> } >> >>>> >> >>>> all(m); >> >>>> all(n); >> >>>> >> >>>> On 6/4/20, lar3ry <lar3ry@sasktel.net> wrote: >> >>>> > Works fine for me. >> >>>> > >> >>>> > all(); >> >>>> > module all(m) { >> >>>> > m(); >> >>>> > mirror([1, 0, 0]) >> >>>> > m(); >> >>>> > mirror([0, 1, 0]) { >> >>>> > m(); >> >>>> > mirror([1, 0, 0]) >> >>>> > m(); >> >>>> > } >> >>>> > } >> >>>> > >> >>>> > >> >>>> > module m() { >> >>>> > cube(10); >> >>>> > } >> >>>> > >> >>>> > >> >>>> > >> >>>> > >> >>>> > -- >> >>>> > Sent from: http://forum.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 >> >
NH
nop head
Thu, Jun 4, 2020 8:02 PM

Yes, it is. But I do find it necessary sometimes. Even worse is use $p in
the child module without it being a parameter!

On Thu, 4 Jun 2020 at 20:59, jon jon@jonbondy.com wrote:

a BIT of a hack?

On 6/4/2020 3:54 PM, nop head wrote:

You can pass parameters to children via $ variables. A bit of hack but
it works.

module ten() {
let($p = 10) children();
}

ten() cube($p);

Yes, it is. But I do find it necessary sometimes. Even worse is use $p in the child module without it being a parameter! On Thu, 4 Jun 2020 at 20:59, jon <jon@jonbondy.com> wrote: > a BIT of a hack? > > On 6/4/2020 3:54 PM, nop head wrote: > > You can pass parameters to children via $ variables. A bit of hack but > > it works. > > > > module ten() { > > let($p = 10) children(); > > } > > > > ten() cube($p); > > >
RP
Ronaldo Persiano
Thu, Jun 4, 2020 8:04 PM

This is still a limitation compared to multiple parameters.. but I
guess openscad doesn't allow mixing passed parameters with modules.

You may use parameters in all() provided they are not modules:

module all(v=[0,0,0]) {
translate(v)
children();
mirror([1, 0, 0])
translate(v)
children();
mirror([0, 1, 0]) {
translate(v)
children();
mirror([1, 0, 0])
translate(v)
children();
}
}
module m() {
sphere(10);
}
module n() {
cube(10);
}

all([20,20,20]) m();
all([10,10,-10]) n();

> > This is still a limitation compared to multiple parameters.. but I > guess openscad doesn't allow mixing passed parameters with modules. > You may use parameters in all() provided they are not modules: module all(v=[0,0,0]) { translate(v) children(); mirror([1, 0, 0]) translate(v) children(); mirror([0, 1, 0]) { translate(v) children(); mirror([1, 0, 0]) translate(v) children(); } } module m() { sphere(10); } module n() { cube(10); } all([20,20,20]) m(); all([10,10,-10]) n();
RP
Ronaldo Persiano
Thu, Jun 4, 2020 8:18 PM

Even worse is use $p in the child module without it being a parameter!

Yes but useful when we have a big list that is  constant throughout a
recursive process.

> > Even worse is use $p in the child module without it being a parameter! > Yes but useful when we have a big list that is constant throughout a recursive process.
SD
sean d'epagnier
Fri, Jun 5, 2020 1:31 PM

I have learned a lot..  The $ variables hack is interesting, but I
hope not to use it.

On 6/4/20, Ronaldo Persiano rcmpersiano@gmail.com wrote:

Even worse is use $p in the child module without it being a parameter!

Yes but useful when we have a big list that is  constant throughout a
recursive process.

I have learned a lot.. The $ variables hack is interesting, but I hope not to use it. On 6/4/20, Ronaldo Persiano <rcmpersiano@gmail.com> wrote: >> >> Even worse is use $p in the child module without it being a parameter! >> > > Yes but useful when we have a big list that is constant throughout a > recursive process. >