# 5. 物件參考
FlatCAM 物件是 FlatCAM 所操作的文件。關於介紹,請參考「物件與任務」章節。
## 5.1. Gerber 物件
### 5.1.1. 格式
Gerber 格式指定多邊形。形狀具有面積,通常是 PCB 中某一層的銅區,也用於防焊層、錫膏與圖案。
一個簡短的 Gerber 檔案範例如下:
```
G04 This line is a comment and is ignored.*
G04 Coordinate format specification:*
%FSLAX25Y25*%
G04 Set units to inches:*
%MOIN%
G04 Define an aperture:*
%ADD10C,0.100*%
G04 Change polarity to DARK:*
%LPD*%
G04 Select the previously defined aperture:*
D10*
G04 Set interpolation mode to linear:*
G01*
G04 Move to (0, 0) without drawing:*
X0Y0D02*
G04 Draw to (5, 5) using aperture 10:*
X500000Y500000D01*
G04 End of file:*
M02*
```
### 5.1.2. 支援
截至版本 8.2,FlatCAM 完整支援 Gerber 格式,但有以下例外:
* 不支援標準光圈中的孔洞。
* 插補(interpolation)一律使用圓形光圈,即使選用非圓形光圈。等效尺寸會由光圈尺寸計算並用作圓形光圈直徑。此限制通常不影響 PCB 的 Gerber。閃光(flashing)操作不受影響。
* 不支援重複步進(Step and Repeat,SR)。
### 5.1.3. 建立
Gerber 物件可透過以下方法建立:
* 透過「檔案 → 開啟 Gerber」選單。
* 透過「檔案 → 開啟最近檔案」。
* 使用 Shell 命令介面的 `open_gerber` 指令。
* 匯入 SVG 檔案,使用 Shell 命令介面的 `import_svg` 指令。
### 5.1.4. 操作
#### 5.1.4.1. 隔離銑削(Isolation Routing)
**參數:**
* 刀具直徑 d:切割刀具的直徑。
* 寬度(通過數)n:隔離間隙寬度,以刀具直徑倍數表示。
* 路徑重疊 θ:每次路徑重疊刀具直徑的比例。
此操作會產生一個幾何物件,描述切割 Gerber 檔案中多邊形外圍的刀具路徑。第一道刀路距離多邊形邊界外側為 D = d/2;若 n > 1,則會有 n−1 道附加刀路,每道相距 D = d(1−θ)。
隔離銑削可透過 GUI 或 Shell 指令 `isolate` 操作。

隔離銑削範例,n=2。
#### 5.1.4.2. 板材輪廓切割(Board Cutout)
**參數:**
* 刀具直徑 d:切割刀具直徑。
* 邊距 m:矩形邊距。
* 卡榫大小 g:卡榫寬度。
* 卡榫數量(Gaps):
* 2 (T/B):上下兩邊各一個卡榫。
* 2 (L/R):左右兩邊各一個卡榫。
* 4:四邊各一個卡榫。
此操作會建立一個矩形刀路幾何物件,包含卡榫以防止板材切割時脫落。
此操作可透過物件 GUI 或 Shell 指令 `cutout` 執行。

板材輪廓切割尺寸示意。
#### 5.1.4.3. 非銅區域(Non-copper Regions)
**參數:**
* 邊界邊距 m。
* 是否圓角。
此操作會產生一個幾何物件,覆蓋 Gerber 物件中無銅箔的空白區域。

非銅區域範例:(a) 無邊距,(b) 有邊距。
非銅區域操作可透過物件 GUI 使用。
#### 5.1.4.4. 外接矩形框(Bounding Box)
**參數:**
* 邊界邊距 m。
* 是否圓角,若有,圓角半徑為 m。
此操作會產生一個幾何物件,為 Gerber 物件繪製一個距離最小外接矩形邊界 m 的矩形路徑,並可選擇圓角。

Gerber 物件的外接矩形框:(a) 無圓角,(b) 有圓角。
外接矩形框操作可透過物件 GUI 使用。
#### 5.1.4.5. 縮放(Scale)
**參數:**
* 因子 k:幾何尺寸放大倍數,例如 2.54。
此操作會修改 Gerber 物件的尺寸,所有幾何尺寸乘以 k,座標點距離原點的距離也會乘以 k。
此操作可透過 GUI 或 Shell 指令 `scale` 使用。
#### 5.1.4.6. 偏移(Offset)
**參數:**
* 向量 v:(x, y) 坐標,用以平移幾何。
此操作會將 Gerber 物件中所有坐標點加上向量 v。
此操作可透過 GUI 或 Shell 指令 `offset` 使用。
#### 5.1.4.7. 跟隨(Follow)
> **注意**
> 此操作尚未完整實作。詳情可參閱博客文章《Tracing the Silkscreen with FlatCAM》。
#### 5.1.4.8. 鏡像(Mirror)
**參數:**
* 鏡像軸:X 軸或 Y 軸。
* 軸位置:可指定為點或矩形。
* 點 (x, y):鏡像軸通過該點。例如 (1.0, -2.0),X 軸即為 y=-2.0 水平線,Y 軸即為 x=1.0 垂直線。此項目僅在雙面 PCB 工具中可用。
* 矩形:由軸線分割成兩半的矩形,指定該矩形幾何物件。
此操作會對物件幾何以指定軸進行鏡像。
此功能可透過雙面 PCB 工具或 Shell 指令 `millholes` 使用。
---
## 5.2. Excellon 物件
### 5.2.1. 格式
Excellon 格式用於指定電路板鑽孔。
Excellon 檔案為純文字,包含刀具及鑽孔指令。範例:
```
; This line is a comment and is ignored
M48
; Units and number format:
INCH,LZ
; One tool is defined with diameter 0.04 inches,
; drill rate of 300 inches/minute and 55000 RPM.
T1C.04F300S55
; End of header, M95 or %, and beginning of body:
M95
; Use tool 1 defined in the header
T1
; Drill at points (123.45, 234.5) and (12.345, 234.5):
X12345Y23450
X012345Y234500
; End of program;
M30
```
此格式規範不嚴,存在解讀歧義。部分 CAD 軟體會錯誤實作,導致無法正確解讀。FlatCAM 嘗試盡量遵循原始規範,並在檔案無明確指定時使用以下預設:
### 5.2.2. 支援
* FlatCAM 僅支援鑽孔指令,無法解析銑削指令。
* 預設單位為英吋。
* 數字格式為毫米用 000.000,英吋用 00.0000。
* 零格式為前置零。若提供位數不足 6 位,FlatCAM 會於右側補零。
* 不支援標頭(M95 後)中刀具定義。
### 5.2.3. 覆寫預設
可使用 Shell 指令設定零位格式:
```
set_sys excellon_zeros T
```
### 5.2.4. 建立 Excellon 物件
可透過:
* 「檔案 → 開啟 Excellon」
* 「檔案 → 開啟最近檔案」
* Shell 指令 `open_excellon`
### 5.2.5. 操作
#### 5.2.5.1. 建立 CNC 工作
**參數:**
* Cut Z:鑽孔深度,低於銅面,例如 -0.1。
* Travel Z:移動至鑽孔點時的高度。
* Feedrate:鑽孔速度,單位為專案設定的單位/分鐘。
* Tool change:啟用則在 G-Code 中包含換刀序列。
* Tool change Z:換刀時刀具抬起距離,例 1.2。
* Tools:包含於 CNC 工作的刀具列表。
此操作可透過物件 GUI 或 Shell 指令 `drillcncjob` 執行。
#### 5.2.5.2. 銑削孔洞(Mill Holes)
**參數:**
* Tool dia:銑刀直徑。
* Tools:包含於操作的刀具列表。
此操作會產生包含銑孔路徑的幾何物件。
#### 5.2.5.3. 縮放(Scale)
**參數:**
* 因子 k:尺寸放大倍數,例如 2.54。
此操作會修改 Excellon 物件中的鑽孔坐標(不包含直徑),所有點乘以 k。
可透過 GUI 或 Shell 指令 `scale` 執行。
#### 5.2.5.4. 偏移(Offset)
**參數:**
* 向量 v:(x, y),用於平移幾何。
此操作會將 Excellon 物件所有坐標點加上向量 v。
可透過 GUI 或 Shell 指令 `offset` 執行。
#### 5.2.5.5. 鏡像(Mirror)
**參數:**
* 鏡像軸:X 軸或 Y 軸。
* 軸位置:可為點或矩形(與 Gerber 物件相同),點位置僅於雙面 PCB 工具可用。
此操作可透過雙面 PCB 工具或 Shell 指令 `millholes` 使用。
---
## 5.3. 幾何物件
幾何物件是 FlatCAM 中核心的幾何表示,支援多種操作與格式轉換。
### 5.3.1. 建立
#### 5.3.1.1. 從零開始
可透過:
* 選單「Exit → New Geometry」
* 工具欄「New Geometry」按鈕
* Shell 指令 `new_geometry`
建立空白幾何物件。
#### 5.3.1.2. 由其他物件產生
可由以下物件產生幾何物件:
* Gerber 物件:隔離銑削、板材輪廓、非銅區域、外接矩形、跟隨(Follow)
* Excellon 物件:銑孔
* 幾何物件:塗佈區域(Paint Area)
#### 5.3.1.3. 從 SVG 匯入
可匯入 SVG 檔案作為幾何物件:
* 「檔案 → 匯入 SVG」
* Shell 指令 `import_svg`
SVG 原點預設在左上,FlatCAM 會自動轉換為左下。
SVG 可用免費軟體 Inkscape 或商業軟體 Adobe Illustrator 製作。
FlatCAM 亦可將幾何物件匯出為 SVG(參見 `geo2svg`)。
### 5.3.2. 操作
#### 5.3.2.1. 編輯
幾何物件可在幾何編輯器中手動編輯。
#### 5.3.2.2. 建立 CNC 工作
**參數:**
* Cut Z:切割深度(負值),低於銅面。
* Travel Z:移動不切割時的高度。
* Feed Rate:切割速度,單位/分鐘。
* Tool dia:刀具直徑。
* Spindle Speed(選填):主軸轉速(RPM)。
* Multi-Depth 與 Depth/pass:多層深度切割及每層深度。
建立追蹤幾何物件路徑的 CNC 工作。
此操作可透過物件 GUI 或 Shell 指令 `aligndrill` 執行。
#### 5.3.2.3. 塗佈區域(Paint Area)
**參數:**
* Tool dia:刀具直徑。
* Overlap:每次路徑重疊比例。
* Margin:避免靠近多邊形邊緣的距離。
* Method:方法選擇,包括
* Standard(標準法):多邊形縮小刀具直徑直到無面積。
* Seed-based(種子法):從多邊形內部一點擴大圓直到與多邊形相交。
* Polygon(多邊形法):指定欲塗佈區域多邊形。
產生覆蓋指定多邊形表面的刀具路徑幾何物件。

塗佈區域產生示例,(a) 標準法,(b) 種子法。
此操作可透過 GUI 或 Shell 指令 `paint_poly` 執行。
#### 5.3.2.4. 縮放(Scale)
同 Gerber 縮放,尺寸乘以因子 k。
#### 5.3.2.5. 偏移(Offset)
同 Gerber 偏移,坐標加上向量 v。
---
## 5.4. CNC 工作物件
CNC 工作物件是 FlatCAM 中 G-Code 的簡單表示。可操作功能有限,多數選項於建立時設定。
### 5.4.1. G-Code 格式支援
FlatCAM 生成的 G-Code 遵循 NIST 指南,支援平面作業所需的有限指令。匯入非相關指令會被忽略。
### 5.4.2. 建立
可透過:
* 「檔案 → 開啟 G-Code」
* 「檔案 → 開啟最近檔案」
* Shell 指令 `open_gcode`
* 由 Geometry 物件建立 CNC 工作
* 由 Excellon 物件建立 CNC 工作
### 5.4.3. 覆寫預設
#### 5.4.3.1. 座標格式
輸出 G-Code 座標格式預設為:
```
X%.4fY%.4f
```
例如:`X12.3000Y0.4090`
可用 Shell 指令 `set_sys cncjob_coordinate_format` 修改格式,例如:
```
set_sys cncjob_coordinate_format "x%.3f y%.3f"
```
#### 5.4.3.2. Z 軸速度
Z 軸抬升方向預設為最大速度 (G00),下降方向速度預設同 XY 軸速度。
可用 Shell 指令修改下降速度:
```
set_sys zdownrate 3
```
單位為目前專案設定的單位/分鐘。
### 5.4.4. 操作
#### 5.4.4.1. 輸出 G-Code
**參數:**
* Prepend to G-Code:附加於 G-Code 檔案開頭的文字。
* Append to G-Code:附加於檔案尾端的文字。
* File Name:輸出檔案名稱。
將物件的 G-Code 儲存至指定檔案。
此操作可透過物件 GUI 或 Shell 指令 `set_sys` 執行。