首页/文章/ 详情

【HyperMesh宝典】二次开发之命令的解析

8月前浏览5149

本文摘要(由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 。


解释器解析的简单实例


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

规则七

► 无论替换后得到的结果是什么,每个字符只会发生一层替换。



参考资料



 


本篇文章是不是干货满满呀~ 看到这先来松口气,最后为大家推荐一些学习 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/


 

可能有人会觉得上面推荐的教程怎么都是英文的?!

别担心,如果不想看英语教程的话可以先看看下面这本中文教材~


04

Tcl/Tk 入门经典(第2版):


► 作者:(美)奥斯德奥特,琼斯著,

              张元章译   

    出版社:清华大学出版社  

    出版时间:2010年10月

 


05

Wiki 网站


其实我们可以从 Wiki 网站学到很多有用的东西,网址及网站地图如下:

 

https://wiki.tcl.tk/

 


文章终于看到最后啦,感谢看到这里的你们。今天的教程就到这里啦,希望对大家有所帮助。

想要掌握编程语言是需要勤加练习的,二次开发之后还会有后续的教程,请大家持续关注哟~

 



来源:Altair澳汰尔
ACTHyperMeshSimLab二次开发ADSUM控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-03-27
最近编辑:8月前
Altair澳汰尔
澳汰尔工程软件(上海)有限公司
获赞 142粉丝 476文章 746课程 4
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈