GLSCマニュアル
2009年7月2日 00:00
本マニュアルはGLSCの開発者の一人である、亮さんに許可を得た上、新関数のマニュアルを付け加えました。glscwin にはあるが X Window 版の GLSC には無い機能の説明を取り除いてあります.glscwin を使いたい人は、オリジナルのマニュアルを参照してください.
概要
GLSCにおいては,描画は標準面というものに対して行われます.この標準面は,1辺が655.35mmの正方形の白い紙だと思って下さい.そしてこの紙は,メモリ等が続く限り好きなだけ用意されます.以下では,この白い紙を1フレームと呼ぶことにします.このフレームを呼び出すのがg_clsと言う関数で,コールすると1フレームが用意され描画可能状態になります.このフレームの描画が終わって,次のフレームいくときにはg_clsを再度コールします.座標系は,2種類あり,左上頂点を(0.00,0.00)とし,右下頂点を(655.35,655.35)とする標準座標系と,g_def_scaleで定義する仮想座標系です.通常,描画には標準座標系を用いる事はありませんが,テキスト出力の時は,例外で標準座標系を用いますのでご注意下さい.通常,描画に用いる仮想座標系はg_def_scaleで標準面上にユーザーが定義する座標系で同時に50個まで定義できます.
GLSCには,線,塗りつぶし,マーカー,テキストの4通りの描画単位があります,これらの描画単位は,次のような属性を持っています.
本演習では次のシェルスクリプトを利用します.
fglsc : FORTRAN用
cglsc : C用
作成した FORTRANプログラムを fsample.f とすると、
fglsc fsample.f
作成した C プログラムを csample.c とすると、
cglsc csample.c
でそれぞれコンパイルされ、 fsample および csample という実行ファイルが生成されます.
g_init
g_def_scale
g_line_color
g_move
g_contln
g_sleep
g_sformat
変数を指定された書式で表わし文字列として返す(FORTRANのみ)
例 call g_sformat(string, length, 'x = %f', x) C言語では、次のようになる. sprintf(string, "x = %f", x); 注意 format の中には %
は必ず1つあり、かつ2つ以上あってはならない g_mouse_sence
注意 他の描画関数と同様に仮想座標系を指定して使う必要がある。 C言語での例
double mouseX, mouseY; g_get_window_id
C言語での例
int window_id; g_rgb_color
g_capture_set
g_capture
file_name 文字列 メタファイル名
length 整数 file_name の文字数 (FORTRANでの利用時のみ必要 )
size_x 実数 ディスプレイ上に開くウインドウの 横方向のサイズ( mm )
size_y 実数 ディスプレイ上に開くウインドウの 縦方向のサイズ( mm )
GLSCを使う上で絶対に必要な関数です.必ずGLSCの関数を使う前にコールして下さい.メタファイルに出力しない場合でも何らかのダミーのファイル名を書くこと.ウインドウに出力しない場合でも何らかのダミーのウインドウサイズを書くこと.
g_device
device 出力先 番号 マクロ 0 G_NONE なし 1 G_META メタファイルのみ 2 G_DISP ディスプレイのみ 3 G_BOTH メタファイルとディスプレイ
g_cls
g_term
スケール関数
下図のように適当な長方形を考えて,上記描くパラメータを定めることにより仮想座標系を決める.
g_sel_scale
属性コントロール関数
color カラーディスプレイ 番号 マクロ 0 G_BLACK 黒 1 G_RED 赤 2 G_GREEN 緑 3 G_BLUE 青 4 G_MAGENTA マゼンタ 5 G_YELLOW 黄 6 G_CYAN シアン 7 G_WHITE 白
g_line_width
width 整数 線の太さを表す番号
通常は0から3までの整数を用いる.あまり太すぎる線は,描画に時間がかかる.0と1では線の太さは変わらないが,0が最も描画が速い.
g_line_type
type 線種 番号 マクロ 0 G_LINE_SOLID 1 G_LINE_DOTS 2 G_LINE_DASHED 3 G_LINE_LONG_DASHED 4 G_LINE_THIN_DOTS 5 G_LINE_DOT_DASHED 6 G_LINE_D_DOT_DASHED
g_area_color
g_marker_color
g_marker_size
マーカーの大きさはだいたい直径size mm ぐらいである.size=0の時のマーカーはポイントになる.
g_marker_type
type マーカー 番号 マクロ 0 G_MARKER_STAR * 1 G_MARKER_CIRC ○しろまる -1 G_MARKER_F_CIRC ●くろまる 2 G_MARKER_BOX □しろいしかく -2 G_MARKER_F_BOX ■しかく 3 G_MARKER_TRIANGLE △しろさんかく -3 G_MARKER_F_TRIANGL ▲さんかく 4 G_MARKER_PLUS + -4 G_MARKER_X ×ばつ
マーカーのsize=0の時のマーカーはポイントになるので,マーカー番号の意味は持たない.
g_text_color
色番号と色の対応は線の場合と同じである.
g_text_font
font フォント 番号 マクロ 0 G_FONT_TIMES_8 times 8 1 G_FONT_TIMES_12 times 12 2 G_FONT_TIMES_18 times 18 3 G_FONT_TIMES_24 times 24
g_def_line
g_def_area
属性セットといっても,この場合は属性は1つだけである.
g_def_marker
g_def_text
g_sel_line
g_sel_area
g_sel_marker
g_sel_text
描画関数
g_plot
ここでいうカレントポジションという概念は,g_move, g_plotだけに関与したものであり,他の描画関数には影響を受けない.
g_box
edge, fill 意味 数値 マクロ edge fill 1 G_YES ふちを描 中をぬる 0 G_NO ふちを描かない 中をぬらない
g_circle
g_polygon
配列x,yのサイズはn以上でなくてはならない.
g_polyline
配列x,yのサイズはn以上でなくてはならない.
g_data_plot
配列yのサイズはn以上でなければならない.この関数はx方向の分割幅が一定の時としてグラフの描画を行う.
g_marker
g_arrow
g_fan
図を参照.
g_marker
g_text
上位関数
g_contln_3d
3次元のデータからhレベルの等高線をz0からz1への方向へ積み重ねて表示する。ただしデータの格納形式がC言語形式に限る。通常、こちらの関数を使えばよい。この関数を使って表示が乱れるときは、配列のアドッレシングの問題である可能性がある。その場合はg_contln_3d_fを使用するとよい。Fortran言語を使用する場合、この関数を使えば良い。
図を参照.
g_contln_3d_f
1次元のデータからhレベルの等高線をz0からz1への方向へ積み重ねて表示する。
ただしデータの格納形式がFortran形式に限る。この関数はFortranからは呼ぶことができない(呼ぶ必要がない)。多次元配列を構成する場合、C言語のデータの格納方式は効率的でないことが多い。そこでC言語のプログラムであってもデータ形式をFortran形式のデータ配列形式にする場合もある。そのような場合、こちらの関数を使うと良い。またg_contln_3dに比べ使用メモリを大幅に押さえることができる。
図を参照.
g_bird_view
図を参照.
g_hidden
図を参照.
g_fake_bird_view
図を参照.
g_fake_hidden
図を参照.
補助関数
この関数がコールされるまでに描かれるべき絵の描画が完了してから,time 秒間絵を表示する.もちろん,g_clsやg_termをコールすることにより,描かれた絵を消さない限りは,time秒間を過ぎても絵は表示され続ける.
timeが負の数の場合は絵が表示されているウインドウ内でマウスボタンをクリックされるまでは絵は表示され続ける.
これは FORTRAN にのみ必要な関数で、C言語であれば sprintf を使えばよい.GLSCにおいては通常 g_text とともに用いられる.
call g_text(50.0, 50.0, string, length)
g_text(50.0, 50.0, string);
ウィンドウ内をクリックすることにより、その仮想座標系における位置を(mouseX,mouseY)に格納する。またマウスの状態をBUTTONに格納する。左クリックはBUTTON=1,中クリックはBUTTON=2,右クリックはBUTTON=3である。
int BUTTON = 0;
while(1){
g_mouse_sence (&mouseX, &mouseY, &BUTTON);
printf("mouseX = %f,mouseY = %f,BUTTON =%d\n",mouseX,mouseY,BUTTON);
if(BUTTON == 1){
break;
}
}
X Window SystemではX Windowに固有のX Window id を割り振っている。この値を取得する関数である(関数内でxwininfoコマンドを呼んでいる)。GLSCではX Window の名前として"GLSC"という名前を使用している。この名前によってGLSCのプログラムであることがわかる。xwd(X Window System標準のX Windowキャプチャ関数)やimport(ImageMagickに付属するキャプチャ関数)などのキャプチャ関数を使ってX Windowの画面をキャプチャすることができるがその際X Windowの名前を引数にする。GLSCはすべてのX Windowに"GLSC"を名前として使うが、この状態は多数のX Windowを開いた状態で画面キャプチャを行った場合、衝突を起こす。そこでX Windowに固有のX Window idを画面キャプチャ関数の引数としてつかうと衝突をさけることができる。この関数はg_capture_set内で使われている。通常の使用であれば、この関数をつかうことは滅多にない。
g_get_window_id(&window_id);
printf("Window ID(base16): %x\n", window_id);
printf("Window ID(base10): %d\n", window_id);
(red,green,blue)の値から色空間を構成する。各要素は0~1までの実数値である。
*
*
g_area_color(G_RED);
*
*
というプログラムは
*
*
g_area_color(g_rgb_color(1.0,0.0,0.0));
*
*
と同値である。
Rainbow.c
と組み合わせて使うことで、温度分布色などを作ることができる。
画面を取り込むための準備をするための関数である。この関数は内部で、X Window IDの取得、連番画像ファイルの初期化、保存先フォルダの作成(""の場合にのみFrames年.月.日.時間.分.秒/というフォルダ名になる)、保存する画像の拡張子(.jpg)の設定を行う。
g_init("GRAPH", 100.0, 100.0);
g_device(G_DISP);
g_capture_set("Frames");
g_device関数より後、g_capture関数より前に呼ぶ必要がある。ImageMagick(http://www.imagemagick.org/)をインストールしている必要がある。
画面を取り込むための関数である。呼ばれるたびに、g_capture_set()にて設定されたフォルダに画像を連番ファイル(000000.jpg~999999.jpg)として保存する。
*
*
g_capture_set();
*
*
/*何か絵を描くプログラム*/
g_capture_set();
*
*
g_capture_set関数より後に呼ぶ必要がある。ImageMagick(http://www.imagemagick.org/)をインストールしている必要がある。
なお新関数の詳細についてはサンプルプログラムを参照されたい。GLSCのコンパイル時にtestフォルダーができるがその中に書かれている場合がある。(3.7.4以降のバージョン) またはglsc-X.Y.Z/Manual/NewFunctionHowToというフォルダ内にあるかもしれない。そこではg_capture,g_rgb_color,Rainbowなどのサンプルプログラムを読むことができる。NewFunctionHowTo.zipはそのzip化ファイルである。(2009年7月2日 秋山正和.新関数群について加筆)