基于Tcl命令的HyperView截图

准备工作

Tcl/Tk 命令可以实现 HyperWorks 的中更底层的操作和其他高级功能。应当注意在 HyperMesh 中不支持 Tcl 命令,必须在 HyperMesh Desktop 或 HyperWorks 中使用。不过 HyperView 似乎就直接是在 HyperWorks 环境中打开了。

通过菜单栏 View - Tcl Console 即可打开 Tcl 命令行窗口。

以下内容主要基于 HperWorks 2020 版本执行,应当能够适用于多数版本。但在 2023 以及更新的版本中,官方引入了 Python API ,可能会是一个更方便的方法。

高分辨率截图

直接基于 GUI 界面中的截图或导出按钮获得的截图通常难以得到实现高分辨率图片。基于以下语句即可快捷获得所需质量图片,这也是使用 Tcl 命令的一个简单命令。其中指定了图片的长 (3200) 宽 (2400) 和 jgp 质量 (100%) 。

Tcl 复制代码
hwi GetSessionHandle sess;
sess CaptureScreenToSize jpeg "E:\\MyHiResPicture.jpg" 3200 2400 100;

自动化模态截图

首先给出代码。

Tcl 复制代码
set output_directory "E:/HyperView_Screenshots"
set base_filename "Mode_"
set file_format "jpg"
set start_mode 1
set end_mode 10
set image_width 3200
set image_height 2400
set image_quality 100

if {![file isdirectory $output_directory]} {
    puts "directory doesn't exist, it is created: $output_directory"
    file mkdir $output_directory
}

hwi OpenStack
hwi GetSessionHandle sess
sess GetProjectHandle proj
proj GetPageHandle page 1
page GetWindowHandle window 1
window GetClientHandle client
client GetModelHandle model 1
model GetResultCtrlHandle result
for {set i $start_mode} {$i <= $end_mode} {incr i} {
    result SetCurrentSimulation $i
    page Draw
    set full_path "${output_directory}/${base_filename}${i}.${file_format}"
    sess CaptureScreenToSize $file_format $full_path $image_width $image_height $image_quality
}
hwi CloseStack

其中需要指定的参数有:

  • output_directory: 图片保存路径。可以使用正斜杠 / 作为路径分隔符,或需要双反斜杠 \\ 转义字符
  • base_filename: 图片文件名前缀,保存时会附上模态阶数
  • file_format: 图片格式, jpegpng
  • start_mode / end_mode: 所需模态阶次范围
  • image_width / image_height: 图片像素宽高尺寸
  • image_quality: 当格式为 jpeg 时的图片压缩质量(%)。

运行环境

除了直接复制后在命令行窗口执行外,这样较长的指令也可以存在 tcl 文件中,在菜单栏 File -> Run -> Tcl/Tk Script 中选择对应文件执行脚本。

为了达到更好的截图效果,可以先在导入结果文件后调整好各类视角、颜色等模式后开启截图。

还有一个小技巧,我之前打开 Tcl 命令行窗口时,右侧栏似乎被最小化没被显示出来。在输入命令时右侧栏能根据输入的对象名称显示支持的函数方法,有助于更好了解参数格式、避免不支持的调用。这也能更好避免基于 AI 的使用中遇到的各种无中生有 (^^)

代码解析

注意通过代码指定了仿真步 (Simulation) 后,GUI界面中并不刷新显示,必须调用 page Draw 来更新界面。

参考链接

相关命令的现成说明在网络上似乎很少,因此使用 gpt 等工具所得到的回答基本不能使用,必须参照官方文档摸索使用。