目次

グラフ表示機能追加

 最初のシステムを利用したユーザーから、「動かす前に、温度の
 変化がどうなるのか見れた方が使い易い。」との意見が出ました。

 入力済みの情報を利用して、数値変化を可視することは
 簡単なので、機能として盛り込みます。

 温度と時刻は入力してあるので、直線変化のグラフを表示。




 縦、横に緑線を入れてクロスハッチ状態にし、おおよその
 数値変化を、判読できるようにしました。


 グラフ表示のために、ボタンを用意します。




 「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

  グラフ描画に、次のシーケンスを定義しました。
  1. グラフ消去
  2. 内部変数初期化
  3. クロスハッチ描画
  4. 時刻情報を連想配列から取得
  5. x座標の値を4で求めた数値から換算
  6. 温度値を、y座標の値に換算
  7. 直線描画
 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 }

目次

inserted by FC2 system