首页/文章/ 详情

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

1年前浏览1202
大家好,我是团长。
此前的文章介绍过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...
          获赞 111粉丝 902文章 130课程 6
          点赞
          收藏
          未登录
          还没有评论
          课程
          培训
          服务
          行家
          VIP会员 学习 福利任务 兑换礼品
          下载APP
          联系我们
          帮助与反馈