目次
前
次
グラフ表示機能追加
最初のシステムを利用したユーザーから、「動かす前に、温度の
変化がどうなるのか見れた方が使い易い。」との意見が出ました。
入力済みの情報を利用して、数値変化を可視することは
簡単なので、機能として盛り込みます。
温度と時刻は入力してあるので、直線変化のグラフを表示。
縦、横に緑線を入れてクロスハッチ状態にし、おおよその
数値変化を、判読できるようにしました。
グラフ表示のために、ボタンを用意します。
「Draw」ボタンで、温度と時刻の情報からグラフを表示。
「Erase」ボタンで、グラフを消去します。
数値変化とグラフの対比ができるように、レイアウトを変更。
動かしたときに、入力してある情報と、数値変化がわかるように
数値を書いた右エリアに、経路、時刻、温度値を表示。
ボタンとグラフ表示のためのブロックを定義。
button .btnDraw -font {{MS ゴシック} 16 bold} -bg gray -text "Draw" -width 10 -command "xdrawexe"
button .btnErase -font {{MS ゴシック} 16 bold} -bg gray -text "Erase" -width 10 -command "xerase"
canvas .cscreen -width 350 -height 300 -bg white
グラフ表示には、「canvas」オブジェクトを使います。
「canvas」オブジェクトは、メソッドで図形を描画するので
メソッドには、deleteとcreate lineを利用。
2ボタンには、手続きを割り当てて使いました。
xerase
グラフ消去は、「canvas」オブジェクトの中にあるアイテムを
すべて削除すると考えてコードに落とします。
メソッドに「delete」を使います。
proc xerase {} {
.cscreen delete all
}
xdrawexe
グラフ描画に、次のシーケンスを定義しました。
- グラフ消去
- 内部変数初期化
- クロスハッチ描画
- 時刻情報を連想配列から取得
- x座標の値を4で求めた数値から換算
- 温度値を、y座標の値に換算
- 直線描画
6点の座標を求めると、メソッド「create line」で一気に
グラフを生成します。
proc xdrawexe {} {
#
global xexe_temp xexe_time
# clear all items
xerase
# initialize location
set xbegin 0
set xlast 350
set xdelta 50
set ybegin 0
set ylast 300
set ydelta 50
# middle line
for { set i 0 } { $i < 7 } {incr i} {
.cscreen create line $xbegin [expr $i*$ydelta] $xlast [expr $i*$ydelta] -fill green
.cscreen create line [expr $i*$xdelta] $ybegin [expr $i*$xdelta] $ylast -fill green
}
# time
set tP0 [calc_time $xexe_time(P0)]
set tP1 [calc_time $xexe_time(P1)]
set tP2 [calc_time $xexe_time(P2)]
set tP3 [calc_time $xexe_time(P3)]
set tP4 [calc_time $xexe_time(P4)]
set tP5 [calc_time $xexe_time(P5)]
# x axis components
set xP0 $xbegin
set xP1 [expr int($tP1 * $xlast / $tP5)]
set xP2 [expr int($tP2 * $xlast / $tP5)]
set xP3 [expr int($tP3 * $xlast / $tP5)]
set xP4 [expr int($tP4 * $xlast / $tP5)]
set xP5 $xlast
# y axis components
set yP0 [expr $ylast - $xexe_temp(P0)]
set yP1 [expr $ylast - $xexe_temp(P1)]
set yP2 [expr $ylast - $xexe_temp(P2)]
set yP3 [expr $ylast - $xexe_temp(P3)]
set yP4 [expr $ylast - $xexe_temp(P4)]
set yP5 [expr $ylast - $xexe_temp(P5)]
# draw
.cscreen create line $xP0 $yP0 $xP1 $yP1 $xP2 $yP2 $xP3 $yP3 $xP4 $yP4 $xP5 $yP5 -fill red
}
目次
前
次