我正在嘗試定義與多維數據集的面相同的數字攪拌機屬性,而不用手動拒絕它們。在週期中定義攪拌機性能
因此,像這樣:
atr = bpy.types.Scene
for i in range(0,20):
//Define a intProperty to do stuffs.
而且在面板上繪製函數分別給他們打電話,這可能嗎?
我正在嘗試定義與多維數據集的面相同的數字攪拌機屬性,而不用手動拒絕它們。在週期中定義攪拌機性能
因此,像這樣:
atr = bpy.types.Scene
for i in range(0,20):
//Define a intProperty to do stuffs.
而且在面板上繪製函數分別給他們打電話,這可能嗎?
有兩種方法可以將新屬性添加到攪拌器中的對象。一種簡單的動態方法是使用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)
[此問題](http://blender.stackexchange.com/q/54038/935)包含創建新屬性的示例。 – sambler
我想知道如何在一個循環中創建屬性,我查看了這個問題,但我無法以任何方式找到答案,任何建議? – Fabrizio