2010-10-16

RBC - Refactored BLT Component

Fedora では Tcl/Tk 8.5 で BLT パッケージ(2.4z にパッチをあてたもの)が利用できますが、nightly-cvs の Tcl/Tk8.6 を自分でコンパイルして使用している環境では、同サイトで入手できる blt (3.0) をどうしてもうまくビルドできません。なんとかならないかとインターネット上で情報をあさっていたところ、古い記事ですが BLT 2.4z を リファクタリングした RBC についての議論を見つけました[1]。どうやら Mayo SPPDG - Mayo Clinic and FoundationRobert W Techentin 氏が、院生のチームと一緒になって取り組んだ成果のようです。

SourceForge.net にサイト[2] が開設されているので、早速ダウンロードしてビルドしてみました。試行錯誤の後、結局、以下のようにしてビルドしました。ビルドした環境は Fedora 14 (beta) x86_64 です。
$ tar zxvf rbc0.1.src.tar.gz
$ cd rbc
$ CFLAGS="-DUSE_INTERP_RESULT" \
> ./configure --prefix=$HOME --with-tcl=../tcl/unix --with-tk=../tk/unix
$ make
$ make install
コンパイルフラグ USE_INTERP_RESULT は、Tcl 8.6 ではレガシーな (Tcl_Interp) interp->result にアクセスする際に必要になります[3]
テスト用に BLT 用の以前用意したサンプルを RBC 用に書き換えて実行してみました。
#!/bin/sh
# the next line restarts using wish \
exec wish8.6 "$0" "$@"
 
package require rbc

proc init_x {} {
    set xList {}
    for {set i 0} {$i <= 200} {incr i} {
        lappend xList [expr $i / 5.]
    }
    return $xList
}

proc init_y {xList} {
    set yList {}
    foreach x $xList {
        lappend yList [expr sqrt($x) * sin($x)]
    }
    return $yList
}
 
# ----------------------------------------------------------------------------
# メイン
# ----------------------------------------------------------------------------
wm title . "rbc::graph"

set grp ".grp"
rbc::graph $grp \
        -title           "Sample Graph" \
        -font            "helvetica 16" \
        -rightmargin     15 \
        -plotbackground  "light cyan" \
        -plotpadx        0 \
        -plotpady        0 \
        -plotborderwidth 0
pack .grp

# ズームスタックを有効にする
#Blt_ZoomStack $grp

# X と Y 軸
$grp axis configure x \
        -subdivisions 10 \
        -tickfont     "courier 8" \
        -title        "X Axis" \
        -titlefont    "helvetica 12"
$grp axis configure y \
        -subdivisions 10 \
        -tickfont     "courier 8" \
        -title        "Y Axis" \
        -titlefont    "helvetica 12"

# グリッド
$grp grid configure \
        -color "turquoise" \
        -mapx  x \
        -mapy  y
$grp grid on

# 凡例
$grp legend configure \
        -font     "helvetica 10" \
        -ipadx    10 \
        -position bottom \
        -relief   ridge

# データ
set xList [init_x]
set yList [init_y $xList]
$grp element create func \
        -label        "sqrt(x) * sin(x)" \
        -xdata        $xList \
        -ydata        $yList \
        -smooth       quadratic \
        -linewidth    1 \
        -color        blue \
        -symbol       circle \
        -pixels       0.0625i \
        -scalesymbols yes \
        -outline      red \
        -fill         green

# ---
# sample_graph.tcl
実行例を以下に示しました。日本語フォントが表示できないし、 BLT のすべての機能が使えるわけでもなく制限はありますが、Tcl/Tk 8.6 の環境で手軽に(そこそこの)グラフを作成できそうです。

参考サイト

[1] RBC - Refactored BLT Components - Initial Release - Rhinocerus
[2] The RBC Toolkit | Download The RBC Toolkit software for free at SourceForge.net
[3] DIRECT ACCESS TO INTERP->RESULT - Tcl_SetResult manual page
 

0 件のコメント: