gtool4 規約 version 4.3

4. 構造体変数

2001-12-30T03:56:05+09:00 地球流体電脳倶楽部 davis プロジェクト


本章では構造体変数について規定する. より具体的な例(図形表現の保存法)については付属書を参照されたい.


4.1 構造体

構造体変数

構造体変数は gt_structure_class 属性を持った netCDF 変数である.

生成系は新たに生成する構造体変数を int 型で次元を持たない netCDF 変数としなければならない.

解釈系は構造体変数の型および次元について仮定してはならない[注].

構造体変数の名前

生成系は図形情報を構造体変数として格納する場合は少なくともそのひとつに main という名前を与えることを推奨する. これはデバイス, 枠, または図の構造体とすべきである.

可視化を行う解釈系は特に指定されなければ main 変数を探し出してこれを表示することを推奨する.

構造体の種類

構造体が持っている gt_structure_class 属性値は文字型で, 構造体の種別を表わす.

生成系は構造体変数に 4.2 節で規定された種別を与えねばならない.

解釈系は gt_structure_class 属性を参照して, 構造体に許される操作の種類を選択しなければならない. 4.2 節 で規定されない種別の構造体変数の解釈は規定しない.

構造体のリンク

構造体は他の複数の構造体を「持つ」ことができる. ある構造体の所有する構造体の一覧は gt_structure_member 属性に格納される. gt_structure_member 属性値は空白で区切られた構造体の短縮名称のリストである[注]. 短縮名称は属性名に許される文字列である. 短縮名称から変数URLへの対応を与えるために, 構造体のgt_structure_link_短縮名称 属性に変数URLを格納する.

例: 「図を表わす構造体変数 figure1 が座標軸 axis1axis2 を持つ」という関係は以下のようなリンクで表現される.

int figure1;

figure1:gt_structure_class = "figure";
figure1:gt_structure_member = "axis1, axis2";
figure1:gt_structure_link_axis1 = "@axis1";
figure1:gt_structure_link_axis2 = "@axis2";

int axis1;
axis1:gt_structure_class = "axis";

int axis2;
axis2:gt_structure_class = "axis";

生成系は構造体変数 a に構造体変数 b  (任意の netCDF ファイルの中に存在するものでよい) を持っているという情報を付加するには, 以下の手続き(あるいは等価な動作)をとらなければならない:

解釈系は構造体変数にリンクを発見した場合, 構造体の種別ごとに規定された動作をしなければならない.


4.2 構造体変数の種類

構造体変数の種類は gt_structure_class 属性で示される. 以下では構造体変数の種類ごとに構造体が持ちうる属性とその意味を規定する.

device

構造体種別 "device" 表示装置[注]である. 表示装置とは紙面, ディスプレイ, ウィンドウなどの表示装置全体を表現する.

表示装置は任意個の枠を持つことができる.

同時に表示される領域を物理フレームと呼ぶことにする. これは紙面のような表示装置では1ページに対応し, ディスプレイのような表示装置では表示が切り替わる間の画面に対応する. 物理フレームを縦方向, 横方向それぞれ任意の整数個に等分した矩形の領域を枠と呼ぶことにする.

物理フレームと枠の対応は表示装置構造体の gt_graph_division 属性によって表現される. これは2つの整数値と解釈され, はじめの要素が横方向, 次の要素が縦方向の分割数となる. 属性 gt_graph_division が存在しない場合は枠はそのまま物理フレームに対応する.

frame

構造体種別 "frame" [注]である. 枠は表示装置を縦横それぞれ整数個に等分した矩形の領域を表わす.

枠は任意個の図を持つことができる.

枠内には枠の左下端を (0, 0), 枠に最小外接する正方形の右上端を (1, 1) とする座標系が存在する. これを透視座標系という[注]. 枠の縦横比は表示装置の縦横比と分割法に依存するので, 透視座標系ではどの点も描画されることが保証されないことに注意されたい.

figure

構造体種別 "figure" [注]である.

図はライン, 等値線群, ぬりわけ, ベクトル場, マーカ, テキスト, 座標軸を任意個持つことができる.

図の表題は gt_graph_figure_title 属性によって表わされる. 図に表題を与える意図でテキスト構造体を持たせるべきではない.

line

構造体種別 "line" ラインである. ラインを持つ図を折れ線グラフと呼ぶ.

ラインはデータ構造体または従来型変数をひとつ持つことができる. データは1次元でなければならない.

ライン構造体の gt_graph_line_index 属性は整数型で解釈され, ラインインデックスの規約により線の色および太さを指定する.

ライン構造体の gt_graph_line_type 属性は整数型で解釈され, 線の種類を指定する. [注: DCL のラインタイプと同じ解釈である]

ラインの各点にマーカーを描くためには gt_graph_line_marker 属性を設定する. 値は DCL のマーカー番号を指示するものとみなされる.

contours

構造体種別 "contours" 等値線群である. 等値線群を持つ図を等値線図と呼ぶ.

等値線群はデータ構造体または従来型変数をひとつ持つことができる. データは2次元でなければならない.

gt_graph_contours_draw_contour 属性が空文字列または "0" でない限り, 等値線が描画される.

gt_graph_contours_levels 属性は線を引くレベルを列挙した任意個の実数値列と解釈される.

gt_graph_contours_interval 属性は線を引くレベルを間隔で指定する1個または3個の数値列と解釈される. 最初は間隔, 次は上下限である.

等値線の色, 太さは gt_graph_line_index 属性で指定される.

等値線の線の種別はゼロまたは正の値については gt_graph_contours_solid 属性で, 負の値については gt_graph_contours_dash 属性で指定される. (名前と方式がカッコ悪いとは著者も思っている)

太い等値線と細い等値線を同時に書く場合の, 太い等値線の諸元は gt_graph_contours_thick_dash, gt_graph_contours_thick_cycle, gt_graph_contours_thick_interval, gt_graph_contours_thicksolid 属性で指示される. 太い等値線を引くべき値を指示するのが interval で, 細い等値線のうち整数分の1を太くするのが cycle である. どちらもゼロならば, 一部の等値線を太くする処理は行なわれない.

等値線を境界としてぬりわけをおこなう場合は gt_graph_contours_draw_shade 属性に空でも "0" でもない値を設定する.

gt_graph_contours_tone_number 属性は塗り分けのトーンパターン番号を指定する任意個の数値列である. 属性の長さは gt_graph_contours_levels 属性などで決まる等値線の数より1だけ長くしておくべきである. 本属性を指定しておきながら値が欠損したら, その値については何も塗らないことと等価である.

gt_graph_contours_tone_interval 属性はトーンパターン番号を指定する代替的方式で, 初項, 最終項, 増分によって等差数列を設定する. 増分に 0 を指定すると初項と最終項の間を比例按分する.

vectors

構造体種別 "vectors" ベクトル場である.

ベクトル場構造体はデータ構造体または従来型変数をふたつ持つ.

ベクトル場の長さを指定する方法は今のところ定義しない. 長さの選択は解釈系にゆだねられている.

ベクトル場構造体に gt_graph_vectors_style 属性が定義されており, 値が "barb" となっている場合, 解釈系は図形表示を風速の矢羽根で行ってもよい. gt_graph_vectors_style 属性値が "japanese" となっている場合, 日本式天気図記号の風力記号を描いてもよい.

axis

構造体種別 "axis" 座標軸である.

座標軸構造体はデータ構造体または従来型変数をひとつ持つことができる.

座標軸には長短の目盛り線がある. 長い目盛り線を書く位置は gt_graph_tick_all, gt_graph_tick_interval, gt_graph_tick_levels のいずれかで指定される. 短い目盛り線を書く位置は gt_graph_smalltick_all, gt_graph_smalltick_interval, gt_graph_smalltick_levels のいずれかで指定される.  

text

構造体種別 "text" テキストである.

テキスト構造体によって描画されるべき文字列は string 属性に格納する.

テキストをおく位置を指定する方法は今のところ定義しない. それでは使い物にならないが, 座標の扱いが確定するまでしばらく待ってほしい.

data

構造体種別 "data" データであり, 数値データにになんらかの加工を施したものを保存するために用いられる.

データ構造体はデータ構造体または従来型変数ひとつを持つ. 持たれているほうの変数の提供するデータを親データと呼ぶ.

データ構造体に gt_calc_slice 属性がある場合は, 当該構造体の提供するデータの次元は親データより少ない. これは断面を保存するために用いられる. 属性値は文字列と解釈される. 意味は後述.

データ構造体に gt_calc_average 属性がある場合は, 当該構造体の提供するデータの次元は親データより少ない. これは平均操作をするために用いられる. 意味は後述.


4.3 構造体変数の属性

gt_calc_average

データ構造体に指定できる.

属性値は空白で区切った座標指定の列である.

座標指定は座標変数名である(将来は拡張されるかもしれない). 座標変数の方向に平均を行うことを指示する.

平均操作については従来型変数の gt_calc_weight 属性を参照しなければならない.

gt_calc_slice

データ構造体に指定できる.

属性値は空白で区切った断面指定の羅列である.

断面指定には座標値断面指定と格子番号断面指定がある. (将来の版では断面指定の種類が増えるかもしれない)

座標値断面指定は代入文に類似したみかけをもつ. それは座標変数名, "=", 数値からなる. 空白を間に入れてはならない. 数値は断面をとるべき座標の数値を表わす. 数値にちょうど合う格子点が見つからない場合には解釈系はもっとも近い格子点を探すか, 何らかの補間を行うかして適当な値を得られるようにしなければならない.

格子番号断面指定は "," 記号を前置した代入文のようである. それは ",", 座標変数名, "=", 省略可能な "^", 数値からなる. 空白を間に入れてはならない. "^" がある場合, 数値は断面をとるべき格子番号を表わし, Fortran 的に解釈される. すなわち最初の格子番号は1である. "^" を省略した場合, 数値は断面をとるべき軸変数の値を表す.

例: T(lev, lat, lon) から「lat の値が 35.2 になり, lon の4番目の格子にあたるところ」を抜き出した構造体変数

dimensions:
	lev = 16;
	lat = 64;
	lon = 128;

variables:
	float T(lev, lat, lon);
	int T_slice1;
	T_slice1:gt_structure_class = "data";
	T_slice1:gt_structure_member = "?T";
	T_slice1:gt_calc_slice = ",lat=35.2,lon=^4";

gt_graph_aspect_ratio

device, frame, figure に指定できる. 定義は (縦/横) であり, 横長の場合に大きな値になる.

gt_graph_color_map

device, frame, figure, line, contours, shade に指定できる. 色番号から具体的色表現を得るためのカラーマップ指定文字列.


4.4 グラフィック機能

グラフィック指定のうち, DCL を参照する事項をあげる.

カラーマップ

DCL と同じ解釈をもつ文字列.

色番号

DCL と同じ解釈を持つ整数値. 1から100の間の値を持つ.

パターン番号

DCL と同じ解釈を持つ整数値. 塗りつぶし, 斜線, 格子などのパターンとして解釈される.

トーンパターン番号

DCL と同じ解釈を持つ整数値. 通常は塗りつぶしのパターンと色として解釈される.

ラインスタイル

DCL と同じ解釈を持つ整数値. 通常は実線, 破線, 点線の区別として解釈される.

ラインインデックス

DCL と同じ解釈を持つ整数値. 通常は線の太さおよび色と解釈される.

文字コード

DCL で用いられる文字コードは ASCII を拡張したものである. ASCII だけが許容される. ASCII 図形文字に含まれない文字およびコードの解釈は規定しない.