# 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` 執行。