Module Graphics


module Graphics: sig  end
環境非依存グラフィックプリミティブです。

exception Graphic_failure of string
以下の関数は問題が発生した場合この例外を発生します。


Initializations


val open_graph : string -> unit
グラフィックウィンドウを作成するか、画面をグラフィックモードに変更します。グラフィックウィンドウを初期化して、カレントポイントを (0, 0) に設定します。文字列の引数は、グラフィックウィンドウのサイズなど、グラフィックモードのオプションとなります。この解釈は実装依存です。空文字列が与えられた場合、適当なデフォルト設定になります。
val close_graph : unit -> unit
グラフィックウィンドウを消すか、画面をテキストモードに変更します。
val set_window_title : string -> unit
グラフィックウィンドウのタイトルを設定します。
val clear_graph : unit -> unit
グラフィックウィンドウをクリアします。
val size_x : unit -> int
Graphics.size_y を見て下さい。
val size_y : unit -> int
グラフィックウィンドウのサイズを返します。画面ピクセル座標は 0 .. size_x()-10 .. size_y()-1 になります。この画面外に対する描画は (例外など発生させず) クリッピングされます。画面左下が原点 (0,0) です。


Colors



type color = int
色は赤、緑、青で、それぞれの値は 0..255 の範囲をとります。3 つの値は int: 0xRRGGBB となります。RR は赤の値を 2 桁の 16 数、GG は緑、BB は青を表します。

val rgb : int -> int -> int -> color
rgb r g b は、赤 r 、緑 g 、青 b の値から、その色を表す数を返します。rgb0..255 の範囲です。
val set_color : color -> unit
カレントカラーを設定します。
val background : color
Graphics.foreground を見て下さい。
val foreground : color
デフォルトのバックグラウンドカラーとフォアグラウンドカラーです (普通は白と黒、またはその逆です) 。Graphics.clear_graph では画面を background で塗りつぶし、カレントカラーを foreground に設定します。


Some predefined colors


val black : color
val white : color
val red : color
val green : color
val blue : color
val yellow : color
val cyan : color
val magenta : color


Point and line drawing


val plot : int -> int -> unit
与えられた点にカレントカラーで点を描きます。
val plots : (int * int) array -> unit
与えられた点の集合のすべての点に、カレントカラーで点を描きます。
val point_color : int -> int -> color
backing store の与えられた点の色を返します (後述の Double buffering を見て下さい) 。
val moveto : int -> int -> unit
カレントポイントを変更します。
val rmoveto : int -> int -> unit
rmoveto dx dy は、カレントポイントを横に dx 、縦に dy 移動した点に移動します。
val current_x : unit -> int
カレントポイントの横座標を返します。
val current_y : unit -> int
カレントポイントの縦座標を返します。
val current_point : unit -> int * int
カレントポイントの位置を返します。
val lineto : int -> int -> unit
カレントポイントから与えられた点へ線を描き、カレントポイントを与えられた点に移します。
val rlineto : int -> int -> unit
カレントポイントから、横に dx 、縦に dy へ移動した点へ線を描き、カレントポイントも移します。
val curveto : int * int -> int * int -> int * int -> unit
curveto b c d はカレントポイントから d まで三次元ベジエ曲線を描きます。bc をコントロールポイントとし、カレントポイントは d へ移されます。
val draw_rect : int -> int -> int -> int -> unit
draw_rect x y w h は、左下角を x,y にとり横幅 w 、縦幅 h である四角形を描きます。カレントポイントは移動しません。
val draw_poly_line : (int * int) array -> unit
draw_poly_line points は与えられた点の配列を順につないで線を描きます。配列の要素は多角形の頂点の座標で、この多角形は閉じている必要はありません。カレントポイントは変更されません。
val draw_poly : (int * int) array -> unit
draw_poly polygon は与えられた多角形を描きます。配列の要素は多角形の頂点の座標です。カレントポイントは変更されません。
val draw_segments : (int * int * int * int) array -> unit
draw_segments segments は与えられた線の配列を取り、すべての線を描画します。線は (x0, y0, x1, y1) という 4 要素からなり、(x0, y0)(x1, y1) が点の端点の座標です。カレントポイントは変更されません。
val draw_arc : int -> int -> int -> int -> int -> int -> unit
draw_arc x y rx ry a1 a2 は楕円の弧を描きます。中心は x,y で、水平軸が rx 、垂直軸が ry 、開始角度 a1 、終了角度 a2 となります (角度の単位は度) 。カレントポイントは変更されません。
val draw_ellipse : int -> int -> int -> int -> unit
draw_ellipse x y rx ry は楕円を描きます。中心が x,y で、水平軸が rx 、垂直軸が ry となります。カレントポイントは変更されません。
val draw_circle : int -> int -> int -> unit
draw_circle x y r は円を描きます。中心が x,y 、半径が r となります。カレントポイントは変更されません。
val set_line_width : int -> unit
上記の関数で描く線の幅をポイントで指定します。X window 下では set_line_width 0 を指定することで特別なアルゴリズムを使用し幅 1 ピクセルの線を高速に描けますが、このアルゴリズムは set_line_width 1 を指定したときに使用されるアルゴリズムより不正確です。


Text drawing


val draw_char : char -> unit
Graphics.draw_string を見て下さい。
val draw_string : string -> unit
カレントポイントを左下角にとり、文字や文字列を書きます。カレントポイントはテキストの右下角に移動します。
val set_font : string -> unit
テキストの描画に使用するフォントを変更します。set_font の引数の解釈は実装依存です。
val set_text_size : int -> unit
テキストの描画に使用する文字サイズを変更します。set_text_size の引数の解釈は実装依存です。
val text_size : string -> int * int
与えられたテキストを現在のフォントとサイズで描画した場合の大きさを返します。


Filling


val fill_rect : int -> int -> int -> int -> unit
fill_rect x y w h は左下角に x,y をとり、横幅 w 、縦幅 h である四角形をカレントカラーで塗りつぶして描画します。
val fill_poly : (int * int) array -> unit
与えられた多角形をカレントカラーで塗りつぶして描画します。配列の要素はは多角形の頂点の座標です。
val fill_arc : int -> int -> int -> int -> int -> int -> unit
カレントカラーで楕円弧を塗りつぶして描画します。引数は Graphics.draw_arc と同じです。
val fill_ellipse : int -> int -> int -> int -> unit
カレントカラーで楕円を塗りつぶして描画します。引数は Graphics.draw_ellipse と同じです。
val fill_circle : int -> int -> int -> unit
カレントカラーで円を塗りつぶして描画します。引数は Graphics.draw_circle と同じです。


Images



type image
内部表現イメージの抽象型です。イメージは色の行列を表していると思って下さい。

val transp : color
色の行列において、この色は「透き通る」点を表します。イメージを描画する際、透過ピクセルに対応する位置の画面の点は変更されず、それ以外の点は対応するイメージの点の色で置き換えられます。バックグラウンドの上にイメージを置く (superimposing) ことが出来ます。
val make_image : color array array -> image
与えられた点の行列をイメージに変換します。それぞれのサブ配列は 1 本の水平線を表します。これらの配列はすべて同じ長さにしてください。そうでないと例外 Graphic_failure が発生します。
val dump_image : image -> color array array
イメージを点の行列に変換します。
val draw_image : image -> int -> int -> unit
与えられた点を左下にとり、与えられたイメージを描画します。
val get_image : int -> int -> int -> int -> image
画面の指定された四角形をイメージとしてキャプチャします。引数は Graphics.fill_rect と同じです。
val create_image : int -> int -> image
create_image w h は横幅 w ピクセル、縦幅 h ピクセルの新しいイメージを作成します。blit_image とあわせて使用します。初期イメージはランダムです (ただし透過色を含まないことは保証されます) 。
val blit_image : image -> int -> int -> unit
blit_image img x y は画面の指定された四角形内のピクセルをイメージ img へコピーします (img を書き換えます) 。四角形は左下角に x,y をとり、横幅と縦幅はイメージのサイズと同じです。img のなかで透過色の点は変更されず透過色のままです。


Mouse and keyboard events



type status = {
   mouse_x : int; (*X coordinate of the mouse*)
   mouse_y : int; (*Y coordinate of the mouse*)
   button : bool; (*true if a mouse button is pressed*)
   keypressed : bool; (*true if a key has been pressed*)
   key : char; (*the character for the key pressed*)
}
イベントの報告です。


type event =
| Button_down (*A mouse button is pressed*)
| Button_up (*A mouse button is released*)
| Key_pressed (*A key is pressed*)
| Mouse_motion (*The mouse is moved*)
| Poll (*Don't wait; return immediately*)
待つイベントの指定です。

val wait_next_event : event list -> status
与えられたイベントリストのどれかが発生するまで待ち、そのときのマウスとキーボードの状態を返します。イベントリストに Poll を含む場合、関数はただちに現在の状態を返します。マウスカーソルがグラフィックウィンドウの外にある場合、mouse_xmouse_y フィールドは 0..size_x()-1, 0..size_y()-1 の範囲外になります。キー押下はキューされ、Key_pressed が指定されるたびに 1 つずつ返します。


Mouse and keyboard polling


val mouse_pos : unit -> int * int
マウスカーソルの位置をグラフィックウィンドウからの相対位置で返します。マウスカーソルがグラフィックウィンドウの外側にある場合、mouse_pos()0..size_x()-1, 0..size_y()-1 の範囲外の点を返します。
val button_down : unit -> bool
マウスのボタンが押されている場合 true を、そうでない場合 false を返します。
val read_key : unit -> char
キーが押されるのを待ち、そのキーの文字を返します。キー押下はキューされています。
val key_pressed : unit -> bool
キーが押されていれば true を返します。つまりこれが true を返せば read_key はブロックしません。


Sound


val sound : int -> int -> unit
sound freq dur は周波数 freq ヘルツの音を dur ミリ秒間鳴らします。


Double buffering


val auto_synchronize : bool -> unit
デフォルトで描画は、画面に表示されているウィンドウと、メモリエリア (backing store という) の両方に行われます。backing store は必要に応じて画面を再描画するためのイメージです。

アニメーション中のちらつきを押さえるために、画面への描画を無効にし backing store のみに描画を行い、画面への再描画を明示的に行うことが出来ます。

auto_synchronize false とすると画面への描画を無効にします。この後の描画命令はすべて backing store のみに行われます。

auto_synchronize true とすると (synchronize を行うように) backing store の内容を画面へ再描画し、画面への描画を有効にします。この後の描画命令はすべて画面と backing store の両方に行われます。

デフォルトの描画モードは auto_synchronize true になっています。

val synchronize : unit -> unit
backing store をグラフィックウィンドウへコピーして、backing store と画面を同期します。
val display_mode : bool -> unit
ディスプレイモードのオン/オフを設定します。オンのとき、描画はグラフィックウィンドウ内に行われます。オフの場合、描画はグラフィックウィンドウ内には行われません。これは backing store への描画設定とは独立しています (下の Graphics.remember_mode を見て下さい) 。デフォルトでディスプレイモードはオンです。
val remember_mode : bool -> unit
リメンバーモードのオン/オフを設定します。オンのとき、描画は backing store 内に行われます。オフの場合、描画は backing store 内には行われません。これは画面への描画設定とは独立しています (上の Graphics.display_mode を見て下さい) 。デフォルトでリメンバーモードはオンです。