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表面的法线。
我正在尝试获取曲面中每个面的法线(编辑:曲面是从实体中提取的,而不是 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表面的法线。