功能是快速压缩计算结果文件,在计算结果文件夹外生成一个保留塑性应变,应力,位移,减薄率。损伤值的metadb文件。
这样随时查看计算结果只需要打开metadb就行了,可以把计算结果文件夹里除了binout文件外的所有文件都删除,大大减少电脑的内存。
下面讲解下代码:
import osimport metafrom meta import guitk, utils# 定义全局变量存储路径selected_file_path = Nonedef get_parent_two_levels(file_path):# 规范化路径(转换为绝对路径)#abs_path = os.path.abspath(file_path)# 两次调用 dirnamereturn os.path.dirname(os.path.dirname(file_path))
上面的代码是用来定义保存metadb文件的路径的,大家如果想在计算文件夹内生成metadb的话,(#两次调用 dirname)这里只需要调用一次就行
def on_folder_clicked(widget, event=None):global selected_file_pathflag = 0filter_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_pathif 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简直要了我的狗命。