如果 size 的类型只能是单个值或具有 3 个值的向量,则可以通过特殊值 undef 帮助找到类型:
a = [3,5,8];
// a = 5;
if (a[0] == undef) {
dimensions = concat(a, a, a);
// do something
cube(size=dimensions,center=false);
}
else {
dimensions = a;
// do something
cube(size=dimensions,center=false);
}
但是分配仅在定义它们的范围内有效,openscad 的文档。因此,在每个子树中都需要很多代码,我更愿意在外部脚本(例如 python3)中验证大小的类型,并将带有变量分配的 openscad 代码写入文件,该文件可以包含在 openscad 文件中,这是我的简短测试代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
# size = 20
size = [20,15,10]
if type(size) == int:
dimensions = [size, size, size]
elif type(size) == list:
dimensions = size
else:
# if other types possible
pass
with open('variablen.scad', 'w') as wObj:
for i, v in enumerate(['l', 'w', 'h']):
wObj.write('{} = {};\n'.format(v, dimensions[i]))
os.system('openscad ./typeDef.scad')
variablen.scad 的内容:
l = 20;
w = 15;
h = 10;
typeDef.scad 看起来像这样
include <./variablen.scad>;
module my_cubelike_thing() {
linear_extrude(height=h, center=false) square(l, w);
}
my_cubelike_thing();