跳轉到內容

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);
華夏公益教科書