上一期我們講了二次開發在 HyperMesh 中的應用,內容發佈後有許多使用者在後臺留言,想進一步瞭解二次開發。

小汰向來都善解人意的~

所以今天給大家帶來第二期教程《二次開發之命令的解析》,想要成為二次開發的大拿?讓我們從基礎開始吧~

 

 

【HyperMesh寶典】二次開發之命令的解析 2020-01

 
 
 
 

軟體安裝

 

 

學習 Tcl 語言自然需要一個 Tcl 解譯器

► HyperMesh 安裝後自帶Tcl解譯器

► 你也可以下載 ActiveTcl 進行練習,ActiveTcl 不僅自帶 Tcl 的,而且不用每次都佔用 HyperMesh license,啟動也快很多。

下載地址:

https://www.activestate.com/activetcl/downloads

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

TipsTcl 推薦 把所有表達式都放在“{ }”中 ,這樣運行效率會高很多

 

 
 
 
 

如何運行一個檔

 

 

► 通常如果執行的命令很多,我們會將這些命令保存在一個尾碼為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 。

 
 
 
 

解譯器解析的簡單實例

 

 

01
 

變數替換

 
 
 
 
 
 

02

 

命令替換

 
 
 

 

 
 
 
 

命令解析規則

 

 

 

► Tcl 語言最常犯的錯誤是搞不清楚替換在什麼情況下發生,什麼情況下不發生。

► Tcl 解譯器就是從上到下依次執行每一條命令,每一條命令都是預先定義的函數。

► Tcl 沒有保留字,只有幾條解析命令的規則。

► 解析階段各個單詞的值沒有任何具體意義,解析完全是簡單的字串操作。

 

01
 

規則一

 
 

► 命令由單詞組成,除以下幾種特殊規則外,單詞之間通過空格或定位字元分割。

特殊規則一 { } 內的所有內容為一個單詞,除了續行外不進行任何其它替換。

特殊規則二:雙引號" "內為一個單詞,進行命令替換、變數替換和反斜線替換。

 

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

 

規則七

 
 

► 無論替換後得到的結果是什麼,每個字元只會發生一層替換。

 

 

 
 
 
 

參考資料

 

 

 

 

【HyperMesh寶典】二次開發之命令的解析 2020-02

 

本篇文章是不是技巧滿滿呀~ 看到這先來鬆口氣,最後為大家推薦一些學習 Tcl 語言的參考資料~

 

01

 

Tcl tutorials

 
 

► 學習語言建議從這裡開始,並在解譯器裡交互執行每一條命令。

點擊連結查看更多

http://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html

 

02

 

Tcl 命令使用文檔

 
 

► 這些文檔主要是用來查詢命令說明的,不便於初學者學習。

點擊連結查看更多

http://docs.activestate.com/activetcl/8.5/tcl/tcl/tcl_contents.html

 

03

 

Practical Programming in Tcl and Tk

 
 

 

點擊連結查看更多

http://www.beedub.com/book/

 

【HyperMesh寶典】二次開發之命令的解析 2020-03

可能有人會覺得上面推薦的教程怎麼都是英文的?!

別擔心,如果不想看英語教程的話可以先看看下面這本中文教材~

 

04

 

Tcl/Tk 入門經典(第2版):

 

 
 

► 作者:(美)奧斯德奧特,鐘斯著,

              張元章譯   

    出版社:清華大學出版社

    出版時間:201010

 

 

05

 

Wiki 網站

 
 

其實我們可以從 Wiki 網站學到很多有用的東西,網址及網站地圖如下:

https://wiki.tcl.tk/

 

 

文章終於看到最後啦,感謝看到這裡的你們。今天的教程就到這裡啦,希望對大家有所幫助。

想要掌握程式設計語言是需要勤加練習的,二次開發之後還會有後續的教程,請大家持續關注喲~

 

【HyperMesh寶典】中面抽取看我庖丁解牛 02

arrow
arrow

    Altair Taiwan 發表在 痞客邦 留言(0) 人氣()