hypermesh二次开发使用的语言是tcl语言 ,这个语言相对比较小众,但并不是很难学。下面简单介绍一下我所理解的tcl语言知识框架,便于我们对这门语言有个简单且整体的认识。我们可以将tcl语言大概分成以下5部分内容。(实际tcl语言可以写一本很厚的书,但我们刚开始学二次开发,我觉得暂时学这些内容够用了)
下载好ActiveTcl8.6 ,它可以运行tcl,方便我们练习。Are you ready?
puts helloworld
puts "hello world"
puts {hello world}
2. 设置变量 set 引用变量 $ (tcl语言引用已经设定的变量前都要加一个$,必须先给钱才能给你引用)
set software "hyperworks"
$software
3. 输出变量中的命令 eval
set foo "puts hi"
eval $foo
4. 计算指令 expr { } (所有的数学计算公式什么的都要用expr才能执行计算)
expr {1+1}
expr {1==1}
if { } {
do something here
} else if {
do something here
}
2. 循环语句 for
for {set i 0} {$i < 10} {incr i} {
puts
}
3. 循环语句 foreach
foreach var $list {
}
1.列表 list
set lst {{item1} {item2} {item3}}
set lst [split "item1.item2.item3" "."]
set lst [list "item1" "item2" "item3"]
set lst1 {1 2 3 4}
set lst2 {5 6 {7 {8 9}}}
lindex $lst1 2
lindex $lst2 2
lindex $lst2 2 2
lindex $lst2 2 2 1
lrange $lst1 0 2
lassign $lst1 a b c d
lrepeat 10 *
lreverse $lst1
set lst1 [list 1 2 3 4 5]
set lst2 [list a b c d e]
set lst3 [concat $lst1 $lst2]
set lst4 [list $lst1 $lst2]
lappend lst1 6 7 8 9
set lst5 [linsert $lst1 end 10]
set lst6 [linsert $lst1 0 0]
set lst7 [lreplace $lst1 2 3 0 0] 将2,3处的元素换成0,0
set lst7 [lreplace $lst1 2 3] 将2,3处的元素删掉
set lst1 [list 1 2 3 4 5 6 7 8 9 0]
lsort $lst1
set lst2 [list 1 2 3 3 5 5 0 0 10 100]
lsort $lst2
set lst3 [list "a" "b" "abc" "cca"]
lsort $lst3
lsort -indices $lst2 返回坐标
lsort -uniq $lst2 去除重复元素
lsort -stride 2 $lst2 两两组合排序
lsort -index end-1 $lst2 以倒数第二个排序
set d [dict creat a 1 b 2 c 3 e 5 d 4]
lsort -stride 2 $d 字典排序
2. 数组 array
set ArrayName(Index) list 数组创建
eg:
set yinfu(1) do;
set yinfu(2) re;
set yinfu(3) mi;
array set ArrayName {index1 list1 index2 list2} 数组创建
eg:
array set yinfu {1 do 2 re 3 mi 4 fa 5 sol 6 la 7 si}
parray yinfu 数组查看
运行结果:
yinfu(1) = do
yinfu(2) = re
yinfu(3) = mi
yinfu(4) = fa
yinfu(5) = sol
yinfu(6) = la
yinfu(7) = si
3.字典 dict (键key---值value)
dict set colours coluor1 red
set colours [dict create colour1 "red"]
dict get $colours colour1
dict keys $colours 得到键
dict values $colours 得到值
foreach {key value} [set colours] {
#set value [dict get $colours $item]
puts "$key -- $value"
} 遍历所有的键与值
dict set part1 part11 id 1
dict set part1 part11 name flower
dict set part1 part11 color red
dict set part1 part12 id 2
dict set part1 part12 name flower
dict set part1 part12 color black
dict get $part1 part11 color
dict get $part1 part12 color
eg:
set HyperWorks [dict create preprocess hypermesh post hyperview year 2022]
dict size $HyperWorks 查询字典大小
dict set HyperWorks solver1 optistruct
dict set HyperWorks solver2 RADIOSS
dict append HyperWorks CFD acuSolve 增添一项
dict unset HyperWorks CFD 真删掉一项
dict remove $HyperWorks slover1 假删掉一项
dict replace $HyperWorks year 2023 修改一项内容
%1.定义函数(输入为整数)
proc fac {n} {
if {$n == 0 | $n == 1} {
return 1
} else {
return [expr {$n * [fac [expr {$n-1}]]}]
}
}
%调用函数
fac 3
fac 2
fac 1
fac 0
%2.定义函数(输入为列表)
proc product {n} {
set product 1
foreach num $n {
set product [expr {$product * $num}]
}
return $product
}
%调用函数
set input [list 1 2 3 4]
product $input
%3.定义函数(输出为列表)
proc vproduct {v1 v2} {
set product [list]
foreach x $v1 y $v2 {
set inc [expr {$x * $y}]
lappend product $inc
}
return $product
}
%调用函数
set v1 [list 1 2 3 4]
set v2 [list 0.1 0.1 0.1 0.1]
vproduct $v1 $v2
#对话框性质
tk_messageBox -icon error
tk_messageBox -icon info
tk_messageBox -icon question
tk_messageBox -icon warning
#对话框标题
tk_messageBox -title "腾讯游戏"
#对话内容
tk_messageBox -message "欢迎来到王者荣耀"
#交互类型:
tk_messageBox -type ok
tk_messageBox -type okcancel
tk_messageBox -type retrycancel
tk_messageBox -type yesno
tk_messageBox -type yesnocancel
eg:
tk_messageBox -icon info -title "腾讯游戏" \
-message "欢迎来到王者荣耀" -type yesnocancel
tk_messageBox -icon question -title "智慧问答" \
-message "生存还是死亡" -type yesno
其实这一篇只是二次开发入门的一些基础知识,实际二次开发的内容远比这些内容复杂丰富,不过后面可以根据具体的二次开发小案例来深入学习,学东西的最好方式就是先正向学习然后再逆向学习,正逆结合,哈哈哈。