如何通过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.data
或bpy.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获取具体的修饰符属性信息?的主要内容,如果未能解决你的问题,请参考以下文章