Python 将自定义参数作为函数传递给Blender运算符
我在Blender中创建了一个python脚本,用于获取有关对象的信息。然后将所述信息存储在numpy阵列列表中以供以后使用。起初,我想使用这些信息让相机以某种方式移动,但运行脚本会将3D环境冻结到执行结束 很多人建议使用运算符,但运算符(据我所知)只接受非常特殊且不方便的参数。例如,这里我们有一个示例运算符Python 将自定义参数作为函数传递给Blender运算符,python,numpy,blender,Python,Numpy,Blender,我在Blender中创建了一个python脚本,用于获取有关对象的信息。然后将所述信息存储在numpy阵列列表中以供以后使用。起初,我想使用这些信息让相机以某种方式移动,但运行脚本会将3D环境冻结到执行结束 很多人建议使用运算符,但运算符(据我所知)只接受非常特殊且不方便的参数。例如,这里我们有一个示例运算符 import bpy class DialogOperator(bpy.types.Operator): bl_idname = "object.dialog_operator
import bpy
class DialogOperator(bpy.types.Operator):
bl_idname = "object.dialog_operator"
bl_label = "Simple Dialog Operator"
my_float = bpy.props.FloatProperty(name="Some Floating Point")
my_bool = bpy.props.BoolProperty(name="Toggle Option")
my_string = bpy.props.StringProperty(name="String Value")
def execute(self, context):
message = "Popup Values: %f, %d, '%s'" % \
(self.my_float, self.my_bool, self.my_string)
self.report({'INFO'}, message)
return {'FINISHED'}
def invoke(self, context, event):
wm = context.window_manager
return wm.invoke_props_dialog(self)
bpy.utils.register_class(DialogOperator)
# test call
bpy.ops.object.dialog_operator('INVOKE_DEFAULT')
人们可以选择写
# test call
bpy.ops.object.dialog_operator('INVOKE_DEFAULT',myfloat=2.3,...)
以便为操作员内定义的参数设置值。我的问题是,只有“bpy.props.***属性”形式的运算符中的字段才能以这种方式分配
有没有人知道如何将所需的参数集传递给操作符,就像将参数传递给函数一样
注意:我认为间接传递参数的一种丑陋方式是将要传递的变量集声明为全局变量…要移动相机并获得更新的三维视图,请尝试使用。调用
execute()
并返回{'RUNNING_MODAL'}
时,将重复调用运算符MODAL()
方法,直到它返回{'FINISHED'}
或{'CANCELLED'}
。在modal()
中,您可以更改内容并在调用之间更新3DView
使用将属性添加到运算符类是获得在blender中工作的属性的方式。虽然我们可以添加操作员可以在其自身内使用的常规属性,但我们必须使用bpy.props
来定义操作员在执行和影响其操作期间设置的可用属性,用户可以在操作员属性面板中调整这些属性,并影响操作员的撤消/重做
Bool、Int和Float属性有“向量”版本,因此您可以在一个属性中有多个值。要获得更大的灵活性,您可能需要使用或查看定义自定义
存储值的其他选项包括向场景或对象添加属性,也可以使用模块属性(插件是python模块)或使用