OpenSCAD 用户手册/WIP/模块字面量
外观
< OpenSCAD 用户手册 | WIP
模块引用使用模块字面量进行初始化。在以下代码片段中,my_cube
是模块引用,而 module cube([2,3,4])
是模块字面量。模块字面量是一个表达式,其语法特征是它以 module
关键字为前缀。
根据你的需要,定义模块引用有几种不同的方法。
在此语法中,你定义的模块与你期望看到其输出完全相同。
// Create a reference to a cube module
my_cube = module cube([2,3,4]);
|
以上代码创建了变量 my_cube
,但不会实例化它,因此在图形窗口中不会有任何输出。若要实例化模块,你使用与模块相同的语法。
// Instantiate the module through the module reference
my_cube();
|
在此变体中,模块引用的名称只是模块的另一个名称。
my_cylinder = module cylinder;
|
要实例化模块,别名接受与它所引用的模块完全相同的参数。
my_cylinder(h=20, r=10, center=true);
|
在另一种形式中,你向模块字面量提供参数。这些参数被转发到原始模块。
my_cylinder = module(height) cylinder(h = height, r=10, center=true);
|
在这种情况下,你使用修改后的参数调用引用。
my_cylinder(20);
|
在最后的几种形式中,你可以创建一个匿名模块字面量,并将引用初始化到它。
( 请注意,在此形式中,在右花括号后面必须有一个分号 )
my_shapes = module {
cube(2,center = true);
translate([5,0,0])
sphere(1,center = true);
};
|
模块可以使用通常的方式实例化。
my_shapes();
|
匿名模块形式当然也可以接受参数。
my_rotated_square = module ( r, s) { rotate(r) square(s);};
|
模块引用可以使用通常的方式实例化。
my_rotated_square(45,10);
|
模块字面量可以存储在数组中,并从函数中返回。在这些情况下,在调用它们之前将它们分配给符号可能会很不方便。可以通过在实例化参数之前用括号括起解析为模块字面量的表达式来实例化表达式。
//-------------
// n is an integer index between 0 and 3
// choose_shape returns the shape given by the index
function choose_shape(n) =
let (ar = [
module cube([5,20,30]),
module sphere(r = 6 , $fn = 20),
module cylinder(d = 15, h = 20, $fn = 30)
])
ar[n];
//--------------
// instantiate the chosen module
(choose_shape(2))(); // choose the cylinder
|
有关模块字面量和模块引用的更高级用法,请参见 https://github.com/kwikius/openscad/tree/module_literal_v3/examples/ModuleLiterals