GRA

## 概要

GRAファイルは, 直線, 円などのグラフィックス命令を記述した, グラフのマージ等に使われるNgraph独自のファイル形式です。

また、External driverへグラフィックス命令を送るのにも使われます。

### GRAファイルの互換性

- Ngraph version 6.x の GRA ファイルは, DOS 版 Ngraph (version 5.x) の GRA ファイルと僅かに異なるため,互換性はありません。
- ただしNgraph version 6.x で DOS 版 Ngraph (version 5.x) の GRA ファ イルをマージすることは可能です。
- DOS 版 Ngraph の GRA ファイルの構造およびコマンドについては DOS 版 Ngraph に添付されているマニュアルを参照してください。
- Ngraph version 6.04 で H コマンド (フォントメトリック指定命令) が拡 張されました。 version 6.04 で作成した GRA ファイルはそれ以前のバー ジョンで読み込むことはできません。
- Ngraph version 6.05 で C コマンド (楕円描画命令) と G コマンド(カラー 指定命令) が拡張されました。 version 6.05 で作成した GRAファイルは それ以前のバージョンで読み込むことはできません。

## GRAファイルの構造

下にGRAファイルの例を示します。

    %Ngraph GRAF
    %Creator: Ngraph ver 6.00.01
    I,5,0,0,21000,29700,10000
    V,5,0,0,21000,29700,1
    G,3,0,0,0
    A,5,0,40,2,0,1000
    L,4,3500,22000,17500,22000
    L,4,3500,22000,3500,8000
    L,4,3500,8000,17500,8000
    L,4,17500,22000,17500,8000
    E,0

GRAファイルの第一行はGRAファイルの識別子である次の文字列でなければなりません。

    %Ngraph GRAF

第2行以降は1行に1つずつグラフィックスコマンドが記述されます。グラフィックスコマンドの形式を示します。

    command, n, arg1, arg2, ..., argn

- commandはグラフィックスコマンドを指定するアルファベット一文字で I, E, V, A, G, M, N, L, T, C, B, P, R, D, H のいずれかです。
- n は引数の数(整数)を現します。
- arg1, ..., argnはグラフィックスコマンドの引数(整数)です。

コマンドの区切りにはスペース, タブ, コンマが使えます。 ただしcommandが%, F, S の場合には次のようにコマンド直後に 文字列の引数(下の例ではthis is a string)を記述します。

    Sthis is a string

この場合, 文字列引数の中のスペース・タブ・コンマは通常の文字として扱われます。

## GRAファイルのグラフィックコマンド

グラフィックコマンドの引数は特に指定のない限り単位は0.01mmです。 X座標増加方向は右, Y座標増加方向は下です。 数値引数はすべて整数値でなければなりません。

コマンド | 機能 | 書式
I | 初期化命令 | I,5,arg1,arg2,arg3,arg4,arg5

arg1
  左マージン
arg2
  上マージン
arg3
  出力用紙幅
arg4
  出力用紙高
arg5
  拡大率(0.01%単位)

- 出力デバイスの初期化を行う。1回の描画で初めに一度だけ呼ばれる。

コマンド | 機能 | 書式
E | 終了命令 | E,0

- 一回の描画で最後に一度だけ呼ばれる。出力デバイスの後処理を行う。

コマンド | 機能 | 書式
% | コメント | %comment

- 文字列引数(コメント)

コマンド | 機能 | 書式
V | クリッピング領域, 原点移動命令 | V,5,arg1,arg2,arg3,arg4,arg5

arg1
  左上X座標, 新しいX座標原点
arg2
  左上Y座標, 新しいY座標原点
arg3
  右下X座標
arg4
  右下Y座標
arg5
  - 0:クリッピングオフ
  - 1:クリッピングオン

- この命令以降, V命令を除くすべての命令は原点をクリッピング領域左上としたものになる。
- パラメタは A4用紙左上を原点とする0.01mm単位で指定します。
- クリッピング処理は基本的にNgraph内部で行っているので必ずしも必要ではないが, クリッピングするのが望ましい(原点移動は必須)。

コマンド | 機能 | 書式
A | 線属性指定命令 | A,n,arg1,arg2,....

n
  点線要素の数+5
arg1
  0:実線 >1:点線要素の数
arg2
  線幅
arg3
  線端形状
  - 0:Butt
  - 1:Round
  - 2:Projecting
arg4
  線交差形状
  - 0:Miter
  - 1:Round
  - 2:Bevel
arg5
  Miter limit
arg(i) - arg(i + 5) i = 1 - arg1
  点線要素

コマンド | 機能 | 書式
G | カラー指定命令 | G,4,arg1,arg2,arg3,arg4

arg1
  R(8bit)
arg2
  G(8bit)
arg3
  B(8bit)
arg4
  A(8bit) (不透明度)

- arg4 は設定によって、あるいはドライバによって無視されることがある。

コマンド | 機能 | 書式
M | カレントポイント移動命令 | M,2,arg1,arg2

arg1
  X座標
arg2
  Y座標

コマンド | 機能 | 書式
N | カレントポイント相対移動命令 | N,2,arg1,arg2

arg1
  X方向移動量
arg2
  Y方向移動量

コマンド | 機能 | 書式
L | 線描画命令 | L,4,arg1,arg2,arg3,arg4

arg1
  始点X座標
arg2
  始点Y座標
arg3
  終点X座標
arg4
  終点Y座標

コマンド | 機能 | 書式
T | カレントポイント相対・線描画命令 | T,2,arg1,arg2

arg1
  終点X座標, 新しいカレントポイントX座標
arg2
  終点Y座標, 新しいカレントポイントY座標

- 本命令実行後, カレントポイントは終点に移動する。

コマンド | 機能 | 書式
C | 楕円描画命令 | C,7,arg1,arg2,arg3,arg4,arg5,arg6,arg7

arg1
  中心のX座標
arg2
  中心のY座標
arg3
  X方向半径
arg4
  Y方向半径
arg5
  楕円弧開始角度, 0.01度単位(0-36000)
arg6
  楕円弧開始角度, 0.01度単位(0-36000)
arg7
  - 0:円の輪郭（内部は塗りつぶさない）
  - 1:扇形内部を塗りつぶす
  - 2:円弧内部を塗りつぶす
  - 3:扇形に輪郭を描画
  - 4:弓形に輪郭を描画

- arg5から開始してarg6の角度だけ反時計回りに楕円弧を描く。
- 角度は, 楕円 (x/a)^2+(y/b)^2=1 を x=a*cosθ, y=b*sinθ と媒介変数表示した時のθ。

コマンド | 機能 | 書式
B | 四角形描画命令 | B,5,arg1,arg2,arg3,arg4,arg5

arg1
  X座標
arg2
  Y座標
arg3
  対角のX座標
arg4
  対角のY座標
arg5
  - 0:四角形の輪郭（内部は塗りつぶさない）
  - 1:内部を塗りつぶす

コマンド | 機能 | 書式
P | 点描画命令 | P,2,arg1,arg2

arg1
  X座標
arg2
  Y座標

コマンド | 機能 | 書式
R | 多角形描画命令 | R,n,arg1,arg2,...

n
  座標点の数*2+1
arg1
  座標点の数
arg(i * 2 + 0) i = 1 - arg1
  X座標
arg(i * 2 + 1) i = 1 - arg1
  Y座標

コマンド | 機能 | 書式
D | 閉多角形描画命令 | D,n,arg1,arg2,...

n
  座標点の数*2+2
arg1
  座標点の数
arg2
  - 0:多角形の輪郭（内部は塗りつぶさない）
  - 1:内部を塗りつぶす(EvenOddRule)
  - 2:内部を塗りつぶす(WindingRule)
arg(i * 2 + 1) i = 1 - arg1
  X座標
arg(i * 2 + 2) i = 1 - arg1
  Y座標

コマンド | 機能 | 書式
F | フォント選択命令 | Ffont

- 文字列引数(font フォントエイリアス名)
- 実際のフォントへのマッピングはドライバに依存

コマンド | 機能 | 書式
H | フォントメトリック指定命令 | H,4,arg1,arg2,arg3,arg4

arg1
  文字のポイントサイズ, 0.01pt単位（1pt=1/72inch）
arg2
  文字スペーシング・ポイント量, 0.01pt単位
arg3
  描画方向, X軸から反時計回りに0.01度単位
arg4
  スタイル, 0:normal, 1: bold, 2:italic の和

- 文字は全てスケーラブルでなければなりません。

コマンド | 機能 | 書式
S | 文字列描画命令 | Sstring

- 文字列引数 (string は UTF-8 文字列)