2016-08-26 1 views
0

Я пытаюсь определить свойство блендера числа, которое совпадает с линией куба, не отбрасывая их вручную.Определить свойства блендера в цикле

Так что-то вроде этого:

atr = bpy.types.Scene 
for i in range(0,20): 
    //Define a intProperty to do stuffs. 

и вызов их по отдельности в функции вытягивания панели, возможно ли это?

+0

[Этот вопрос] (http://blender.stackexchange.com/q/54038/935) содержит примеры создания новых свойств. – sambler

+0

Мне было интересно, как я могу создавать свойства в цикле, я посмотрел на вопрос, но я никак не могу найти ответ, любое предложение? – Fabrizio

ответ

0

Есть два способа добавить новые объекты к объектам в блендере. Простым динамическим способом является использование custom properties путем присвоения значения ключу, как если бы объектом был словарь. Это то же самое, что использовать панель пользовательских свойств в object properties. Чтобы получить это значение в сценарии вы продолжаете с помощью словаря стиль - obj['myprop0']

import bpy 
obj = bpy.context.object 
for i in range(0,20): 
    obj['myprop'+str(i)] = i 

Более структурированный способ, который позволяет ввести проверку, так что вы можете, например, только присвоить Int свойству, которое добавить property to the object class definition, они также отображаются в панели настраиваемых свойств, но отображаются как «Определенный API». Чтобы сделать это с помощью сгенерированных имен свойств, вы хотите выполнить часть кода, который вы создаете. Этот метод создает истинное свойство, доступ к таким же, как и другие свойства в определении класса - obj.myprop0

import bpy 
for i in range(0,20): 
    cmd = 'bpy.types.Object.myprop{} = bpy.props.IntProperty()'.format(i) 
    exec(compile(cmd, 'myprops', 'exec')) 

Имейте в виду, что оба подхода занимают то же пространство имен, так что если вы используете то же имя свойства в обоих методах вы будете получить доступ к одному и тому же свойству, и оба способа отображения свойства будут работать. Определения bpy.props переопределяют свойства стиля словаря.

Каждый подход к доступу осуществляется несколько иначе при отображении свойства в панели. Для свойства словарного стиля вы используете row.prop(obj,'["myprop'+str(i)+'"]'), а при использовании bpy.props вы используете row.prop(obj,'myprop'+str(i)) - обратите внимание, что в первом подходе вы используете имя свойства, содержащееся в [], как доступ к любому значению словаря.

import bpy 
class myPanel(bpy.types.Panel): 
    """Creates a Panel in the Object properties window""" 
    bl_label = "My properties Panel" 
    bl_idname = "OBJECT_PT_myprops" 
    bl_space_type = 'PROPERTIES' 
    bl_region_type = 'WINDOW' 
    bl_context = "object" 

    def draw(self, context): 
     layout = self.layout 
     obj = context.object 

     row = layout.row() 
     row.label('dynamic properties') 
     for i in range(0,20): 
      row = layout.row() 
      row.prop(obj,'["myprop'+str(i)+'"]') 

     row = layout.row() 
     row.label('structured properties') 
     for i in range(0,20): 
      row = layout.row() 
      row.prop(obj,'myprop'+str(i)) 

bpy.utils.register_class(myPanel) 

 Смежные вопросы

  • Нет связанных вопросов^_^