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]);
}
}
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的渲染效果如下:
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);