在编写Abaqus Python脚本时,我经常将对象存储在myAssembly
等变量中,以缩短代码并在以后可靠地处理这些对象。例如:
myAssembly = mdb.models['Model-1'].rootAssembly
但是,myAssembly.ReferencePoint(point=(0.5, 0.5, 0.0))
的返回值是FeatureObject,没有"ReferencePoint"(请参阅Abaqus 2016 Scripting Manual 20.1.58(。
因此代码:
myReferencePoint = myAssembly.ReferencePoint(point=(0.5, 0.5, 0.0))
mySetMaster = myAssembly.Set(
name='m_Set-1',
referencePoints=(myReferencePoint, ))
结果为"TypeError:referencePoints[0];找到Feature,应为元组"。
记录的日记账使用(通过使用myAssembly
缩短(
myAssembly.ReferencePoint(point=(0.5, 0.5, 0.0))
myAssembly.Set(name='m_Set-1', referencePoints=(
myAssembly.referencePoints[4], ))
问题是:如何通过使用变量(例如myReferencePoint
(而不是可能更改数字(例如4
(来寻址ReferencePoint?
这与@JulianBauer之前的回答类似。由于参考点是装配特征,因此可以通过访问
myReferencePoint = myAssembly.features[rpName]
mySetMaster = myAssembly.Set(
name='m_Set-1',
referencePoints=(myAssembly.referencePoints[myReferencePoint.id], ))
但是,这确实需要事先知道参考点的名称。
可以使用该方法myAssembly.referencePoints.findAt(myRefPointCoord)
要执行以下解决方法:
myRefPointCoord = (0.5, 0.5, 0.0)
myAssembly.ReferencePoint(point=myRefPointCoord)
mySetMaster = myAssembly.Set(
name='m_Set-1',
referencePoints=(myAssembly.referencePoints.findAt(myRefPointCoord), ))
缺点:如果在同一位置有多个参考点怎么办?这种情况很常见。
##############
如果同一位置有多个参考点:
灵感来自Subramani Anbazhagan的回答我建议获取构造函数返回的参考点的特征对象,并使用该特征对象的id
:
myRPFeat = myAssembly.ReferencePoint(point=(0.5, 0.5, 0.0))
mySetMaster = myAssembly.Set(
name='m_Set-1',
referencePoints=(myAssembly.referencePoints[myRPFeat.id], ))
##############
还有更好的方法吗?