向量繪圖軟體 xfig 簡介


摘要

畫面簡介

以下簡介當中用到的術語, 來自手冊 /usr/X11R6/lib/X11/xfig/html .

  1. 最上面一列為命令列 (command panel), 包含 Quit (離開 xfig), New (重新開始, 畫一張新的圖), Port/Land (切換垂直/水平模式), Undo (取消最近剛下的那個指令), Redraw (重新整理螢幕), Paste (把剛剛剪下來的東西貼上去), File (讀/存/合併檔案), Export (以 ... 格式輸出), Print (列印), Help (求助).
  2. 左邊為工具列: 上半部 (drawing mode panel) 讓使用者建立新的物件; 下半部 (editing mode panel) 提供剪貼, 拷貝, 增/刪/移動物件上的頂點等編輯功能.
  3. 最下面為狀態列 (indicator panel), 顯示目前筆的顏色, 線的粗細, 箭頭的長像, ... 等等. 點選就可以修改.
  4. 因為內定 Balloons 功能是打開的, 所以 mouse 移到各選單或按鈕時, 都會出現一個簡單的 help 訊息.
  5. 右上角的提示會隨著 mouse 的位置與目前選擇的功能而顯示不同的訊息, 告訴你現在如果按下各個 mouse 鍵, 會發生什麼事.

給新手的重點提示

狀態列內顯示的東西, 會隨著目前你所選的工具不同而改變. 例如你若正要做 "Text input", 則狀態列內會出現文字的大小, 文字傾斜角度等等項目; 如果你正要畫 "Regular Polygon", 則會出現多邊形的邊數這個項目.

狀態列上有兩個特殊的項目: grid mode 與 point position. 打開 grid mode, 畫面底下就會出現方格, 方便你目視檢查物件的相關位置. 真正印出圖案時不會出現. 至於 point position 則與顯示方格無關, 而是決定放置物件時, 是否要自動將滑鼠移到最鄰近的方格點. 我習慣將兩者都打開. 注意: point position 這個項目只在你選擇某些工具時會出現 (例如建立新物件或移動物件等等).

狀態列上顯示的設定, 影響的是 即將畫的東西; 如果你對已經畫好的東西有意見, 可以選擇 editing mode panel 當中的 edit 來修改.

範例 1: 製作 "job control" 圖的注意事項

[job control]
  1. 為了方便對齊, 可以先把 grid mode 與 point position 都打開.
  2. 先用 polygon drawing 畫六角型. 因為它不是正多邊形, 所以無法用 regular polygon 畫.
  3. 另外三個六角型, 用 copy objects 複製比較快, 也比較不會出錯.
  4. 對角線上的文字 ("fg" 與 "kill") 可以先寫上去, 事後再用 edit 來調整傾斜角. 調整角度之後, 可能需要移動一下位置. 要安置這種傾斜的字, 把 point position 關掉比較方便.

範例 2: 製作 "彩虹" 圖的注意事項

[彩虹]
  1. 這個圖本來也可以用粗線條的 arc drawing 畫出來; 不過為了說明 depth 的觀念, 我們採用另外一個方法.
  2. 首先畫五個同心圓, 並畫一個長方型蓋在所有圓的下半部.
  3. 用 edit 調整每個物件的 depth. 越外層的圓, depth 越大 (表示沉在越下面). 長方形的 depth 最小 (蓋在最上面)
  4. 打開 fill 並圖顏色.
  5. 注意: xfig 在 export png 格式的檔案時, 顏色會消失. 所以我們先將它 export 成 ppm, 再從 unix 的命令列下 pnmtopng 將它壓縮成 png.

心得/想像/問題

我發現有一個 fig2dev 命令 (來自 transfig 套件) 可以直接將 fig 檔轉換成各種圖檔, 而不需要經過使用者手動操作 xfig. 這表示我們可以寫一個簡單的 script, 把像這樣的文字資料:

[軟硬體相容性]
        [OS vs Hardware]
        solaris: sparc x86
        netbsd: sparc ppc m68k x86 alpha arm
        linux: sparc ppc m68k x86 alpha arm
        ...

        [GUI vs Scripting]
        tk: perl tcl python
        wxwin: python

轉換成一個 fig 檔 (fig 是文字檔, 其格式在手冊當中有介紹), 然後呼叫 fig2dev 轉換成右圖的 png. (不要轉成 gif, 因為 gif 有專利權的問題!). 即使要畫比較複雜的圖形, 可能也可以配合 xfig 當中 library 的功能來完成. 如果應用在 cgi 程式當中, 就成為 (帶有資訊的, 不是只有花俏效果的) 即時圖形網頁.

不曉得 transfig 將來會不會支援 fig 格式與 Scalable Vector Graphics (SVG) 這個 xml 格式的轉換?