【ABAQUS 的 python 脚本】Abaqus实用小插件开发:基于坐标创建节点集

文摘   2024-11-06 12:43   广西  

在结构分析中,基于坐标筛选节点并创建节点集是常见需求。通过指定坐标,可以方便地对特定位置的节点进行集中操作。本文分享一种方法,利用 Abaqus 插件功能,通过简单的界面输入坐标,实现自动筛选和节点集的创建。


插件功能概述

此插件通过三个主要脚本构成:

  • CreateNdSet_DB.py:负责创建图形界面。

  • CreateNdSet_plugin.py:将插件注册到 Abaqus 的 GUI 中。

  • createNodeSet.py:核心处理逻辑,用于筛选并创建节点集。

插件的功能是通过指定坐标值,自动筛选模型中对应坐标的节点,并将这些节点打包成一个集合,便于后续的操作。

图形界面定义:CreateNdSet_DB.py

界面脚本使用了 Abaqus 的 RSG Dialog Builder 来定义插件界面,包括标题、模型选择下拉菜单和坐标输入框。

  • RsgComboBox:让用户从模型中选择一个部件。

  • RsgTextField:用于输入节点的 X 和 Y 坐标。

当用户填写好信息后,界面将触发节点筛选并生成节点集。

代码内容:

from rsg.rsgGui import *
from abaqusConstants import INTEGER, FLOAT
dialogBox = RsgDialog(title='Title', kernelModule='createNodeSet', kernelFunction='get_CoordInfo', includeApplyBtn=False, includeSeparator=True, okBtnText='OK', applyBtnText='Apply', execDir=thisDir)
RsgLabel(p='DialogBox', text='Create Set by Coords', useBoldFont=True)
RsgComboBox(name='ComboBox_1', p='DialogBox', text='Part:', keyword='partName', default='', comboType='MDB', repository='parts', rootText='Model:', rootKeyword='modelName', layout='HORIZONTAL')
RsgHorizontalFrame(name='HFrame_1', p='DialogBox', layout='0', pl=0, pr=0, pt=0, pb=0)
RsgTextField(p='HFrame_1', fieldType='Float', ncols=12, labelText='X Coord:', keyword='ndX', default='')
RsgTextField(p='HFrame_1', fieldType='Float', ncols=12, labelText='Y Coord:', keyword='ndY', default='')
dialogBox.show()

插件注册:CreateNdSet_plugin.py

为了在 Abaqus 界面中调用该插件,需要将其注册到工具集中。此脚本定义了插件的菜单名称、图标和触发事件。

代码内容如下:

from abaqusGui import getAFXApp, Activator, AFXMode
from abaqusConstants import ALL
import os
thisPath = os.path.abspath(__file__)
thisDir = os.path.dirname(thisPath)

toolset = getAFXApp().getAFXMainWindow().getPluginToolset()
toolset.registerGuiMenuButton(
buttonText='it_set_nodeset',
object=Activator(os.path.join(thisDir, 'CreateNdSet_DB.py')),
kernelInitString='import createNodeSet',
messageId=AFXMode.ID_ACTIVATE,
icon=None,
applicableModules=ALL,
version='0.0.1',
author='it_tumulao',
description='A plugin to create node set. ',
helpUrl='N/A'
)

核心功能实现:createNodeSet.py

此脚本的 get_CoordInfo 函数包含插件的主要逻辑,通过用户指定的坐标值筛选节点并创建集合:

  • check_node 函数:判断节点的坐标是否在用户输入的范围内,允许一定误差。

  • get_CoordInfo 函数:遍历模型中所有节点,查找符合条件的节点并创建节点集。

代码内容如下:

from abaqusConstants import *
from abaqus import mdb, session
import odb, odbAccess, xyPlot, visualization

def get_CoordInfo(modelName,partName,ndX,ndY,set_name = "myset-1"):
print("\n")
print("**************************** ")
print("Node Set Creator by It_tumulao")
print(modelName,partName)
def check_node(x,y):
if abs(x - ndX) < 1e-6 and abs(y - ndY)<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 = nd.coordinates[:2]
# print(x,y)
if check_node(x,y):
nd_sets.append(i + 1)
print(nd_sets)
ins_key = model.rootAssembly.instances.keys()[0]
print( " ins key is ", ins_key)
mask = model.rootAssembly.instances[ins_key].nodes.sequenceFromLabels(nd_sets)
model.rootAssembly.Set(name=set_name, nodes=mask)
print("done !!!")
print("**************************** ")

插件使用方法

  1. 将上述代码复制写入对应的文件里面,并按照视频给出的文件目录放置文件。

  2. 打开插件界面并选择模型中的部件。

  3. 输入目标节点的 X 和 Y 坐标。

  4. 点击 OK,插件将自动查找符合条件的节点,并创建节点集。

视频演示如下,视频先用前面文章记录的脚本执行了矩形板的建模,再演示本文插件的使用方法:

总结

该方法在 Abaqus 中提供了一个便捷的节点筛选工具,通过简单的坐标输入实现节点集的创建,减少了手动筛选的繁琐步骤。

推荐阅读


挨踢的土木佬
一名学习编程的土木佬,计算固体力学,以第一/通讯作者身份在IJNME、IJSS、力学学报、振动工程学报等权威期刊发表论文若干。热衷分享Python编程、数据处理和数值分析(含有限元)新知,不定期更新文章与笔记。
 最新文章