---
# System prepended metadata

title: 5. 物件參考
tags: [FlatCAM]

---


# 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` 操作。

![iso](https://hackmd.io/_uploads/H16vcTJPee.png)

隔離銑削範例，n=2。

#### 5.1.4.2. 板材輪廓切割（Board Cutout）

**參數：**

* 刀具直徑 d：切割刀具直徑。
* 邊距 m：矩形邊距。
* 卡榫大小 g：卡榫寬度。
* 卡榫數量（Gaps）：

  * 2 (T/B)：上下兩邊各一個卡榫。
  * 2 (L/R)：左右兩邊各一個卡榫。
  * 4：四邊各一個卡榫。

此操作會建立一個矩形刀路幾何物件，包含卡榫以防止板材切割時脫落。

此操作可透過物件 GUI 或 Shell 指令 `cutout` 執行。

![cutout](https://hackmd.io/_uploads/SkE9qTJwlg.png)
板材輪廓切割尺寸示意。

#### 5.1.4.3. 非銅區域（Non-copper Regions）

**參數：**

* 邊界邊距 m。
* 是否圓角。

此操作會產生一個幾何物件，覆蓋 Gerber 物件中無銅箔的空白區域。

![non_copper](https://hackmd.io/_uploads/rJRoqTkDgx.png)
非銅區域範例：(a) 無邊距，(b) 有邊距。

非銅區域操作可透過物件 GUI 使用。

#### 5.1.4.4. 外接矩形框（Bounding Box）

**參數：**

* 邊界邊距 m。
* 是否圓角，若有，圓角半徑為 m。

此操作會產生一個幾何物件，為 Gerber 物件繪製一個距離最小外接矩形邊界 m 的矩形路徑，並可選擇圓角。

![bounding_box](https://hackmd.io/_uploads/Hy6acpkvll.png)
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（多邊形法）：指定欲塗佈區域多邊形。

產生覆蓋指定多邊形表面的刀具路徑幾何物件。

![paint](https://hackmd.io/_uploads/SyjXs6Jvgl.png)
塗佈區域產生示例，(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` 執行。


