gtool4 規約 version 4.0beta10

4. 構造体変数

2000-05-25T18:42:36+09:00 豊田英司


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


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 のラインタイプと同じ解釈である]

contours

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

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

等値線群構造体の gt_graph_contours_bylevels 属性は線を引くレベルを列挙した任意個の実数値列と解釈される。

等値線群構造体の gt_graph_contours_byinterval 属性は線を引くレベルを間隔で指定する1個または3個の数値列と解釈される。最初は間隔、次は上下限である。

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

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

shade

構造体種別 "shade" ぬりわけである。ぬりわけを持つ図をぬりわけ等値線図と呼ぶことにする。

ぬりわけ構造体はデータ構造体または従来型変数をひとつ持つことができる。

ぬりわけ構造体の gt_graph_shade_bylevels 属性は塗り分けのトーンの境界値を指定する任意個の数値列と解釈される。

ぬりわけ構造体の gt_graph_shade_byinterval 属性は塗り分けのトーンの境界を間隔で指定する1個または3個の数値列と解釈される。最初は間隔、次は上下限である。

ぬりわけ構造体の gt_graph_shade_tone_number 属性は塗り分けのトーンパターン番号を指定する任意個の数値列である。属性の長さは gt_graph_shade_bylevels 属性より1だけ長くしておくべきである。本属性を指定しておきながら値が欠損したら、その値については何も塗らないことと等価である。

ぬりわけ構造体の gt_graph_shade_tone_byinterval 属性によって、塗り分けのトーンを指定する方法は今のところ規定しない。解釈系が適当な絵を描いてくれない場合に困るが、誰か名案教えてください。

vectors

構造体種別 "vectors" ベクトル場である。ベクトル場を持つ図をなんと言ったらよいのかは知らない。

ベクトル場構造体はデータ構造体または従来型変数をひとつ持つことができる。

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

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

marker

構造体種別 "marker" マーカである。マーカを持つ図を散布図と呼ぶ。

マーカ構造体はデータ構造体または従来型変数をひとつ持つことができる。

マーカ構造体の gt_graph_marker_type 属性はマーカタイプをあらわす。

axis

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

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

座標軸の位置を指定する方法は今のところ定義しない。DCL では黙っていてもたいていまともな位置に座標軸が描けるであろう。

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 に指定できる。

国際照明委員会の定義する色座標値との対応は知らない。


4.4 グラフィック機能

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

カラーマップ

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

色番号

DCL と同じ解釈を持つ整数値。

パターン番号

DCL と同じ解釈を持つ整数値。

トーンパターン番号

DCL と同じ解釈を持つ整数値。

ラインスタイル

DCL と同じ解釈を持つ整数値。

ラインインデックス

DCL と同じ解釈を持つ整数値。

文字コード

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