目次
前
次
オブジェクト定義
シミュレータの画面を見て、必要なオブジェクトを抽出します。
文字列表示
左上から眺めると、文字列(Top、Left、Right)を表示
しているので、ラベルを定義して文字列を表示します。
右上を見ると、文字列(X=、Y=)を表示しているので
ラベルを定義して文字列を表示。
計算結果、角度、方向は、文字列なので、ラベルで表示指定。
Tcl/Tkでは、ラベル定義には、コマンドlabelを使います。
Top、Left、Rightを定義すると、以下。
label .lblTop -text "Top"
label .lblLeft -text "Left"
label .lblRight -text "Right"
表示したい文字列を、「-text」の右に""で
囲んで記述すれば、それでOKです。
同じように、X=、Y=を定義。
label .lblXcmp -text "X = "
label .lblYcmp -text "Y = "
計算結果、角度、方向は、SETボタンクリックで変るので
文字列を格納する変数名だけを指定します。
label .lblXcmpV -textvariable xcmp
label .lblYcmpV -textvariable ycmp
label .lblAngle -textvariable ang
label .lblDir -textvariable dir
文字列を格納する変数は、予め定義する必要はありません。
必要になったときに、定義して値を格納しておけばよいのが
長所です。
ただし、この場合は、起動したときには何も入っていない
はずなので、変数に0か空文字列を格納。
set xcmp 0
set ycmp 0
set ang 0
set dir ""
文字列、数値入力
Top、Left、Rightの3数値を入力します。
Tcl/Tkでは、数値も文字列とみなして、1行入力するには
コマンドentryを利用。
Top、Left、Rightの各文字列を入力すると考え
次のように定義します。
entry .edtTop -textvariable topPWM -width 6
entry .edtLeft -textvariable leftPWM -width 6
entry .edtRight -textvariable rightPWM -width 6
ラベル定義と同じに、文字列格納変数を3つ利用。
初期化しておいた方がわかりやすいので、次のように
エントリを定義する前に記述します。
set topPWM 0
set leftPWM 0
set rightPWM 0
ボタン定義
ボタンは、Set、Clear、Exitの3個用意します。
Exitボタンは、このアプリケーションを終了します。
Setボタンは、3頂点の回転数を入力後にクリックし
次のパラメータを求めます。
- ロボットのX方向の移動速度
- ロボットのY方向の移動速度
- センサーの方向に対して、左右のどちらに傾いているか
Clearボタンは、描画した図を消去。
ボタン定義には、コマンドbuttonを使います。
3ボタンを定義。
button .btnExit -text "Exit" -command "exit"
button .btnSet -text "Set " -command {calSet 0}
button .btnClear -text "Clear" -command {masterClear 0}
表示文字列は、「-text」の右に書きます。
ボタンをクリックしたときの動作は、「-command」の右に書きます。
動作は、1行で書けるときもあれば、何行にもわたることもあります。
何行にもわたる場合は、プロシージャとして別に定義した方が楽です。
2ボタンSet、Clearの動作は、後で記述します。
描画領域定義
3頂点の回転がつくるVectorとロボットの移動Vectorの
2領域を定義します。
3頂点の方向Vectorとロボットの移動Vectorを表示
する領域がほしいので、左と右に配置。
Tcl/Tkでは、図形表示にはcanvasコマンドを利用します。
図形の描画領域なので、幅と高さが必要です。
また背景色を指定した方がよいので、以下のように定義。
canvas .canOrg -width 200 -height 200 -bg gray
canvas .canVector -width [expr $cntv * 2] -height [expr $cntv * 2] -bg gray
[]は、内部の式を評価し、結果を返す指定。
exprは、expressの意味で、式を実行する指定です。
目次
前
次