Greetings all;
Scope of arguments seems to be a problem in my current code for this
drive, and I find a need to pass a two values to an oft used module
called keys1,2,3 at this time. but if I could pass two arguments in the
call by name, not even using the same name but the value I could strip 2
and 3 back out of it.
What does that syntax look like?
Thanks all.
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
If we desire respect for the law, we must first make the law respectable.
Gene,
I'm not sure I am following your difficulty. What you are wanting seems
like exactly how it was designed.
I found this documentation:
https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/User-Defined_Functions_and_Modules#Modules
Example:
---=========================
x=5;
y=12;
z = 3;
MyFancyShape(x, y, z); //example of use #1
translate([40,40,40])
MyFancyShape(HowLong = 7, HowWide=2, HowHigh = 20); //Example of use #2
translate([-40,-40,-40])
MyFancyShape(HowLong = x, HowWide=y, HowHigh = z); //Example of use #3
module MyFancyShape(HowLong = 20, HowWide = 10, HowHigh = 30) {
cube([HowLong, HowWide, HowHigh]);
}
---=========================
The above module MyFancyShape has 3 defined parameters: HowLong, HowWide,
HowHigh. When calling the parameters, one can just supply them in order
(first example), or by name (example #2). Example #3 just shows that one
can use variable names and parameter names together.
Does that help?
Best wishes,
Kevin T
On Thu, Jul 15, 2021 at 4:21 AM Gene Heskett gheskett@shentel.net wrote:
Greetings all;
Scope of arguments seems to be a problem in my current code for this
drive, and I find a need to pass a two values to an oft used module
called keys1,2,3 at this time. but if I could pass two arguments in the
call by name, not even using the same name but the value I could strip 2
and 3 back out of it.
What does that syntax look like?
Thanks all.
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
If we desire respect for the law, we must first make the law respectable.
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
I think maybe Gene is interested in using default values to call the same
module with different numbers of arguments? In that case, I believe you can
supply arguments without using their name if you list them in order, and
any later arguments use their default values. If you want to use a later
argument without the ones that come before it you can do that by specifying
the name. Using the same MyFancyShape:
module MyFancyShape(HowLong = 20, HowWide = 10, HowHigh = 30) {
cube([HowLong, HowWide, HowHigh]);
}
x=5;
y=12;
z = 3;
// These are equivalent
MyFancyShape(x);
MyFancyShape (x, 10, 30);
// These are equivalent
MyFancyShape(x, y);
MyFancyShape (x, y, 30);
// These are equivalent
MyFancyShape (x, HowHigh=z);
MyFancyShape (x, 10, z);
// If you use the names you can put them in any order. These are equivalent
MyFancyShape (HowWide=y, HowHigh=z, HowLong=x);
MyFancyShape (x, y, z);
On Thursday 15 July 2021 04:57:24 Kevin Toppenberg wrote:
Gene,
I'm not sure I am following your difficulty. What you are wanting
seems like exactly how it was designed.
I found this documentation:
https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/User-Defined_Functi
ons_and_Modules#Modules
Example:
---=========================
x=5;
y=12;
z = 3;
MyFancyShape(x, y, z); //example of use #1
translate([40,40,40])
MyFancyShape(HowLong = 7, HowWide=2, HowHigh = 20); //Example of
use #2
translate([-40,-40,-40])
MyFancyShape(HowLong = x, HowWide=y, HowHigh = z); //Example of use
#3
module MyFancyShape(HowLong = 20, HowWide = 10, HowHigh = 30) {
cube([HowLong, HowWide, HowHigh]);
}
---=========================
The above module MyFancyShape has 3 defined parameters: HowLong,
HowWide, HowHigh. When calling the parameters, one can just supply
them in order (first example), or by name (example #2). Example #3
just shows that one can use variable names and parameter names
together.
Does that help?
Best wishes,
Kevin T
On Thu, Jul 15, 2021 at 4:21 AM Gene Heskett gheskett@shentel.net
wrote:
Greetings all;
Scope of arguments seems to be a problem in my current code for this
drive, and I find a need to pass a two values to an oft used module
called keys1,2,3 at this time. but if I could pass two arguments in
the call by name, not even using the same name but the value I could
strip 2 and 3 back out of it.
What does that syntax look like?
Yes I think so, what I had in mind would be to define:
module keys(h=y,d=z,t)
{
if key(key != 0) translate([0,0,t]) keys(y, z);// make it optional
};
then later:
mode=1; // mode value determining which module to build
key=1;
if(mode=2)
{
//calls to other modules that use keys.
};
See attached snapshot, designed for easier assembly but no rotational
slippage allowed, either of this part within the housing, or the next
part contained by the smaller knobs on the inside face of the pictured
part. And I need to scale so the outer cuts here are varname+.2mm, while
the bumps in the housing inner wall these cuts engage are sized at
varname-.2, leaving room for a press fit. The printer expands about half
the nozzle size, so I need to expand the cuts, and shrink the matching
knobs an equal amount for a fit that actually works.
Many thanks to both replies to my post, now I know I /can/ make it work.
Thanks all.
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
If we desire respect for the law, we must first make the law
respectable. - Louis D. Brandeis
Genes Web page http://geneslinuxbox.net:6309/gene
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
If we desire respect for the law, we must first make the law respectable.
module keys(h=y,d=z,t)
The convention is usually to put arguments without defaults first so that
you can use them without specifying the argument name.