本文摘要(由AI生成):
本文是HyperMesh二次开发教程的第二期,深入探讨了Tcl语言在HyperMesh中的应用。文章从Tcl解释器的安装入手,推荐ActiveTcl作为实践工具,并提供了下载地址。随后,文章详细讲解了Tcl文件运行、变量创建与使用、控制结构等基础知识,并强调变量在简化程序和提高代码可维护性中的作用。文章还介绍了Tcl与HyperMesh API的结合使用,并深入剖析了Tcl解释器的命令解析规则,包括命令构成、替换规则等,并通过实例加深理解。文章鼓励读者多加练习,期待后续教程,以掌握Tcl语言,实现在HyperMesh中的高效二次开发。
本文摘要(由AI生成):
上一期我们讲了二次开发在 HyperMesh 中的应用,内容发布后有许多用户在后台留言,想进一步了解二次开发。
小汰向来都善解人意有没有~
所以今天给大家带来第二期教程—《二次开发之命令的解析》,想要成为二次开发的大拿?让我们从基础开始吧~
软件安装
► 学习 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
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
► 学习语言建议从这里开始,并在解释器里交互执行每一条命令。
点击链接查看更多:
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
可能有人会觉得上面推荐的教程怎么都是英文的?!
别担心,如果不想看英语教程的话可以先看看下面这本中文教材~
04
Tcl/Tk 入门经典(第2版):
► 作者:(美)奥斯德奥特,琼斯著,
张元章译
出版社:清华大学出版社
出版时间:2010年10月
05
Wiki 网站
其实我们可以从 Wiki 网站学到很多有用的东西,网址及网站地图如下:
文章终于看到最后啦,感谢看到这里的你们。今天的教程就到这里啦,希望对大家有所帮助。
想要掌握编程语言是需要勤加练习的,二次开发之后还会有后续的教程,请大家持续关注哟~