python - Abaqus 获取人脸对象

标签 python abaqus

我正在尝试获取曲面中每个面的法线(编辑:曲面是从实体中提取的,而不是从壳中提取的)。我似乎无法获得面部物体。根据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'] 导致错误,请参阅答案。

最佳答案

您在帖子和评论中指的是两个不同的对象。一个是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 面对象:如果您的零件是实体(使用 2D 中的 CPS4 或 3D 中的 C3D8 等连续元素划分网格),则:

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

pointOn 成员是 float 元组的元组。实际上只有一个内元组,它包含了一个点在脸上的坐标。

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

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

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

不过,我感觉你的部分是实体的,所以这种技术不会使表面恢复正常。

关于python - Abaqus 获取人脸对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49661543/

相关文章:

python - 从 python 启动 Abaqus 作业

python - 合并 reportlab 表中的列

python - 如何在 python 中处理字典的多个键?

python - FK select 的显示选项 - Django Rest Framework

python - 当作业不收敛时,Abaqus 提前终止 python 脚本

abaqus - 如何从客户端释放挂起的许可证?

python - python Abaqus 内存不足

python - 通过从现有列中过滤来创建新变量

python - 提供与 python 的 MySQL-to-Sqlite 类型兼容性

python - abaqus python,为什么提取的位移值不同?