Abaqus 获取人脸对象

Abaqus get face object

我正在尝试获取曲面中每个面的法线(编辑:曲面是从实体中提取的,而不是 shell)。我似乎无法获得面部物体。根据 scripting reference guide 这应该是语法:

mdb.models[name].rootAssembly.instances[name].surfaces[name].faces[i]

我试过这个:

femur_instance.surfaces['IMPLANT_SHAFT'].faces[0]

但是当尝试使用 pointOn[1] 属性获取正常时,它给了我一个属性错误。当我查看属性时,我得到了这个:

['__class__', '__copy__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getstate__', '__hash__', '__init__', '__lt__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_addToCache', '_cache', '_counter', '_id', '_p', '_scdId', 'getId', 'getText', 'name']

返回对象的类型为:'symbolicConstant'

我做错了什么?

编辑:femur_instance 被定义为,odb.rootAssembly.instances['FEMUR_SHAFT_1'] 导致错误,请参阅答案。

您在 post 和评论中指的是两个不同的对象。一个是mdb中的Face对象,一个是odb中的OdbSet对象。尽管它们的名称相似,但它们的含义、属性或方法并不相同。这是您提到的错误消息的来源。

例如,在您原来的 post 中,您引用了 mdb 中的几何面对象。例如:

`f = mdb.rootAssembly.instances[name].surfaces[name].faces[N]` 

其中 N 引用 faces 数组中的特定 Face 对象,我们将其分配给变量 f。现在,f 有一些 "members" 或属性。其中之一是f.pointOn。请参阅下面的使用方法。

但是,在您的评论中,您提到了 OdbSet 对象。例如:

`g = odb.rootAssembly.instances[name].surfaces[name].faces[N]`

在这种情况下,faces 是一个符号常量元组,用于指定几何面上的元素面。看起来您正在尝试使用 g,但实际上您应该使用 mdb Face 对象 f.


使用 mdb 面对象:如果您的零件是实体(使用连续元素划分网格,例如 2D 中的 CPS4 或 3D 中的 C3D8),则:

((x,y,z),) = f.pointOn

pointOn 成员是浮点数元组的元组。里面其实只有一个内元组,里面包含的是人脸上的一个点的坐标。

如果您的零件是 shell(使用 shell 元素(例如 S4)进行网格划分),那么您将得到:

((x,y,z),(a,b,c)) = f.pointOn

又是浮点数元组的元组。有两个内部元组。第一个包含面上点的坐标,第二个包含全局坐标系中面的法线分量。

不过我感觉你的部分是实心的,所以这个技巧不会return表面的法线。