Laker TCL 基础训练教材

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[expr]
TCL 基本語法:大括號 { }
• • Syntax:{script} 大括號 { } 的作用和雙引號類似,都是做grouping的動作,但是它會免去 大括號中一切的替換和計算,把大括號中都當成字串 範例 set b 8 set a {[expr $b+2]} set a [expr $b+2] set a "b+2 = [expr $b+2]" set w ${b}fix • 例如 if { $x<1 }{ puts “X=$x”} 語法錯誤 if { $x<1 } { puts “X=$x”} 語法修正 結果 8 [expr $b+2] 10 b+2 = 10 8fix
TCL 基本語法:變數的使用
• • Syntax:$varName or ${varName} 使用『$』符號代表將變數值取出,用大括號可區隔變數名稱與其後之字 元,以避免混淆。變數的名稱由字元、數字及底線所組成。請仔細比較下列 範例之異同 範例 結果 set b 66 set a b set a $b set a $b+$b+$b set a $b$b set w ${a}fix 66 b 66 66+66+66 6666 6666fix
TCL 簡介
cont.
• TCL是與UNIX shell language類似的工具語言,它本身也是一種 Shell 語言(/usr/bin/tclsh) 也就是說你可以在程式的第一行加上 (#!/usr/local/bin/tclsh),就可以在提示符號下直接執行你所寫的TCL程 式 Example:hello.tcl TCL file: #!/usr/bin/tclsh puts “Hello!!” Enter in terminal: > chmod +x hello.tcl > hello.tcl Result in terminal: > Hello!!
TCL 基本語法
• TCL程式是一連串的指令,不同的指令之間以換行 ( enter ) 或分號 ( ; ) 做 區隔,下一行若是接續上一行則需以右斜線 ( \ ) 做為行尾,行首若有井字 號 ( # ) 則表示此行是註解,TCL會忽略掉。 在指令之中以空格來區分不同的變數,指令列中第一個字是指令,之後接 著的是參數,指令列所傳回來的值是字串。
Laker TCL Extensions
Laker Extensions GUI Extensions Database Extensions
cont.
提供使用者控制Laker的動作
lakerOpenDesign lakerLoadDesign … 提供使用者控制圖形介面的指令
gtCreateIntField gtCreateRadioField … 提供使用者直接處理記憶體中資料的指令
一般常犯的錯誤是在『}』『{』兩個符號之間沒有填入空白符號
TCL 基本語法:雙引號 “ ”
• Syntax: “script” • TCL在分析語法中參數(argument)部分時會自動加上雙引號 “ argument ”: C: x = 4; y = x+10 y 14 TCL: set x 4; set y x+10 y “x+10” • • 雙引號同時能避免『;』的作用,但其中的替代與計算都會被執行 set a “x is $x; y is $y” x is 4; y is x+10 當大括號被雙引號包起來的時候,大括號免去替代計算的功能就會被關 掉 set x CurlyBraces set a “x is {$x}” x is {CurlyBraces}
10.set d [expr $a+$b+$c] 40
Exec 1
cont. 40 $d 3 8 3.3333333 1 5 (將d 的值設給aa) (”\”可保留特殊字元) (TCL自動判別為整數,因10,3皆整數) (因10.0為float ) (精確度設為8位, default 12) (前1後7, 不含小數點8位) (等同於 set k [expr $k+1] ) (note: incr後的變數不需加$) (等同於 set k [expr $k+4] )
Laker TCL Basic Training Course
2011
TCL 簡介
• TCL - tickle
• Tool Command Language的縮寫 • 以字串(String)為基礎的程式語言 • 或是在tclsh下使用 source program.tcl 來執行 • • 你可以使用 TCL 語法來組合 Laker 的指令,製作屬於你自己的功 能,來增進工作效率 在Laker中你可以把TCL 所寫成的功能加到功能表的選項之中或設定 成快速鍵以方便使用

若要保留『$』字元,則需在『$』前加上『\』 set a \$b $b 可以用 info exists a 檢查變數 a 是否存在,存在則傳回1,不存在則傳回0
TCL 基本語法:中括號 [ ]
• • Syntax:[script] 將中括號中的指令執行之後,傳回執行的結果 範例 set b 8 set a [expr $b+2] set a "b+2 = [expr $b+2]" • 若要保留『[]』字元,則需在『[]』前加上『\』 set a \[expr\] 結果 8 10 b+2 = 10
在 Laker 上執行 TCL


在Laker main window可以直接執行TCL的語法
或在 Laker的命令欄執行 source laker.tcl
Laker 自動啟用 TCL 的方法
• 你可以在啟動 Laker 時就自動啟動 TCL 程式 只要在 laker.rc 的設定檔中加入 TCL 程式即可 ... [SourceTcl] Source1 = ./example.tcl Source2 = /home/abc/leoBlockLabel.tcl PS. 修改laker.rc時,laker必須是在關閉的狀況下
expr 會自動依據計算式中的數值調整資料型態,當你要使用整數 運算時請以整數表示,expr會將小數點以下捨去
TCL 基本語法:expr
cont.
• 可用tcl_precision 變數來控制expr計算結果的精確度,最大值可以設定到 16,此一精確度足以讓數值在字串及IEEE double precision number之間互 相轉換沒有lost 範例 expr expr set expr set expr 結果 0 0.333333 10 0.3333333333(前0後10) 3 0.333 (前0後3)
12.set aa $d 13.set bb \$d 14.expr 10/3 15.expr 10.0/3 16.set tcl_precision 8 17.expr 10.0/3 18.expr 1.0/3 19.set k 0; incr k 20. incr k 4
dbCVExist dbGetLayerNameByLayerId … 優點:不經過圖形介面處理,程式執行速度較快 缺點:無法回復到動作之前(無法直接undo,在Laker32v4之後提供 指令,來做到undo的功能)
Laker TCL Command Example

用 lakerCreateRect 產生矩形 lakerCreateRect –layerName OD -point (0.0,0.0) (10.0,10.0)
3.
TCL 基本執行單位:程序 procedure
Syntax:proc Name {argument1 argument2 …} { TCL command body } • 傳回的值是這個程序之中的最後一個指令的結果。 • 若在程序之中使用return 指令的話則是傳回你所要傳出來的結果 Example: proc sum { A B } { set r [ expr $A+$B ] return $r } • 使用上面所完成的程序可直接以下列指令呼叫即可 set result [sum 1 2] • 計算出之結果 3 即為傳回的值 注意:proc之中不要再寫入另一個proc
Command argument1 argument2 ….


Example:
set a 22 設定變數 a 的值為 22,不需事先宣告變數 a,TCL中的變數在第 一次設定值以後就會存在 unset a 刪除變數a set x 4; set y “Hello” 用分號分開兩個指令 set text “This line is split into \ 接續下一行 Two lines” # This line is comment 這行不執行 • 注意斜線 ( \ ) 之後不能有空白字元(常見錯誤)
Exec 1
請依序按下列的範例進行練習: 1. set a 10 2. set b 22; set c 8 3. set a 4. echo $a 5. puts $a 6. puts “$a $b $c” 7. puts {$a $b $c} 8. puts “{$a $b $c}” 9. expr $a+$b+c 11.set e $a+$b+$c 10 8 10 10 10 10 22 8 $a $b $c {10 22 8} 40 10+22+8 (設a為10) (設b=22,c=8, ”;”等於換行) (取變數a值) (呼叫變數a ) (輸出至terminal ) (將值取出並輸出至terminal ) (大括號內將不賦值) (雙引號會取消大括號的影響) ( TCL計算時須用expr指令) (將expr結果給d,[ ]內代表另一指令的執行) (沒expr指令不會運算)
1/3 1.0/3.0 tcl_precision 10 1.0/3.0 tcl_precision 3 1.0/3.0
• 精確度為不含小數點之位數
TCL 基本語法:incr
• Syntax:incr variable increment • incr 相當於 set variable [expr $variable + increment]指令,increment如 果沒寫,內定值就是 1 範例 結果 set a 3 3 incr a 4 incr a 6 10 incr a -2 8
Laker TCL Extensions




Laker會將使用者所有的動作以TCL的語法記錄下來,使用者亦可使用 相同之TCL指令控制Laker,以類似巨集的方式使用,增進工作效率 在 Main Window的訊息欄中可以看到所執行的動作的TCL指令延伸(如 下圖) 你也可以在你的工作目錄下找到 lakerLog的子目錄,所執行過的指令都 會記錄在 <工作目錄>/lakerLog/laker.cmd 如果想要執行此laker.cmd,也可以直接執行command如下: laker –play <工作目錄>/lakerLog/laker.cmd
TCL 基本語法:expr
• Syntax:expr function • expr 會將function所表示的計算式加以替換和計算,並傳回計算 結果 範例 結果 set b 5 ; set a 8 5 8 expr ($b*4) - 3 17 expr $a * cos(2*$b) -6.71257 • 注意(易犯錯) expr 122/10 expr 122.0/10.0 expr (122*1.0)/10.0 • 12 12.2 12.2 (整數相除仍為整數)
TCL 基本語法:數值表示法
• 整數(integer)預設都是十進制 (decimal) • 如果第一個字元是『0』零,則是八進制 (octal) • 如果第一個字元是『0x』,則是十六進制 (hexadecimal) Example: 243, 0363, 0xF3 expr 0xF3 * 1 243 實數可用以下之表示法表示 5.5 3.7e+6 6E4
相关文档
最新文档