跳转到内容

OpenSCAD 用户手册/开发中

来自 Wikibooks,开放世界的开放书籍

开发中

[编辑 | 编辑源代码]

本节包含有关正在进行的工作的文档,这些工作作为 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() 返回有关文本大小和位置的信息,如果按照其参数指定的布局,则会将这些信息应用于文本。

参数

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 维度。

textmetrics() 函数返回的信息。

示例输出(重新格式化以提高可读性)

 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() 返回有关指定字体和大小的信息。

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进行缓存?

[编辑 | 编辑源代码]
  • 下载并安装Redis数据库
  • 从以下地址下载并安装Hiredis 0.14.1或更高版本,并进行构建:,构建并安装它。
  • 此功能的源代码尚未合并。它在此PR中可用https://github.com/openscad/openscad/pull/3316。克隆并构建此PR。
  • 启动Redis服务器,并记下其配置文件中的IP地址、端口号和密码(如果有)。
  • GUI模式:打开首选项对话框并移动到高级选项卡。启用使用Redis的持久缓存复选框。填写配置详细信息并关闭首选项对话框。
OpenSCAD的持久缓存
  • CLI模式:OpenSCAD添加了一个新的选项cache。在Redis的情况下,此选项的使用方法如下所示。
          example: ""--cache=redis,127.0.0.1,6379,foobared""
  • 就是这样,现在OpenSCAD已准备好使用Redis进行缓存。

如何使用本地缓存?

[编辑 | 编辑源代码]
  • GUI模式:打开首选项对话框并移动到高级选项卡。启用本地缓存复选框。
  • CLI模式:这是cache选项的另一个变体。此选项的使用方法如下所示。
          example: ""--cache=file""
  • 就是这样,现在OpenSCAD已准备好使用本地文件系统进行缓存。
华夏公益教科书