更新:
最近工作量比较大,逐渐意识到之前用.py文件进行宏录制的局限性,对这个程序进行了一部分改进,使它能够更方便的调用。之前的程序是将拆分间距和model名、part名确定的,每次调用都要更改里面的数据,我参照了知乎一位大佬的方法(链接https://zhuanlan.zhihu.com/p/84749135),做了如下改进:
from abaqus import * from abaqusConstants import * from caeModules import * viewportName = session.currentViewportName#获取当前模型名 cobject=session.viewports[viewportName].displayedObject#cobject实际上是一个字典,里面包括当前模型的全部信息 modelNameDE=cobject.modelName#利用modelname函数将cobject中的模型名提取出来 # partNameDE=cobject.name #应用part的方法和model方法类似 # print(modelNameDE) # print(partNameDE) modelname=getInput('Are U sure that it is this model',modelNameDE) number=getInput('what is the number of OCA','0.05')#getinput函数弹出一个对话框,给对话框提供一个默认值,可以简化操作 from driverUtils import executeOnCaeStartup p = mdb.models[modelNameDE].parts['pad'] f, e, d = p.faces, p.edges, p.datums t = p.MakeSketchTransform(sketchPlane=f[0], sketchPlaneSide=SIDE1, origin=( -124.940785, -0.053036, 0.0)) s = mdb.models[modelNameDE].ConstrainedSketch(name='__profile__', sheetSize=588.26, gridSpacing=14.7, transform=t) g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraints s.setPrimaryObject(option=SUPERIMPOSE) p = mdb.models[modelNameDE].parts['pad'] p.projectReferencesOntoSketch(sketch=s, filter=COPLANAR_EDGES) session.viewports['Viewport: 1'].view.setValues(nearPlane=426.19, farPlane=750.334, width=2.07316, height=0.843045, cameraPosition=(20.0515, -0.17324, 588.262), cameraTarget=(20.0515, -0.17324, 0)) s.offset(distance=0.03, objectList=(g[5], g[4]), side=LEFT) s.offset(distance=0.055, objectList=(g[5], g[4]), side=LEFT) s.offset(distance=0.055+float(number), objectList=(g[5], g[4]), side=LEFT) s.offset(distance=0.077+float(number), objectList=(g[5], g[4]), side=LEFT) s.offset(distance=0.09+float(number), objectList=(g[5], g[4]), side=LEFT) s.offset(distance=0.09+float(number)+float(number), objectList=(g[5], g[4]), side=LEFT) s.offset(distance=0.12+float(number)+float(number), objectList=(g[5], g[4]), side=LEFT) s.offset(distance=0.12+float(number)+float(number)+float(number), objectList=(g[5], g[4]), side=LEFT) p = mdb.models[modelNameDE].parts['pad'] f = p.faces pickedFaces = f.getSequenceFromMask(mask=('[#1 ]', ), ) e1, d2 = p.edges, p.datums p.PartitionFaceBySketch(faces=pickedFaces, sketch=s) s.unsetPrimaryObject()
----------------------分割线-----------------------------
在abaqus实际使用中,经常需要大量的重复操作,比如将abaqus中的模型拆分成十几个区域,此时在cae中操作很复杂,可以通过python二次开发进行批量操作。
rom abaqus import * from abaqusConstants import * from caeModules import * from driverUtils import executeOnCaeStartup #THERE IS A TEMP f, e, d = p.faces, p.edges, p.datums t = p.MakeSketchTransform(sketchPlane=f[0], sketchPlaneSide=SIDE1, origin=( -124.940785, -0.053036, 0.0)) s = mdb.models[''].ConstrainedSketch(name='__profile__', sheetSize=588.26, gridSpacing=14.7, transform=t) g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraints s.setPrimaryObject(option=SUPERIMPOSE) ##THERE IS A TEMP p.projectReferencesOntoSketch(sketch=s, filter=COPLANAR_EDGES) s.offset(distance=0.025, objectList=(g[4], g[3]), side=LEFT) s.offset(distance=0.075, objectList=(g[4], g[3]), side=LEFT) s.offset(distance=0.110, objectList=(g[4], g[3]), side=LEFT) s.offset(distance=0.160, objectList=(g[4], g[3]), side=LEFT) s.offset(distance=0.190, objectList=(g[4], g[3]), side=LEFT) s.offset(distance=0.240, objectList=(g[4], g[3]), side=LEFT) p = mdb.models['oca_50um_30mm'].parts['pad'] f = p.faces pickedFaces = f.getSequenceFromMask(mask=('[#1 ]', ), ) e1, d2 = p.edges, p.datums p.PartitionFaceBySketch(faces=pickedFaces, sketch=s) s.unsetPrimaryObject()
黑体为需要修改的语句
上图是一个拆分的简单例子,核心思路是:利用草图拆分功能,将底边向上偏置,进行模型的划分。python的二次开发实际上就是批量操作,具体操作是,首先通过abaqus.py文件,获取模型的底边数组为g[3],g[4],然后进行偏置,这样做的优点是可以一键生成拆分,而且修改方便。不过这个方法只适用于简单模型,复杂模型的拆分并不适用。