Handing OpenSCAD module parameters derived from other variables



I'm new to OpenSCAD, but I can only get default parameters working for simple values.

I'm wondering if there is any way to achieve the following, where I have some parameters available to the module caller but by default they are derived from other parameters.

I had expected this to work - I thought the compiler to be able to resolve these variables in-scope during compilation since everything here is deterministic - so perhaps I'm just missing some syntax? If not, is there some better way to achieve this?

module clasp(length=20, 
             mouth = pin_radius * 0.9,
             inner_radius = pin_radius + 0.25,
             outer_radius = inner_radius * 1.4,
             ) {
  ... do the work ...

Unfortunately this approach leaves mount/inner/outer all undef.


Posted 2019-07-15T03:37:23.467

Reputation: 223



This seems to be a limitation of the language. One workaround that's only moderately ugly is, in the body of the module:

mouth = is_undef(mouth) ? pin_radius * 0.9 : mouth;

etc. If you'll only be using the file via a use directive in other files, another approach is file-scope variables. These can be overridden when the module is called, just like module parameters, and they do not provide or take values for/from the calling file's file-scope variable namespace.


Posted 2019-07-15T03:37:23.467

Reputation: 5 311

Learned "is_undef" from your answer. Thank you. – cmm – 2019-07-15T19:11:16.873

Thanks, the workaround is a nice trick – Hamy – 2019-07-20T21:32:34.263