联系我们:186 6505 3298 

公众号二维码
新浪微博二维码
百家号二维码
仿真技术
仿真技术

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

来源: | 作者:ALTAIR | 发布时间 :2024-10-15 | 966 次浏览: | 分享到:

软件安装

► 学习 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 。

 

解释器解析的简单实例

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规则七

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


(内容、图片来源:《焊接过程数值模拟一书,侵删)

 

版权与免责声明:

凡未注明作者、来源的内容均为转载稿,如出现版权问题,请及时联系我们处理。我们对页面中展示内容的真实性、准确性和合法性均不承担任何法律责任。如内容信息对您产生影响,请及时联系我们修改或删除。

软件教程
更多
建模与可视化
建模和可视化
近期发布文章
更多
设计、制造和专业解决方案
设计、制造和专业解决方案
云和HPC解决方案
云和HPC解决方案
数据分析及物联网解决方案
数据分析及物联网解决方案​
免费试用申请
助力企业数智化转型,打造仿真新业态!