随着有限元分析软件Abaqus在工程领域的广泛应用,提高建模效率成为了许多工程师关注的重点。本公众号曾介绍过一款基于节点坐标创建节点集合的小插件,在此基础上,我对原有代码进行了优化和功能扩展,进一步提升了用户体验和工作效率。本文将详细介绍这款改进后的插件,包括其核心逻辑、用户界面。通过这款插件,用户可以更便捷地根据节点坐标创建节点集合,从而简化建模过程。
1.插件概述
本插件利用Python脚本与Abaqus的API接口进行交互,实现了基于节点坐标自动创建节点集合的功能。整个插件由三个主要部分组成:
核心处理逻辑:位于
myKernel.py
文件中,负责处理节点数据并创建节点集合。用户界面:由
nodeSetCreatorDB.py
定义,提供了直观易用的图形界面。插件注册:通过
nodeSetCreator_plugin.py
将插件集成到Abaqus环境中。
完善后的界面如下👇:
2.核心逻辑解析
myKernel.py
文件中定义了一个名为 CreateNdSet
的函数,该函数定义如下:
def CreateNdSet(modelName,partName,ndX,ndY,ndZ,SetName):
print("**************************** ")
print("Node Set Creator by It_tumulao")
print(modelName,partName,ndX,ndY)
def check_node(x,y,z):
if abs(x - ndX) < 1e-6 and abs(y - ndY)<1e-6 and abs(z - ndZ)<1e-6:
return True
return False
model = mdb.models[modelName]
part = model.parts[partName]
nodes = part.nodes
nd_sets = []
for i, nd in enumerate(nodes):
x, y,z = nd.coordinates[:3]
# print(x,y)
if check_node(x,y,z):
nd_sets.append(i + 1)
print(nd_sets)
ins_key = model.rootAssembly.instances.keys()[0]
print( "ins key used : ", ins_key)
mask = model.rootAssembly.instances[ins_key].nodes.sequenceFromLabels(nd_sets)
model.rootAssembly.Set(name=SetName, nodes=mask)
print("done !!!")
print("**************************** ")
该函数接收如下参数:
modelName
:模型名称。partName
:部件名称。ndX
,ndY
,ndZ
:目标节点的X、Y、Z坐标。SetName
:要创建的节点集合名称。
函数首先打印一些基本的信息,然后定义了一个辅助函数 check_node
,用于判断节点坐标是否与给定坐标匹配。接着,函数遍历指定部件中的所有节点,找出符合条件的节点,并将它们添加到一个列表中。最后,使用这些节点在装配体中创建一个节点集合。
3.用户界面设计
nodeSetCreatorDB.py
文件定义了一个简单的用户界面,包括以下几个部分:
模型选择:允许用户从当前模型中选择一个部件。
坐标输入:用户可以输入目标节点的X、Y、Z坐标。
集合名称:用户可以为新创建的节点集合命名。
通过这个界面,用户可以轻松地配置所需参数,点击“OK”按钮后,插件会调用 CreateNdSet
函数执行节点集合创建操作。
4.插件注册与使用
nodeSetCreator_plugin.py
负责将插件注册到Abaqus环境中。它通过调用 registerGuiMenuButton
方法,在Abaqus的工具栏中添加一个按钮,用户点击该按钮即可启动节点集合创建工具。同时,该脚本还指定了当插件被激活时需要导入的核心逻辑模块 myKernel
。需要注意的是:所输入的节点坐标,需要网格节点中确实存在的才可创建对应节点集。
演示视频如下:
5.结语
通过这小插件,我们可以更加高效地完成节点集合的创建工作,从而节省时间,提高工作效率。也可进一步扩展插件的功能,例如批量创建节点集合等。感兴趣的朋友可到公众号后台发送ABAQUS节点集创建插件获取该插件。
推荐阅读