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通りの描画単位があります,これらの描画単位は,次のような属性を持っています.
色,太さ,種類
塗りつぶし
マーカー色,大きさ,種類
テキスト色,フォント(大きさ)
描画単位は,それが描かれる時点での属性に従って描かれます.この描画単位が描かれる時点での属性を,カレント属性と呼び,このカレント属性を属性コントロール関数を用いて変化させながら描画することによっていろいろな絵が描けます.属性コントロール関数は,全て整数値で指定されますが,そのうちいくつかはマクロを用いて記述できます.それについては,各々の関数の説明を参照下さい.カレント属性をコントロールする方法は,上記の他にもう一つあり属性セットを用いるやり方もありますが,どちらを用いても構いません.又,g_initをコールしたときのデフォルト値は,以下のようです.
色=黒,太さ=0,種類=0(実線)
塗りつぶし色=白
マーカー色=黒,大きさ=5,種類=0
テキスト色=黒,フォント=2(大きさ)
属性のコントロールは,以上のようですが,上位関数を用いる場合のみ,カレント属性を無視しますし,カレント属性に影響を与えません.


g_term グラフィックスを終了する
スケール関数

g_def_scale 標準面上に仮想座標系を定義する


g_sel_scale 仮想座標系を選択する
属性コントロール関数

g_line_color 線の色を変更する


g_line_width 線の太さを変更する
  • 書式g_line_width ( width );

  • 入力パラメータ
    width 整数 線の太さを表す番号

  • 説明
    通常は0から3までの整数を用いる.あまり太すぎる線は,描画に時間がかかる.0と1では線の太さは変わらないが,0が最も描画が速い.

g_line_type 線の種類を変更する
  • 書式g_line_type ( type );

  • 入力パラメータ
    type 整数 線種を表す番号

    type線種
    番号マクロ
    0G_LINE_SOLID
    1G_LINE_DOTS
    2G_LINE_DASHED
    3G_LINE_LONG_DASHED
    4G_LINE_THIN_DOTS
    5G_LINE_DOT_DASHED
    6G_LINE_D_DOT_DASHED


g_area_color ぬりつぶしの色(パターン)を変更する
g_marker_color マーカーの色を変更する(8色)
g_marker_size マーカーの大きさを変更する
  • 書式g_marker_size ( size );

  • 入力パラメータ
    size 整数 マーカーの大きさを表す番号

  • 説明
    マーカーの大きさはだいたい直径size mm ぐらいである.size=0の時のマーカーはポイントになる.

g_marker_type マーカーの種類を変更する
  • 書式g_marker_type ( type );

  • 入力パラメータ
    type 整数 マーカー種を表す番号

    typeマーカー
    番号マクロ
    0G_MARKER_STAR
    1G_MARKER_CIRC
    -1G_MARKER_F_CIRC
    2G_MARKER_BOX
    -2G_MARKER_F_BOX
    3G_MARKER_TRIANGLE
    -3G_MARKER_F_TRIANGL
    4G_MARKER_PLUS
    -4G_MARKER_X×

  • 説明
    マーカーのsize=0の時のマーカーはポイントになるので,マーカー番号の意味は持たない.

g_text_color テキストの色を変更する(8色)
  • 書式g_text_color ( color );

  • 入力パラメータ
    color 整数 色(パターン)番号

  • 説明
    色番号と色の対応は線の場合と同じである.

g_text_font テキストのフォントを変更する
  • 書式g_text_font ( font );

  • 入力パラメータ
    font 整数 テキストのフォントを表す番号

    fontフォント
    番号マクロ
    0G_FONT_TIMES_8times 8
    1G_FONT_TIMES_12times 12
    2G_FONT_TIMES_18times 18
    3G_FONT_TIMES_24times 24


g_def_line 線の属性セットを定義する
  • 書式g_def_line ( line, color, width, type );

  • 入力パラメータ
    line 整数 属性セット番号
    color 整数 色(パターン)番号
    width 整数 線の太さを示す数
    type 整数 線種番号

g_def_areaぬりつぶしの属性セットを定義する
  • 書式g_def_area ( area, color );

  • 入力パラメータ
    area 整数 属性セット番号
    color 整数 色(パターン)番号

  • 説明
    属性セットといっても,この場合は属性は1つだけである.

g_def_marker マーカーの属性セットを定義する
  • 書式g_def_marker ( marker, color, size, type );

  • 入力パラメータ
    marker 整数 属性セット番号
    color 整数 色(パターン)番号
    size 整数 マーカーのだいたいの直径(mm)
    type 整数 マーカー番号

g_def_text テキストの属性セットを定義する
g_sel_line線の属性セットを選択する
  • 書式g_sel_line ( line );

  • 入力パラメータ
    line 整数 線の属性セット番号

g_sel_area ぬりつぶしの属性セットを選択する
  • 書式g_sel_area ( area );

  • 入力パラメータ
    area 整数 ぬりつぶしの属性セット番号

g_sel_marker マーカーの属性セットを選択する
  • 書式g_sel_marker ( marker );

  • 入力パラメータ
    marker 整数 マーカーの属性セット番号

g_sel_text テキストの属性セットを選択する
  • 書式g_sel_text ( text );

  • 入力パラメータ
    text 整数 テキストの属性セット番号

描画関数

g_move カレントポジションを移動する

  • 書式g_move ( x, y );

  • 入力パラメータ
    x 実数 移動先の点のカレント座標系におけるx座標を表す
    y 実数 移動先の点のカレント座標系におけるy座標を表す

g_plot カレントポジションから指定された点まで線分を引く
  • 書式g_plot ( x, y );

  • 入力パラメータ
    x 実数 指定点のカレント座標系におけるx座標を表す
    y 実数 指定点のカレント座標系におけるy座標を表す

  • 説明
    ここでいうカレントポジションという概念は,g_move, g_plotだけに関与したものであり,他の描画関数には影響を受けない.

g_box長方形を描いたり,中をぬりつぶしたりする
  • 書式g_box ( x_left, x_right, y_bottom, y_top, edge, fill );

  • 入力パラメータ
    x_left 実数 長方形の左辺のカレント座標系におけるx座標
    x_right 実数 長方形の右辺のカレント座標系におけるx座標
    y_bottom 実数 長方形の下辺のカレント座標系におけるy座標
    y_top 実数 長方形の上辺のカレント座標系におけるy座標
    edge 整数 G_YESのとき縁を描き,G_NOのときには描かない.
    fill 整数 G_YESのとき枠内をぬり,G_NOのときにはぬらない.

    edge, fill意味
    数値マクロedgefill
    1G_YESふちを描中をぬる
    0G_NOふちを描かない中をぬらない


g_circle 円を描いたり,中を塗りつぶしたりする
  • 書式g_circle ( x, y, radius, edge, fill );

  • 入力パラメータ
    x 実数 円の中心のカレント座標系におけるx座標
    y 実数 円の中心のカレント座標系におけるy座標
    radius 実数 円の半径をx座標方向のスケールで表したもの
    edge 整数 G_YESのとき縁を描き,G_NOのときには描かない
    fill 整数 G_YESのとき枠内をぬり,G_NOのときにはぬらない

g_polygon 多角形を描いたり,中を塗りつぶしたりする.を書く
  • 書式g_polygon ( x, y, n, edge, fill );

  • 入力パラメータ
    x 実数列 多角形の頂点のカレント座標系におけるx座標からなる実数値配列
    y 実数列 多角形の頂点のカレント座標系におけるy座標からなる実数値配列
    n 整数 多角形の頂点数(n ≦ 256)
    edge 整数 G_YESのとき縁を描き,G_NOのときには描かない
    fill 整数 G_YESのとき枠内をぬり,G_NOのときにはぬらない

  • 説明
    配列x,yのサイズはn以上でなくてはならない.

g_polyline 与えられた点列を線分で連続的に結ぶ
  • 書式g_polyline ( x, y, n );

  • 入力パラメータ
    x 実数列 カレント座標系におけるx座標の実数値配列
    y 実数列 カレント座標系におけるy座標の実数値配列
    n 整数 点列を構成する点の数

  • 説明
    配列x,yのサイズはn以上でなくてはならない.

g_data_plot 与えられた配列を用いてグラフを描く
  • 書式g_data_plot ( x_left, x_right, y, n );

  • 入力パラメータ
    x_left 実数 カレント座標系におけるx軸の左端の座標
    x_right 実数 カレント座標系におけるx軸の右端の座標
    y 実数列 カレント座標系におけるy軸の実数値配列
    n 整数 データ数

  • 説明
    配列yのサイズはn以上でなければならない.この関数はx方向の分割幅が一定の時としてグラフの描画を行う.

g_marker マーカーを描く
  • 書式g_marker ( x, y );

  • 入力パラメータ
    x 実数 マーカーの中心点のカレント座標におけるx座標
    y 実数 マーカーの中心点のカレント座標におけるy座標

g_arrow 矢印を描く.
  • 書式g_arrow (base_x, base_y, direction_x, direction_y, arrow_size, head_size);

  • 入力パラメータ
    base_x 実数 矢印の根元のカレント座標におけるx座標
    base_y 実数 矢印の根元のカレント座標におけるy座標
    direction_x 実数 矢印のx-方向
    direction_y 実数 矢印のy-方向
    arrow_size 実数 矢印の長さ
    head_size 実数 矢印の頭の大きさ

g_fan 扇形を描いたり、中を塗りつぶしたりする.
  • 書式g_fan (center_x, center_y, direction_x, direction_y,radius, angle,edge, fill);

  • 入力パラメータ  
    center_x 実数 扇形の根元のカレント座標におけるx座標
    center_y 実数 扇形の根元のカレント座標におけるy座標
    direction_x 実数 扇形のx-方向
    direction_y 実数 扇形のy-方向
    radius 実数 扇形の半径
    angle 実数 扇形の開き角度(度数法)
    edge 整数 G_YESのとき縁を描き,G_NOのときには描かない
    fill 整数 G_YESのとき枠内をぬり,G_NOのときにはぬらない

    を参照.


g_marker マーカーを描く
  • 書式g_marker ( x, y );

  • 入力パラメータ
    x 実数 マーカーの中心点のカレント座標におけるx座標
    y 実数 マーカーの中心点のカレント座標におけるx座標

g_text 文字列を書く(標準座標系)
  • 書式g_text ( x_std, y_std, string );

  • 入力パラメータ
    x_std 実数 文字列の先頭文字の左下端の位置の標準x座標
    y_std 実数 文字列の先頭文字の左下端の位置の標準y座標
    string 文字列 描こうとしているテキストの入った文字列

上位関数

g_contln 等高線を描く

  • 書式g_contln ( x_left, x_right, y_bottom, y_top, array, number_x, number_y, height );

  • 入力パラメータ
    x_left 実数 枠となる長方形の左辺のカレント座標におけるx座標
    x_right 実数 枠となる長方形の右辺のカレント座標におけるx座標
    y_bottom 実数 枠となる長方形の底辺のカレント座標におけるy座標
    y_top 実数 枠となる長方形の上辺のカレント座標におけるy座標
    array 実数列 等高線を描くためのサイズnumber_x・number_yの2次元実数値配列
    number_x 整数 2次元配列arrayのx方向のサイズ
    number_y 整数 2次元配列arrayのy方向のサイズ
    height 実数 描きたい等高線のレベル

g_contln_3d   z-スタックされた等高線を描く

g_contln_3d_f   z-スタックされた等高線を描く


g_bird_view z=f(x,y)のグラフの鳥瞰図を隠線処理せずに描く
  • 書式g_bird_view ( x_wid, y_wid, z_wid, z_bottom, z_top, distance, theta, phi, x_left_std, y_top_std, x_wid_std, y_wid_std, array, number_x, number_y, direction);

  • 入力パラメータ
    x_wid 実数 グラフがおさまる直方体のx方向の幅
    y_wid 実数 グラフがおさまる直方体のy方向の幅
    z_wid 実数 グラフがおさまる直方体のz方向の幅
    z_bottom 実数 直方体の底辺に対応するデータ値
    z_top 実数 直方体の上辺に対応するデータ値
    distance 実数 直方体の中心と視点との距離
    theta 実数 xy平面において,視線をxy平面に写像した直線と,y軸がなす角(単位は度)
    phi 実数 xy平面と視線とがなす角(単位は度)
    x_left_std 実数 点Aの標準x座標
    y_top_std 実数 点Aの標準y座標
    x_wid_std 実数 標準面上におけるADの長さ
    y_wid_std 実数 標準面上におけるABの長さ
    array 実数列 グラフを描くためサイズnumber_x・number_yの実数値2次元配列
    number_x 整数 2次元配列arrayのx方向のサイズ
    number_y 整数 2次元配列arrayのy方向のサイズ
    direction 整数 正のときy軸正方向は遠ざかる方向,負のときy軸正方向は近づく方向

  • 説明
    を参照.



g_hiddenz=f(x,y)のグラフの鳥瞰図を隠線処理して描く
  • 書式g_hidden ( x_wid, y_wid, z_wid, z_bottom, z_top, distance, theta, phi, x_left_std, y_top_std, x_wid_std, y_wid_std, array, number_x, number_y, direction, side_paint,x_intv, y_intv);

  • 入力パラメータ
    x_wid 実数 グラフがおさまる直方体のx方向の幅
    y_wid 実数 グラフがおさまる直方体のy方向の幅
    z_wid 実数 グラフがおさまる直方体のz方向の幅
    z_bottom 実数 直方体の底辺に対応するデータ値
    z_top 実数 直方体の上辺に対応するデータ値
    distance 実数 直方体の中心と視点との距離
    theta 実数 xy平面において,視線をxy平面に写像した直線と,y軸がなす角(単位は度)
    phi 実数 xy平面と視線とがなす角(単位は度)
    x_left_std 実数 点Aの標準x座標
    y_top_std 実数 点Aの標準y座標
    x_wid_std 実数 標準面上におけるADの長さ
    y_wid_std 実数 標準面上におけるABの長さ
    array 実数列 グラフを描くためサイズnumber_x・number_yの実数値2次元配列
    number_x 整数 2次元配列arrayのx方向のサイズ
    number_y 整数 2次元配列arrayのy方向のサイズ
    direction 整数 正のときy軸正方向は遠ざかる方向,負のときy軸正方向は近づく方向
    side_paint 整数 1と3のときは両側面ぬり,2と3のときは前後面をぬり,0のときはぬらない
    x_intv 整数 y軸方向の描線の間隔
    y_intv 整数 x軸方向の描線の間隔

  • 説明
    を参照.



g_fake_bird_view z=f(x,y)のグラフの鳥瞰図もどきを隠線処理せずに描く
  • 書式g_fake_bird_view ( z_bottom, z_top, x_ratio, y_ratio, x_left_std, y_top_std, x_wid_std, y_wid_std, array, number_x, number_y, direction);

  • 入力パラメータ
    z_bottom 実数 z軸の下限の座標
    z_top 実数 z軸の上限の座標
    x_ratio 実数 BF/BC
    y_ratio 実数 BF/BC
    x_left_std 実数 点Aの標準x座標
    y_top_std 実数 点Aの標準y座標
    x_wid_std 実数 標準面上におけるADの長さ
    y_wid_std 実数 標準面上におけるABの長さ
    array 実数列 グラフを描くためサイズnumber_x・number_yの実数値2次元配列
    number_x 整数 2次元配列arrayのx方向のサイズ
    number_y 整数 2次元配列arrayのy方向のサイズ
    direction 整数 正のときy軸正方向は遠ざかる方向,負のときy軸正方向は近づく方向

  • 説明
    を参照.

g_fake_hidden z=f(x,y)のグラフの鳥瞰図もどきを隠線処理して描く
  • 書式g_fake_hidden ( z_bottom, z_top, x_ratio, y_ratio, x_left_std, y_top_std, x_wid_std, y_wid_std, array, number_x, number_y, direction, side_paint, x_intv, y_intv);

  • 入力パラメータ
    z_bottom 実数 z軸の下限の座標
    z_top 実数 z軸の上限の座標
    x_ratio 実数 BF/BC
    y_ratio 実数 BF/BC
    x_left_std 実数 点Aの標準x座標
    y_top_std 実数 点Aの標準y座標
    x_wid_std 実数 標準面上におけるADの長さ
    y_wid_std 実数 標準面上におけるABの長さ
    array 実数列 グラフを描くためサイズnumber_x・number_yの実数値2次元配列
    number_x 整数 2次元配列arrayのx方向のサイズ
    number_y 整数 2次元配列arrayのy方向のサイズ
    direction 整数 正のときy軸正方向は遠ざかる方向,負のときy軸正方向は近づく方向
    side_paint 整数 1と3のときは両側面ぬり,2と3のときは前後面をぬり,0のときはぬらない
    x_intv 整数 y軸方向の描線の間隔
    y_intv 整数 x軸方向の描線の間隔

  • 説明
    を参照.


上図の直方体の中にz=f(x,y)のグラフが描かれる.

補助関数

g_sleep 描画後,絵を消さずに表示する

  • 書式g_sleep ( time );

  • 入力パラメータ
    time 実数 絵を消さずに表示することを保証する時間( 秒 )

  • 説明
    この関数がコールされるまでに描かれるべき絵の描画が完了してから,time 秒間絵を表示する.もちろん,g_clsやg_termをコールすることにより,描かれた絵を消さない限りは,time秒間を過ぎても絵は表示され続ける.
    timeが負の数の場合は絵が表示されているウインドウ内でマウスボタンをクリックされるまでは絵は表示され続ける.

g_sformat 変数を指定された書式で表わし文字列として返す(FORTRANのみ)

  • 書式 call g_sformat(string, length, format, variable)

 

  • 出力パラメータ
    string 文字列 variable を format に従って書き表した結果が返される文字列
    length 整数 上記文字列の長さが返される

 

  • 入力パラメータ
    format 文字列 variable を表現するための書式からなる文字列(書式指定は C言語に従う)
    variable 不定 変数(型は特に指定しない)

  • 説明
    これは FORTRAN にのみ必要な関数で、C言語であれば sprintf を使えばよい.GLSCにおいては通常 g_text とともに用いられる.

call g_sformat(string, length, 'x = %f', x)
call g_text(50.0, 50.0, string, length)

C言語では、次のようになる.

sprintf(string, "x = %f", x);
g_text(50.0, 50.0, string);

注意

format の中には % は必ず1つあり、かつ2つ以上あってはならない


g_mouse_sence

  • 書式 g_mouse_sence(&mouseX, &mouseY, &BUTTON)

 

  • 出力パラメータ
    mouseX実数 マウスのx座標
    mouseY実数 マウスのy座標
    BUTTON 整数 マウスのボタンの状態。

  • 説明
    ウィンドウ内をクリックすることにより、その仮想座標系における位置を(mouseX,mouseY)に格納する。またマウスの状態をBUTTONに格納する。左クリックはBUTTON=1,中クリックはBUTTON=2,右クリックはBUTTON=3である。

注意

他の描画関数と同様に仮想座標系を指定して使う必要がある。

C言語での例

double mouseX, mouseY;
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;
}
}


g_get_window_id

  • 書式 g_get_window_id(&window_id)

 

  • 出力パラメータ
    window_id   整数   X Window SystemにおけるX Window id.

  • 説明
    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内で使われている。通常の使用であれば、この関数をつかうことは滅多にない。

C言語での例

int window_id;
g_get_window_id(&window_id);
printf("Window ID(base16): %x\n", window_id);
printf("Window ID(base10): %d\n", window_id);


g_rgb_color

  • 書式 g_rgb_color(red, green, blue)

 

  • 入力パラメータ
    red   実数   赤の明度
    green   実数   緑の明度
    blue   実数   青の明度

  • 説明
    (red,green,blue)の値から色空間を構成する。各要素は0~1までの実数値である。

  • *
    *
    g_area_color(G_RED);
    *
    *
    というプログラムは
    *
    *
    g_area_color(g_rgb_color(1.0,0.0,0.0));
    *
    *
    と同値である。
    Rainbow.c と組み合わせて使うことで、温度分布色などを作ることができる。

g_capture_set

  • 書式 g_capture_set("Frames")

 

  • 入力パラメータ 保存先のフォルダ名(何も文字がなければデフォルトのフォルダ名がセットされる).

  • 説明
    画面を取り込むための準備をするための関数である。この関数は内部で、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

  • 書式 g_capture()

 

  • 入力パラメータ なし.

  • 説明
    画面を取り込むための関数である。呼ばれるたびに、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 秋山正和.新関数群について加筆)