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