OpenSCAD用户手册/STL导出

维基教科书,自由的教学读本



导出[编辑]

通过F6键渲染图像后,可利用"File --> Export"菜单将其导出为STL, OFF, AMF, DXF, SVG, CSG 或 PNG 格式文件 (图像)。

请确保检查过控制台窗口的错误消息。

  • 利用import()导入STL, OFF 与 DXF 格式文件
  • 可利用include<>导入CSG 格式文件,或像普通的SCAD文件那样来加载它
  • 可利用surface()导入PNG 格式文件
  • 已开放针对SVG 与 AMF 格式文件的pull请求,但还需要进行更多的编码工作与测试
  • 文件后缀用于确定其具体类型

STL导出[编辑]

为了导出您的设计图,请从"File --> Export"菜单里选中"Export as STL...",再于弹出的对话框中输入文件名。别忘了添加".stl"扩展名。

疑难解答:

(译注:此部分请具体版本具体分析!)

在执行compile and render CGAL (F6)后,您可能会看到您的设计报告中有这样一项 simple: no。嗯……这并不是一个好消息。

参见以下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..

"Manifold"的意思是"water tight(水密的)",也就是几何体中不存在孔洞。 在一个有效的2-manifold图形中,每个边必须与两个面精确相连。这就意味着编写的程序必须能令一个面仅与一个对象相连。例如,如果您借助一个高为10的立方体,从另一个更宽的高为10的立方体中截去部分内容,则很难辨清顶或底中两立方体相交的部分究竟属于哪个立方体。因此,此时可以令被截去的小立方体“稍长”(或“稍短”)一些:

difference() {
	// 待截的原始立方体
	cube (size = [2,2,2]);
	// 被截去的立方体对象
	# translate ([0.5,0.5,-0.5]) {
	    cube (size = [1,1,3]);	
	}
}
difference的正确打开方式

OpenSCAD论坛中(retrieved 15:13, 22 March 2010 (UTC))还有一个取巧的范例:

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);
	}

Example1的渲染效果如下:

一个非法的2-manifold立方体(simple = no)

example1模块是一个非法的2-manifold图形,这是因为两个立方体均共享了同一个边。两者互相接触却并没有相交。

Example2是一个合法的2-manifold图形,因为两个立方体相交了。此时,这模型满足了2-manifold的约束,保证了每个边必须与两个面精确相连。

在执行布尔减法时,必须保证减去的部分要超出被减去的部分。(OpenSCAD使用小提示:Manifold空间与时间, retrieved 18:40, 22 March 2010 (UTC)).

为了便于理解,这里给出另一不可导出设计的示例,本情景中,两个参与布尔减法运算的面互相接触。这将导致产生对应的错误信息。

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);