上一期我們講了二次開發在 HyperMesh 中的應用,內容發佈後有許多使用者在後臺留言,想進一步瞭解二次開發。
小汰向來都善解人意的~
所以今天給大家帶來第二期教程—《二次開發之命令的解析》,想要成為二次開發的大拿?讓我們從基礎開始吧~
軟體安裝
►學習 Tcl 語言自然需要一個 Tcl 解譯器
► HyperMesh 安裝後自帶Tcl解譯器
► 你也可以下載 ActiveTcl 進行練習,ActiveTcl 不僅自帶 Tcl 的,而且不用每次都佔用 HyperMesh 的 license,啟動也快很多。
Tips:學習程式設計語言一般先嘗試兩樣最簡單的東西:輸出 “hello world!” 和進行算數運算。學習的方法就是在Tcl解譯器裡面進行交互的執行。下面我們就來看看這兩項要怎麼做吧~
輸出 "Hello World!"
► Tcl 中輸出一個字串有幾種方法:
第一種: % puts “Hello World!”
輸出: Hello World!
第二種: tk_messageBox –message “Hello World! ”
輸出:彈出框

Tips:為了方便大家識別,我們把 輸入部分放在%後面 ,把 輸出放在=> 後面 ,下面的例子都遵循這個規則。
算數運算
► Tcl 語言使用 expr 函數進行算數運算,例如:
% expr { 1+1 }
=> 2
% expr { max(pow(2,1.3), sin(1.0), acos(0.4), abs(tan(3.0)), min(exp(4.0), sqrt(5.0))) }
=> 2.4622888266898326
Tips:Tcl 推薦 把所有表達式都放在“{ }”中 ,這樣運行效率會高很多
如何運行一個檔
► 通常如果執行的命令很多,我們會將這些命令保存在一個尾碼為Tcl的檔裡。
► 比如,我們把 puts "Hello World!" 放在文件 D:\hello.tcl 中,然後打開 tclsh 或者 HyperMesh 的命令列視窗。
% source {D:\hello.tcl}
=> Hello World!
創建和使用變數
► 最簡單的變數如下:
% set x 123
=> 123
% set y 111
=> 111
% set sum_res [ expr { $x + $y } ]
=> 234
在tcl語言中下面的命令是合法的
% set set set
=> set
控制結構
► 上期我們運行程式的時候並沒有使用變數,但是如果我們使用變數來做,上期程式就都可以在3—5行內搞定。
► 把下麵的語句放在文件 D:\createnodes.tcl 中然後在 HyperMesh 的命令視窗中執行。
% source {D:\createnodes.tcl}
set x_list { 0 1 2 3 4 5 6 7 8 9 }
set y_list { 0 1 2 3 4 5 6 7 8 9 }
set z_list { 0 1 2 3 4 5 6 7 8 9 }
foreach x $x_list y $y_list z $z_list {*createnode $x $y $z 0 0 0}
► 額外的好處是如果xyz的節點座標變了,我們只需要修改前三行就可以了。
Tcl 與 HyperMesh
► 學習使用 Tcl 語言編寫 HyperMesh 二次開發程式實際上是學習以下兩項:
1、Tcl 語言的語法,也就是下一頁講到的十來條命令解析規則;
2、學習每一條命令,包括Tcl語言帶的核心命令,一些包中的擴展命令,以及最最重要的 HyperMesh 為 Tcl 增加的命令,這部分通常也稱為 API 。
解譯器解析的簡單實例
變數替換

02
命令替換

命令解析規則
► Tcl 語言最常犯的錯誤是搞不清楚替換在什麼情況下發生,什麼情況下不發生。
► Tcl 解譯器就是從上到下依次執行每一條命令,每一條命令都是預先定義的函數。
► Tcl 沒有保留字,只有幾條解析命令的規則。
► 解析階段各個單詞的值沒有任何具體意義,解析完全是簡單的字串操作。
規則一
► 命令由單詞組成,除以下幾種特殊規則外,單詞之間通過空格或定位字元分割。
特殊規則一: { } 內的所有內容為一個單詞,除了續行外不進行任何其它替換。
特殊規則二:雙引號" "內為一個單詞,進行命令替換、變數替換和反斜線替換。
02
規則二
► 命令的第一個單詞是函數名,後面的其它單詞都是該函數的參數。
03
規則三
► 通常分行符號結束命令,分號也可結束命令。通常每行只寫一條命令,行尾不加分號。
04
規則四
► 命令替換:如果解析過程碰到 [ ],先求 [ ] 內的值再繼續解析,[ ] 可以嵌套。
% set a 5
% set b 6
% puts [set c [expr {$a + $b}]] #這是一條複合命令,實際上執行puts命令前已經替換為puts 11
05
規則五
► 變數替換:如果過程碰到 $ ,先將 $ 連同後面的變數名替換為變數的值,解譯器對每個字元只會掃描一次,替換只會發生一次不會嵌套。即便替換的結果包含 $ 也不會再次進行替換。
% set company ALTAIR
% set module preprocess
% set $company$module SimLab
% puts$$company$module
我們前面剛剛說了中括弧的命令替換是可以嵌套的。
% set company ALTAIR
% set module preprocess
% set $company$module SimLab
% puts [set [append company $module]]
或者把上面一句寫成
% puts [set [set company][set module]]
另外一種方法是構建命令字串,然後利用 eval 命令把該字串當成命令執行。
% set company ALTAIR
% set module preprocess
% set $company$module SimLab
% set cmd {}
% append cmd {puts }
% append cmd {$}
% append cmd $company$module
% eval $cmd
當然,也可以使用陣列/字典等高級資料類型來處理這個問題,這些我們放在下一講介紹。
06
規則六
► 反斜線替換:\ 和後面緊跟的一個字元組合成轉義字元,例如 $ 前面加上 \ 後,就成了普通的 $ 字元,不再進行變數替換,而 \n 則表示分行符號。 行尾的 \ 會轉義分行符號,所以分行符號不再起作用,下一行變成了續行。
% puts "egg's price is: \$1.5/Kg“
=> egg's price is: $1.5/Kg
07
規則七
► 無論替換後得到的結果是什麼,每個字元只會發生一層替換。
參考資料
本篇文章是不是技巧滿滿呀~ 看到這先來鬆口氣,最後為大家推薦一些學習 Tcl 語言的參考資料~
01
Tcl 的 tutorials
► 學習語言建議從這裡開始,並在解譯器裡交互執行每一條命令。
點擊連結查看更多:
02
Tcl 命令使用文檔
► 這些文檔主要是用來查詢命令說明的,不便於初學者學習。
點擊連結查看更多:
http://docs.activestate.com/activetcl/8.5/tcl/tcl/tcl_contents.html
03
Practical Programming in Tcl and Tk
點擊連結查看更多:
可能有人會覺得上面推薦的教程怎麼都是英文的?!
別擔心,如果不想看英語教程的話可以先看看下面這本中文教材~
04
Tcl/Tk 入門經典(第2版):
► 作者:(美)奧斯德奧特,鐘斯著,
張元章譯
出版社:清華大學出版社
出版時間:2010年10月
05
Wiki 網站
其實我們可以從 Wiki 網站學到很多有用的東西,網址及網站地圖如下:

文章終於看到最後啦,感謝看到這裡的你們。今天的教程就到這裡啦,希望對大家有所幫助。
想要掌握程式設計語言是需要勤加練習的,二次開發之後還會有後續的教程,請大家持續關注喲~