hypermesh二次开发tcl脚本
- 1、tcl读csv文件,得到list,再转成二维数组
- 2、tcl写csv文件
- 3、hypermesh tcl根据读入的节点坐标建节点, 再显示节点号
- 4、hypermesh tcl根据节点号建节点set
- 5、hypermesh tcl根据节点set读取节点号,再根据节点号读取节点坐标,再将节点坐标、节点号保存到csv文件中
- 6、修改csv文件,增加修改后的节点号,读csv文件,再根据修改前后的节点号,设置新的节点号
1、tcl读csv文件,得到list,再转成二维数组
#source read_csv.tcl
#for {set i 0} {$i<3} {incr i} {
# puts $i
#}
#read_csv::
set csvFile C:/Users/li/Documents/nodes.csv
set csv [open $csvFile]
set data [split [read $csv] '\n']
close $csv
#data 2 array aData::
set dataNum [llength $data]
incr dataNum -1
for {set i 0} {$i<$dataNum} {incr i} {
set datai [split [lindex $data $i] ',']
set dataiNum [llength $datai]
for {set j 0} {$j<$dataiNum} {incr j} {
set aData($i,$j) [lindex $datai $j]
#puts $aData($i,$j)
}
}
#parray aData #print array
2、tcl写csv文件
#write_csv::
set wrFile [open nodes2.csv w]
puts $wrFile $aData(0,3),[expr $aData(0,3)+10000]
puts $wrFile $aData(1,3),[expr $aData(1,3)+10000]
puts $wrFile 4,5
close $wrFile
3、hypermesh tcl根据读入的节点坐标建节点, 再显示节点号
*createnode $aData(0,0) $aData(0,1) $aData(0,2) 0 0 0
*createnode $aData(1,0) $aData(1,1) $aData(1,2) 0 0 0
*createmark nodes 1 "all"
*numbersmark nodes 1 1 #show nodes number
*numbersmark nodes 1 0 #hide nodes number
4、hypermesh tcl根据节点号建节点set
*createmark nodes 1 2 1
*entitysetcreate "boy_R_nodes" nodes 1
5、hypermesh tcl根据节点set读取节点号,再根据节点号读取节点坐标,再将节点坐标、节点号保存到csv文件中
set nodeId [hm_getvalue sets name=boy_R_nodes dataname=ids]
set nodeNum [llength $nodeId]
set wrFile [open nodes3.csv w]
for {set i 0} {$i<$nodeNum} {incr i} {
set nodeIdi [lindex $nodeId $i]
set x [hm_getvalue nodes id=$nodeIdi dataname=x]
set y [hm_getvalue nodes id=$nodeIdi dataname=y]
set z [hm_getvalue nodes id=$nodeIdi dataname=z]
puts $wrFile $x,$y,$z,$nodeIdi
}
close $wrFile
6、修改csv文件,增加修改后的节点号,读csv文件,再根据修改前后的节点号,设置新的节点号
读csv文件得到二维数组的代码同前
for {set i 0} {$i<2} {incr i} {
*createmark nodes 1 $aData($i,3)
*renumbersolverid nodes 1 $aData($i,4) 1 0 0 0 0 0
}