Como posso imprimir a string de um parâmetro de uma propriedade?
Digamos que eu tenha esta propriedade personalizada fu3dm_model_gender: bpy.props.EnumProperty(name="Gender", description="Choose model's gender", items= [('OP1', "Male", ""), ('OP2', "Female", "")], default='OP1')e desejo imprimir a string do parâmetro name. Como posso fazer isso?
ATUALIZAR
Na verdade, minha propriedade faz parte de uma operadora. No exemplo a seguir, gostaria de obter a string do nameparâmetro e exibi-la onde os três Xs (XXX) são:
class fu3dm_WM_OT_Model_Prefs_Operator(bpy.types.Operator):
bl_idname = "wm.fu3dm_model_prefs"
bl_label = "Model Preferences"
bl_description = "..."
fu3dm_model_gender : bpy.props.EnumProperty(name="Gender", description="Choose model's gender", items= [('OP1', "Male", ""), ('OP2', "Female", "")], default='OP1')
def invoke(self, context, event):
return context.window_manager.invoke_props_dialog(self)
bpy.ops.wm.fu3dm_model_prefs('INVOKE_DEFAULT')
def draw(self, context):
layout = self.layout
# BODY PREFS BOX - START
box = layout.box()
col = box.column()
row = col.split()
row.label(text=XXX)
row.prop(self, "fu3dm_model_gender", text="")
# BODY PREFS BOX - END
def execute(self, context):
pass
return {"FINISHED"}
Respostas
sim. Depois de registrado, você pode usar bl_rna.propertiespara acessar o nome, seu tipo, os itens, a descrição etc ... Sugiro usar o console Python para testar:
>>> test_items = [
... ("RED", "Red", "", 1),
... ("GREEN", "Green", "", 2),
... ("BLUE", "Blue", "", 3),
... ("YELLOW", "Yellow", "", 4),
... ]
>>> bpy.types.Scene.my_enum = bpy.props.EnumProperty(name="Foo", items=test_items)
>>> bpy.types.Scene.bl_rna.properties['my_enum'].name
'Foo'
>>> bpy.types.Scene.bl_rna.properties['my_enum'].enum_items[0]
<bpy_struct, EnumPropertyItem("RED")>
>>> bpy.types.Scene.bl_rna.properties['my_enum'].enum_items[0].name
'Red'
No caso de uma propriedade de operador, sugiro ler os valores do dict de anotação de operadores:
class SimpleOperator(bpy.types.Operator):
"""Tooltip"""
bl_idname = "object.simple_operator"
bl_label = "Simple Object Operator"
my_prop: bpy.props.StringProperty(name="foo")
def execute(self, context):
# via bl_rna
print (self.properties.bl_rna.properties['my_prop'].name)
# using annotations
print (self.__annotations__.items())
print (self.__annotations__['my_prop'][1]['name'])
return {'FINISHED'}