如何像其他Abaqus Python对象一样在Abaqus Python中寻址/重用ReferencePoints



在编写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], ))

##############

还有更好的方法吗?

最新更新