OpenSCAD 用户手册/开发中
本节包含有关正在进行的工作的文档,这些工作作为 OpenSCAD 快照版本中的实验功能可用,或者尚未完全集成,并挂起在 分支 或 拉取请求 中,位于 OpenSCAD github 存储库。
此处列出的信息主要旨在帮助使用和测试实验功能的人员提供反馈。在这些功能正式发布之前,API 和功能行为可能会发生变化。
注意:如果此处提到的功能已包含在快照版本中,通常还需要在“首选项”对话框中启用该功能!
roof()
在 2D 子多边形上生成 45° 的倒角。它是通过沃罗诺伊或直线点网格生成构建的。
roof(method = ["straight" | "voronoi"], convexity = N) { children };
- 参数:
- 方法
- "straight" 或 "voronoi"。 "voronoi"(默认)设置在多边形角为凹角时生成圆形曲线。对于凸多边形,"straight" 和 "voronoi" 之间没有区别。
- 凸度
- 整数。凸度参数指定与对象相交的光线可能穿过的最大面数。此参数仅在 OpenCSG 预览模式下正确显示对象时才需要。它对多面体渲染没有影响。对于显示问题,在大多数情况下将其设置为 10 应该可以正常工作。
- 方法
default values: roof() square(10); yields: roof(method = "voronoi", convexity = 1) square(10);
示例:斜面文本
$fa=1; $fs=0.4; intersection() { cube([100,100,2],true); scale([1,1,3]) roof(convexity=6) text("Wow"); }
textmetrics()
返回有关文本大小和位置的信息,如果按照其参数指定的布局,则会将这些信息应用于文本。
参数
textmetrics()
的参数与 text()
的参数完全相同。
返回值
textmetrics()
的返回值是一个具有以下属性的对象
position
一个 [x,y] 对,给出完全包围文本的最小框的左下角。
size
一个 [x,y] 对,给出该框的大小。
ascent
文本基线到文本最高点之间的垂直距离(通常为正数)。
descent
文本基线到文本最低点之间的垂直距离(通常为零或负数)。
offset
一个 [x,y] 对,给出从原点到文本基线起点的距离。此值通常为 [0,0],但在使用非默认对齐方式时可能是非零值。
advance
一个 [x,y] 对,给出从此文本的起点到后续文本的起点的距离。通俗地说,它表示在开始下一段文本之前笔应该移动多远。此值仅在默认对齐方式(水平文本左/基线对齐和垂直文本中心/顶部对齐)下直接有用。
注意:与任何数组一样,您可以使用类似对象的 ".x" 或 ".y" 来引用 [x,y] 对中的两个条目。因此,您可以引用 obj.size[0] 或 obj.size.x 来获取文本的 X 维度。
示例输出(重新格式化以提高可读性)
ECHO: { position = [2.2784, -5.7728]; size = [87.0362, 24.8832]; ascent = 19.1104; descent = -5.7728; offset = [0, 0]; advance = [89.5186, 0]; }
示例
echo(textmetrics(text="A",size=10));
fontmetrics()
返回有关指定字体和大小的信息。
fontmetrics()
的参数是大小和字体名称。
参数
size
字体大小 font
字体名称
返回值
fontmetrics()
的返回值是一个具有以下属性的对象
nominal
一个具有 ascent 和 descent 属性的对象,描述字体的“通常”上升和下降。对于大多数字体,这将是大写字母的上升和带下降字母的小写字母的下降。
max
一个具有 ascent 和 descent 属性的对象,描述字体的最大上升和下降。
interline
作为正数给出字体的设计行间距。
font
一个具有 family 和 style 成员的对象,给出所选字体的名称和样式。如果指定的字体不可用,或者如果指定了“sans”或“serif”之类的通用名称,或者仅指定了样式,则这些名称可能与提供的名称不同。
模块引用使用模块字面量进行初始化。在以下代码段中,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);
|
在另一种形式中,您向module_literal提供参数。这些参数将转发到原始模块。
my_cylinder = module(height) cylinder(h = height, r=10, center=true);
|
在这种情况下,您使用修改后的参数调用引用。
my_cylinder(20);
|
在最终形式中,您可以创建一个匿名module_literal并将引用初始化为它。
(请注意,在此形式中,在结束花括号之后必须有一个分号)
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);
|
模块文字可以存储在数组中并从函数中返回。在这些情况下,在调用它们之前将它们分配给符号可能会很不方便。您可以通过在实例化参数之前将解析为module_literal的表达式括在括号中来实例化它。
//-------------
// 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
|
有关module_literals和模块引用的更高级用法,请参阅https://github.com/kwikius/openscad/tree/module_literal_v3/examples/ModuleLiterals
OpenSCAD中渲染几何体的缓存数据仅限于应用程序的生命周期。此功能为渲染几何体的持久存储提供了解决方案。所有渲染的几何体都使用boost序列化库进行序列化,并根据用户偏好推送到本地文件系统缓存或Redis数据库中。
- 下载并安装Redis数据库
- 从以下地址下载并安装Hiredis 0.14.1或更高版本,并进行构建:,构建并安装它。
- 此功能的源代码尚未合并。它在此PR中可用https://github.com/openscad/openscad/pull/3316。克隆并构建此PR。
- 启动Redis服务器,并记下其配置文件中的IP地址、端口号和密码(如果有)。
- GUI模式:打开首选项对话框并移动到高级选项卡。启用使用Redis的持久缓存复选框。填写配置详细信息并关闭首选项对话框。
- CLI模式:OpenSCAD添加了一个新的选项cache。在Redis的情况下,此选项的使用方法如下所示。
example: ""--cache=redis,127.0.0.1,6379,foobared""
- 就是这样,现在OpenSCAD已准备好使用Redis进行缓存。
- GUI模式:打开首选项对话框并移动到高级选项卡。启用本地缓存复选框。
- CLI模式:这是cache选项的另一个变体。此选项的使用方法如下所示。
example: ""--cache=file""
- 就是这样,现在OpenSCAD已准备好使用本地文件系统进行缓存。