Abaqus获得面部对象

时间:2018-04-04 22:43:29

标签: python abaqus

我试图弄清楚表面中每个面的法线(编辑:表面是从实体中提取的,而不是从壳中提取的)。我似乎无法获得面部对象。根据{{​​3}},这应该是语法:

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'],请参阅答案。

1 个答案:

答案 0 :(得分:0)

您指的是帖子和评论中的两个不同对象。一个是mdb中的Face对象,另一个是odb中的OdbSet对象。虽然它们的名称相似,但它们没有相同的含义,属性或方法。这是您提到的错误消息的来源。

例如,在原始帖子中,您正在引用mdb中的几何Face对象。例如:

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

其中N引用faces数组中的特定Face对象,我们将其分配给变量f。现在,f有一些“成员”或属性。其中一个是f.pointOn。请参阅下面的如何使用。

但是,在您的注释中,您将引用OdbSet对象。例如:

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

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

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

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

pointOn成员是浮点元组的元组。实际上只有一个内部元组,它包含面上一个点的坐标。

如果你的部分是一个shell(使用诸如S4之类的shell元素进行网格划分),那么你将获得:

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

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

我觉得你的部分是坚固的,所以这种技术不会恢复表面的法线。