2015-05-13 295 views
0

比方說,我有此腳本彈出菜單中有一個變量(我的是更復雜,但是爲了清楚而簡化)設置默認值

import bpy 
from bpy.props import * 

class DialogOperator(bpy.types.Operator): 
    bl_idname = "object.dialog_operator" 
    bl_label = "Test" 

    defValue = bpy.context.active_object.scale[1] 

    propertyScale = IntProperty(
        name = "Scale", 
        default = defValue) 

    def execute(self, context): 
     return {'FINISHED'} 

    def invoke(self, context, event): 
     wm = context.window_manager 
     return wm.invoke_props_dialog(self) 

bpy.utils.register_class(DialogOperator) 
bpy.ops.object.dialog_operator('INVOKE_DEFAULT') 

而且我們說,我有兩個立方體不同規模值,每次我將這個彈出菜單稱爲「我的默認值」時,我想縮放當前選定的多維數據集的值。

這上面的腳本不能正常工作,當您通過「運行腳本」按鈕,但在那之後運行它,如果你按「空格」,發現劇本有根據目前的活動對象也不會調整默認值它的工作原理。

有什麼辦法如何做到這一點?我認爲這應該很容易,但我錯過了一些東西。

回答

0

我搜索網頁,發現這個約調用函數

Operator.invoke用於此刻的操作被稱爲初始化從上下文操作(from here)。 invoke()通常用於分配屬性然後將其用於通過​​。一些操作員沒有​​功能,從腳本或宏中刪除了重複的功能。 這個例子展示瞭如何定義一個操作者它獲取鼠標輸入來執行功能和這個操作符可以調用或從Python API執行。 還要注意該操作員定義了它自己的特性,這些都是典型的類性質的不同,因爲他們攪拌器與運營商登記,調用時,保存用於操作者撤消/重做和自動添加到用戶界面作爲參數來使用。

代碼:

import bpy 
class SimpleMouseOperator(bpy.types.Operator): 
    """ This operator shows the mouse location, 
     this string is used for the tooltip and API docs 
    """ 
    bl_idname = "wm.mouse_position" 
    bl_label = "Invoke Mouse Operator" 

    x = bpy.props.IntProperty() 
    y = bpy.props.IntProperty() 

    def execute(self, context): 
     # rather then printing, use the report function, 
     # this way the messag appiers in the header, 
     self.report({'INFO'}, "Mouse coords are %d %d" % (self.x, self.y)) 
     return {'FINISHED'} 

    def invoke(self, context, event): 
     self.x = event.mouse_x 
     self.y = event.mouse_y 
     return self.execute(context) 

bpy.utils.register_class(SimpleMouseOperator) 

# Test call to the newly defined operator. 
# Here we call the operator and invoke it, meaning that the settings are taken 
# from the mouse. 
bpy.ops.wm.mouse_position('INVOKE_DEFAULT') 

# Another test call, this time call execute() directly with pre-defined settings. 
bpy.ops.wm.mouse_position('EXEC_DEFAULT', x=20, y=66) 

這應該說明一切爲大家誰擁有類似的問題。