GTK2 を使ったシンプルな描画ライブラリです。Gem のページはこちら。
こちらのブログ記事も参考になるかと。
Gem なのでふつうに $ gem install oekaki や Bundler を使ってどうぞ。
ウインドウを出してみます。
require 'oekaki' Oekaki.app width: 400, height: 300 do draw do clear end end
draw {..}
のブロック内に描画処理を書きます。なお、以下 require 'oekaki'
は省略します。
白地に半径 100 の赤い円を描いてみます。
Oekaki.app width: 300, height: 300 do #ウィンドウの大きさは 300×300 draw do white = color(65535, 65535, 65535) red = color(65535, 0, 0) clear(white) #画面全体を白く塗りつぶす circle(true, 150, 150, 100, red) #赤い円を描く end end
circle(fill, x, y, r, color = nil)
の fill は true ならば内部を塗りつぶします。
タイマーを使ってアニメーションします。
Oekaki.app width: 300, height: 300, title: :lines do draw do clear(color(0xffff, 0xffff, 0xffff)) end x = 0 id = timer(30) do color(0, 0xffff, 0) line(x, 0, 299 - x, 299) x += 1 timer_stop(id) if x >= 300 true end end
timer(wait) {..}
で wait ミリ秒ごとにブロック内を呼び出します。id が返るので、timer_stop(id)
でタイマーを止めることができます。なお、ブロックが true を返さないと一度きりの呼び出しになります。なお、color(r, g, b)
は Gdk::Color オブジェクトを返し、その値を内部で保持します。
スター(星形)を描きます。
Oekaki.app do draw do color(0, 0, 0) rectangle(true, 0, 0, 300, 300) color(0xdc00, 0xdc00, 0xdc00) #gainsboro circle(true, 150, 150, 150) color(0x6b00, 0x8e00, 0x2300) #olivedrab star(true, 150, 150, 150, 0) end end
star(fill, x1, y1, x2, y2, color = nil)
は (x1, y1) がスターの中心、(x2, y2) は頂点(のひとつ)の座標です。rectangle(fill, x, y, width, height, color = nil)
は長方形を描画します。
多角形と文字列をを描き、png 画像ファイルとして保存します。
Oekaki.app width: 300, height: 300 do draw do white = color(65535, 65535, 65535) red = color(65535, 0, 0) blue = color(0, 0, 65535) clear(white) ar = [] 50.times {ar << [rand(300), rand(300)]} #線の数は50本(配列に座標を入れる) polygon(true, ar, blue) #多角形を描く text("Polygon", 180, 260, 20 * 1000, red) #文字列を描く img = get_pic(0, 0, 300, 300) #画像の取り込み save_pic(img, "sample.png") #画像ファイルに保存 end end
タートルグラフィックスを使います。
Oekaki.app width: 500, height: 500 do draw do clear(color(0x1694, 0x3447, 0x8d60)) t = Oekaki::Turtle.new t.color(0xfe5f, 0xaa9a, 0x212a) ln = 10 60.times do 4.times do t.forward(ln) t.left(90) end t.left(6) ln += 4 end end end
Oekaki::Turtle.new
でタートルのインスタンスを生成します。
[[0, 0], [100, 10], [20, 250], [0, 0]]
といった具合に指定します。
Oekaki::Turtle.new
でインスタンスを生成します。初期位置はウィンドウの中心です。座標系は右方向と上方向がプラス方向になります。
Vector[1, 0]
(右方向)です。