功能是快速压缩计算结果文件,在计算结果文件夹外生成一个保留塑性应变,应力,位移,减薄率。损伤值的metadb文件。
这样随时查看计算结果只需要打开metadb就行了,可以把计算结果文件夹里除了binout文件外的所有文件都删除,大大减少电脑的内存。
下面讲解下代码:
import os
import meta
from meta import guitk, utils
# 定义全局变量存储路径
selected_file_path = None
def get_parent_two_levels(file_path):
# 规范化路径(转换为绝对路径)
#abs_path = os.path.abspath(file_path)
# 两次调用 dirname
return os.path.dirname(os.path.dirname(file_path))
上面的代码是用来定义保存metadb文件的路径的,大家如果想在计算文件夹内生成metadb的话,(#两次调用 dirname)这里只需要调用一次就行
def on_folder_clicked(widget, event=None):
global selected_file_path
flag = 0
filter_1 = "Text files (*.txt)"
filter_2 = "PDF files (*.pdf)"
filter_3 = "d3plot files "
m = utils.SelectOpenFile(flag, filter_3)
if len(m) > 0:
print(m[0])
selected_file_path=m[0]
guitk.BCLineEditSetText(input_field, selected_file_path)
else:
print("No file selected")
# 将选择的路径显示在输入框中
这里的代码是用来打开文件夹选择我们的d3plot文件的,而且它只识别d3plot文件,防止你误操作浪费时间。
def on_ok_clicked(widget, event=None):
global selected_file_path
if selected_file_path:
print(f"选择的文件路径是: {selected_file_path}")
output_dir=get_parent_two_levels(selected_file_path)
print(output_dir)
#加载结果
utils.MetaCommand('displ append enable')
utils.MetaCommand('function append scalar enable')
utils.MetaCommand('function append vector enable')
utils.MetaCommand(f'read geom Dyna3d {selected_file_path}')
utils.MetaCommand(f'read dis Dyna3d {selected_file_path} all Displacements')
utils.MetaCommand(f'read onlyfun Dyna3d {selected_file_path} all Stresses,VonMises,MaxofInOutMid')
utils.MetaCommand('read onlyvec Dyna3d {selected_file_path} all Displacements')
utils.MetaCommand(f'read dis Dyna3d {selected_file_path} all Displacements')
utils.MetaCommand(f'read onlyfun Dyna3d {selected_file_path} all Stresses,PlasticStrain,MidSurface')
utils.MetaCommand('read onlyvec Dyna3d {selected_file_path} all Displacements')
utils.MetaCommand(f'read dis Dyna3d {selected_file_path} all Displacements')
utils.MetaCommand(f'read onlyfun Dyna3d {selected_file_path} all ExtraVariables,RelativeThinning(Current/Original)')
utils.MetaCommand(f'read onlyvec Dyna3d {selected_file_path} all Displacements')
utils.MetaCommand(f'write options MetaDB version 20.0.0')
utils.MetaCommand(f'write project "label" "{output_dir}/1.metadb"')
utils.MetaCommand(f'')
meta.guitk.BCDestroy(window)
else:
print("未选择文件")
这里就是读取计算自己想要的计算结果了,这里都是录制的session语言,大家可以自己录制一下,复 制粘贴替换掉我的就行。我这里读取了应力,塑性应变,减薄率,损伤值。
在这里大家可以录制自己的session语言,这个语言不像python这么难懂,看一看就能理解大概意思。
# 创建窗口
window = guitk.BCWindowCreate("选择计算结果文件路径", guitk.constants.BCOnExitDestroy)
grid = guitk.BCGridLayoutCreate(window)
# 创建第一行:输入框和文件夹按钮
input_field = guitk.BCLineEditCreate(window, "")
guitk.BCGridLayoutAddWidget(grid, input_field, 0, 0, guitk.constants.BCAlignLeft)
folder_button = guitk.BCPushButtonCreate(window, "选择文件", on_folder_clicked)
guitk.BCGridLayoutAddWidget(grid, folder_button, 0, 1,guitk.constants.BCAlignRight)
# 创建第二行:确认按钮
ok_button = guitk.BCPushButtonCreate(window, "确认", on_ok_clicked)
guitk.BCGridLayoutAddWidget(grid, ok_button, 1, 0,guitk.constants.BCAlignLeft)
# 显示窗口
guitk.BCShow(window)
这里就是我们的窗口的代码了。
其实这个脚本的python部分是我用DeepSeek写的,没想到吧。
当初写这个代码是因为,我要删除自己的计算结果,内存不够用了,删除结果前要保存有用的结果,就要要对结果压缩。100多个计算结果,每个点开去加载结果再保存成metadb简直要了我的狗命。