如何通过bpy.types获取具体的修饰符属性信息?

Posted

技术标签:

【中文标题】如何通过bpy.types获取具体的修饰符属性信息?【英文标题】:How to obtain specific modifier properties information through bpy.types? 【发布时间】:2019-08-05 18:29:44 【问题描述】:

例如我得到:

bpy.types.Modifier.bl_rna.properties['type'].enum_items[12]

(布尔修饰符)

布尔修改器有一个名为“对象”的属性,用于实际的布尔网格。 如何快速检查它是否确实获得了可用的“对象”属性(通过 bpy.types)?

我想通过它们的属性过滤修饰符,例如:

[modifier.identifier for modifier in bpy.types.Modifier.bl_rna.properties['type'].enum_items if modifier.object != NULL]

显然这行不通,只是为了让您更好地了解我想要做什么而添加它。

【问题讨论】:

您打算在什么情况下使用它。您是否正在检查应用于特定对象的修改器?因为仅针对类型检查对象属性没有任何意义。 【参考方案1】:

bpy.types 包含类定义。 bpy.data 包含用于定义搅拌机场景中对象的实例。 bpy.context 可以方便地访问多个兴趣点,而不是直接使用bpy.data,例如活动场景和对象以及选定和可见对象的列表。

作为一个类的定义,bpy.types只能告诉你每个类型可以包含哪些属性,可能是修改后的。例如,插件可以使用bpy.props 向现有数据类型添加属性,这是在bpy.types 中的类定义上完成的。

bpy.types.Modifier 的每个子类都有自己的属性,BooleanModifier 有一个对象属性,这是第二个将与修改器父网格的网格交互的对象。

要访问某项特定实例的数据,您需要在bpy.databpy.context 中找到相关数据。

例如,如果 Cube 具有将其网格与 Sphere 网格联合的布尔修饰符,您可以在 python console 中获得以下内容。

>>> bpy.data.objects['Cube'].modifiers['Boolean'].object
bpy.data.objects['Sphere']
>>> bpy.data.objects['Cube'].modifiers['Boolean'].operation
'UNION'

【讨论】:

谢谢sambler! “bpy.types 只能告诉你每种类型可以包含哪些属性”这正是我想知道的:它可以包含什么!【参考方案2】:

在另一个论坛上,我了解到 Python 函数 dir() 列出了实体的所有属性。

所以:

    for mods in orig_active.modifiers:
        for properties in dir(mods):
            if "__" not in properties:
                props=eval("type(mods."+str(properties)+")")
                if "Object" in str(props):
                    print(mods.name + "modifier got a property called 'object'.")

有点笨拙,但可以。

【讨论】:

以上是关于如何通过bpy.types获取具体的修饰符属性信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过访问修饰符过滤属性

面向对象中对象和类以及如何访问类中属性和方法

说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题?

表单修饰符自定义指令计算属性侦听器过滤器生命周期

表单修饰符自定义指令计算属性侦听器过滤器生命周期

面向对象3大特性:封装继承多态——封装(this 访问修饰符内部类)