例如,我得到了:
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]
显然,这是不起作用的,只是为您更好地了解我正在尝试的东西。
bpy.types
包含类定义。bpy.data
包含用于在搅拌机场景中定义对象的实例。bpy.context
可以轻松访问几个兴趣点,而不是直接使用bpy.data
,例如活动场景和对象以及所选对象和可见对象的列表。
作为类定义,bpy.types
只能告诉您每种类型可以包含哪些属性,哪些可能是在修改后。例如,插件可以使用bpy.props
将属性添加到现有数据类型中,这是在bpy.types
中的类定义上完成的。
bpy.types.Modifier
的每个子类都有其自己的属性,BooleanModifier
具有对象属性,这是第二个将与修饰符的网格交互的对象。
要访问项目的特定实例数据,您需要在bpy.data
或bpy.context
中找到相关数据。
例如,如果一个立方体有一个布尔修饰符,该修饰符与球体网眼网格,则可以在Python控制台中获得以下内容。
>>> bpy.data.objects['Cube'].modifiers['Boolean'].object
bpy.data.objects['Sphere']
>>> bpy.data.objects['Cube'].modifiers['Boolean'].operation
'UNION'
在另一个论坛中,我意识到python函数 dir()
列出了实体的所有属性。
so:
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'.")
有点笨拙,但有效。