跳至內容

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