一般基于几何的网格是无法删除单元等对单元节点操作的,所以若想操作,需要先复制一个orphan mesh出来。
在Mesh模块 -> Mesh菜单栏 -> Create mesh part命令,复制一个出来,下图右边的所示,一般orphan mesh都是绿色显示的。
记录一下,rpy文件里,关于复制的命令
# copy
partBase = model.parts["Part-2"]
orphanMesh = partBase.PartFromMesh(name='Part-base-mesh-1', copySets=True)
现在就可以对它进行操作了,cae里的操作命令在这里:
选单元就可以实现对单元的删除,同样的,记录一下rpy里的python语句:
# delete element
e = p.elements
elements = e.getSequenceFromMask(mask=('[#1 ]', ), )
part.deleteElement(elements=elements)
乍一看比较乱,但是看多了就习惯了,练习多了,你就知道里面哪些语句是你需要的。这里主要用的函数是deleteElement(),注意一下这里传入的参数是单元的单元的sequence,有些函数是传入的是element对象,这点很容易搞混淆。
上次我们建立set的时候,传入的也是element序列sequence,所以,用这个sequenceFromLabels函数就好
partBase.Set(elements=elements.sequenceFromLabels(labels=labels), name="Set-Test")
主要的工具已经准备就绪了,再结合上次的内容,就可以实现删除多余单元的操作了,结果如下:
# encoding=utf-8
from abaqus import *
from abaqusConstants import *
import numpy as np
model = mdb.models["Model-1"]
partGear = model.parts["Part-1"]
partBase = model.parts["Part-2"]
# copy
orphanMesh = partBase.PartFromMesh(name='Part-base-mesh-copy', copySets=True)
elements = partBase.elements
nodes = partBase.nodes
labels, delLabels = [], []
cells = partGear.cells
for element in elements:
nodeIndex = element.connectivity
center = np.array([0.0, 0.0, 0.0])
for index in nodeIndex:
center += nodes[index].coordinates
center /= 8
findCell = cells.findAt((center,),printWarning=False)
if len(findCell):
labels.append(element.label)
else:
delLabels.append(element.label)
partBase.Set(elements=elements.sequenceFromLabels(labels=labels), name="Set-Test")
orphanMesh.deleteElement(elements=orphanMesh.elements.sequenceFromLabels(labels=delLabels)
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删