首页/文章/ 详情

ANSA中如何自编脚本实现材料快速赋值

1年前浏览1343
大家好,我是团长。

此前的文章介绍过ANSA的API,介绍过ANSA中的Python语言基础,也介绍了如何使用Script Editor进行脚本调试,如何用ANSA调用自编脚本。。。如此我们便已经基本具备了利用ANSA进行二次开发的能力了。

基于此,我们来牛刀小试。用脚本的方式来实现材料定义。


此处,我想借用朋友的一篇文章来演示。

原文【材料属性赋予插件】
作者【渝之南】
公 众号【ANSA二次开发技术】

以下正文



【背景】首先,大家是否有过这样的感受,例如在做碰撞、白车身强度等分析时,我们要对整个模型进行材料赋值时,面临几百个Property,得挨个点击鼠标,每个Property分配特定的材料ID。

那么有没有办法能够一键完成上面的操作,解放双手呢?

答案肯定是有的。
下面就为大家展示一下。

首先,先重点介绍下所需要用到的3个函数:

【2】、ansa.base.CollectEntities(deck, containers, search_types, recursive, filter_visible, prop_from_entities, mat_from_entities, model_browser_filter, no_expand_types)

这个函数相当重要,在脚本开发中会用得较多,它相当于一个收集器,将我们需要的收集的如prop、node、element等放入一个列表中,接下来就可以用for循环遍历来对该列表中的每一个元素进行同样的操作了。

一般只需要设置前3个参数,deck是第一个参数,可将deck设置成当面的模块,如LS-DYNA模块下则为constants.LSDYNA,ABAQUS模块下则为constants.ABAQUS,以此类推;第2个一般设置为None;第3个设置我们需要收集的数据类型,如,LSDYNA模块下收集单元element则为ELEMENT_SHELL(可以用对应的info命令查看相关类型的指定关键字),其余的参数可以自行查阅并探索其中的用法哦。

现在我们拿收集单元示范下,先编辑以下代码并保存为【xxxxx.py】文件,然后按图1所示通过Load Script导入刚刚创建的py文件,可以看到图3所示按钮,单击收集单元,此时界面左下角显示图4信息。根据代码,第1次打印的是一个列表,for循环后面是打印的列表的每个元素。











import ansafrom ansa import basefrom ansa import constants
@ansa.session.defbutton("测试", "收集单元")def test():    elems = base.CollectEntities(constants.LSDYNA, None, 'ELEMENT_SHELL')    print(elems)    for elem in elems:        print(elem)

图1

图2

图3

【2】、ansa.base.GetEntityCardValues(deck, entity, fields)

第1个参数同上一个函数,示例中我们暂设为constants.LSDYNA,第2个参数设置为elem(这里为一个变量),第3个参数设置我们需要获得的数据(为1个元祖)。

现在我们要获得每个单元所在的PID,如图4(一个prop的所有单元应该都是有同一个PID号,此例子应该都为20000008),代码如下:












import ansafrom ansa import basefrom ansa import constants

@ansa.session.defbutton("测试", "获取PID")def test():    elems = base.CollectEntities(constants.LSDYNA, None, 'ELEMENT_SHELL')    for elem in elems:        val = base.GetEntityCardValues(constants.LSDYNA, elem, ('PID',))        print(val.get('PID'))

 

图4

打印出的信息如下图:
图5

【3】、ansa.base.SetEntityCardValues(deck, entity, fields, items, debug)用法和第2个函数类似,前两个参数和第二个一样,第3个参数为一个字典形式的数据,用于更新数据,现在我们将上面所有单元的PID更改为10000,代码如下:











import ansafrom ansa import basefrom ansa import constants

@ansa.session.defbutton("测试", "修改PID")def test():    elems = base.CollectEntities(constants.LSDYNA, None, 'ELEMENT_SHELL')    for elem in elems:        base.SetEntityCardValues(constants.LSDYNA, elem, {'PID': 10000})

更新后的效果如下图所示:
图6


介绍完以上3个函数,可以直接上今天的主角了,废话不多说了,上代码吧,LS-DYNA模板下更新材料属性。























































import ansafrom ansa import basefrom ansa import constants
@ansa.session.defbutton("脚本", "更新材料属性")def auto_update_mat():    """    更新材料属性    """    sets = ['SECTION_SHELL', 'SECTION_SOLID']    props = base.CollectEntities(constants.LSDYNA, None, sets)    # 获取每个part的名称    for prop in props:        val = base.GetEntityCardValues(constants.LSDYNA, prop, ('Name',))        prop_name = val.get('Name')    # 更新材料部分        if prop_name.find('DC01') > -1:            mid = 10001         #DC01材料所对应的材料ID号        elif prop_name.find('DC03') > -1:            mid = 10002        elif prop_name.find('DC04') > -1:            mid = 10003        elif prop_name.find('DC06') > -1:            mid = 10004        elif prop_name.find('B250P1') > -1:            mid = 10005        elif prop_name.find('Patch') > -1:            mid = 10006        elif prop_name.find('Spot') > -1:            mid = 10007        else:            mid = 10001        base.SetEntityCardValues(constants.LSDYNA, prop, {'MID': mid})
   # 更新属性部分        if prop_name.find('T0070') > -1:            pid = 1001       #0.7mm属性所对应的属性ID号elif prop_name.find('T0080') > -1:            pid = 1002        elif prop_name.find('T0100') > -1:            pid = 1003        elif prop_name.find('T0120') > -1:            pid = 1004        elif prop_name.find('T0140') > -1:            pid = 1005        elif prop_name.find('T0150') > -1:            pid = 1006        elif prop_name.find('Patch') > -1:            pid = 1007        elif prop_name.find('Spot') > -1:            pid = 1100        else:            pid = 1001        base.SetEntityCardValues(constants.LSDYNA, prop, {'SECID': pid})

通过如上的代码,我们便可以根据零件的PROPERTY名称,匹配相应的材料属性卡片,实现零件的材料赋值。

以上就是本期的全部内容了,谢谢大家!
来源:CAEer
LS-DYNA碰撞二次开发ANSA材料
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-27
最近编辑:1年前
团长
硕士 | 白车身结构设... 专注ANSA使用技巧-微信公众号『C...
获赞 115粉丝 972文章 141课程 6
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈