跳转到内容

OpenSCAD 用户手册/STL 导出

来自维基教科书,开放的书籍,为开放的世界


使用 F6 渲染后,可以使用“文件 -> 导出”菜单导出为 STL、OFF、AMF、3MF、DXF、SVG、CSG、PNG(图像)或 PDF。

请务必检查控制台窗口以获取错误消息。

  • STL、OFF 和 DXF 使用 import() 导入
  • CSG 可以使用 include<> 导入,或者像 SCAD 文件一样加载
  • PNG 可以使用 surface() 导入
  • 对于 SVG 和 AMF,存在开放的拉取请求,需要更多工作/测试
  • 文件后缀用于确定类型

STL 导出

[编辑 | 编辑源代码]

要导出设计,请从“文件 -> 导出”菜单中选择“导出为 STL...”,然后在随后的对话框中输入文件名。不要忘记添加“.stl”扩展名。

故障排除:

编译并渲染 CGAL(F6)之后,您可能会发现您的设计是简单的:否。这是个坏消息。

请查看OpenSCAD 2010.02的以下输出中的第 8 行

Parsing design (AST generation)...
Compiling design (CSG Tree generation)...
Compilation finished.
Rendering Polygon Mesh using CGAL...
Number of vertices currently in CGAL cache: 732
Number of objects currently in CGAL cache: 12
   Top level object is a 3D object:
   Simple:         no                <*****************
   Valid:         yes
   Vertices:       22
   Halfedges:      70
   Edges:          35
   Halffacets:     32
   Facets:         16
   Volumes:         2
Total rendering time: 0 hours, 0 minutes, 0 seconds
Rendering finished.

当您尝试将其导出为 .STL 时,会出现此消息

Object isn't a valid 2-manifold! Modify your design..

“流形”意味着它是“水密”的,并且几何体中没有孔。在有效的二维流形中,每条边必须连接恰好两个面。这意味着程序必须能够将一个面与一个物体连接起来。例如,如果您使用高度为 10 的立方体从一个宽度为 10 的立方体中雕刻出一些东西,则不清楚顶部或底部属于哪个立方体。因此,使较小的提取立方体稍微“更长”(或“更短”)。

difference() {
	// original
	cube (size = [2,2,2]);
	// object that carves out
	# translate ([0.5,0.5,-0.5]) {
	    cube (size = [1,1,3]);	
	}
}
正确使用差值

这里有一个更棘手的例子,取自OpenSCAD论坛(检索时间:2010 年 3 月 22 日,UTC 时间 15:13)

module example1() {
		cube([20, 20, 20]);
		translate([-20, -20, 0]) cube([20, 20, 20]);
		cube([50, 50, 5], center = true);
	}
module example2() {
		cube([20.1, 20.1, 20]);
		translate([-20, -20, 0]) cube([20.1, 20.1, 20]);
		cube([50, 50, 5], center = true);
	}

示例 1 将以这种方式呈现

一个无效的二维流形立方体(简单 = 否)

示例 1 模块不是有效的二维流形,因为两个立方体共享一条边。它们相互接触但不相交。

示例 2 是一个有效的二维流形,因为存在一个交点。现在,构造满足二维流形约束,规定每条边必须连接恰好两个面。

您要减去的部分必须延伸到原始部分之外。(OpenSCAD 提示:流形空间和时间,检索时间:2010 年 3 月 22 日,UTC 时间 18:40)。

作为参考,另一种导致设计无法导出的是,当两个面(每个面都是减法结果)相接触时。然后会出现错误消息。

difference () {
   cube ([20,10,10]);
   translate ([10,0,0]) cube (10);
}
difference () {
   cube ([20,10,10]);
   cube (10);
}

简单地接触表面被正确处理。

translate ([10,0,0]) cube (10);
cube (10);
华夏公益教科书