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

How to obtain specific modifier properties information through bpy.types?

例如我得到:

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

(布尔修饰符)

布尔修饰符有一个名为 "object" 的 属性 用于实际的布尔网格。 我如何才能快速检查它是否真的获得了可用的 "object" 属性(通过 bpy.types)?

我想按类似的属性过滤修饰符:

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

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

bpy.types contains the class definitions. bpy.data contains the instances used to define objects in your blender scene. bpy.context 可以轻松访问多个兴趣点,而不是直接使用 bpy.data,例如活动场景和对象以及选定和可见对象的列表。

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

中的 class 定义中完成的

bpy.types.Modifier has its own properties, the BooleanModifier 的每个子 class 都有一个对象 属性,这是将与修改器父网格的网格交互的第二个对象。

要访问项目特定实例的数据,您需要在 bpy.databpy.context.

中找到相关数据

例如,如果一个立方体有一个将其网格与球体网格结合的布尔修改器,您可以在 python console.

中获得以下内容
>>> bpy.data.objects['Cube'].modifiers['Boolean'].object
bpy.data.objects['Sphere']
>>> bpy.data.objects['Cube'].modifiers['Boolean'].operation
'UNION'

在另一个论坛上,我了解到 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'.")

有点笨拙,但很管用。